diff --git a/contrib/toolchain/gcc/5x/gcc/auto-host.h b/contrib/toolchain/gcc/5x/gcc/auto-host.h new file mode 100644 index 0000000000..f538f262c0 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/auto-host.h @@ -0,0 +1,2262 @@ +/* auto-host.h. Generated from config.in by configure. */ +/* config.in. Generated from configure.ac by autoheader. */ + +/* Define if this compiler should be built as the offload target compiler. */ +#ifndef USED_FOR_TARGET +/* #undef ACCEL_COMPILER */ +#endif + + +/* Define if building universal (internal helper macro) */ +#ifndef USED_FOR_TARGET +/* #undef AC_APPLE_UNIVERSAL_BUILD */ +#endif + + +/* Define to the assembler option to enable compressed debug sections. */ +#ifndef USED_FOR_TARGET +#define AS_COMPRESS_DEBUG_OPTION "--compress-debug-sections" +#endif + + +/* Define to the assembler option to disable compressed debug sections. */ +#ifndef USED_FOR_TARGET +#define AS_NO_COMPRESS_DEBUG_OPTION "--nocompress-debug-sections" +#endif + + +/* Define as the number of bits in a byte, if `limits.h' doesn't. */ +#ifndef USED_FOR_TARGET +/* #undef CHAR_BIT */ +#endif + + +/* Define 0/1 to force the choice for exception handling model. */ +#ifndef USED_FOR_TARGET +#define CONFIG_SJLJ_EXCEPTIONS 0 +#endif + + +/* Define to enable the use of a default assembler. */ +#ifndef USED_FOR_TARGET +/* #undef DEFAULT_ASSEMBLER */ +#endif + + +/* Define to enable the use of a default linker. */ +#ifndef USED_FOR_TARGET +/* #undef DEFAULT_LINKER */ +#endif + + +/* Define if you want to use __cxa_atexit, rather than atexit, to register C++ + destructors for local statics and global objects. This is essential for + fully standards-compliant handling of destructors, but requires + __cxa_atexit in libc. */ +#ifndef USED_FOR_TARGET +#define DEFAULT_USE_CXA_ATEXIT 2 +#endif + + +/* The default for -fdiagnostics-color option */ +#ifndef USED_FOR_TARGET +#define DIAGNOSTICS_COLOR_DEFAULT DIAGNOSTICS_COLOR_AUTO +#endif + + +/* Define if you want assertions enabled. This is a cheap check. */ +#ifndef USED_FOR_TARGET +#define ENABLE_ASSERT_CHECKING 1 +#endif + + +/* Define if you want more run-time sanity checks. This one gets a grab bag of + miscellaneous but relatively cheap checks. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_CHECKING */ +#endif + + +/* Define to 1 to specify that we are using the BID decimal floating point + format instead of DPD */ +#ifndef USED_FOR_TARGET +#define ENABLE_DECIMAL_BID_FORMAT 1 +#endif + + +/* Define to 1 to enable decimal float extension to C. */ +#ifndef USED_FOR_TARGET +#define ENABLE_DECIMAL_FLOAT 1 +#endif + + +/* Define if you want more run-time sanity checks for dataflow. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_DF_CHECKING */ +#endif + + +/* Define to 1 to enable fixed-point arithmetic extension to C. */ +#ifndef USED_FOR_TARGET +#define ENABLE_FIXED_POINT 0 +#endif + + +/* Define if you want fold checked that it never destructs its argument. This + is quite expensive. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_FOLD_CHECKING */ +#endif + + +/* Define if you want the garbage collector to operate in maximally paranoid + mode, validating the entire heap and collecting garbage at every + opportunity. This is extremely expensive. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_GC_ALWAYS_COLLECT */ +#endif + + +/* Define if you want the garbage collector to do object poisoning and other + memory allocation checks. This is quite expensive. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_GC_CHECKING */ +#endif + + +/* Define if you want operations on GIMPLE (the basic data structure of the + high-level optimizers) to be checked for dynamic type safety at runtime. + This is moderately expensive. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_GIMPLE_CHECKING */ +#endif + + +/* Define if gcc should always pass --build-id to linker. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_LD_BUILDID */ +#endif + + +/* Define to 1 to enable libquadmath support */ +#ifndef USED_FOR_TARGET +#define ENABLE_LIBQUADMATH_SUPPORT 1 +#endif + + +/* Define to enable LTO support. */ +#ifndef USED_FOR_TARGET +#define ENABLE_LTO 1 +#endif + + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_NLS */ +#endif + + +/* Define this to enable support for offloading. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_OFFLOADING */ +#endif + + +/* Define to enable plugin support. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_PLUGIN */ +#endif + + +/* Define if you want all operations on RTL (the basic data structure of the + optimizer and back end) to be checked for dynamic type safety at runtime. + This is quite expensive. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_RTL_CHECKING */ +#endif + + +/* Define if you want RTL flag accesses to be checked against the RTL codes + that are supported for each access macro. This is relatively cheap. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_RTL_FLAG_CHECKING */ +#endif + + +/* Define if you want runtime assertions enabled. This is a cheap check. */ +#define ENABLE_RUNTIME_CHECKING 1 + +/* Define if you want all operations on trees (the basic data structure of the + front ends) to be checked for dynamic type safety at runtime. This is + moderately expensive. The tree browser debugging routines will also be + enabled by this option. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_TREE_CHECKING */ +#endif + + +/* Define if you want all gimple types to be verified after gimplifiation. + This is cheap. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_TYPES_CHECKING */ +#endif + + +/* Define to get calls to the valgrind runtime enabled. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_VALGRIND_ANNOTATIONS */ +#endif + + +/* Define if you want to run subprograms and generated programs through + valgrind (a memory checker). This is extremely expensive. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_VALGRIND_CHECKING */ +#endif + + +/* Define to 1 if installation paths should be looked up in the Windows + Registry. Ignored on non-Windows hosts. */ +#ifndef USED_FOR_TARGET +/* #undef ENABLE_WIN32_REGISTRY */ +#endif + + +/* Define to the name of a file containing a list of extra machine modes for + this architecture. */ +#ifndef USED_FOR_TARGET +#define EXTRA_MODES_FILE "config/i386/i386-modes.def" +#endif + + +/* Define to enable detailed memory allocation stats gathering. */ +#ifndef USED_FOR_TARGET +#define GATHER_STATISTICS 0 +#endif + + +/* Define to 1 if `TIOCGWINSZ' requires . */ +#ifndef USED_FOR_TARGET +/* #undef GWINSZ_IN_SYS_IOCTL */ +#endif + + +/* mcontext_t fields start with __ */ +#ifndef USED_FOR_TARGET +/* #undef HAS_MCONTEXT_T_UNDERSCORES */ +#endif + + +/* Define if your avr assembler supports --mlink-relax option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_AVR_MLINK_RELAX_OPTION */ +#endif + + +/* Define if your avr assembler supports -mrmw option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_AVR_MRMW_OPTION */ +#endif + + +/* Define if your assembler supports cmpb. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_CMPB */ +#endif + + +/* Define to the level of your assembler's compressed debug section support. + */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_COMPRESS_DEBUG 1 +#endif + + +/* Define if your assembler supports the DCI/ICI instructions. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_DCI */ +#endif + + +/* Define if your assembler supports the --debug-prefix-map option. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_DEBUG_PREFIX_MAP 1 +#endif + + +/* Define if your assembler supports DFP instructions. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_DFP */ +#endif + + +/* Define if your assembler supports .module. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_DOT_MODULE */ +#endif + + +/* Define if your assembler supports DSPR1 mult. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_DSPR1_MULT */ +#endif + + +/* Define if your assembler supports .dtprelword. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_DTPRELWORD */ +#endif + + +/* Define if your assembler supports dwarf2 .file/.loc directives, and + preserves file table indices exactly as given. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_DWARF2_DEBUG_LINE 1 +#endif + + +/* Define if your assembler supports explicit relocations. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_EXPLICIT_RELOCS */ +#endif + + +/* Define if your assembler supports FMAF, HPC, and VIS 3.0 instructions. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_FMAF_HPC_VIS3 */ +#endif + + +/* Define if your assembler supports fprnd. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_FPRND */ +#endif + + +/* Define if your assembler supports the --gdwarf2 option. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_GDWARF2_DEBUG_FLAG 1 +#endif + + +/* Define if your assembler supports .gnu_attribute. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_GNU_ATTRIBUTE */ +#endif + + +/* Define true if the assembler supports '.long foo@GOTOFF'. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_GOTOFF_IN_DATA 1 +#endif + + +/* Define if your assembler supports the --gstabs option. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_GSTABS_DEBUG_FLAG 1 +#endif + + +/* Define if your assembler supports the Sun syntax for cmov. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_IX86_CMOV_SUN_SYNTAX */ +#endif + + +/* Define if your assembler supports the subtraction of symbols in different + sections. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_DIFF_SECT_DELTA 1 +#endif + + +/* Define if your assembler supports the ffreep mnemonic. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_FFREEP 1 +#endif + + +/* Define if your assembler uses fildq and fistq mnemonics. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_FILDQ 1 +#endif + + +/* Define if your assembler uses filds and fists mnemonics. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_FILDS 1 +#endif + + +/* Define if your assembler supports HLE prefixes. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_HLE 1 +#endif + + +/* Define if your assembler supports interunit movq mnemonic. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_INTERUNIT_MOVQ 1 +#endif + + +/* Define if your assembler supports the .quad directive. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_QUAD 1 +#endif + + +/* Define if the assembler supports 'rep , lock '. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_REP_LOCK_PREFIX 1 +#endif + + +/* Define if your assembler supports the sahf mnemonic in 64bit mode. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_SAHF 1 +#endif + + +/* Define if your assembler supports the swap suffix. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_SWAP 1 +#endif + + +/* Define if your assembler and linker support @tlsgdplt. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_IX86_TLSGDPLT */ +#endif + + +/* Define to 1 if your assembler and linker support @tlsldm. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_TLSLDM 0 +#endif + + +/* Define to 1 if your assembler and linker support @tlsldmplt. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_TLSLDMPLT 0 +#endif + + +/* Define if your assembler supports the 'ud2' mnemonic. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_IX86_UD2 1 +#endif + + +/* Define if your assembler supports the lituse_jsrdirect relocation. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_JSRDIRECT_RELOCS */ +#endif + + +/* Define if your assembler supports .sleb128 and .uleb128. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_LEB128 1 +#endif + + +/* Define if your assembler supports LEON instructions. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_LEON */ +#endif + + +/* Define if the assembler won't complain about a line such as # 0 "" 2. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_LINE_ZERO 1 +#endif + + +/* Define if your assembler supports ltoffx and ldxmov relocations. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_LTOFFX_LDXMOV_RELOCS */ +#endif + + +/* Define if your assembler supports LWSYNC instructions. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_LWSYNC */ +#endif + + +/* Define if your assembler supports the -mabi option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_MABI_OPTION */ +#endif + + +/* Define if your assembler supports mfcr field. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_MFCRF */ +#endif + + +/* Define if your assembler supports mffgpr and mftgpr. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_MFPGPR */ +#endif + + +/* Define if the assembler understands -mnan=. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_NAN */ +#endif + + +/* Define if your assembler supports the -no-mul-bug-abort option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_NO_MUL_BUG_ABORT_OPTION */ +#endif + + +/* Define if the assembler understands -mno-shared. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_NO_SHARED */ +#endif + + +/* Define if your assembler supports offsetable %lo(). */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_OFFSETABLE_LO10 */ +#endif + + +/* Define if your assembler supports popcntb field. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_POPCNTB */ +#endif + + +/* Define if your assembler supports POPCNTD instructions. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_POPCNTD */ +#endif + + +/* Define if your assembler supports POWER8 instructions. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_POWER8 */ +#endif + + +/* Define if your assembler supports .ref */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_REF */ +#endif + + +/* Define if your assembler supports .register. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ +#endif + + +/* Define if your assembler supports R_PPC_REL16 relocs. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_REL16 */ +#endif + + +/* Define if your assembler supports -relax option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_RELAX_OPTION */ +#endif + + +/* Define if your assembler supports SPARC4 instructions. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_SPARC4 */ +#endif + + +/* Define if your assembler and linker support GOTDATA_OP relocs. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_SPARC_GOTDATA_OP */ +#endif + + +/* Define to 1 if your assembler supports #nobits, 0 otherwise. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_SPARC_NOBITS */ +#endif + + +/* Define if your assembler and linker support unaligned PC relative relocs. + */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_SPARC_UA_PCREL */ +#endif + + +/* Define if your assembler and linker support unaligned PC relative relocs + against hidden symbols. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_SPARC_UA_PCREL_HIDDEN */ +#endif + + +/* Define if your assembler supports .stabs. */ +#ifndef USED_FOR_TARGET +#define HAVE_AS_STABS_DIRECTIVE 1 +#endif + + +/* Define if your assembler and linker support thread-local storage. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_TLS */ +#endif + + +/* Define if your assembler supports arg info for __tls_get_addr. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_TLS_MARKERS */ +#endif + + +/* Define if your assembler supports VSX instructions. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_AS_VSX */ +#endif + + +/* Define to 1 if you have the `atoll' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_ATOLL 1 +#endif + + +/* Define to 1 if you have the `atoq' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_ATOQ */ +#endif + + +/* Define to 1 if you have the `clearerr_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_CLEARERR_UNLOCKED */ +#endif + + +/* Define to 1 if you have the `clock' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_CLOCK 1 +#endif + + +/* Define if defines clock_t. */ +#ifndef USED_FOR_TARGET +#define HAVE_CLOCK_T 1 +#endif + + +/* Define 0/1 if your assembler and linker support COMDAT groups. */ +#ifndef USED_FOR_TARGET +#define HAVE_COMDAT_GROUP 0 +#endif + + +/* Define to 1 if we found a declaration for 'abort', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_ABORT 1 +#endif + + +/* Define to 1 if we found a declaration for 'asprintf', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_ASPRINTF 0 +#endif + + +/* Define to 1 if we found a declaration for 'atof', otherwise define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_ATOF 1 +#endif + + +/* Define to 1 if we found a declaration for 'atol', otherwise define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_ATOL 1 +#endif + + +/* Define to 1 if we found a declaration for 'basename', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_BASENAME 0 +#endif + + +/* Define to 1 if we found a declaration for 'calloc', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_CALLOC 1 +#endif + + +/* Define to 1 if we found a declaration for 'clearerr_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_CLEARERR_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'clock', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_CLOCK 1 +#endif + + +/* Define to 1 if we found a declaration for 'errno', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_ERRNO 1 +#endif + + +/* Define to 1 if we found a declaration for 'feof_unlocked', otherwise define + to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FEOF_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'ferror_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FERROR_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'fflush_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FFLUSH_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'ffs', otherwise define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FFS 0 +#endif + + +/* Define to 1 if we found a declaration for 'fgetc_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FGETC_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'fgets_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FGETS_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'fileno_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FILENO_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'fprintf_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FPRINTF_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'fputc_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FPUTC_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'fputs_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FPUTS_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'fread_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FREAD_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'free', otherwise define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FREE 1 +#endif + + +/* Define to 1 if we found a declaration for 'fwrite_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_FWRITE_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'getchar_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETCHAR_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'getcwd', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETCWD 1 +#endif + + +/* Define to 1 if we found a declaration for 'getc_unlocked', otherwise define + to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETC_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'getenv', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETENV 1 +#endif + + +/* Define to 1 if we found a declaration for 'getopt', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETOPT 0 +#endif + + +/* Define to 1 if we found a declaration for 'getpagesize', otherwise define + to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETPAGESIZE 0 +#endif + + +/* Define to 1 if we found a declaration for 'getrlimit', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETRLIMIT 0 +#endif + + +/* Define to 1 if we found a declaration for 'getrusage', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETRUSAGE 0 +#endif + + +/* Define to 1 if we found a declaration for 'getwd', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_GETWD 0 +#endif + + +/* Define to 1 if we found a declaration for 'ldgetname', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_LDGETNAME 0 +#endif + + +/* Define to 1 if we found a declaration for 'madvise', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_MADVISE 0 +#endif + + +/* Define to 1 if we found a declaration for 'malloc', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_MALLOC 1 +#endif + + +/* Define to 1 if we found a declaration for 'putchar_unlocked', otherwise + define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_PUTCHAR_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'putc_unlocked', otherwise define + to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_PUTC_UNLOCKED 0 +#endif + + +/* Define to 1 if we found a declaration for 'realloc', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_REALLOC 1 +#endif + + +/* Define to 1 if we found a declaration for 'sbrk', otherwise define to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_SBRK 0 +#endif + + +/* Define to 1 if we found a declaration for 'setrlimit', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_SETRLIMIT 0 +#endif + + +/* Define to 1 if we found a declaration for 'sigaltstack', otherwise define + to 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_SIGALTSTACK 0 +#endif + + +/* Define to 1 if we found a declaration for 'snprintf', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_SNPRINTF 1 +#endif + + +/* Define to 1 if we found a declaration for 'stpcpy', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STPCPY 0 +#endif + + +/* Define to 1 if we found a declaration for 'strnlen', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STRNLEN 0 +#endif + + +/* Define to 1 if we found a declaration for 'strsignal', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STRSIGNAL 1 +#endif + + +/* Define to 1 if we found a declaration for 'strstr', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STRSTR 1 +#endif + + +/* Define to 1 if we found a declaration for 'strtol', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STRTOL 1 +#endif + + +/* Define to 1 if we found a declaration for 'strtoll', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STRTOLL 1 +#endif + + +/* Define to 1 if we found a declaration for 'strtoul', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STRTOUL 1 +#endif + + +/* Define to 1 if we found a declaration for 'strtoull', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STRTOULL 1 +#endif + + +/* Define to 1 if we found a declaration for 'strverscmp', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_STRVERSCMP 0 +#endif + + +/* Define to 1 if we found a declaration for 'times', otherwise define to 0. + */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_TIMES 0 +#endif + + +/* Define to 1 if we found a declaration for 'vasprintf', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_VASPRINTF 0 +#endif + + +/* Define to 1 if we found a declaration for 'vsnprintf', otherwise define to + 0. */ +#ifndef USED_FOR_TARGET +#define HAVE_DECL_VSNPRINTF 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_DIRECT_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_DLFCN_H */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_EXT_HASH_MAP 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_FCNTL_H 1 +#endif + + +/* Define to 1 if you have the `feof_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_FEOF_UNLOCKED */ +#endif + + +/* Define to 1 if you have the `ferror_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_FERROR_UNLOCKED */ +#endif + + +/* Define to 1 if you have the `fflush_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_FFLUSH_UNLOCKED */ +#endif + + +/* Define to 1 if you have the `fgetc_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_FGETC_UNLOCKED */ +#endif + + +/* Define to 1 if you have the `fgets_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_FGETS_UNLOCKED */ +#endif + + +/* Define to 1 if you have the `fileno_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_FILENO_UNLOCKED */ +#endif + + +/* Define to 1 if you have the `fork' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_FORK */ +#endif + + +/* Define to 1 if you have the `fprintf_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_FPRINTF_UNLOCKED */ +#endif + + +/* Define to 1 if you have the `fputc_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_FPUTC_UNLOCKED */ +#endif + + +/* Define to 1 if you have the `fputs_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_FPUTS_UNLOCKED */ +#endif + + +/* Define to 1 if you have the `fread_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_FREAD_UNLOCKED */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_FTW_H */ +#endif + + +/* Define to 1 if you have the `fwrite_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_FWRITE_UNLOCKED */ +#endif + + +/* Define if your assembler supports specifying the alignment of objects + allocated using the GAS .comm command. */ +#ifndef USED_FOR_TARGET +#define HAVE_GAS_ALIGNED_COMM 1 +#endif + + +/* Define if your assembler supports .balign and .p2align. */ +#ifndef USED_FOR_TARGET +#define HAVE_GAS_BALIGN_AND_P2ALIGN 1 +#endif + + +/* Define 0/1 if your assembler supports CFI directives. */ +#define HAVE_GAS_CFI_DIRECTIVE 1 + +/* Define 0/1 if your assembler supports .cfi_personality. */ +#define HAVE_GAS_CFI_PERSONALITY_DIRECTIVE 1 + +/* Define 0/1 if your assembler supports .cfi_sections. */ +#define HAVE_GAS_CFI_SECTIONS_DIRECTIVE 1 + +/* Define if your assembler supports the .loc discriminator sub-directive. */ +#ifndef USED_FOR_TARGET +#define HAVE_GAS_DISCRIMINATOR 1 +#endif + + +/* Define if your assembler supports @gnu_unique_object. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_GNU_UNIQUE_OBJECT */ +#endif + + +/* Define if your assembler and linker support .hidden. */ +/* #undef HAVE_GAS_HIDDEN */ + +/* Define if your assembler supports .lcomm with an alignment field. */ +#ifndef USED_FOR_TARGET +#define HAVE_GAS_LCOMM_WITH_ALIGNMENT 1 +#endif + + +/* Define if your assembler supports .literal16. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_LITERAL16 */ +#endif + + +/* Define if your assembler supports specifying the maximum number of bytes to + skip when using the GAS .p2align command. */ +#ifndef USED_FOR_TARGET +#define HAVE_GAS_MAX_SKIP_P2ALIGN 1 +#endif + + +/* Define if your assembler supports the .set micromips directive */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_MICROMIPS */ +#endif + + +/* Define if your assembler supports .nsubspa comdat option. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_NSUBSPA_COMDAT */ +#endif + + +/* Define if your assembler and linker support 32-bit section relative relocs + via '.secrel32 label'. */ +#ifndef USED_FOR_TARGET +#define HAVE_GAS_PE_SECREL32_RELOC 1 +#endif + + +/* Define if your assembler supports specifying the section flag e. */ +#ifndef USED_FOR_TARGET +#define HAVE_GAS_SECTION_EXCLUDE 1 +#endif + + +/* Define 0/1 if your assembler supports marking sections with SHF_MERGE flag. + */ +#ifndef USED_FOR_TARGET +#define HAVE_GAS_SHF_MERGE 0 +#endif + + +/* Define if your assembler supports .subsection and .subsection -1 starts + emitting at the beginning of your section. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GAS_SUBSECTION_ORDERING */ +#endif + + +/* Define if your assembler supports .weak. */ +#ifndef USED_FOR_TARGET +#define HAVE_GAS_WEAK 1 +#endif + + +/* Define if your assembler supports .weakref. */ +#ifndef USED_FOR_TARGET +#define HAVE_GAS_WEAKREF 1 +#endif + + +/* Define to 1 if you have the `getchar_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GETCHAR_UNLOCKED */ +#endif + + +/* Define to 1 if you have the `getc_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GETC_UNLOCKED */ +#endif + + +/* Define to 1 if you have the `getrlimit' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GETRLIMIT */ +#endif + + +/* Define to 1 if you have the `getrusage' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_GETRUSAGE */ +#endif + + +/* Define to 1 if you have the `gettimeofday' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_GETTIMEOFDAY 1 +#endif + + +/* Define to 1 if using GNU as. */ +#ifndef USED_FOR_TARGET +#define HAVE_GNU_AS 1 +#endif + + +/* Define if your system supports gnu indirect functions. */ +#ifndef USED_FOR_TARGET +#define HAVE_GNU_INDIRECT_FUNCTION 0 +#endif + + +/* Define to 1 if using GNU ld. */ +#ifndef USED_FOR_TARGET +#define HAVE_GNU_LD 1 +#endif + + +/* Define if you have the iconv() function. */ +#ifndef USED_FOR_TARGET +#define HAVE_ICONV 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_ICONV_H 1 +#endif + + +/* Define .init_array/.fini_array sections are available and working. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_INITFINI_ARRAY_SUPPORT */ +#endif + + +/* Define to 1 if the system has the type `intmax_t'. */ +#ifndef USED_FOR_TARGET +#define HAVE_INTMAX_T 1 +#endif + + +/* Define to 1 if the system has the type `intptr_t'. */ +#ifndef USED_FOR_TARGET +#define HAVE_INTPTR_T 1 +#endif + + +/* Define if you have a working header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_INTTYPES_H 1 +#endif + + +/* Define if isl_options_set_schedule_serialize_sccs exists. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS */ +#endif + + +/* Define if isl_schedule_constraints_compute_schedule exists. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE */ +#endif + + +/* Define to 1 if you have the `kill' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_KILL */ +#endif + + +/* Define if you have and nl_langinfo(CODESET). */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LANGINFO_CODESET */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LANGINFO_H */ +#endif + + +/* Define if your file defines LC_MESSAGES. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LC_MESSAGES */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LDFCN_H */ +#endif + + +/* Define if your linker supports --as-needed/--no-as-needed or equivalent + options. */ +#ifndef USED_FOR_TARGET +#define HAVE_LD_AS_NEEDED 1 +#endif + + +/* Define if your linker supports --build-id. */ +#ifndef USED_FOR_TARGET +#define HAVE_LD_BUILDID 1 +#endif + + +/* Define if the linker supports clearing hardware capabilities via mapfile. + */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_CLEARCAP */ +#endif + + +/* Define to the level of your linker's compressed debug section support. */ +#ifndef USED_FOR_TARGET +#define HAVE_LD_COMPRESS_DEBUG 1 +#endif + + +/* Define if your linker supports --demangle option. */ +#ifndef USED_FOR_TARGET +#define HAVE_LD_DEMANGLE 1 +#endif + + +/* Define 0/1 if your linker supports CIE v3 in .eh_frame. */ +#ifndef USED_FOR_TARGET +#define HAVE_LD_EH_FRAME_CIEV3 1 +#endif + + +/* Define if your linker supports .eh_frame_hdr. */ +/* #undef HAVE_LD_EH_FRAME_HDR */ + +/* Define if your linker supports garbage collection of sections in presence + of EH frames. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_EH_GC_SECTIONS */ +#endif + + +/* Define if your linker has buggy garbage collection of sections support when + .text.startup.foo like sections are used. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_EH_GC_SECTIONS_BUG */ +#endif + + +/* Define if your PowerPC64 linker supports a large TOC. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_LARGE_TOC */ +#endif + + +/* Define if your PowerPC64 linker only needs function descriptor syms. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_NO_DOT_SYMS */ +#endif + + +/* Define if your linker can relax absolute .eh_frame personality pointers + into PC-relative form. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_PERSONALITY_RELAXATION */ +#endif + + +/* Define if your linker supports PIE option. */ +#ifndef USED_FOR_TARGET +#define HAVE_LD_PIE 1 +#endif + + +/* Define 0/1 if your linker supports -pie option with copy reloc. */ +#ifndef USED_FOR_TARGET +#define HAVE_LD_PIE_COPYRELOC 0 +#endif + + +/* Define if your linker links a mix of read-only and read-write sections into + a read-write section. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_RO_RW_SECTION_MIXING */ +#endif + + +/* Define if your linker supports the *_sol2 emulations. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_LD_SOL2_EMULATION */ +#endif + + +/* Define if your linker supports -Bstatic/-Bdynamic or equivalent options. */ +#ifndef USED_FOR_TARGET +#define HAVE_LD_STATIC_DYNAMIC 1 +#endif + + +/* Define if your linker supports --sysroot. */ +#ifndef USED_FOR_TARGET +#define HAVE_LD_SYSROOT 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_LIMITS_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_LOCALE_H 1 +#endif + + +/* Define to 1 if the system has the type `long long'. */ +#ifndef USED_FOR_TARGET +#define HAVE_LONG_LONG 1 +#endif + + +/* Define to 1 if the system has the type `long long int'. */ +#ifndef USED_FOR_TARGET +#define HAVE_LONG_LONG_INT 1 +#endif + + +/* Define to the level of your linker's plugin support. */ +#ifndef USED_FOR_TARGET +#define HAVE_LTO_PLUGIN 2 +#endif + + +/* Define to 1 if you have the `madvise' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_MADVISE */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_MALLOC_H 1 +#endif + + +/* Define to 1 if you have the `mbstowcs' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_MBSTOWCS 1 +#endif + + +/* Define if valgrind's memcheck.h header is installed. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_MEMCHECK_H */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_MEMORY_H 1 +#endif + + +/* Define to 1 if you have the `mmap' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_MMAP */ +#endif + + +/* Define if mmap with MAP_ANON(YMOUS) works. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_MMAP_ANON */ +#endif + + +/* Define if mmap of /dev/zero works. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_MMAP_DEV_ZERO */ +#endif + + +/* Define if read-only mmap of a plain file works. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_MMAP_FILE */ +#endif + + +/* Define to 1 if you have the `nl_langinfo' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_NL_LANGINFO */ +#endif + + +/* Define to 1 if you have the `popen' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_POPEN 1 +#endif + + +/* Define to 1 if you have the `putchar_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_PUTCHAR_UNLOCKED */ +#endif + + +/* Define to 1 if you have the `putc_unlocked' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_PUTC_UNLOCKED */ +#endif + + +/* Define to 1 if you have the `setlocale' function. */ +#ifndef USED_FOR_TARGET +#define HAVE_SETLOCALE 1 +#endif + + +/* Define to 1 if you have the `setrlimit' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_SETRLIMIT */ +#endif + + +/* Define if the system-provided CRTs are present on Solaris. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_SOLARIS_CRTS */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_STDDEF_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_STDINT_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_STDLIB_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_STRINGS_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_STRING_H 1 +#endif + + +/* Define to 1 if you have the `strsignal' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_STRSIGNAL */ +#endif + + +/* Define if defines struct tms. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_STRUCT_TMS */ +#endif + + +/* Define to 1 if you have the `sysconf' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_SYSCONF */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_SYS_FILE_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_SYS_MMAN_H */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_SYS_PARAM_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_SYS_RESOURCE_H */ +#endif + + +/* Define if your target C library provides sys/sdt.h */ +/* #undef HAVE_SYS_SDT_H */ + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_SYS_STAT_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_SYS_TIMES_H */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_SYS_TIME_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_SYS_TYPES_H 1 +#endif + + +/* Define to 1 if you have that is POSIX.1 compatible. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_SYS_WAIT_H */ +#endif + + +/* Define to 1 if you have the `times' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_TIMES */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_TIME_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_TR1_UNORDERED_MAP 1 +#endif + + +/* Define to 1 if the system has the type `uintmax_t'. */ +#ifndef USED_FOR_TARGET +#define HAVE_UINTMAX_T 1 +#endif + + +/* Define to 1 if the system has the type `uintptr_t'. */ +#ifndef USED_FOR_TARGET +#define HAVE_UINTPTR_T 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_UNISTD_H 1 +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_UNORDERED_MAP */ +#endif + + +/* Define to 1 if the system has the type `unsigned long long int'. */ +#ifndef USED_FOR_TARGET +#define HAVE_UNSIGNED_LONG_LONG_INT 1 +#endif + + +/* Define if valgrind's valgrind/memcheck.h header is installed. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_VALGRIND_MEMCHECK_H */ +#endif + + +/* Define to 1 if you have the `vfork' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_VFORK */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_VFORK_H */ +#endif + + +/* Define to 1 if you have the header file. */ +#ifndef USED_FOR_TARGET +#define HAVE_WCHAR_H 1 +#endif + + +/* Define to 1 if you have the `wcswidth' function. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_WCSWIDTH */ +#endif + + +/* Define to 1 if `fork' works. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_WORKING_FORK */ +#endif + + +/* Define this macro if mbstowcs does not crash when its first argument is + NULL. */ +#ifndef USED_FOR_TARGET +#define HAVE_WORKING_MBSTOWCS 1 +#endif + + +/* Define to 1 if `vfork' works. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_WORKING_VFORK */ +#endif + + +/* Define if isl is in use. */ +#ifndef USED_FOR_TARGET +/* #undef HAVE_isl */ +#endif + + +/* Define if F_SETLKW supported by fcntl. */ +#ifndef USED_FOR_TARGET +/* #undef HOST_HAS_F_SETLKW */ +#endif + + +/* Define as const if the declaration of iconv() needs const. */ +#ifndef USED_FOR_TARGET +#define ICONV_CONST +#endif + + +/* Define if int64_t uses long as underlying type. */ +#ifndef USED_FOR_TARGET +/* #undef INT64_T_IS_LONG */ +#endif + + +/* Define to the linker option to ignore unused dependencies. */ +#ifndef USED_FOR_TARGET +#define LD_AS_NEEDED_OPTION "--as-needed" +#endif + + +/* Define to the linker option to enable compressed debug sections. */ +#ifndef USED_FOR_TARGET +#define LD_COMPRESS_DEBUG_OPTION "" +#endif + + +/* Define to the linker option to enable use of shared objects. */ +#ifndef USED_FOR_TARGET +#define LD_DYNAMIC_OPTION "-Bdynamic" +#endif + + +/* Define to the linker option to keep unused dependencies. */ +#ifndef USED_FOR_TARGET +#define LD_NO_AS_NEEDED_OPTION "--no-as-needed" +#endif + + +/* Define to the linker option to disable use of shared objects. */ +#ifndef USED_FOR_TARGET +#define LD_STATIC_OPTION "-Bstatic" +#endif + + +/* The linker hash style */ +#ifndef USED_FOR_TARGET +/* #undef LINKER_HASH_STYLE */ +#endif + + +/* Define to the name of the LTO plugin DSO that must be passed to the + linker's -plugin=LIB option. */ +#ifndef USED_FOR_TARGET +#define LTOPLUGINSONAME "liblto_plugin-0.dll" +#endif + + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#ifndef USED_FOR_TARGET +#define LT_OBJDIR ".libs/" +#endif + + +/* Define if host mkdir takes a single argument. */ +#ifndef USED_FOR_TARGET +#define MKDIR_TAKES_ONE_ARG 1 +#endif + + +/* Define to hold the list of target names suitable for offloading. */ +#ifndef USED_FOR_TARGET +#define OFFLOAD_TARGETS "" +#endif + + +/* Define to the address where bug reports for this package should be sent. */ +#ifndef USED_FOR_TARGET +#define PACKAGE_BUGREPORT "" +#endif + + +/* Define to the full name of this package. */ +#ifndef USED_FOR_TARGET +#define PACKAGE_NAME "" +#endif + + +/* Define to the full name and version of this package. */ +#ifndef USED_FOR_TARGET +#define PACKAGE_STRING "" +#endif + + +/* Define to the one symbol short name of this package. */ +#ifndef USED_FOR_TARGET +#define PACKAGE_TARNAME "" +#endif + + +/* Define to the home page for this package. */ +#ifndef USED_FOR_TARGET +#define PACKAGE_URL "" +#endif + + +/* Define to the version of this package. */ +#ifndef USED_FOR_TARGET +#define PACKAGE_VERSION "" +#endif + + +/* Specify plugin linker */ +#ifndef USED_FOR_TARGET +#define PLUGIN_LD_SUFFIX "ld" +#endif + + +/* Define to PREFIX/include if cpp should also search that directory. */ +#ifndef USED_FOR_TARGET +#define PREFIX_INCLUDE_DIR "/home/autobuild/tools/win32/include" +#endif + + +/* The size of `int', as computed by sizeof. */ +#ifndef USED_FOR_TARGET +#define SIZEOF_INT 4 +#endif + + +/* The size of `long', as computed by sizeof. */ +#ifndef USED_FOR_TARGET +#define SIZEOF_LONG 4 +#endif + + +/* The size of `long long', as computed by sizeof. */ +#ifndef USED_FOR_TARGET +#define SIZEOF_LONG_LONG 8 +#endif + + +/* The size of `short', as computed by sizeof. */ +#ifndef USED_FOR_TARGET +#define SIZEOF_SHORT 2 +#endif + + +/* The size of `void *', as computed by sizeof. */ +#ifndef USED_FOR_TARGET +#define SIZEOF_VOID_P 4 +#endif + + +/* Define to 1 if you have the ANSI C header files. */ +#ifndef USED_FOR_TARGET +#define STDC_HEADERS 1 +#endif + + +/* Define if you can safely include both and . */ +#ifndef USED_FOR_TARGET +#define STRING_WITH_STRINGS 1 +#endif + + +/* Define if TFmode long double should be the default */ +#ifndef USED_FOR_TARGET +/* #undef TARGET_DEFAULT_LONG_DOUBLE_128 */ +#endif + + +/* Define if your target C library provides the `dl_iterate_phdr' function. */ +/* #undef TARGET_DL_ITERATE_PHDR */ + +/* GNU C Library major version number used on the target, or 0. */ +#ifndef USED_FOR_TARGET +#define TARGET_GLIBC_MAJOR 0 +#endif + + +/* GNU C Library minor version number used on the target, or 0. */ +#ifndef USED_FOR_TARGET +#define TARGET_GLIBC_MINOR 0 +#endif + + +/* Define if your target C library provides stack protector support */ +#ifndef USED_FOR_TARGET +/* #undef TARGET_LIBC_PROVIDES_SSP */ +#endif + + +/* Define to 1 if you can safely include both and . */ +#ifndef USED_FOR_TARGET +#define TIME_WITH_SYS_TIME 1 +#endif + + +/* Define to the flag used to mark TLS sections if the default (`T') doesn't + work. */ +#ifndef USED_FOR_TARGET +/* #undef TLS_SECTION_ASM_FLAG */ +#endif + + +/* Define if your assembler mis-optimizes .eh_frame data. */ +#ifndef USED_FOR_TARGET +/* #undef USE_AS_TRADITIONAL_FORMAT */ +#endif + + +/* Define if you want to generate code by default that assumes that the Cygwin + DLL exports wrappers to support libstdc++ function replacement. */ +#ifndef USED_FOR_TARGET +/* #undef USE_CYGWIN_LIBSTDCXX_WRAPPERS */ +#endif + + +/* Define to 1 if the 'long long' type is wider than 'long' but still + efficiently supported by the host hardware. */ +#ifndef USED_FOR_TARGET +/* #undef USE_LONG_LONG_FOR_WIDEST_FAST_INT */ +#endif + + +/* Define if we should use leading underscore on 64 bit mingw targets */ +#ifndef USED_FOR_TARGET +/* #undef USE_MINGW64_LEADING_UNDERSCORES */ +#endif + + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif + + +/* Define to be the last component of the Windows registry key under which to + look for installation paths. The full key used will be + HKEY_LOCAL_MACHINE/SOFTWARE/Free Software Foundation/{WIN32_REGISTRY_KEY}. + The default is the GCC version number. */ +#ifndef USED_FOR_TARGET +/* #undef WIN32_REGISTRY_KEY */ +#endif + + +/* 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 + +/* Number of bits in a file offset, on hosts where this is settable. */ +#ifndef USED_FOR_TARGET +/* #undef _FILE_OFFSET_BITS */ +#endif + + +/* Define for large files, on AIX-style hosts. */ +#ifndef USED_FOR_TARGET +/* #undef _LARGE_FILES */ +#endif + + +/* Define to 1 if on MINIX. */ +#ifndef USED_FOR_TARGET +/* #undef _MINIX */ +#endif + + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#ifndef USED_FOR_TARGET +/* #undef _POSIX_1_SOURCE */ +#endif + + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#ifndef USED_FOR_TARGET +/* #undef _POSIX_SOURCE */ +#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. */ +#ifndef USED_FOR_TARGET +/* #undef _UINT32_T */ +#endif + + +/* 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. */ +#ifndef USED_FOR_TARGET +/* #undef _UINT64_T */ +#endif + + +/* 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. */ +#ifndef USED_FOR_TARGET +/* #undef _UINT8_T */ +#endif + + +/* Define to `char *' if does not define. */ +#ifndef USED_FOR_TARGET +#define caddr_t char * +#endif + + +/* 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. */ +#ifndef USED_FOR_TARGET +/* #undef int16_t */ +#endif + + +/* 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. */ +#ifndef USED_FOR_TARGET +/* #undef int32_t */ +#endif + + +/* 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. */ +#ifndef USED_FOR_TARGET +/* #undef int64_t */ +#endif + + +/* Define to the type of a signed integer type of width exactly 8 bits if such + a type exists and the standard includes do not define it. */ +#ifndef USED_FOR_TARGET +/* #undef int8_t */ +#endif + + +/* Define to the widest signed integer type if and do + not define. */ +#ifndef USED_FOR_TARGET +/* #undef intmax_t */ +#endif + + +/* Define to the type of a signed integer type wide enough to hold a pointer, + if such a type exists, and if the system does not define it. */ +#ifndef USED_FOR_TARGET +/* #undef intptr_t */ +#endif + + +/* Define to `int' if does not define. */ +#ifndef USED_FOR_TARGET +/* #undef pid_t */ +#endif + + +/* Define to `long' if doesn't define. */ +#ifndef USED_FOR_TARGET +#define rlim_t long +#endif + + +/* Define to `int' if does not define. */ +#ifndef USED_FOR_TARGET +/* #undef ssize_t */ +#endif + + +/* 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. */ +#ifndef USED_FOR_TARGET +/* #undef uint16_t */ +#endif + + +/* 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. */ +#ifndef USED_FOR_TARGET +/* #undef uint32_t */ +#endif + + +/* 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. */ +#ifndef USED_FOR_TARGET +/* #undef uint64_t */ +#endif + + +/* 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. */ +#ifndef USED_FOR_TARGET +/* #undef uint8_t */ +#endif + + +/* Define to the widest unsigned integer type if and + do not define. */ +#ifndef USED_FOR_TARGET +/* #undef uintmax_t */ +#endif + + +/* Define to the type of an unsigned integer type wide enough to hold a + pointer, if such a type exists, and if the system does not define it. */ +#ifndef USED_FOR_TARGET +/* #undef uintptr_t */ +#endif + + +/* Define as `fork' if `vfork' does not work. */ +#ifndef USED_FOR_TARGET +#define vfork fork +#endif + diff --git a/contrib/toolchain/gcc/5x/gcc/config/dbxcoff.h b/contrib/toolchain/gcc/5x/gcc/config/dbxcoff.h new file mode 100644 index 0000000000..5074be03b0 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/config/dbxcoff.h @@ -0,0 +1,62 @@ +/* Definitions needed when using stabs embedded in COFF sections. + Copyright (C) 1996-2015 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 +. */ + +/* This file may be included by any COFF target which wishes to + support -gstabs generating stabs in sections, as produced by gas + and understood by gdb. */ + +/* Output DBX (stabs) debugging information if doing -gstabs. */ + +#define DBX_DEBUGGING_INFO 1 + +/* Generate SDB debugging information by default. */ + +#ifndef PREFERRED_DEBUGGING_TYPE +#define PREFERRED_DEBUGGING_TYPE SDB_DEBUG +#endif + +/* Be function-relative for block and source line stab directives. */ + +#define DBX_BLOCKS_FUNCTION_RELATIVE 1 + +/* but, to make this work, functions must appear prior to line info. */ + +#define DBX_FUNCTION_FIRST + +/* Generate a blank trailing N_SO to mark the end of the .o file, since + we can't depend upon the linker to mark .o file boundaries with + embedded stabs. */ + +#define DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END + +/* Like block addresses, stabs line numbers are relative to the + current function. */ + +#define DBX_LINES_FUNCTION_RELATIVE 1 + +/* When generating stabs debugging, use N_BINCL entries. */ + +#undef DBX_USE_BINCL +#define DBX_USE_BINCL + +/* There is no limit to the length of stabs strings. */ + +#ifndef DBX_CONTIN_LENGTH +#define DBX_CONTIN_LENGTH 0 +#endif diff --git a/contrib/toolchain/gcc/5x/gcc/config/i386/bsd.h b/contrib/toolchain/gcc/5x/gcc/config/i386/bsd.h new file mode 100644 index 0000000000..8733f6ab11 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/config/i386/bsd.h @@ -0,0 +1,99 @@ +/* Definitions for BSD assembler syntax for Intel 386 + (actually AT&T syntax for insns and operands, + adapted to BSD conventions for symbol names and debugging.) + Copyright (C) 1988-2015 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 +. */ + +/* Use the Sequent Symmetry assembler syntax. */ + +/* Define the syntax of pseudo-ops, labels and comments. */ + +/* Prefix for internally generated assembler labels. If we aren't using + underscores, we are using prefix `.'s to identify labels that should + be ignored, as in `i386/gas.h' --karl@cs.umb.edu */ + +#define LPREFIX "L" + +/* Assembler pseudos to introduce constants of various size. */ + +#define ASM_BYTE "\t.byte\t" +#define ASM_SHORT "\t.word\t" +#define ASM_LONG "\t.long\t" +#define ASM_QUAD "\t.quad\t" /* Should not be used for 32bit compilation. */ + +/* This was suggested, but it shouldn't be right for DBX output. -- RMS + #define ASM_OUTPUT_SOURCE_FILENAME(FILE, NAME) */ + + +/* Define the syntax of labels and symbol definitions/declarations. */ + +/* This is how to output an assembler line + that says to advance the location counter by SIZE bytes. */ + +#define ASM_OUTPUT_SKIP(FILE,SIZE) \ + fprintf (FILE, "\t.space "HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE)) + +/* Define the syntax of labels and symbol definitions/declarations. */ + +/* This says how to output an assembler line + to define a global common symbol. */ + +#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \ +( fputs (".comm ", (FILE)), \ + assemble_name ((FILE), (NAME)), \ + fprintf ((FILE), ",%u\n", (int)(ROUNDED))) + +/* This says how to output an assembler line + to define a local common symbol. */ + +#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \ +( fputs (".lcomm ", (FILE)), \ + assemble_name ((FILE), (NAME)), \ + fprintf ((FILE), ",%u\n", (int)(ROUNDED))) + +#ifdef HAVE_GAS_LCOMM_WITH_ALIGNMENT +#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGNMENT) \ +( fputs (".lcomm ", (FILE)), \ + assemble_name ((FILE), (NAME)), \ + fprintf ((FILE), ",%u,%u\n", (int)(SIZE), (int)(ALIGNMENT) / BITS_PER_UNIT)) +#endif + +/* This is how to output an assembler line + that says to advance the location counter + to a multiple of 2**LOG bytes. */ + +#define ASM_OUTPUT_ALIGN(FILE,LOG) \ + if ((LOG)!=0) fprintf ((FILE), "\t.align %d\n", (LOG)) + +/* This is how to store into the string BUF + the symbol_ref name of an internal numbered label where + PREFIX is the class of label and NUM is the number within the class. + This is suitable for output with `assemble_name'. */ + +#define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ + sprintf ((BUF), "*%s%ld", (PREFIX), (long)(NUMBER)) + +/* The prefix to add to user-visible assembler symbols. */ + +#define USER_LABEL_PREFIX "_" + +/* Sequent has some changes in the format of DBX symbols. */ +#define DBX_NO_XREFS 1 + +/* Don't split DBX symbols into continuations. */ +#define DBX_CONTIN_LENGTH 0 diff --git a/contrib/toolchain/gcc/5x/gcc/config/i386/cygming.h b/contrib/toolchain/gcc/5x/gcc/config/i386/cygming.h new file mode 100644 index 0000000000..fda59fb3c0 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/config/i386/cygming.h @@ -0,0 +1,481 @@ +/* Operating system specific defines to be used when targeting GCC for + hosting on Windows32, using a Unix style C library and tools. + Copyright (C) 1995-2015 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 +. */ + +#define DBX_DEBUGGING_INFO 1 +#define SDB_DEBUGGING_INFO 1 +#if TARGET_64BIT_DEFAULT || defined (HAVE_GAS_PE_SECREL32_RELOC) +#define DWARF2_DEBUGGING_INFO 1 +#endif + +#undef PREFERRED_DEBUGGING_TYPE +#if (DWARF2_DEBUGGING_INFO) +#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG +#else +#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG +#endif + +#undef TARGET_SEH +#define TARGET_SEH (TARGET_64BIT_MS_ABI && flag_unwind_tables) + +/* Win64 with SEH cannot represent DRAP stack frames. Disable its use. + Force the use of different mechanisms to allocate aligned local data. */ +#undef MAX_STACK_ALIGNMENT +#define MAX_STACK_ALIGNMENT (TARGET_SEH ? 128 : MAX_OFILE_ALIGNMENT) + +/* Support hooks for SEH. */ +#undef TARGET_ASM_UNWIND_EMIT +#define TARGET_ASM_UNWIND_EMIT i386_pe_seh_unwind_emit +#undef TARGET_ASM_UNWIND_EMIT_BEFORE_INSN +#define TARGET_ASM_UNWIND_EMIT_BEFORE_INSN false +#undef TARGET_ASM_FUNCTION_END_PROLOGUE +#define TARGET_ASM_FUNCTION_END_PROLOGUE i386_pe_seh_end_prologue +#undef TARGET_ASM_EMIT_EXCEPT_PERSONALITY +#define TARGET_ASM_EMIT_EXCEPT_PERSONALITY i386_pe_seh_emit_except_personality +#undef TARGET_ASM_INIT_SECTIONS +#define TARGET_ASM_INIT_SECTIONS i386_pe_seh_init_sections +#define SUBTARGET_ASM_UNWIND_INIT i386_pe_seh_init + +#undef DEFAULT_ABI +#define DEFAULT_ABI (TARGET_64BIT ? MS_ABI : SYSV_ABI) + +#undef TARGET_PECOFF +#define TARGET_PECOFF 1 + +#if ! defined (USE_MINGW64_LEADING_UNDERSCORES) +#undef USER_LABEL_PREFIX +#define USER_LABEL_PREFIX (TARGET_64BIT ? "" : "_") + +#undef LOCAL_LABEL_PREFIX +#define LOCAL_LABEL_PREFIX (TARGET_64BIT ? "." : "") + +#undef ASM_GENERATE_INTERNAL_LABEL +#define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ + sprintf ((BUF), "*%s%s%ld", LOCAL_LABEL_PREFIX, \ + (PREFIX), (long)(NUMBER)) + +#undef LPREFIX +#define LPREFIX (TARGET_64BIT ? ".L" : "L") + +#endif + +#undef DBX_REGISTER_NUMBER +#define DBX_REGISTER_NUMBER(n) \ + (TARGET_64BIT ? dbx64_register_map[n] \ + : (write_symbols == DWARF2_DEBUG \ + ? svr4_dbx_register_map[n] : dbx_register_map[n])) + +/* Map gcc register number to DWARF 2 CFA column number. For 32 bit + target, always use the svr4_dbx_register_map for DWARF .eh_frame + even if we don't use DWARF .debug_frame. */ +#undef DWARF_FRAME_REGNUM +#define DWARF_FRAME_REGNUM(n) \ + (TARGET_64BIT ? dbx64_register_map[(n)] \ + : svr4_dbx_register_map[(n)]) + +/* The 64-bit MS_ABI changes the set of call-used registers. */ +#undef DWARF_FRAME_REGISTERS +#define DWARF_FRAME_REGISTERS (TARGET_64BIT ? 33 : 17) + +#ifdef HAVE_GAS_PE_SECREL32_RELOC +/* Use section relative relocations for debugging offsets. Unlike + other targets that fake this by putting the section VMA at 0, PE + won't allow it. */ +#define ASM_OUTPUT_DWARF_OFFSET(FILE, SIZE, LABEL, SECTION) \ + do { \ + switch (SIZE) \ + { \ + case 4: \ + fputs ("\t.secrel32\t", FILE); \ + assemble_name (FILE, LABEL); \ + break; \ + case 8: \ + /* This is a hack. There is no 64-bit section relative \ + relocation. However, the COFF format also does not \ + support 64-bit file offsets; 64-bit applications are \ + limited to 32-bits of code+data in any one module. \ + Fake the 64-bit offset by zero-extending it. */ \ + fputs ("\t.secrel32\t", FILE); \ + assemble_name (FILE, LABEL); \ + fputs ("\n\t.long\t0", FILE); \ + break; \ + default: \ + gcc_unreachable (); \ + } \ + } while (0) +#endif + +#define TARGET_EXECUTABLE_SUFFIX ".exe" + +#define TARGET_OS_CPP_BUILTINS() \ + do \ + { \ + if (!TARGET_64BIT) \ + builtin_define ("_X86_=1"); \ + if (TARGET_SEH) \ + builtin_define ("__SEH__"); \ + builtin_assert ("system=winnt"); \ + builtin_define ("__stdcall=__attribute__((__stdcall__))"); \ + builtin_define ("__fastcall=__attribute__((__fastcall__))"); \ + builtin_define ("__thiscall=__attribute__((__thiscall__))"); \ + builtin_define ("__cdecl=__attribute__((__cdecl__))"); \ + if (!flag_iso) \ + { \ + builtin_define ("_stdcall=__attribute__((__stdcall__))"); \ + builtin_define ("_fastcall=__attribute__((__fastcall__))"); \ + builtin_define ("_thiscall=__attribute__((__thiscall__))"); \ + builtin_define ("_cdecl=__attribute__((__cdecl__))"); \ + } \ + /* Even though linkonce works with static libs, this is needed \ + to compare typeinfo symbols across dll boundaries. */ \ + builtin_define ("__GXX_MERGED_TYPEINFO_NAMES=0"); \ + builtin_define ("__GXX_TYPEINFO_EQUALITY_INLINE=0"); \ + EXTRA_OS_CPP_BUILTINS (); \ + } \ + while (0) + +/* Get tree.c to declare a target-specific specialization of + merge_decl_attributes. */ +#define TARGET_DLLIMPORT_DECL_ATTRIBUTES 1 + +/* This macro defines names of additional specifications to put in the specs + that can be used in various specifications like CC1_SPEC. Its definition + is an initializer with a subgrouping for each command option. + + Each subgrouping contains a string constant, that defines the + specification name, and a string constant that used by the GCC driver + program. + + Do not define this macro if it does not need to do anything. */ + +#undef SUBTARGET_EXTRA_SPECS +#define SUBTARGET_EXTRA_SPECS \ + { "mingw_include_path", DEFAULT_TARGET_MACHINE } + +#undef MATH_LIBRARY +#define MATH_LIBRARY "" + +#undef TARGET_LIBC_HAS_FUNCTION +#define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function + +#define SIZE_TYPE (TARGET_64BIT ? "long long unsigned int" : "unsigned int") +#define PTRDIFF_TYPE (TARGET_64BIT ? "long long int" : "int") + +#define WCHAR_TYPE_SIZE 16 +#define WCHAR_TYPE "short unsigned int" + +/* Windows64 continues to use a 32-bit long type. */ +#undef LONG_TYPE_SIZE +#define LONG_TYPE_SIZE 32 + +#define drectve_section() \ + (fprintf (asm_out_file, "\t.section .drectve\n"), \ + in_section = NULL) + +/* Older versions of gas don't handle 'r' as data. + Explicitly set data flag with 'd'. */ +#define READONLY_DATA_SECTION_ASM_OP "\t.section .rdata,\"dr\"" + +/* Don't allow flag_pic to propagate since gas may produce invalid code + otherwise. */ + +#undef SUBTARGET_OVERRIDE_OPTIONS +#define SUBTARGET_OVERRIDE_OPTIONS \ +do { \ + if (TARGET_64BIT && flag_pic != 1) \ + { \ + if (flag_pic > 1) \ + warning (0, \ + "-fPIC ignored for target (all code is position independent)"\ + ); \ + flag_pic = 1; \ + } \ + else if (!TARGET_64BIT && flag_pic) \ + { \ + warning (0, "-f%s ignored for target (all code is position independent)",\ + (flag_pic > 1) ? "PIC" : "pic"); \ + flag_pic = 0; \ + } \ +} while (0) + +/* Define this macro if references to a symbol must be treated + differently depending on something about the variable or + function named by the symbol (such as what section it is in). + + On i386 running Windows NT, modify the assembler name with a suffix + consisting of an atsign (@) followed by string of digits that represents + the number of bytes of arguments passed to the function, if it has the + attribute STDCALL. + + In addition, we must mark dll symbols specially. Definitions of + dllexport'd objects install some info in the .drectve section. + References to dllimport'd objects are fetched indirectly via + _imp__. If both are declared, dllexport overrides. This is also + needed to implement one-only vtables: they go into their own + section and we need to set DECL_SECTION_NAME so we do that here. + Note that we can be called twice on the same decl. */ + +#define SUBTARGET_ENCODE_SECTION_INFO i386_pe_encode_section_info + +/* Local and global relocs can be placed always into readonly memory + for PE-COFF targets. */ +#undef TARGET_ASM_RELOC_RW_MASK +#define TARGET_ASM_RELOC_RW_MASK i386_pe_reloc_rw_mask + +/* Output a common block. */ +#undef ASM_OUTPUT_ALIGNED_DECL_COMMON +#define ASM_OUTPUT_ALIGNED_DECL_COMMON \ + i386_pe_asm_output_aligned_decl_common + +/* Output the label for an initialized variable. */ +#undef ASM_DECLARE_OBJECT_NAME +#define ASM_DECLARE_OBJECT_NAME(STREAM, NAME, DECL) \ +do { \ + i386_pe_maybe_record_exported_symbol (DECL, NAME, 1); \ + ASM_OUTPUT_LABEL ((STREAM), (NAME)); \ +} while (0) + +/* Output a reference to a label. Fastcall function symbols + keep their '@' prefix, while other symbols are prefixed + with user_label_prefix. */ +#undef ASM_OUTPUT_LABELREF +#define ASM_OUTPUT_LABELREF(STREAM, NAME) \ +do { \ + if ((NAME)[0] != FASTCALL_PREFIX) \ + fputs (user_label_prefix, (STREAM)); \ + fputs ((NAME), (STREAM)); \ +} while (0) + +/* This does much the same in memory rather than to a stream. */ +#undef TARGET_MANGLE_ASSEMBLER_NAME +#define TARGET_MANGLE_ASSEMBLER_NAME i386_pe_mangle_assembler_name + + +/* Emit code to check the stack when allocating more than 4000 + bytes in one go. */ +#define CHECK_STACK_LIMIT 4000 + +#undef STACK_BOUNDARY +#define STACK_BOUNDARY (TARGET_64BIT && ix86_abi == MS_ABI ? 128 : BITS_PER_WORD) + +/* By default, target has a 80387, uses IEEE compatible arithmetic, + returns float values in the 387 and needs stack probes. + We also align doubles to 64-bits for MSVC default compatibility. */ + +#undef TARGET_SUBTARGET_DEFAULT +#define TARGET_SUBTARGET_DEFAULT \ + (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS \ + | MASK_STACK_PROBE | MASK_ALIGN_DOUBLE) + +#undef TARGET_SUBTARGET64_DEFAULT +#define TARGET_SUBTARGET64_DEFAULT \ + MASK_128BIT_LONG_DOUBLE + +/* This is how to output an assembler line + that says to advance the location counter + to a multiple of 2**LOG bytes. */ + +#undef ASM_OUTPUT_ALIGN +#define ASM_OUTPUT_ALIGN(FILE,LOG) \ + if ((LOG)!=0) fprintf ((FILE), "\t.align %d\n", 1<<(LOG)) + +/* Windows uses explicit import from shared libraries. */ +#define MULTIPLE_SYMBOL_SPACES 1 + +#define TARGET_ASM_UNIQUE_SECTION i386_pe_unique_section +#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section + +#define SUPPORTS_ONE_ONLY 1 + +/* Switch into a generic section. */ +#define TARGET_ASM_NAMED_SECTION i386_pe_asm_named_section + +/* Select attributes for named sections. */ +#define TARGET_SECTION_TYPE_FLAGS i386_pe_section_type_flags + +/* Write the extra assembler code needed to declare a function + properly. If we are generating SDB debugging information, this + will happen automatically, so we only need to handle other cases. */ +#undef ASM_DECLARE_FUNCTION_NAME +#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ + i386_pe_start_function (FILE, NAME, DECL) + +#undef ASM_DECLARE_FUNCTION_SIZE +#define ASM_DECLARE_FUNCTION_SIZE(FILE,NAME,DECL) \ + i386_pe_end_function (FILE, NAME, DECL) + +/* Add an external function to the list of functions to be declared at + the end of the file. */ +#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \ + do \ + { \ + if (TREE_CODE (DECL) == FUNCTION_DECL) \ + i386_pe_record_external_function ((DECL), (NAME)); \ + } \ + while (0) + +/* Declare the type properly for any external libcall. */ +#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \ + i386_pe_declare_function_type (FILE, XSTR (FUN, 0), 1) + +/* This says out to put a global symbol in the BSS section. */ +#undef ASM_OUTPUT_ALIGNED_BSS +#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ + asm_output_aligned_bss ((FILE), (DECL), (NAME), (SIZE), (ALIGN)) + +/* Output function declarations at the end of the file. */ +#undef TARGET_ASM_FILE_END +#define TARGET_ASM_FILE_END i386_pe_file_end + +#undef ASM_COMMENT_START +#define ASM_COMMENT_START " #" + +#ifndef DWARF2_UNWIND_INFO +/* If configured with --disable-sjlj-exceptions, use DWARF2, else + default to SJLJ. */ +#if (defined (CONFIG_SJLJ_EXCEPTIONS) && !CONFIG_SJLJ_EXCEPTIONS) +/* The logic of this #if must be kept synchronised with the logic + for selecting the tmake_eh_file fragment in config.gcc. */ +#define DWARF2_UNWIND_INFO 1 +/* If multilib is selected break build as sjlj is required. */ +#if defined (TARGET_BI_ARCH) +#error For 64-bit windows and 32-bit based multilib version of gcc just SJLJ exceptions are supported. +#endif +#else +#define DWARF2_UNWIND_INFO 0 +#endif +#endif + +/* Don't assume anything about the header files. */ +#define NO_IMPLICIT_EXTERN_C + +#undef PROFILE_HOOK +#define PROFILE_HOOK(LABEL) \ + if (MAIN_NAME_P (DECL_NAME (current_function_decl))) \ + { \ + emit_call_insn (gen_rtx_CALL (VOIDmode, \ + gen_rtx_MEM (FUNCTION_MODE, \ + gen_rtx_SYMBOL_REF (Pmode, "_monstartup")), \ + const0_rtx)); \ + } + +/* Java Native Interface (JNI) methods on Win32 are invoked using the + stdcall calling convention. */ +#undef MODIFY_JNI_METHOD_CALL +#define MODIFY_JNI_METHOD_CALL(MDECL) \ + build_type_attribute_variant ((MDECL), \ + build_tree_list (get_identifier ("stdcall"), \ + NULL)) + +/* For Win32 ABI compatibility */ +#undef DEFAULT_PCC_STRUCT_RETURN +#define DEFAULT_PCC_STRUCT_RETURN 0 + +/* MSVC returns aggregate types of up to 8 bytes via registers. + See i386.c:ix86_return_in_memory. */ +#undef MS_AGGREGATE_RETURN +#define MS_AGGREGATE_RETURN 1 + +/* Biggest alignment supported by the object file format of this + machine. Use this macro to limit the alignment which can be + specified using the `__attribute__ ((aligned (N)))' construct. If + not defined, the default value is `BIGGEST_ALIGNMENT'. */ +/* IMAGE_SCN_ALIGN_8192BYTES is the largest section alignment flag + specified in the PECOFF60 spec. Native MS compiler also limits + user-specified alignment to 8192 bytes. */ +#undef MAX_OFILE_ALIGNMENT +#define MAX_OFILE_ALIGNMENT (8192 * 8) + +/* BIGGEST_FIELD_ALIGNMENT macro is used directly by libobjc, There, we + align internal doubles in structures on dword boundaries. Otherwise, + support vector modes using ADJUST_FIELD_ALIGN, defined in i386.h. */ +#ifdef IN_TARGET_LIBS +#undef BIGGEST_FIELD_ALIGNMENT +#define BIGGEST_FIELD_ALIGNMENT 64 +#endif + +/* A bit-field declared as `int' forces `int' alignment for the struct. */ +#undef PCC_BITFIELD_TYPE_MATTERS +#define PCC_BITFIELD_TYPE_MATTERS 1 +#define GROUP_BITFIELDS_BY_ALIGN TYPE_NATIVE(rec) + +/* Enable alias attribute support. */ +#ifndef SET_ASM_OP +#define SET_ASM_OP "\t.set\t" +#endif + +/* This implements the `alias' attribute, keeping any stdcall or + fastcall decoration. */ +#undef ASM_OUTPUT_DEF_FROM_DECLS +#define ASM_OUTPUT_DEF_FROM_DECLS(STREAM, DECL, TARGET) \ + do \ + { \ + const char *alias \ + = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \ + i386_pe_maybe_record_exported_symbol (DECL, alias, 0); \ + if (TREE_CODE (DECL) == FUNCTION_DECL) \ + i386_pe_declare_function_type (STREAM, alias, \ + TREE_PUBLIC (DECL)); \ + ASM_OUTPUT_DEF (STREAM, alias, IDENTIFIER_POINTER (TARGET)); \ + } while (0) + +/* GNU as supports weak symbols on PECOFF. */ +#ifdef HAVE_GAS_WEAK +#define ASM_WEAKEN_LABEL(FILE, NAME) \ + do \ + { \ + fputs ("\t.weak\t", (FILE)); \ + assemble_name ((FILE), (NAME)); \ + fputc ('\n', (FILE)); \ + } \ + while (0) +#endif /* HAVE_GAS_WEAK */ + +/* FIXME: SUPPORTS_WEAK && TARGET_HAVE_NAMED_SECTIONS is true, + but for .jcr section to work we also need crtbegin and crtend + objects. */ +#define TARGET_USE_JCR_SECTION 1 + +/* Decide whether it is safe to use a local alias for a virtual function + when constructing thunks. */ +#undef TARGET_USE_LOCAL_THUNK_ALIAS_P +#define TARGET_USE_LOCAL_THUNK_ALIAS_P(DECL) (!DECL_ONE_ONLY (DECL)) + +#define SUBTARGET_ATTRIBUTE_TABLE \ + { "selectany", 0, 0, true, false, false, ix86_handle_selectany_attribute, \ + false } + /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler, + affects_type_identity } */ + +/* mcount() does not need a counter variable. */ +#undef NO_PROFILE_COUNTERS +#define NO_PROFILE_COUNTERS 1 + +#define TARGET_VALID_DLLIMPORT_ATTRIBUTE_P i386_pe_valid_dllimport_attribute_p +#define TARGET_CXX_ADJUST_CLASS_AT_DEFINITION i386_pe_adjust_class_at_definition +#define SUBTARGET_MANGLE_DECL_ASSEMBLER_NAME i386_pe_mangle_decl_assembler_name + +#undef TARGET_ASM_ASSEMBLE_VISIBILITY +#define TARGET_ASM_ASSEMBLE_VISIBILITY i386_pe_assemble_visibility + +#undef SUB_TARGET_RECORD_STUB +#define SUB_TARGET_RECORD_STUB i386_pe_record_stub + +/* Static stack checking is supported by means of probes. */ +#define STACK_CHECK_STATIC_BUILTIN 1 diff --git a/contrib/toolchain/gcc/5x/gcc/config/i386/gas.h b/contrib/toolchain/gcc/5x/gcc/config/i386/gas.h new file mode 100644 index 0000000000..086ce5344f --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/config/i386/gas.h @@ -0,0 +1,124 @@ +/* Definitions for Intel 386 using GAS. + Copyright (C) 1988-2015 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 +. */ + +/* Note that i386/seq-gas.h is a GAS configuration that does not use this + file. */ + +/* Use the bsd assembler syntax. */ +/* we need to do this because gas is really a bsd style assembler, + * and so doesn't work well this these att-isms: + * + * ASM_OUTPUT_SKIP is .set .,.+N, which isn't implemented in gas + * ASM_OUTPUT_LOCAL is done with .set .,.+N, but that can't be + * used to define bss static space + * + * Next is the question of whether to uses underscores. RMS didn't + * like this idea at first, but since it is now obvious that we + * need this separate tm file for use with gas, at least to get + * dbx debugging info, I think we should also switch to underscores. + * We can keep i386v for real att style output, and the few + * people who want both form will have to compile twice. + */ + +/* these come from i386/bsd.h, but are specific to sequent */ +#undef DBX_NO_XREFS +#undef DBX_CONTIN_LENGTH + +/* Ask for COFF symbols. */ + +#define SDB_DEBUGGING_INFO 1 + +/* Output #ident as a .ident. */ + +#undef TARGET_ASM_OUTPUT_IDENT +#define TARGET_ASM_OUTPUT_IDENT default_asm_output_ident_directive + +/* In the past there was confusion as to what the argument to .align was + in GAS. For the last several years the rule has been this: for a.out + file formats that argument is LOG, and for all other file formats the + argument is 1<. */ + +#ifndef I386_OPTS_H +#define I386_OPTS_H + +/* Algorithm to expand string function with. */ +enum stringop_alg +{ +#undef DEF_ENUM +#define DEF_ENUM + +#undef DEF_ALG +#define DEF_ALG(alg, name) alg, + +#include "stringop.def" +last_alg + +#undef DEF_ENUM +#undef DEF_ALG +}; + +/* Available call abi. */ +enum calling_abi +{ + SYSV_ABI = 0, + MS_ABI = 1 +}; + +enum fpmath_unit +{ + FPMATH_387 = 1, + FPMATH_SSE = 2 +}; + +enum tls_dialect +{ + TLS_DIALECT_GNU, + TLS_DIALECT_GNU2, + TLS_DIALECT_SUN +}; + +enum cmodel { + CM_32, /* The traditional 32-bit ABI. */ + CM_SMALL, /* Assumes all code and data fits in the low 31 bits. */ + CM_KERNEL, /* Assumes all code and data fits in the high 31 bits. */ + CM_MEDIUM, /* Assumes code fits in the low 31 bits; data unlimited. */ + CM_LARGE, /* No assumptions. */ + CM_SMALL_PIC, /* Assumes code+data+got/plt fits in a 31 bit region. */ + CM_MEDIUM_PIC,/* Assumes code+got/plt fits in a 31 bit region. */ + CM_LARGE_PIC /* No assumptions. */ +}; + +enum pmode { + PMODE_SI, /* Pmode == SImode. */ + PMODE_DI /* Pmode == DImode. */ +}; + +enum ix86_align_data { + ix86_align_data_type_compat, + ix86_align_data_type_abi, + ix86_align_data_type_cacheline +}; + +enum asm_dialect { + ASM_ATT, + ASM_INTEL +}; + +enum ix86_veclibabi { + ix86_veclibabi_type_none, + ix86_veclibabi_type_svml, + ix86_veclibabi_type_acml +}; + +enum stack_protector_guard { + SSP_TLS, /* per-thread canary in TLS block */ + SSP_GLOBAL /* global canary */ +}; + +#endif diff --git a/contrib/toolchain/gcc/5x/gcc/config/i386/i386.h b/contrib/toolchain/gcc/5x/gcc/config/i386/i386.h new file mode 100644 index 0000000000..884cda3377 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/config/i386/i386.h @@ -0,0 +1,2580 @@ +/* Definitions of target machine for GCC for IA-32. + Copyright (C) 1988-2015 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 +. */ + +/* The purpose of this file is to define the characteristics of the i386, + independent of assembler syntax or operating system. + + Three other files build on this one to describe a specific assembler syntax: + bsd386.h, att386.h, and sun386.h. + + The actual tm.h file for a particular system should include + this file, and then the file for the appropriate assembler syntax. + + Many macros that specify assembler syntax are omitted entirely from + this file because they really belong in the files for particular + assemblers. These include RP, IP, LPREFIX, PUT_OP_SIZE, USE_STAR, + ADDR_BEG, ADDR_END, PRINT_IREG, PRINT_SCALE, PRINT_B_I_S, and many + that start with ASM_ or end in ASM_OP. */ + +/* Redefines for option macros. */ + +#define TARGET_64BIT TARGET_ISA_64BIT +#define TARGET_64BIT_P(x) TARGET_ISA_64BIT_P(x) +#define TARGET_MMX TARGET_ISA_MMX +#define TARGET_MMX_P(x) TARGET_ISA_MMX_P(x) +#define TARGET_3DNOW TARGET_ISA_3DNOW +#define TARGET_3DNOW_P(x) TARGET_ISA_3DNOW_P(x) +#define TARGET_3DNOW_A TARGET_ISA_3DNOW_A +#define TARGET_3DNOW_A_P(x) TARGET_ISA_3DNOW_A_P(x) +#define TARGET_SSE TARGET_ISA_SSE +#define TARGET_SSE_P(x) TARGET_ISA_SSE_P(x) +#define TARGET_SSE2 TARGET_ISA_SSE2 +#define TARGET_SSE2_P(x) TARGET_ISA_SSE2_P(x) +#define TARGET_SSE3 TARGET_ISA_SSE3 +#define TARGET_SSE3_P(x) TARGET_ISA_SSE3_P(x) +#define TARGET_SSSE3 TARGET_ISA_SSSE3 +#define TARGET_SSSE3_P(x) TARGET_ISA_SSSE3_P(x) +#define TARGET_SSE4_1 TARGET_ISA_SSE4_1 +#define TARGET_SSE4_1_P(x) TARGET_ISA_SSE4_1_P(x) +#define TARGET_SSE4_2 TARGET_ISA_SSE4_2 +#define TARGET_SSE4_2_P(x) TARGET_ISA_SSE4_2_P(x) +#define TARGET_AVX TARGET_ISA_AVX +#define TARGET_AVX_P(x) TARGET_ISA_AVX_P(x) +#define TARGET_AVX2 TARGET_ISA_AVX2 +#define TARGET_AVX2_P(x) TARGET_ISA_AVX2_P(x) +#define TARGET_AVX512F TARGET_ISA_AVX512F +#define TARGET_AVX512F_P(x) TARGET_ISA_AVX512F_P(x) +#define TARGET_AVX512PF TARGET_ISA_AVX512PF +#define TARGET_AVX512PF_P(x) TARGET_ISA_AVX512PF_P(x) +#define TARGET_AVX512ER TARGET_ISA_AVX512ER +#define TARGET_AVX512ER_P(x) TARGET_ISA_AVX512ER_P(x) +#define TARGET_AVX512CD TARGET_ISA_AVX512CD +#define TARGET_AVX512CD_P(x) TARGET_ISA_AVX512CD_P(x) +#define TARGET_AVX512DQ TARGET_ISA_AVX512DQ +#define TARGET_AVX512DQ_P(x) TARGET_ISA_AVX512DQ_P(x) +#define TARGET_AVX512BW TARGET_ISA_AVX512BW +#define TARGET_AVX512BW_P(x) TARGET_ISA_AVX512BW_P(x) +#define TARGET_AVX512VL TARGET_ISA_AVX512VL +#define TARGET_AVX512VL_P(x) TARGET_ISA_AVX512VL_P(x) +#define TARGET_AVX512VBMI TARGET_ISA_AVX512VBMI +#define TARGET_AVX512VBMI_P(x) TARGET_ISA_AVX512VBMI_P(x) +#define TARGET_AVX512IFMA TARGET_ISA_AVX512IFMA +#define TARGET_AVX512IFMA_P(x) TARGET_ISA_AVX512IFMA_P(x) +#define TARGET_FMA TARGET_ISA_FMA +#define TARGET_FMA_P(x) TARGET_ISA_FMA_P(x) +#define TARGET_SSE4A TARGET_ISA_SSE4A +#define TARGET_SSE4A_P(x) TARGET_ISA_SSE4A_P(x) +#define TARGET_FMA4 TARGET_ISA_FMA4 +#define TARGET_FMA4_P(x) TARGET_ISA_FMA4_P(x) +#define TARGET_XOP TARGET_ISA_XOP +#define TARGET_XOP_P(x) TARGET_ISA_XOP_P(x) +#define TARGET_LWP TARGET_ISA_LWP +#define TARGET_LWP_P(x) TARGET_ISA_LWP_P(x) +#define TARGET_ROUND TARGET_ISA_ROUND +#define TARGET_ABM TARGET_ISA_ABM +#define TARGET_ABM_P(x) TARGET_ISA_ABM_P(x) +#define TARGET_BMI TARGET_ISA_BMI +#define TARGET_BMI_P(x) TARGET_ISA_BMI_P(x) +#define TARGET_BMI2 TARGET_ISA_BMI2 +#define TARGET_BMI2_P(x) TARGET_ISA_BMI2_P(x) +#define TARGET_LZCNT TARGET_ISA_LZCNT +#define TARGET_LZCNT_P(x) TARGET_ISA_LZCNT_P(x) +#define TARGET_TBM TARGET_ISA_TBM +#define TARGET_TBM_P(x) TARGET_ISA_TBM_P(x) +#define TARGET_POPCNT TARGET_ISA_POPCNT +#define TARGET_POPCNT_P(x) TARGET_ISA_POPCNT_P(x) +#define TARGET_SAHF TARGET_ISA_SAHF +#define TARGET_SAHF_P(x) TARGET_ISA_SAHF_P(x) +#define TARGET_MOVBE TARGET_ISA_MOVBE +#define TARGET_MOVBE_P(x) TARGET_ISA_MOVBE_P(x) +#define TARGET_CRC32 TARGET_ISA_CRC32 +#define TARGET_CRC32_P(x) TARGET_ISA_CRC32_P(x) +#define TARGET_AES TARGET_ISA_AES +#define TARGET_AES_P(x) TARGET_ISA_AES_P(x) +#define TARGET_SHA TARGET_ISA_SHA +#define TARGET_SHA_P(x) TARGET_ISA_SHA_P(x) +#define TARGET_CLFLUSHOPT TARGET_ISA_CLFLUSHOPT +#define TARGET_CLFLUSHOPT_P(x) TARGET_ISA_CLFLUSHOPT_P(x) +#define TARGET_XSAVEC TARGET_ISA_XSAVEC +#define TARGET_XSAVEC_P(x) TARGET_ISA_XSAVEC_P(x) +#define TARGET_XSAVES TARGET_ISA_XSAVES +#define TARGET_XSAVES_P(x) TARGET_ISA_XSAVES_P(x) +#define TARGET_PCLMUL TARGET_ISA_PCLMUL +#define TARGET_PCLMUL_P(x) TARGET_ISA_PCLMUL_P(x) +#define TARGET_CMPXCHG16B TARGET_ISA_CX16 +#define TARGET_CMPXCHG16B_P(x) TARGET_ISA_CX16_P(x) +#define TARGET_FSGSBASE TARGET_ISA_FSGSBASE +#define TARGET_FSGSBASE_P(x) TARGET_ISA_FSGSBASE_P(x) +#define TARGET_RDRND TARGET_ISA_RDRND +#define TARGET_RDRND_P(x) TARGET_ISA_RDRND_P(x) +#define TARGET_F16C TARGET_ISA_F16C +#define TARGET_F16C_P(x) TARGET_ISA_F16C_P(x) +#define TARGET_RTM TARGET_ISA_RTM +#define TARGET_RTM_P(x) TARGET_ISA_RTM_P(x) +#define TARGET_HLE TARGET_ISA_HLE +#define TARGET_HLE_P(x) TARGET_ISA_HLE_P(x) +#define TARGET_RDSEED TARGET_ISA_RDSEED +#define TARGET_RDSEED_P(x) TARGET_ISA_RDSEED_P(x) +#define TARGET_PRFCHW TARGET_ISA_PRFCHW +#define TARGET_PRFCHW_P(x) TARGET_ISA_PRFCHW_P(x) +#define TARGET_ADX TARGET_ISA_ADX +#define TARGET_ADX_P(x) TARGET_ISA_ADX_P(x) +#define TARGET_FXSR TARGET_ISA_FXSR +#define TARGET_FXSR_P(x) TARGET_ISA_FXSR_P(x) +#define TARGET_XSAVE TARGET_ISA_XSAVE +#define TARGET_XSAVE_P(x) TARGET_ISA_XSAVE_P(x) +#define TARGET_XSAVEOPT TARGET_ISA_XSAVEOPT +#define TARGET_XSAVEOPT_P(x) TARGET_ISA_XSAVEOPT_P(x) +#define TARGET_PREFETCHWT1 TARGET_ISA_PREFETCHWT1 +#define TARGET_PREFETCHWT1_P(x) TARGET_ISA_PREFETCHWT1_P(x) +#define TARGET_MPX TARGET_ISA_MPX +#define TARGET_MPX_P(x) TARGET_ISA_MPX_P(x) +#define TARGET_PCOMMIT TARGET_ISA_PCOMMIT +#define TARGET_PCOMMIT_P(x) TARGET_ISA_PCOMMIT_P(x) +#define TARGET_CLWB TARGET_ISA_CLWB +#define TARGET_CLWB_P(x) TARGET_ISA_CLWB_P(x) +#define TARGET_MWAITX TARGET_ISA_MWAITX +#define TARGET_MWAITX_P(x) TARGET_ISA_MWAITX_P(x) + +#define TARGET_LP64 TARGET_ABI_64 +#define TARGET_LP64_P(x) TARGET_ABI_64_P(x) +#define TARGET_X32 TARGET_ABI_X32 +#define TARGET_X32_P(x) TARGET_ABI_X32_P(x) +#define TARGET_16BIT TARGET_CODE16 +#define TARGET_16BIT_P(x) TARGET_CODE16_P(x) + +/* SSE4.1 defines round instructions */ +#define OPTION_MASK_ISA_ROUND OPTION_MASK_ISA_SSE4_1 +#define TARGET_ISA_ROUND ((ix86_isa_flags & OPTION_MASK_ISA_ROUND) != 0) + +#include "config/vxworks-dummy.h" + +#include "config/i386/i386-opts.h" + +#define MAX_STRINGOP_ALGS 4 + +/* Specify what algorithm to use for stringops on known size. + When size is unknown, the UNKNOWN_SIZE alg is used. When size is + known at compile time or estimated via feedback, the SIZE array + is walked in order until MAX is greater then the estimate (or -1 + means infinity). Corresponding ALG is used then. + When NOALIGN is true the code guaranting the alignment of the memory + block is skipped. + + For example initializer: + {{256, loop}, {-1, rep_prefix_4_byte}} + will use loop for blocks smaller or equal to 256 bytes, rep prefix will + be used otherwise. */ +struct stringop_algs +{ + const enum stringop_alg unknown_size; + const struct stringop_strategy { + const int max; + const enum stringop_alg alg; + int noalign; + } size [MAX_STRINGOP_ALGS]; +}; + +/* Define the specific costs for a given cpu */ + +struct processor_costs { + const int add; /* cost of an add instruction */ + const int lea; /* cost of a lea instruction */ + const int shift_var; /* variable shift costs */ + const int shift_const; /* constant shift costs */ + const int mult_init[5]; /* cost of starting a multiply + in QImode, HImode, SImode, DImode, TImode*/ + const int mult_bit; /* cost of multiply per each bit set */ + const int divide[5]; /* cost of a divide/mod + in QImode, HImode, SImode, DImode, TImode*/ + int movsx; /* The cost of movsx operation. */ + int movzx; /* The cost of movzx operation. */ + const int large_insn; /* insns larger than this cost more */ + const int move_ratio; /* The threshold of number of scalar + memory-to-memory move insns. */ + const int movzbl_load; /* cost of loading using movzbl */ + const int int_load[3]; /* cost of loading integer registers + in QImode, HImode and SImode relative + to reg-reg move (2). */ + const int int_store[3]; /* cost of storing integer register + in QImode, HImode and SImode */ + const int fp_move; /* cost of reg,reg fld/fst */ + const int fp_load[3]; /* cost of loading FP register + in SFmode, DFmode and XFmode */ + const int fp_store[3]; /* cost of storing FP register + in SFmode, DFmode and XFmode */ + const int mmx_move; /* cost of moving MMX register. */ + const int mmx_load[2]; /* cost of loading MMX register + in SImode and DImode */ + const int mmx_store[2]; /* cost of storing MMX register + in SImode and DImode */ + const int sse_move; /* cost of moving SSE register. */ + const int sse_load[3]; /* cost of loading SSE register + in SImode, DImode and TImode*/ + const int sse_store[3]; /* cost of storing SSE register + in SImode, DImode and TImode*/ + const int mmxsse_to_integer; /* cost of moving mmxsse register to + integer and vice versa. */ + const int l1_cache_size; /* size of l1 cache, in kilobytes. */ + const int l2_cache_size; /* size of l2 cache, in kilobytes. */ + const int prefetch_block; /* bytes moved to cache for prefetch. */ + const int simultaneous_prefetches; /* number of parallel prefetch + operations. */ + const int branch_cost; /* Default value for BRANCH_COST. */ + const int fadd; /* cost of FADD and FSUB instructions. */ + const int fmul; /* cost of FMUL instruction. */ + const int fdiv; /* cost of FDIV instruction. */ + const int fabs; /* cost of FABS instruction. */ + const int fchs; /* cost of FCHS instruction. */ + const int fsqrt; /* cost of FSQRT instruction. */ + /* Specify what algorithm + to use for stringops on unknown size. */ + struct stringop_algs *memcpy, *memset; + const int scalar_stmt_cost; /* Cost of any scalar operation, excluding + load and store. */ + const int scalar_load_cost; /* Cost of scalar load. */ + const int scalar_store_cost; /* Cost of scalar store. */ + const int vec_stmt_cost; /* Cost of any vector operation, excluding + load, store, vector-to-scalar and + scalar-to-vector operation. */ + const int vec_to_scalar_cost; /* Cost of vect-to-scalar operation. */ + const int scalar_to_vec_cost; /* Cost of scalar-to-vector operation. */ + const int vec_align_load_cost; /* Cost of aligned vector load. */ + const int vec_unalign_load_cost; /* Cost of unaligned vector load. */ + const int vec_store_cost; /* Cost of vector store. */ + const int cond_taken_branch_cost; /* Cost of taken branch for vectorizer + cost model. */ + const int cond_not_taken_branch_cost;/* Cost of not taken branch for + vectorizer cost model. */ +}; + +extern const struct processor_costs *ix86_cost; +extern const struct processor_costs ix86_size_cost; + +#define ix86_cur_cost() \ + (optimize_insn_for_size_p () ? &ix86_size_cost: ix86_cost) + +/* Macros used in the machine description to test the flags. */ + +/* configure can arrange to change it. */ + +#ifndef TARGET_CPU_DEFAULT +#define TARGET_CPU_DEFAULT PROCESSOR_GENERIC +#endif + +#ifndef TARGET_FPMATH_DEFAULT +#define TARGET_FPMATH_DEFAULT \ + (TARGET_64BIT && TARGET_SSE ? FPMATH_SSE : FPMATH_387) +#endif + +#ifndef TARGET_FPMATH_DEFAULT_P +#define TARGET_FPMATH_DEFAULT_P(x) \ + (TARGET_64BIT_P(x) && TARGET_SSE_P(x) ? FPMATH_SSE : FPMATH_387) +#endif + +#define TARGET_FLOAT_RETURNS_IN_80387 TARGET_FLOAT_RETURNS +#define TARGET_FLOAT_RETURNS_IN_80387_P(x) TARGET_FLOAT_RETURNS_P(x) + +/* 64bit Sledgehammer mode. For libgcc2 we make sure this is a + compile-time constant. */ +#ifdef IN_LIBGCC2 +#undef TARGET_64BIT +#ifdef __x86_64__ +#define TARGET_64BIT 1 +#else +#define TARGET_64BIT 0 +#endif +#else +#ifndef TARGET_BI_ARCH +#undef TARGET_64BIT +#undef TARGET_64BIT_P +#if TARGET_64BIT_DEFAULT +#define TARGET_64BIT 1 +#define TARGET_64BIT_P(x) 1 +#else +#define TARGET_64BIT 0 +#define TARGET_64BIT_P(x) 0 +#endif +#endif +#endif + +#define HAS_LONG_COND_BRANCH 1 +#define HAS_LONG_UNCOND_BRANCH 1 + +#define TARGET_386 (ix86_tune == PROCESSOR_I386) +#define TARGET_486 (ix86_tune == PROCESSOR_I486) +#define TARGET_PENTIUM (ix86_tune == PROCESSOR_PENTIUM) +#define TARGET_PENTIUMPRO (ix86_tune == PROCESSOR_PENTIUMPRO) +#define TARGET_GEODE (ix86_tune == PROCESSOR_GEODE) +#define TARGET_K6 (ix86_tune == PROCESSOR_K6) +#define TARGET_ATHLON (ix86_tune == PROCESSOR_ATHLON) +#define TARGET_PENTIUM4 (ix86_tune == PROCESSOR_PENTIUM4) +#define TARGET_K8 (ix86_tune == PROCESSOR_K8) +#define TARGET_ATHLON_K8 (TARGET_K8 || TARGET_ATHLON) +#define TARGET_NOCONA (ix86_tune == PROCESSOR_NOCONA) +#define TARGET_CORE2 (ix86_tune == PROCESSOR_CORE2) +#define TARGET_NEHALEM (ix86_tune == PROCESSOR_NEHALEM) +#define TARGET_SANDYBRIDGE (ix86_tune == PROCESSOR_SANDYBRIDGE) +#define TARGET_HASWELL (ix86_tune == PROCESSOR_HASWELL) +#define TARGET_BONNELL (ix86_tune == PROCESSOR_BONNELL) +#define TARGET_SILVERMONT (ix86_tune == PROCESSOR_SILVERMONT) +#define TARGET_KNL (ix86_tune == PROCESSOR_KNL) +#define TARGET_INTEL (ix86_tune == PROCESSOR_INTEL) +#define TARGET_GENERIC (ix86_tune == PROCESSOR_GENERIC) +#define TARGET_AMDFAM10 (ix86_tune == PROCESSOR_AMDFAM10) +#define TARGET_BDVER1 (ix86_tune == PROCESSOR_BDVER1) +#define TARGET_BDVER2 (ix86_tune == PROCESSOR_BDVER2) +#define TARGET_BDVER3 (ix86_tune == PROCESSOR_BDVER3) +#define TARGET_BDVER4 (ix86_tune == PROCESSOR_BDVER4) +#define TARGET_BTVER1 (ix86_tune == PROCESSOR_BTVER1) +#define TARGET_BTVER2 (ix86_tune == PROCESSOR_BTVER2) + +/* Feature tests against the various tunings. */ +enum ix86_tune_indices { +#undef DEF_TUNE +#define DEF_TUNE(tune, name, selector) tune, +#include "x86-tune.def" +#undef DEF_TUNE +X86_TUNE_LAST +}; + +extern unsigned char ix86_tune_features[X86_TUNE_LAST]; + +#define TARGET_USE_LEAVE ix86_tune_features[X86_TUNE_USE_LEAVE] +#define TARGET_PUSH_MEMORY ix86_tune_features[X86_TUNE_PUSH_MEMORY] +#define TARGET_ZERO_EXTEND_WITH_AND \ + ix86_tune_features[X86_TUNE_ZERO_EXTEND_WITH_AND] +#define TARGET_UNROLL_STRLEN ix86_tune_features[X86_TUNE_UNROLL_STRLEN] +#define TARGET_BRANCH_PREDICTION_HINTS \ + ix86_tune_features[X86_TUNE_BRANCH_PREDICTION_HINTS] +#define TARGET_DOUBLE_WITH_ADD ix86_tune_features[X86_TUNE_DOUBLE_WITH_ADD] +#define TARGET_USE_SAHF ix86_tune_features[X86_TUNE_USE_SAHF] +#define TARGET_MOVX ix86_tune_features[X86_TUNE_MOVX] +#define TARGET_PARTIAL_REG_STALL ix86_tune_features[X86_TUNE_PARTIAL_REG_STALL] +#define TARGET_PARTIAL_FLAG_REG_STALL \ + ix86_tune_features[X86_TUNE_PARTIAL_FLAG_REG_STALL] +#define TARGET_LCP_STALL \ + ix86_tune_features[X86_TUNE_LCP_STALL] +#define TARGET_USE_HIMODE_FIOP ix86_tune_features[X86_TUNE_USE_HIMODE_FIOP] +#define TARGET_USE_SIMODE_FIOP ix86_tune_features[X86_TUNE_USE_SIMODE_FIOP] +#define TARGET_USE_MOV0 ix86_tune_features[X86_TUNE_USE_MOV0] +#define TARGET_USE_CLTD ix86_tune_features[X86_TUNE_USE_CLTD] +#define TARGET_USE_XCHGB ix86_tune_features[X86_TUNE_USE_XCHGB] +#define TARGET_SPLIT_LONG_MOVES ix86_tune_features[X86_TUNE_SPLIT_LONG_MOVES] +#define TARGET_READ_MODIFY_WRITE ix86_tune_features[X86_TUNE_READ_MODIFY_WRITE] +#define TARGET_READ_MODIFY ix86_tune_features[X86_TUNE_READ_MODIFY] +#define TARGET_PROMOTE_QImode ix86_tune_features[X86_TUNE_PROMOTE_QIMODE] +#define TARGET_FAST_PREFIX ix86_tune_features[X86_TUNE_FAST_PREFIX] +#define TARGET_SINGLE_STRINGOP ix86_tune_features[X86_TUNE_SINGLE_STRINGOP] +#define TARGET_MISALIGNED_MOVE_STRING_PRO_EPILOGUES \ + ix86_tune_features[X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES] +#define TARGET_QIMODE_MATH ix86_tune_features[X86_TUNE_QIMODE_MATH] +#define TARGET_HIMODE_MATH ix86_tune_features[X86_TUNE_HIMODE_MATH] +#define TARGET_PROMOTE_QI_REGS ix86_tune_features[X86_TUNE_PROMOTE_QI_REGS] +#define TARGET_PROMOTE_HI_REGS ix86_tune_features[X86_TUNE_PROMOTE_HI_REGS] +#define TARGET_SINGLE_POP ix86_tune_features[X86_TUNE_SINGLE_POP] +#define TARGET_DOUBLE_POP ix86_tune_features[X86_TUNE_DOUBLE_POP] +#define TARGET_SINGLE_PUSH ix86_tune_features[X86_TUNE_SINGLE_PUSH] +#define TARGET_DOUBLE_PUSH ix86_tune_features[X86_TUNE_DOUBLE_PUSH] +#define TARGET_INTEGER_DFMODE_MOVES \ + ix86_tune_features[X86_TUNE_INTEGER_DFMODE_MOVES] +#define TARGET_PARTIAL_REG_DEPENDENCY \ + ix86_tune_features[X86_TUNE_PARTIAL_REG_DEPENDENCY] +#define TARGET_SSE_PARTIAL_REG_DEPENDENCY \ + ix86_tune_features[X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY] +#define TARGET_SSE_UNALIGNED_LOAD_OPTIMAL \ + ix86_tune_features[X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL] +#define TARGET_SSE_UNALIGNED_STORE_OPTIMAL \ + ix86_tune_features[X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL] +#define TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL \ + ix86_tune_features[X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL] +#define TARGET_SSE_SPLIT_REGS ix86_tune_features[X86_TUNE_SSE_SPLIT_REGS] +#define TARGET_SSE_TYPELESS_STORES \ + ix86_tune_features[X86_TUNE_SSE_TYPELESS_STORES] +#define TARGET_SSE_LOAD0_BY_PXOR ix86_tune_features[X86_TUNE_SSE_LOAD0_BY_PXOR] +#define TARGET_MEMORY_MISMATCH_STALL \ + ix86_tune_features[X86_TUNE_MEMORY_MISMATCH_STALL] +#define TARGET_PROLOGUE_USING_MOVE \ + ix86_tune_features[X86_TUNE_PROLOGUE_USING_MOVE] +#define TARGET_EPILOGUE_USING_MOVE \ + ix86_tune_features[X86_TUNE_EPILOGUE_USING_MOVE] +#define TARGET_SHIFT1 ix86_tune_features[X86_TUNE_SHIFT1] +#define TARGET_USE_FFREEP ix86_tune_features[X86_TUNE_USE_FFREEP] +#define TARGET_INTER_UNIT_MOVES_TO_VEC \ + ix86_tune_features[X86_TUNE_INTER_UNIT_MOVES_TO_VEC] +#define TARGET_INTER_UNIT_MOVES_FROM_VEC \ + ix86_tune_features[X86_TUNE_INTER_UNIT_MOVES_FROM_VEC] +#define TARGET_INTER_UNIT_CONVERSIONS \ + ix86_tune_features[X86_TUNE_INTER_UNIT_CONVERSIONS] +#define TARGET_FOUR_JUMP_LIMIT ix86_tune_features[X86_TUNE_FOUR_JUMP_LIMIT] +#define TARGET_SCHEDULE ix86_tune_features[X86_TUNE_SCHEDULE] +#define TARGET_USE_BT ix86_tune_features[X86_TUNE_USE_BT] +#define TARGET_USE_INCDEC ix86_tune_features[X86_TUNE_USE_INCDEC] +#define TARGET_PAD_RETURNS ix86_tune_features[X86_TUNE_PAD_RETURNS] +#define TARGET_PAD_SHORT_FUNCTION \ + ix86_tune_features[X86_TUNE_PAD_SHORT_FUNCTION] +#define TARGET_EXT_80387_CONSTANTS \ + ix86_tune_features[X86_TUNE_EXT_80387_CONSTANTS] +#define TARGET_AVOID_VECTOR_DECODE \ + ix86_tune_features[X86_TUNE_AVOID_VECTOR_DECODE] +#define TARGET_TUNE_PROMOTE_HIMODE_IMUL \ + ix86_tune_features[X86_TUNE_PROMOTE_HIMODE_IMUL] +#define TARGET_SLOW_IMUL_IMM32_MEM \ + ix86_tune_features[X86_TUNE_SLOW_IMUL_IMM32_MEM] +#define TARGET_SLOW_IMUL_IMM8 ix86_tune_features[X86_TUNE_SLOW_IMUL_IMM8] +#define TARGET_MOVE_M1_VIA_OR ix86_tune_features[X86_TUNE_MOVE_M1_VIA_OR] +#define TARGET_NOT_UNPAIRABLE ix86_tune_features[X86_TUNE_NOT_UNPAIRABLE] +#define TARGET_NOT_VECTORMODE ix86_tune_features[X86_TUNE_NOT_VECTORMODE] +#define TARGET_USE_VECTOR_FP_CONVERTS \ + ix86_tune_features[X86_TUNE_USE_VECTOR_FP_CONVERTS] +#define TARGET_USE_VECTOR_CONVERTS \ + ix86_tune_features[X86_TUNE_USE_VECTOR_CONVERTS] +#define TARGET_SLOW_PSHUFB \ + ix86_tune_features[X86_TUNE_SLOW_PSHUFB] +#define TARGET_VECTOR_PARALLEL_EXECUTION \ + ix86_tune_features[X86_TUNE_VECTOR_PARALLEL_EXECUTION] +#define TARGET_AVOID_4BYTE_PREFIXES \ + ix86_tune_features[X86_TUNE_AVOID_4BYTE_PREFIXES] +#define TARGET_FUSE_CMP_AND_BRANCH_32 \ + ix86_tune_features[X86_TUNE_FUSE_CMP_AND_BRANCH_32] +#define TARGET_FUSE_CMP_AND_BRANCH_64 \ + ix86_tune_features[X86_TUNE_FUSE_CMP_AND_BRANCH_64] +#define TARGET_FUSE_CMP_AND_BRANCH \ + (TARGET_64BIT ? TARGET_FUSE_CMP_AND_BRANCH_64 \ + : TARGET_FUSE_CMP_AND_BRANCH_32) +#define TARGET_FUSE_CMP_AND_BRANCH_SOFLAGS \ + ix86_tune_features[X86_TUNE_FUSE_CMP_AND_BRANCH_SOFLAGS] +#define TARGET_FUSE_ALU_AND_BRANCH \ + ix86_tune_features[X86_TUNE_FUSE_ALU_AND_BRANCH] +#define TARGET_OPT_AGU ix86_tune_features[X86_TUNE_OPT_AGU] +#define TARGET_AVOID_LEA_FOR_ADDR \ + ix86_tune_features[X86_TUNE_AVOID_LEA_FOR_ADDR] +#define TARGET_VECTORIZE_DOUBLE \ + ix86_tune_features[X86_TUNE_VECTORIZE_DOUBLE] +#define TARGET_SOFTWARE_PREFETCHING_BENEFICIAL \ + ix86_tune_features[X86_TUNE_SOFTWARE_PREFETCHING_BENEFICIAL] +#define TARGET_AVX128_OPTIMAL \ + ix86_tune_features[X86_TUNE_AVX128_OPTIMAL] +#define TARGET_REASSOC_INT_TO_PARALLEL \ + ix86_tune_features[X86_TUNE_REASSOC_INT_TO_PARALLEL] +#define TARGET_REASSOC_FP_TO_PARALLEL \ + ix86_tune_features[X86_TUNE_REASSOC_FP_TO_PARALLEL] +#define TARGET_GENERAL_REGS_SSE_SPILL \ + ix86_tune_features[X86_TUNE_GENERAL_REGS_SSE_SPILL] +#define TARGET_AVOID_MEM_OPND_FOR_CMOVE \ + ix86_tune_features[X86_TUNE_AVOID_MEM_OPND_FOR_CMOVE] +#define TARGET_SPLIT_MEM_OPND_FOR_FP_CONVERTS \ + ix86_tune_features[X86_TUNE_SPLIT_MEM_OPND_FOR_FP_CONVERTS] +#define TARGET_ADJUST_UNROLL \ + ix86_tune_features[X86_TUNE_ADJUST_UNROLL] +#define TARGET_AVOID_FALSE_DEP_FOR_BMI \ + ix86_tune_features[X86_TUNE_AVOID_FALSE_DEP_FOR_BMI] + +/* Feature tests against the various architecture variations. */ +enum ix86_arch_indices { + X86_ARCH_CMOV, + X86_ARCH_CMPXCHG, + X86_ARCH_CMPXCHG8B, + X86_ARCH_XADD, + X86_ARCH_BSWAP, + + X86_ARCH_LAST +}; + +extern unsigned char ix86_arch_features[X86_ARCH_LAST]; + +#define TARGET_CMOV ix86_arch_features[X86_ARCH_CMOV] +#define TARGET_CMPXCHG ix86_arch_features[X86_ARCH_CMPXCHG] +#define TARGET_CMPXCHG8B ix86_arch_features[X86_ARCH_CMPXCHG8B] +#define TARGET_XADD ix86_arch_features[X86_ARCH_XADD] +#define TARGET_BSWAP ix86_arch_features[X86_ARCH_BSWAP] + +/* For sane SSE instruction set generation we need fcomi instruction. + It is safe to enable all CMOVE instructions. Also, RDRAND intrinsic + expands to a sequence that includes conditional move. */ +#define TARGET_CMOVE (TARGET_CMOV || TARGET_SSE || TARGET_RDRND) + +#define TARGET_FISTTP (TARGET_SSE3 && TARGET_80387) + +extern unsigned char x86_prefetch_sse; +#define TARGET_PREFETCH_SSE x86_prefetch_sse + +#define ASSEMBLER_DIALECT (ix86_asm_dialect) + +#define TARGET_SSE_MATH ((ix86_fpmath & FPMATH_SSE) != 0) +#define TARGET_MIX_SSE_I387 \ + ((ix86_fpmath & (FPMATH_SSE | FPMATH_387)) == (FPMATH_SSE | FPMATH_387)) + +#define TARGET_GNU_TLS (ix86_tls_dialect == TLS_DIALECT_GNU) +#define TARGET_GNU2_TLS (ix86_tls_dialect == TLS_DIALECT_GNU2) +#define TARGET_ANY_GNU_TLS (TARGET_GNU_TLS || TARGET_GNU2_TLS) +#define TARGET_SUN_TLS 0 + +#ifndef TARGET_64BIT_DEFAULT +#define TARGET_64BIT_DEFAULT 0 +#endif +#ifndef TARGET_TLS_DIRECT_SEG_REFS_DEFAULT +#define TARGET_TLS_DIRECT_SEG_REFS_DEFAULT 0 +#endif + +#define TARGET_SSP_GLOBAL_GUARD (ix86_stack_protector_guard == SSP_GLOBAL) +#define TARGET_SSP_TLS_GUARD (ix86_stack_protector_guard == SSP_TLS) + +/* Fence to use after loop using storent. */ + +extern tree x86_mfence; +#define FENCE_FOLLOWING_MOVNT x86_mfence + +/* Once GDB has been enhanced to deal with functions without frame + pointers, we can change this to allow for elimination of + the frame pointer in leaf functions. */ +#define TARGET_DEFAULT 0 + +/* Extra bits to force. */ +#define TARGET_SUBTARGET_DEFAULT 0 +#define TARGET_SUBTARGET_ISA_DEFAULT 0 + +/* Extra bits to force on w/ 32-bit mode. */ +#define TARGET_SUBTARGET32_DEFAULT 0 +#define TARGET_SUBTARGET32_ISA_DEFAULT 0 + +/* Extra bits to force on w/ 64-bit mode. */ +#define TARGET_SUBTARGET64_DEFAULT 0 +#define TARGET_SUBTARGET64_ISA_DEFAULT 0 + +/* Replace MACH-O, ifdefs by in-line tests, where possible. + (a) Macros defined in config/i386/darwin.h */ +#define TARGET_MACHO 0 +#define TARGET_MACHO_BRANCH_ISLANDS 0 +#define MACHOPIC_ATT_STUB 0 +/* (b) Macros defined in config/darwin.h */ +#define MACHO_DYNAMIC_NO_PIC_P 0 +#define MACHOPIC_INDIRECT 0 +#define MACHOPIC_PURE 0 + +/* For the RDOS */ +#define TARGET_RDOS 0 + +/* For the Windows 64-bit ABI. */ +#define TARGET_64BIT_MS_ABI (TARGET_64BIT && ix86_cfun_abi () == MS_ABI) + +/* For the Windows 32-bit ABI. */ +#define TARGET_32BIT_MS_ABI (!TARGET_64BIT && ix86_cfun_abi () == MS_ABI) + +/* This is re-defined by cygming.h. */ +#define TARGET_SEH 0 + +/* This is re-defined by cygming.h. */ +#define TARGET_PECOFF 0 + +/* The default abi used by target. */ +#define DEFAULT_ABI SYSV_ABI + +/* The default TLS segment register used by target. */ +#define DEFAULT_TLS_SEG_REG (TARGET_64BIT ? SEG_FS : SEG_GS) + +/* Subtargets may reset this to 1 in order to enable 96-bit long double + with the rounding mode forced to 53 bits. */ +#define TARGET_96_ROUND_53_LONG_DOUBLE 0 + +/* -march=native handling only makes sense with compiler running on + an x86 or x86_64 chip. If changing this condition, also change + the condition in driver-i386.c. */ +#if defined(__i386__) || defined(__x86_64__) +/* In driver-i386.c. */ +extern const char *host_detect_local_cpu (int argc, const char **argv); +#define EXTRA_SPEC_FUNCTIONS \ + { "local_cpu_detect", host_detect_local_cpu }, +#define HAVE_LOCAL_CPU_DETECT +#endif + +#if TARGET_64BIT_DEFAULT +#define OPT_ARCH64 "!m32" +#define OPT_ARCH32 "m32" +#else +#define OPT_ARCH64 "m64|mx32" +#define OPT_ARCH32 "m64|mx32:;" +#endif + +/* Support for configure-time defaults of some command line options. + The order here is important so that -march doesn't squash the + tune or cpu values. */ +#define OPTION_DEFAULT_SPECS \ + {"tune", "%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}" }, \ + {"tune_32", "%{" OPT_ARCH32 ":%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}}" }, \ + {"tune_64", "%{" OPT_ARCH64 ":%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}}" }, \ + {"cpu", "%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}" }, \ + {"cpu_32", "%{" OPT_ARCH32 ":%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}}" }, \ + {"cpu_64", "%{" OPT_ARCH64 ":%{!mtune=*:%{!mcpu=*:%{!march=*:-mtune=%(VALUE)}}}}" }, \ + {"arch", "%{!march=*:-march=%(VALUE)}"}, \ + {"arch_32", "%{" OPT_ARCH32 ":%{!march=*:-march=%(VALUE)}}"}, \ + {"arch_64", "%{" OPT_ARCH64 ":%{!march=*:-march=%(VALUE)}}"}, + +/* Specs for the compiler proper */ + +#ifndef CC1_CPU_SPEC +#define CC1_CPU_SPEC_1 "" + +#ifndef HAVE_LOCAL_CPU_DETECT +#define CC1_CPU_SPEC CC1_CPU_SPEC_1 +#else +#define CC1_CPU_SPEC CC1_CPU_SPEC_1 \ +"%{march=native:%>march=native %:local_cpu_detect(arch) \ + %{!mtune=*:%>mtune=native %:local_cpu_detect(tune)}} \ +%{mtune=native:%>mtune=native %:local_cpu_detect(tune)}" +#endif +#endif + +/* Target CPU builtins. */ +#define TARGET_CPU_CPP_BUILTINS() ix86_target_macros () + +/* Target Pragmas. */ +#define REGISTER_TARGET_PRAGMAS() ix86_register_pragmas () + +#ifndef CC1_SPEC +#define CC1_SPEC "%(cc1_cpu) " +#endif + +/* This macro defines names of additional specifications to put in the + specs that can be used in various specifications like CC1_SPEC. Its + definition is an initializer with a subgrouping for each command option. + + Each subgrouping contains a string constant, that defines the + specification name, and a string constant that used by the GCC driver + program. + + Do not define this macro if it does not need to do anything. */ + +#ifndef SUBTARGET_EXTRA_SPECS +#define SUBTARGET_EXTRA_SPECS +#endif + +#define EXTRA_SPECS \ + { "cc1_cpu", CC1_CPU_SPEC }, \ + SUBTARGET_EXTRA_SPECS + + +/* Set the value of FLT_EVAL_METHOD in float.h. When using only the + FPU, assume that the fpcw is set to extended precision; when using + only SSE, rounding is correct; when using both SSE and the FPU, + the rounding precision is indeterminate, since either may be chosen + apparently at random. */ +#define TARGET_FLT_EVAL_METHOD \ + (TARGET_MIX_SSE_I387 ? -1 : TARGET_SSE_MATH ? 0 : 2) + +/* Whether to allow x87 floating-point arithmetic on MODE (one of + SFmode, DFmode and XFmode) in the current excess precision + configuration. */ +#define X87_ENABLE_ARITH(MODE) \ + (flag_excess_precision == EXCESS_PRECISION_FAST || (MODE) == XFmode) + +/* Likewise, whether to allow direct conversions from integer mode + IMODE (HImode, SImode or DImode) to MODE. */ +#define X87_ENABLE_FLOAT(MODE, IMODE) \ + (flag_excess_precision == EXCESS_PRECISION_FAST \ + || (MODE) == XFmode \ + || ((MODE) == DFmode && (IMODE) == SImode) \ + || (IMODE) == HImode) + +/* target machine storage layout */ + +#define SHORT_TYPE_SIZE 16 +#define INT_TYPE_SIZE 32 +#define LONG_TYPE_SIZE (TARGET_X32 ? 32 : BITS_PER_WORD) +#define POINTER_SIZE (TARGET_X32 ? 32 : BITS_PER_WORD) +#define LONG_LONG_TYPE_SIZE 64 +#define FLOAT_TYPE_SIZE 32 +#define DOUBLE_TYPE_SIZE 64 +#define LONG_DOUBLE_TYPE_SIZE \ + (TARGET_LONG_DOUBLE_64 ? 64 : (TARGET_LONG_DOUBLE_128 ? 128 : 80)) + +#define WIDEST_HARDWARE_FP_SIZE 80 + +#if defined (TARGET_BI_ARCH) || TARGET_64BIT_DEFAULT +#define MAX_BITS_PER_WORD 64 +#else +#define MAX_BITS_PER_WORD 32 +#endif + +/* Define this if most significant byte of a word is the lowest numbered. */ +/* That is true on the 80386. */ + +#define BITS_BIG_ENDIAN 0 + +/* Define this if most significant byte of a word is the lowest numbered. */ +/* That is not true on the 80386. */ +#define BYTES_BIG_ENDIAN 0 + +/* Define this if most significant word of a multiword number is the lowest + numbered. */ +/* Not true for 80386 */ +#define WORDS_BIG_ENDIAN 0 + +/* Width of a word, in units (bytes). */ +#define UNITS_PER_WORD (TARGET_64BIT ? 8 : 4) + +#ifndef IN_LIBGCC2 +#define MIN_UNITS_PER_WORD 4 +#endif + +/* Allocation boundary (in *bits*) for storing arguments in argument list. */ +#define PARM_BOUNDARY BITS_PER_WORD + +/* Boundary (in *bits*) on which stack pointer should be aligned. */ +#define STACK_BOUNDARY \ + (TARGET_64BIT && ix86_abi == MS_ABI ? 128 : BITS_PER_WORD) + +/* Stack boundary of the main function guaranteed by OS. */ +#define MAIN_STACK_BOUNDARY (TARGET_64BIT ? 128 : 32) + +/* Minimum stack boundary. */ +#define MIN_STACK_BOUNDARY BITS_PER_WORD + +/* Boundary (in *bits*) on which the stack pointer prefers to be + aligned; the compiler cannot rely on having this alignment. */ +#define PREFERRED_STACK_BOUNDARY ix86_preferred_stack_boundary + +/* It should be MIN_STACK_BOUNDARY. But we set it to 128 bits for + both 32bit and 64bit, to support codes that need 128 bit stack + alignment for SSE instructions, but can't realign the stack. */ +#define PREFERRED_STACK_BOUNDARY_DEFAULT 128 + +/* 1 if -mstackrealign should be turned on by default. It will + generate an alternate prologue and epilogue that realigns the + runtime stack if nessary. This supports mixing codes that keep a + 4-byte aligned stack, as specified by i386 psABI, with codes that + need a 16-byte aligned stack, as required by SSE instructions. */ +#define STACK_REALIGN_DEFAULT 0 + +/* Boundary (in *bits*) on which the incoming stack is aligned. */ +#define INCOMING_STACK_BOUNDARY ix86_incoming_stack_boundary + +/* According to Windows x64 software convention, the maximum stack allocatable + in the prologue is 4G - 8 bytes. Furthermore, there is a limited set of + instructions allowed to adjust the stack pointer in the epilog, forcing the + use of frame pointer for frames larger than 2 GB. This theorical limit + is reduced by 256, an over-estimated upper bound for the stack use by the + prologue. + We define only one threshold for both the prolog and the epilog. When the + frame size is larger than this threshold, we allocate the area to save SSE + regs, then save them, and then allocate the remaining. There is no SEH + unwind info for this later allocation. */ +#define SEH_MAX_FRAME_SIZE ((2U << 30) - 256) + +/* Target OS keeps a vector-aligned (128-bit, 16-byte) stack. This is + mandatory for the 64-bit ABI, and may or may not be true for other + operating systems. */ +#define TARGET_KEEPS_VECTOR_ALIGNED_STACK TARGET_64BIT + +/* Minimum allocation boundary for the code of a function. */ +#define FUNCTION_BOUNDARY 8 + +/* C++ stores the virtual bit in the lowest bit of function pointers. */ +#define TARGET_PTRMEMFUNC_VBIT_LOCATION ptrmemfunc_vbit_in_pfn + +/* Minimum size in bits of the largest boundary to which any + and all fundamental data types supported by the hardware + might need to be aligned. No data type wants to be aligned + rounder than this. + + Pentium+ prefers DFmode values to be aligned to 64 bit boundary + and Pentium Pro XFmode values at 128 bit boundaries. + + When increasing the maximum, also update + TARGET_ABSOLUTE_BIGGEST_ALIGNMENT. */ + +#define BIGGEST_ALIGNMENT \ + (TARGET_AVX512F ? 512 : (TARGET_AVX ? 256 : 128)) + +/* Maximum stack alignment. */ +#define MAX_STACK_ALIGNMENT MAX_OFILE_ALIGNMENT + +/* Alignment value for attribute ((aligned)). It is a constant since + it is the part of the ABI. We shouldn't change it with -mavx. */ +#define ATTRIBUTE_ALIGNED_VALUE 128 + +/* Decide whether a variable of mode MODE should be 128 bit aligned. */ +#define ALIGN_MODE_128(MODE) \ + ((MODE) == XFmode || SSE_REG_MODE_P (MODE)) + +/* The published ABIs say that doubles should be aligned on word + boundaries, so lower the alignment for structure fields unless + -malign-double is set. */ + +/* ??? Blah -- this macro is used directly by libobjc. Since it + supports no vector modes, cut out the complexity and fall back + on BIGGEST_FIELD_ALIGNMENT. */ +#ifdef IN_TARGET_LIBS +#ifdef __x86_64__ +#define BIGGEST_FIELD_ALIGNMENT 128 +#else +#define BIGGEST_FIELD_ALIGNMENT 32 +#endif +#else +#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ + x86_field_alignment (FIELD, COMPUTED) +#endif + +/* If defined, a C expression to compute the alignment given to a + constant that is being placed in memory. EXP is the constant + and ALIGN is the alignment that the object would ordinarily have. + The value of this macro is used instead of that alignment to align + the object. + + If this macro is not defined, then ALIGN is used. + + The typical use of this macro is to increase alignment for string + constants to be word aligned so that `strcpy' calls that copy + constants can be done inline. */ + +#define CONSTANT_ALIGNMENT(EXP, ALIGN) ix86_constant_alignment ((EXP), (ALIGN)) + +/* If defined, a C expression to compute the alignment for a static + variable. TYPE is the data type, and ALIGN is the alignment that + the object would ordinarily have. The value of this macro is used + instead of that alignment to align the object. + + If this macro is not defined, then ALIGN is used. + + One use of this macro is to increase alignment of medium-size + data to make it all fit in fewer cache lines. Another is to + cause character arrays to be word-aligned so that `strcpy' calls + that copy constants to character arrays can be done inline. */ + +#define DATA_ALIGNMENT(TYPE, ALIGN) \ + ix86_data_alignment ((TYPE), (ALIGN), true) + +/* Similar to DATA_ALIGNMENT, but for the cases where the ABI mandates + some alignment increase, instead of optimization only purposes. E.g. + AMD x86-64 psABI says that variables with array type larger than 15 bytes + must be aligned to 16 byte boundaries. + + If this macro is not defined, then ALIGN is used. */ + +#define DATA_ABI_ALIGNMENT(TYPE, ALIGN) \ + ix86_data_alignment ((TYPE), (ALIGN), false) + +/* If defined, a C expression to compute the alignment for a local + variable. TYPE is the data type, and ALIGN is the alignment that + the object would ordinarily have. The value of this macro is used + instead of that alignment to align the object. + + If this macro is not defined, then ALIGN is used. + + One use of this macro is to increase alignment of medium-size + data to make it all fit in fewer cache lines. */ + +#define LOCAL_ALIGNMENT(TYPE, ALIGN) \ + ix86_local_alignment ((TYPE), VOIDmode, (ALIGN)) + +/* If defined, a C expression to compute the alignment for stack slot. + TYPE is the data type, MODE is the widest mode available, and ALIGN + is the alignment that the slot would ordinarily have. The value of + this macro is used instead of that alignment to align the slot. + + If this macro is not defined, then ALIGN is used when TYPE is NULL, + Otherwise, LOCAL_ALIGNMENT will be used. + + One use of this macro is to set alignment of stack slot to the + maximum alignment of all possible modes which the slot may have. */ + +#define STACK_SLOT_ALIGNMENT(TYPE, MODE, ALIGN) \ + ix86_local_alignment ((TYPE), (MODE), (ALIGN)) + +/* If defined, a C expression to compute the alignment for a local + variable DECL. + + If this macro is not defined, then + LOCAL_ALIGNMENT (TREE_TYPE (DECL), DECL_ALIGN (DECL)) will be used. + + One use of this macro is to increase alignment of medium-size + data to make it all fit in fewer cache lines. */ + +#define LOCAL_DECL_ALIGNMENT(DECL) \ + ix86_local_alignment ((DECL), VOIDmode, DECL_ALIGN (DECL)) + +/* If defined, a C expression to compute the minimum required alignment + for dynamic stack realignment purposes for EXP (a TYPE or DECL), + MODE, assuming normal alignment ALIGN. + + If this macro is not defined, then (ALIGN) will be used. */ + +#define MINIMUM_ALIGNMENT(EXP, MODE, ALIGN) \ + ix86_minimum_alignment (EXP, MODE, ALIGN) + + +/* Set this nonzero if move instructions will actually fail to work + when given unaligned data. */ +#define STRICT_ALIGNMENT 0 + +/* If bit field type is int, don't let it cross an int, + and give entire struct the alignment of an int. */ +/* Required on the 386 since it doesn't have bit-field insns. */ +#define PCC_BITFIELD_TYPE_MATTERS 1 + +/* Standard register usage. */ + +/* This processor has special stack-like registers. See reg-stack.c + for details. */ + +#define STACK_REGS + +#define IS_STACK_MODE(MODE) \ + (((MODE) == SFmode && !(TARGET_SSE && TARGET_SSE_MATH)) \ + || ((MODE) == DFmode && !(TARGET_SSE2 && TARGET_SSE_MATH)) \ + || (MODE) == XFmode) + +/* Number of actual hardware registers. + The hardware registers are assigned numbers for the compiler + from 0 to just below FIRST_PSEUDO_REGISTER. + All registers that the compiler knows about must be given numbers, + even those that are not normally considered general registers. + + In the 80386 we give the 8 general purpose registers the numbers 0-7. + We number the floating point registers 8-15. + Note that registers 0-7 can be accessed as a short or int, + while only 0-3 may be used with byte `mov' instructions. + + Reg 16 does not correspond to any hardware register, but instead + appears in the RTL as an argument pointer prior to reload, and is + eliminated during reloading in favor of either the stack or frame + pointer. */ + +#define FIRST_PSEUDO_REGISTER 81 + +/* Number of hardware registers that go into the DWARF-2 unwind info. + If not defined, equals FIRST_PSEUDO_REGISTER. */ + +#define DWARF_FRAME_REGISTERS 17 + +/* 1 for registers that have pervasive standard uses + and are not available for the register allocator. + On the 80386, the stack pointer is such, as is the arg pointer. + + REX registers are disabled for 32bit targets in + TARGET_CONDITIONAL_REGISTER_USAGE. */ + +#define FIXED_REGISTERS \ +/*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7*/ \ +{ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ +/*arg,flags,fpsr,fpcr,frame*/ \ + 1, 1, 1, 1, 1, \ +/*xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7*/ \ + 0, 0, 0, 0, 0, 0, 0, 0, \ +/* mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7*/ \ + 0, 0, 0, 0, 0, 0, 0, 0, \ +/* r8, r9, r10, r11, r12, r13, r14, r15*/ \ + 0, 0, 0, 0, 0, 0, 0, 0, \ +/*xmm8,xmm9,xmm10,xmm11,xmm12,xmm13,xmm14,xmm15*/ \ + 0, 0, 0, 0, 0, 0, 0, 0, \ +/*xmm16,xmm17,xmm18,xmm19,xmm20,xmm21,xmm22,xmm23*/ \ + 0, 0, 0, 0, 0, 0, 0, 0, \ +/*xmm24,xmm25,xmm26,xmm27,xmm28,xmm29,xmm30,xmm31*/ \ + 0, 0, 0, 0, 0, 0, 0, 0, \ +/* k0, k1, k2, k3, k4, k5, k6, k7*/ \ + 0, 0, 0, 0, 0, 0, 0, 0, \ +/* b0, b1, b2, b3*/ \ + 0, 0, 0, 0 } + +/* 1 for registers not available across function calls. + These must include the FIXED_REGISTERS and also any + registers that can be used without being saved. + The latter must include the registers where values are returned + and the register where structure-value addresses are passed. + Aside from that, you can include as many other registers as you like. + + Value is set to 1 if the register is call used unconditionally. + Bit one is set if the register is call used on TARGET_32BIT ABI. + Bit two is set if the register is call used on TARGET_64BIT ABI. + Bit three is set if the register is call used on TARGET_64BIT_MS_ABI. + + Proper values are computed in TARGET_CONDITIONAL_REGISTER_USAGE. */ + +#define CALL_USED_REGISTERS \ +/*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7*/ \ +{ 1, 1, 1, 0, 4, 4, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ +/*arg,flags,fpsr,fpcr,frame*/ \ + 1, 1, 1, 1, 1, \ +/*xmm0,xmm1,xmm2,xmm3,xmm4,xmm5,xmm6,xmm7*/ \ + 1, 1, 1, 1, 1, 1, 6, 6, \ +/* mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7*/ \ + 1, 1, 1, 1, 1, 1, 1, 1, \ +/* r8, r9, r10, r11, r12, r13, r14, r15*/ \ + 1, 1, 1, 1, 2, 2, 2, 2, \ +/*xmm8,xmm9,xmm10,xmm11,xmm12,xmm13,xmm14,xmm15*/ \ + 6, 6, 6, 6, 6, 6, 6, 6, \ +/*xmm16,xmm17,xmm18,xmm19,xmm20,xmm21,xmm22,xmm23*/ \ + 6, 6, 6, 6, 6, 6, 6, 6, \ +/*xmm24,xmm25,xmm26,xmm27,xmm28,xmm29,xmm30,xmm31*/ \ + 6, 6, 6, 6, 6, 6, 6, 6, \ + /* k0, k1, k2, k3, k4, k5, k6, k7*/ \ + 1, 1, 1, 1, 1, 1, 1, 1, \ +/* b0, b1, b2, b3*/ \ + 1, 1, 1, 1 } + +/* Order in which to allocate registers. Each register must be + listed once, even those in FIXED_REGISTERS. List frame pointer + late and fixed registers last. Note that, in general, we prefer + registers listed in CALL_USED_REGISTERS, keeping the others + available for storage of persistent values. + + The ADJUST_REG_ALLOC_ORDER actually overwrite the order, + so this is just empty initializer for array. */ + +#define REG_ALLOC_ORDER \ +{ 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, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, \ + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, \ + 78, 79, 80 } + +/* ADJUST_REG_ALLOC_ORDER is a macro which permits reg_alloc_order + to be rearranged based on a particular function. When using sse math, + we want to allocate SSE before x87 registers and vice versa. */ + +#define ADJUST_REG_ALLOC_ORDER x86_order_regs_for_local_alloc () + + +#define OVERRIDE_ABI_FORMAT(FNDECL) ix86_call_abi_override (FNDECL) + +/* Return number of consecutive hard regs needed starting at reg REGNO + to hold something of mode MODE. + This is ordinarily the length in words of a value of mode MODE + but can be less for certain modes in special long registers. + + Actually there are no two word move instructions for consecutive + registers. And only registers 0-3 may have mov byte instructions + applied to them. */ + +#define HARD_REGNO_NREGS(REGNO, MODE) \ + (STACK_REGNO_P (REGNO) || SSE_REGNO_P (REGNO) || MMX_REGNO_P (REGNO) \ + || MASK_REGNO_P (REGNO) || BND_REGNO_P (REGNO) \ + ? (COMPLEX_MODE_P (MODE) ? 2 : 1) \ + : ((MODE) == XFmode \ + ? (TARGET_64BIT ? 2 : 3) \ + : (MODE) == XCmode \ + ? (TARGET_64BIT ? 4 : 6) \ + : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))) + +#define HARD_REGNO_NREGS_HAS_PADDING(REGNO, MODE) \ + ((TARGET_128BIT_LONG_DOUBLE && !TARGET_64BIT) \ + ? (STACK_REGNO_P (REGNO) || SSE_REGNO_P (REGNO) || MMX_REGNO_P (REGNO) \ + ? 0 \ + : ((MODE) == XFmode || (MODE) == XCmode)) \ + : 0) + +#define HARD_REGNO_NREGS_WITH_PADDING(REGNO, MODE) ((MODE) == XFmode ? 4 : 8) + +#define VALID_AVX256_REG_MODE(MODE) \ + ((MODE) == V32QImode || (MODE) == V16HImode || (MODE) == V8SImode \ + || (MODE) == V4DImode || (MODE) == V2TImode || (MODE) == V8SFmode \ + || (MODE) == V4DFmode) + +#define VALID_AVX256_REG_OR_OI_MODE(MODE) \ + (VALID_AVX256_REG_MODE (MODE) || (MODE) == OImode) + +#define VALID_AVX512F_SCALAR_MODE(MODE) \ + ((MODE) == DImode || (MODE) == DFmode || (MODE) == SImode \ + || (MODE) == SFmode) + +#define VALID_AVX512F_REG_MODE(MODE) \ + ((MODE) == V8DImode || (MODE) == V8DFmode || (MODE) == V64QImode \ + || (MODE) == V16SImode || (MODE) == V16SFmode || (MODE) == V32HImode \ + || (MODE) == V4TImode) + +#define VALID_AVX512VL_128_REG_MODE(MODE) \ + ((MODE) == V2DImode || (MODE) == V2DFmode || (MODE) == V16QImode \ + || (MODE) == V4SImode || (MODE) == V4SFmode || (MODE) == V8HImode) + +#define VALID_SSE2_REG_MODE(MODE) \ + ((MODE) == V16QImode || (MODE) == V8HImode || (MODE) == V2DFmode \ + || (MODE) == V2DImode || (MODE) == DFmode) + +#define VALID_SSE_REG_MODE(MODE) \ + ((MODE) == V1TImode || (MODE) == TImode \ + || (MODE) == V4SFmode || (MODE) == V4SImode \ + || (MODE) == SFmode || (MODE) == TFmode) + +#define VALID_MMX_REG_MODE_3DNOW(MODE) \ + ((MODE) == V2SFmode || (MODE) == SFmode) + +#define VALID_MMX_REG_MODE(MODE) \ + ((MODE == V1DImode) || (MODE) == DImode \ + || (MODE) == V2SImode || (MODE) == SImode \ + || (MODE) == V4HImode || (MODE) == V8QImode) + +#define VALID_BND_REG_MODE(MODE) \ + (TARGET_64BIT ? (MODE) == BND64mode : (MODE) == BND32mode) + +#define VALID_DFP_MODE_P(MODE) \ + ((MODE) == SDmode || (MODE) == DDmode || (MODE) == TDmode) + +#define VALID_FP_MODE_P(MODE) \ + ((MODE) == SFmode || (MODE) == DFmode || (MODE) == XFmode \ + || (MODE) == SCmode || (MODE) == DCmode || (MODE) == XCmode) \ + +#define VALID_INT_MODE_P(MODE) \ + ((MODE) == QImode || (MODE) == HImode || (MODE) == SImode \ + || (MODE) == DImode \ + || (MODE) == CQImode || (MODE) == CHImode || (MODE) == CSImode \ + || (MODE) == CDImode \ + || (TARGET_64BIT && ((MODE) == TImode || (MODE) == CTImode \ + || (MODE) == TFmode || (MODE) == TCmode))) + +/* Return true for modes passed in SSE registers. */ +#define SSE_REG_MODE_P(MODE) \ + ((MODE) == V1TImode || (MODE) == TImode || (MODE) == V16QImode \ + || (MODE) == TFmode || (MODE) == V8HImode || (MODE) == V2DFmode \ + || (MODE) == V2DImode || (MODE) == V4SFmode || (MODE) == V4SImode \ + || (MODE) == V32QImode || (MODE) == V16HImode || (MODE) == V8SImode \ + || (MODE) == V4DImode || (MODE) == V8SFmode || (MODE) == V4DFmode \ + || (MODE) == V2TImode || (MODE) == V8DImode || (MODE) == V64QImode \ + || (MODE) == V16SImode || (MODE) == V32HImode || (MODE) == V8DFmode \ + || (MODE) == V16SFmode) + +#define VALID_MASK_REG_MODE(MODE) ((MODE) == HImode || (MODE) == QImode) + +#define VALID_MASK_AVX512BW_MODE(MODE) ((MODE) == SImode || (MODE) == DImode) + +/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. */ + +#define HARD_REGNO_MODE_OK(REGNO, MODE) \ + ix86_hard_regno_mode_ok ((REGNO), (MODE)) + +/* Value is 1 if it is a good idea to tie two pseudo registers + when one has mode MODE1 and one has mode MODE2. + If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2, + for any hard reg, then this must be 0 for correct output. */ + +#define MODES_TIEABLE_P(MODE1, MODE2) ix86_modes_tieable_p (MODE1, MODE2) + +/* It is possible to write patterns to move flags; but until someone + does it, */ +#define AVOID_CCMODE_COPIES + +/* Specify the modes required to caller save a given hard regno. + We do this on i386 to prevent flags from being saved at all. + + Kill any attempts to combine saving of modes. */ + +#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \ + (CC_REGNO_P (REGNO) ? VOIDmode \ + : (MODE) == VOIDmode && (NREGS) != 1 ? VOIDmode \ + : (MODE) == VOIDmode ? choose_hard_reg_mode ((REGNO), (NREGS), false) \ + : (MODE) == HImode && !(TARGET_PARTIAL_REG_STALL \ + || MASK_REGNO_P (REGNO)) ? SImode \ + : (MODE) == QImode && !(TARGET_64BIT || QI_REGNO_P (REGNO) \ + || MASK_REGNO_P (REGNO)) ? SImode \ + : (MODE)) + +/* The only ABI that saves SSE registers across calls is Win64 (thus no + need to check the current ABI here), and with AVX enabled Win64 only + guarantees that the low 16 bytes are saved. */ +#define HARD_REGNO_CALL_PART_CLOBBERED(REGNO, MODE) \ + (SSE_REGNO_P (REGNO) && GET_MODE_SIZE (MODE) > 16) + +/* Specify the registers used for certain standard purposes. + The values of these macros are register numbers. */ + +/* on the 386 the pc register is %eip, and is not usable as a general + register. The ordinary mov instructions won't work */ +/* #define PC_REGNUM */ + +/* Register to use for pushing function arguments. */ +#define STACK_POINTER_REGNUM 7 + +/* Base register for access to local variables of the function. */ +#define HARD_FRAME_POINTER_REGNUM 6 + +/* Base register for access to local variables of the function. */ +#define FRAME_POINTER_REGNUM 20 + +/* First floating point reg */ +#define FIRST_FLOAT_REG 8 + +/* First & last stack-like regs */ +#define FIRST_STACK_REG FIRST_FLOAT_REG +#define LAST_STACK_REG (FIRST_FLOAT_REG + 7) + +#define FIRST_SSE_REG (FRAME_POINTER_REGNUM + 1) +#define LAST_SSE_REG (FIRST_SSE_REG + 7) + +#define FIRST_MMX_REG (LAST_SSE_REG + 1) /*29*/ +#define LAST_MMX_REG (FIRST_MMX_REG + 7) + +#define FIRST_REX_INT_REG (LAST_MMX_REG + 1) /*37*/ +#define LAST_REX_INT_REG (FIRST_REX_INT_REG + 7) + +#define FIRST_REX_SSE_REG (LAST_REX_INT_REG + 1) /*45*/ +#define LAST_REX_SSE_REG (FIRST_REX_SSE_REG + 7) + +#define FIRST_EXT_REX_SSE_REG (LAST_REX_SSE_REG + 1) /*53*/ +#define LAST_EXT_REX_SSE_REG (FIRST_EXT_REX_SSE_REG + 15) /*68*/ + +#define FIRST_MASK_REG (LAST_EXT_REX_SSE_REG + 1) /*69*/ +#define LAST_MASK_REG (FIRST_MASK_REG + 7) /*76*/ + +#define FIRST_BND_REG (LAST_MASK_REG + 1) /*77*/ +#define LAST_BND_REG (FIRST_BND_REG + 3) /*80*/ + +/* Override this in other tm.h files to cope with various OS lossage + requiring a frame pointer. */ +#ifndef SUBTARGET_FRAME_POINTER_REQUIRED +#define SUBTARGET_FRAME_POINTER_REQUIRED 0 +#endif + +/* Make sure we can access arbitrary call frames. */ +#define SETUP_FRAME_ADDRESSES() ix86_setup_frame_addresses () + +/* Base register for access to arguments of the function. */ +#define ARG_POINTER_REGNUM 16 + +/* Register to hold the addressing base for position independent + code access to data items. We don't use PIC pointer for 64bit + mode. Define the regnum to dummy value to prevent gcc from + pessimizing code dealing with EBX. + + To avoid clobbering a call-saved register unnecessarily, we renumber + the pic register when possible. The change is visible after the + prologue has been emitted. */ + +#define REAL_PIC_OFFSET_TABLE_REGNUM (TARGET_64BIT ? R15_REG : BX_REG) + +#define PIC_OFFSET_TABLE_REGNUM \ + (ix86_use_pseudo_pic_reg () \ + ? (pic_offset_table_rtx \ + ? INVALID_REGNUM \ + : REAL_PIC_OFFSET_TABLE_REGNUM) \ + : INVALID_REGNUM) + +#define GOT_SYMBOL_NAME "_GLOBAL_OFFSET_TABLE_" + +/* This is overridden by . */ +#define MS_AGGREGATE_RETURN 0 + +#define KEEP_AGGREGATE_RETURN_POINTER 0 + +/* Define the classes of registers for register constraints in the + machine description. Also define ranges of constants. + + One of the classes must always be named ALL_REGS and include all hard regs. + If there is more than one class, another class must be named NO_REGS + and contain no registers. + + The name GENERAL_REGS must be the name of a class (or an alias for + another name such as ALL_REGS). This is the class of registers + that is allowed by "g" or "r" in a register constraint. + Also, registers outside this class are allocated only when + instructions express preferences for them. + + The classes must be numbered in nondecreasing order; that is, + a larger-numbered class must never be contained completely + in a smaller-numbered class. + + For any two classes, it is very desirable that there be another + class that represents their union. + + It might seem that class BREG is unnecessary, since no useful 386 + opcode needs reg %ebx. But some systems pass args to the OS in ebx, + and the "b" register constraint is useful in asms for syscalls. + + The flags, fpsr and fpcr registers are in no class. */ + +enum reg_class +{ + NO_REGS, + AREG, DREG, CREG, BREG, SIREG, DIREG, + AD_REGS, /* %eax/%edx for DImode */ + Q_REGS, /* %eax %ebx %ecx %edx */ + NON_Q_REGS, /* %esi %edi %ebp %esp */ + INDEX_REGS, /* %eax %ebx %ecx %edx %esi %edi %ebp */ + LEGACY_REGS, /* %eax %ebx %ecx %edx %esi %edi %ebp %esp */ + CLOBBERED_REGS, /* call-clobbered integer registers */ + GENERAL_REGS, /* %eax %ebx %ecx %edx %esi %edi %ebp %esp + %r8 %r9 %r10 %r11 %r12 %r13 %r14 %r15 */ + FP_TOP_REG, FP_SECOND_REG, /* %st(0) %st(1) */ + FLOAT_REGS, + SSE_FIRST_REG, + NO_REX_SSE_REGS, + SSE_REGS, + EVEX_SSE_REGS, + BND_REGS, + ALL_SSE_REGS, + MMX_REGS, + FP_TOP_SSE_REGS, + FP_SECOND_SSE_REGS, + FLOAT_SSE_REGS, + FLOAT_INT_REGS, + INT_SSE_REGS, + FLOAT_INT_SSE_REGS, + MASK_EVEX_REGS, + MASK_REGS, + ALL_REGS, LIM_REG_CLASSES +}; + +#define N_REG_CLASSES ((int) LIM_REG_CLASSES) + +#define INTEGER_CLASS_P(CLASS) \ + reg_class_subset_p ((CLASS), GENERAL_REGS) +#define FLOAT_CLASS_P(CLASS) \ + reg_class_subset_p ((CLASS), FLOAT_REGS) +#define SSE_CLASS_P(CLASS) \ + reg_class_subset_p ((CLASS), ALL_SSE_REGS) +#define MMX_CLASS_P(CLASS) \ + ((CLASS) == MMX_REGS) +#define MAYBE_INTEGER_CLASS_P(CLASS) \ + reg_classes_intersect_p ((CLASS), GENERAL_REGS) +#define MAYBE_FLOAT_CLASS_P(CLASS) \ + reg_classes_intersect_p ((CLASS), FLOAT_REGS) +#define MAYBE_SSE_CLASS_P(CLASS) \ + reg_classes_intersect_p ((CLASS), ALL_SSE_REGS) +#define MAYBE_MMX_CLASS_P(CLASS) \ + reg_classes_intersect_p ((CLASS), MMX_REGS) +#define MAYBE_MASK_CLASS_P(CLASS) \ + reg_classes_intersect_p ((CLASS), MASK_REGS) + +#define Q_CLASS_P(CLASS) \ + reg_class_subset_p ((CLASS), Q_REGS) + +#define MAYBE_NON_Q_CLASS_P(CLASS) \ + reg_classes_intersect_p ((CLASS), NON_Q_REGS) + +/* Give names of register classes as strings for dump file. */ + +#define REG_CLASS_NAMES \ +{ "NO_REGS", \ + "AREG", "DREG", "CREG", "BREG", \ + "SIREG", "DIREG", \ + "AD_REGS", \ + "Q_REGS", "NON_Q_REGS", \ + "INDEX_REGS", \ + "LEGACY_REGS", \ + "CLOBBERED_REGS", \ + "GENERAL_REGS", \ + "FP_TOP_REG", "FP_SECOND_REG", \ + "FLOAT_REGS", \ + "SSE_FIRST_REG", \ + "NO_REX_SSE_REGS", \ + "SSE_REGS", \ + "EVEX_SSE_REGS", \ + "BND_REGS", \ + "ALL_SSE_REGS", \ + "MMX_REGS", \ + "FP_TOP_SSE_REGS", \ + "FP_SECOND_SSE_REGS", \ + "FLOAT_SSE_REGS", \ + "FLOAT_INT_REGS", \ + "INT_SSE_REGS", \ + "FLOAT_INT_SSE_REGS", \ + "MASK_EVEX_REGS", \ + "MASK_REGS", \ + "ALL_REGS" } + +/* Define which registers fit in which classes. This is an initializer + for a vector of HARD_REG_SET of length N_REG_CLASSES. + + Note that CLOBBERED_REGS are calculated by + TARGET_CONDITIONAL_REGISTER_USAGE. */ + +#define REG_CLASS_CONTENTS \ +{ { 0x00, 0x0, 0x0 }, \ + { 0x01, 0x0, 0x0 }, /* AREG */ \ + { 0x02, 0x0, 0x0 }, /* DREG */ \ + { 0x04, 0x0, 0x0 }, /* CREG */ \ + { 0x08, 0x0, 0x0 }, /* BREG */ \ + { 0x10, 0x0, 0x0 }, /* SIREG */ \ + { 0x20, 0x0, 0x0 }, /* DIREG */ \ + { 0x03, 0x0, 0x0 }, /* AD_REGS */ \ + { 0x0f, 0x0, 0x0 }, /* Q_REGS */ \ + { 0x1100f0, 0x1fe0, 0x0 }, /* NON_Q_REGS */ \ + { 0x7f, 0x1fe0, 0x0 }, /* INDEX_REGS */ \ + { 0x1100ff, 0x0, 0x0 }, /* LEGACY_REGS */ \ + { 0x07, 0x0, 0x0 }, /* CLOBBERED_REGS */ \ + { 0x1100ff, 0x1fe0, 0x0 }, /* GENERAL_REGS */ \ + { 0x100, 0x0, 0x0 }, /* FP_TOP_REG */ \ + { 0x0200, 0x0, 0x0 }, /* FP_SECOND_REG */ \ + { 0xff00, 0x0, 0x0 }, /* FLOAT_REGS */ \ + { 0x200000, 0x0, 0x0 }, /* SSE_FIRST_REG */ \ +{ 0x1fe00000, 0x000000, 0x0 }, /* NO_REX_SSE_REGS */ \ +{ 0x1fe00000, 0x1fe000, 0x0 }, /* SSE_REGS */ \ + { 0x0,0xffe00000, 0x1f }, /* EVEX_SSE_REGS */ \ + { 0x0, 0x0,0x1e000 }, /* BND_REGS */ \ +{ 0x1fe00000,0xffffe000, 0x1f }, /* ALL_SSE_REGS */ \ +{ 0xe0000000, 0x1f, 0x0 }, /* MMX_REGS */ \ +{ 0x1fe00100,0xffffe000, 0x1f }, /* FP_TOP_SSE_REG */ \ +{ 0x1fe00200,0xffffe000, 0x1f }, /* FP_SECOND_SSE_REG */ \ +{ 0x1fe0ff00,0xffffe000, 0x1f }, /* FLOAT_SSE_REGS */ \ +{ 0x11ffff, 0x1fe0, 0x0 }, /* FLOAT_INT_REGS */ \ +{ 0x1ff100ff,0xffffffe0, 0x1f }, /* INT_SSE_REGS */ \ +{ 0x1ff1ffff,0xffffffe0, 0x1f }, /* FLOAT_INT_SSE_REGS */ \ + { 0x0, 0x0, 0x1fc0 }, /* MASK_EVEX_REGS */ \ + { 0x0, 0x0, 0x1fe0 }, /* MASK_REGS */ \ +{ 0xffffffff,0xffffffff,0x1ffff } \ +} + +/* The same information, inverted: + Return the class number of the smallest class containing + reg number REGNO. This could be a conditional expression + or could index an array. */ + +#define REGNO_REG_CLASS(REGNO) (regclass_map[REGNO]) + +/* When this hook returns true for MODE, the compiler allows + registers explicitly used in the rtl to be used as spill registers + but prevents the compiler from extending the lifetime of these + registers. */ +#define TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P hook_bool_mode_true + +#define QI_REG_P(X) (REG_P (X) && QI_REGNO_P (REGNO (X))) +#define QI_REGNO_P(N) IN_RANGE ((N), AX_REG, BX_REG) + +#define GENERAL_REG_P(X) \ + (REG_P (X) && GENERAL_REGNO_P (REGNO (X))) +#define GENERAL_REGNO_P(N) \ + (IN_RANGE ((N), AX_REG, SP_REG) || REX_INT_REGNO_P (N)) + +#define ANY_QI_REG_P(X) (REG_P (X) && ANY_QI_REGNO_P (REGNO (X))) +#define ANY_QI_REGNO_P(N) \ + (TARGET_64BIT ? GENERAL_REGNO_P (N) : QI_REGNO_P (N)) + +#define REX_INT_REG_P(X) (REG_P (X) && REX_INT_REGNO_P (REGNO (X))) +#define REX_INT_REGNO_P(N) \ + IN_RANGE ((N), FIRST_REX_INT_REG, LAST_REX_INT_REG) + +#define STACK_REG_P(X) (REG_P (X) && STACK_REGNO_P (REGNO (X))) +#define STACK_REGNO_P(N) IN_RANGE ((N), FIRST_STACK_REG, LAST_STACK_REG) + +#define ANY_FP_REG_P(X) (REG_P (X) && ANY_FP_REGNO_P (REGNO (X))) +#define ANY_FP_REGNO_P(N) (STACK_REGNO_P (N) || SSE_REGNO_P (N)) + +#define X87_FLOAT_MODE_P(MODE) \ + (TARGET_80387 && ((MODE) == SFmode || (MODE) == DFmode || (MODE) == XFmode)) + +#define SSE_REG_P(X) (REG_P (X) && SSE_REGNO_P (REGNO (X))) +#define SSE_REGNO_P(N) \ + (IN_RANGE ((N), FIRST_SSE_REG, LAST_SSE_REG) \ + || REX_SSE_REGNO_P (N) \ + || EXT_REX_SSE_REGNO_P (N)) + +#define REX_SSE_REGNO_P(N) \ + IN_RANGE ((N), FIRST_REX_SSE_REG, LAST_REX_SSE_REG) + +#define EXT_REX_SSE_REGNO_P(N) \ + IN_RANGE ((N), FIRST_EXT_REX_SSE_REG, LAST_EXT_REX_SSE_REG) + +#define SSE_REGNO(N) \ + ((N) < 8 ? FIRST_SSE_REG + (N) \ + : (N) <= LAST_REX_SSE_REG ? (FIRST_REX_SSE_REG + (N) - 8) \ + : (FIRST_EXT_REX_SSE_REG + (N) - 16)) + +#define MASK_REG_P(X) (REG_P (X) && MASK_REGNO_P (REGNO (X))) +#define MASK_REGNO_P(N) IN_RANGE ((N), FIRST_MASK_REG, LAST_MASK_REG) +#define ANY_MASK_REG_P(X) (REG_P (X) && MASK_REGNO_P (REGNO (X))) + +#define SSE_FLOAT_MODE_P(MODE) \ + ((TARGET_SSE && (MODE) == SFmode) || (TARGET_SSE2 && (MODE) == DFmode)) + +#define FMA4_VEC_FLOAT_MODE_P(MODE) \ + (TARGET_FMA4 && ((MODE) == V4SFmode || (MODE) == V2DFmode \ + || (MODE) == V8SFmode || (MODE) == V4DFmode)) + +#define MMX_REG_P(X) (REG_P (X) && MMX_REGNO_P (REGNO (X))) +#define MMX_REGNO_P(N) IN_RANGE ((N), FIRST_MMX_REG, LAST_MMX_REG) + +#define STACK_TOP_P(X) (REG_P (X) && REGNO (X) == FIRST_STACK_REG) + +#define CC_REG_P(X) (REG_P (X) && CC_REGNO_P (REGNO (X))) +#define CC_REGNO_P(X) ((X) == FLAGS_REG || (X) == FPSR_REG) + +#define BND_REGNO_P(N) IN_RANGE ((N), FIRST_BND_REG, LAST_BND_REG) +#define ANY_BND_REG_P(X) (REG_P (X) && BND_REGNO_P (REGNO (X))) + +/* The class value for index registers, and the one for base regs. */ + +#define INDEX_REG_CLASS INDEX_REGS +#define BASE_REG_CLASS GENERAL_REGS + +/* Place additional restrictions on the register class to use when it + is necessary to be able to hold a value of mode MODE in a reload + register for which class CLASS would ordinarily be used. + + We avoid classes containing registers from multiple units due to + the limitation in ix86_secondary_memory_needed. We limit these + classes to their "natural mode" single unit register class, depending + on the unit availability. + + Please note that reg_class_subset_p is not commutative, so these + conditions mean "... if (CLASS) includes ALL registers from the + register set." */ + +#define LIMIT_RELOAD_CLASS(MODE, CLASS) \ + (((MODE) == QImode && !TARGET_64BIT \ + && reg_class_subset_p (Q_REGS, (CLASS))) ? Q_REGS \ + : (((MODE) == SImode || (MODE) == DImode) \ + && reg_class_subset_p (GENERAL_REGS, (CLASS))) ? GENERAL_REGS \ + : (SSE_FLOAT_MODE_P (MODE) && TARGET_SSE_MATH \ + && reg_class_subset_p (SSE_REGS, (CLASS))) ? SSE_REGS \ + : (X87_FLOAT_MODE_P (MODE) \ + && reg_class_subset_p (FLOAT_REGS, (CLASS))) ? FLOAT_REGS \ + : (CLASS)) + +/* If we are copying between general and FP registers, we need a memory + location. The same is true for SSE and MMX registers. */ +#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \ + ix86_secondary_memory_needed ((CLASS1), (CLASS2), (MODE), 1) + +/* Get_secondary_mem widens integral modes to BITS_PER_WORD. + There is no need to emit full 64 bit move on 64 bit targets + for integral modes that can be moved using 32 bit move. */ +#define SECONDARY_MEMORY_NEEDED_MODE(MODE) \ + (GET_MODE_BITSIZE (MODE) < 32 && INTEGRAL_MODE_P (MODE) \ + ? mode_for_size (32, GET_MODE_CLASS (MODE), 0) \ + : MODE) + +/* Return a class of registers that cannot change FROM mode to TO mode. */ + +#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \ + ix86_cannot_change_mode_class (FROM, TO, CLASS) + +/* Stack layout; function entry, exit and calling. */ + +/* Define this if pushing a word on the stack + makes the stack pointer a smaller address. */ +#define STACK_GROWS_DOWNWARD + +/* Define this to nonzero if the nominal address of the stack frame + is at the high-address end of the local variables; + that is, each additional local variable allocated + goes at a more negative offset in the frame. */ +#define FRAME_GROWS_DOWNWARD 1 + +/* Offset within stack frame to start allocating local variables at. + If FRAME_GROWS_DOWNWARD, this is the offset to the END of the + first local allocated. Otherwise, it is the offset to the BEGINNING + of the first local allocated. */ +#define STARTING_FRAME_OFFSET 0 + +/* If we generate an insn to push BYTES bytes, this says how many the stack + pointer really advances by. On 386, we have pushw instruction that + decrements by exactly 2 no matter what the position was, there is no pushb. + + But as CIE data alignment factor on this arch is -4 for 32bit targets + and -8 for 64bit targets, we need to make sure all stack pointer adjustments + are in multiple of 4 for 32bit targets and 8 for 64bit targets. */ + +#define PUSH_ROUNDING(BYTES) \ + (((BYTES) + UNITS_PER_WORD - 1) & -UNITS_PER_WORD) + +/* If defined, the maximum amount of space required for outgoing arguments + will be computed and placed into the variable `crtl->outgoing_args_size'. + No space will be pushed onto the stack for each call; instead, the + function prologue should increase the stack frame size by this amount. + + In 32bit mode enabling argument accumulation results in about 5% code size + growth becuase move instructions are less compact than push. In 64bit + mode the difference is less drastic but visible. + + FIXME: Unlike earlier implementations, the size of unwind info seems to + actually grow with accumulation. Is that because accumulated args + unwind info became unnecesarily bloated? + + With the 64-bit MS ABI, we can generate correct code with or without + accumulated args, but because of OUTGOING_REG_PARM_STACK_SPACE the code + generated without accumulated args is terrible. + + If stack probes are required, the space used for large function + arguments on the stack must also be probed, so enable + -maccumulate-outgoing-args so this happens in the prologue. */ + +#define ACCUMULATE_OUTGOING_ARGS \ + ((TARGET_ACCUMULATE_OUTGOING_ARGS && optimize_function_for_speed_p (cfun)) \ + || TARGET_STACK_PROBE || TARGET_64BIT_MS_ABI) + +/* If defined, a C expression whose value is nonzero when we want to use PUSH + instructions to pass outgoing arguments. */ + +#define PUSH_ARGS (TARGET_PUSH_ARGS && !ACCUMULATE_OUTGOING_ARGS) + +/* We want the stack and args grow in opposite directions, even if + PUSH_ARGS is 0. */ +#define PUSH_ARGS_REVERSED 1 + +/* Offset of first parameter from the argument pointer register value. */ +#define FIRST_PARM_OFFSET(FNDECL) 0 + +/* Define this macro if functions should assume that stack space has been + allocated for arguments even when their values are passed in registers. + + The value of this macro is the size, in bytes, of the area reserved for + arguments passed in registers for the function represented by FNDECL. + + This space can be allocated by the caller, or be a part of the + machine-dependent stack frame: `OUTGOING_REG_PARM_STACK_SPACE' says + which. */ +#define REG_PARM_STACK_SPACE(FNDECL) ix86_reg_parm_stack_space (FNDECL) + +#define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) \ + (TARGET_64BIT && ix86_function_type_abi (FNTYPE) == MS_ABI) + +/* Define how to find the value returned by a library function + assuming the value has mode MODE. */ + +#define LIBCALL_VALUE(MODE) ix86_libcall_value (MODE) + +/* Define the size of the result block used for communication between + untyped_call and untyped_return. The block contains a DImode value + followed by the block used by fnsave and frstor. */ + +#define APPLY_RESULT_SIZE (8+108) + +/* 1 if N is a possible register number for function argument passing. */ +#define FUNCTION_ARG_REGNO_P(N) ix86_function_arg_regno_p (N) + +/* Define a data type for recording info about an argument list + during the scan of that argument list. This data type should + hold all necessary information about the function itself + and about the args processed so far, enough to enable macros + such as FUNCTION_ARG to determine where the next arg should go. */ + +typedef struct ix86_args { + int words; /* # words passed so far */ + int nregs; /* # registers available for passing */ + int regno; /* next available register number */ + int fastcall; /* fastcall or thiscall calling convention + is used */ + int sse_words; /* # sse words passed so far */ + int sse_nregs; /* # sse registers available for passing */ + int warn_avx512f; /* True when we want to warn + about AVX512F ABI. */ + int warn_avx; /* True when we want to warn about AVX ABI. */ + int warn_sse; /* True when we want to warn about SSE ABI. */ + int warn_mmx; /* True when we want to warn about MMX ABI. */ + int sse_regno; /* next available sse register number */ + int mmx_words; /* # mmx words passed so far */ + int mmx_nregs; /* # mmx registers available for passing */ + int mmx_regno; /* next available mmx register number */ + int maybe_vaarg; /* true for calls to possibly vardic fncts. */ + int caller; /* true if it is caller. */ + int float_in_sse; /* Set to 1 or 2 for 32bit targets if + SFmode/DFmode arguments should be passed + in SSE registers. Otherwise 0. */ + int bnd_regno; /* next available bnd register number */ + int bnds_in_bt; /* number of bounds expected in BT. */ + int force_bnd_pass; /* number of bounds expected for stdarg arg. */ + int stdarg; /* Set to 1 if function is stdarg. */ + enum calling_abi call_abi; /* Set to SYSV_ABI for sysv abi. Otherwise + MS_ABI for ms abi. */ + tree decl; /* Callee decl. */ +} CUMULATIVE_ARGS; + +/* Initialize a variable CUM of type CUMULATIVE_ARGS + for a call to a function whose data type is FNTYPE. + For a library call, FNTYPE is 0. */ + +#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \ + init_cumulative_args (&(CUM), (FNTYPE), (LIBNAME), (FNDECL), \ + (N_NAMED_ARGS) != -1) + +/* Output assembler code to FILE to increment profiler label # LABELNO + for profiling a function entry. */ + +#define FUNCTION_PROFILER(FILE, LABELNO) x86_function_profiler (FILE, LABELNO) + +#define MCOUNT_NAME "_mcount" + +#define MCOUNT_NAME_BEFORE_PROLOGUE "__fentry__" + +#define PROFILE_COUNT_REGISTER "edx" + +/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function, + the stack pointer does not matter. The value is tested only in + functions that have frame pointers. + No definition is equivalent to always zero. */ +/* Note on the 386 it might be more efficient not to define this since + we have to restore it ourselves from the frame pointer, in order to + use pop */ + +#define EXIT_IGNORE_STACK 1 + +/* Output assembler code for a block containing the constant parts + of a trampoline, leaving space for the variable parts. */ + +/* On the 386, the trampoline contains two instructions: + mov #STATIC,ecx + jmp FUNCTION + The trampoline is generated entirely at runtime. The operand of JMP + is the address of FUNCTION relative to the instruction following the + JMP (which is 5 bytes long). */ + +/* Length in units of the trampoline for entering a nested function. */ + +#define TRAMPOLINE_SIZE (TARGET_64BIT ? 24 : 10) + +/* Definitions for register eliminations. + + This is an array of structures. Each structure initializes one pair + of eliminable registers. The "from" register number is given first, + followed by "to". Eliminations of the same "from" register are listed + in order of preference. + + There are two registers that can always be eliminated on the i386. + The frame pointer and the arg pointer can be replaced by either the + hard frame pointer or to the stack pointer, depending upon the + circumstances. The hard frame pointer is not used before reload and + so it is not eligible for elimination. */ + +#define ELIMINABLE_REGS \ +{{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ + { ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, \ + { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ + { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}} \ + +/* Define the offset between two registers, one to be eliminated, and the other + its replacement, at the start of a routine. */ + +#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ + ((OFFSET) = ix86_initial_elimination_offset ((FROM), (TO))) + +/* Addressing modes, and classification of registers for them. */ + +/* Macros to check register numbers against specific register classes. */ + +/* These assume that REGNO is a hard or pseudo reg number. + They give nonzero only if REGNO is a hard reg of the suitable class + or a pseudo reg currently allocated to a suitable hard reg. + Since they use reg_renumber, they are safe only once reg_renumber + has been allocated, which happens in reginfo.c during register + allocation. */ + +#define REGNO_OK_FOR_INDEX_P(REGNO) \ + ((REGNO) < STACK_POINTER_REGNUM \ + || REX_INT_REGNO_P (REGNO) \ + || (unsigned) reg_renumber[(REGNO)] < STACK_POINTER_REGNUM \ + || REX_INT_REGNO_P ((unsigned) reg_renumber[(REGNO)])) + +#define REGNO_OK_FOR_BASE_P(REGNO) \ + (GENERAL_REGNO_P (REGNO) \ + || (REGNO) == ARG_POINTER_REGNUM \ + || (REGNO) == FRAME_POINTER_REGNUM \ + || GENERAL_REGNO_P ((unsigned) reg_renumber[(REGNO)])) + +/* The macros REG_OK_FOR..._P assume that the arg is a REG rtx + and check its validity for a certain class. + We have two alternate definitions for each of them. + The usual definition accepts all pseudo regs; the other rejects + them unless they have been allocated suitable hard regs. + The symbol REG_OK_STRICT causes the latter definition to be used. + + Most source files want to accept pseudo regs in the hope that + they will get allocated to the class that the insn wants them to be in. + Source files for reload pass need to be strict. + After reload, it makes no difference, since pseudo regs have + been eliminated by then. */ + + +/* Non strict versions, pseudos are ok. */ +#define REG_OK_FOR_INDEX_NONSTRICT_P(X) \ + (REGNO (X) < STACK_POINTER_REGNUM \ + || REX_INT_REGNO_P (REGNO (X)) \ + || REGNO (X) >= FIRST_PSEUDO_REGISTER) + +#define REG_OK_FOR_BASE_NONSTRICT_P(X) \ + (GENERAL_REGNO_P (REGNO (X)) \ + || REGNO (X) == ARG_POINTER_REGNUM \ + || REGNO (X) == FRAME_POINTER_REGNUM \ + || REGNO (X) >= FIRST_PSEUDO_REGISTER) + +/* Strict versions, hard registers only */ +#define REG_OK_FOR_INDEX_STRICT_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X)) +#define REG_OK_FOR_BASE_STRICT_P(X) REGNO_OK_FOR_BASE_P (REGNO (X)) + +#ifndef REG_OK_STRICT +#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_INDEX_NONSTRICT_P (X) +#define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_NONSTRICT_P (X) + +#else +#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_INDEX_STRICT_P (X) +#define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_STRICT_P (X) +#endif + +/* TARGET_LEGITIMATE_ADDRESS_P recognizes an RTL expression + that is a valid memory address for an instruction. + The MODE argument is the machine mode for the MEM expression + that wants to use this address. + + The other macros defined here are used only in TARGET_LEGITIMATE_ADDRESS_P, + except for CONSTANT_ADDRESS_P which is usually machine-independent. + + See legitimize_pic_address in i386.c for details as to what + constitutes a legitimate address when -fpic is used. */ + +#define MAX_REGS_PER_ADDRESS 2 + +#define CONSTANT_ADDRESS_P(X) constant_address_p (X) + +/* Try a machine-dependent way of reloading an illegitimate address + operand. If we find one, push the reload and jump to WIN. This + macro is used in only one place: `find_reloads_address' in reload.c. */ + +#define LEGITIMIZE_RELOAD_ADDRESS(X, MODE, OPNUM, TYPE, INDL, WIN) \ +do { \ + if (ix86_legitimize_reload_address ((X), (MODE), (OPNUM), \ + (int)(TYPE), (INDL))) \ + goto WIN; \ +} while (0) + +/* If defined, a C expression to determine the base term of address X. + This macro is used in only one place: `find_base_term' in alias.c. + + It is always safe for this macro to not be defined. It exists so + that alias analysis can understand machine-dependent addresses. + + The typical use of this macro is to handle addresses containing + a label_ref or symbol_ref within an UNSPEC. */ + +#define FIND_BASE_TERM(X) ix86_find_base_term (X) + +/* Nonzero if the constant value X is a legitimate general operand + when generating PIC code. It is given that flag_pic is on and + that X satisfies CONSTANT_P or is a CONST_DOUBLE. */ + +#define LEGITIMATE_PIC_OPERAND_P(X) legitimate_pic_operand_p (X) + +#define SYMBOLIC_CONST(X) \ + (GET_CODE (X) == SYMBOL_REF \ + || GET_CODE (X) == LABEL_REF \ + || (GET_CODE (X) == CONST && symbolic_reference_mentioned_p (X))) + +/* Max number of args passed in registers. If this is more than 3, we will + have problems with ebx (register #4), since it is a caller save register and + is also used as the pic register in ELF. So for now, don't allow more than + 3 registers to be passed in registers. */ + +/* Abi specific values for REGPARM_MAX and SSE_REGPARM_MAX */ +#define X86_64_REGPARM_MAX 6 +#define X86_64_MS_REGPARM_MAX 4 + +#define X86_32_REGPARM_MAX 3 + +#define REGPARM_MAX \ + (TARGET_64BIT \ + ? (TARGET_64BIT_MS_ABI \ + ? X86_64_MS_REGPARM_MAX \ + : X86_64_REGPARM_MAX) \ + : X86_32_REGPARM_MAX) + +#define X86_64_SSE_REGPARM_MAX 8 +#define X86_64_MS_SSE_REGPARM_MAX 4 + +#define X86_32_SSE_REGPARM_MAX (TARGET_SSE ? (TARGET_MACHO ? 4 : 3) : 0) + +#define SSE_REGPARM_MAX \ + (TARGET_64BIT \ + ? (TARGET_64BIT_MS_ABI \ + ? X86_64_MS_SSE_REGPARM_MAX \ + : X86_64_SSE_REGPARM_MAX) \ + : X86_32_SSE_REGPARM_MAX) + +#define MMX_REGPARM_MAX (TARGET_64BIT ? 0 : (TARGET_MMX ? 3 : 0)) + +/* Specify the machine mode that this machine uses + for the index in the tablejump instruction. */ +#define CASE_VECTOR_MODE \ + (!TARGET_LP64 || (flag_pic && ix86_cmodel != CM_LARGE_PIC) ? SImode : DImode) + +/* Define this as 1 if `char' should by default be signed; else as 0. */ +#define DEFAULT_SIGNED_CHAR 1 + +/* Max number of bytes we can move from memory to memory + in one reasonably fast instruction. */ +#define MOVE_MAX 16 + +/* MOVE_MAX_PIECES is the number of bytes at a time which we can + move efficiently, as opposed to MOVE_MAX which is the maximum + number of bytes we can move with a single instruction. */ +#define MOVE_MAX_PIECES UNITS_PER_WORD + +/* If a memory-to-memory move would take MOVE_RATIO or more simple + move-instruction pairs, we will do a movmem or libcall instead. + Increasing the value will always make code faster, but eventually + incurs high cost in increased code size. + + If you don't define this, a reasonable default is used. */ + +#define MOVE_RATIO(speed) ((speed) ? ix86_cost->move_ratio : 3) + +/* If a clear memory operation would take CLEAR_RATIO or more simple + move-instruction sequences, we will do a clrmem or libcall instead. */ + +#define CLEAR_RATIO(speed) ((speed) ? MIN (6, ix86_cost->move_ratio) : 2) + +/* Define if shifts truncate the shift count which implies one can + omit a sign-extension or zero-extension of a shift count. + + On i386, shifts do truncate the count. But bit test instructions + take the modulo of the bit offset operand. */ + +/* #define SHIFT_COUNT_TRUNCATED */ + +/* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits + is done just by pretending it is already truncated. */ +#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1 + +/* A macro to update M and UNSIGNEDP when an object whose type is + TYPE and which has the specified mode and signedness is to be + stored in a register. This macro is only called when TYPE is a + scalar type. + + On i386 it is sometimes useful to promote HImode and QImode + quantities to SImode. The choice depends on target type. */ + +#define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE) \ +do { \ + if (((MODE) == HImode && TARGET_PROMOTE_HI_REGS) \ + || ((MODE) == QImode && TARGET_PROMOTE_QI_REGS)) \ + (MODE) = SImode; \ +} while (0) + +/* Specify the machine mode that pointers have. + After generation of rtl, the compiler makes no further distinction + between pointers and any other objects of this machine mode. */ +#define Pmode (ix86_pmode == PMODE_DI ? DImode : SImode) + +/* Specify the machine mode that bounds have. */ +#define BNDmode (ix86_pmode == PMODE_DI ? BND64mode : BND32mode) + +/* A C expression whose value is zero if pointers that need to be extended + from being `POINTER_SIZE' bits wide to `Pmode' are sign-extended and + greater then zero if they are zero-extended and less then zero if the + ptr_extend instruction should be used. */ + +#define POINTERS_EXTEND_UNSIGNED 1 + +/* A function address in a call instruction + is a byte address (for indexing purposes) + so give the MEM rtx a byte's mode. */ +#define FUNCTION_MODE QImode + + +/* A C expression for the cost of a branch instruction. A value of 1 + is the default; other values are interpreted relative to that. */ + +#define BRANCH_COST(speed_p, predictable_p) \ + (!(speed_p) ? 2 : (predictable_p) ? 0 : ix86_branch_cost) + +/* An integer expression for the size in bits of the largest integer machine + mode that should actually be used. We allow pairs of registers. */ +#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TARGET_64BIT ? TImode : DImode) + +/* Define this macro as a C expression which is nonzero if accessing + less than a word of memory (i.e. a `char' or a `short') is no + faster than accessing a word of memory, i.e., if such access + require more than one instruction or if there is no difference in + cost between byte and (aligned) word loads. + + When this macro is not defined, the compiler will access a field by + finding the smallest containing object; when it is defined, a + fullword load will be used if alignment permits. Unless bytes + accesses are faster than word accesses, using word accesses is + preferable since it may eliminate subsequent memory access if + subsequent accesses occur to other fields in the same word of the + structure, but to different bytes. */ + +#define SLOW_BYTE_ACCESS 0 + +/* Nonzero if access to memory by shorts is slow and undesirable. */ +#define SLOW_SHORT_ACCESS 0 + +/* Define this macro to be the value 1 if unaligned accesses have a + cost many times greater than aligned accesses, for example if they + are emulated in a trap handler. + + When this macro is nonzero, the compiler will act as if + `STRICT_ALIGNMENT' were nonzero when generating code for block + moves. This can cause significantly more instructions to be + produced. Therefore, do not set this macro nonzero if unaligned + accesses only add a cycle or two to the time for a memory access. + + If the value of this macro is always zero, it need not be defined. */ + +/* #define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) 0 */ + +/* Define this macro if it is as good or better to call a constant + function address than to call an address kept in a register. + + Desirable on the 386 because a CALL with a constant address is + faster than one with a register address. */ + +#define NO_FUNCTION_CSE + +/* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE, + return the mode to be used for the comparison. + + For floating-point equality comparisons, CCFPEQmode should be used. + VOIDmode should be used in all other cases. + + For integer comparisons against zero, reduce to CCNOmode or CCZmode if + possible, to allow for more combinations. */ + +#define SELECT_CC_MODE(OP, X, Y) ix86_cc_mode ((OP), (X), (Y)) + +/* Return nonzero if MODE implies a floating point inequality can be + reversed. */ + +#define REVERSIBLE_CC_MODE(MODE) 1 + +/* A C expression whose value is reversed condition code of the CODE for + comparison done in CC_MODE mode. */ +#define REVERSE_CONDITION(CODE, MODE) ix86_reverse_condition ((CODE), (MODE)) + + +/* Control the assembler format that we output, to the extent + this does not vary between assemblers. */ + +/* How to refer to registers in assembler output. + This sequence is indexed by compiler's hard-register-number (see above). */ + +/* In order to refer to the first 8 regs as 32-bit regs, prefix an "e". + For non floating point regs, the following are the HImode names. + + For float regs, the stack top is sometimes referred to as "%st(0)" + instead of just "%st". TARGET_PRINT_OPERAND handles this with the + "y" code. */ + +#define HI_REGISTER_NAMES \ +{"ax","dx","cx","bx","si","di","bp","sp", \ + "st","st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)", \ + "argp", "flags", "fpsr", "fpcr", "frame", \ + "xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7", \ + "mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7", \ + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \ + "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15", \ + "xmm16", "xmm17", "xmm18", "xmm19", \ + "xmm20", "xmm21", "xmm22", "xmm23", \ + "xmm24", "xmm25", "xmm26", "xmm27", \ + "xmm28", "xmm29", "xmm30", "xmm31", \ + "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7", \ + "bnd0", "bnd1", "bnd2", "bnd3" } + +#define REGISTER_NAMES HI_REGISTER_NAMES + +/* Table of additional register names to use in user input. */ + +#define ADDITIONAL_REGISTER_NAMES \ +{ { "eax", 0 }, { "edx", 1 }, { "ecx", 2 }, { "ebx", 3 }, \ + { "esi", 4 }, { "edi", 5 }, { "ebp", 6 }, { "esp", 7 }, \ + { "rax", 0 }, { "rdx", 1 }, { "rcx", 2 }, { "rbx", 3 }, \ + { "rsi", 4 }, { "rdi", 5 }, { "rbp", 6 }, { "rsp", 7 }, \ + { "al", 0 }, { "dl", 1 }, { "cl", 2 }, { "bl", 3 }, \ + { "ah", 0 }, { "dh", 1 }, { "ch", 2 }, { "bh", 3 }, \ + { "ymm0", 21}, { "ymm1", 22}, { "ymm2", 23}, { "ymm3", 24}, \ + { "ymm4", 25}, { "ymm5", 26}, { "ymm6", 27}, { "ymm7", 28}, \ + { "ymm8", 45}, { "ymm9", 46}, { "ymm10", 47}, { "ymm11", 48}, \ + { "ymm12", 49}, { "ymm13", 50}, { "ymm14", 51}, { "ymm15", 52}, \ + { "ymm16", 53}, { "ymm17", 54}, { "ymm18", 55}, { "ymm19", 56}, \ + { "ymm20", 57}, { "ymm21", 58}, { "ymm22", 59}, { "ymm23", 60}, \ + { "ymm24", 61}, { "ymm25", 62}, { "ymm26", 63}, { "ymm27", 64}, \ + { "ymm28", 65}, { "ymm29", 66}, { "ymm30", 67}, { "ymm31", 68}, \ + { "zmm0", 21}, { "zmm1", 22}, { "zmm2", 23}, { "zmm3", 24}, \ + { "zmm4", 25}, { "zmm5", 26}, { "zmm6", 27}, { "zmm7", 28}, \ + { "zmm8", 45}, { "zmm9", 46}, { "zmm10", 47}, { "zmm11", 48}, \ + { "zmm12", 49}, { "zmm13", 50}, { "zmm14", 51}, { "zmm15", 52}, \ + { "zmm16", 53}, { "zmm17", 54}, { "zmm18", 55}, { "zmm19", 56}, \ + { "zmm20", 57}, { "zmm21", 58}, { "zmm22", 59}, { "zmm23", 60}, \ + { "zmm24", 61}, { "zmm25", 62}, { "zmm26", 63}, { "zmm27", 64}, \ + { "zmm28", 65}, { "zmm29", 66}, { "zmm30", 67}, { "zmm31", 68} } + +/* Note we are omitting these since currently I don't know how +to get gcc to use these, since they want the same but different +number as al, and ax. +*/ + +#define QI_REGISTER_NAMES \ +{"al", "dl", "cl", "bl", "sil", "dil", "bpl", "spl",} + +/* These parallel the array above, and can be used to access bits 8:15 + of regs 0 through 3. */ + +#define QI_HIGH_REGISTER_NAMES \ +{"ah", "dh", "ch", "bh", } + +/* How to renumber registers for dbx and gdb. */ + +#define DBX_REGISTER_NUMBER(N) \ + (TARGET_64BIT ? dbx64_register_map[(N)] : dbx_register_map[(N)]) + +extern int const dbx_register_map[FIRST_PSEUDO_REGISTER]; +extern int const dbx64_register_map[FIRST_PSEUDO_REGISTER]; +extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER]; + +extern int const x86_64_ms_sysv_extra_clobbered_registers[12]; + +/* Before the prologue, RA is at 0(%esp). */ +#define INCOMING_RETURN_ADDR_RTX \ + gen_rtx_MEM (VOIDmode, gen_rtx_REG (VOIDmode, STACK_POINTER_REGNUM)) + +/* After the prologue, RA is at -4(AP) in the current frame. */ +#define RETURN_ADDR_RTX(COUNT, FRAME) \ + ((COUNT) == 0 \ + ? gen_rtx_MEM (Pmode, plus_constant (Pmode, arg_pointer_rtx, \ + -UNITS_PER_WORD)) \ + : gen_rtx_MEM (Pmode, plus_constant (Pmode, FRAME, UNITS_PER_WORD))) + +/* PC is dbx register 8; let's use that column for RA. */ +#define DWARF_FRAME_RETURN_COLUMN (TARGET_64BIT ? 16 : 8) + +/* Before the prologue, the top of the frame is at 4(%esp). */ +#define INCOMING_FRAME_SP_OFFSET UNITS_PER_WORD + +/* Describe how we implement __builtin_eh_return. */ +#define EH_RETURN_DATA_REGNO(N) ((N) <= DX_REG ? (N) : INVALID_REGNUM) +#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, CX_REG) + + +/* Select a format to encode pointers in exception handling data. CODE + is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is + true if the symbol may be affected by dynamic relocations. + + ??? All x86 object file formats are capable of representing this. + After all, the relocation needed is the same as for the call insn. + Whether or not a particular assembler allows us to enter such, I + guess we'll have to see. */ +#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \ + asm_preferred_eh_data_format ((CODE), (GLOBAL)) + +/* This is how to output an insn to push a register on the stack. + It need not be very fast code. */ + +#define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \ +do { \ + if (TARGET_64BIT) \ + asm_fprintf ((FILE), "\tpush{q}\t%%r%s\n", \ + reg_names[(REGNO)] + (REX_INT_REGNO_P (REGNO) != 0)); \ + else \ + asm_fprintf ((FILE), "\tpush{l}\t%%e%s\n", reg_names[(REGNO)]); \ +} while (0) + +/* This is how to output an insn to pop a register from the stack. + It need not be very fast code. */ + +#define ASM_OUTPUT_REG_POP(FILE, REGNO) \ +do { \ + if (TARGET_64BIT) \ + asm_fprintf ((FILE), "\tpop{q}\t%%r%s\n", \ + reg_names[(REGNO)] + (REX_INT_REGNO_P (REGNO) != 0)); \ + else \ + asm_fprintf ((FILE), "\tpop{l}\t%%e%s\n", reg_names[(REGNO)]); \ +} while (0) + +/* This is how to output an element of a case-vector that is absolute. */ + +#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ + ix86_output_addr_vec_elt ((FILE), (VALUE)) + +/* This is how to output an element of a case-vector that is relative. */ + +#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ + ix86_output_addr_diff_elt ((FILE), (VALUE), (REL)) + +/* When we see %v, we will print the 'v' prefix if TARGET_AVX is true. */ + +#define ASM_OUTPUT_AVX_PREFIX(STREAM, PTR) \ +{ \ + if ((PTR)[0] == '%' && (PTR)[1] == 'v') \ + (PTR) += TARGET_AVX ? 1 : 2; \ +} + +/* A C statement or statements which output an assembler instruction + opcode to the stdio stream STREAM. The macro-operand PTR is a + variable of type `char *' which points to the opcode name in + its "internal" form--the form that is written in the machine + description. */ + +#define ASM_OUTPUT_OPCODE(STREAM, PTR) \ + ASM_OUTPUT_AVX_PREFIX ((STREAM), (PTR)) + +/* A C statement to output to the stdio stream FILE an assembler + command to pad the location counter to a multiple of 1<machine->stack_locals) +#define ix86_varargs_gpr_size (cfun->machine->varargs_gpr_size) +#define ix86_varargs_fpr_size (cfun->machine->varargs_fpr_size) +#define ix86_optimize_mode_switching (cfun->machine->optimize_mode_switching) +#define ix86_current_function_needs_cld (cfun->machine->needs_cld) +#define ix86_tls_descriptor_calls_expanded_in_cfun \ + (cfun->machine->tls_descriptor_call_expanded_p) +/* Since tls_descriptor_call_expanded is not cleared, even if all TLS + calls are optimized away, we try to detect cases in which it was + optimized away. Since such instructions (use (reg REG_SP)), we can + verify whether there's any such instruction live by testing that + REG_SP is live. */ +#define ix86_current_function_calls_tls_descriptor \ + (ix86_tls_descriptor_calls_expanded_in_cfun && df_regs_ever_live_p (SP_REG)) +#define ix86_static_chain_on_stack (cfun->machine->static_chain_on_stack) + +/* Control behavior of x86_file_start. */ +#define X86_FILE_START_VERSION_DIRECTIVE false +#define X86_FILE_START_FLTUSED false + +/* Flag to mark data that is in the large address area. */ +#define SYMBOL_FLAG_FAR_ADDR (SYMBOL_FLAG_MACH_DEP << 0) +#define SYMBOL_REF_FAR_ADDR_P(X) \ + ((SYMBOL_REF_FLAGS (X) & SYMBOL_FLAG_FAR_ADDR) != 0) + +/* Flags to mark dllimport/dllexport. Used by PE ports, but handy to + have defined always, to avoid ifdefing. */ +#define SYMBOL_FLAG_DLLIMPORT (SYMBOL_FLAG_MACH_DEP << 1) +#define SYMBOL_REF_DLLIMPORT_P(X) \ + ((SYMBOL_REF_FLAGS (X) & SYMBOL_FLAG_DLLIMPORT) != 0) + +#define SYMBOL_FLAG_DLLEXPORT (SYMBOL_FLAG_MACH_DEP << 2) +#define SYMBOL_REF_DLLEXPORT_P(X) \ + ((SYMBOL_REF_FLAGS (X) & SYMBOL_FLAG_DLLEXPORT) != 0) + +#define SYMBOL_FLAG_STUBVAR (SYMBOL_FLAG_MACH_DEP << 4) +#define SYMBOL_REF_STUBVAR_P(X) \ + ((SYMBOL_REF_FLAGS (X) & SYMBOL_FLAG_STUBVAR) != 0) + +extern void debug_ready_dispatch (void); +extern void debug_dispatch_window (int); + +/* The value at zero is only defined for the BMI instructions + LZCNT and TZCNT, not the BSR/BSF insns in the original isa. */ +#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) \ + ((VALUE) = GET_MODE_BITSIZE (MODE), TARGET_BMI ? 1 : 0) +#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) \ + ((VALUE) = GET_MODE_BITSIZE (MODE), TARGET_LZCNT ? 1 : 0) + + +/* Flags returned by ix86_get_callcvt (). */ +#define IX86_CALLCVT_CDECL 0x1 +#define IX86_CALLCVT_STDCALL 0x2 +#define IX86_CALLCVT_FASTCALL 0x4 +#define IX86_CALLCVT_THISCALL 0x8 +#define IX86_CALLCVT_REGPARM 0x10 +#define IX86_CALLCVT_SSEREGPARM 0x20 + +#define IX86_BASE_CALLCVT(FLAGS) \ + ((FLAGS) & (IX86_CALLCVT_CDECL | IX86_CALLCVT_STDCALL \ + | IX86_CALLCVT_FASTCALL | IX86_CALLCVT_THISCALL)) + +#define RECIP_MASK_NONE 0x00 +#define RECIP_MASK_DIV 0x01 +#define RECIP_MASK_SQRT 0x02 +#define RECIP_MASK_VEC_DIV 0x04 +#define RECIP_MASK_VEC_SQRT 0x08 +#define RECIP_MASK_ALL (RECIP_MASK_DIV | RECIP_MASK_SQRT \ + | RECIP_MASK_VEC_DIV | RECIP_MASK_VEC_SQRT) +#define RECIP_MASK_DEFAULT (RECIP_MASK_VEC_DIV | RECIP_MASK_VEC_SQRT) + +#define TARGET_RECIP_DIV ((recip_mask & RECIP_MASK_DIV) != 0) +#define TARGET_RECIP_SQRT ((recip_mask & RECIP_MASK_SQRT) != 0) +#define TARGET_RECIP_VEC_DIV ((recip_mask & RECIP_MASK_VEC_DIV) != 0) +#define TARGET_RECIP_VEC_SQRT ((recip_mask & RECIP_MASK_VEC_SQRT) != 0) + +#define IX86_HLE_ACQUIRE (1 << 16) +#define IX86_HLE_RELEASE (1 << 17) + +/* For switching between functions with different target attributes. */ +#define SWITCHABLE_TARGET 1 + +/* +Local variables: +version-control: t +End: +*/ diff --git a/contrib/toolchain/gcc/5x/gcc/config/i386/mingw-stdint.h b/contrib/toolchain/gcc/5x/gcc/config/i386/mingw-stdint.h new file mode 100644 index 0000000000..5fee1b62c2 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/config/i386/mingw-stdint.h @@ -0,0 +1,50 @@ +/* Definitions for types on systems using mingw. + Copyright (C) 2009-2015 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 +. */ + +#define SIG_ATOMIC_TYPE "int" + +#define INT8_TYPE "signed char" +#define INT16_TYPE "short int" +#define INT32_TYPE "int" +#define INT64_TYPE "long long int" +#define UINT8_TYPE "unsigned char" +#define UINT16_TYPE "short unsigned int" +#define UINT32_TYPE "unsigned int" +#define UINT64_TYPE "long long unsigned int" + +#define INT_LEAST8_TYPE "signed char" +#define INT_LEAST16_TYPE "short int" +#define INT_LEAST32_TYPE "int" +#define INT_LEAST64_TYPE "long long int" +#define UINT_LEAST8_TYPE "unsigned char" +#define UINT_LEAST16_TYPE "short unsigned int" +#define UINT_LEAST32_TYPE "unsigned int" +#define UINT_LEAST64_TYPE "long long unsigned int" + +#define INT_FAST8_TYPE "signed char" +#define INT_FAST16_TYPE "short int" +#define INT_FAST32_TYPE "int" +#define INT_FAST64_TYPE "long long int" +#define UINT_FAST8_TYPE "unsigned char" +#define UINT_FAST16_TYPE "short unsigned int" +#define UINT_FAST32_TYPE "unsigned int" +#define UINT_FAST64_TYPE "long long unsigned int" + +#define INTPTR_TYPE (TARGET_64BIT ? "long long int" : "int") +#define UINTPTR_TYPE (TARGET_64BIT ? "long long unsigned int" : "unsigned int") diff --git a/contrib/toolchain/gcc/5x/gcc/config/i386/mingw32.h b/contrib/toolchain/gcc/5x/gcc/config/i386/mingw32.h new file mode 100644 index 0000000000..f1397614ed --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/config/i386/mingw32.h @@ -0,0 +1,257 @@ +/* Operating system specific defines to be used when targeting GCC for + hosting on Windows32, using GNU tools and the Windows32 API Library. + Copyright (C) 1997-2015 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 +. */ + +#undef DEFAULT_ABI +#define DEFAULT_ABI MS_ABI + +/* By default, target has a 80387, uses IEEE compatible arithmetic, + returns float values in the 387 and needs stack probes. + We also align doubles to 64-bits for MSVC default compatibility. + Additionally we enable MS_BITFIELD_LAYOUT by default. */ + +#undef TARGET_SUBTARGET_DEFAULT +#define TARGET_SUBTARGET_DEFAULT \ + (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS \ + | MASK_STACK_PROBE | MASK_ALIGN_DOUBLE \ + | MASK_MS_BITFIELD_LAYOUT) + +/* See i386/crtdll.h for an alternative definition. _INTEGRAL_MAX_BITS + is for compatibility with native compiler. */ +#define EXTRA_OS_CPP_BUILTINS() \ + do \ + { \ + builtin_define ("__MSVCRT__"); \ + builtin_define ("__MINGW32__"); \ + builtin_define ("_WIN32"); \ + builtin_define_std ("WIN32"); \ + builtin_define_std ("WINNT"); \ + builtin_define_with_int_value ("_INTEGRAL_MAX_BITS", \ + TYPE_PRECISION (intmax_type_node));\ + if (TARGET_64BIT && ix86_abi == MS_ABI) \ + { \ + builtin_define ("__MINGW64__"); \ + builtin_define_std ("WIN64"); \ + builtin_define ("_WIN64"); \ + } \ + } \ + while (0) + +#ifndef TARGET_USE_PTHREAD_BY_DEFAULT +#define SPEC_PTHREAD1 "pthread" +#define SPEC_PTHREAD2 "!no-pthread" +#else +#define SPEC_PTHREAD1 "!no-pthread" +#define SPEC_PTHREAD2 "pthread" +#endif + +#undef SUB_LINK_ENTRY32 +#undef SUB_LINK_ENTRY64 +#define SUB_LINK_ENTRY32 "-e _DllMainCRTStartup@12" +#if defined(USE_MINGW64_LEADING_UNDERSCORES) +#define SUB_LINK_ENTRY64 "-e _DllMainCRTStartup" +#else +#define SUB_LINK_ENTRY64 "-e DllMainCRTStartup" +#endif + +#undef SUB_LINK_ENTRY +#if TARGET_64BIT_DEFAULT +#define SUB_LINK_ENTRY SUB_LINK_ENTRY64 +#else +#define SUB_LINK_ENTRY SUB_LINK_ENTRY32 +#endif + +#undef NATIVE_SYSTEM_HEADER_COMPONENT +#define NATIVE_SYSTEM_HEADER_COMPONENT "MINGW" + +#undef CPP_SPEC +#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT} " \ + "%{" SPEC_PTHREAD1 ":-D_REENTRANT} " \ + "%{" SPEC_PTHREAD2 ": } " + +/* For Windows applications, include more libraries, but always include + kernel32. */ +#undef LIB_SPEC +#define LIB_SPEC "%{pg:-lgmon} %{" SPEC_PTHREAD1 ":-lpthread} " \ + "%{" SPEC_PTHREAD2 ": } " \ + "%{mwindows:-lgdi32 -lcomdlg32} " \ + "%{fvtable-verify=preinit:-lvtv -lpsapi; \ + fvtable-verify=std:-lvtv -lpsapi} " \ + "-ladvapi32 -lshell32 -luser32 -lkernel32" + +/* Weak symbols do not get resolved if using a Windows dll import lib. + Make the unwind registration references strong undefs. */ +#if DWARF2_UNWIND_INFO +/* DW2-unwind is just available for 32-bit mode. */ +#if TARGET_64BIT_DEFAULT +#error DW2 unwind is not available for 64-bit. +#endif +#define SHARED_LIBGCC_UNDEFS_SPEC \ + "%{shared-libgcc: -u ___register_frame_info -u ___deregister_frame_info}" +#else +#define SHARED_LIBGCC_UNDEFS_SPEC "" +#endif + +#undef SUBTARGET_EXTRA_SPECS +#define SUBTARGET_EXTRA_SPECS \ + { "shared_libgcc_undefs", SHARED_LIBGCC_UNDEFS_SPEC } + +#define LINK_SPEC "%{mwindows:--subsystem windows} \ + %{mconsole:--subsystem console} \ + %{shared: %{mdll: %eshared and mdll are not compatible}} \ + %{shared: --shared} %{mdll:--dll} \ + %{static:-Bstatic} %{!static:-Bdynamic} \ + %{shared|mdll: " SUB_LINK_ENTRY " --enable-auto-image-base} \ + %(shared_libgcc_undefs)" + +/* Include in the mingw32 libraries with libgcc */ +#ifdef ENABLE_SHARED_LIBGCC +#define SHARED_LIBGCC_SPEC " \ + %{static|static-libgcc:-lgcc -lgcc_eh} \ + %{!static: \ + %{!static-libgcc: \ + %{!shared: \ + %{!shared-libgcc:-lgcc -lgcc_eh} \ + %{shared-libgcc:-lgcc_s -lgcc} \ + } \ + %{shared:-lgcc_s -lgcc} \ + } \ + } " +#else +#define SHARED_LIBGCC_SPEC " -lgcc " +#endif +#undef REAL_LIBGCC_SPEC +#define REAL_LIBGCC_SPEC \ + "%{mthreads:-lmingwthrd} -lmingw32 \ + "SHARED_LIBGCC_SPEC" \ + -lmoldname -lmingwex -lmsvcrt" + +#undef STARTFILE_SPEC +#define STARTFILE_SPEC "%{shared|mdll:dllcrt2%O%s} \ + %{!shared:%{!mdll:crt2%O%s}} %{pg:gcrt2%O%s} \ + crtbegin.o%s \ + %{fvtable-verify=none:%s; \ + fvtable-verify=preinit:vtv_start.o%s; \ + fvtable-verify=std:vtv_start.o%s}" + +#undef ENDFILE_SPEC +#define ENDFILE_SPEC \ + "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ + %{!shared:%:if-exists(default-manifest.o%s)}\ + %{fvtable-verify=none:%s; \ + fvtable-verify=preinit:vtv_end.o%s; \ + fvtable-verify=std:vtv_end.o%s} \ + crtend.o%s" + +/* Override startfile prefix defaults. */ +#ifndef STANDARD_STARTFILE_PREFIX_1 +#define STANDARD_STARTFILE_PREFIX_1 "/mingw/lib/" +#endif +#ifndef STANDARD_STARTFILE_PREFIX_2 +#define STANDARD_STARTFILE_PREFIX_2 "" +#endif + +/* For native mingw-version we need to take care that NATIVE_SYSTEM_HEADER_DIR + macro contains POSIX-style path. See bug 52947. */ +#undef NATIVE_SYSTEM_HEADER_DIR +#define NATIVE_SYSTEM_HEADER_DIR "/mingw/include" + +/* Output STRING, a string representing a filename, to FILE. + We canonicalize it to be in Unix format (backslashes are replaced + forward slashes. */ +#undef OUTPUT_QUOTED_STRING +#define OUTPUT_QUOTED_STRING(FILE, STRING) \ +do { \ + const char *_string = (const char *) (STRING); \ + char c; \ + \ + putc ('\"', (FILE)); \ + \ + while ((c = *_string++) != 0) \ + { \ + if (c == '\\') \ + c = '/'; \ + \ + if (ISPRINT (c)) \ + { \ + if (c == '\"') \ + putc ('\\', (FILE)); \ + putc (c, (FILE)); \ + } \ + else \ + fprintf ((FILE), "\\%03o", (unsigned char) c); \ + } \ + \ + putc ('\"', (FILE)); \ +} while (0) + +/* Define as short unsigned for compatibility with MS runtime. */ +#undef WINT_TYPE +#define WINT_TYPE "short unsigned int" + +/* mingw32 uses the -mthreads option to enable thread support. */ +#undef GOMP_SELF_SPECS +#define GOMP_SELF_SPECS "%{fopenacc|fopenmp|ftree-parallelize-loops=*: " \ + "-mthreads -pthread}" +#undef GTM_SELF_SPECS +#define GTM_SELF_SPECS "%{fgnu-tm:-mthreads -pthread}" + +/* mingw32 atexit function is safe to use in shared libraries. Use it + to register C++ static destructors. */ +#define TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT hook_bool_void_true + +/* Contains a pointer to type target_ovr_attr defining the target specific + overrides of format attributes. See c-format.h for structure + definition. */ +#undef TARGET_OVERRIDES_FORMAT_ATTRIBUTES +#define TARGET_OVERRIDES_FORMAT_ATTRIBUTES mingw_format_attribute_overrides + +/* Specify the count of elements in TARGET_OVERRIDES_ATTRIBUTE. */ +#undef TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT +#define TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT 3 + +/* Custom initialization for warning -Wpedantic-ms-format for c-format. */ +#undef TARGET_OVERRIDES_FORMAT_INIT +#define TARGET_OVERRIDES_FORMAT_INIT msformat_init + +/* MS specific format attributes for ms_printf, ms_scanf, ms_strftime. */ +#undef TARGET_FORMAT_TYPES +#define TARGET_FORMAT_TYPES mingw_format_attributes + +#undef TARGET_N_FORMAT_TYPES +#define TARGET_N_FORMAT_TYPES 3 + +/* Let defaults.h definition of TARGET_USE_JCR_SECTION apply. */ +#undef TARGET_USE_JCR_SECTION + +#define HAVE_ENABLE_EXECUTE_STACK +#undef CHECK_EXECUTE_STACK_ENABLED +#define CHECK_EXECUTE_STACK_ENABLED flag_setstackexecutable + +/* This matches SHLIB_SONAME and SHLIB_SOVERSION in t-cygming. */ +/* This matches SHLIB_SONAME and SHLIB_SOVERSION in t-cygwin. */ +#if DWARF2_UNWIND_INFO +#define LIBGCC_EH_EXTN "_dw2" +#else +#define LIBGCC_EH_EXTN "_sjlj" +#endif +#define LIBGCC_SONAME "libgcc_s" LIBGCC_EH_EXTN "-1.dll" + +/* We should find a way to not have to update this manually. */ +#define LIBGCJ_SONAME "libgcj" /*LIBGCC_EH_EXTN*/ "-16.dll" diff --git a/contrib/toolchain/gcc/5x/gcc/config/i386/stringop.def b/contrib/toolchain/gcc/5x/gcc/config/i386/stringop.def new file mode 100644 index 0000000000..0d6a5fab67 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/config/i386/stringop.def @@ -0,0 +1,37 @@ +/* Definitions for stringop strategy for IA-32. + Copyright (C) 2013-2015 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 files COPYING3. If not, +see . */ + +DEF_ENUM +DEF_ALG (no_stringop, no_stringop) +DEF_ENUM +DEF_ALG (libcall, libcall) +DEF_ENUM +DEF_ALG (rep_prefix_1_byte, rep_byte) +DEF_ENUM +DEF_ALG (rep_prefix_4_byte, rep_4byte) +DEF_ENUM +DEF_ALG (rep_prefix_8_byte, rep_8byte) +DEF_ENUM +DEF_ALG (loop_1_byte, byte_loop) +DEF_ENUM +DEF_ALG (loop, loop) +DEF_ENUM +DEF_ALG (unrolled_loop, unrolled_loop) +DEF_ENUM +DEF_ALG (vector_loop, vector_loop) diff --git a/contrib/toolchain/gcc/5x/gcc/config/i386/unix.h b/contrib/toolchain/gcc/5x/gcc/config/i386/unix.h new file mode 100644 index 0000000000..3ccd031882 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/config/i386/unix.h @@ -0,0 +1,80 @@ +/* Definitions for Unix assembler syntax for the Intel 80386. + Copyright (C) 1988-2015 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 file defines the aspects of assembler syntax + that are the same for all the i386 Unix systems + (though they may differ in non-Unix systems). */ + +/* Define macro used to output shift-double opcodes when the shift + count is in %cl. Some assemblers require %cl as an argument; + some don't. This macro controls what to do: by default, don't + print %cl. */ +#define SHIFT_DOUBLE_OMITS_COUNT 1 + +/* Define the syntax of pseudo-ops, labels and comments. */ + +/* String containing the assembler's comment-starter. + Note the trailing space is necessary in case the character + that immediately follows the comment is '*'. If this happens + and the space is not there the assembler will interpret this + as the start of a C-like slash-star comment and complain when + there is no terminator. */ + +#define ASM_COMMENT_START "/ " + +/* Output to assembler file text saying following lines + may contain character constants, extra white space, comments, etc. */ + +#define ASM_APP_ON "/APP\n" + +/* Output to assembler file text saying following lines + no longer contain unusual constructs. */ + +#define ASM_APP_OFF "/NO_APP\n" + +/* Output before read-only data. */ + +#define TEXT_SECTION_ASM_OP "\t.text" + +/* Output before writable (initialized) data. */ + +#define DATA_SECTION_ASM_OP "\t.data" + +/* Output before writable (uninitialized) data. */ + +#define BSS_SECTION_ASM_OP "\t.bss" + +/* Globalizing directive for a label. */ +#define GLOBAL_ASM_OP "\t.globl\t" + +/* By default, target has a 80387, uses IEEE compatible arithmetic, + and returns float values in the 387. */ +#undef TARGET_SUBTARGET_DEFAULT +#define TARGET_SUBTARGET_DEFAULT \ + (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS) + +/* By default, 64-bit mode uses 128-bit long double. */ +#undef TARGET_SUBTARGET64_DEFAULT +#define TARGET_SUBTARGET64_DEFAULT \ + MASK_128BIT_LONG_DOUBLE diff --git a/contrib/toolchain/gcc/5x/gcc/config/i386/x86-tune.def b/contrib/toolchain/gcc/5x/gcc/config/i386/x86-tune.def new file mode 100644 index 0000000000..bb3209d6fc --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/config/i386/x86-tune.def @@ -0,0 +1,544 @@ +/* Definitions of x86 tunable features. + Copyright (C) 2013-2015 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 and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +/* Tuning for a given CPU XXXX consists of: + - adding new CPU into: + - adding PROCESSOR_XXX to processor_type (in i386.h) + - possibly adding XXX into CPU attribute in i386.md + - adding XXX to processor_alias_table (in i386.c) + - introducing ix86_XXX_cost in i386.c + - Stringop generation table can be build based on test_stringop + - script (once rest of tuning is complete) + - designing a scheduler model in + - XXXX.md file + - Updating ix86_issue_rate and ix86_adjust_cost in i386.md + - possibly updating ia32_multipass_dfa_lookahead, ix86_sched_reorder + and ix86_sched_init_global if those tricks are needed. + - Tunning the flags bellow. Those are split into sections and each + section is very roughly ordered by importance. */ + +/*****************************************************************************/ +/* Scheduling flags. */ +/*****************************************************************************/ + +/* X86_TUNE_SCHEDULE: Enable scheduling. */ +DEF_TUNE (X86_TUNE_SCHEDULE, "schedule", + m_PENT | m_PPRO | m_CORE_ALL | m_BONNELL | m_SILVERMONT | m_INTEL + | m_KNL | m_K6_GEODE | m_AMD_MULTIPLE | m_GENERIC) + +/* X86_TUNE_PARTIAL_REG_DEPENDENCY: Enable more register renaming + on modern chips. Preffer stores affecting whole integer register + over partial stores. For example preffer MOVZBL or MOVQ to load 8bit + value over movb. */ +DEF_TUNE (X86_TUNE_PARTIAL_REG_DEPENDENCY, "partial_reg_dependency", + m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_SILVERMONT | m_INTEL + | m_KNL | m_AMD_MULTIPLE | m_GENERIC) + +/* X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY: This knob promotes all store + destinations to be 128bit to allow register renaming on 128bit SSE units, + but usually results in one extra microop on 64bit SSE units. + Experimental results shows that disabling this option on P4 brings over 20% + SPECfp regression, while enabling it on K8 brings roughly 2.4% regression + that can be partly masked by careful scheduling of moves. */ +DEF_TUNE (X86_TUNE_SSE_PARTIAL_REG_DEPENDENCY, "sse_partial_reg_dependency", + m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_AMDFAM10 + | m_BDVER | m_GENERIC) + +/* X86_TUNE_SSE_SPLIT_REGS: Set for machines where the type and dependencies + are resolved on SSE register parts instead of whole registers, so we may + maintain just lower part of scalar values in proper format leaving the + upper part undefined. */ +DEF_TUNE (X86_TUNE_SSE_SPLIT_REGS, "sse_split_regs", m_ATHLON_K8) + +/* X86_TUNE_PARTIAL_FLAG_REG_STALL: this flag disables use of of flags + set by instructions affecting just some flags (in particular shifts). + This is because Core2 resolves dependencies on whole flags register + and such sequences introduce false dependency on previous instruction + setting full flags. + + The flags does not affect generation of INC and DEC that is controlled + by X86_TUNE_USE_INCDEC. + + This flag may be dropped from generic once core2-corei5 machines are + rare enough. */ +DEF_TUNE (X86_TUNE_PARTIAL_FLAG_REG_STALL, "partial_flag_reg_stall", + m_CORE2 | m_GENERIC) + +/* X86_TUNE_MOVX: Enable to zero extend integer registers to avoid + partial dependencies. */ +DEF_TUNE (X86_TUNE_MOVX, "movx", + m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_SILVERMONT + | m_KNL | m_INTEL | m_GEODE | m_AMD_MULTIPLE | m_GENERIC) + +/* X86_TUNE_MEMORY_MISMATCH_STALL: Avoid partial stores that are followed by + full sized loads. */ +DEF_TUNE (X86_TUNE_MEMORY_MISMATCH_STALL, "memory_mismatch_stall", + m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_SILVERMONT | m_INTEL + | m_KNL | m_AMD_MULTIPLE | m_GENERIC) + +/* X86_TUNE_FUSE_CMP_AND_BRANCH_32: Fuse compare with a subsequent + conditional jump instruction for 32 bit TARGET. + FIXME: revisit for generic. */ +DEF_TUNE (X86_TUNE_FUSE_CMP_AND_BRANCH_32, "fuse_cmp_and_branch_32", + m_CORE_ALL | m_BDVER) + +/* X86_TUNE_FUSE_CMP_AND_BRANCH_64: Fuse compare with a subsequent + conditional jump instruction for TARGET_64BIT. + FIXME: revisit for generic. */ +DEF_TUNE (X86_TUNE_FUSE_CMP_AND_BRANCH_64, "fuse_cmp_and_branch_64", + m_NEHALEM | m_SANDYBRIDGE | m_HASWELL | m_BDVER) + +/* X86_TUNE_FUSE_CMP_AND_BRANCH_SOFLAGS: Fuse compare with a + subsequent conditional jump instruction when the condition jump + check sign flag (SF) or overflow flag (OF). */ +DEF_TUNE (X86_TUNE_FUSE_CMP_AND_BRANCH_SOFLAGS, "fuse_cmp_and_branch_soflags", + m_NEHALEM | m_SANDYBRIDGE | m_HASWELL | m_BDVER) + +/* X86_TUNE_FUSE_ALU_AND_BRANCH: Fuse alu with a subsequent conditional + jump instruction when the alu instruction produces the CCFLAG consumed by + the conditional jump instruction. */ +DEF_TUNE (X86_TUNE_FUSE_ALU_AND_BRANCH, "fuse_alu_and_branch", + m_SANDYBRIDGE | m_HASWELL) + +/* X86_TUNE_REASSOC_INT_TO_PARALLEL: Try to produce parallel computations + during reassociation of integer computation. */ +DEF_TUNE (X86_TUNE_REASSOC_INT_TO_PARALLEL, "reassoc_int_to_parallel", + m_BONNELL) + +/* X86_TUNE_REASSOC_FP_TO_PARALLEL: Try to produce parallel computations + during reassociation of fp computation. */ +DEF_TUNE (X86_TUNE_REASSOC_FP_TO_PARALLEL, "reassoc_fp_to_parallel", + m_BONNELL | m_SILVERMONT | m_HASWELL | m_KNL |m_INTEL | m_BDVER1 + | m_BDVER2 | m_GENERIC) + +/*****************************************************************************/ +/* Function prologue, epilogue and function calling sequences. */ +/*****************************************************************************/ + +/* X86_TUNE_ACCUMULATE_OUTGOING_ARGS: Allocate stack space for outgoing + arguments in prologue/epilogue instead of separately for each call + by push/pop instructions. + This increase code size by about 5% in 32bit mode, less so in 64bit mode + because parameters are passed in registers. It is considerable + win for targets without stack engine that prevents multple push operations + to happen in parallel. + + FIXME: the flags is incorrectly enabled for amdfam10, Bulldozer, + Bobcat and Generic. This is because disabling it causes large + regression on mgrid due to IRA limitation leading to unecessary + use of the frame pointer in 32bit mode. */ +DEF_TUNE (X86_TUNE_ACCUMULATE_OUTGOING_ARGS, "accumulate_outgoing_args", + m_PPRO | m_P4_NOCONA | m_BONNELL | m_SILVERMONT | m_KNL | m_INTEL + | m_ATHLON_K8) + +/* X86_TUNE_PROLOGUE_USING_MOVE: Do not use push/pop in prologues that are + considered on critical path. */ +DEF_TUNE (X86_TUNE_PROLOGUE_USING_MOVE, "prologue_using_move", + m_PPRO | m_ATHLON_K8) + +/* X86_TUNE_PROLOGUE_USING_MOVE: Do not use push/pop in epilogues that are + considered on critical path. */ +DEF_TUNE (X86_TUNE_EPILOGUE_USING_MOVE, "epilogue_using_move", + m_PPRO | m_ATHLON_K8) + +/* X86_TUNE_USE_LEAVE: Use "leave" instruction in epilogues where it fits. */ +DEF_TUNE (X86_TUNE_USE_LEAVE, "use_leave", + m_386 | m_CORE_ALL | m_K6_GEODE | m_AMD_MULTIPLE | m_GENERIC) + +/* X86_TUNE_PUSH_MEMORY: Enable generation of "push mem" instructions. + Some chips, like 486 and Pentium works faster with separate load + and push instructions. */ +DEF_TUNE (X86_TUNE_PUSH_MEMORY, "push_memory", + m_386 | m_P4_NOCONA | m_CORE_ALL | m_K6_GEODE | m_AMD_MULTIPLE + | m_GENERIC) + +/* X86_TUNE_SINGLE_PUSH: Enable if single push insn is preferred + over esp subtraction. */ +DEF_TUNE (X86_TUNE_SINGLE_PUSH, "single_push", m_386 | m_486 | m_PENT + | m_K6_GEODE) + +/* X86_TUNE_DOUBLE_PUSH. Enable if double push insn is preferred + over esp subtraction. */ +DEF_TUNE (X86_TUNE_DOUBLE_PUSH, "double_push", m_PENT | m_K6_GEODE) + +/* X86_TUNE_SINGLE_POP: Enable if single pop insn is preferred + over esp addition. */ +DEF_TUNE (X86_TUNE_SINGLE_POP, "single_pop", m_386 | m_486 | m_PENT | m_PPRO) + +/* X86_TUNE_DOUBLE_POP: Enable if double pop insn is preferred + over esp addition. */ +DEF_TUNE (X86_TUNE_DOUBLE_POP, "double_pop", m_PENT) + +/*****************************************************************************/ +/* Branch predictor tuning */ +/*****************************************************************************/ + +/* X86_TUNE_PAD_SHORT_FUNCTION: Make every function to be at least 4 + instructions long. */ +DEF_TUNE (X86_TUNE_PAD_SHORT_FUNCTION, "pad_short_function", m_BONNELL) + +/* X86_TUNE_PAD_RETURNS: Place NOP before every RET that is a destination + of conditional jump or directly preceded by other jump instruction. + This is important for AND K8-AMDFAM10 because the branch prediction + architecture expect at most one jump per 2 byte window. Failing to + pad returns leads to misaligned return stack. */ +DEF_TUNE (X86_TUNE_PAD_RETURNS, "pad_returns", + m_ATHLON_K8 | m_AMDFAM10 | m_GENERIC) + +/* X86_TUNE_FOUR_JUMP_LIMIT: Some CPU cores are not able to predict more + than 4 branch instructions in the 16 byte window. */ +DEF_TUNE (X86_TUNE_FOUR_JUMP_LIMIT, "four_jump_limit", + m_PPRO | m_P4_NOCONA | m_BONNELL | m_SILVERMONT | m_KNL |m_INTEL | + m_ATHLON_K8 | m_AMDFAM10) + +/*****************************************************************************/ +/* Integer instruction selection tuning */ +/*****************************************************************************/ + +/* X86_TUNE_SOFTWARE_PREFETCHING_BENEFICIAL: Enable software prefetching + at -O3. For the moment, the prefetching seems badly tuned for Intel + chips. */ +DEF_TUNE (X86_TUNE_SOFTWARE_PREFETCHING_BENEFICIAL, "software_prefetching_beneficial", + m_K6_GEODE | m_AMD_MULTIPLE) + +/* X86_TUNE_LCP_STALL: Avoid an expensive length-changing prefix stall + on 16-bit immediate moves into memory on Core2 and Corei7. */ +DEF_TUNE (X86_TUNE_LCP_STALL, "lcp_stall", m_CORE_ALL | m_GENERIC) + +/* X86_TUNE_READ_MODIFY: Enable use of read-modify instructions such + as "add mem, reg". */ +DEF_TUNE (X86_TUNE_READ_MODIFY, "read_modify", ~(m_PENT | m_PPRO)) + +/* X86_TUNE_USE_INCDEC: Enable use of inc/dec instructions. */ +DEF_TUNE (X86_TUNE_USE_INCDEC, "use_incdec", + ~(m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_SILVERMONT | m_INTEL + | m_KNL | m_GENERIC)) + +/* X86_TUNE_INTEGER_DFMODE_MOVES: Enable if integer moves are preferred + for DFmode copies */ +DEF_TUNE (X86_TUNE_INTEGER_DFMODE_MOVES, "integer_dfmode_moves", + ~(m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_SILVERMONT + | m_KNL | m_INTEL | m_GEODE | m_AMD_MULTIPLE | m_GENERIC)) + +/* X86_TUNE_OPT_AGU: Optimize for Address Generation Unit. This flag + will impact LEA instruction selection. */ +DEF_TUNE (X86_TUNE_OPT_AGU, "opt_agu", m_BONNELL | m_SILVERMONT | m_KNL + | m_INTEL) + +/* X86_TUNE_AVOID_LEA_FOR_ADDR: Avoid lea for address computation. */ +DEF_TUNE (X86_TUNE_AVOID_LEA_FOR_ADDR, "avoid_lea_for_addr", + m_BONNELL | m_SILVERMONT | m_KNL) + +/* X86_TUNE_SLOW_IMUL_IMM32_MEM: Imul of 32-bit constant and memory is + vector path on AMD machines. + FIXME: Do we need to enable this for core? */ +DEF_TUNE (X86_TUNE_SLOW_IMUL_IMM32_MEM, "slow_imul_imm32_mem", + m_K8 | m_AMDFAM10) + +/* X86_TUNE_SLOW_IMUL_IMM8: Imul of 8-bit constant is vector path on AMD + machines. + FIXME: Do we need to enable this for core? */ +DEF_TUNE (X86_TUNE_SLOW_IMUL_IMM8, "slow_imul_imm8", + m_K8 | m_AMDFAM10) + +/* X86_TUNE_AVOID_MEM_OPND_FOR_CMOVE: Try to avoid memory operands for + a conditional move. */ +DEF_TUNE (X86_TUNE_AVOID_MEM_OPND_FOR_CMOVE, "avoid_mem_opnd_for_cmove", + m_BONNELL | m_SILVERMONT | m_KNL | m_INTEL) + +/* X86_TUNE_SINGLE_STRINGOP: Enable use of single string operations, such + as MOVS and STOS (without a REP prefix) to move/set sequences of bytes. */ +DEF_TUNE (X86_TUNE_SINGLE_STRINGOP, "single_stringop", m_386 | m_P4_NOCONA) + +/* X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES: Enable generation of + compact prologues and epilogues by issuing a misaligned moves. This + requires target to handle misaligned moves and partial memory stalls + reasonably well. + FIXME: This may actualy be a win on more targets than listed here. */ +DEF_TUNE (X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES, + "misaligned_move_string_pro_epilogues", + m_386 | m_486 | m_CORE_ALL | m_AMD_MULTIPLE | m_GENERIC) + +/* X86_TUNE_USE_SAHF: Controls use of SAHF. */ +DEF_TUNE (X86_TUNE_USE_SAHF, "use_sahf", + m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_SILVERMONT + | m_KNL | m_INTEL | m_K6_GEODE | m_K8 | m_AMDFAM10 | m_BDVER + | m_BTVER | m_GENERIC) + +/* X86_TUNE_USE_CLTD: Controls use of CLTD and CTQO instructions. */ +DEF_TUNE (X86_TUNE_USE_CLTD, "use_cltd", + ~(m_PENT | m_BONNELL | m_SILVERMONT | m_KNL | m_INTEL | m_K6)) + +/* X86_TUNE_USE_BT: Enable use of BT (bit test) instructions. */ +DEF_TUNE (X86_TUNE_USE_BT, "use_bt", + m_CORE_ALL | m_BONNELL | m_SILVERMONT | m_KNL | m_INTEL + | m_AMD_MULTIPLE | m_GENERIC) + +/*****************************************************************************/ +/* 387 instruction selection tuning */ +/*****************************************************************************/ + +/* X86_TUNE_USE_HIMODE_FIOP: Enables use of x87 instructions with 16bit + integer operand. + FIXME: Why this is disabled for modern chips? */ +DEF_TUNE (X86_TUNE_USE_HIMODE_FIOP, "use_himode_fiop", + m_386 | m_486 | m_K6_GEODE) + +/* X86_TUNE_USE_SIMODE_FIOP: Enables use of x87 instructions with 32bit + integer operand. */ +DEF_TUNE (X86_TUNE_USE_SIMODE_FIOP, "use_simode_fiop", + ~(m_PENT | m_PPRO | m_CORE_ALL | m_BONNELL | m_SILVERMONT + | m_KNL | m_INTEL | m_AMD_MULTIPLE | m_GENERIC)) + +/* X86_TUNE_USE_FFREEP: Use freep instruction instead of fstp. */ +DEF_TUNE (X86_TUNE_USE_FFREEP, "use_ffreep", m_AMD_MULTIPLE) + +/* X86_TUNE_EXT_80387_CONSTANTS: Use fancy 80387 constants, such as PI. */ +DEF_TUNE (X86_TUNE_EXT_80387_CONSTANTS, "ext_80387_constants", + m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BONNELL | m_SILVERMONT + | m_KNL | m_INTEL | m_K6_GEODE | m_ATHLON_K8 | m_GENERIC) + +/*****************************************************************************/ +/* SSE instruction selection tuning */ +/*****************************************************************************/ + +/* X86_TUNE_VECTORIZE_DOUBLE: Enable double precision vector + instructions. */ +DEF_TUNE (X86_TUNE_VECTORIZE_DOUBLE, "vectorize_double", ~m_BONNELL) + +/* X86_TUNE_GENERAL_REGS_SSE_SPILL: Try to spill general regs to SSE + regs instead of memory. */ +DEF_TUNE (X86_TUNE_GENERAL_REGS_SSE_SPILL, "general_regs_sse_spill", + m_CORE_ALL) + +/* X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL: Use movups for misaligned loads instead + of a sequence loading registers by parts. */ +DEF_TUNE (X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL, "sse_unaligned_load_optimal", + m_NEHALEM | m_SANDYBRIDGE | m_HASWELL | m_AMDFAM10 | m_BDVER + | m_BTVER | m_SILVERMONT | m_KNL | m_INTEL | m_GENERIC) + +/* X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL: Use movups for misaligned stores instead + of a sequence loading registers by parts. */ +DEF_TUNE (X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL, "sse_unaligned_store_optimal", + m_NEHALEM | m_SANDYBRIDGE | m_HASWELL | m_BDVER | m_SILVERMONT + | m_KNL | m_INTEL | m_GENERIC) + +/* Use packed single precision instructions where posisble. I.e. movups instead + of movupd. */ +DEF_TUNE (X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL, "sse_packed_single_insn_optimal", + m_BDVER) + +/* X86_TUNE_SSE_TYPELESS_STORES: Always movaps/movups for 128bit stores. */ +DEF_TUNE (X86_TUNE_SSE_TYPELESS_STORES, "sse_typeless_stores", + m_AMD_MULTIPLE | m_CORE_ALL | m_GENERIC) + +/* X86_TUNE_SSE_LOAD0_BY_PXOR: Always use pxor to load0 as opposed to + xorps/xorpd and other variants. */ +DEF_TUNE (X86_TUNE_SSE_LOAD0_BY_PXOR, "sse_load0_by_pxor", + m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_BDVER | m_BTVER | m_GENERIC) + +/* X86_TUNE_INTER_UNIT_MOVES_TO_VEC: Enable moves in from integer + to SSE registers. If disabled, the moves will be done by storing + the value to memory and reloading. */ +DEF_TUNE (X86_TUNE_INTER_UNIT_MOVES_TO_VEC, "inter_unit_moves_to_vec", + ~(m_AMD_MULTIPLE | m_GENERIC)) + +/* X86_TUNE_INTER_UNIT_MOVES_TO_VEC: Enable moves in from SSE + to integer registers. If disabled, the moves will be done by storing + the value to memory and reloading. */ +DEF_TUNE (X86_TUNE_INTER_UNIT_MOVES_FROM_VEC, "inter_unit_moves_from_vec", + ~m_ATHLON_K8) + +/* X86_TUNE_INTER_UNIT_CONVERSIONS: Enable float<->integer conversions + to use both SSE and integer registers at a same time. + FIXME: revisit importance of this for generic. */ +DEF_TUNE (X86_TUNE_INTER_UNIT_CONVERSIONS, "inter_unit_conversions", + ~(m_AMDFAM10 | m_BDVER)) + +/* X86_TUNE_SPLIT_MEM_OPND_FOR_FP_CONVERTS: Try to split memory operand for + fp converts to destination register. */ +DEF_TUNE (X86_TUNE_SPLIT_MEM_OPND_FOR_FP_CONVERTS, "split_mem_opnd_for_fp_converts", + m_SILVERMONT | m_KNL | m_INTEL) + +/* X86_TUNE_USE_VECTOR_FP_CONVERTS: Prefer vector packed SSE conversion + from FP to FP. This form of instructions avoids partial write to the + destination. */ +DEF_TUNE (X86_TUNE_USE_VECTOR_FP_CONVERTS, "use_vector_fp_converts", + m_AMDFAM10) + +/* X86_TUNE_USE_VECTOR_CONVERTS: Prefer vector packed SSE conversion + from integer to FP. */ +DEF_TUNE (X86_TUNE_USE_VECTOR_CONVERTS, "use_vector_converts", m_AMDFAM10) + +/* X86_TUNE_SLOW_SHUFB: Indicates tunings with slow pshufb instruction. */ +DEF_TUNE (X86_TUNE_SLOW_PSHUFB, "slow_pshufb", + m_BONNELL | m_SILVERMONT | m_KNL | m_INTEL) + +/* X86_TUNE_VECTOR_PARALLEL_EXECUTION: Indicates tunings with ability to + execute 2 or more vector instructions in parallel. */ +DEF_TUNE (X86_TUNE_VECTOR_PARALLEL_EXECUTION, "vec_parallel", + m_NEHALEM | m_SANDYBRIDGE | m_HASWELL) + +/* X86_TUNE_AVOID_4BYTE_PREFIXES: Avoid instructions requiring 4+ bytes of prefixes. */ +DEF_TUNE (X86_TUNE_AVOID_4BYTE_PREFIXES, "avoid_4byte_prefixes", + m_SILVERMONT | m_INTEL) + +/*****************************************************************************/ +/* AVX instruction selection tuning (some of SSE flags affects AVX, too) */ +/*****************************************************************************/ + +/* X86_TUNE_AVX256_UNALIGNED_LOAD_OPTIMAL: if false, unaligned loads are + split. */ +DEF_TUNE (X86_TUNE_AVX256_UNALIGNED_LOAD_OPTIMAL, "256_unaligned_load_optimal", + ~(m_NEHALEM | m_SANDYBRIDGE | m_GENERIC)) + +/* X86_TUNE_AVX256_UNALIGNED_STORE_OPTIMAL: if false, unaligned stores are + split. */ +DEF_TUNE (X86_TUNE_AVX256_UNALIGNED_STORE_OPTIMAL, "256_unaligned_store_optimal", + ~(m_NEHALEM | m_SANDYBRIDGE | m_BDVER | m_GENERIC)) + +/* X86_TUNE_AVX128_OPTIMAL: Enable 128-bit AVX instruction generation for + the auto-vectorizer. */ +DEF_TUNE (X86_TUNE_AVX128_OPTIMAL, "avx128_optimal", m_BDVER | m_BTVER2) + +/*****************************************************************************/ +/* Historical relics: tuning flags that helps a specific old CPU designs */ +/*****************************************************************************/ + +/* X86_TUNE_DOUBLE_WITH_ADD: Use add instead of sal to double value in + an integer register. */ +DEF_TUNE (X86_TUNE_DOUBLE_WITH_ADD, "double_with_add", ~m_386) + +/* X86_TUNE_ALWAYS_FANCY_MATH_387: controls use of fancy 387 operations, + such as fsqrt, fprem, fsin, fcos, fsincos etc. + Should be enabled for all targets that always has coprocesor. */ +DEF_TUNE (X86_TUNE_ALWAYS_FANCY_MATH_387, "always_fancy_math_387", + ~(m_386 | m_486)) + +/* X86_TUNE_UNROLL_STRLEN: Produce (quite lame) unrolled sequence for + inline strlen. This affects only -minline-all-stringops mode. By + default we always dispatch to a library since our internal strlen + is bad. */ +DEF_TUNE (X86_TUNE_UNROLL_STRLEN, "unroll_strlen", ~m_386) + +/* X86_TUNE_SHIFT1: Enables use of short encoding of "sal reg" instead of + longer "sal $1, reg". */ +DEF_TUNE (X86_TUNE_SHIFT1, "shift1", ~m_486) + +/* X86_TUNE_ZERO_EXTEND_WITH_AND: Use AND instruction instead + of mozbl/movwl. */ +DEF_TUNE (X86_TUNE_ZERO_EXTEND_WITH_AND, "zero_extend_with_and", m_486 | m_PENT) + +/* X86_TUNE_PROMOTE_HIMODE_IMUL: Modern CPUs have same latency for HImode + and SImode multiply, but 386 and 486 do HImode multiply faster. */ +DEF_TUNE (X86_TUNE_PROMOTE_HIMODE_IMUL, "promote_himode_imul", + ~(m_386 | m_486)) + +/* X86_TUNE_FAST_PREFIX: Enable demoting some 32bit or 64bit arithmetic + into 16bit/8bit when resulting sequence is shorter. For example + for "and $-65536, reg" to 16bit store of 0. */ +DEF_TUNE (X86_TUNE_FAST_PREFIX, "fast_prefix", ~(m_386 | m_486 | m_PENT)) + +/* X86_TUNE_READ_MODIFY_WRITE: Enable use of read modify write instructions + such as "add $1, mem". */ +DEF_TUNE (X86_TUNE_READ_MODIFY_WRITE, "read_modify_write", ~m_PENT) + +/* X86_TUNE_MOVE_M1_VIA_OR: On pentiums, it is faster to load -1 via OR + than a MOV. */ +DEF_TUNE (X86_TUNE_MOVE_M1_VIA_OR, "move_m1_via_or", m_PENT) + +/* X86_TUNE_NOT_UNPAIRABLE: NOT is not pairable on Pentium, while XOR is, + but one byte longer. */ +DEF_TUNE (X86_TUNE_NOT_UNPAIRABLE, "not_unpairable", m_PENT) + +/* X86_TUNE_PARTIAL_REG_STALL: Pentium pro, unlike later chips, handled + use of partial registers by renaming. This improved performance of 16bit + code where upper halves of registers are not used. It also leads to + an penalty whenever a 16bit store is followed by 32bit use. This flag + disables production of such sequences in common cases. + See also X86_TUNE_HIMODE_MATH. + + In current implementation the partial register stalls are not eliminated + very well - they can be introduced via subregs synthesized by combine + and can happen in caller/callee saving sequences. */ +DEF_TUNE (X86_TUNE_PARTIAL_REG_STALL, "partial_reg_stall", m_PPRO) + +/* X86_TUNE_PROMOTE_QIMODE: When it is cheap, turn 8bit arithmetic to + corresponding 32bit arithmetic. */ +DEF_TUNE (X86_TUNE_PROMOTE_QIMODE, "promote_qimode", + ~m_PPRO) + +/* X86_TUNE_PROMOTE_HI_REGS: Same, but for 16bit artihmetic. Again we avoid + partial register stalls on PentiumPro targets. */ +DEF_TUNE (X86_TUNE_PROMOTE_HI_REGS, "promote_hi_regs", m_PPRO) + +/* X86_TUNE_HIMODE_MATH: Enable use of 16bit arithmetic. + On PPro this flag is meant to avoid partial register stalls. */ +DEF_TUNE (X86_TUNE_HIMODE_MATH, "himode_math", ~m_PPRO) + +/* X86_TUNE_SPLIT_LONG_MOVES: Avoid instructions moving immediates + directly to memory. */ +DEF_TUNE (X86_TUNE_SPLIT_LONG_MOVES, "split_long_moves", m_PPRO) + +/* X86_TUNE_USE_XCHGB: Use xchgb %rh,%rl instead of rolw/rorw $8,rx. */ +DEF_TUNE (X86_TUNE_USE_XCHGB, "use_xchgb", m_PENT4) + +/* X86_TUNE_USE_MOV0: Use "mov $0, reg" instead of "xor reg, reg" to clear + integer register. */ +DEF_TUNE (X86_TUNE_USE_MOV0, "use_mov0", m_K6) + +/* X86_TUNE_NOT_VECTORMODE: On AMD K6, NOT is vector decoded with memory + operand that cannot be represented using a modRM byte. The XOR + replacement is long decoded, so this split helps here as well. */ +DEF_TUNE (X86_TUNE_NOT_VECTORMODE, "not_vectormode", m_K6) + +/* X86_TUNE_AVOID_VECTOR_DECODE: Enable splitters that avoid vector decoded + forms of instructions on K8 targets. */ +DEF_TUNE (X86_TUNE_AVOID_VECTOR_DECODE, "avoid_vector_decode", + m_K8) + +/* X86_TUNE_AVOID_FALSE_DEP_FOR_BMI: Avoid false dependency + for bit-manipulation instructions. */ +DEF_TUNE (X86_TUNE_AVOID_FALSE_DEP_FOR_BMI, "avoid_false_dep_for_bmi", + m_SANDYBRIDGE | m_HASWELL | m_GENERIC) + +/*****************************************************************************/ +/* This never worked well before. */ +/*****************************************************************************/ + +/* X86_TUNE_BRANCH_PREDICTION_HINTS: Branch hints were put in P4 based + on simulation result. But after P4 was made, no performance benefit + was observed with branch hints. It also increases the code size. + As a result, icc never generates branch hints. */ +DEF_TUNE (X86_TUNE_BRANCH_PREDICTION_HINTS, "branch_prediction_hints", 0) + +/* X86_TUNE_QIMODE_MATH: Enable use of 8bit arithmetic. */ +DEF_TUNE (X86_TUNE_QIMODE_MATH, "qimode_math", ~0) + +/* X86_TUNE_PROMOTE_QI_REGS: This enables generic code that promotes all 8bit + arithmetic to 32bit via PROMOTE_MODE macro. This code generation scheme + is usually used for RISC targets. */ +DEF_TUNE (X86_TUNE_PROMOTE_QI_REGS, "promote_qi_regs", 0) + +/* X86_TUNE_ADJUST_UNROLL: This enables adjusting the unroll factor based + on hardware capabilities. Bdver3 hardware has a loop buffer which makes + unrolling small loop less important. For, such architectures we adjust + the unroll factor so that the unrolled loop fits the loop buffer. */ +DEF_TUNE (X86_TUNE_ADJUST_UNROLL, "adjust_unroll_factor", m_BDVER3 | m_BDVER4) diff --git a/contrib/toolchain/gcc/5x/gcc/config/i386/xm-mingw32.h b/contrib/toolchain/gcc/5x/gcc/config/i386/xm-mingw32.h new file mode 100644 index 0000000000..1247ac5ea8 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/config/i386/xm-mingw32.h @@ -0,0 +1,31 @@ +/* Configuration for GCC for hosting on Windows32. + using GNU tools and the Windows32 API Library. + Copyright (C) 1997-2015 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 +. */ + +#define HOST_EXECUTABLE_SUFFIX "" + +#undef PATH_SEPARATOR +#define PATH_SEPARATOR ';' + +/* This is the name of the null device on windows. */ +#define HOST_BIT_BUCKET "nul" + +/* The st_ino field of struct stat is always 0. */ +#define HOST_LACKS_INODE_NUMBERS + diff --git a/contrib/toolchain/gcc/5x/gcc/config/initfini-array.h b/contrib/toolchain/gcc/5x/gcc/config/initfini-array.h new file mode 100644 index 0000000000..06da397404 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/config/initfini-array.h @@ -0,0 +1,45 @@ +/* Definitions for ELF systems with .init_array/.fini_array section + support. + Copyright (C) 2011-2015 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 HAVE_INITFINI_ARRAY_SUPPORT + +#define USE_INITFINI_ARRAY + +#undef INIT_SECTION_ASM_OP +#undef FINI_SECTION_ASM_OP + +#undef INIT_ARRAY_SECTION_ASM_OP +#define INIT_ARRAY_SECTION_ASM_OP + +#undef FINI_ARRAY_SECTION_ASM_OP +#define FINI_ARRAY_SECTION_ASM_OP + +/* Use .init_array/.fini_array section for constructors and destructors. */ +#undef TARGET_ASM_CONSTRUCTOR +#define TARGET_ASM_CONSTRUCTOR default_elf_init_array_asm_out_constructor +#undef TARGET_ASM_DESTRUCTOR +#define TARGET_ASM_DESTRUCTOR default_elf_fini_array_asm_out_destructor + +#endif diff --git a/contrib/toolchain/gcc/5x/gcc/config/tm-dwarf2.h b/contrib/toolchain/gcc/5x/gcc/config/tm-dwarf2.h new file mode 100644 index 0000000000..d08646eccf --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/config/tm-dwarf2.h @@ -0,0 +1,4 @@ +/* Enable Dwarf2 debugging and make it the default */ +#define DWARF2_DEBUGGING_INFO 1 +#undef PREFERRED_DEBUGGING_TYPE +#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG diff --git a/contrib/toolchain/gcc/5x/gcc/config/vxworks-dummy.h b/contrib/toolchain/gcc/5x/gcc/config/vxworks-dummy.h new file mode 100644 index 0000000000..2b5ddcccc7 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/config/vxworks-dummy.h @@ -0,0 +1,40 @@ +/* Dummy definitions of VxWorks-related macros + Copyright (C) 2007-2015 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 +. */ + +/* True if we're targeting VxWorks. */ +#ifndef TARGET_VXWORKS +#define TARGET_VXWORKS 0 +#endif + +/* True if generating code for a VxWorks RTP. */ +#ifndef TARGET_VXWORKS_RTP +#define TARGET_VXWORKS_RTP false +#endif + +/* The symbol that points to an RTP's table of GOTs. */ +#define VXWORKS_GOTT_BASE (gcc_unreachable (), "") + +/* The symbol that holds the index of the current module's GOT in + VXWORKS_GOTT_BASE. */ +#define VXWORKS_GOTT_INDEX (gcc_unreachable (), "") diff --git a/contrib/toolchain/gcc/5x/gcc/coretypes.h b/contrib/toolchain/gcc/5x/gcc/coretypes.h new file mode 100644 index 0000000000..0ee8633c72 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/coretypes.h @@ -0,0 +1,302 @@ +/* GCC core type declarations. + Copyright (C) 2002-2015 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 +. */ + +/* Provide forward declarations of core types which are referred to by + most of the compiler. This allows header files to use these types + (e.g. in function prototypes) without concern for whether the full + definitions are visible. Some other declarations that need to be + universally visible are here, too. + + In the context of tconfig.h, most of these have special definitions + which prevent them from being used except in further type + declarations. This is a kludge; the right thing is to avoid + including the "tm.h" header set in the context of tconfig.h, but + we're not there yet. */ + +#ifndef GCC_CORETYPES_H +#define GCC_CORETYPES_H + +#ifndef GTY +#define GTY(x) /* nothing - marker for gengtype */ +#endif + +#ifndef USED_FOR_TARGET + +typedef int64_t gcov_type; +typedef uint64_t gcov_type_unsigned; + +struct bitmap_head; +typedef struct bitmap_head *bitmap; +typedef const struct bitmap_head *const_bitmap; +struct simple_bitmap_def; +typedef struct simple_bitmap_def *sbitmap; +typedef const struct simple_bitmap_def *const_sbitmap; +struct rtx_def; +typedef struct rtx_def *rtx; +typedef const struct rtx_def *const_rtx; + +/* Subclasses of rtx_def, using indentation to show the class + hierarchy, along with the relevant invariant. + Where possible, keep this list in the same order as in rtl.def. */ +class rtx_def; + class rtx_expr_list; /* GET_CODE (X) == EXPR_LIST */ + class rtx_insn_list; /* GET_CODE (X) == INSN_LIST */ + class rtx_sequence; /* GET_CODE (X) == SEQUENCE */ + class rtx_insn; + class rtx_debug_insn; /* DEBUG_INSN_P (X) */ + class rtx_nonjump_insn; /* NONJUMP_INSN_P (X) */ + class rtx_jump_insn; /* JUMP_P (X) */ + class rtx_call_insn; /* CALL_P (X) */ + class rtx_jump_table_data; /* JUMP_TABLE_DATA_P (X) */ + class rtx_barrier; /* BARRIER_P (X) */ + class rtx_code_label; /* LABEL_P (X) */ + class rtx_note; /* NOTE_P (X) */ + +struct rtvec_def; +typedef struct rtvec_def *rtvec; +typedef const struct rtvec_def *const_rtvec; +struct hwivec_def; +typedef struct hwivec_def *hwivec; +typedef const struct hwivec_def *const_hwivec; +union tree_node; +typedef union tree_node *tree; +typedef const union tree_node *const_tree; +typedef struct gimple_statement_base *gimple; +typedef const struct gimple_statement_base *const_gimple; +typedef gimple gimple_seq; +struct gimple_stmt_iterator; + +/* Forward decls for leaf gimple subclasses (for individual gimple codes). + Keep this in the same order as the corresponding codes in gimple.def. */ + +struct gcond; +struct gdebug; +struct ggoto; +struct glabel; +struct gswitch; +struct gassign; +struct gasm; +struct gcall; +struct gtransaction; +struct greturn; +struct gbind; +struct gcatch; +struct geh_filter; +struct geh_mnt; +struct geh_else; +struct gresx; +struct geh_dispatch; +struct gphi; +struct gtry; +struct gomp_atomic_load; +struct gomp_atomic_store; +struct gomp_continue; +struct gomp_critical; +struct gomp_for; +struct gomp_parallel; +struct gomp_task; +struct gomp_sections; +struct gomp_single; +struct gomp_target; +struct gomp_teams; + +union section; +typedef union section section; +struct gcc_options; +struct cl_target_option; +struct cl_optimization; +struct cl_option; +struct cl_decoded_option; +struct cl_option_handlers; +struct diagnostic_context; +struct pretty_printer; + +/* Address space number for named address space support. */ +typedef unsigned char addr_space_t; + +/* The value of addr_space_t that represents the generic address space. */ +#define ADDR_SPACE_GENERIC 0 +#define ADDR_SPACE_GENERIC_P(AS) ((AS) == ADDR_SPACE_GENERIC) + +/* The major intermediate representations of GCC. */ +enum ir_type { + IR_GIMPLE, + IR_RTL_CFGRTL, + IR_RTL_CFGLAYOUT +}; + +/* Provide forward struct declaration so that we don't have to include + all of cpplib.h whenever a random prototype includes a pointer. + Note that the cpp_reader and cpp_token typedefs remain part of + cpplib.h. */ + +struct cpp_reader; +struct cpp_token; + +/* The thread-local storage model associated with a given VAR_DECL + or SYMBOL_REF. This isn't used much, but both trees and RTL refer + to it, so it's here. */ +enum tls_model { + TLS_MODEL_NONE, + TLS_MODEL_EMULATED, + TLS_MODEL_REAL, + TLS_MODEL_GLOBAL_DYNAMIC = TLS_MODEL_REAL, + TLS_MODEL_LOCAL_DYNAMIC, + TLS_MODEL_INITIAL_EXEC, + TLS_MODEL_LOCAL_EXEC +}; + +/* Types of ABI for an offload compiler. */ +enum offload_abi { + OFFLOAD_ABI_UNSET, + OFFLOAD_ABI_LP64, + OFFLOAD_ABI_ILP32 +}; + +/* Types of unwind/exception handling info that can be generated. */ + +enum unwind_info_type +{ + UI_NONE, + UI_SJLJ, + UI_DWARF2, + UI_TARGET, + UI_SEH +}; + +/* Callgraph node profile representation. */ +enum node_frequency { + /* This function most likely won't be executed at all. + (set only when profile feedback is available or via function attribute). */ + NODE_FREQUENCY_UNLIKELY_EXECUTED, + /* For functions that are known to be executed once (i.e. constructors, destructors + and main function. */ + NODE_FREQUENCY_EXECUTED_ONCE, + /* The default value. */ + NODE_FREQUENCY_NORMAL, + /* Optimize this function hard + (set only when profile feedback is available or via function attribute). */ + NODE_FREQUENCY_HOT +}; + +/* Possible initialization status of a variable. When requested + by the user, this information is tracked and recorded in the DWARF + debug information, along with the variable's location. */ +enum var_init_status +{ + VAR_INIT_STATUS_UNKNOWN, + VAR_INIT_STATUS_UNINITIALIZED, + VAR_INIT_STATUS_INITIALIZED +}; + + +struct edge_def; +typedef struct edge_def *edge; +typedef const struct edge_def *const_edge; +struct basic_block_def; +typedef struct basic_block_def *basic_block; +typedef const struct basic_block_def *const_basic_block; + +#define obstack_chunk_alloc xmalloc +#define obstack_chunk_free free +#define OBSTACK_CHUNK_SIZE 0 +#define gcc_obstack_init(OBSTACK) \ + obstack_specify_allocation ((OBSTACK), OBSTACK_CHUNK_SIZE, 0, \ + obstack_chunk_alloc, \ + obstack_chunk_free) + +/* enum reg_class is target specific, so it should not appear in + target-independent code or interfaces, like the target hook declarations + in target.h. */ +typedef int reg_class_t; + +class rtl_opt_pass; + +namespace gcc { + class context; +} + +#else + +struct _dont_use_rtx_here_; +struct _dont_use_rtvec_here_; +struct _dont_use_rtx_insn_here_; +union _dont_use_tree_here_; +#define rtx struct _dont_use_rtx_here_ * +#define const_rtx struct _dont_use_rtx_here_ * +#define rtvec struct _dont_use_rtvec_here * +#define const_rtvec struct _dont_use_rtvec_here * +#define rtx_insn struct _dont_use_rtx_insn_here_ +#define tree union _dont_use_tree_here_ * +#define const_tree union _dont_use_tree_here_ * + +#endif + +/* Classes of functions that compiler needs to check + whether they are present at the runtime or not. */ +enum function_class { + function_c94, + function_c99_misc, + function_c99_math_complex, + function_sincos, + function_c11_misc +}; + +/* Suppose that higher bits are target dependent. */ +#define MEMMODEL_MASK ((1<<16)-1) + +/* Legacy sync operations set this upper flag in the memory model. This allows + targets that need to do something stronger for sync operations to + differentiate with their target patterns and issue a more appropriate insn + sequence. See bugzilla 65697 for background. */ +#define MEMMODEL_SYNC (1<<15) + +/* Memory model without SYNC bit for targets/operations that do not care. */ +#define MEMMODEL_BASE_MASK (MEMMODEL_SYNC-1) + +/* Memory model types for the __atomic* builtins. + This must match the order in libstdc++-v3/include/bits/atomic_base.h. */ +enum memmodel +{ + MEMMODEL_RELAXED = 0, + MEMMODEL_CONSUME = 1, + MEMMODEL_ACQUIRE = 2, + MEMMODEL_RELEASE = 3, + MEMMODEL_ACQ_REL = 4, + MEMMODEL_SEQ_CST = 5, + MEMMODEL_LAST = 6, + MEMMODEL_SYNC_ACQUIRE = MEMMODEL_ACQUIRE | MEMMODEL_SYNC, + MEMMODEL_SYNC_RELEASE = MEMMODEL_RELEASE | MEMMODEL_SYNC, + MEMMODEL_SYNC_SEQ_CST = MEMMODEL_SEQ_CST | MEMMODEL_SYNC +}; + +/* Support for user-provided GGC and PCH markers. The first parameter + is a pointer to a pointer, the second a cookie. */ +typedef void (*gt_pointer_operator) (void *, void *); + +#if !defined (HAVE_UCHAR) +typedef unsigned char uchar; +#endif + +#endif /* coretypes.h */ diff --git a/contrib/toolchain/gcc/5x/gcc/defaults.h b/contrib/toolchain/gcc/5x/gcc/defaults.h new file mode 100644 index 0000000000..1d5479895e --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/defaults.h @@ -0,0 +1,1364 @@ +/* Definitions of various defaults for tm.h macros. + Copyright (C) 1992-2015 Free Software Foundation, Inc. + Contributed by Ron Guilmette (rfg@monkeys.com) + +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 GCC_DEFAULTS_H +#define GCC_DEFAULTS_H + +/* How to start an assembler comment. */ +#ifndef ASM_COMMENT_START +#define ASM_COMMENT_START ";#" +#endif + +/* Store in OUTPUT a string (made with alloca) containing an + assembler-name for a local static variable or function named NAME. + LABELNO is an integer which is different for each call. */ + +#ifndef ASM_PN_FORMAT +# ifndef NO_DOT_IN_LABEL +# define ASM_PN_FORMAT "%s.%lu" +# else +# ifndef NO_DOLLAR_IN_LABEL +# define ASM_PN_FORMAT "%s$%lu" +# else +# define ASM_PN_FORMAT "__%s_%lu" +# endif +# endif +#endif /* ! ASM_PN_FORMAT */ + +#ifndef ASM_FORMAT_PRIVATE_NAME +# define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \ + do { const char *const name_ = (NAME); \ + char *const output_ = (OUTPUT) = \ + (char *) alloca (strlen (name_) + 32); \ + sprintf (output_, ASM_PN_FORMAT, name_, (unsigned long)(LABELNO)); \ + } while (0) +#endif + +/* Choose a reasonable default for ASM_OUTPUT_ASCII. */ + +#ifndef ASM_OUTPUT_ASCII +#define ASM_OUTPUT_ASCII(MYFILE, MYSTRING, MYLENGTH) \ + do { \ + FILE *_hide_asm_out_file = (MYFILE); \ + const unsigned char *_hide_p = (const unsigned char *) (MYSTRING); \ + int _hide_thissize = (MYLENGTH); \ + { \ + FILE *asm_out_file = _hide_asm_out_file; \ + const unsigned char *p = _hide_p; \ + int thissize = _hide_thissize; \ + int i; \ + fprintf (asm_out_file, "\t.ascii \""); \ + \ + for (i = 0; i < thissize; i++) \ + { \ + int c = p[i]; \ + if (c == '\"' || c == '\\') \ + putc ('\\', asm_out_file); \ + if (ISPRINT (c)) \ + putc (c, asm_out_file); \ + else \ + { \ + fprintf (asm_out_file, "\\%o", c); \ + /* After an octal-escape, if a digit follows, \ + terminate one string constant and start another. \ + The VAX assembler fails to stop reading the escape \ + after three digits, so this is the only way we \ + can get it to parse the data properly. */ \ + if (i < thissize - 1 && ISDIGIT (p[i + 1])) \ + fprintf (asm_out_file, "\"\n\t.ascii \""); \ + } \ + } \ + fprintf (asm_out_file, "\"\n"); \ + } \ + } \ + while (0) +#endif + +/* This is how we tell the assembler to equate two values. */ +#ifdef SET_ASM_OP +#ifndef ASM_OUTPUT_DEF +#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \ + do { fprintf ((FILE), "%s", SET_ASM_OP); \ + assemble_name (FILE, LABEL1); \ + fprintf (FILE, ","); \ + assemble_name (FILE, LABEL2); \ + fprintf (FILE, "\n"); \ + } while (0) +#endif +#endif + +#ifndef IFUNC_ASM_TYPE +#define IFUNC_ASM_TYPE "gnu_indirect_function" +#endif + +#ifndef TLS_COMMON_ASM_OP +#define TLS_COMMON_ASM_OP ".tls_common" +#endif + +#if defined (HAVE_AS_TLS) && !defined (ASM_OUTPUT_TLS_COMMON) +#define ASM_OUTPUT_TLS_COMMON(FILE, DECL, NAME, SIZE) \ + do \ + { \ + fprintf ((FILE), "\t%s\t", TLS_COMMON_ASM_OP); \ + assemble_name ((FILE), (NAME)); \ + fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%u\n", \ + (SIZE), DECL_ALIGN (DECL) / BITS_PER_UNIT); \ + } \ + while (0) +#endif + +/* Decide whether to defer emitting the assembler output for an equate + of two values. The default is to not defer output. */ +#ifndef TARGET_DEFERRED_OUTPUT_DEFS +#define TARGET_DEFERRED_OUTPUT_DEFS(DECL,TARGET) false +#endif + +/* This is how to output the definition of a user-level label named + NAME, such as the label on variable NAME. */ + +#ifndef ASM_OUTPUT_LABEL +#define ASM_OUTPUT_LABEL(FILE,NAME) \ + do { \ + assemble_name ((FILE), (NAME)); \ + fputs (":\n", (FILE)); \ + } while (0) +#endif + +/* This is how to output the definition of a user-level label named + NAME, such as the label on a function. */ + +#ifndef ASM_OUTPUT_FUNCTION_LABEL +#define ASM_OUTPUT_FUNCTION_LABEL(FILE, NAME, DECL) \ + ASM_OUTPUT_LABEL ((FILE), (NAME)) +#endif + +/* Output the definition of a compiler-generated label named NAME. */ +#ifndef ASM_OUTPUT_INTERNAL_LABEL +#define ASM_OUTPUT_INTERNAL_LABEL(FILE,NAME) \ + do { \ + assemble_name_raw ((FILE), (NAME)); \ + fputs (":\n", (FILE)); \ + } while (0) +#endif + +/* This is how to output a reference to a user-level label named NAME. */ + +#ifndef ASM_OUTPUT_LABELREF +#define ASM_OUTPUT_LABELREF(FILE,NAME) \ + do { \ + fputs (user_label_prefix, (FILE)); \ + fputs ((NAME), (FILE)); \ + } while (0); +#endif + +/* Allow target to print debug info labels specially. This is useful for + VLIW targets, since debug info labels should go into the middle of + instruction bundles instead of breaking them. */ + +#ifndef ASM_OUTPUT_DEBUG_LABEL +#define ASM_OUTPUT_DEBUG_LABEL(FILE, PREFIX, NUM) \ + (*targetm.asm_out.internal_label) (FILE, PREFIX, NUM) +#endif + +/* This is how we tell the assembler that a symbol is weak. */ +#ifndef ASM_OUTPUT_WEAK_ALIAS +#if defined (ASM_WEAKEN_LABEL) && defined (ASM_OUTPUT_DEF) +#define ASM_OUTPUT_WEAK_ALIAS(STREAM, NAME, VALUE) \ + do \ + { \ + ASM_WEAKEN_LABEL (STREAM, NAME); \ + if (VALUE) \ + ASM_OUTPUT_DEF (STREAM, NAME, VALUE); \ + } \ + while (0) +#endif +#endif + +/* This is how we tell the assembler that a symbol is a weak alias to + another symbol that doesn't require the other symbol to be defined. + Uses of the former will turn into weak uses of the latter, i.e., + uses that, in case the latter is undefined, will not cause errors, + and will add it to the symbol table as weak undefined. However, if + the latter is referenced directly, a strong reference prevails. */ +#ifndef ASM_OUTPUT_WEAKREF +#if defined HAVE_GAS_WEAKREF +#define ASM_OUTPUT_WEAKREF(FILE, DECL, NAME, VALUE) \ + do \ + { \ + fprintf ((FILE), "\t.weakref\t"); \ + assemble_name ((FILE), (NAME)); \ + fprintf ((FILE), ","); \ + assemble_name ((FILE), (VALUE)); \ + fprintf ((FILE), "\n"); \ + } \ + while (0) +#endif +#endif + +/* How to emit a .type directive. */ +#ifndef ASM_OUTPUT_TYPE_DIRECTIVE +#if defined TYPE_ASM_OP && defined TYPE_OPERAND_FMT +#define ASM_OUTPUT_TYPE_DIRECTIVE(STREAM, NAME, TYPE) \ + do \ + { \ + fputs (TYPE_ASM_OP, STREAM); \ + assemble_name (STREAM, NAME); \ + fputs (", ", STREAM); \ + fprintf (STREAM, TYPE_OPERAND_FMT, TYPE); \ + putc ('\n', STREAM); \ + } \ + while (0) +#endif +#endif + +/* How to emit a .size directive. */ +#ifndef ASM_OUTPUT_SIZE_DIRECTIVE +#ifdef SIZE_ASM_OP +#define ASM_OUTPUT_SIZE_DIRECTIVE(STREAM, NAME, SIZE) \ + do \ + { \ + HOST_WIDE_INT size_ = (SIZE); \ + fputs (SIZE_ASM_OP, STREAM); \ + assemble_name (STREAM, NAME); \ + fprintf (STREAM, ", " HOST_WIDE_INT_PRINT_DEC "\n", size_); \ + } \ + while (0) + +#define ASM_OUTPUT_MEASURED_SIZE(STREAM, NAME) \ + do \ + { \ + fputs (SIZE_ASM_OP, STREAM); \ + assemble_name (STREAM, NAME); \ + fputs (", .-", STREAM); \ + assemble_name (STREAM, NAME); \ + putc ('\n', STREAM); \ + } \ + while (0) + +#endif +#endif + +/* This determines whether or not we support weak symbols. SUPPORTS_WEAK + must be a preprocessor constant. */ +#ifndef SUPPORTS_WEAK +#if defined (ASM_WEAKEN_LABEL) || defined (ASM_WEAKEN_DECL) +#define SUPPORTS_WEAK 1 +#else +#define SUPPORTS_WEAK 0 +#endif +#endif + +/* This determines whether or not we support weak symbols during target + code generation. TARGET_SUPPORTS_WEAK can be any valid C expression. */ +#ifndef TARGET_SUPPORTS_WEAK +#define TARGET_SUPPORTS_WEAK (SUPPORTS_WEAK) +#endif + +/* This determines whether or not we support the discriminator + attribute in the .loc directive. */ +#ifndef SUPPORTS_DISCRIMINATOR +#ifdef HAVE_GAS_DISCRIMINATOR +#define SUPPORTS_DISCRIMINATOR 1 +#else +#define SUPPORTS_DISCRIMINATOR 0 +#endif +#endif + +/* This determines whether or not we support link-once semantics. */ +#ifndef SUPPORTS_ONE_ONLY +#ifdef MAKE_DECL_ONE_ONLY +#define SUPPORTS_ONE_ONLY 1 +#else +#define SUPPORTS_ONE_ONLY 0 +#endif +#endif + +/* This determines whether weak symbols must be left out of a static + archive's table of contents. Defining this macro to be nonzero has + the consequence that certain symbols will not be made weak that + otherwise would be. The C++ ABI requires this macro to be zero; + see the documentation. */ +#ifndef TARGET_WEAK_NOT_IN_ARCHIVE_TOC +#define TARGET_WEAK_NOT_IN_ARCHIVE_TOC 0 +#endif + +/* This determines whether or not we need linkonce unwind information. */ +#ifndef TARGET_USES_WEAK_UNWIND_INFO +#define TARGET_USES_WEAK_UNWIND_INFO 0 +#endif + +/* By default, there is no prefix on user-defined symbols. */ +#ifndef USER_LABEL_PREFIX +#define USER_LABEL_PREFIX "" +#endif + +/* If the target supports weak symbols, define TARGET_ATTRIBUTE_WEAK to + provide a weak attribute. Else define it to nothing. + + This would normally belong in ansidecl.h, but SUPPORTS_WEAK is + not available at that time. + + Note, this is only for use by target files which we know are to be + compiled by GCC. */ +#ifndef TARGET_ATTRIBUTE_WEAK +# if SUPPORTS_WEAK +# define TARGET_ATTRIBUTE_WEAK __attribute__ ((weak)) +# else +# define TARGET_ATTRIBUTE_WEAK +# endif +#endif + +/* By default we can assume that all global symbols are in one namespace, + across all shared libraries. */ +#ifndef MULTIPLE_SYMBOL_SPACES +# define MULTIPLE_SYMBOL_SPACES 0 +#endif + +/* If the target supports init_priority C++ attribute, give + SUPPORTS_INIT_PRIORITY a nonzero value. */ +#ifndef SUPPORTS_INIT_PRIORITY +#define SUPPORTS_INIT_PRIORITY 1 +#endif /* SUPPORTS_INIT_PRIORITY */ + +/* If we have a definition of INCOMING_RETURN_ADDR_RTX, assume that + the rest of the DWARF 2 frame unwind support is also provided. */ +#if !defined (DWARF2_UNWIND_INFO) && defined (INCOMING_RETURN_ADDR_RTX) +#define DWARF2_UNWIND_INFO 1 +#endif + +/* If we have named sections, and we're using crtstuff to run ctors, + use them for registering eh frame information. */ +#if defined (TARGET_ASM_NAMED_SECTION) && DWARF2_UNWIND_INFO \ + && !defined (EH_FRAME_IN_DATA_SECTION) +#ifndef EH_FRAME_SECTION_NAME +#define EH_FRAME_SECTION_NAME ".eh_frame" +#endif +#endif + +/* On many systems, different EH table encodings are used under + difference circumstances. Some will require runtime relocations; + some will not. For those that do not require runtime relocations, + we would like to make the table read-only. However, since the + read-only tables may need to be combined with read-write tables + that do require runtime relocation, it is not safe to make the + tables read-only unless the linker will merge read-only and + read-write sections into a single read-write section. If your + linker does not have this ability, but your system is such that no + encoding used with non-PIC code will ever require a runtime + relocation, then you can define EH_TABLES_CAN_BE_READ_ONLY to 1 in + your target configuration file. */ +#ifndef EH_TABLES_CAN_BE_READ_ONLY +#ifdef HAVE_LD_RO_RW_SECTION_MIXING +#define EH_TABLES_CAN_BE_READ_ONLY 1 +#else +#define EH_TABLES_CAN_BE_READ_ONLY 0 +#endif +#endif + +/* If we have named section and we support weak symbols, then use the + .jcr section for recording java classes which need to be registered + at program start-up time. */ +#if defined (TARGET_ASM_NAMED_SECTION) && SUPPORTS_WEAK +#ifndef JCR_SECTION_NAME +#define JCR_SECTION_NAME ".jcr" +#endif +#endif + +/* This decision to use a .jcr section can be overridden by defining + USE_JCR_SECTION to 0 in target file. This is necessary if target + can define JCR_SECTION_NAME but does not have crtstuff or + linker support for .jcr section. */ +#ifndef TARGET_USE_JCR_SECTION +#ifdef JCR_SECTION_NAME +#define TARGET_USE_JCR_SECTION 1 +#else +#define TARGET_USE_JCR_SECTION 0 +#endif +#endif + +/* Number of hardware registers that go into the DWARF-2 unwind info. + If not defined, equals FIRST_PSEUDO_REGISTER */ + +#ifndef DWARF_FRAME_REGISTERS +#define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER +#endif + +/* Offsets recorded in opcodes are a multiple of this alignment factor. */ +#ifndef DWARF_CIE_DATA_ALIGNMENT +#ifdef STACK_GROWS_DOWNWARD +#define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD)) +#else +#define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD) +#endif +#endif + +/* The DWARF 2 CFA column which tracks the return address. Normally this + is the column for PC, or the first column after all of the hard + registers. */ +#ifndef DWARF_FRAME_RETURN_COLUMN +#ifdef PC_REGNUM +#define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (PC_REGNUM) +#else +#define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGISTERS +#endif +#endif + +/* How to renumber registers for dbx and gdb. If not defined, assume + no renumbering is necessary. */ + +#ifndef DBX_REGISTER_NUMBER +#define DBX_REGISTER_NUMBER(REGNO) (REGNO) +#endif + +/* The mapping from gcc register number to DWARF 2 CFA column number. + By default, we just provide columns for all registers. */ +#ifndef DWARF_FRAME_REGNUM +#define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG) +#endif + +/* The mapping from dwarf CFA reg number to internal dwarf reg numbers. */ +#ifndef DWARF_REG_TO_UNWIND_COLUMN +#define DWARF_REG_TO_UNWIND_COLUMN(REGNO) (REGNO) +#endif + +/* Map register numbers held in the call frame info that gcc has + collected using DWARF_FRAME_REGNUM to those that should be output in + .debug_frame and .eh_frame. */ +#ifndef DWARF2_FRAME_REG_OUT +#define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO) +#endif + +/* The size of addresses as they appear in the Dwarf 2 data. + Some architectures use word addresses to refer to code locations, + but Dwarf 2 info always uses byte addresses. On such machines, + Dwarf 2 addresses need to be larger than the architecture's + pointers. */ +#ifndef DWARF2_ADDR_SIZE +#define DWARF2_ADDR_SIZE ((POINTER_SIZE + BITS_PER_UNIT - 1) / BITS_PER_UNIT) +#endif + +/* The size in bytes of a DWARF field indicating an offset or length + relative to a debug info section, specified to be 4 bytes in the + DWARF-2 specification. The SGI/MIPS ABI defines it to be the same + as PTR_SIZE. */ +#ifndef DWARF_OFFSET_SIZE +#define DWARF_OFFSET_SIZE 4 +#endif + +/* The size in bytes of a DWARF 4 type signature. */ +#ifndef DWARF_TYPE_SIGNATURE_SIZE +#define DWARF_TYPE_SIGNATURE_SIZE 8 +#endif + +/* Default sizes for base C types. If the sizes are different for + your target, you should override these values by defining the + appropriate symbols in your tm.h file. */ + +#if BITS_PER_UNIT == 8 +#define LOG2_BITS_PER_UNIT 3 +#elif BITS_PER_UNIT == 16 +#define LOG2_BITS_PER_UNIT 4 +#else +#error Unknown BITS_PER_UNIT +#endif + +#ifndef BITS_PER_WORD +#define BITS_PER_WORD (BITS_PER_UNIT * UNITS_PER_WORD) +#endif + +#ifndef CHAR_TYPE_SIZE +#define CHAR_TYPE_SIZE BITS_PER_UNIT +#endif + +#ifndef BOOL_TYPE_SIZE +/* `bool' has size and alignment `1', on almost all platforms. */ +#define BOOL_TYPE_SIZE CHAR_TYPE_SIZE +#endif + +#ifndef SHORT_TYPE_SIZE +#define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2)) +#endif + +#ifndef INT_TYPE_SIZE +#define INT_TYPE_SIZE BITS_PER_WORD +#endif + +#ifndef LONG_TYPE_SIZE +#define LONG_TYPE_SIZE BITS_PER_WORD +#endif + +#ifndef LONG_LONG_TYPE_SIZE +#define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2) +#endif + +#ifndef WCHAR_TYPE_SIZE +#define WCHAR_TYPE_SIZE INT_TYPE_SIZE +#endif + +#ifndef FLOAT_TYPE_SIZE +#define FLOAT_TYPE_SIZE BITS_PER_WORD +#endif + +#ifndef DOUBLE_TYPE_SIZE +#define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2) +#endif + +#ifndef LONG_DOUBLE_TYPE_SIZE +#define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2) +#endif + +#ifndef DECIMAL32_TYPE_SIZE +#define DECIMAL32_TYPE_SIZE 32 +#endif + +#ifndef DECIMAL64_TYPE_SIZE +#define DECIMAL64_TYPE_SIZE 64 +#endif + +#ifndef DECIMAL128_TYPE_SIZE +#define DECIMAL128_TYPE_SIZE 128 +#endif + +#ifndef SHORT_FRACT_TYPE_SIZE +#define SHORT_FRACT_TYPE_SIZE BITS_PER_UNIT +#endif + +#ifndef FRACT_TYPE_SIZE +#define FRACT_TYPE_SIZE (BITS_PER_UNIT * 2) +#endif + +#ifndef LONG_FRACT_TYPE_SIZE +#define LONG_FRACT_TYPE_SIZE (BITS_PER_UNIT * 4) +#endif + +#ifndef LONG_LONG_FRACT_TYPE_SIZE +#define LONG_LONG_FRACT_TYPE_SIZE (BITS_PER_UNIT * 8) +#endif + +#ifndef SHORT_ACCUM_TYPE_SIZE +#define SHORT_ACCUM_TYPE_SIZE (SHORT_FRACT_TYPE_SIZE * 2) +#endif + +#ifndef ACCUM_TYPE_SIZE +#define ACCUM_TYPE_SIZE (FRACT_TYPE_SIZE * 2) +#endif + +#ifndef LONG_ACCUM_TYPE_SIZE +#define LONG_ACCUM_TYPE_SIZE (LONG_FRACT_TYPE_SIZE * 2) +#endif + +#ifndef LONG_LONG_ACCUM_TYPE_SIZE +#define LONG_LONG_ACCUM_TYPE_SIZE (LONG_LONG_FRACT_TYPE_SIZE * 2) +#endif + +/* We let tm.h override the types used here, to handle trivial differences + such as the choice of unsigned int or long unsigned int for size_t. + When machines start needing nontrivial differences in the size type, + it would be best to do something here to figure out automatically + from other information what type to use. */ + +#ifndef SIZE_TYPE +#define SIZE_TYPE "long unsigned int" +#endif + +#ifndef SIZETYPE +#define SIZETYPE SIZE_TYPE +#endif + +#ifndef PID_TYPE +#define PID_TYPE "int" +#endif + +/* If GCC knows the exact uint_least16_t and uint_least32_t types from + , use them for char16_t and char32_t. Otherwise, use + these guesses; getting the wrong type of a given width will not + affect C++ name mangling because in C++ these are distinct types + not typedefs. */ + +#ifdef UINT_LEAST16_TYPE +#define CHAR16_TYPE UINT_LEAST16_TYPE +#else +#define CHAR16_TYPE "short unsigned int" +#endif + +#ifdef UINT_LEAST32_TYPE +#define CHAR32_TYPE UINT_LEAST32_TYPE +#else +#define CHAR32_TYPE "unsigned int" +#endif + +#ifndef WCHAR_TYPE +#define WCHAR_TYPE "int" +#endif + +/* WCHAR_TYPE gets overridden by -fshort-wchar. */ +#define MODIFIED_WCHAR_TYPE \ + (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE) + +#ifndef PTRDIFF_TYPE +#define PTRDIFF_TYPE "long int" +#endif + +#ifndef WINT_TYPE +#define WINT_TYPE "unsigned int" +#endif + +#ifndef INTMAX_TYPE +#define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \ + ? "int" \ + : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \ + ? "long int" \ + : "long long int")) +#endif + +#ifndef UINTMAX_TYPE +#define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \ + ? "unsigned int" \ + : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \ + ? "long unsigned int" \ + : "long long unsigned int")) +#endif + + +/* There are no default definitions of these types. */ + +#ifndef SIG_ATOMIC_TYPE +#define SIG_ATOMIC_TYPE ((const char *) NULL) +#endif + +#ifndef INT8_TYPE +#define INT8_TYPE ((const char *) NULL) +#endif + +#ifndef INT16_TYPE +#define INT16_TYPE ((const char *) NULL) +#endif + +#ifndef INT32_TYPE +#define INT32_TYPE ((const char *) NULL) +#endif + +#ifndef INT64_TYPE +#define INT64_TYPE ((const char *) NULL) +#endif + +#ifndef UINT8_TYPE +#define UINT8_TYPE ((const char *) NULL) +#endif + +#ifndef UINT16_TYPE +#define UINT16_TYPE ((const char *) NULL) +#endif + +#ifndef UINT32_TYPE +#define UINT32_TYPE ((const char *) NULL) +#endif + +#ifndef UINT64_TYPE +#define UINT64_TYPE ((const char *) NULL) +#endif + +#ifndef INT_LEAST8_TYPE +#define INT_LEAST8_TYPE ((const char *) NULL) +#endif + +#ifndef INT_LEAST16_TYPE +#define INT_LEAST16_TYPE ((const char *) NULL) +#endif + +#ifndef INT_LEAST32_TYPE +#define INT_LEAST32_TYPE ((const char *) NULL) +#endif + +#ifndef INT_LEAST64_TYPE +#define INT_LEAST64_TYPE ((const char *) NULL) +#endif + +#ifndef UINT_LEAST8_TYPE +#define UINT_LEAST8_TYPE ((const char *) NULL) +#endif + +#ifndef UINT_LEAST16_TYPE +#define UINT_LEAST16_TYPE ((const char *) NULL) +#endif + +#ifndef UINT_LEAST32_TYPE +#define UINT_LEAST32_TYPE ((const char *) NULL) +#endif + +#ifndef UINT_LEAST64_TYPE +#define UINT_LEAST64_TYPE ((const char *) NULL) +#endif + +#ifndef INT_FAST8_TYPE +#define INT_FAST8_TYPE ((const char *) NULL) +#endif + +#ifndef INT_FAST16_TYPE +#define INT_FAST16_TYPE ((const char *) NULL) +#endif + +#ifndef INT_FAST32_TYPE +#define INT_FAST32_TYPE ((const char *) NULL) +#endif + +#ifndef INT_FAST64_TYPE +#define INT_FAST64_TYPE ((const char *) NULL) +#endif + +#ifndef UINT_FAST8_TYPE +#define UINT_FAST8_TYPE ((const char *) NULL) +#endif + +#ifndef UINT_FAST16_TYPE +#define UINT_FAST16_TYPE ((const char *) NULL) +#endif + +#ifndef UINT_FAST32_TYPE +#define UINT_FAST32_TYPE ((const char *) NULL) +#endif + +#ifndef UINT_FAST64_TYPE +#define UINT_FAST64_TYPE ((const char *) NULL) +#endif + +#ifndef INTPTR_TYPE +#define INTPTR_TYPE ((const char *) NULL) +#endif + +#ifndef UINTPTR_TYPE +#define UINTPTR_TYPE ((const char *) NULL) +#endif + +/* Width in bits of a pointer. Mind the value of the macro `Pmode'. */ +#ifndef POINTER_SIZE +#define POINTER_SIZE BITS_PER_WORD +#endif +#ifndef POINTER_SIZE_UNITS +#define POINTER_SIZE_UNITS ((POINTER_SIZE + BITS_PER_UNIT - 1) / BITS_PER_UNIT) +#endif + + +#ifndef PIC_OFFSET_TABLE_REGNUM +#define PIC_OFFSET_TABLE_REGNUM INVALID_REGNUM +#endif + +#ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED +#define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED 0 +#endif + +#ifndef TARGET_DLLIMPORT_DECL_ATTRIBUTES +#define TARGET_DLLIMPORT_DECL_ATTRIBUTES 0 +#endif + +#ifndef TARGET_DECLSPEC +#if TARGET_DLLIMPORT_DECL_ATTRIBUTES +/* If the target supports the "dllimport" attribute, users are + probably used to the "__declspec" syntax. */ +#define TARGET_DECLSPEC 1 +#else +#define TARGET_DECLSPEC 0 +#endif +#endif + +/* By default, the preprocessor should be invoked the same way in C++ + as in C. */ +#ifndef CPLUSPLUS_CPP_SPEC +#ifdef CPP_SPEC +#define CPLUSPLUS_CPP_SPEC CPP_SPEC +#endif +#endif + +#ifndef ACCUMULATE_OUTGOING_ARGS +#define ACCUMULATE_OUTGOING_ARGS 0 +#endif + +/* By default, use the GNU runtime for Objective C. */ +#ifndef NEXT_OBJC_RUNTIME +#define NEXT_OBJC_RUNTIME 0 +#endif + +/* Supply a default definition for PUSH_ARGS. */ +#ifndef PUSH_ARGS +#ifdef PUSH_ROUNDING +#define PUSH_ARGS !ACCUMULATE_OUTGOING_ARGS +#else +#define PUSH_ARGS 0 +#endif +#endif + +/* Decide whether a function's arguments should be processed + from first to last or from last to first. + + They should if the stack and args grow in opposite directions, but + only if we have push insns. */ + +#ifdef PUSH_ROUNDING + +#ifndef PUSH_ARGS_REVERSED +#if defined (STACK_GROWS_DOWNWARD) != defined (ARGS_GROW_DOWNWARD) +#define PUSH_ARGS_REVERSED PUSH_ARGS +#endif +#endif + +#endif + +#ifndef PUSH_ARGS_REVERSED +#define PUSH_ARGS_REVERSED 0 +#endif + +/* Default value for the alignment (in bits) a C conformant malloc has to + provide. This default is intended to be safe and always correct. */ +#ifndef MALLOC_ABI_ALIGNMENT +#define MALLOC_ABI_ALIGNMENT BITS_PER_WORD +#endif + +/* If PREFERRED_STACK_BOUNDARY is not defined, set it to STACK_BOUNDARY. + STACK_BOUNDARY is required. */ +#ifndef PREFERRED_STACK_BOUNDARY +#define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY +#endif + +/* Set INCOMING_STACK_BOUNDARY to PREFERRED_STACK_BOUNDARY if it is not + defined. */ +#ifndef INCOMING_STACK_BOUNDARY +#define INCOMING_STACK_BOUNDARY PREFERRED_STACK_BOUNDARY +#endif + +#ifndef TARGET_DEFAULT_PACK_STRUCT +#define TARGET_DEFAULT_PACK_STRUCT 0 +#endif + +/* By default, the vtable entries are void pointers, the so the alignment + is the same as pointer alignment. The value of this macro specifies + the alignment of the vtable entry in bits. It should be defined only + when special alignment is necessary. */ +#ifndef TARGET_VTABLE_ENTRY_ALIGN +#define TARGET_VTABLE_ENTRY_ALIGN POINTER_SIZE +#endif + +/* There are a few non-descriptor entries in the vtable at offsets below + zero. If these entries must be padded (say, to preserve the alignment + specified by TARGET_VTABLE_ENTRY_ALIGN), set this to the number of + words in each data entry. */ +#ifndef TARGET_VTABLE_DATA_ENTRY_DISTANCE +#define TARGET_VTABLE_DATA_ENTRY_DISTANCE 1 +#endif + +/* Decide whether it is safe to use a local alias for a virtual function + when constructing thunks. */ +#ifndef TARGET_USE_LOCAL_THUNK_ALIAS_P +#ifdef ASM_OUTPUT_DEF +#define TARGET_USE_LOCAL_THUNK_ALIAS_P(DECL) 1 +#else +#define TARGET_USE_LOCAL_THUNK_ALIAS_P(DECL) 0 +#endif +#endif + +/* Select a format to encode pointers in exception handling data. We + prefer those that result in fewer dynamic relocations. Assume no + special support here and encode direct references. */ +#ifndef ASM_PREFERRED_EH_DATA_FORMAT +#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) DW_EH_PE_absptr +#endif + +/* By default, the C++ compiler will use the lowest bit of the pointer + to function to indicate a pointer-to-member-function points to a + virtual member function. However, if FUNCTION_BOUNDARY indicates + function addresses aren't always even, the lowest bit of the delta + field will be used. */ +#ifndef TARGET_PTRMEMFUNC_VBIT_LOCATION +#define TARGET_PTRMEMFUNC_VBIT_LOCATION \ + (FUNCTION_BOUNDARY >= 2 * BITS_PER_UNIT \ + ? ptrmemfunc_vbit_in_pfn : ptrmemfunc_vbit_in_delta) +#endif + +#ifndef DEFAULT_GDB_EXTENSIONS +#define DEFAULT_GDB_EXTENSIONS 1 +#endif + +/* If more than one debugging type is supported, you must define + PREFERRED_DEBUGGING_TYPE to choose the default. */ + +#if 1 < (defined (DBX_DEBUGGING_INFO) + defined (SDB_DEBUGGING_INFO) \ + + defined (DWARF2_DEBUGGING_INFO) + defined (XCOFF_DEBUGGING_INFO) \ + + defined (VMS_DEBUGGING_INFO)) +#ifndef PREFERRED_DEBUGGING_TYPE +#error You must define PREFERRED_DEBUGGING_TYPE +#endif /* no PREFERRED_DEBUGGING_TYPE */ + +/* If only one debugging format is supported, define PREFERRED_DEBUGGING_TYPE + here so other code needn't care. */ +#elif defined DBX_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG + +#elif defined SDB_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE SDB_DEBUG + +#elif defined DWARF2_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG + +#elif defined VMS_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE VMS_AND_DWARF2_DEBUG + +#elif defined XCOFF_DEBUGGING_INFO +#define PREFERRED_DEBUGGING_TYPE XCOFF_DEBUG + +#else +/* No debugging format is supported by this target. */ +#define PREFERRED_DEBUGGING_TYPE NO_DEBUG +#endif + +#ifndef FLOAT_LIB_COMPARE_RETURNS_BOOL +#define FLOAT_LIB_COMPARE_RETURNS_BOOL(MODE, COMPARISON) false +#endif + +/* True if the targets integer-comparison functions return { 0, 1, 2 + } to indicate { <, ==, > }. False if { -1, 0, 1 } is used + instead. The libgcc routines are biased. */ +#ifndef TARGET_LIB_INT_CMP_BIASED +#define TARGET_LIB_INT_CMP_BIASED (true) +#endif + +/* If FLOAT_WORDS_BIG_ENDIAN is not defined in the header files, + then the word-endianness is the same as for integers. */ +#ifndef FLOAT_WORDS_BIG_ENDIAN +#define FLOAT_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN +#endif + +#ifndef REG_WORDS_BIG_ENDIAN +#define REG_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN +#endif + +#ifdef TARGET_FLT_EVAL_METHOD +#define TARGET_FLT_EVAL_METHOD_NON_DEFAULT 1 +#else +#define TARGET_FLT_EVAL_METHOD 0 +#define TARGET_FLT_EVAL_METHOD_NON_DEFAULT 0 +#endif + +#ifndef TARGET_DEC_EVAL_METHOD +#define TARGET_DEC_EVAL_METHOD 2 +#endif + +#ifndef HAS_LONG_COND_BRANCH +#define HAS_LONG_COND_BRANCH 0 +#endif + +#ifndef HAS_LONG_UNCOND_BRANCH +#define HAS_LONG_UNCOND_BRANCH 0 +#endif + +/* Determine whether __cxa_atexit, rather than atexit, is used to + register C++ destructors for local statics and global objects. */ +#ifndef DEFAULT_USE_CXA_ATEXIT +#define DEFAULT_USE_CXA_ATEXIT 0 +#endif + +#if GCC_VERSION >= 3000 && defined IN_GCC +/* These old constraint macros shouldn't appear anywhere in a + configuration using MD constraint definitions. */ +#endif + +/* Determin whether the target runtime library is Bionic */ +#ifndef TARGET_HAS_BIONIC +#define TARGET_HAS_BIONIC 0 +#endif + +/* Indicate that CLZ and CTZ are undefined at zero. */ +#ifndef CLZ_DEFINED_VALUE_AT_ZERO +#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) 0 +#endif +#ifndef CTZ_DEFINED_VALUE_AT_ZERO +#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) 0 +#endif + +/* Provide a default value for STORE_FLAG_VALUE. */ +#ifndef STORE_FLAG_VALUE +#define STORE_FLAG_VALUE 1 +#endif + +/* This macro is used to determine what the largest unit size that + move_by_pieces can use is. */ + +/* MOVE_MAX_PIECES is the number of bytes at a time which we can + move efficiently, as opposed to MOVE_MAX which is the maximum + number of bytes we can move with a single instruction. */ + +#ifndef MOVE_MAX_PIECES +#define MOVE_MAX_PIECES MOVE_MAX +#endif + +/* STORE_MAX_PIECES is the number of bytes at a time that we can + store efficiently. Due to internal GCC limitations, this is + MOVE_MAX_PIECES limited by the number of bytes GCC can represent + for an immediate constant. */ + +#ifndef STORE_MAX_PIECES +#define STORE_MAX_PIECES MIN (MOVE_MAX_PIECES, 2 * sizeof (HOST_WIDE_INT)) +#endif + +#ifndef MAX_MOVE_MAX +#define MAX_MOVE_MAX MOVE_MAX +#endif + +#ifndef MIN_UNITS_PER_WORD +#define MIN_UNITS_PER_WORD UNITS_PER_WORD +#endif + +#ifndef MAX_BITS_PER_WORD +#define MAX_BITS_PER_WORD BITS_PER_WORD +#endif + +#ifndef STACK_POINTER_OFFSET +#define STACK_POINTER_OFFSET 0 +#endif + +#ifndef LOCAL_REGNO +#define LOCAL_REGNO(REGNO) 0 +#endif + +#ifndef HONOR_REG_ALLOC_ORDER +#define HONOR_REG_ALLOC_ORDER 0 +#endif + +/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function, + the stack pointer does not matter. The value is tested only in + functions that have frame pointers. */ +#ifndef EXIT_IGNORE_STACK +#define EXIT_IGNORE_STACK 0 +#endif + +/* Assume that case vectors are not pc-relative. */ +#ifndef CASE_VECTOR_PC_RELATIVE +#define CASE_VECTOR_PC_RELATIVE 0 +#endif + +/* Assume that trampolines need function alignment. */ +#ifndef TRAMPOLINE_ALIGNMENT +#define TRAMPOLINE_ALIGNMENT FUNCTION_BOUNDARY +#endif + +/* Register mappings for target machines without register windows. */ +#ifndef INCOMING_REGNO +#define INCOMING_REGNO(N) (N) +#endif + +#ifndef OUTGOING_REGNO +#define OUTGOING_REGNO(N) (N) +#endif + +#ifndef SHIFT_COUNT_TRUNCATED +#define SHIFT_COUNT_TRUNCATED 0 +#endif + +#ifndef LEGITIMATE_PIC_OPERAND_P +#define LEGITIMATE_PIC_OPERAND_P(X) 1 +#endif + +#ifndef TARGET_MEM_CONSTRAINT +#define TARGET_MEM_CONSTRAINT 'm' +#endif + +#ifndef REVERSIBLE_CC_MODE +#define REVERSIBLE_CC_MODE(MODE) 0 +#endif + +/* Biggest alignment supported by the object file format of this machine. */ +#ifndef MAX_OFILE_ALIGNMENT +#define MAX_OFILE_ALIGNMENT BIGGEST_ALIGNMENT +#endif + +#ifndef FRAME_GROWS_DOWNWARD +#define FRAME_GROWS_DOWNWARD 0 +#endif + +#ifndef RETURN_ADDR_IN_PREVIOUS_FRAME +#define RETURN_ADDR_IN_PREVIOUS_FRAME 0 +#endif + +/* On most machines, the CFA coincides with the first incoming parm. */ +#ifndef ARG_POINTER_CFA_OFFSET +#define ARG_POINTER_CFA_OFFSET(FNDECL) \ + (FIRST_PARM_OFFSET (FNDECL) + crtl->args.pretend_args_size) +#endif + +/* On most machines, we use the CFA as DW_AT_frame_base. */ +#ifndef CFA_FRAME_BASE_OFFSET +#define CFA_FRAME_BASE_OFFSET(FNDECL) 0 +#endif + +/* The offset from the incoming value of %sp to the top of the stack frame + for the current function. */ +#ifndef INCOMING_FRAME_SP_OFFSET +#define INCOMING_FRAME_SP_OFFSET 0 +#endif + +#ifndef HARD_REGNO_NREGS_HAS_PADDING +#define HARD_REGNO_NREGS_HAS_PADDING(REGNO, MODE) 0 +#define HARD_REGNO_NREGS_WITH_PADDING(REGNO, MODE) -1 +#endif + +#ifndef OUTGOING_REG_PARM_STACK_SPACE +#define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 0 +#endif + +/* MAX_STACK_ALIGNMENT is the maximum stack alignment guaranteed by + the backend. MAX_SUPPORTED_STACK_ALIGNMENT is the maximum best + effort stack alignment supported by the backend. If the backend + supports stack alignment, MAX_SUPPORTED_STACK_ALIGNMENT and + MAX_STACK_ALIGNMENT are the same. Otherwise, the incoming stack + boundary will limit the maximum guaranteed stack alignment. */ +#ifdef MAX_STACK_ALIGNMENT +#define MAX_SUPPORTED_STACK_ALIGNMENT MAX_STACK_ALIGNMENT +#else +#define MAX_STACK_ALIGNMENT STACK_BOUNDARY +#define MAX_SUPPORTED_STACK_ALIGNMENT PREFERRED_STACK_BOUNDARY +#endif + +#define SUPPORTS_STACK_ALIGNMENT (MAX_STACK_ALIGNMENT > STACK_BOUNDARY) + +#ifndef LOCAL_ALIGNMENT +#define LOCAL_ALIGNMENT(TYPE, ALIGNMENT) ALIGNMENT +#endif + +#ifndef STACK_SLOT_ALIGNMENT +#define STACK_SLOT_ALIGNMENT(TYPE,MODE,ALIGN) \ + ((TYPE) ? LOCAL_ALIGNMENT ((TYPE), (ALIGN)) : (ALIGN)) +#endif + +#ifndef LOCAL_DECL_ALIGNMENT +#define LOCAL_DECL_ALIGNMENT(DECL) \ + LOCAL_ALIGNMENT (TREE_TYPE (DECL), DECL_ALIGN (DECL)) +#endif + +#ifndef MINIMUM_ALIGNMENT +#define MINIMUM_ALIGNMENT(EXP,MODE,ALIGN) (ALIGN) +#endif + +/* Alignment value for attribute ((aligned)). */ +#ifndef ATTRIBUTE_ALIGNED_VALUE +#define ATTRIBUTE_ALIGNED_VALUE BIGGEST_ALIGNMENT +#endif + +#ifndef SLOW_UNALIGNED_ACCESS +#define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) STRICT_ALIGNMENT +#endif + +/* For most ports anything that evaluates to a constant symbolic + or integer value is acceptable as a constant address. */ +#ifndef CONSTANT_ADDRESS_P +#define CONSTANT_ADDRESS_P(X) (CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE) +#endif + +#ifndef MAX_FIXED_MODE_SIZE +#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (DImode) +#endif + +/* Nonzero if structures and unions should be returned in memory. + + This should only be defined if compatibility with another compiler or + with an ABI is needed, because it results in slower code. */ + +#ifndef DEFAULT_PCC_STRUCT_RETURN +#define DEFAULT_PCC_STRUCT_RETURN 1 +#endif + +#ifdef GCC_INSN_FLAGS_H +/* Dependent default target macro definitions + + This section of defaults.h defines target macros that depend on generated + headers. This is a bit awkward: We want to put all default definitions + for target macros in defaults.h, but some of the defaults depend on the + HAVE_* flags defines of insn-flags.h. But insn-flags.h is not always + included by files that do include defaults.h. + + Fortunately, the default macro definitions that depend on the HAVE_* + macros are also the ones that will only be used inside GCC itself, i.e. + not in the gen* programs or in target objects like libgcc. + + Obviously, it would be best to keep this section of defaults.h as small + as possible, by converting the macros defined below to target hooks or + functions. +*/ + +/* The default branch cost is 1. */ +#ifndef BRANCH_COST +#define BRANCH_COST(speed_p, predictable_p) 1 +#endif + +/* If a memory-to-memory move would take MOVE_RATIO or more simple + move-instruction sequences, we will do a movmem or libcall instead. */ + +#ifndef MOVE_RATIO +#if defined (HAVE_movmemqi) || defined (HAVE_movmemhi) || defined (HAVE_movmemsi) || defined (HAVE_movmemdi) || defined (HAVE_movmemti) +#define MOVE_RATIO(speed) 2 +#else +/* If we are optimizing for space (-Os), cut down the default move ratio. */ +#define MOVE_RATIO(speed) ((speed) ? 15 : 3) +#endif +#endif + +/* If a clear memory operation would take CLEAR_RATIO or more simple + move-instruction sequences, we will do a setmem or libcall instead. */ + +#ifndef CLEAR_RATIO +#if defined (HAVE_setmemqi) || defined (HAVE_setmemhi) || defined (HAVE_setmemsi) || defined (HAVE_setmemdi) || defined (HAVE_setmemti) +#define CLEAR_RATIO(speed) 2 +#else +/* If we are optimizing for space, cut down the default clear ratio. */ +#define CLEAR_RATIO(speed) ((speed) ? 15 :3) +#endif +#endif + +/* If a memory set (to value other than zero) operation would take + SET_RATIO or more simple move-instruction sequences, we will do a movmem + or libcall instead. */ +#ifndef SET_RATIO +#define SET_RATIO(speed) MOVE_RATIO (speed) +#endif + +/* Supply a default definition for FUNCTION_ARG_PADDING: + usually pad upward, but pad short args downward on + big-endian machines. */ + +#define DEFAULT_FUNCTION_ARG_PADDING(MODE, TYPE) \ + (! BYTES_BIG_ENDIAN \ + ? upward \ + : (((MODE) == BLKmode \ + ? ((TYPE) && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST \ + && int_size_in_bytes (TYPE) < (PARM_BOUNDARY / BITS_PER_UNIT)) \ + : GET_MODE_BITSIZE (MODE) < PARM_BOUNDARY) \ + ? downward : upward)) + +#ifndef FUNCTION_ARG_PADDING +#define FUNCTION_ARG_PADDING(MODE, TYPE) \ + DEFAULT_FUNCTION_ARG_PADDING ((MODE), (TYPE)) +#endif + +/* Supply a default definition of STACK_SAVEAREA_MODE for emit_stack_save. + Normally move_insn, so Pmode stack pointer. */ + +#ifndef STACK_SAVEAREA_MODE +#define STACK_SAVEAREA_MODE(LEVEL) Pmode +#endif + +/* Supply a default definition of STACK_SIZE_MODE for + allocate_dynamic_stack_space. Normally PLUS/MINUS, so word_mode. */ + +#ifndef STACK_SIZE_MODE +#define STACK_SIZE_MODE word_mode +#endif + +/* Provide default values for the macros controlling stack checking. */ + +/* The default is neither full builtin stack checking... */ +#ifndef STACK_CHECK_BUILTIN +#define STACK_CHECK_BUILTIN 0 +#endif + +/* ...nor static builtin stack checking. */ +#ifndef STACK_CHECK_STATIC_BUILTIN +#define STACK_CHECK_STATIC_BUILTIN 0 +#endif + +/* The default interval is one page (4096 bytes). */ +#ifndef STACK_CHECK_PROBE_INTERVAL_EXP +#define STACK_CHECK_PROBE_INTERVAL_EXP 12 +#endif + +/* The default is not to move the stack pointer. */ +#ifndef STACK_CHECK_MOVING_SP +#define STACK_CHECK_MOVING_SP 0 +#endif + +/* This is a kludge to try to capture the discrepancy between the old + mechanism (generic stack checking) and the new mechanism (static + builtin stack checking). STACK_CHECK_PROTECT needs to be bumped + for the latter because part of the protection area is effectively + included in STACK_CHECK_MAX_FRAME_SIZE for the former. */ +#ifdef STACK_CHECK_PROTECT +#define STACK_OLD_CHECK_PROTECT STACK_CHECK_PROTECT +#else +#define STACK_OLD_CHECK_PROTECT \ + (targetm_common.except_unwind_info (&global_options) == UI_SJLJ \ + ? 75 * UNITS_PER_WORD \ + : 8 * 1024) +#endif + +/* Minimum amount of stack required to recover from an anticipated stack + overflow detection. The default value conveys an estimate of the amount + of stack required to propagate an exception. */ +#ifndef STACK_CHECK_PROTECT +#define STACK_CHECK_PROTECT \ + (targetm_common.except_unwind_info (&global_options) == UI_SJLJ \ + ? 75 * UNITS_PER_WORD \ + : 12 * 1024) +#endif + +/* Make the maximum frame size be the largest we can and still only need + one probe per function. */ +#ifndef STACK_CHECK_MAX_FRAME_SIZE +#define STACK_CHECK_MAX_FRAME_SIZE \ + ((1 << STACK_CHECK_PROBE_INTERVAL_EXP) - UNITS_PER_WORD) +#endif + +/* This is arbitrary, but should be large enough everywhere. */ +#ifndef STACK_CHECK_FIXED_FRAME_SIZE +#define STACK_CHECK_FIXED_FRAME_SIZE (4 * UNITS_PER_WORD) +#endif + +/* Provide a reasonable default for the maximum size of an object to + allocate in the fixed frame. We may need to be able to make this + controllable by the user at some point. */ +#ifndef STACK_CHECK_MAX_VAR_SIZE +#define STACK_CHECK_MAX_VAR_SIZE (STACK_CHECK_MAX_FRAME_SIZE / 100) +#endif + +/* By default, the C++ compiler will use function addresses in the + vtable entries. Setting this nonzero tells the compiler to use + function descriptors instead. The value of this macro says how + many words wide the descriptor is (normally 2). It is assumed + that the address of a function descriptor may be treated as a + pointer to a function. */ +#ifndef TARGET_VTABLE_USES_DESCRIPTORS +#define TARGET_VTABLE_USES_DESCRIPTORS 0 +#endif + +#ifndef SWITCHABLE_TARGET +#define SWITCHABLE_TARGET 0 +#endif + +/* If the target supports integers that are wider than two + HOST_WIDE_INTs on the host compiler, then the target should define + TARGET_SUPPORTS_WIDE_INT and make the appropriate fixups. + Otherwise the compiler really is not robust. */ +#ifndef TARGET_SUPPORTS_WIDE_INT +#define TARGET_SUPPORTS_WIDE_INT 0 +#endif + +#endif /* GCC_INSN_FLAGS_H */ + +#endif /* ! GCC_DEFAULTS_H */ diff --git a/contrib/toolchain/gcc/5x/gcc/flag-types.h b/contrib/toolchain/gcc/5x/gcc/flag-types.h new file mode 100644 index 0000000000..bfdce442a6 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/flag-types.h @@ -0,0 +1,301 @@ +/* Compilation switch flag type definitions for GCC. + Copyright (C) 1987-2015 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 +. */ + +#ifndef GCC_FLAG_TYPES_H +#define GCC_FLAG_TYPES_H + +enum debug_info_type +{ + NO_DEBUG, /* Write no debug info. */ + DBX_DEBUG, /* Write BSD .stabs for DBX (using dbxout.c). */ + SDB_DEBUG, /* Write COFF for (old) SDB (using sdbout.c). */ + DWARF2_DEBUG, /* Write Dwarf v2 debug info (using dwarf2out.c). */ + XCOFF_DEBUG, /* Write IBM/Xcoff debug info (using dbxout.c). */ + VMS_DEBUG, /* Write VMS debug info (using vmsdbgout.c). */ + VMS_AND_DWARF2_DEBUG /* Write VMS debug info (using vmsdbgout.c). + and DWARF v2 debug info (using dwarf2out.c). */ +}; + +enum debug_info_levels +{ + DINFO_LEVEL_NONE, /* Write no debugging info. */ + DINFO_LEVEL_TERSE, /* Write minimal info to support tracebacks only. */ + DINFO_LEVEL_NORMAL, /* Write info for all declarations (and line table). */ + DINFO_LEVEL_VERBOSE /* Write normal info plus #define/#undef info. */ +}; + +/* A major contribution to object and executable size is debug + information size. A major contribution to debug information + size is struct descriptions replicated in several object files. + The following function determines whether or not debug information + should be generated for a given struct. The indirect parameter + indicates that the struct is being handled indirectly, via + a pointer. See opts.c for the implementation. */ + +enum debug_info_usage +{ + DINFO_USAGE_DFN, /* A struct definition. */ + DINFO_USAGE_DIR_USE, /* A direct use, such as the type of a variable. */ + DINFO_USAGE_IND_USE, /* An indirect use, such as through a pointer. */ + DINFO_USAGE_NUM_ENUMS /* The number of enumerators. */ +}; + +/* A major contribution to object and executable size is debug + information size. A major contribution to debug information size + is struct descriptions replicated in several object files. The + following flags attempt to reduce this information. The basic + idea is to not emit struct debugging information in the current + compilation unit when that information will be generated by + another compilation unit. + + Debug information for a struct defined in the current source + file should be generated in the object file. Likewise the + debug information for a struct defined in a header should be + generated in the object file of the corresponding source file. + Both of these case are handled when the base name of the file of + the struct definition matches the base name of the source file + of the current compilation unit. This matching emits minimal + struct debugging information. + + The base file name matching rule above will fail to emit debug + information for structs defined in system headers. So a second + category of files includes system headers in addition to files + with matching bases. + + The remaining types of files are library headers and application + headers. We cannot currently distinguish these two types. */ + +enum debug_struct_file +{ + DINFO_STRUCT_FILE_NONE, /* Debug no structs. */ + DINFO_STRUCT_FILE_BASE, /* Debug structs defined in files with the + same base name as the compilation unit. */ + DINFO_STRUCT_FILE_SYS, /* Also debug structs defined in system + header files. */ + DINFO_STRUCT_FILE_ANY /* Debug structs defined in all files. */ +}; + +/* Enumerate visibility settings. This is deliberately ordered from most + to least visibility. */ +#ifndef SYMBOL_VISIBILITY_DEFINED +#define SYMBOL_VISIBILITY_DEFINED +enum symbol_visibility +{ + VISIBILITY_DEFAULT, + VISIBILITY_PROTECTED, + VISIBILITY_HIDDEN, + VISIBILITY_INTERNAL +}; +#endif + +/* Enumerate Objective-c instance variable visibility settings. */ + +enum ivar_visibility +{ + IVAR_VISIBILITY_PRIVATE, + IVAR_VISIBILITY_PROTECTED, + IVAR_VISIBILITY_PUBLIC, + IVAR_VISIBILITY_PACKAGE +}; + +/* The stack reuse level. */ +enum stack_reuse_level +{ + SR_NONE, + SR_NAMED_VARS, + SR_ALL +}; + +/* The algorithm used for the integrated register allocator (IRA). */ +enum ira_algorithm +{ + IRA_ALGORITHM_CB, + IRA_ALGORITHM_PRIORITY +}; + +/* The regions used for the integrated register allocator (IRA). */ +enum ira_region +{ + IRA_REGION_ONE, + IRA_REGION_ALL, + IRA_REGION_MIXED, + /* This value means that there were no options -fira-region on the + command line and that we should choose a value depending on the + used -O option. */ + IRA_REGION_AUTODETECT +}; + +/* The options for excess precision. */ +enum excess_precision +{ + EXCESS_PRECISION_DEFAULT, + EXCESS_PRECISION_FAST, + EXCESS_PRECISION_STANDARD +}; + +/* Type of stack check. */ +enum stack_check_type +{ + /* Do not check the stack. */ + NO_STACK_CHECK = 0, + + /* Check the stack generically, i.e. assume no specific support + from the target configuration files. */ + GENERIC_STACK_CHECK, + + /* Check the stack and rely on the target configuration files to + check the static frame of functions, i.e. use the generic + mechanism only for dynamic stack allocations. */ + STATIC_BUILTIN_STACK_CHECK, + + /* Check the stack and entirely rely on the target configuration + files, i.e. do not use the generic mechanism at all. */ + FULL_BUILTIN_STACK_CHECK +}; + +/* Names for the different levels of -Wstrict-overflow=N. The numeric + values here correspond to N. */ + +enum warn_strict_overflow_code +{ + /* Overflow warning that should be issued with -Wall: a questionable + construct that is easy to avoid even when using macros. Example: + folding (x + CONSTANT > x) to 1. */ + WARN_STRICT_OVERFLOW_ALL = 1, + /* Overflow warning about folding a comparison to a constant because + of undefined signed overflow, other than cases covered by + WARN_STRICT_OVERFLOW_ALL. Example: folding (abs (x) >= 0) to 1 + (this is false when x == INT_MIN). */ + WARN_STRICT_OVERFLOW_CONDITIONAL = 2, + /* Overflow warning about changes to comparisons other than folding + them to a constant. Example: folding (x + 1 > 1) to (x > 0). */ + WARN_STRICT_OVERFLOW_COMPARISON = 3, + /* Overflow warnings not covered by the above cases. Example: + folding ((x * 10) / 5) to (x * 2). */ + WARN_STRICT_OVERFLOW_MISC = 4, + /* Overflow warnings about reducing magnitude of constants in + comparison. Example: folding (x + 2 > y) to (x + 1 >= y). */ + WARN_STRICT_OVERFLOW_MAGNITUDE = 5 +}; + +/* Floating-point contraction mode. */ +enum fp_contract_mode { + FP_CONTRACT_OFF = 0, + FP_CONTRACT_ON = 1, + FP_CONTRACT_FAST = 2 +}; + +/* Vectorizer cost-model. */ +enum vect_cost_model { + VECT_COST_MODEL_UNLIMITED = 0, + VECT_COST_MODEL_CHEAP = 1, + VECT_COST_MODEL_DYNAMIC = 2, + VECT_COST_MODEL_DEFAULT = 3 +}; + + +/* Different instrumentation modes. */ +enum sanitize_code { + /* AddressSanitizer. */ + SANITIZE_ADDRESS = 1 << 0, + SANITIZE_USER_ADDRESS = 1 << 1, + SANITIZE_KERNEL_ADDRESS = 1 << 2, + /* ThreadSanitizer. */ + SANITIZE_THREAD = 1 << 3, + /* LeakSanitizer. */ + SANITIZE_LEAK = 1 << 4, + /* UndefinedBehaviorSanitizer. */ + SANITIZE_SHIFT = 1 << 5, + SANITIZE_DIVIDE = 1 << 6, + SANITIZE_UNREACHABLE = 1 << 7, + SANITIZE_VLA = 1 << 8, + SANITIZE_NULL = 1 << 9, + SANITIZE_RETURN = 1 << 10, + SANITIZE_SI_OVERFLOW = 1 << 11, + SANITIZE_BOOL = 1 << 12, + SANITIZE_ENUM = 1 << 13, + SANITIZE_FLOAT_DIVIDE = 1 << 14, + SANITIZE_FLOAT_CAST = 1 << 15, + SANITIZE_BOUNDS = 1UL << 16, + SANITIZE_ALIGNMENT = 1UL << 17, + SANITIZE_NONNULL_ATTRIBUTE = 1UL << 18, + SANITIZE_RETURNS_NONNULL_ATTRIBUTE = 1UL << 19, + SANITIZE_OBJECT_SIZE = 1UL << 20, + SANITIZE_VPTR = 1UL << 21, + SANITIZE_UNDEFINED = SANITIZE_SHIFT | SANITIZE_DIVIDE | SANITIZE_UNREACHABLE + | SANITIZE_VLA | SANITIZE_NULL | SANITIZE_RETURN + | SANITIZE_SI_OVERFLOW | SANITIZE_BOOL | SANITIZE_ENUM + | SANITIZE_BOUNDS | SANITIZE_ALIGNMENT + | SANITIZE_NONNULL_ATTRIBUTE + | SANITIZE_RETURNS_NONNULL_ATTRIBUTE + | SANITIZE_OBJECT_SIZE | SANITIZE_VPTR, + SANITIZE_NONDEFAULT = SANITIZE_FLOAT_DIVIDE | SANITIZE_FLOAT_CAST +}; + +/* flag_vtable_verify initialization levels. */ +enum vtv_priority { + VTV_NO_PRIORITY = 0, /* i.E. Do NOT do vtable verification. */ + VTV_STANDARD_PRIORITY = 1, + VTV_PREINIT_PRIORITY = 2 +}; + +/* flag_lto_partition initialization values. */ +enum lto_partition_model { + LTO_PARTITION_NONE = 0, + LTO_PARTITION_ONE = 1, + LTO_PARTITION_BALANCED = 2, + LTO_PARTITION_1TO1 = 3, + LTO_PARTITION_MAX = 4 +}; + + +/* gfortran -finit-real= values. */ + +enum gfc_init_local_real +{ + GFC_INIT_REAL_OFF = 0, + GFC_INIT_REAL_ZERO, + GFC_INIT_REAL_NAN, + GFC_INIT_REAL_SNAN, + GFC_INIT_REAL_INF, + GFC_INIT_REAL_NEG_INF +}; + +/* gfortran -fcoarray= values. */ + +enum gfc_fcoarray +{ + GFC_FCOARRAY_NONE = 0, + GFC_FCOARRAY_SINGLE, + GFC_FCOARRAY_LIB +}; + + +/* gfortran -fconvert= values; used for unformatted I/O. + Keep in sync with GFC_CONVERT_* in gcc/fortran/libgfortran.h. */ +enum gfc_convert +{ + GFC_FLAG_CONVERT_NATIVE = 0, + GFC_FLAG_CONVERT_SWAP, + GFC_FLAG_CONVERT_BIG, + GFC_FLAG_CONVERT_LITTLE +}; + + +#endif /* ! GCC_FLAG_TYPES_H */ diff --git a/contrib/toolchain/gcc/5x/gcc/insn-constants.h b/contrib/toolchain/gcc/5x/gcc/insn-constants.h new file mode 100644 index 0000000000..9780d34968 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/insn-constants.h @@ -0,0 +1,385 @@ +/* Generated automatically by the program `genconstants' + from the machine description file `md'. */ + +#ifndef GCC_INSN_CONSTANTS_H +#define GCC_INSN_CONSTANTS_H + +#define XMM27_REG 64 +#define XMM9_REG 46 +#define ST6_REG 14 +#define MASK5_REG 74 +#define R13_REG 42 +#define XMM14_REG 51 +#define ROUND_CEIL 0x2 +#define PCOM_TRUE 1 +#define XMM7_REG 28 +#define PPERM_SRC 0x00 +#define PPERM_ZERO 0x80 +#define MM7_REG 36 +#define XMM6_REG 27 +#define ST3_REG 11 +#define MASK2_REG 71 +#define R10_REG 39 +#define XMM11_REG 48 +#define XMM19_REG 56 +#define ST1_REG 9 +#define MASK3_REG 72 +#define MM4_REG 33 +#define ST7_REG 15 +#define COM_FALSE_P 3 +#define XMM3_REG 24 +#define XMM24_REG 61 +#define ST0_REG 8 +#define MASK7_REG 76 +#define BND1_REG 78 +#define COM_FALSE_S 2 +#define SP_REG 7 +#define AX_REG 0 +#define BND0_REG 77 +#define ROUND_NO_EXC 0x8 +#define MM1_REG 30 +#define MM3_REG 32 +#define XMM1_REG 22 +#define ROUND_ZERO 3 +#define XMM16_REG 53 +#define FPCR_REG 19 +#define XMM8_REG 45 +#define XMM4_REG 25 +#define ST5_REG 13 +#define XMM23_REG 60 +#define R12_REG 41 +#define R9_REG 38 +#define XMM26_REG 63 +#define ROUND_MXCSR 0x4 +#define PCOM_FALSE 0 +#define MASK4_REG 73 +#define XMM12_REG 49 +#define FLAGS_REG 17 +#define PPERM_INVERT 0x20 +#define MM6_REG 35 +#define PPERM_SRC1 0x00 +#define PPERM_SRC2 0x10 +#define ST2_REG 10 +#define MASK1_REG 70 +#define XMM10_REG 47 +#define XMM20_REG 57 +#define ROUND_TRUNC 0x3 +#define XMM18_REG 55 +#define DI_REG 5 +#define ROUND_SAE 8 +#define XMM25_REG 62 +#define DX_REG 1 +#define XMM29_REG 66 +#define NO_ROUND 4 +#define BP_REG 6 +#define XMM5_REG 26 +#define COM_TRUE_P 5 +#define COM_TRUE_S 4 +#define ROUND_FLOOR 0x1 +#define FPSR_REG 18 +#define MASK6_REG 75 +#define R14_REG 43 +#define XMM28_REG 65 +#define R15_REG 44 +#define XMM13_REG 50 +#define ROUND_NEAREST_INT 0 +#define PPERM_SIGN 0xc0 +#define MM0_REG 29 +#define XMM31_REG 68 +#define BX_REG 3 +#define XMM30_REG 67 +#define ST4_REG 12 +#define PPERM_INV_SIGN 0xe0 +#define R11_REG 40 +#define MM5_REG 34 +#define PPERM_REVERSE 0x40 +#define CX_REG 2 +#define MASK0_REG 69 +#define R8_REG 37 +#define SI_REG 4 +#define XMM22_REG 59 +#define XMM15_REG 52 +#define XMM0_REG 21 +#define XMM17_REG 54 +#define ROUND_NEG_INF 1 +#define ROUND_POS_INF 2 +#define XMM2_REG 23 +#define PPERM_ONES 0xa0 +#define XMM21_REG 58 +#define MM2_REG 31 +#define PPERM_REV_INV 0x60 + +enum unspec { + UNSPEC_GOT = 0, + UNSPEC_GOTOFF = 1, + UNSPEC_GOTPCREL = 2, + UNSPEC_GOTTPOFF = 3, + UNSPEC_TPOFF = 4, + UNSPEC_NTPOFF = 5, + UNSPEC_DTPOFF = 6, + UNSPEC_GOTNTPOFF = 7, + UNSPEC_INDNTPOFF = 8, + UNSPEC_PLTOFF = 9, + UNSPEC_MACHOPIC_OFFSET = 10, + UNSPEC_PCREL = 11, + UNSPEC_SIZEOF = 12, + UNSPEC_STACK_ALLOC = 13, + UNSPEC_SET_GOT = 14, + UNSPEC_SET_RIP = 15, + UNSPEC_SET_GOT_OFFSET = 16, + UNSPEC_MEMORY_BLOCKAGE = 17, + UNSPEC_STACK_CHECK = 18, + UNSPEC_TP = 19, + UNSPEC_TLS_GD = 20, + UNSPEC_TLS_LD_BASE = 21, + UNSPEC_TLSDESC = 22, + UNSPEC_TLS_IE_SUN = 23, + UNSPEC_SCAS = 24, + UNSPEC_FNSTSW = 25, + UNSPEC_SAHF = 26, + UNSPEC_PARITY = 27, + UNSPEC_FSTCW = 28, + UNSPEC_FLDCW = 29, + UNSPEC_REP = 30, + UNSPEC_LD_MPIC = 31, + UNSPEC_TRUNC_NOOP = 32, + UNSPEC_DIV_ALREADY_SPLIT = 33, + UNSPEC_PAUSE = 34, + UNSPEC_LEA_ADDR = 35, + UNSPEC_XBEGIN_ABORT = 36, + UNSPEC_STOS = 37, + UNSPEC_PEEPSIB = 38, + UNSPEC_INSN_FALSE_DEP = 39, + UNSPEC_FIX_NOTRUNC = 40, + UNSPEC_MASKMOV = 41, + UNSPEC_MOVMSK = 42, + UNSPEC_RCP = 43, + UNSPEC_RSQRT = 44, + UNSPEC_PSADBW = 45, + UNSPEC_COPYSIGN = 46, + UNSPEC_IEEE_MIN = 47, + UNSPEC_IEEE_MAX = 48, + UNSPEC_SIN = 49, + UNSPEC_COS = 50, + UNSPEC_FPATAN = 51, + UNSPEC_FYL2X = 52, + UNSPEC_FYL2XP1 = 53, + UNSPEC_FRNDINT = 54, + UNSPEC_FIST = 55, + UNSPEC_F2XM1 = 56, + UNSPEC_TAN = 57, + UNSPEC_FXAM = 58, + UNSPEC_FRNDINT_FLOOR = 59, + UNSPEC_FRNDINT_CEIL = 60, + UNSPEC_FRNDINT_TRUNC = 61, + UNSPEC_FRNDINT_MASK_PM = 62, + UNSPEC_FIST_FLOOR = 63, + UNSPEC_FIST_CEIL = 64, + UNSPEC_SINCOS_COS = 65, + UNSPEC_SINCOS_SIN = 66, + UNSPEC_XTRACT_FRACT = 67, + UNSPEC_XTRACT_EXP = 68, + UNSPEC_FSCALE_FRACT = 69, + UNSPEC_FSCALE_EXP = 70, + UNSPEC_FPREM_F = 71, + UNSPEC_FPREM_U = 72, + UNSPEC_FPREM1_F = 73, + UNSPEC_FPREM1_U = 74, + UNSPEC_C2_FLAG = 75, + UNSPEC_FXAM_MEM = 76, + UNSPEC_SP_SET = 77, + UNSPEC_SP_TEST = 78, + UNSPEC_SP_TLS_SET = 79, + UNSPEC_SP_TLS_TEST = 80, + UNSPEC_ROUND = 81, + UNSPEC_CRC32 = 82, + UNSPEC_BEXTR = 83, + UNSPEC_PDEP = 84, + UNSPEC_PEXT = 85, + UNSPEC_KMOV = 86, + UNSPEC_BNDMK = 87, + UNSPEC_BNDMK_ADDR = 88, + UNSPEC_BNDSTX = 89, + UNSPEC_BNDLDX = 90, + UNSPEC_BNDLDX_ADDR = 91, + UNSPEC_BNDCL = 92, + UNSPEC_BNDCU = 93, + UNSPEC_BNDCN = 94, + UNSPEC_MPX_FENCE = 95, + UNSPEC_MOVNTQ = 96, + UNSPEC_PFRCP = 97, + UNSPEC_PFRCPIT1 = 98, + UNSPEC_PFRCPIT2 = 99, + UNSPEC_PFRSQRT = 100, + UNSPEC_PFRSQIT1 = 101, + UNSPEC_MOVNT = 102, + UNSPEC_LOADU = 103, + UNSPEC_STOREU = 104, + UNSPEC_LDDQU = 105, + UNSPEC_PSHUFB = 106, + UNSPEC_PSIGN = 107, + UNSPEC_PALIGNR = 108, + UNSPEC_EXTRQI = 109, + UNSPEC_EXTRQ = 110, + UNSPEC_INSERTQI = 111, + UNSPEC_INSERTQ = 112, + UNSPEC_BLENDV = 113, + UNSPEC_INSERTPS = 114, + UNSPEC_DP = 115, + UNSPEC_MOVNTDQA = 116, + UNSPEC_MPSADBW = 117, + UNSPEC_PHMINPOSUW = 118, + UNSPEC_PTEST = 119, + UNSPEC_PCMPESTR = 120, + UNSPEC_PCMPISTR = 121, + UNSPEC_FMADDSUB = 122, + UNSPEC_XOP_UNSIGNED_CMP = 123, + UNSPEC_XOP_TRUEFALSE = 124, + UNSPEC_XOP_PERMUTE = 125, + UNSPEC_FRCZ = 126, + UNSPEC_AESENC = 127, + UNSPEC_AESENCLAST = 128, + UNSPEC_AESDEC = 129, + UNSPEC_AESDECLAST = 130, + UNSPEC_AESIMC = 131, + UNSPEC_AESKEYGENASSIST = 132, + UNSPEC_PCLMUL = 133, + UNSPEC_PCMP = 134, + UNSPEC_VPERMIL = 135, + UNSPEC_VPERMIL2 = 136, + UNSPEC_VPERMIL2F128 = 137, + UNSPEC_CAST = 138, + UNSPEC_VTESTP = 139, + UNSPEC_VCVTPH2PS = 140, + UNSPEC_VCVTPS2PH = 141, + UNSPEC_VPERMVAR = 142, + UNSPEC_VPERMTI = 143, + UNSPEC_GATHER = 144, + UNSPEC_VSIBADDR = 145, + UNSPEC_VPERMI2 = 146, + UNSPEC_VPERMT2 = 147, + UNSPEC_VPERMI2_MASK = 148, + UNSPEC_UNSIGNED_FIX_NOTRUNC = 149, + UNSPEC_UNSIGNED_PCMP = 150, + UNSPEC_TESTM = 151, + UNSPEC_TESTNM = 152, + UNSPEC_SCATTER = 153, + UNSPEC_RCP14 = 154, + UNSPEC_RSQRT14 = 155, + UNSPEC_FIXUPIMM = 156, + UNSPEC_SCALEF = 157, + UNSPEC_VTERNLOG = 158, + UNSPEC_GETEXP = 159, + UNSPEC_GETMANT = 160, + UNSPEC_ALIGN = 161, + UNSPEC_CONFLICT = 162, + UNSPEC_COMPRESS = 163, + UNSPEC_COMPRESS_STORE = 164, + UNSPEC_EXPAND = 165, + UNSPEC_MASKED_EQ = 166, + UNSPEC_MASKED_GT = 167, + UNSPEC_EMBEDDED_ROUNDING = 168, + UNSPEC_GATHER_PREFETCH = 169, + UNSPEC_SCATTER_PREFETCH = 170, + UNSPEC_EXP2 = 171, + UNSPEC_RCP28 = 172, + UNSPEC_RSQRT28 = 173, + UNSPEC_SHA1MSG1 = 174, + UNSPEC_SHA1MSG2 = 175, + UNSPEC_SHA1NEXTE = 176, + UNSPEC_SHA1RNDS4 = 177, + UNSPEC_SHA256MSG1 = 178, + UNSPEC_SHA256MSG2 = 179, + UNSPEC_SHA256RNDS2 = 180, + UNSPEC_DBPSADBW = 181, + UNSPEC_PMADDUBSW512 = 182, + UNSPEC_PMADDWD512 = 183, + UNSPEC_PSHUFHW = 184, + UNSPEC_PSHUFLW = 185, + UNSPEC_CVTINT2MASK = 186, + UNSPEC_REDUCE = 187, + UNSPEC_FPCLASS = 188, + UNSPEC_RANGE = 189, + UNSPEC_VPMADD52LUQ = 190, + UNSPEC_VPMADD52HUQ = 191, + UNSPEC_VPMULTISHIFT = 192, + UNSPEC_LFENCE = 193, + UNSPEC_SFENCE = 194, + UNSPEC_MFENCE = 195, + UNSPEC_FILD_ATOMIC = 196, + UNSPEC_FIST_ATOMIC = 197, + UNSPEC_LDA = 198, + UNSPEC_STA = 199 +}; +#define NUM_UNSPEC_VALUES 200 +extern const char *const unspec_strings[]; + +enum unspecv { + UNSPECV_BLOCKAGE = 0, + UNSPECV_STACK_PROBE = 1, + UNSPECV_PROBE_STACK_RANGE = 2, + UNSPECV_ALIGN = 3, + UNSPECV_PROLOGUE_USE = 4, + UNSPECV_SPLIT_STACK_RETURN = 5, + UNSPECV_CLD = 6, + UNSPECV_NOPS = 7, + UNSPECV_RDTSC = 8, + UNSPECV_RDTSCP = 9, + UNSPECV_RDPMC = 10, + UNSPECV_LLWP_INTRINSIC = 11, + UNSPECV_SLWP_INTRINSIC = 12, + UNSPECV_LWPVAL_INTRINSIC = 13, + UNSPECV_LWPINS_INTRINSIC = 14, + UNSPECV_RDFSBASE = 15, + UNSPECV_RDGSBASE = 16, + UNSPECV_WRFSBASE = 17, + UNSPECV_WRGSBASE = 18, + UNSPECV_FXSAVE = 19, + UNSPECV_FXRSTOR = 20, + UNSPECV_FXSAVE64 = 21, + UNSPECV_FXRSTOR64 = 22, + UNSPECV_XSAVE = 23, + UNSPECV_XRSTOR = 24, + UNSPECV_XSAVE64 = 25, + UNSPECV_XRSTOR64 = 26, + UNSPECV_XSAVEOPT = 27, + UNSPECV_XSAVEOPT64 = 28, + UNSPECV_XSAVES = 29, + UNSPECV_XRSTORS = 30, + UNSPECV_XSAVES64 = 31, + UNSPECV_XRSTORS64 = 32, + UNSPECV_XSAVEC = 33, + UNSPECV_XSAVEC64 = 34, + UNSPECV_FNSTENV = 35, + UNSPECV_FLDENV = 36, + UNSPECV_FNSTSW = 37, + UNSPECV_FNCLEX = 38, + UNSPECV_RDRAND = 39, + UNSPECV_RDSEED = 40, + UNSPECV_XBEGIN = 41, + UNSPECV_XEND = 42, + UNSPECV_XABORT = 43, + UNSPECV_XTEST = 44, + UNSPECV_NLGR = 45, + UNSPECV_CLWB = 46, + UNSPECV_PCOMMIT = 47, + UNSPECV_CLFLUSHOPT = 48, + UNSPECV_MONITORX = 49, + UNSPECV_MWAITX = 50, + UNSPECV_EMMS = 51, + UNSPECV_FEMMS = 52, + UNSPECV_LDMXCSR = 53, + UNSPECV_STMXCSR = 54, + UNSPECV_CLFLUSH = 55, + UNSPECV_MONITOR = 56, + UNSPECV_MWAIT = 57, + UNSPECV_VZEROALL = 58, + UNSPECV_VZEROUPPER = 59, + UNSPECV_CMPXCHG = 60, + UNSPECV_XCHG = 61, + UNSPECV_LOCK = 62 +}; +#define NUM_UNSPECV_VALUES 63 +extern const char *const unspecv_strings[]; + +#endif /* GCC_INSN_CONSTANTS_H */ diff --git a/contrib/toolchain/gcc/5x/gcc/insn-modes.h b/contrib/toolchain/gcc/5x/gcc/insn-modes.h new file mode 100644 index 0000000000..f26ec0bc96 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/insn-modes.h @@ -0,0 +1,638 @@ +/* Generated automatically from machmode.def and config/i386/i386-modes.def + by genmodes. */ + +#ifndef GCC_INSN_MODES_H +#define GCC_INSN_MODES_H + +enum machine_mode +{ + VOIDmode, /* machmode.def:172 */ +#define HAVE_VOIDmode + BLKmode, /* machmode.def:176 */ +#define HAVE_BLKmode + CCmode, /* machmode.def:214 */ +#define HAVE_CCmode + CCGCmode, /* config/i386/i386-modes.def:61 */ +#define HAVE_CCGCmode + CCGOCmode, /* config/i386/i386-modes.def:62 */ +#define HAVE_CCGOCmode + CCNOmode, /* config/i386/i386-modes.def:63 */ +#define HAVE_CCNOmode + CCAmode, /* config/i386/i386-modes.def:64 */ +#define HAVE_CCAmode + CCCmode, /* config/i386/i386-modes.def:65 */ +#define HAVE_CCCmode + CCOmode, /* config/i386/i386-modes.def:66 */ +#define HAVE_CCOmode + CCSmode, /* config/i386/i386-modes.def:67 */ +#define HAVE_CCSmode + CCZmode, /* config/i386/i386-modes.def:68 */ +#define HAVE_CCZmode + CCFPmode, /* config/i386/i386-modes.def:69 */ +#define HAVE_CCFPmode + CCFPUmode, /* config/i386/i386-modes.def:70 */ +#define HAVE_CCFPUmode + BImode, /* machmode.def:179 */ +#define HAVE_BImode + QImode, /* machmode.def:187 */ +#define HAVE_QImode + HImode, /* machmode.def:188 */ +#define HAVE_HImode + SImode, /* machmode.def:189 */ +#define HAVE_SImode + DImode, /* machmode.def:190 */ +#define HAVE_DImode + TImode, /* machmode.def:191 */ +#define HAVE_TImode + OImode, /* config/i386/i386-modes.def:96 */ +#define HAVE_OImode + XImode, /* config/i386/i386-modes.def:97 */ +#define HAVE_XImode + BND32mode, /* config/i386/i386-modes.def:93 */ +#define HAVE_BND32mode + BND64mode, /* config/i386/i386-modes.def:94 */ +#define HAVE_BND64mode + QQmode, /* machmode.def:217 */ +#define HAVE_QQmode + HQmode, /* machmode.def:218 */ +#define HAVE_HQmode + SQmode, /* machmode.def:219 */ +#define HAVE_SQmode + DQmode, /* machmode.def:220 */ +#define HAVE_DQmode + TQmode, /* machmode.def:221 */ +#define HAVE_TQmode + UQQmode, /* machmode.def:223 */ +#define HAVE_UQQmode + UHQmode, /* machmode.def:224 */ +#define HAVE_UHQmode + USQmode, /* machmode.def:225 */ +#define HAVE_USQmode + UDQmode, /* machmode.def:226 */ +#define HAVE_UDQmode + UTQmode, /* machmode.def:227 */ +#define HAVE_UTQmode + HAmode, /* machmode.def:229 */ +#define HAVE_HAmode + SAmode, /* machmode.def:230 */ +#define HAVE_SAmode + DAmode, /* machmode.def:231 */ +#define HAVE_DAmode + TAmode, /* machmode.def:232 */ +#define HAVE_TAmode + UHAmode, /* machmode.def:234 */ +#define HAVE_UHAmode + USAmode, /* machmode.def:235 */ +#define HAVE_USAmode + UDAmode, /* machmode.def:236 */ +#define HAVE_UDAmode + UTAmode, /* machmode.def:237 */ +#define HAVE_UTAmode + SFmode, /* machmode.def:209 */ +#define HAVE_SFmode + DFmode, /* machmode.def:210 */ +#define HAVE_DFmode + XFmode, /* config/i386/i386-modes.def:24 */ +#define HAVE_XFmode + TFmode, /* config/i386/i386-modes.def:25 */ +#define HAVE_TFmode + SDmode, /* machmode.def:249 */ +#define HAVE_SDmode + DDmode, /* machmode.def:250 */ +#define HAVE_DDmode + TDmode, /* machmode.def:251 */ +#define HAVE_TDmode + CQImode, /* machmode.def:245 */ +#define HAVE_CQImode + CHImode, /* machmode.def:245 */ +#define HAVE_CHImode + CSImode, /* machmode.def:245 */ +#define HAVE_CSImode + CDImode, /* machmode.def:245 */ +#define HAVE_CDImode + CTImode, /* machmode.def:245 */ +#define HAVE_CTImode + COImode, /* machmode.def:245 */ +#define HAVE_COImode + CXImode, /* machmode.def:245 */ +#define HAVE_CXImode + SCmode, /* machmode.def:246 */ +#define HAVE_SCmode + DCmode, /* machmode.def:246 */ +#define HAVE_DCmode + XCmode, /* machmode.def:246 */ +#define HAVE_XCmode + TCmode, /* machmode.def:246 */ +#define HAVE_TCmode + V2QImode, /* config/i386/i386-modes.def:88 */ +#define HAVE_V2QImode + V4QImode, /* config/i386/i386-modes.def:74 */ +#define HAVE_V4QImode + V2HImode, /* config/i386/i386-modes.def:74 */ +#define HAVE_V2HImode + V1SImode, /* config/i386/i386-modes.def:87 */ +#define HAVE_V1SImode + V8QImode, /* config/i386/i386-modes.def:75 */ +#define HAVE_V8QImode + V4HImode, /* config/i386/i386-modes.def:75 */ +#define HAVE_V4HImode + V2SImode, /* config/i386/i386-modes.def:75 */ +#define HAVE_V2SImode + V1DImode, /* config/i386/i386-modes.def:86 */ +#define HAVE_V1DImode + V12QImode, /* config/i386/i386-modes.def:89 */ +#define HAVE_V12QImode + V6HImode, /* config/i386/i386-modes.def:91 */ +#define HAVE_V6HImode + V14QImode, /* config/i386/i386-modes.def:90 */ +#define HAVE_V14QImode + V16QImode, /* config/i386/i386-modes.def:76 */ +#define HAVE_V16QImode + V8HImode, /* config/i386/i386-modes.def:76 */ +#define HAVE_V8HImode + V4SImode, /* config/i386/i386-modes.def:76 */ +#define HAVE_V4SImode + V2DImode, /* config/i386/i386-modes.def:76 */ +#define HAVE_V2DImode + V1TImode, /* config/i386/i386-modes.def:85 */ +#define HAVE_V1TImode + V32QImode, /* config/i386/i386-modes.def:77 */ +#define HAVE_V32QImode + V16HImode, /* config/i386/i386-modes.def:77 */ +#define HAVE_V16HImode + V8SImode, /* config/i386/i386-modes.def:77 */ +#define HAVE_V8SImode + V4DImode, /* config/i386/i386-modes.def:77 */ +#define HAVE_V4DImode + V2TImode, /* config/i386/i386-modes.def:77 */ +#define HAVE_V2TImode + V64QImode, /* config/i386/i386-modes.def:78 */ +#define HAVE_V64QImode + V32HImode, /* config/i386/i386-modes.def:78 */ +#define HAVE_V32HImode + V16SImode, /* config/i386/i386-modes.def:78 */ +#define HAVE_V16SImode + V8DImode, /* config/i386/i386-modes.def:78 */ +#define HAVE_V8DImode + V4TImode, /* config/i386/i386-modes.def:78 */ +#define HAVE_V4TImode + V128QImode, /* config/i386/i386-modes.def:79 */ +#define HAVE_V128QImode + V64HImode, /* config/i386/i386-modes.def:79 */ +#define HAVE_V64HImode + V32SImode, /* config/i386/i386-modes.def:79 */ +#define HAVE_V32SImode + V16DImode, /* config/i386/i386-modes.def:79 */ +#define HAVE_V16DImode + V8TImode, /* config/i386/i386-modes.def:79 */ +#define HAVE_V8TImode + V2SFmode, /* config/i386/i386-modes.def:80 */ +#define HAVE_V2SFmode + V4SFmode, /* config/i386/i386-modes.def:81 */ +#define HAVE_V4SFmode + V2DFmode, /* config/i386/i386-modes.def:81 */ +#define HAVE_V2DFmode + V8SFmode, /* config/i386/i386-modes.def:82 */ +#define HAVE_V8SFmode + V4DFmode, /* config/i386/i386-modes.def:82 */ +#define HAVE_V4DFmode + V2TFmode, /* config/i386/i386-modes.def:82 */ +#define HAVE_V2TFmode + V16SFmode, /* config/i386/i386-modes.def:83 */ +#define HAVE_V16SFmode + V8DFmode, /* config/i386/i386-modes.def:83 */ +#define HAVE_V8DFmode + V4TFmode, /* config/i386/i386-modes.def:83 */ +#define HAVE_V4TFmode + V32SFmode, /* config/i386/i386-modes.def:84 */ +#define HAVE_V32SFmode + V16DFmode, /* config/i386/i386-modes.def:84 */ +#define HAVE_V16DFmode + V8TFmode, /* config/i386/i386-modes.def:84 */ +#define HAVE_V8TFmode + MAX_MACHINE_MODE, + + MIN_MODE_RANDOM = VOIDmode, + MAX_MODE_RANDOM = BLKmode, + + MIN_MODE_CC = CCmode, + MAX_MODE_CC = CCFPUmode, + + MIN_MODE_INT = QImode, + MAX_MODE_INT = XImode, + + MIN_MODE_PARTIAL_INT = VOIDmode, + MAX_MODE_PARTIAL_INT = VOIDmode, + + MIN_MODE_POINTER_BOUNDS = BND32mode, + MAX_MODE_POINTER_BOUNDS = BND64mode, + + MIN_MODE_FRACT = QQmode, + MAX_MODE_FRACT = TQmode, + + MIN_MODE_UFRACT = UQQmode, + MAX_MODE_UFRACT = UTQmode, + + MIN_MODE_ACCUM = HAmode, + MAX_MODE_ACCUM = TAmode, + + MIN_MODE_UACCUM = UHAmode, + MAX_MODE_UACCUM = UTAmode, + + MIN_MODE_FLOAT = SFmode, + MAX_MODE_FLOAT = TFmode, + + MIN_MODE_DECIMAL_FLOAT = SDmode, + MAX_MODE_DECIMAL_FLOAT = TDmode, + + MIN_MODE_COMPLEX_INT = CQImode, + MAX_MODE_COMPLEX_INT = CXImode, + + MIN_MODE_COMPLEX_FLOAT = SCmode, + MAX_MODE_COMPLEX_FLOAT = TCmode, + + MIN_MODE_VECTOR_INT = V2QImode, + MAX_MODE_VECTOR_INT = V8TImode, + + MIN_MODE_VECTOR_FRACT = VOIDmode, + MAX_MODE_VECTOR_FRACT = VOIDmode, + + MIN_MODE_VECTOR_UFRACT = VOIDmode, + MAX_MODE_VECTOR_UFRACT = VOIDmode, + + MIN_MODE_VECTOR_ACCUM = VOIDmode, + MAX_MODE_VECTOR_ACCUM = VOIDmode, + + MIN_MODE_VECTOR_UACCUM = VOIDmode, + MAX_MODE_VECTOR_UACCUM = VOIDmode, + + MIN_MODE_VECTOR_FLOAT = V2SFmode, + MAX_MODE_VECTOR_FLOAT = V8TFmode, + + NUM_MACHINE_MODES = MAX_MACHINE_MODE +}; + +#define CONST_MODE_SIZE +#define CONST_MODE_BASE_ALIGN +#define CONST_MODE_IBIT const +#define CONST_MODE_FBIT const + +#define BITS_PER_UNIT (8) +#define MAX_BITSIZE_MODE_ANY_INT 128 +#define MAX_BITSIZE_MODE_ANY_MODE (128*BITS_PER_UNIT) +#define NUM_INT_N_ENTS 1 + +#if !defined (USED_FOR_TARGET) && GCC_VERSION >= 4001 + +#ifdef __cplusplus +inline __attribute__((__always_inline__)) +#else +extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) +#endif +unsigned char +mode_size_inline (machine_mode mode) +{ + extern unsigned char mode_size[NUM_MACHINE_MODES]; + switch (mode) + { + case VOIDmode: return 0; + case BLKmode: return 0; + case CCmode: return 4; + case CCGCmode: return 4; + case CCGOCmode: return 4; + case CCNOmode: return 4; + case CCAmode: return 4; + case CCCmode: return 4; + case CCOmode: return 4; + case CCSmode: return 4; + case CCZmode: return 4; + case CCFPmode: return 4; + case CCFPUmode: return 4; + case BImode: return 1; + case QImode: return 1; + case HImode: return 2; + case SImode: return 4; + case DImode: return 8; + case TImode: return 16; + case OImode: return 32; + case XImode: return 64; + case BND32mode: return 8; + case BND64mode: return 16; + case QQmode: return 1; + case HQmode: return 2; + case SQmode: return 4; + case DQmode: return 8; + case TQmode: return 16; + case UQQmode: return 1; + case UHQmode: return 2; + case USQmode: return 4; + case UDQmode: return 8; + case UTQmode: return 16; + case HAmode: return 2; + case SAmode: return 4; + case DAmode: return 8; + case TAmode: return 16; + case UHAmode: return 2; + case USAmode: return 4; + case UDAmode: return 8; + case UTAmode: return 16; + case SFmode: return 4; + case DFmode: return 8; + case TFmode: return 16; + case SDmode: return 4; + case DDmode: return 8; + case TDmode: return 16; + case CQImode: return 2; + case CHImode: return 4; + case CSImode: return 8; + case CDImode: return 16; + case CTImode: return 32; + case COImode: return 64; + case CXImode: return 128; + case SCmode: return 8; + case DCmode: return 16; + case TCmode: return 32; + case V2QImode: return 2; + case V4QImode: return 4; + case V2HImode: return 4; + case V1SImode: return 4; + case V8QImode: return 8; + case V4HImode: return 8; + case V2SImode: return 8; + case V1DImode: return 8; + case V12QImode: return 12; + case V6HImode: return 12; + case V14QImode: return 14; + case V16QImode: return 16; + case V8HImode: return 16; + case V4SImode: return 16; + case V2DImode: return 16; + case V1TImode: return 16; + case V32QImode: return 32; + case V16HImode: return 32; + case V8SImode: return 32; + case V4DImode: return 32; + case V2TImode: return 32; + case V64QImode: return 64; + case V32HImode: return 64; + case V16SImode: return 64; + case V8DImode: return 64; + case V4TImode: return 64; + case V128QImode: return 128; + case V64HImode: return 128; + case V32SImode: return 128; + case V16DImode: return 128; + case V8TImode: return 128; + case V2SFmode: return 8; + case V4SFmode: return 16; + case V2DFmode: return 16; + case V8SFmode: return 32; + case V4DFmode: return 32; + case V2TFmode: return 32; + case V16SFmode: return 64; + case V8DFmode: return 64; + case V4TFmode: return 64; + case V32SFmode: return 128; + case V16DFmode: return 128; + case V8TFmode: return 128; + default: return mode_size[mode]; + } +} + +#ifdef __cplusplus +inline __attribute__((__always_inline__)) +#else +extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) +#endif +unsigned char +mode_nunits_inline (machine_mode mode) +{ + extern const unsigned char mode_nunits[NUM_MACHINE_MODES]; + switch (mode) + { + case VOIDmode: return 0; + case BLKmode: return 0; + case CCmode: return 1; + case CCGCmode: return 1; + case CCGOCmode: return 1; + case CCNOmode: return 1; + case CCAmode: return 1; + case CCCmode: return 1; + case CCOmode: return 1; + case CCSmode: return 1; + case CCZmode: return 1; + case CCFPmode: return 1; + case CCFPUmode: return 1; + case BImode: return 1; + case QImode: return 1; + case HImode: return 1; + case SImode: return 1; + case DImode: return 1; + case TImode: return 1; + case OImode: return 1; + case XImode: return 1; + case BND32mode: return 1; + case BND64mode: return 1; + case QQmode: return 1; + case HQmode: return 1; + case SQmode: return 1; + case DQmode: return 1; + case TQmode: return 1; + case UQQmode: return 1; + case UHQmode: return 1; + case USQmode: return 1; + case UDQmode: return 1; + case UTQmode: return 1; + case HAmode: return 1; + case SAmode: return 1; + case DAmode: return 1; + case TAmode: return 1; + case UHAmode: return 1; + case USAmode: return 1; + case UDAmode: return 1; + case UTAmode: return 1; + case SFmode: return 1; + case DFmode: return 1; + case XFmode: return 1; + case TFmode: return 1; + case SDmode: return 1; + case DDmode: return 1; + case TDmode: return 1; + case CQImode: return 2; + case CHImode: return 2; + case CSImode: return 2; + case CDImode: return 2; + case CTImode: return 2; + case COImode: return 2; + case CXImode: return 2; + case SCmode: return 2; + case DCmode: return 2; + case XCmode: return 2; + case TCmode: return 2; + case V2QImode: return 2; + case V4QImode: return 4; + case V2HImode: return 2; + case V1SImode: return 1; + case V8QImode: return 8; + case V4HImode: return 4; + case V2SImode: return 2; + case V1DImode: return 1; + case V12QImode: return 12; + case V6HImode: return 6; + case V14QImode: return 14; + case V16QImode: return 16; + case V8HImode: return 8; + case V4SImode: return 4; + case V2DImode: return 2; + case V1TImode: return 1; + case V32QImode: return 32; + case V16HImode: return 16; + case V8SImode: return 8; + case V4DImode: return 4; + case V2TImode: return 2; + case V64QImode: return 64; + case V32HImode: return 32; + case V16SImode: return 16; + case V8DImode: return 8; + case V4TImode: return 4; + case V128QImode: return 128; + case V64HImode: return 64; + case V32SImode: return 32; + case V16DImode: return 16; + case V8TImode: return 8; + case V2SFmode: return 2; + case V4SFmode: return 4; + case V2DFmode: return 2; + case V8SFmode: return 8; + case V4DFmode: return 4; + case V2TFmode: return 2; + case V16SFmode: return 16; + case V8DFmode: return 8; + case V4TFmode: return 4; + case V32SFmode: return 32; + case V16DFmode: return 16; + case V8TFmode: return 8; + default: return mode_nunits[mode]; + } +} + +#ifdef __cplusplus +inline __attribute__((__always_inline__)) +#else +extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) +#endif +unsigned char +mode_inner_inline (machine_mode mode) +{ + extern const unsigned char mode_inner[NUM_MACHINE_MODES]; + switch (mode) + { + case VOIDmode: return VOIDmode; + case BLKmode: return VOIDmode; + case CCmode: return VOIDmode; + case CCGCmode: return VOIDmode; + case CCGOCmode: return VOIDmode; + case CCNOmode: return VOIDmode; + case CCAmode: return VOIDmode; + case CCCmode: return VOIDmode; + case CCOmode: return VOIDmode; + case CCSmode: return VOIDmode; + case CCZmode: return VOIDmode; + case CCFPmode: return VOIDmode; + case CCFPUmode: return VOIDmode; + case BImode: return VOIDmode; + case QImode: return VOIDmode; + case HImode: return VOIDmode; + case SImode: return VOIDmode; + case DImode: return VOIDmode; + case TImode: return VOIDmode; + case OImode: return VOIDmode; + case XImode: return VOIDmode; + case BND32mode: return VOIDmode; + case BND64mode: return VOIDmode; + case QQmode: return VOIDmode; + case HQmode: return VOIDmode; + case SQmode: return VOIDmode; + case DQmode: return VOIDmode; + case TQmode: return VOIDmode; + case UQQmode: return VOIDmode; + case UHQmode: return VOIDmode; + case USQmode: return VOIDmode; + case UDQmode: return VOIDmode; + case UTQmode: return VOIDmode; + case HAmode: return VOIDmode; + case SAmode: return VOIDmode; + case DAmode: return VOIDmode; + case TAmode: return VOIDmode; + case UHAmode: return VOIDmode; + case USAmode: return VOIDmode; + case UDAmode: return VOIDmode; + case UTAmode: return VOIDmode; + case SFmode: return VOIDmode; + case DFmode: return VOIDmode; + case XFmode: return VOIDmode; + case TFmode: return VOIDmode; + case SDmode: return VOIDmode; + case DDmode: return VOIDmode; + case TDmode: return VOIDmode; + case CQImode: return QImode; + case CHImode: return HImode; + case CSImode: return SImode; + case CDImode: return DImode; + case CTImode: return TImode; + case COImode: return OImode; + case CXImode: return XImode; + case SCmode: return SFmode; + case DCmode: return DFmode; + case XCmode: return XFmode; + case TCmode: return TFmode; + case V2QImode: return QImode; + case V4QImode: return QImode; + case V2HImode: return HImode; + case V1SImode: return SImode; + case V8QImode: return QImode; + case V4HImode: return HImode; + case V2SImode: return SImode; + case V1DImode: return DImode; + case V12QImode: return QImode; + case V6HImode: return HImode; + case V14QImode: return QImode; + case V16QImode: return QImode; + case V8HImode: return HImode; + case V4SImode: return SImode; + case V2DImode: return DImode; + case V1TImode: return TImode; + case V32QImode: return QImode; + case V16HImode: return HImode; + case V8SImode: return SImode; + case V4DImode: return DImode; + case V2TImode: return TImode; + case V64QImode: return QImode; + case V32HImode: return HImode; + case V16SImode: return SImode; + case V8DImode: return DImode; + case V4TImode: return TImode; + case V128QImode: return QImode; + case V64HImode: return HImode; + case V32SImode: return SImode; + case V16DImode: return DImode; + case V8TImode: return TImode; + case V2SFmode: return SFmode; + case V4SFmode: return SFmode; + case V2DFmode: return DFmode; + case V8SFmode: return SFmode; + case V4DFmode: return DFmode; + case V2TFmode: return TFmode; + case V16SFmode: return SFmode; + case V8DFmode: return DFmode; + case V4TFmode: return TFmode; + case V32SFmode: return SFmode; + case V16DFmode: return DFmode; + case V8TFmode: return TFmode; + default: return mode_inner[mode]; + } +} + +#endif /* GCC_VERSION >= 4001 */ + +#endif /* insn-modes.h */ diff --git a/contrib/toolchain/gcc/5x/gcc/options.h b/contrib/toolchain/gcc/5x/gcc/options.h new file mode 100644 index 0000000000..f73e72c0c9 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/options.h @@ -0,0 +1,6858 @@ +/* This file is auto-generated by opth-gen.awk. */ + +#ifndef OPTIONS_H +#define OPTIONS_H + +#include "flag-types.h" + +#include "config/i386/i386-opts.h" + +#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS) +#ifndef GENERATOR_FILE +#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) +struct GTY(()) gcc_options +#else +struct gcc_options +#endif +{ +#endif +#ifdef GENERATOR_FILE +extern int recip_mask; +#else + int x_recip_mask; +#define recip_mask global_options.x_recip_mask +#endif +#ifdef GENERATOR_FILE +extern HOST_WIDE_INT frame_larger_than_size; +#else + HOST_WIDE_INT x_frame_larger_than_size; +#define frame_larger_than_size global_options.x_frame_larger_than_size +#endif +#ifdef GENERATOR_FILE +extern HOST_WIDE_INT ix86_isa_flags; +#else + HOST_WIDE_INT x_ix86_isa_flags; +#define ix86_isa_flags global_options.x_ix86_isa_flags +#endif +#ifdef GENERATOR_FILE +extern HOST_WIDE_INT ix86_isa_flags_explicit; +#else + HOST_WIDE_INT x_ix86_isa_flags_explicit; +#define ix86_isa_flags_explicit global_options.x_ix86_isa_flags_explicit +#endif +#ifdef GENERATOR_FILE +extern HOST_WIDE_INT larger_than_size; +#else + HOST_WIDE_INT x_larger_than_size; +#define larger_than_size global_options.x_larger_than_size +#endif +#ifdef GENERATOR_FILE +extern bool dump_base_name_prefixed; +#else + bool x_dump_base_name_prefixed; +#define dump_base_name_prefixed global_options.x_dump_base_name_prefixed +#endif +#ifdef GENERATOR_FILE +extern bool exit_after_options; +#else + bool x_exit_after_options; +#define exit_after_options global_options.x_exit_after_options +#endif +#ifdef GENERATOR_FILE +extern bool flag_dump_all_passed; +#else + bool x_flag_dump_all_passed; +#define flag_dump_all_passed global_options.x_flag_dump_all_passed +#endif +#ifdef GENERATOR_FILE +extern bool flag_opts_finished; +#else + bool x_flag_opts_finished; +#define flag_opts_finished global_options.x_flag_opts_finished +#endif +#ifdef GENERATOR_FILE +extern bool flag_stack_usage_info; +#else + bool x_flag_stack_usage_info; +#define flag_stack_usage_info global_options.x_flag_stack_usage_info +#endif +#ifdef GENERATOR_FILE +extern bool flag_warn_unused_result; +#else + bool x_flag_warn_unused_result; +#define flag_warn_unused_result global_options.x_flag_warn_unused_result +#endif +#ifdef GENERATOR_FILE +extern bool in_lto_p; +#else + bool x_in_lto_p; +#define in_lto_p global_options.x_in_lto_p +#endif +#ifdef GENERATOR_FILE +extern bool use_gnu_debug_info_extensions; +#else + bool x_use_gnu_debug_info_extensions; +#define use_gnu_debug_info_extensions global_options.x_use_gnu_debug_info_extensions +#endif +#ifdef GENERATOR_FILE +extern bool warn_frame_larger_than; +#else + bool x_warn_frame_larger_than; +#define warn_frame_larger_than global_options.x_warn_frame_larger_than +#endif +#ifdef GENERATOR_FILE +extern bool warn_larger_than; +#else + bool x_warn_larger_than; +#define warn_larger_than global_options.x_warn_larger_than +#endif +#ifdef GENERATOR_FILE +extern char *help_enum_printed; +#else + char * x_help_enum_printed; +#define help_enum_printed global_options.x_help_enum_printed +#endif +#ifdef GENERATOR_FILE +extern char *help_printed; +#else + char * x_help_printed; +#define help_printed global_options.x_help_printed +#endif +#ifdef GENERATOR_FILE +extern const char *main_input_basename; +#else + const char * x_main_input_basename; +#define main_input_basename global_options.x_main_input_basename +#endif +#ifdef GENERATOR_FILE +extern const char *main_input_filename; +#else + const char * x_main_input_filename; +#define main_input_filename global_options.x_main_input_filename +#endif +#ifdef GENERATOR_FILE +extern enum debug_info_levels debug_info_level; +#else + enum debug_info_levels x_debug_info_level; +#define debug_info_level global_options.x_debug_info_level +#endif +#ifdef GENERATOR_FILE +extern enum debug_info_type write_symbols; +#else + enum debug_info_type x_write_symbols; +#define write_symbols global_options.x_write_symbols +#endif +#ifdef GENERATOR_FILE +extern enum debug_struct_file debug_struct_generic[DINFO_USAGE_NUM_ENUMS]; +#else + enum debug_struct_file x_debug_struct_generic[DINFO_USAGE_NUM_ENUMS]; +#define debug_struct_generic global_options.x_debug_struct_generic +#endif +#ifdef GENERATOR_FILE +extern enum debug_struct_file debug_struct_ordinary[DINFO_USAGE_NUM_ENUMS]; +#else + enum debug_struct_file x_debug_struct_ordinary[DINFO_USAGE_NUM_ENUMS]; +#define debug_struct_ordinary global_options.x_debug_struct_ordinary +#endif +#ifdef GENERATOR_FILE +extern enum stack_check_type flag_stack_check; +#else + enum stack_check_type x_flag_stack_check; +#define flag_stack_check global_options.x_flag_stack_check +#endif +#ifdef GENERATOR_FILE +extern int *param_values; +#else + int * x_param_values; +#define param_values global_options.x_param_values +#endif +#ifdef GENERATOR_FILE +extern int flag_complex_method; +#else + int x_flag_complex_method; +#define flag_complex_method global_options.x_flag_complex_method +#endif +#ifdef GENERATOR_FILE +extern int flag_debug_asm; +#else + int x_flag_debug_asm; +#define flag_debug_asm global_options.x_flag_debug_asm +#endif +#ifdef GENERATOR_FILE +extern int flag_dump_rtl_in_asm; +#else + int x_flag_dump_rtl_in_asm; +#define flag_dump_rtl_in_asm global_options.x_flag_dump_rtl_in_asm +#endif +#ifdef GENERATOR_FILE +extern int flag_evaluation_order; +#else + int x_flag_evaluation_order; +#define flag_evaluation_order global_options.x_flag_evaluation_order +#endif +#ifdef GENERATOR_FILE +extern int flag_gen_aux_info; +#else + int x_flag_gen_aux_info; +#define flag_gen_aux_info global_options.x_flag_gen_aux_info +#endif +#ifdef GENERATOR_FILE +extern int flag_generate_lto; +#else + int x_flag_generate_lto; +#define flag_generate_lto global_options.x_flag_generate_lto +#endif +#ifdef GENERATOR_FILE +extern int flag_generate_offload; +#else + int x_flag_generate_offload; +#define flag_generate_offload global_options.x_flag_generate_offload +#endif +#ifdef GENERATOR_FILE +extern int flag_print_asm_name; +#else + int x_flag_print_asm_name; +#define flag_print_asm_name global_options.x_flag_print_asm_name +#endif +#ifdef GENERATOR_FILE +extern int flag_shlib; +#else + int x_flag_shlib; +#define flag_shlib global_options.x_flag_shlib +#endif +#ifdef GENERATOR_FILE +extern int ix86_target_flags_explicit; +#else + int x_ix86_target_flags_explicit; +#define ix86_target_flags_explicit global_options.x_ix86_target_flags_explicit +#endif +#ifdef GENERATOR_FILE +extern int main_input_baselength; +#else + int x_main_input_baselength; +#define main_input_baselength global_options.x_main_input_baselength +#endif +#ifdef GENERATOR_FILE +extern int optimize; +#else + int x_optimize; +#define optimize global_options.x_optimize +#endif +#ifdef GENERATOR_FILE +extern int optimize_debug; +#else + int x_optimize_debug; +#define optimize_debug global_options.x_optimize_debug +#endif +#ifdef GENERATOR_FILE +extern int optimize_fast; +#else + int x_optimize_fast; +#define optimize_fast global_options.x_optimize_fast +#endif +#ifdef GENERATOR_FILE +extern int optimize_size; +#else + int x_optimize_size; +#define optimize_size global_options.x_optimize_size +#endif +#ifdef GENERATOR_FILE +extern int recip_mask_explicit; +#else + int x_recip_mask_explicit; +#define recip_mask_explicit global_options.x_recip_mask_explicit +#endif +#ifdef GENERATOR_FILE +extern int rtl_dump_and_exit; +#else + int x_rtl_dump_and_exit; +#define rtl_dump_and_exit global_options.x_rtl_dump_and_exit +#endif +#ifdef GENERATOR_FILE +extern int target_flags; +#else + int x_target_flags; +#define target_flags global_options.x_target_flags +#endif +#ifdef GENERATOR_FILE +extern unsigned int flag_sanitize; +#else + unsigned int x_flag_sanitize; +#define flag_sanitize global_options.x_flag_sanitize +#endif +#ifdef GENERATOR_FILE +extern unsigned int flag_sanitize_recover; +#else + unsigned int x_flag_sanitize_recover; +#define flag_sanitize_recover global_options.x_flag_sanitize_recover +#endif +#ifdef GENERATOR_FILE +extern unsigned int help_columns; +#else + unsigned int x_help_columns; +#define help_columns global_options.x_help_columns +#endif +#ifdef GENERATOR_FILE +extern unsigned int initial_max_fld_align; +#else + unsigned int x_initial_max_fld_align; +#define initial_max_fld_align global_options.x_initial_max_fld_align +#endif +#ifdef GENERATOR_FILE +extern void *flag_instrument_functions_exclude_files; +#else + void * x_flag_instrument_functions_exclude_files; +#define flag_instrument_functions_exclude_files global_options.x_flag_instrument_functions_exclude_files +#endif +#ifdef GENERATOR_FILE +extern void *flag_instrument_functions_exclude_functions; +#else + void * x_flag_instrument_functions_exclude_functions; +#define flag_instrument_functions_exclude_functions global_options.x_flag_instrument_functions_exclude_functions +#endif +#ifdef GENERATOR_FILE +extern int help_flag; +#else + int x_help_flag; +#define help_flag global_options.x_help_flag +#endif +#ifdef GENERATOR_FILE +extern int no_sysroot_suffix; +#else + int x_no_sysroot_suffix; +#define no_sysroot_suffix global_options.x_no_sysroot_suffix +#endif +#ifdef GENERATOR_FILE +extern int flag_preprocess_only; +#else + int x_flag_preprocess_only; +#define flag_preprocess_only global_options.x_flag_preprocess_only +#endif +#ifdef GENERATOR_FILE +extern int warn_abi; +#else + int x_warn_abi; +#define warn_abi global_options.x_warn_abi +#endif +#ifdef GENERATOR_FILE +extern int warn_abi_tag; +#else + int x_warn_abi_tag; +#define warn_abi_tag global_options.x_warn_abi_tag +#endif +#ifdef GENERATOR_FILE +extern int warn_address; +#else + int x_warn_address; +#define warn_address global_options.x_warn_address +#endif +#ifdef GENERATOR_FILE +extern int warn_aggregate_return; +#else + int x_warn_aggregate_return; +#define warn_aggregate_return global_options.x_warn_aggregate_return +#endif +#ifdef GENERATOR_FILE +extern int warn_aggressive_loop_optimizations; +#else + int x_warn_aggressive_loop_optimizations; +#define warn_aggressive_loop_optimizations global_options.x_warn_aggressive_loop_optimizations +#endif +#ifdef GENERATOR_FILE +extern int warn_aliasing; +#else + int x_warn_aliasing; +#define warn_aliasing global_options.x_warn_aliasing +#endif +#ifdef GENERATOR_FILE +extern int warn_align_commons; +#else + int x_warn_align_commons; +#define warn_align_commons global_options.x_warn_align_commons +#endif +#ifdef GENERATOR_FILE +extern int warn_ampersand; +#else + int x_warn_ampersand; +#define warn_ampersand global_options.x_warn_ampersand +#endif +#ifdef GENERATOR_FILE +extern int warn_array_bounds; +#else + int x_warn_array_bounds; +#define warn_array_bounds global_options.x_warn_array_bounds +#endif +#ifdef GENERATOR_FILE +extern int warn_array_temporaries; +#else + int x_warn_array_temporaries; +#define warn_array_temporaries global_options.x_warn_array_temporaries +#endif +#ifdef GENERATOR_FILE +extern int warn_assign_intercept; +#else + int x_warn_assign_intercept; +#define warn_assign_intercept global_options.x_warn_assign_intercept +#endif +#ifdef GENERATOR_FILE +extern int warn_attributes; +#else + int x_warn_attributes; +#define warn_attributes global_options.x_warn_attributes +#endif +#ifdef GENERATOR_FILE +extern int warn_bad_function_cast; +#else + int x_warn_bad_function_cast; +#define warn_bad_function_cast global_options.x_warn_bad_function_cast +#endif +#ifdef GENERATOR_FILE +extern int warn_bool_compare; +#else + int x_warn_bool_compare; +#define warn_bool_compare global_options.x_warn_bool_compare +#endif +#ifdef GENERATOR_FILE +extern int cpp_warn_builtin_macro_redefined; +#else + int x_cpp_warn_builtin_macro_redefined; +#define cpp_warn_builtin_macro_redefined global_options.x_cpp_warn_builtin_macro_redefined +#endif +#ifdef GENERATOR_FILE +extern int warn_cxx_compat; +#else + int x_warn_cxx_compat; +#define warn_cxx_compat global_options.x_warn_cxx_compat +#endif +#ifdef GENERATOR_FILE +extern int warn_cxx0x_compat; +#else + int x_warn_cxx0x_compat; +#define warn_cxx0x_compat global_options.x_warn_cxx0x_compat +#endif +#ifdef GENERATOR_FILE +extern int warn_cxx14_compat; +#else + int x_warn_cxx14_compat; +#define warn_cxx14_compat global_options.x_warn_cxx14_compat +#endif +#ifdef GENERATOR_FILE +extern int warn_c_binding_type; +#else + int x_warn_c_binding_type; +#define warn_c_binding_type global_options.x_warn_c_binding_type +#endif +#ifdef GENERATOR_FILE +extern int warn_c90_c99_compat; +#else + int x_warn_c90_c99_compat; +#define warn_c90_c99_compat global_options.x_warn_c90_c99_compat +#endif +#ifdef GENERATOR_FILE +extern int warn_c99_c11_compat; +#else + int x_warn_c99_c11_compat; +#define warn_c99_c11_compat global_options.x_warn_c99_c11_compat +#endif +#ifdef GENERATOR_FILE +extern int warn_cast_align; +#else + int x_warn_cast_align; +#define warn_cast_align global_options.x_warn_cast_align +#endif +#ifdef GENERATOR_FILE +extern int warn_cast_qual; +#else + int x_warn_cast_qual; +#define warn_cast_qual global_options.x_warn_cast_qual +#endif +#ifdef GENERATOR_FILE +extern int warn_char_subscripts; +#else + int x_warn_char_subscripts; +#define warn_char_subscripts global_options.x_warn_char_subscripts +#endif +#ifdef GENERATOR_FILE +extern int warn_character_truncation; +#else + int x_warn_character_truncation; +#define warn_character_truncation global_options.x_warn_character_truncation +#endif +#ifdef GENERATOR_FILE +extern int warn_chkp; +#else + int x_warn_chkp; +#define warn_chkp global_options.x_warn_chkp +#endif +#ifdef GENERATOR_FILE +extern int warn_clobbered; +#else + int x_warn_clobbered; +#define warn_clobbered global_options.x_warn_clobbered +#endif +#ifdef GENERATOR_FILE +extern int cpp_warn_comment; +#else + int x_cpp_warn_comment; +#define cpp_warn_comment global_options.x_cpp_warn_comment +#endif +#ifdef GENERATOR_FILE +extern int warn_compare_reals; +#else + int x_warn_compare_reals; +#define warn_compare_reals global_options.x_warn_compare_reals +#endif +#ifdef GENERATOR_FILE +extern int warn_conditionally_supported; +#else + int x_warn_conditionally_supported; +#define warn_conditionally_supported global_options.x_warn_conditionally_supported +#endif +#ifdef GENERATOR_FILE +extern int warn_conversion; +#else + int x_warn_conversion; +#define warn_conversion global_options.x_warn_conversion +#endif +#ifdef GENERATOR_FILE +extern int warn_conversion_extra; +#else + int x_warn_conversion_extra; +#define warn_conversion_extra global_options.x_warn_conversion_extra +#endif +#ifdef GENERATOR_FILE +extern int warn_conversion_null; +#else + int x_warn_conversion_null; +#define warn_conversion_null global_options.x_warn_conversion_null +#endif +#ifdef GENERATOR_FILE +extern int warn_coverage_mismatch; +#else + int x_warn_coverage_mismatch; +#define warn_coverage_mismatch global_options.x_warn_coverage_mismatch +#endif +#ifdef GENERATOR_FILE +extern int warn_cpp; +#else + int x_warn_cpp; +#define warn_cpp global_options.x_warn_cpp +#endif +#ifdef GENERATOR_FILE +extern int warn_ctor_dtor_privacy; +#else + int x_warn_ctor_dtor_privacy; +#define warn_ctor_dtor_privacy global_options.x_warn_ctor_dtor_privacy +#endif +#ifdef GENERATOR_FILE +extern int cpp_warn_date_time; +#else + int x_cpp_warn_date_time; +#define cpp_warn_date_time global_options.x_cpp_warn_date_time +#endif +#ifdef GENERATOR_FILE +extern int warn_declaration_after_statement; +#else + int x_warn_declaration_after_statement; +#define warn_declaration_after_statement global_options.x_warn_declaration_after_statement +#endif +#ifdef GENERATOR_FILE +extern int warn_delete_incomplete; +#else + int x_warn_delete_incomplete; +#define warn_delete_incomplete global_options.x_warn_delete_incomplete +#endif +#ifdef GENERATOR_FILE +extern int warn_delnonvdtor; +#else + int x_warn_delnonvdtor; +#define warn_delnonvdtor global_options.x_warn_delnonvdtor +#endif +#ifdef GENERATOR_FILE +extern int warn_deprecated; +#else + int x_warn_deprecated; +#define warn_deprecated global_options.x_warn_deprecated +#endif +#ifdef GENERATOR_FILE +extern int warn_deprecated_decl; +#else + int x_warn_deprecated_decl; +#define warn_deprecated_decl global_options.x_warn_deprecated_decl +#endif +#ifdef GENERATOR_FILE +extern int warn_designated_init; +#else + int x_warn_designated_init; +#define warn_designated_init global_options.x_warn_designated_init +#endif +#ifdef GENERATOR_FILE +extern int warn_disabled_optimization; +#else + int x_warn_disabled_optimization; +#define warn_disabled_optimization global_options.x_warn_disabled_optimization +#endif +#ifdef GENERATOR_FILE +extern int warn_discarded_array_qualifiers; +#else + int x_warn_discarded_array_qualifiers; +#define warn_discarded_array_qualifiers global_options.x_warn_discarded_array_qualifiers +#endif +#ifdef GENERATOR_FILE +extern int warn_discarded_qualifiers; +#else + int x_warn_discarded_qualifiers; +#define warn_discarded_qualifiers global_options.x_warn_discarded_qualifiers +#endif +#ifdef GENERATOR_FILE +extern int warn_div_by_zero; +#else + int x_warn_div_by_zero; +#define warn_div_by_zero global_options.x_warn_div_by_zero +#endif +#ifdef GENERATOR_FILE +extern int warn_double_promotion; +#else + int x_warn_double_promotion; +#define warn_double_promotion global_options.x_warn_double_promotion +#endif +#ifdef GENERATOR_FILE +extern int warn_ecpp; +#else + int x_warn_ecpp; +#define warn_ecpp global_options.x_warn_ecpp +#endif +#ifdef GENERATOR_FILE +extern int warn_empty_body; +#else + int x_warn_empty_body; +#define warn_empty_body global_options.x_warn_empty_body +#endif +#ifdef GENERATOR_FILE +extern int cpp_warn_endif_labels; +#else + int x_cpp_warn_endif_labels; +#define cpp_warn_endif_labels global_options.x_cpp_warn_endif_labels +#endif +#ifdef GENERATOR_FILE +extern int warn_enum_compare; +#else + int x_warn_enum_compare; +#define warn_enum_compare global_options.x_warn_enum_compare +#endif +#ifdef GENERATOR_FILE +extern int warnings_are_errors; +#else + int x_warnings_are_errors; +#define warnings_are_errors global_options.x_warnings_are_errors +#endif +#ifdef GENERATOR_FILE +extern int extra_warnings; +#else + int x_extra_warnings; +#define extra_warnings global_options.x_extra_warnings +#endif +#ifdef GENERATOR_FILE +extern int flag_extraneous_semicolon; +#else + int x_flag_extraneous_semicolon; +#define flag_extraneous_semicolon global_options.x_flag_extraneous_semicolon +#endif +#ifdef GENERATOR_FILE +extern int flag_fatal_errors; +#else + int x_flag_fatal_errors; +#define flag_fatal_errors global_options.x_flag_fatal_errors +#endif +#ifdef GENERATOR_FILE +extern int warn_float_conversion; +#else + int x_warn_float_conversion; +#define warn_float_conversion global_options.x_warn_float_conversion +#endif +#ifdef GENERATOR_FILE +extern int warn_float_equal; +#else + int x_warn_float_equal; +#define warn_float_equal global_options.x_warn_float_equal +#endif +#ifdef GENERATOR_FILE +extern int warn_format_contains_nul; +#else + int x_warn_format_contains_nul; +#define warn_format_contains_nul global_options.x_warn_format_contains_nul +#endif +#ifdef GENERATOR_FILE +extern int warn_format_extra_args; +#else + int x_warn_format_extra_args; +#define warn_format_extra_args global_options.x_warn_format_extra_args +#endif +#ifdef GENERATOR_FILE +extern int warn_format_nonliteral; +#else + int x_warn_format_nonliteral; +#define warn_format_nonliteral global_options.x_warn_format_nonliteral +#endif +#ifdef GENERATOR_FILE +extern int warn_format_security; +#else + int x_warn_format_security; +#define warn_format_security global_options.x_warn_format_security +#endif +#ifdef GENERATOR_FILE +extern int warn_format_signedness; +#else + int x_warn_format_signedness; +#define warn_format_signedness global_options.x_warn_format_signedness +#endif +#ifdef GENERATOR_FILE +extern int warn_format_y2k; +#else + int x_warn_format_y2k; +#define warn_format_y2k global_options.x_warn_format_y2k +#endif +#ifdef GENERATOR_FILE +extern int warn_format_zero_length; +#else + int x_warn_format_zero_length; +#define warn_format_zero_length global_options.x_warn_format_zero_length +#endif +#ifdef GENERATOR_FILE +extern int warn_format; +#else + int x_warn_format; +#define warn_format global_options.x_warn_format +#endif +#ifdef GENERATOR_FILE +extern int warn_free_nonheap_object; +#else + int x_warn_free_nonheap_object; +#define warn_free_nonheap_object global_options.x_warn_free_nonheap_object +#endif +#ifdef GENERATOR_FILE +extern int warn_function_elimination; +#else + int x_warn_function_elimination; +#define warn_function_elimination global_options.x_warn_function_elimination +#endif +#ifdef GENERATOR_FILE +extern int warn_ignored_qualifiers; +#else + int x_warn_ignored_qualifiers; +#define warn_ignored_qualifiers global_options.x_warn_ignored_qualifiers +#endif +#ifdef GENERATOR_FILE +extern int warn_implicit; +#else + int x_warn_implicit; +#define warn_implicit global_options.x_warn_implicit +#endif +#ifdef GENERATOR_FILE +extern int warn_implicit_function_declaration; +#else + int x_warn_implicit_function_declaration; +#define warn_implicit_function_declaration global_options.x_warn_implicit_function_declaration +#endif +#ifdef GENERATOR_FILE +extern int warn_implicit_int; +#else + int x_warn_implicit_int; +#define warn_implicit_int global_options.x_warn_implicit_int +#endif +#ifdef GENERATOR_FILE +extern int warn_implicit_interface; +#else + int x_warn_implicit_interface; +#define warn_implicit_interface global_options.x_warn_implicit_interface +#endif +#ifdef GENERATOR_FILE +extern int warn_implicit_procedure; +#else + int x_warn_implicit_procedure; +#define warn_implicit_procedure global_options.x_warn_implicit_procedure +#endif +#ifdef GENERATOR_FILE +extern int warn_incompatible_pointer_types; +#else + int x_warn_incompatible_pointer_types; +#define warn_incompatible_pointer_types global_options.x_warn_incompatible_pointer_types +#endif +#ifdef GENERATOR_FILE +extern int warn_inh_var_ctor; +#else + int x_warn_inh_var_ctor; +#define warn_inh_var_ctor global_options.x_warn_inh_var_ctor +#endif +#ifdef GENERATOR_FILE +extern int warn_init_self; +#else + int x_warn_init_self; +#define warn_init_self global_options.x_warn_init_self +#endif +#ifdef GENERATOR_FILE +extern int warn_inline; +#else + int x_warn_inline; +#define warn_inline global_options.x_warn_inline +#endif +#ifdef GENERATOR_FILE +extern int warn_int_conversion; +#else + int x_warn_int_conversion; +#define warn_int_conversion global_options.x_warn_int_conversion +#endif +#ifdef GENERATOR_FILE +extern int warn_int_to_pointer_cast; +#else + int x_warn_int_to_pointer_cast; +#define warn_int_to_pointer_cast global_options.x_warn_int_to_pointer_cast +#endif +#ifdef GENERATOR_FILE +extern int warn_intrinsic_shadow; +#else + int x_warn_intrinsic_shadow; +#define warn_intrinsic_shadow global_options.x_warn_intrinsic_shadow +#endif +#ifdef GENERATOR_FILE +extern int warn_intrinsics_std; +#else + int x_warn_intrinsics_std; +#define warn_intrinsics_std global_options.x_warn_intrinsics_std +#endif +#ifdef GENERATOR_FILE +extern int warn_invalid_memory_model; +#else + int x_warn_invalid_memory_model; +#define warn_invalid_memory_model global_options.x_warn_invalid_memory_model +#endif +#ifdef GENERATOR_FILE +extern int warn_invalid_offsetof; +#else + int x_warn_invalid_offsetof; +#define warn_invalid_offsetof global_options.x_warn_invalid_offsetof +#endif +#ifdef GENERATOR_FILE +extern int cpp_warn_invalid_pch; +#else + int x_cpp_warn_invalid_pch; +#define cpp_warn_invalid_pch global_options.x_cpp_warn_invalid_pch +#endif +#ifdef GENERATOR_FILE +extern int warn_jump_misses_init; +#else + int x_warn_jump_misses_init; +#define warn_jump_misses_init global_options.x_warn_jump_misses_init +#endif +#ifdef GENERATOR_FILE +extern int warn_line_truncation; +#else + int x_warn_line_truncation; +#define warn_line_truncation global_options.x_warn_line_truncation +#endif +#ifdef GENERATOR_FILE +extern int cpp_warn_literal_suffix; +#else + int x_cpp_warn_literal_suffix; +#define cpp_warn_literal_suffix global_options.x_cpp_warn_literal_suffix +#endif +#ifdef GENERATOR_FILE +extern int warn_logical_not_paren; +#else + int x_warn_logical_not_paren; +#define warn_logical_not_paren global_options.x_warn_logical_not_paren +#endif +#ifdef GENERATOR_FILE +extern int warn_logical_op; +#else + int x_warn_logical_op; +#define warn_logical_op global_options.x_warn_logical_op +#endif +#ifdef GENERATOR_FILE +extern int warn_long_long; +#else + int x_warn_long_long; +#define warn_long_long global_options.x_warn_long_long +#endif +#ifdef GENERATOR_FILE +extern int warn_main; +#else + int x_warn_main; +#define warn_main global_options.x_warn_main +#endif +#ifdef GENERATOR_FILE +extern int warn_maybe_uninitialized; +#else + int x_warn_maybe_uninitialized; +#define warn_maybe_uninitialized global_options.x_warn_maybe_uninitialized +#endif +#ifdef GENERATOR_FILE +extern int warn_memset_transposed_args; +#else + int x_warn_memset_transposed_args; +#define warn_memset_transposed_args global_options.x_warn_memset_transposed_args +#endif +#ifdef GENERATOR_FILE +extern int warn_missing_braces; +#else + int x_warn_missing_braces; +#define warn_missing_braces global_options.x_warn_missing_braces +#endif +#ifdef GENERATOR_FILE +extern int warn_missing_declarations; +#else + int x_warn_missing_declarations; +#define warn_missing_declarations global_options.x_warn_missing_declarations +#endif +#ifdef GENERATOR_FILE +extern int warn_missing_field_initializers; +#else + int x_warn_missing_field_initializers; +#define warn_missing_field_initializers global_options.x_warn_missing_field_initializers +#endif +#ifdef GENERATOR_FILE +extern int cpp_warn_missing_include_dirs; +#else + int x_cpp_warn_missing_include_dirs; +#define cpp_warn_missing_include_dirs global_options.x_cpp_warn_missing_include_dirs +#endif +#ifdef GENERATOR_FILE +extern int warn_missing_parameter_type; +#else + int x_warn_missing_parameter_type; +#define warn_missing_parameter_type global_options.x_warn_missing_parameter_type +#endif +#ifdef GENERATOR_FILE +extern int warn_missing_prototypes; +#else + int x_warn_missing_prototypes; +#define warn_missing_prototypes global_options.x_warn_missing_prototypes +#endif +#ifdef GENERATOR_FILE +extern int cpp_warn_multichar; +#else + int x_cpp_warn_multichar; +#define cpp_warn_multichar global_options.x_cpp_warn_multichar +#endif +#ifdef GENERATOR_FILE +extern int warn_narrowing; +#else + int x_warn_narrowing; +#define warn_narrowing global_options.x_warn_narrowing +#endif +#ifdef GENERATOR_FILE +extern int warn_nested_externs; +#else + int x_warn_nested_externs; +#define warn_nested_externs global_options.x_warn_nested_externs +#endif +#ifdef GENERATOR_FILE +extern int warn_noexcept; +#else + int x_warn_noexcept; +#define warn_noexcept global_options.x_warn_noexcept +#endif +#ifdef GENERATOR_FILE +extern int warn_nontemplate_friend; +#else + int x_warn_nontemplate_friend; +#define warn_nontemplate_friend global_options.x_warn_nontemplate_friend +#endif +#ifdef GENERATOR_FILE +extern int warn_nonvdtor; +#else + int x_warn_nonvdtor; +#define warn_nonvdtor global_options.x_warn_nonvdtor +#endif +#ifdef GENERATOR_FILE +extern int warn_nonnull; +#else + int x_warn_nonnull; +#define warn_nonnull global_options.x_warn_nonnull +#endif +#ifdef GENERATOR_FILE +extern int cpp_warn_normalize; +#else + int x_cpp_warn_normalize; +#define cpp_warn_normalize global_options.x_cpp_warn_normalize +#endif +#ifdef GENERATOR_FILE +extern int warn_odr_violations; +#else + int x_warn_odr_violations; +#define warn_odr_violations global_options.x_warn_odr_violations +#endif +#ifdef GENERATOR_FILE +extern int warn_old_style_cast; +#else + int x_warn_old_style_cast; +#define warn_old_style_cast global_options.x_warn_old_style_cast +#endif +#ifdef GENERATOR_FILE +extern int warn_old_style_declaration; +#else + int x_warn_old_style_declaration; +#define warn_old_style_declaration global_options.x_warn_old_style_declaration +#endif +#ifdef GENERATOR_FILE +extern int warn_old_style_definition; +#else + int x_warn_old_style_definition; +#define warn_old_style_definition global_options.x_warn_old_style_definition +#endif +#ifdef GENERATOR_FILE +extern int warn_openmp_simd; +#else + int x_warn_openmp_simd; +#define warn_openmp_simd global_options.x_warn_openmp_simd +#endif +#ifdef GENERATOR_FILE +extern int flag_newer; +#else + int x_flag_newer; +#define flag_newer global_options.x_flag_newer +#endif +#ifdef GENERATOR_FILE +extern int warn_overflow; +#else + int x_warn_overflow; +#define warn_overflow global_options.x_warn_overflow +#endif +#ifdef GENERATOR_FILE +extern int warn_overlength_strings; +#else + int x_warn_overlength_strings; +#define warn_overlength_strings global_options.x_warn_overlength_strings +#endif +#ifdef GENERATOR_FILE +extern int warn_overloaded_virtual; +#else + int x_warn_overloaded_virtual; +#define warn_overloaded_virtual global_options.x_warn_overloaded_virtual +#endif +#ifdef GENERATOR_FILE +extern int warn_override_init; +#else + int x_warn_override_init; +#define warn_override_init global_options.x_warn_override_init +#endif +#ifdef GENERATOR_FILE +extern int warn_packed; +#else + int x_warn_packed; +#define warn_packed global_options.x_warn_packed +#endif +#ifdef GENERATOR_FILE +extern int warn_packed_bitfield_compat; +#else + int x_warn_packed_bitfield_compat; +#define warn_packed_bitfield_compat global_options.x_warn_packed_bitfield_compat +#endif +#ifdef GENERATOR_FILE +extern int warn_padded; +#else + int x_warn_padded; +#define warn_padded global_options.x_warn_padded +#endif +#ifdef GENERATOR_FILE +extern int warn_parentheses; +#else + int x_warn_parentheses; +#define warn_parentheses global_options.x_warn_parentheses +#endif +#ifdef GENERATOR_FILE +extern int pedantic; +#else + int x_pedantic; +#define pedantic global_options.x_pedantic +#endif +#ifdef GENERATOR_FILE +extern int warn_pedantic_ms_format; +#else + int x_warn_pedantic_ms_format; +#define warn_pedantic_ms_format global_options.x_warn_pedantic_ms_format +#endif +#ifdef GENERATOR_FILE +extern int warn_pmf2ptr; +#else + int x_warn_pmf2ptr; +#define warn_pmf2ptr global_options.x_warn_pmf2ptr +#endif +#ifdef GENERATOR_FILE +extern int warn_pointer_arith; +#else + int x_warn_pointer_arith; +#define warn_pointer_arith global_options.x_warn_pointer_arith +#endif +#ifdef GENERATOR_FILE +extern int warn_pointer_sign; +#else + int x_warn_pointer_sign; +#define warn_pointer_sign global_options.x_warn_pointer_sign +#endif +#ifdef GENERATOR_FILE +extern int warn_pointer_to_int_cast; +#else + int x_warn_pointer_to_int_cast; +#define warn_pointer_to_int_cast global_options.x_warn_pointer_to_int_cast +#endif +#ifdef GENERATOR_FILE +extern int warn_pragmas; +#else + int x_warn_pragmas; +#define warn_pragmas global_options.x_warn_pragmas +#endif +#ifdef GENERATOR_FILE +extern int warn_property_assign_default; +#else + int x_warn_property_assign_default; +#define warn_property_assign_default global_options.x_warn_property_assign_default +#endif +#ifdef GENERATOR_FILE +extern int warn_protocol; +#else + int x_warn_protocol; +#define warn_protocol global_options.x_warn_protocol +#endif +#ifdef GENERATOR_FILE +extern int warn_psabi; +#else + int x_warn_psabi; +#define warn_psabi global_options.x_warn_psabi +#endif +#ifdef GENERATOR_FILE +extern int warn_real_q_constant; +#else + int x_warn_real_q_constant; +#define warn_real_q_constant global_options.x_warn_real_q_constant +#endif +#ifdef GENERATOR_FILE +extern int warn_realloc_lhs; +#else + int x_warn_realloc_lhs; +#define warn_realloc_lhs global_options.x_warn_realloc_lhs +#endif +#ifdef GENERATOR_FILE +extern int warn_realloc_lhs_all; +#else + int x_warn_realloc_lhs_all; +#define warn_realloc_lhs_all global_options.x_warn_realloc_lhs_all +#endif +#ifdef GENERATOR_FILE +extern int warn_redundant_decls; +#else + int x_warn_redundant_decls; +#define warn_redundant_decls global_options.x_warn_redundant_decls +#endif +#ifdef GENERATOR_FILE +extern int flag_redundant; +#else + int x_flag_redundant; +#define flag_redundant global_options.x_flag_redundant +#endif +#ifdef GENERATOR_FILE +extern int warn_reorder; +#else + int x_warn_reorder; +#define warn_reorder global_options.x_warn_reorder +#endif +#ifdef GENERATOR_FILE +extern int warn_return_local_addr; +#else + int x_warn_return_local_addr; +#define warn_return_local_addr global_options.x_warn_return_local_addr +#endif +#ifdef GENERATOR_FILE +extern int warn_return_type; +#else + int x_warn_return_type; +#define warn_return_type global_options.x_warn_return_type +#endif +#ifdef GENERATOR_FILE +extern int warn_selector; +#else + int x_warn_selector; +#define warn_selector global_options.x_warn_selector +#endif +#ifdef GENERATOR_FILE +extern int warn_sequence_point; +#else + int x_warn_sequence_point; +#define warn_sequence_point global_options.x_warn_sequence_point +#endif +#ifdef GENERATOR_FILE +extern int warn_shadow; +#else + int x_warn_shadow; +#define warn_shadow global_options.x_warn_shadow +#endif +#ifdef GENERATOR_FILE +extern int warn_shadow_ivar; +#else + int x_warn_shadow_ivar; +#define warn_shadow_ivar global_options.x_warn_shadow_ivar +#endif +#ifdef GENERATOR_FILE +extern int warn_shift_count_negative; +#else + int x_warn_shift_count_negative; +#define warn_shift_count_negative global_options.x_warn_shift_count_negative +#endif +#ifdef GENERATOR_FILE +extern int warn_shift_count_overflow; +#else + int x_warn_shift_count_overflow; +#define warn_shift_count_overflow global_options.x_warn_shift_count_overflow +#endif +#ifdef GENERATOR_FILE +extern int warn_sign_compare; +#else + int x_warn_sign_compare; +#define warn_sign_compare global_options.x_warn_sign_compare +#endif +#ifdef GENERATOR_FILE +extern int warn_sign_conversion; +#else + int x_warn_sign_conversion; +#define warn_sign_conversion global_options.x_warn_sign_conversion +#endif +#ifdef GENERATOR_FILE +extern int warn_sign_promo; +#else + int x_warn_sign_promo; +#define warn_sign_promo global_options.x_warn_sign_promo +#endif +#ifdef GENERATOR_FILE +extern int warn_sized_deallocation; +#else + int x_warn_sized_deallocation; +#define warn_sized_deallocation global_options.x_warn_sized_deallocation +#endif +#ifdef GENERATOR_FILE +extern int warn_sizeof_array_argument; +#else + int x_warn_sizeof_array_argument; +#define warn_sizeof_array_argument global_options.x_warn_sizeof_array_argument +#endif +#ifdef GENERATOR_FILE +extern int warn_sizeof_pointer_memaccess; +#else + int x_warn_sizeof_pointer_memaccess; +#define warn_sizeof_pointer_memaccess global_options.x_warn_sizeof_pointer_memaccess +#endif +#ifdef GENERATOR_FILE +extern int warn_stack_protect; +#else + int x_warn_stack_protect; +#define warn_stack_protect global_options.x_warn_stack_protect +#endif +#ifdef GENERATOR_FILE +extern int warn_stack_usage; +#else + int x_warn_stack_usage; +#define warn_stack_usage global_options.x_warn_stack_usage +#endif +#ifdef GENERATOR_FILE +extern int warn_strict_aliasing; +#else + int x_warn_strict_aliasing; +#define warn_strict_aliasing global_options.x_warn_strict_aliasing +#endif +#ifdef GENERATOR_FILE +extern int warn_strict_null_sentinel; +#else + int x_warn_strict_null_sentinel; +#define warn_strict_null_sentinel global_options.x_warn_strict_null_sentinel +#endif +#ifdef GENERATOR_FILE +extern int warn_strict_overflow; +#else + int x_warn_strict_overflow; +#define warn_strict_overflow global_options.x_warn_strict_overflow +#endif +#ifdef GENERATOR_FILE +extern int warn_strict_prototypes; +#else + int x_warn_strict_prototypes; +#define warn_strict_prototypes global_options.x_warn_strict_prototypes +#endif +#ifdef GENERATOR_FILE +extern int warn_strict_selector_match; +#else + int x_warn_strict_selector_match; +#define warn_strict_selector_match global_options.x_warn_strict_selector_match +#endif +#ifdef GENERATOR_FILE +extern int warn_suggest_attribute_const; +#else + int x_warn_suggest_attribute_const; +#define warn_suggest_attribute_const global_options.x_warn_suggest_attribute_const +#endif +#ifdef GENERATOR_FILE +extern int warn_suggest_attribute_format; +#else + int x_warn_suggest_attribute_format; +#define warn_suggest_attribute_format global_options.x_warn_suggest_attribute_format +#endif +#ifdef GENERATOR_FILE +extern int warn_suggest_attribute_noreturn; +#else + int x_warn_suggest_attribute_noreturn; +#define warn_suggest_attribute_noreturn global_options.x_warn_suggest_attribute_noreturn +#endif +#ifdef GENERATOR_FILE +extern int warn_suggest_attribute_pure; +#else + int x_warn_suggest_attribute_pure; +#define warn_suggest_attribute_pure global_options.x_warn_suggest_attribute_pure +#endif +#ifdef GENERATOR_FILE +extern int warn_suggest_final_methods; +#else + int x_warn_suggest_final_methods; +#define warn_suggest_final_methods global_options.x_warn_suggest_final_methods +#endif +#ifdef GENERATOR_FILE +extern int warn_suggest_final_types; +#else + int x_warn_suggest_final_types; +#define warn_suggest_final_types global_options.x_warn_suggest_final_types +#endif +#ifdef GENERATOR_FILE +extern int warn_override; +#else + int x_warn_override; +#define warn_override global_options.x_warn_override +#endif +#ifdef GENERATOR_FILE +extern int warn_surprising; +#else + int x_warn_surprising; +#define warn_surprising global_options.x_warn_surprising +#endif +#ifdef GENERATOR_FILE +extern int warn_switch; +#else + int x_warn_switch; +#define warn_switch global_options.x_warn_switch +#endif +#ifdef GENERATOR_FILE +extern int warn_switch_bool; +#else + int x_warn_switch_bool; +#define warn_switch_bool global_options.x_warn_switch_bool +#endif +#ifdef GENERATOR_FILE +extern int warn_switch_default; +#else + int x_warn_switch_default; +#define warn_switch_default global_options.x_warn_switch_default +#endif +#ifdef GENERATOR_FILE +extern int warn_switch_enum; +#else + int x_warn_switch_enum; +#define warn_switch_enum global_options.x_warn_switch_enum +#endif +#ifdef GENERATOR_FILE +extern int warn_sync_nand; +#else + int x_warn_sync_nand; +#define warn_sync_nand global_options.x_warn_sync_nand +#endif +#ifdef GENERATOR_FILE +extern int warn_synth; +#else + int x_warn_synth; +#define warn_synth global_options.x_warn_synth +#endif +#ifdef GENERATOR_FILE +extern int warn_system_headers; +#else + int x_warn_system_headers; +#define warn_system_headers global_options.x_warn_system_headers +#endif +#ifdef GENERATOR_FILE +extern int warn_tabs; +#else + int x_warn_tabs; +#define warn_tabs global_options.x_warn_tabs +#endif +#ifdef GENERATOR_FILE +extern int warn_target_lifetime; +#else + int x_warn_target_lifetime; +#define warn_target_lifetime global_options.x_warn_target_lifetime +#endif +#ifdef GENERATOR_FILE +extern int warn_traditional; +#else + int x_warn_traditional; +#define warn_traditional global_options.x_warn_traditional +#endif +#ifdef GENERATOR_FILE +extern int warn_traditional_conversion; +#else + int x_warn_traditional_conversion; +#define warn_traditional_conversion global_options.x_warn_traditional_conversion +#endif +#ifdef GENERATOR_FILE +extern int warn_trampolines; +#else + int x_warn_trampolines; +#define warn_trampolines global_options.x_warn_trampolines +#endif +#ifdef GENERATOR_FILE +extern int cpp_warn_trigraphs; +#else + int x_cpp_warn_trigraphs; +#define cpp_warn_trigraphs global_options.x_cpp_warn_trigraphs +#endif +#ifdef GENERATOR_FILE +extern int warn_type_limits; +#else + int x_warn_type_limits; +#define warn_type_limits global_options.x_warn_type_limits +#endif +#ifdef GENERATOR_FILE +extern int warn_undeclared_selector; +#else + int x_warn_undeclared_selector; +#define warn_undeclared_selector global_options.x_warn_undeclared_selector +#endif +#ifdef GENERATOR_FILE +extern int cpp_warn_undef; +#else + int x_cpp_warn_undef; +#define cpp_warn_undef global_options.x_cpp_warn_undef +#endif +#ifdef GENERATOR_FILE +extern int warn_underflow; +#else + int x_warn_underflow; +#define warn_underflow global_options.x_warn_underflow +#endif +#ifdef GENERATOR_FILE +extern int warn_uninitialized; +#else + int x_warn_uninitialized; +#define warn_uninitialized global_options.x_warn_uninitialized +#endif +#ifdef GENERATOR_FILE +extern int warn_unknown_pragmas; +#else + int x_warn_unknown_pragmas; +#define warn_unknown_pragmas global_options.x_warn_unknown_pragmas +#endif +#ifdef GENERATOR_FILE +extern int warn_unsafe_loop_optimizations; +#else + int x_warn_unsafe_loop_optimizations; +#define warn_unsafe_loop_optimizations global_options.x_warn_unsafe_loop_optimizations +#endif +#ifdef GENERATOR_FILE +extern int warn_unsuffixed_float_constants; +#else + int x_warn_unsuffixed_float_constants; +#define warn_unsuffixed_float_constants global_options.x_warn_unsuffixed_float_constants +#endif +#ifdef GENERATOR_FILE +extern int warn_unused; +#else + int x_warn_unused; +#define warn_unused global_options.x_warn_unused +#endif +#ifdef GENERATOR_FILE +extern int warn_unused_but_set_parameter; +#else + int x_warn_unused_but_set_parameter; +#define warn_unused_but_set_parameter global_options.x_warn_unused_but_set_parameter +#endif +#ifdef GENERATOR_FILE +extern int warn_unused_but_set_variable; +#else + int x_warn_unused_but_set_variable; +#define warn_unused_but_set_variable global_options.x_warn_unused_but_set_variable +#endif +#ifdef GENERATOR_FILE +extern int warn_unused_dummy_argument; +#else + int x_warn_unused_dummy_argument; +#define warn_unused_dummy_argument global_options.x_warn_unused_dummy_argument +#endif +#ifdef GENERATOR_FILE +extern int warn_unused_function; +#else + int x_warn_unused_function; +#define warn_unused_function global_options.x_warn_unused_function +#endif +#ifdef GENERATOR_FILE +extern int warn_unused_label; +#else + int x_warn_unused_label; +#define warn_unused_label global_options.x_warn_unused_label +#endif +#ifdef GENERATOR_FILE +extern int warn_unused_local_typedefs; +#else + int x_warn_unused_local_typedefs; +#define warn_unused_local_typedefs global_options.x_warn_unused_local_typedefs +#endif +#ifdef GENERATOR_FILE +extern int cpp_warn_unused_macros; +#else + int x_cpp_warn_unused_macros; +#define cpp_warn_unused_macros global_options.x_cpp_warn_unused_macros +#endif +#ifdef GENERATOR_FILE +extern int warn_unused_parameter; +#else + int x_warn_unused_parameter; +#define warn_unused_parameter global_options.x_warn_unused_parameter +#endif +#ifdef GENERATOR_FILE +extern int warn_unused_result; +#else + int x_warn_unused_result; +#define warn_unused_result global_options.x_warn_unused_result +#endif +#ifdef GENERATOR_FILE +extern int warn_unused_value; +#else + int x_warn_unused_value; +#define warn_unused_value global_options.x_warn_unused_value +#endif +#ifdef GENERATOR_FILE +extern int warn_unused_variable; +#else + int x_warn_unused_variable; +#define warn_unused_variable global_options.x_warn_unused_variable +#endif +#ifdef GENERATOR_FILE +extern int warn_use_without_only; +#else + int x_warn_use_without_only; +#define warn_use_without_only global_options.x_warn_use_without_only +#endif +#ifdef GENERATOR_FILE +extern int warn_useless_cast; +#else + int x_warn_useless_cast; +#define warn_useless_cast global_options.x_warn_useless_cast +#endif +#ifdef GENERATOR_FILE +extern int warn_varargs; +#else + int x_warn_varargs; +#define warn_varargs global_options.x_warn_varargs +#endif +#ifdef GENERATOR_FILE +extern int cpp_warn_variadic_macros; +#else + int x_cpp_warn_variadic_macros; +#define cpp_warn_variadic_macros global_options.x_cpp_warn_variadic_macros +#endif +#ifdef GENERATOR_FILE +extern int warn_vector_operation_performance; +#else + int x_warn_vector_operation_performance; +#define warn_vector_operation_performance global_options.x_warn_vector_operation_performance +#endif +#ifdef GENERATOR_FILE +extern int warn_virtual_move_assign; +#else + int x_warn_virtual_move_assign; +#define warn_virtual_move_assign global_options.x_warn_virtual_move_assign +#endif +#ifdef GENERATOR_FILE +extern int warn_vla; +#else + int x_warn_vla; +#define warn_vla global_options.x_warn_vla +#endif +#ifdef GENERATOR_FILE +extern int warn_volatile_register_var; +#else + int x_warn_volatile_register_var; +#define warn_volatile_register_var global_options.x_warn_volatile_register_var +#endif +#ifdef GENERATOR_FILE +extern int warn_write_strings; +#else + int x_warn_write_strings; +#define warn_write_strings global_options.x_warn_write_strings +#endif +#ifdef GENERATOR_FILE +extern int warn_zero_as_null_pointer_constant; +#else + int x_warn_zero_as_null_pointer_constant; +#define warn_zero_as_null_pointer_constant global_options.x_warn_zero_as_null_pointer_constant +#endif +#ifdef GENERATOR_FILE +extern int warn_zerotrip; +#else + int x_warn_zerotrip; +#define warn_zerotrip global_options.x_warn_zerotrip +#endif +#ifdef GENERATOR_FILE +extern const char *aux_info_file_name; +#else + const char *x_aux_info_file_name; +#define aux_info_file_name global_options.x_aux_info_file_name +#endif +#ifdef GENERATOR_FILE +extern const char *aux_base_name; +#else + const char *x_aux_base_name; +#define aux_base_name global_options.x_aux_base_name +#endif +#ifdef GENERATOR_FILE +extern const char *dump_base_name; +#else + const char *x_dump_base_name; +#define dump_base_name global_options.x_dump_base_name +#endif +#ifdef GENERATOR_FILE +extern const char *dump_dir_name; +#else + const char *x_dump_dir_name; +#define dump_dir_name global_options.x_dump_dir_name +#endif +#ifdef GENERATOR_FILE +extern int flag_pic; +#else + int x_flag_pic; +#define flag_pic global_options.x_flag_pic +#endif +#ifdef GENERATOR_FILE +extern int flag_pie; +#else + int x_flag_pie; +#define flag_pie global_options.x_flag_pie +#endif +#ifdef GENERATOR_FILE +extern int flag_abi_compat_version; +#else + int x_flag_abi_compat_version; +#define flag_abi_compat_version global_options.x_flag_abi_compat_version +#endif +#ifdef GENERATOR_FILE +extern int flag_abi_version; +#else + int x_flag_abi_version; +#define flag_abi_version global_options.x_flag_abi_version +#endif +#ifdef GENERATOR_FILE +extern int flag_access_control; +#else + int x_flag_access_control; +#define flag_access_control global_options.x_flag_access_control +#endif +#ifdef GENERATOR_FILE +extern const char *ada_specs_parent; +#else + const char *x_ada_specs_parent; +#define ada_specs_parent global_options.x_ada_specs_parent +#endif +#ifdef GENERATOR_FILE +extern int flag_aggressive_function_elimination; +#else + int x_flag_aggressive_function_elimination; +#define flag_aggressive_function_elimination global_options.x_flag_aggressive_function_elimination +#endif +#ifdef GENERATOR_FILE +extern int flag_aggressive_loop_optimizations; +#else + int x_flag_aggressive_loop_optimizations; +#define flag_aggressive_loop_optimizations global_options.x_flag_aggressive_loop_optimizations +#endif +#ifdef GENERATOR_FILE +extern int flag_align_commons; +#else + int x_flag_align_commons; +#define flag_align_commons global_options.x_flag_align_commons +#endif +#ifdef GENERATOR_FILE +extern int align_functions; +#else + int x_align_functions; +#define align_functions global_options.x_align_functions +#endif +#ifdef GENERATOR_FILE +extern int align_jumps; +#else + int x_align_jumps; +#define align_jumps global_options.x_align_jumps +#endif +#ifdef GENERATOR_FILE +extern int align_labels; +#else + int x_align_labels; +#define align_labels global_options.x_align_labels +#endif +#ifdef GENERATOR_FILE +extern int align_loops; +#else + int x_align_loops; +#define align_loops global_options.x_align_loops +#endif +#ifdef GENERATOR_FILE +extern int flag_all_intrinsics; +#else + int x_flag_all_intrinsics; +#define flag_all_intrinsics global_options.x_flag_all_intrinsics +#endif +#ifdef GENERATOR_FILE +extern int flag_allow_leading_underscore; +#else + int x_flag_allow_leading_underscore; +#define flag_allow_leading_underscore global_options.x_flag_allow_leading_underscore +#endif +#ifdef GENERATOR_FILE +extern int flag_allow_parameterless_variadic_functions; +#else + int x_flag_allow_parameterless_variadic_functions; +#define flag_allow_parameterless_variadic_functions global_options.x_flag_allow_parameterless_variadic_functions +#endif +#ifdef GENERATOR_FILE +extern void *common_deferred_options; +#else + void *x_common_deferred_options; +#define common_deferred_options global_options.x_common_deferred_options +#endif +#ifdef GENERATOR_FILE +extern int flag_no_asm; +#else + int x_flag_no_asm; +#define flag_no_asm global_options.x_flag_no_asm +#endif +#ifdef GENERATOR_FILE +extern int flag_assert; +#else + int x_flag_assert; +#define flag_assert global_options.x_flag_assert +#endif +#ifdef GENERATOR_FILE +extern int flag_associative_math; +#else + int x_flag_associative_math; +#define flag_associative_math global_options.x_flag_associative_math +#endif +#ifdef GENERATOR_FILE +extern int flag_asynchronous_unwind_tables; +#else + int x_flag_asynchronous_unwind_tables; +#define flag_asynchronous_unwind_tables global_options.x_flag_asynchronous_unwind_tables +#endif +#ifdef GENERATOR_FILE +extern int flag_auto_inc_dec; +#else + int x_flag_auto_inc_dec; +#define flag_auto_inc_dec global_options.x_flag_auto_inc_dec +#endif +#ifdef GENERATOR_FILE +extern int flag_auto_profile; +#else + int x_flag_auto_profile; +#define flag_auto_profile global_options.x_flag_auto_profile +#endif +#ifdef GENERATOR_FILE +extern const char *auto_profile_file; +#else + const char *x_auto_profile_file; +#define auto_profile_file global_options.x_auto_profile_file +#endif +#ifdef GENERATOR_FILE +extern int flag_automatic; +#else + int x_flag_automatic; +#define flag_automatic global_options.x_flag_automatic +#endif +#ifdef GENERATOR_FILE +extern int flag_backslash; +#else + int x_flag_backslash; +#define flag_backslash global_options.x_flag_backslash +#endif +#ifdef GENERATOR_FILE +extern int flag_backtrace; +#else + int x_flag_backtrace; +#define flag_backtrace global_options.x_flag_backtrace +#endif +#ifdef GENERATOR_FILE +extern int flag_blas_matmul_limit; +#else + int x_flag_blas_matmul_limit; +#define flag_blas_matmul_limit global_options.x_flag_blas_matmul_limit +#endif +#ifdef GENERATOR_FILE +extern int flag_bootstrap_classes; +#else + int x_flag_bootstrap_classes; +#define flag_bootstrap_classes global_options.x_flag_bootstrap_classes +#endif +#ifdef GENERATOR_FILE +extern int flag_bounds_check; +#else + int x_flag_bounds_check; +#define flag_bounds_check global_options.x_flag_bounds_check +#endif +#ifdef GENERATOR_FILE +extern int flag_branch_on_count_reg; +#else + int x_flag_branch_on_count_reg; +#define flag_branch_on_count_reg global_options.x_flag_branch_on_count_reg +#endif +#ifdef GENERATOR_FILE +extern int flag_branch_probabilities; +#else + int x_flag_branch_probabilities; +#define flag_branch_probabilities global_options.x_flag_branch_probabilities +#endif +#ifdef GENERATOR_FILE +extern int flag_branch_target_load_optimize; +#else + int x_flag_branch_target_load_optimize; +#define flag_branch_target_load_optimize global_options.x_flag_branch_target_load_optimize +#endif +#ifdef GENERATOR_FILE +extern int flag_branch_target_load_optimize2; +#else + int x_flag_branch_target_load_optimize2; +#define flag_branch_target_load_optimize2 global_options.x_flag_branch_target_load_optimize2 +#endif +#ifdef GENERATOR_FILE +extern int flag_btr_bb_exclusive; +#else + int x_flag_btr_bb_exclusive; +#define flag_btr_bb_exclusive global_options.x_flag_btr_bb_exclusive +#endif +#ifdef GENERATOR_FILE +extern int flag_building_libgcc; +#else + int x_flag_building_libgcc; +#define flag_building_libgcc global_options.x_flag_building_libgcc +#endif +#ifdef GENERATOR_FILE +extern int flag_no_builtin; +#else + int x_flag_no_builtin; +#define flag_no_builtin global_options.x_flag_no_builtin +#endif +#ifdef GENERATOR_FILE +extern int flag_caller_saves; +#else + int x_flag_caller_saves; +#define flag_caller_saves global_options.x_flag_caller_saves +#endif +#ifdef GENERATOR_FILE +extern int flag_check_data_deps; +#else + int x_flag_check_data_deps; +#define flag_check_data_deps global_options.x_flag_check_data_deps +#endif +#ifdef GENERATOR_FILE +extern int flag_check_new; +#else + int x_flag_check_new; +#define flag_check_new global_options.x_flag_check_new +#endif +#ifdef GENERATOR_FILE +extern int flag_check_pointer_bounds; +#else + int x_flag_check_pointer_bounds; +#define flag_check_pointer_bounds global_options.x_flag_check_pointer_bounds +#endif +#ifdef GENERATOR_FILE +extern int flag_check_references; +#else + int x_flag_check_references; +#define flag_check_references global_options.x_flag_check_references +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_incomplete_type; +#else + int x_flag_chkp_incomplete_type; +#define flag_chkp_incomplete_type global_options.x_flag_chkp_incomplete_type +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_check_read; +#else + int x_flag_chkp_check_read; +#define flag_chkp_check_read global_options.x_flag_chkp_check_read +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_check_write; +#else + int x_flag_chkp_check_write; +#define flag_chkp_check_write global_options.x_flag_chkp_check_write +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_first_field_has_own_bounds; +#else + int x_flag_chkp_first_field_has_own_bounds; +#define flag_chkp_first_field_has_own_bounds global_options.x_flag_chkp_first_field_has_own_bounds +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_instrument_calls; +#else + int x_flag_chkp_instrument_calls; +#define flag_chkp_instrument_calls global_options.x_flag_chkp_instrument_calls +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_instrument_marked_only; +#else + int x_flag_chkp_instrument_marked_only; +#define flag_chkp_instrument_marked_only global_options.x_flag_chkp_instrument_marked_only +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_narrow_bounds; +#else + int x_flag_chkp_narrow_bounds; +#define flag_chkp_narrow_bounds global_options.x_flag_chkp_narrow_bounds +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_narrow_to_innermost_arrray; +#else + int x_flag_chkp_narrow_to_innermost_arrray; +#define flag_chkp_narrow_to_innermost_arrray global_options.x_flag_chkp_narrow_to_innermost_arrray +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_optimize; +#else + int x_flag_chkp_optimize; +#define flag_chkp_optimize global_options.x_flag_chkp_optimize +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_store_bounds; +#else + int x_flag_chkp_store_bounds; +#define flag_chkp_store_bounds global_options.x_flag_chkp_store_bounds +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_zero_dynamic_size_as_infinite; +#else + int x_flag_chkp_zero_dynamic_size_as_infinite; +#define flag_chkp_zero_dynamic_size_as_infinite global_options.x_flag_chkp_zero_dynamic_size_as_infinite +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_use_fast_string_functions; +#else + int x_flag_chkp_use_fast_string_functions; +#define flag_chkp_use_fast_string_functions global_options.x_flag_chkp_use_fast_string_functions +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_use_nochk_string_functions; +#else + int x_flag_chkp_use_nochk_string_functions; +#define flag_chkp_use_nochk_string_functions global_options.x_flag_chkp_use_nochk_string_functions +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_use_static_bounds; +#else + int x_flag_chkp_use_static_bounds; +#define flag_chkp_use_static_bounds global_options.x_flag_chkp_use_static_bounds +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_use_static_const_bounds; +#else + int x_flag_chkp_use_static_const_bounds; +#define flag_chkp_use_static_const_bounds global_options.x_flag_chkp_use_static_const_bounds +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_use_wrappers; +#else + int x_flag_chkp_use_wrappers; +#define flag_chkp_use_wrappers global_options.x_flag_chkp_use_wrappers +#endif +#ifdef GENERATOR_FILE +extern int flag_chkp_zero_input_bounds_for_main; +#else + int x_flag_chkp_zero_input_bounds_for_main; +#define flag_chkp_zero_input_bounds_for_main global_options.x_flag_chkp_zero_input_bounds_for_main +#endif +#ifdef GENERATOR_FILE +extern int flag_cilkplus; +#else + int x_flag_cilkplus; +#define flag_cilkplus global_options.x_flag_cilkplus +#endif +#ifdef GENERATOR_FILE +extern enum gfc_fcoarray flag_coarray; +#else + enum gfc_fcoarray x_flag_coarray; +#define flag_coarray global_options.x_flag_coarray +#endif +#ifdef GENERATOR_FILE +extern int flag_combine_stack_adjustments; +#else + int x_flag_combine_stack_adjustments; +#define flag_combine_stack_adjustments global_options.x_flag_combine_stack_adjustments +#endif +#ifdef GENERATOR_FILE +extern int flag_no_common; +#else + int x_flag_no_common; +#define flag_no_common global_options.x_flag_no_common +#endif +#ifdef GENERATOR_FILE +extern int flag_compare_debug; +#else + int x_flag_compare_debug; +#define flag_compare_debug global_options.x_flag_compare_debug +#endif +#ifdef GENERATOR_FILE +extern const char *flag_compare_debug_opt; +#else + const char *x_flag_compare_debug_opt; +#define flag_compare_debug_opt global_options.x_flag_compare_debug_opt +#endif +#ifdef GENERATOR_FILE +extern int flag_compare_elim_after_reload; +#else + int x_flag_compare_elim_after_reload; +#define flag_compare_elim_after_reload global_options.x_flag_compare_elim_after_reload +#endif +#ifdef GENERATOR_FILE +extern int flag_conserve_space; +#else + int x_flag_conserve_space; +#define flag_conserve_space global_options.x_flag_conserve_space +#endif +#ifdef GENERATOR_FILE +extern int flag_conserve_stack; +#else + int x_flag_conserve_stack; +#define flag_conserve_stack global_options.x_flag_conserve_stack +#endif +#ifdef GENERATOR_FILE +extern int max_constexpr_depth; +#else + int x_max_constexpr_depth; +#define max_constexpr_depth global_options.x_max_constexpr_depth +#endif +#ifdef GENERATOR_FILE +extern enum gfc_convert flag_convert; +#else + enum gfc_convert x_flag_convert; +#define flag_convert global_options.x_flag_convert +#endif +#ifdef GENERATOR_FILE +extern int flag_cprop_registers; +#else + int x_flag_cprop_registers; +#define flag_cprop_registers global_options.x_flag_cprop_registers +#endif +#ifdef GENERATOR_FILE +extern int flag_cray_pointer; +#else + int x_flag_cray_pointer; +#define flag_cray_pointer global_options.x_flag_cray_pointer +#endif +#ifdef GENERATOR_FILE +extern int flag_crossjumping; +#else + int x_flag_crossjumping; +#define flag_crossjumping global_options.x_flag_crossjumping +#endif +#ifdef GENERATOR_FILE +extern int flag_cse_follow_jumps; +#else + int x_flag_cse_follow_jumps; +#define flag_cse_follow_jumps global_options.x_flag_cse_follow_jumps +#endif +#ifdef GENERATOR_FILE +extern int flag_cx_fortran_rules; +#else + int x_flag_cx_fortran_rules; +#define flag_cx_fortran_rules global_options.x_flag_cx_fortran_rules +#endif +#ifdef GENERATOR_FILE +extern int flag_cx_limited_range; +#else + int x_flag_cx_limited_range; +#define flag_cx_limited_range global_options.x_flag_cx_limited_range +#endif +#ifdef GENERATOR_FILE +extern int flag_data_sections; +#else + int x_flag_data_sections; +#define flag_data_sections global_options.x_flag_data_sections +#endif +#ifdef GENERATOR_FILE +extern int flag_dce; +#else + int x_flag_dce; +#define flag_dce global_options.x_flag_dce +#endif +#ifdef GENERATOR_FILE +extern int flag_debug_types_section; +#else + int x_flag_debug_types_section; +#define flag_debug_types_section global_options.x_flag_debug_types_section +#endif +#ifdef GENERATOR_FILE +extern int flag_declone_ctor_dtor; +#else + int x_flag_declone_ctor_dtor; +#define flag_declone_ctor_dtor global_options.x_flag_declone_ctor_dtor +#endif +#ifdef GENERATOR_FILE +extern int flag_deduce_init_list; +#else + int x_flag_deduce_init_list; +#define flag_deduce_init_list global_options.x_flag_deduce_init_list +#endif +#ifdef GENERATOR_FILE +extern int flag_default_double; +#else + int x_flag_default_double; +#define flag_default_double global_options.x_flag_default_double +#endif +#ifdef GENERATOR_FILE +extern int flag_default_integer; +#else + int x_flag_default_integer; +#define flag_default_integer global_options.x_flag_default_integer +#endif +#ifdef GENERATOR_FILE +extern int flag_default_real; +#else + int x_flag_default_real; +#define flag_default_real global_options.x_flag_default_real +#endif +#ifdef GENERATOR_FILE +extern int flag_defer_pop; +#else + int x_flag_defer_pop; +#define flag_defer_pop global_options.x_flag_defer_pop +#endif +#ifdef GENERATOR_FILE +extern int flag_delayed_branch; +#else + int x_flag_delayed_branch; +#define flag_delayed_branch global_options.x_flag_delayed_branch +#endif +#ifdef GENERATOR_FILE +extern int flag_delete_dead_exceptions; +#else + int x_flag_delete_dead_exceptions; +#define flag_delete_dead_exceptions global_options.x_flag_delete_dead_exceptions +#endif +#ifdef GENERATOR_FILE +extern int flag_delete_null_pointer_checks; +#else + int x_flag_delete_null_pointer_checks; +#define flag_delete_null_pointer_checks global_options.x_flag_delete_null_pointer_checks +#endif +#ifdef GENERATOR_FILE +extern int flag_devirtualize; +#else + int x_flag_devirtualize; +#define flag_devirtualize global_options.x_flag_devirtualize +#endif +#ifdef GENERATOR_FILE +extern int flag_ltrans_devirtualize; +#else + int x_flag_ltrans_devirtualize; +#define flag_ltrans_devirtualize global_options.x_flag_ltrans_devirtualize +#endif +#ifdef GENERATOR_FILE +extern int flag_devirtualize_speculatively; +#else + int x_flag_devirtualize_speculatively; +#define flag_devirtualize_speculatively global_options.x_flag_devirtualize_speculatively +#endif +#ifdef GENERATOR_FILE +extern int flag_diagnostics_show_color; +#else + int x_flag_diagnostics_show_color; +#define flag_diagnostics_show_color global_options.x_flag_diagnostics_show_color +#endif +#ifdef GENERATOR_FILE +extern int flag_diagnostics_show_caret; +#else + int x_flag_diagnostics_show_caret; +#define flag_diagnostics_show_caret global_options.x_flag_diagnostics_show_caret +#endif +#ifdef GENERATOR_FILE +extern int flag_diagnostics_show_option; +#else + int x_flag_diagnostics_show_option; +#define flag_diagnostics_show_option global_options.x_flag_diagnostics_show_option +#endif +#ifdef GENERATOR_FILE +extern int flag_dollar_ok; +#else + int x_flag_dollar_ok; +#define flag_dollar_ok global_options.x_flag_dollar_ok +#endif +#ifdef GENERATOR_FILE +extern int flag_dse; +#else + int x_flag_dse; +#define flag_dse global_options.x_flag_dse +#endif +#ifdef GENERATOR_FILE +extern int flag_dump_ada_spec; +#else + int x_flag_dump_ada_spec; +#define flag_dump_ada_spec global_options.x_flag_dump_ada_spec +#endif +#ifdef GENERATOR_FILE +extern int flag_dump_ada_spec_slim; +#else + int x_flag_dump_ada_spec_slim; +#define flag_dump_ada_spec_slim global_options.x_flag_dump_ada_spec_slim +#endif +#ifdef GENERATOR_FILE +extern const char *flag_dump_final_insns; +#else + const char *x_flag_dump_final_insns; +#define flag_dump_final_insns global_options.x_flag_dump_final_insns +#endif +#ifdef GENERATOR_FILE +extern int flag_dump_fortran_optimized; +#else + int x_flag_dump_fortran_optimized; +#define flag_dump_fortran_optimized global_options.x_flag_dump_fortran_optimized +#endif +#ifdef GENERATOR_FILE +extern int flag_dump_fortran_original; +#else + int x_flag_dump_fortran_original; +#define flag_dump_fortran_original global_options.x_flag_dump_fortran_original +#endif +#ifdef GENERATOR_FILE +extern const char *flag_dump_go_spec; +#else + const char *x_flag_dump_go_spec; +#define flag_dump_go_spec global_options.x_flag_dump_go_spec +#endif +#ifdef GENERATOR_FILE +extern int flag_dump_noaddr; +#else + int x_flag_dump_noaddr; +#define flag_dump_noaddr global_options.x_flag_dump_noaddr +#endif +#ifdef GENERATOR_FILE +extern int flag_dump_passes; +#else + int x_flag_dump_passes; +#define flag_dump_passes global_options.x_flag_dump_passes +#endif +#ifdef GENERATOR_FILE +extern int flag_dump_unnumbered; +#else + int x_flag_dump_unnumbered; +#define flag_dump_unnumbered global_options.x_flag_dump_unnumbered +#endif +#ifdef GENERATOR_FILE +extern int flag_dump_unnumbered_links; +#else + int x_flag_dump_unnumbered_links; +#define flag_dump_unnumbered_links global_options.x_flag_dump_unnumbered_links +#endif +#ifdef GENERATOR_FILE +extern int flag_dwarf2_cfi_asm; +#else + int x_flag_dwarf2_cfi_asm; +#define flag_dwarf2_cfi_asm global_options.x_flag_dwarf2_cfi_asm +#endif +#ifdef GENERATOR_FILE +extern int flag_early_inlining; +#else + int x_flag_early_inlining; +#define flag_early_inlining global_options.x_flag_early_inlining +#endif +#ifdef GENERATOR_FILE +extern int flag_elide_constructors; +#else + int x_flag_elide_constructors; +#define flag_elide_constructors global_options.x_flag_elide_constructors +#endif +#ifdef GENERATOR_FILE +extern int flag_eliminate_dwarf2_dups; +#else + int x_flag_eliminate_dwarf2_dups; +#define flag_eliminate_dwarf2_dups global_options.x_flag_eliminate_dwarf2_dups +#endif +#ifdef GENERATOR_FILE +extern int flag_debug_only_used_symbols; +#else + int x_flag_debug_only_used_symbols; +#define flag_debug_only_used_symbols global_options.x_flag_debug_only_used_symbols +#endif +#ifdef GENERATOR_FILE +extern int flag_eliminate_unused_debug_types; +#else + int x_flag_eliminate_unused_debug_types; +#define flag_eliminate_unused_debug_types global_options.x_flag_eliminate_unused_debug_types +#endif +#ifdef GENERATOR_FILE +extern int flag_emit_class_debug_always; +#else + int x_flag_emit_class_debug_always; +#define flag_emit_class_debug_always global_options.x_flag_emit_class_debug_always +#endif +#ifdef GENERATOR_FILE +extern int flag_emit_class_files; +#else + int x_flag_emit_class_files; +#define flag_emit_class_files global_options.x_flag_emit_class_files +#endif +#ifdef GENERATOR_FILE +extern int flag_enforce_eh_specs; +#else + int x_flag_enforce_eh_specs; +#define flag_enforce_eh_specs global_options.x_flag_enforce_eh_specs +#endif +#ifdef GENERATOR_FILE +extern int flag_exceptions; +#else + int x_flag_exceptions; +#define flag_exceptions global_options.x_flag_exceptions +#endif +#ifdef GENERATOR_FILE +extern enum excess_precision flag_excess_precision_cmdline; +#else + enum excess_precision x_flag_excess_precision_cmdline; +#define flag_excess_precision_cmdline global_options.x_flag_excess_precision_cmdline +#endif +#ifdef GENERATOR_FILE +extern int flag_expensive_optimizations; +#else + int x_flag_expensive_optimizations; +#define flag_expensive_optimizations global_options.x_flag_expensive_optimizations +#endif +#ifdef GENERATOR_FILE +extern int flag_extern_tls_init; +#else + int x_flag_extern_tls_init; +#define flag_extern_tls_init global_options.x_flag_extern_tls_init +#endif +#ifdef GENERATOR_FILE +extern int flag_external_blas; +#else + int x_flag_external_blas; +#define flag_external_blas global_options.x_flag_external_blas +#endif +#ifdef GENERATOR_FILE +extern int flag_f2c; +#else + int x_flag_f2c; +#define flag_f2c global_options.x_flag_f2c +#endif +#ifdef GENERATOR_FILE +extern int flag_fat_lto_objects; +#else + int x_flag_fat_lto_objects; +#define flag_fat_lto_objects global_options.x_flag_fat_lto_objects +#endif +#ifdef GENERATOR_FILE +extern int flag_filelist_file; +#else + int x_flag_filelist_file; +#define flag_filelist_file global_options.x_flag_filelist_file +#endif +#ifdef GENERATOR_FILE +extern int flag_finite_math_only; +#else + int x_flag_finite_math_only; +#define flag_finite_math_only global_options.x_flag_finite_math_only +#endif +#ifdef GENERATOR_FILE +extern int flag_fixed_line_length; +#else + int x_flag_fixed_line_length; +#define flag_fixed_line_length global_options.x_flag_fixed_line_length +#endif +#ifdef GENERATOR_FILE +extern int flag_float_store; +#else + int x_flag_float_store; +#define flag_float_store global_options.x_flag_float_store +#endif +#ifdef GENERATOR_FILE +extern int flag_new_for_scope; +#else + int x_flag_new_for_scope; +#define flag_new_for_scope global_options.x_flag_new_for_scope +#endif +#ifdef GENERATOR_FILE +extern int flag_force_classes_archive_check; +#else + int x_flag_force_classes_archive_check; +#define flag_force_classes_archive_check global_options.x_flag_force_classes_archive_check +#endif +#ifdef GENERATOR_FILE +extern int flag_forward_propagate; +#else + int x_flag_forward_propagate; +#define flag_forward_propagate global_options.x_flag_forward_propagate +#endif +#ifdef GENERATOR_FILE +extern enum fp_contract_mode flag_fp_contract_mode; +#else + enum fp_contract_mode x_flag_fp_contract_mode; +#define flag_fp_contract_mode global_options.x_flag_fp_contract_mode +#endif +#ifdef GENERATOR_FILE +extern int flag_free_line_length; +#else + int x_flag_free_line_length; +#define flag_free_line_length global_options.x_flag_free_line_length +#endif +#ifdef GENERATOR_FILE +extern int flag_friend_injection; +#else + int x_flag_friend_injection; +#define flag_friend_injection global_options.x_flag_friend_injection +#endif +#ifdef GENERATOR_FILE +extern int flag_frontend_optimize; +#else + int x_flag_frontend_optimize; +#define flag_frontend_optimize global_options.x_flag_frontend_optimize +#endif +#ifdef GENERATOR_FILE +extern int flag_no_function_cse; +#else + int x_flag_no_function_cse; +#define flag_no_function_cse global_options.x_flag_no_function_cse +#endif +#ifdef GENERATOR_FILE +extern int flag_function_sections; +#else + int x_flag_function_sections; +#define flag_function_sections global_options.x_flag_function_sections +#endif +#ifdef GENERATOR_FILE +extern int flag_gcse; +#else + int x_flag_gcse; +#define flag_gcse global_options.x_flag_gcse +#endif +#ifdef GENERATOR_FILE +extern int flag_gcse_after_reload; +#else + int x_flag_gcse_after_reload; +#define flag_gcse_after_reload global_options.x_flag_gcse_after_reload +#endif +#ifdef GENERATOR_FILE +extern int flag_gcse_las; +#else + int x_flag_gcse_las; +#define flag_gcse_las global_options.x_flag_gcse_las +#endif +#ifdef GENERATOR_FILE +extern int flag_gcse_lm; +#else + int x_flag_gcse_lm; +#define flag_gcse_lm global_options.x_flag_gcse_lm +#endif +#ifdef GENERATOR_FILE +extern int flag_gcse_sm; +#else + int x_flag_gcse_sm; +#define flag_gcse_sm global_options.x_flag_gcse_sm +#endif +#ifdef GENERATOR_FILE +extern int flag_no_gnu_keywords; +#else + int x_flag_no_gnu_keywords; +#define flag_no_gnu_keywords global_options.x_flag_no_gnu_keywords +#endif +#ifdef GENERATOR_FILE +extern int flag_next_runtime; +#else + int x_flag_next_runtime; +#define flag_next_runtime global_options.x_flag_next_runtime +#endif +#ifdef GENERATOR_FILE +extern int flag_tm; +#else + int x_flag_tm; +#define flag_tm global_options.x_flag_tm +#endif +#ifdef GENERATOR_FILE +extern int flag_gnu_unique; +#else + int x_flag_gnu_unique; +#define flag_gnu_unique global_options.x_flag_gnu_unique +#endif +#ifdef GENERATOR_FILE +extern int flag_gnu89_inline; +#else + int x_flag_gnu89_inline; +#define flag_gnu89_inline global_options.x_flag_gnu89_inline +#endif +#ifdef GENERATOR_FILE +extern int go_check_divide_overflow; +#else + int x_go_check_divide_overflow; +#define go_check_divide_overflow global_options.x_go_check_divide_overflow +#endif +#ifdef GENERATOR_FILE +extern int go_check_divide_zero; +#else + int x_go_check_divide_zero; +#define go_check_divide_zero global_options.x_go_check_divide_zero +#endif +#ifdef GENERATOR_FILE +extern int flag_graphite; +#else + int x_flag_graphite; +#define flag_graphite global_options.x_flag_graphite +#endif +#ifdef GENERATOR_FILE +extern int flag_graphite_identity; +#else + int x_flag_graphite_identity; +#define flag_graphite_identity global_options.x_flag_graphite_identity +#endif +#ifdef GENERATOR_FILE +extern int flag_guess_branch_prob; +#else + int x_flag_guess_branch_prob; +#define flag_guess_branch_prob global_options.x_flag_guess_branch_prob +#endif +#ifdef GENERATOR_FILE +extern int flag_hash_synchronization; +#else + int x_flag_hash_synchronization; +#define flag_hash_synchronization global_options.x_flag_hash_synchronization +#endif +#ifdef GENERATOR_FILE +extern int flag_hoist_adjacent_loads; +#else + int x_flag_hoist_adjacent_loads; +#define flag_hoist_adjacent_loads global_options.x_flag_hoist_adjacent_loads +#endif +#ifdef GENERATOR_FILE +extern int flag_no_ident; +#else + int x_flag_no_ident; +#define flag_no_ident global_options.x_flag_no_ident +#endif +#ifdef GENERATOR_FILE +extern int flag_if_conversion; +#else + int x_flag_if_conversion; +#define flag_if_conversion global_options.x_flag_if_conversion +#endif +#ifdef GENERATOR_FILE +extern int flag_if_conversion2; +#else + int x_flag_if_conversion2; +#define flag_if_conversion2 global_options.x_flag_if_conversion2 +#endif +#ifdef GENERATOR_FILE +extern int flag_implement_inlines; +#else + int x_flag_implement_inlines; +#define flag_implement_inlines global_options.x_flag_implement_inlines +#endif +#ifdef GENERATOR_FILE +extern int flag_implicit_inline_templates; +#else + int x_flag_implicit_inline_templates; +#define flag_implicit_inline_templates global_options.x_flag_implicit_inline_templates +#endif +#ifdef GENERATOR_FILE +extern int flag_implicit_none; +#else + int x_flag_implicit_none; +#define flag_implicit_none global_options.x_flag_implicit_none +#endif +#ifdef GENERATOR_FILE +extern int flag_implicit_templates; +#else + int x_flag_implicit_templates; +#define flag_implicit_templates global_options.x_flag_implicit_templates +#endif +#ifdef GENERATOR_FILE +extern int flag_indirect_classes; +#else + int x_flag_indirect_classes; +#define flag_indirect_classes global_options.x_flag_indirect_classes +#endif +#ifdef GENERATOR_FILE +extern int flag_indirect_dispatch; +#else + int x_flag_indirect_dispatch; +#define flag_indirect_dispatch global_options.x_flag_indirect_dispatch +#endif +#ifdef GENERATOR_FILE +extern int flag_indirect_inlining; +#else + int x_flag_indirect_inlining; +#define flag_indirect_inlining global_options.x_flag_indirect_inlining +#endif +#ifdef GENERATOR_FILE +extern int flag_inhibit_size_directive; +#else + int x_flag_inhibit_size_directive; +#define flag_inhibit_size_directive global_options.x_flag_inhibit_size_directive +#endif +#ifdef GENERATOR_FILE +extern enum gfc_init_local_real flag_init_real; +#else + enum gfc_init_local_real x_flag_init_real; +#define flag_init_real global_options.x_flag_init_real +#endif +#ifdef GENERATOR_FILE +extern int flag_no_inline; +#else + int x_flag_no_inline; +#define flag_no_inline global_options.x_flag_no_inline +#endif +#ifdef GENERATOR_FILE +extern int flag_inline_atomics; +#else + int x_flag_inline_atomics; +#define flag_inline_atomics global_options.x_flag_inline_atomics +#endif +#ifdef GENERATOR_FILE +extern int flag_inline_functions; +#else + int x_flag_inline_functions; +#define flag_inline_functions global_options.x_flag_inline_functions +#endif +#ifdef GENERATOR_FILE +extern int flag_inline_functions_called_once; +#else + int x_flag_inline_functions_called_once; +#define flag_inline_functions_called_once global_options.x_flag_inline_functions_called_once +#endif +#ifdef GENERATOR_FILE +extern int flag_inline_small_functions; +#else + int x_flag_inline_small_functions; +#define flag_inline_small_functions global_options.x_flag_inline_small_functions +#endif +#ifdef GENERATOR_FILE +extern int flag_instrument_function_entry_exit; +#else + int x_flag_instrument_function_entry_exit; +#define flag_instrument_function_entry_exit global_options.x_flag_instrument_function_entry_exit +#endif +#ifdef GENERATOR_FILE +extern int flag_integer4_kind; +#else + int x_flag_integer4_kind; +#define flag_integer4_kind global_options.x_flag_integer4_kind +#endif +#ifdef GENERATOR_FILE +extern int flag_ipa_cp; +#else + int x_flag_ipa_cp; +#define flag_ipa_cp global_options.x_flag_ipa_cp +#endif +#ifdef GENERATOR_FILE +extern int flag_ipa_cp_alignment; +#else + int x_flag_ipa_cp_alignment; +#define flag_ipa_cp_alignment global_options.x_flag_ipa_cp_alignment +#endif +#ifdef GENERATOR_FILE +extern int flag_ipa_cp_clone; +#else + int x_flag_ipa_cp_clone; +#define flag_ipa_cp_clone global_options.x_flag_ipa_cp_clone +#endif +#ifdef GENERATOR_FILE +extern int flag_ipa_icf; +#else + int x_flag_ipa_icf; +#define flag_ipa_icf global_options.x_flag_ipa_icf +#endif +#ifdef GENERATOR_FILE +extern int flag_ipa_icf_functions; +#else + int x_flag_ipa_icf_functions; +#define flag_ipa_icf_functions global_options.x_flag_ipa_icf_functions +#endif +#ifdef GENERATOR_FILE +extern int flag_ipa_icf_variables; +#else + int x_flag_ipa_icf_variables; +#define flag_ipa_icf_variables global_options.x_flag_ipa_icf_variables +#endif +#ifdef GENERATOR_FILE +extern int flag_ipa_profile; +#else + int x_flag_ipa_profile; +#define flag_ipa_profile global_options.x_flag_ipa_profile +#endif +#ifdef GENERATOR_FILE +extern int flag_ipa_pta; +#else + int x_flag_ipa_pta; +#define flag_ipa_pta global_options.x_flag_ipa_pta +#endif +#ifdef GENERATOR_FILE +extern int flag_ipa_pure_const; +#else + int x_flag_ipa_pure_const; +#define flag_ipa_pure_const global_options.x_flag_ipa_pure_const +#endif +#ifdef GENERATOR_FILE +extern int flag_ipa_ra; +#else + int x_flag_ipa_ra; +#define flag_ipa_ra global_options.x_flag_ipa_ra +#endif +#ifdef GENERATOR_FILE +extern int flag_ipa_reference; +#else + int x_flag_ipa_reference; +#define flag_ipa_reference global_options.x_flag_ipa_reference +#endif +#ifdef GENERATOR_FILE +extern int flag_ipa_sra; +#else + int x_flag_ipa_sra; +#define flag_ipa_sra global_options.x_flag_ipa_sra +#endif +#ifdef GENERATOR_FILE +extern enum ira_algorithm flag_ira_algorithm; +#else + enum ira_algorithm x_flag_ira_algorithm; +#define flag_ira_algorithm global_options.x_flag_ira_algorithm +#endif +#ifdef GENERATOR_FILE +extern int flag_ira_hoist_pressure; +#else + int x_flag_ira_hoist_pressure; +#define flag_ira_hoist_pressure global_options.x_flag_ira_hoist_pressure +#endif +#ifdef GENERATOR_FILE +extern int flag_ira_loop_pressure; +#else + int x_flag_ira_loop_pressure; +#define flag_ira_loop_pressure global_options.x_flag_ira_loop_pressure +#endif +#ifdef GENERATOR_FILE +extern enum ira_region flag_ira_region; +#else + enum ira_region x_flag_ira_region; +#define flag_ira_region global_options.x_flag_ira_region +#endif +#ifdef GENERATOR_FILE +extern int flag_ira_share_save_slots; +#else + int x_flag_ira_share_save_slots; +#define flag_ira_share_save_slots global_options.x_flag_ira_share_save_slots +#endif +#ifdef GENERATOR_FILE +extern int flag_ira_share_spill_slots; +#else + int x_flag_ira_share_spill_slots; +#define flag_ira_share_spill_slots global_options.x_flag_ira_share_spill_slots +#endif +#ifdef GENERATOR_FILE +extern int flag_ira_verbose; +#else + int x_flag_ira_verbose; +#define flag_ira_verbose global_options.x_flag_ira_verbose +#endif +#ifdef GENERATOR_FILE +extern int flag_isolate_erroneous_paths_attribute; +#else + int x_flag_isolate_erroneous_paths_attribute; +#define flag_isolate_erroneous_paths_attribute global_options.x_flag_isolate_erroneous_paths_attribute +#endif +#ifdef GENERATOR_FILE +extern int flag_isolate_erroneous_paths_dereference; +#else + int x_flag_isolate_erroneous_paths_dereference; +#define flag_isolate_erroneous_paths_dereference global_options.x_flag_isolate_erroneous_paths_dereference +#endif +#ifdef GENERATOR_FILE +extern enum ivar_visibility default_ivar_visibility; +#else + enum ivar_visibility x_default_ivar_visibility; +#define default_ivar_visibility global_options.x_default_ivar_visibility +#endif +#ifdef GENERATOR_FILE +extern int flag_ivopts; +#else + int x_flag_ivopts; +#define flag_ivopts global_options.x_flag_ivopts +#endif +#ifdef GENERATOR_FILE +extern int flag_jni; +#else + int x_flag_jni; +#define flag_jni global_options.x_flag_jni +#endif +#ifdef GENERATOR_FILE +extern int flag_jump_tables; +#else + int x_flag_jump_tables; +#define flag_jump_tables global_options.x_flag_jump_tables +#endif +#ifdef GENERATOR_FILE +extern int flag_keep_inline_dllexport; +#else + int x_flag_keep_inline_dllexport; +#define flag_keep_inline_dllexport global_options.x_flag_keep_inline_dllexport +#endif +#ifdef GENERATOR_FILE +extern int flag_keep_inline_functions; +#else + int x_flag_keep_inline_functions; +#define flag_keep_inline_functions global_options.x_flag_keep_inline_functions +#endif +#ifdef GENERATOR_FILE +extern int flag_keep_static_consts; +#else + int x_flag_keep_static_consts; +#define flag_keep_static_consts global_options.x_flag_keep_static_consts +#endif +#ifdef GENERATOR_FILE +extern int flag_lax_vector_conversions; +#else + int x_flag_lax_vector_conversions; +#define flag_lax_vector_conversions global_options.x_flag_lax_vector_conversions +#endif +#ifdef GENERATOR_FILE +extern int flag_leading_underscore; +#else + int x_flag_leading_underscore; +#define flag_leading_underscore global_options.x_flag_leading_underscore +#endif +#ifdef GENERATOR_FILE +extern int flag_lifetime_dse; +#else + int x_flag_lifetime_dse; +#define flag_lifetime_dse global_options.x_flag_lifetime_dse +#endif +#ifdef GENERATOR_FILE +extern int flag_live_range_shrinkage; +#else + int x_flag_live_range_shrinkage; +#define flag_live_range_shrinkage global_options.x_flag_live_range_shrinkage +#endif +#ifdef GENERATOR_FILE +extern int flag_local_ivars; +#else + int x_flag_local_ivars; +#define flag_local_ivars global_options.x_flag_local_ivars +#endif +#ifdef GENERATOR_FILE +extern int flag_loop_block; +#else + int x_flag_loop_block; +#define flag_loop_block global_options.x_flag_loop_block +#endif +#ifdef GENERATOR_FILE +extern int flag_loop_interchange; +#else + int x_flag_loop_interchange; +#define flag_loop_interchange global_options.x_flag_loop_interchange +#endif +#ifdef GENERATOR_FILE +extern int flag_loop_optimize_isl; +#else + int x_flag_loop_optimize_isl; +#define flag_loop_optimize_isl global_options.x_flag_loop_optimize_isl +#endif +#ifdef GENERATOR_FILE +extern int flag_loop_parallelize_all; +#else + int x_flag_loop_parallelize_all; +#define flag_loop_parallelize_all global_options.x_flag_loop_parallelize_all +#endif +#ifdef GENERATOR_FILE +extern int flag_loop_strip_mine; +#else + int x_flag_loop_strip_mine; +#define flag_loop_strip_mine global_options.x_flag_loop_strip_mine +#endif +#ifdef GENERATOR_FILE +extern int flag_loop_unroll_jam; +#else + int x_flag_loop_unroll_jam; +#define flag_loop_unroll_jam global_options.x_flag_loop_unroll_jam +#endif +#ifdef GENERATOR_FILE +extern int flag_lra_remat; +#else + int x_flag_lra_remat; +#define flag_lra_remat global_options.x_flag_lra_remat +#endif +#ifdef GENERATOR_FILE +extern int flag_lto_compression_level; +#else + int x_flag_lto_compression_level; +#define flag_lto_compression_level global_options.x_flag_lto_compression_level +#endif +#ifdef GENERATOR_FILE +extern int flag_lto_odr_type_mering; +#else + int x_flag_lto_odr_type_mering; +#define flag_lto_odr_type_mering global_options.x_flag_lto_odr_type_mering +#endif +#ifdef GENERATOR_FILE +extern enum lto_partition_model flag_lto_partition; +#else + enum lto_partition_model x_flag_lto_partition; +#define flag_lto_partition global_options.x_flag_lto_partition +#endif +#ifdef GENERATOR_FILE +extern int flag_lto_report; +#else + int x_flag_lto_report; +#define flag_lto_report global_options.x_flag_lto_report +#endif +#ifdef GENERATOR_FILE +extern int flag_lto_report_wpa; +#else + int x_flag_lto_report_wpa; +#define flag_lto_report_wpa global_options.x_flag_lto_report_wpa +#endif +#ifdef GENERATOR_FILE +extern const char *flag_lto; +#else + const char *x_flag_lto; +#define flag_lto global_options.x_flag_lto +#endif +#ifdef GENERATOR_FILE +extern int flag_ltrans; +#else + int x_flag_ltrans; +#define flag_ltrans global_options.x_flag_ltrans +#endif +#ifdef GENERATOR_FILE +extern const char *ltrans_output_list; +#else + const char *x_ltrans_output_list; +#define ltrans_output_list global_options.x_ltrans_output_list +#endif +#ifdef GENERATOR_FILE +extern int flag_errno_math; +#else + int x_flag_errno_math; +#define flag_errno_math global_options.x_flag_errno_math +#endif +#ifdef GENERATOR_FILE +extern int flag_max_array_constructor; +#else + int x_flag_max_array_constructor; +#define flag_max_array_constructor global_options.x_flag_max_array_constructor +#endif +#ifdef GENERATOR_FILE +extern int flag_max_errors; +#else + int x_flag_max_errors; +#define flag_max_errors global_options.x_flag_max_errors +#endif +#ifdef GENERATOR_FILE +extern int flag_max_stack_var_size; +#else + int x_flag_max_stack_var_size; +#define flag_max_stack_var_size global_options.x_flag_max_stack_var_size +#endif +#ifdef GENERATOR_FILE +extern int flag_max_subrecord_length; +#else + int x_flag_max_subrecord_length; +#define flag_max_subrecord_length global_options.x_flag_max_subrecord_length +#endif +#ifdef GENERATOR_FILE +extern int mem_report; +#else + int x_mem_report; +#define mem_report global_options.x_mem_report +#endif +#ifdef GENERATOR_FILE +extern int mem_report_wpa; +#else + int x_mem_report_wpa; +#define mem_report_wpa global_options.x_mem_report_wpa +#endif +#ifdef GENERATOR_FILE +extern int flag_merge_constants; +#else + int x_flag_merge_constants; +#define flag_merge_constants global_options.x_flag_merge_constants +#endif +#ifdef GENERATOR_FILE +extern int flag_merge_debug_strings; +#else + int x_flag_merge_debug_strings; +#define flag_merge_debug_strings global_options.x_flag_merge_debug_strings +#endif +#ifdef GENERATOR_FILE +extern int flag_module_private; +#else + int x_flag_module_private; +#define flag_module_private global_options.x_flag_module_private +#endif +#ifdef GENERATOR_FILE +extern int flag_modulo_sched; +#else + int x_flag_modulo_sched; +#define flag_modulo_sched global_options.x_flag_modulo_sched +#endif +#ifdef GENERATOR_FILE +extern int flag_modulo_sched_allow_regmoves; +#else + int x_flag_modulo_sched_allow_regmoves; +#define flag_modulo_sched_allow_regmoves global_options.x_flag_modulo_sched_allow_regmoves +#endif +#ifdef GENERATOR_FILE +extern int flag_move_loop_invariants; +#else + int x_flag_move_loop_invariants; +#define flag_move_loop_invariants global_options.x_flag_move_loop_invariants +#endif +#ifdef GENERATOR_FILE +extern int flag_ms_extensions; +#else + int x_flag_ms_extensions; +#define flag_ms_extensions global_options.x_flag_ms_extensions +#endif +#ifdef GENERATOR_FILE +extern int flag_nil_receivers; +#else + int x_flag_nil_receivers; +#define flag_nil_receivers global_options.x_flag_nil_receivers +#endif +#ifdef GENERATOR_FILE +extern int flag_non_call_exceptions; +#else + int x_flag_non_call_exceptions; +#define flag_non_call_exceptions global_options.x_flag_non_call_exceptions +#endif +#ifdef GENERATOR_FILE +extern int flag_no_nonansi_builtin; +#else + int x_flag_no_nonansi_builtin; +#define flag_no_nonansi_builtin global_options.x_flag_no_nonansi_builtin +#endif +#ifdef GENERATOR_FILE +extern int flag_nothrow_opt; +#else + int x_flag_nothrow_opt; +#define flag_nothrow_opt global_options.x_flag_nothrow_opt +#endif +#ifdef GENERATOR_FILE +extern int flag_objc_abi; +#else + int x_flag_objc_abi; +#define flag_objc_abi global_options.x_flag_objc_abi +#endif +#ifdef GENERATOR_FILE +extern int flag_objc_call_cxx_cdtors; +#else + int x_flag_objc_call_cxx_cdtors; +#define flag_objc_call_cxx_cdtors global_options.x_flag_objc_call_cxx_cdtors +#endif +#ifdef GENERATOR_FILE +extern int flag_objc_direct_dispatch; +#else + int x_flag_objc_direct_dispatch; +#define flag_objc_direct_dispatch global_options.x_flag_objc_direct_dispatch +#endif +#ifdef GENERATOR_FILE +extern int flag_objc_exceptions; +#else + int x_flag_objc_exceptions; +#define flag_objc_exceptions global_options.x_flag_objc_exceptions +#endif +#ifdef GENERATOR_FILE +extern int flag_objc_gc; +#else + int x_flag_objc_gc; +#define flag_objc_gc global_options.x_flag_objc_gc +#endif +#ifdef GENERATOR_FILE +extern int flag_objc_nilcheck; +#else + int x_flag_objc_nilcheck; +#define flag_objc_nilcheck global_options.x_flag_objc_nilcheck +#endif +#ifdef GENERATOR_FILE +extern int flag_objc_sjlj_exceptions; +#else + int x_flag_objc_sjlj_exceptions; +#define flag_objc_sjlj_exceptions global_options.x_flag_objc_sjlj_exceptions +#endif +#ifdef GENERATOR_FILE +extern int flag_objc1_only; +#else + int x_flag_objc1_only; +#define flag_objc1_only global_options.x_flag_objc1_only +#endif +#ifdef GENERATOR_FILE +extern enum offload_abi flag_offload_abi; +#else + enum offload_abi x_flag_offload_abi; +#define flag_offload_abi global_options.x_flag_offload_abi +#endif +#ifdef GENERATOR_FILE +extern int flag_omit_frame_pointer; +#else + int x_flag_omit_frame_pointer; +#define flag_omit_frame_pointer global_options.x_flag_omit_frame_pointer +#endif +#ifdef GENERATOR_FILE +extern int flag_openacc; +#else + int x_flag_openacc; +#define flag_openacc global_options.x_flag_openacc +#endif +#ifdef GENERATOR_FILE +extern int flag_openmp; +#else + int x_flag_openmp; +#define flag_openmp global_options.x_flag_openmp +#endif +#ifdef GENERATOR_FILE +extern int flag_openmp_simd; +#else + int x_flag_openmp_simd; +#define flag_openmp_simd global_options.x_flag_openmp_simd +#endif +#ifdef GENERATOR_FILE +extern int flag_opt_info; +#else + int x_flag_opt_info; +#define flag_opt_info global_options.x_flag_opt_info +#endif +#ifdef GENERATOR_FILE +extern int flag_optimize_sibling_calls; +#else + int x_flag_optimize_sibling_calls; +#define flag_optimize_sibling_calls global_options.x_flag_optimize_sibling_calls +#endif +#ifdef GENERATOR_FILE +extern int flag_optimize_sci; +#else + int x_flag_optimize_sci; +#define flag_optimize_sci global_options.x_flag_optimize_sci +#endif +#ifdef GENERATOR_FILE +extern int flag_optimize_strlen; +#else + int x_flag_optimize_strlen; +#define flag_optimize_strlen global_options.x_flag_optimize_strlen +#endif +#ifdef GENERATOR_FILE +extern int flag_pack_derived; +#else + int x_flag_pack_derived; +#define flag_pack_derived global_options.x_flag_pack_derived +#endif +#ifdef GENERATOR_FILE +extern int flag_pack_struct; +#else + int x_flag_pack_struct; +#define flag_pack_struct global_options.x_flag_pack_struct +#endif +#ifdef GENERATOR_FILE +extern int flag_partial_inlining; +#else + int x_flag_partial_inlining; +#define flag_partial_inlining global_options.x_flag_partial_inlining +#endif +#ifdef GENERATOR_FILE +extern int flag_pcc_struct_return; +#else + int x_flag_pcc_struct_return; +#define flag_pcc_struct_return global_options.x_flag_pcc_struct_return +#endif +#ifdef GENERATOR_FILE +extern int flag_peel_loops; +#else + int x_flag_peel_loops; +#define flag_peel_loops global_options.x_flag_peel_loops +#endif +#ifdef GENERATOR_FILE +extern int flag_no_peephole; +#else + int x_flag_no_peephole; +#define flag_no_peephole global_options.x_flag_no_peephole +#endif +#ifdef GENERATOR_FILE +extern int flag_peephole2; +#else + int x_flag_peephole2; +#define flag_peephole2 global_options.x_flag_peephole2 +#endif +#ifdef GENERATOR_FILE +extern int flag_permissive; +#else + int x_flag_permissive; +#define flag_permissive global_options.x_flag_permissive +#endif +#ifdef GENERATOR_FILE +extern int flag_plan9_extensions; +#else + int x_flag_plan9_extensions; +#define flag_plan9_extensions global_options.x_flag_plan9_extensions +#endif +#ifdef GENERATOR_FILE +extern int post_ipa_mem_report; +#else + int x_post_ipa_mem_report; +#define post_ipa_mem_report global_options.x_post_ipa_mem_report +#endif +#ifdef GENERATOR_FILE +extern int pre_ipa_mem_report; +#else + int x_pre_ipa_mem_report; +#define pre_ipa_mem_report global_options.x_pre_ipa_mem_report +#endif +#ifdef GENERATOR_FILE +extern int flag_predictive_commoning; +#else + int x_flag_predictive_commoning; +#define flag_predictive_commoning global_options.x_flag_predictive_commoning +#endif +#ifdef GENERATOR_FILE +extern int flag_prefetch_loop_arrays; +#else + int x_flag_prefetch_loop_arrays; +#define flag_prefetch_loop_arrays global_options.x_flag_prefetch_loop_arrays +#endif +#ifdef GENERATOR_FILE +extern int flag_pretty_templates; +#else + int x_flag_pretty_templates; +#define flag_pretty_templates global_options.x_flag_pretty_templates +#endif +#ifdef GENERATOR_FILE +extern int profile_flag; +#else + int x_profile_flag; +#define profile_flag global_options.x_profile_flag +#endif +#ifdef GENERATOR_FILE +extern int profile_arc_flag; +#else + int x_profile_arc_flag; +#define profile_arc_flag global_options.x_profile_arc_flag +#endif +#ifdef GENERATOR_FILE +extern int flag_profile_correction; +#else + int x_flag_profile_correction; +#define flag_profile_correction global_options.x_flag_profile_correction +#endif +#ifdef GENERATOR_FILE +extern const char *profile_data_prefix; +#else + const char *x_profile_data_prefix; +#define profile_data_prefix global_options.x_profile_data_prefix +#endif +#ifdef GENERATOR_FILE +extern int flag_profile_reorder_functions; +#else + int x_flag_profile_reorder_functions; +#define flag_profile_reorder_functions global_options.x_flag_profile_reorder_functions +#endif +#ifdef GENERATOR_FILE +extern int profile_report; +#else + int x_profile_report; +#define profile_report global_options.x_profile_report +#endif +#ifdef GENERATOR_FILE +extern int flag_profile_use; +#else + int x_flag_profile_use; +#define flag_profile_use global_options.x_flag_profile_use +#endif +#ifdef GENERATOR_FILE +extern int flag_profile_values; +#else + int x_flag_profile_values; +#define flag_profile_values global_options.x_flag_profile_values +#endif +#ifdef GENERATOR_FILE +extern int flag_protect_parens; +#else + int x_flag_protect_parens; +#define flag_protect_parens global_options.x_flag_protect_parens +#endif +#ifdef GENERATOR_FILE +extern int flag_range_check; +#else + int x_flag_range_check; +#define flag_range_check global_options.x_flag_range_check +#endif +#ifdef GENERATOR_FILE +extern int flag_real4_kind; +#else + int x_flag_real4_kind; +#define flag_real4_kind global_options.x_flag_real4_kind +#endif +#ifdef GENERATOR_FILE +extern int flag_real8_kind; +#else + int x_flag_real8_kind; +#define flag_real8_kind global_options.x_flag_real8_kind +#endif +#ifdef GENERATOR_FILE +extern int flag_realloc_lhs; +#else + int x_flag_realloc_lhs; +#define flag_realloc_lhs global_options.x_flag_realloc_lhs +#endif +#ifdef GENERATOR_FILE +extern int flag_reciprocal_math; +#else + int x_flag_reciprocal_math; +#define flag_reciprocal_math global_options.x_flag_reciprocal_math +#endif +#ifdef GENERATOR_FILE +extern int flag_record_gcc_switches; +#else + int x_flag_record_gcc_switches; +#define flag_record_gcc_switches global_options.x_flag_record_gcc_switches +#endif +#ifdef GENERATOR_FILE +extern int flag_record_marker; +#else + int x_flag_record_marker; +#define flag_record_marker global_options.x_flag_record_marker +#endif +#ifdef GENERATOR_FILE +extern int flag_recursive; +#else + int x_flag_recursive; +#define flag_recursive global_options.x_flag_recursive +#endif +#ifdef GENERATOR_FILE +extern int flag_reduced_reflection; +#else + int x_flag_reduced_reflection; +#define flag_reduced_reflection global_options.x_flag_reduced_reflection +#endif +#ifdef GENERATOR_FILE +extern int flag_ree; +#else + int x_flag_ree; +#define flag_ree global_options.x_flag_ree +#endif +#ifdef GENERATOR_FILE +extern int flag_rename_registers; +#else + int x_flag_rename_registers; +#define flag_rename_registers global_options.x_flag_rename_registers +#endif +#ifdef GENERATOR_FILE +extern int flag_reorder_blocks; +#else + int x_flag_reorder_blocks; +#define flag_reorder_blocks global_options.x_flag_reorder_blocks +#endif +#ifdef GENERATOR_FILE +extern int flag_reorder_blocks_and_partition; +#else + int x_flag_reorder_blocks_and_partition; +#define flag_reorder_blocks_and_partition global_options.x_flag_reorder_blocks_and_partition +#endif +#ifdef GENERATOR_FILE +extern int flag_reorder_functions; +#else + int x_flag_reorder_functions; +#define flag_reorder_functions global_options.x_flag_reorder_functions +#endif +#ifdef GENERATOR_FILE +extern int flag_repack_arrays; +#else + int x_flag_repack_arrays; +#define flag_repack_arrays global_options.x_flag_repack_arrays +#endif +#ifdef GENERATOR_FILE +extern int flag_replace_objc_classes; +#else + int x_flag_replace_objc_classes; +#define flag_replace_objc_classes global_options.x_flag_replace_objc_classes +#endif +#ifdef GENERATOR_FILE +extern int flag_report_bug; +#else + int x_flag_report_bug; +#define flag_report_bug global_options.x_flag_report_bug +#endif +#ifdef GENERATOR_FILE +extern int go_require_return_statement; +#else + int x_go_require_return_statement; +#define go_require_return_statement global_options.x_go_require_return_statement +#endif +#ifdef GENERATOR_FILE +extern int flag_rerun_cse_after_loop; +#else + int x_flag_rerun_cse_after_loop; +#define flag_rerun_cse_after_loop global_options.x_flag_rerun_cse_after_loop +#endif +#ifdef GENERATOR_FILE +extern int flag_resched_modulo_sched; +#else + int x_flag_resched_modulo_sched; +#define flag_resched_modulo_sched global_options.x_flag_resched_modulo_sched +#endif +#ifdef GENERATOR_FILE +extern int flag_rounding_math; +#else + int x_flag_rounding_math; +#define flag_rounding_math global_options.x_flag_rounding_math +#endif +#ifdef GENERATOR_FILE +extern int flag_rtti; +#else + int x_flag_rtti; +#define flag_rtti global_options.x_flag_rtti +#endif +#ifdef GENERATOR_FILE +extern int flag_sanitize_undefined_trap_on_error; +#else + int x_flag_sanitize_undefined_trap_on_error; +#define flag_sanitize_undefined_trap_on_error global_options.x_flag_sanitize_undefined_trap_on_error +#endif +#ifdef GENERATOR_FILE +extern int flag_sched_critical_path_heuristic; +#else + int x_flag_sched_critical_path_heuristic; +#define flag_sched_critical_path_heuristic global_options.x_flag_sched_critical_path_heuristic +#endif +#ifdef GENERATOR_FILE +extern int flag_sched_dep_count_heuristic; +#else + int x_flag_sched_dep_count_heuristic; +#define flag_sched_dep_count_heuristic global_options.x_flag_sched_dep_count_heuristic +#endif +#ifdef GENERATOR_FILE +extern int flag_sched_group_heuristic; +#else + int x_flag_sched_group_heuristic; +#define flag_sched_group_heuristic global_options.x_flag_sched_group_heuristic +#endif +#ifdef GENERATOR_FILE +extern int flag_schedule_interblock; +#else + int x_flag_schedule_interblock; +#define flag_schedule_interblock global_options.x_flag_schedule_interblock +#endif +#ifdef GENERATOR_FILE +extern int flag_sched_last_insn_heuristic; +#else + int x_flag_sched_last_insn_heuristic; +#define flag_sched_last_insn_heuristic global_options.x_flag_sched_last_insn_heuristic +#endif +#ifdef GENERATOR_FILE +extern int flag_sched_pressure; +#else + int x_flag_sched_pressure; +#define flag_sched_pressure global_options.x_flag_sched_pressure +#endif +#ifdef GENERATOR_FILE +extern int flag_sched_rank_heuristic; +#else + int x_flag_sched_rank_heuristic; +#define flag_sched_rank_heuristic global_options.x_flag_sched_rank_heuristic +#endif +#ifdef GENERATOR_FILE +extern int flag_schedule_speculative; +#else + int x_flag_schedule_speculative; +#define flag_schedule_speculative global_options.x_flag_schedule_speculative +#endif +#ifdef GENERATOR_FILE +extern int flag_sched_spec_insn_heuristic; +#else + int x_flag_sched_spec_insn_heuristic; +#define flag_sched_spec_insn_heuristic global_options.x_flag_sched_spec_insn_heuristic +#endif +#ifdef GENERATOR_FILE +extern int flag_schedule_speculative_load; +#else + int x_flag_schedule_speculative_load; +#define flag_schedule_speculative_load global_options.x_flag_schedule_speculative_load +#endif +#ifdef GENERATOR_FILE +extern int flag_schedule_speculative_load_dangerous; +#else + int x_flag_schedule_speculative_load_dangerous; +#define flag_schedule_speculative_load_dangerous global_options.x_flag_schedule_speculative_load_dangerous +#endif +#ifdef GENERATOR_FILE +extern int flag_sched_stalled_insns; +#else + int x_flag_sched_stalled_insns; +#define flag_sched_stalled_insns global_options.x_flag_sched_stalled_insns +#endif +#ifdef GENERATOR_FILE +extern int flag_sched_stalled_insns_dep; +#else + int x_flag_sched_stalled_insns_dep; +#define flag_sched_stalled_insns_dep global_options.x_flag_sched_stalled_insns_dep +#endif +#ifdef GENERATOR_FILE +extern int sched_verbose_param; +#else + int x_sched_verbose_param; +#define sched_verbose_param global_options.x_sched_verbose_param +#endif +#ifdef GENERATOR_FILE +extern int flag_sched2_use_superblocks; +#else + int x_flag_sched2_use_superblocks; +#define flag_sched2_use_superblocks global_options.x_flag_sched2_use_superblocks +#endif +#ifdef GENERATOR_FILE +extern int flag_schedule_fusion; +#else + int x_flag_schedule_fusion; +#define flag_schedule_fusion global_options.x_flag_schedule_fusion +#endif +#ifdef GENERATOR_FILE +extern int flag_schedule_insns; +#else + int x_flag_schedule_insns; +#define flag_schedule_insns global_options.x_flag_schedule_insns +#endif +#ifdef GENERATOR_FILE +extern int flag_schedule_insns_after_reload; +#else + int x_flag_schedule_insns_after_reload; +#define flag_schedule_insns_after_reload global_options.x_flag_schedule_insns_after_reload +#endif +#ifdef GENERATOR_FILE +extern int flag_second_underscore; +#else + int x_flag_second_underscore; +#define flag_second_underscore global_options.x_flag_second_underscore +#endif +#ifdef GENERATOR_FILE +extern int flag_section_anchors; +#else + int x_flag_section_anchors; +#define flag_section_anchors global_options.x_flag_section_anchors +#endif +#ifdef GENERATOR_FILE +extern int flag_sel_sched_pipelining; +#else + int x_flag_sel_sched_pipelining; +#define flag_sel_sched_pipelining global_options.x_flag_sel_sched_pipelining +#endif +#ifdef GENERATOR_FILE +extern int flag_sel_sched_pipelining_outer_loops; +#else + int x_flag_sel_sched_pipelining_outer_loops; +#define flag_sel_sched_pipelining_outer_loops global_options.x_flag_sel_sched_pipelining_outer_loops +#endif +#ifdef GENERATOR_FILE +extern int flag_sel_sched_reschedule_pipelined; +#else + int x_flag_sel_sched_reschedule_pipelined; +#define flag_sel_sched_reschedule_pipelined global_options.x_flag_sel_sched_reschedule_pipelined +#endif +#ifdef GENERATOR_FILE +extern int flag_selective_scheduling; +#else + int x_flag_selective_scheduling; +#define flag_selective_scheduling global_options.x_flag_selective_scheduling +#endif +#ifdef GENERATOR_FILE +extern int flag_selective_scheduling2; +#else + int x_flag_selective_scheduling2; +#define flag_selective_scheduling2 global_options.x_flag_selective_scheduling2 +#endif +#ifdef GENERATOR_FILE +extern int flag_semantic_interposition; +#else + int x_flag_semantic_interposition; +#define flag_semantic_interposition global_options.x_flag_semantic_interposition +#endif +#ifdef GENERATOR_FILE +extern int flag_setstackexecutable; +#else + int x_flag_setstackexecutable; +#define flag_setstackexecutable global_options.x_flag_setstackexecutable +#endif +#ifdef GENERATOR_FILE +extern int flag_short_double; +#else + int x_flag_short_double; +#define flag_short_double global_options.x_flag_short_double +#endif +#ifdef GENERATOR_FILE +extern int flag_short_enums; +#else + int x_flag_short_enums; +#define flag_short_enums global_options.x_flag_short_enums +#endif +#ifdef GENERATOR_FILE +extern int flag_short_wchar; +#else + int x_flag_short_wchar; +#define flag_short_wchar global_options.x_flag_short_wchar +#endif +#ifdef GENERATOR_FILE +extern int flag_show_column; +#else + int x_flag_show_column; +#define flag_show_column global_options.x_flag_show_column +#endif +#ifdef GENERATOR_FILE +extern int flag_shrink_wrap; +#else + int x_flag_shrink_wrap; +#define flag_shrink_wrap global_options.x_flag_shrink_wrap +#endif +#ifdef GENERATOR_FILE +extern int flag_sign_zero; +#else + int x_flag_sign_zero; +#define flag_sign_zero global_options.x_flag_sign_zero +#endif +#ifdef GENERATOR_FILE +extern int flag_signaling_nans; +#else + int x_flag_signaling_nans; +#define flag_signaling_nans global_options.x_flag_signaling_nans +#endif +#ifdef GENERATOR_FILE +extern int flag_signed_bitfields; +#else + int x_flag_signed_bitfields; +#define flag_signed_bitfields global_options.x_flag_signed_bitfields +#endif +#ifdef GENERATOR_FILE +extern int flag_signed_char; +#else + int x_flag_signed_char; +#define flag_signed_char global_options.x_flag_signed_char +#endif +#ifdef GENERATOR_FILE +extern int flag_signed_zeros; +#else + int x_flag_signed_zeros; +#define flag_signed_zeros global_options.x_flag_signed_zeros +#endif +#ifdef GENERATOR_FILE +extern enum vect_cost_model flag_simd_cost_model; +#else + enum vect_cost_model x_flag_simd_cost_model; +#define flag_simd_cost_model global_options.x_flag_simd_cost_model +#endif +#ifdef GENERATOR_FILE +extern int flag_single_precision_constant; +#else + int x_flag_single_precision_constant; +#define flag_single_precision_constant global_options.x_flag_single_precision_constant +#endif +#ifdef GENERATOR_FILE +extern int flag_sized_deallocation; +#else + int x_flag_sized_deallocation; +#define flag_sized_deallocation global_options.x_flag_sized_deallocation +#endif +#ifdef GENERATOR_FILE +extern int flag_split_ivs_in_unroller; +#else + int x_flag_split_ivs_in_unroller; +#define flag_split_ivs_in_unroller global_options.x_flag_split_ivs_in_unroller +#endif +#ifdef GENERATOR_FILE +extern int flag_split_stack; +#else + int x_flag_split_stack; +#define flag_split_stack global_options.x_flag_split_stack +#endif +#ifdef GENERATOR_FILE +extern int flag_split_wide_types; +#else + int x_flag_split_wide_types; +#define flag_split_wide_types global_options.x_flag_split_wide_types +#endif +#ifdef GENERATOR_FILE +extern int flag_ssa_phiopt; +#else + int x_flag_ssa_phiopt; +#define flag_ssa_phiopt global_options.x_flag_ssa_phiopt +#endif +#ifdef GENERATOR_FILE +extern int flag_stack_arrays; +#else + int x_flag_stack_arrays; +#define flag_stack_arrays global_options.x_flag_stack_arrays +#endif +#ifdef GENERATOR_FILE +extern int flag_stack_protect; +#else + int x_flag_stack_protect; +#define flag_stack_protect global_options.x_flag_stack_protect +#endif +#ifdef GENERATOR_FILE +extern enum stack_reuse_level flag_stack_reuse; +#else + enum stack_reuse_level x_flag_stack_reuse; +#define flag_stack_reuse global_options.x_flag_stack_reuse +#endif +#ifdef GENERATOR_FILE +extern int flag_stack_usage; +#else + int x_flag_stack_usage; +#define flag_stack_usage global_options.x_flag_stack_usage +#endif +#ifdef GENERATOR_FILE +extern int flag_detailed_statistics; +#else + int x_flag_detailed_statistics; +#define flag_detailed_statistics global_options.x_flag_detailed_statistics +#endif +#ifdef GENERATOR_FILE +extern int flag_stdarg_opt; +#else + int x_flag_stdarg_opt; +#define flag_stdarg_opt global_options.x_flag_stdarg_opt +#endif +#ifdef GENERATOR_FILE +extern int flag_store_check; +#else + int x_flag_store_check; +#define flag_store_check global_options.x_flag_store_check +#endif +#ifdef GENERATOR_FILE +extern int flag_strict_aliasing; +#else + int x_flag_strict_aliasing; +#define flag_strict_aliasing global_options.x_flag_strict_aliasing +#endif +#ifdef GENERATOR_FILE +extern int flag_strict_enums; +#else + int x_flag_strict_enums; +#define flag_strict_enums global_options.x_flag_strict_enums +#endif +#ifdef GENERATOR_FILE +extern int flag_strict_overflow; +#else + int x_flag_strict_overflow; +#define flag_strict_overflow global_options.x_flag_strict_overflow +#endif +#ifdef GENERATOR_FILE +extern int flag_strict_volatile_bitfields; +#else + int x_flag_strict_volatile_bitfields; +#define flag_strict_volatile_bitfields global_options.x_flag_strict_volatile_bitfields +#endif +#ifdef GENERATOR_FILE +extern int flag_sync_libcalls; +#else + int x_flag_sync_libcalls; +#define flag_sync_libcalls global_options.x_flag_sync_libcalls +#endif +#ifdef GENERATOR_FILE +extern int flag_syntax_only; +#else + int x_flag_syntax_only; +#define flag_syntax_only global_options.x_flag_syntax_only +#endif +#ifdef GENERATOR_FILE +extern int template_backtrace_limit; +#else + int x_template_backtrace_limit; +#define template_backtrace_limit global_options.x_template_backtrace_limit +#endif +#ifdef GENERATOR_FILE +extern int flag_test_coverage; +#else + int x_flag_test_coverage; +#define flag_test_coverage global_options.x_flag_test_coverage +#endif +#ifdef GENERATOR_FILE +extern int flag_thread_jumps; +#else + int x_flag_thread_jumps; +#define flag_thread_jumps global_options.x_flag_thread_jumps +#endif +#ifdef GENERATOR_FILE +extern int flag_threadsafe_statics; +#else + int x_flag_threadsafe_statics; +#define flag_threadsafe_statics global_options.x_flag_threadsafe_statics +#endif +#ifdef GENERATOR_FILE +extern int time_report; +#else + int x_time_report; +#define time_report global_options.x_time_report +#endif +#ifdef GENERATOR_FILE +extern enum tls_model flag_tls_default; +#else + enum tls_model x_flag_tls_default; +#define flag_tls_default global_options.x_flag_tls_default +#endif +#ifdef GENERATOR_FILE +extern int flag_toplevel_reorder; +#else + int x_flag_toplevel_reorder; +#define flag_toplevel_reorder global_options.x_flag_toplevel_reorder +#endif +#ifdef GENERATOR_FILE +extern int flag_tracer; +#else + int x_flag_tracer; +#define flag_tracer global_options.x_flag_tracer +#endif +#ifdef GENERATOR_FILE +extern int flag_trapping_math; +#else + int x_flag_trapping_math; +#define flag_trapping_math global_options.x_flag_trapping_math +#endif +#ifdef GENERATOR_FILE +extern int flag_trapv; +#else + int x_flag_trapv; +#define flag_trapv global_options.x_flag_trapv +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_bit_ccp; +#else + int x_flag_tree_bit_ccp; +#define flag_tree_bit_ccp global_options.x_flag_tree_bit_ccp +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_builtin_call_dce; +#else + int x_flag_tree_builtin_call_dce; +#define flag_tree_builtin_call_dce global_options.x_flag_tree_builtin_call_dce +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_ccp; +#else + int x_flag_tree_ccp; +#define flag_tree_ccp global_options.x_flag_tree_ccp +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_ch; +#else + int x_flag_tree_ch; +#define flag_tree_ch global_options.x_flag_tree_ch +#endif +#ifdef GENERATOR_FILE +extern int flag_ssa_coalesce_vars; +#else + int x_flag_ssa_coalesce_vars; +#define flag_ssa_coalesce_vars global_options.x_flag_ssa_coalesce_vars +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_copy_prop; +#else + int x_flag_tree_copy_prop; +#define flag_tree_copy_prop global_options.x_flag_tree_copy_prop +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_copyrename; +#else + int x_flag_tree_copyrename; +#define flag_tree_copyrename global_options.x_flag_tree_copyrename +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_cselim; +#else + int x_flag_tree_cselim; +#define flag_tree_cselim global_options.x_flag_tree_cselim +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_dce; +#else + int x_flag_tree_dce; +#define flag_tree_dce global_options.x_flag_tree_dce +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_dom; +#else + int x_flag_tree_dom; +#define flag_tree_dom global_options.x_flag_tree_dom +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_dse; +#else + int x_flag_tree_dse; +#define flag_tree_dse global_options.x_flag_tree_dse +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_forwprop; +#else + int x_flag_tree_forwprop; +#define flag_tree_forwprop global_options.x_flag_tree_forwprop +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_fre; +#else + int x_flag_tree_fre; +#define flag_tree_fre global_options.x_flag_tree_fre +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_loop_distribute_patterns; +#else + int x_flag_tree_loop_distribute_patterns; +#define flag_tree_loop_distribute_patterns global_options.x_flag_tree_loop_distribute_patterns +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_loop_distribution; +#else + int x_flag_tree_loop_distribution; +#define flag_tree_loop_distribution global_options.x_flag_tree_loop_distribution +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_loop_if_convert; +#else + int x_flag_tree_loop_if_convert; +#define flag_tree_loop_if_convert global_options.x_flag_tree_loop_if_convert +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_loop_if_convert_stores; +#else + int x_flag_tree_loop_if_convert_stores; +#define flag_tree_loop_if_convert_stores global_options.x_flag_tree_loop_if_convert_stores +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_loop_im; +#else + int x_flag_tree_loop_im; +#define flag_tree_loop_im global_options.x_flag_tree_loop_im +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_loop_ivcanon; +#else + int x_flag_tree_loop_ivcanon; +#define flag_tree_loop_ivcanon global_options.x_flag_tree_loop_ivcanon +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_loop_optimize; +#else + int x_flag_tree_loop_optimize; +#define flag_tree_loop_optimize global_options.x_flag_tree_loop_optimize +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_loop_vectorize; +#else + int x_flag_tree_loop_vectorize; +#define flag_tree_loop_vectorize global_options.x_flag_tree_loop_vectorize +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_live_range_split; +#else + int x_flag_tree_live_range_split; +#define flag_tree_live_range_split global_options.x_flag_tree_live_range_split +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_parallelize_loops; +#else + int x_flag_tree_parallelize_loops; +#define flag_tree_parallelize_loops global_options.x_flag_tree_parallelize_loops +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_partial_pre; +#else + int x_flag_tree_partial_pre; +#define flag_tree_partial_pre global_options.x_flag_tree_partial_pre +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_phiprop; +#else + int x_flag_tree_phiprop; +#define flag_tree_phiprop global_options.x_flag_tree_phiprop +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_pre; +#else + int x_flag_tree_pre; +#define flag_tree_pre global_options.x_flag_tree_pre +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_pta; +#else + int x_flag_tree_pta; +#define flag_tree_pta global_options.x_flag_tree_pta +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_reassoc; +#else + int x_flag_tree_reassoc; +#define flag_tree_reassoc global_options.x_flag_tree_reassoc +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_scev_cprop; +#else + int x_flag_tree_scev_cprop; +#define flag_tree_scev_cprop global_options.x_flag_tree_scev_cprop +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_sink; +#else + int x_flag_tree_sink; +#define flag_tree_sink global_options.x_flag_tree_sink +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_slp_vectorize; +#else + int x_flag_tree_slp_vectorize; +#define flag_tree_slp_vectorize global_options.x_flag_tree_slp_vectorize +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_slsr; +#else + int x_flag_tree_slsr; +#define flag_tree_slsr global_options.x_flag_tree_slsr +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_sra; +#else + int x_flag_tree_sra; +#define flag_tree_sra global_options.x_flag_tree_sra +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_switch_conversion; +#else + int x_flag_tree_switch_conversion; +#define flag_tree_switch_conversion global_options.x_flag_tree_switch_conversion +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_tail_merge; +#else + int x_flag_tree_tail_merge; +#define flag_tree_tail_merge global_options.x_flag_tree_tail_merge +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_ter; +#else + int x_flag_tree_ter; +#define flag_tree_ter global_options.x_flag_tree_ter +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_vectorize; +#else + int x_flag_tree_vectorize; +#define flag_tree_vectorize global_options.x_flag_tree_vectorize +#endif +#ifdef GENERATOR_FILE +extern int flag_tree_vrp; +#else + int x_flag_tree_vrp; +#define flag_tree_vrp global_options.x_flag_tree_vrp +#endif +#ifdef GENERATOR_FILE +extern int flag_underscoring; +#else + int x_flag_underscoring; +#define flag_underscoring global_options.x_flag_underscoring +#endif +#ifdef GENERATOR_FILE +extern int flag_unit_at_a_time; +#else + int x_flag_unit_at_a_time; +#define flag_unit_at_a_time global_options.x_flag_unit_at_a_time +#endif +#ifdef GENERATOR_FILE +extern int flag_unroll_all_loops; +#else + int x_flag_unroll_all_loops; +#define flag_unroll_all_loops global_options.x_flag_unroll_all_loops +#endif +#ifdef GENERATOR_FILE +extern int flag_unroll_loops; +#else + int x_flag_unroll_loops; +#define flag_unroll_loops global_options.x_flag_unroll_loops +#endif +#ifdef GENERATOR_FILE +extern int flag_unsafe_loop_optimizations; +#else + int x_flag_unsafe_loop_optimizations; +#define flag_unsafe_loop_optimizations global_options.x_flag_unsafe_loop_optimizations +#endif +#ifdef GENERATOR_FILE +extern int flag_unsafe_math_optimizations; +#else + int x_flag_unsafe_math_optimizations; +#define flag_unsafe_math_optimizations global_options.x_flag_unsafe_math_optimizations +#endif +#ifdef GENERATOR_FILE +extern int flag_unswitch_loops; +#else + int x_flag_unswitch_loops; +#define flag_unswitch_loops global_options.x_flag_unswitch_loops +#endif +#ifdef GENERATOR_FILE +extern int flag_unwind_tables; +#else + int x_flag_unwind_tables; +#define flag_unwind_tables global_options.x_flag_unwind_tables +#endif +#ifdef GENERATOR_FILE +extern int flag_use_atomic_builtins; +#else + int x_flag_use_atomic_builtins; +#define flag_use_atomic_builtins global_options.x_flag_use_atomic_builtins +#endif +#ifdef GENERATOR_FILE +extern int flag_use_boehm_gc; +#else + int x_flag_use_boehm_gc; +#define flag_use_boehm_gc global_options.x_flag_use_boehm_gc +#endif +#ifdef GENERATOR_FILE +extern int flag_use_cxa_atexit; +#else + int x_flag_use_cxa_atexit; +#define flag_use_cxa_atexit global_options.x_flag_use_cxa_atexit +#endif +#ifdef GENERATOR_FILE +extern int flag_use_cxa_get_exception_ptr; +#else + int x_flag_use_cxa_get_exception_ptr; +#define flag_use_cxa_get_exception_ptr global_options.x_flag_use_cxa_get_exception_ptr +#endif +#ifdef GENERATOR_FILE +extern int flag_use_divide_subroutine; +#else + int x_flag_use_divide_subroutine; +#define flag_use_divide_subroutine global_options.x_flag_use_divide_subroutine +#endif +#ifdef GENERATOR_FILE +extern int flag_use_linker_plugin; +#else + int x_flag_use_linker_plugin; +#define flag_use_linker_plugin global_options.x_flag_use_linker_plugin +#endif +#ifdef GENERATOR_FILE +extern int flag_var_tracking; +#else + int x_flag_var_tracking; +#define flag_var_tracking global_options.x_flag_var_tracking +#endif +#ifdef GENERATOR_FILE +extern int flag_var_tracking_assignments; +#else + int x_flag_var_tracking_assignments; +#define flag_var_tracking_assignments global_options.x_flag_var_tracking_assignments +#endif +#ifdef GENERATOR_FILE +extern int flag_var_tracking_assignments_toggle; +#else + int x_flag_var_tracking_assignments_toggle; +#define flag_var_tracking_assignments_toggle global_options.x_flag_var_tracking_assignments_toggle +#endif +#ifdef GENERATOR_FILE +extern int flag_var_tracking_uninit; +#else + int x_flag_var_tracking_uninit; +#define flag_var_tracking_uninit global_options.x_flag_var_tracking_uninit +#endif +#ifdef GENERATOR_FILE +extern int flag_variable_expansion_in_unroller; +#else + int x_flag_variable_expansion_in_unroller; +#define flag_variable_expansion_in_unroller global_options.x_flag_variable_expansion_in_unroller +#endif +#ifdef GENERATOR_FILE +extern enum vect_cost_model flag_vect_cost_model; +#else + enum vect_cost_model x_flag_vect_cost_model; +#define flag_vect_cost_model global_options.x_flag_vect_cost_model +#endif +#ifdef GENERATOR_FILE +extern int flag_verbose_asm; +#else + int x_flag_verbose_asm; +#define flag_verbose_asm global_options.x_flag_verbose_asm +#endif +#ifdef GENERATOR_FILE +extern int flag_visibility_ms_compat; +#else + int x_flag_visibility_ms_compat; +#define flag_visibility_ms_compat global_options.x_flag_visibility_ms_compat +#endif +#ifdef GENERATOR_FILE +extern enum symbol_visibility default_visibility; +#else + enum symbol_visibility x_default_visibility; +#define default_visibility global_options.x_default_visibility +#endif +#ifdef GENERATOR_FILE +extern int flag_value_profile_transformations; +#else + int x_flag_value_profile_transformations; +#define flag_value_profile_transformations global_options.x_flag_value_profile_transformations +#endif +#ifdef GENERATOR_FILE +extern enum vtv_priority flag_vtable_verify; +#else + enum vtv_priority x_flag_vtable_verify; +#define flag_vtable_verify global_options.x_flag_vtable_verify +#endif +#ifdef GENERATOR_FILE +extern int flag_vtv_counts; +#else + int x_flag_vtv_counts; +#define flag_vtv_counts global_options.x_flag_vtv_counts +#endif +#ifdef GENERATOR_FILE +extern int flag_vtv_debug; +#else + int x_flag_vtv_debug; +#define flag_vtv_debug global_options.x_flag_vtv_debug +#endif +#ifdef GENERATOR_FILE +extern int flag_weak; +#else + int x_flag_weak; +#define flag_weak global_options.x_flag_weak +#endif +#ifdef GENERATOR_FILE +extern int flag_web; +#else + int x_flag_web; +#define flag_web global_options.x_flag_web +#endif +#ifdef GENERATOR_FILE +extern int flag_whole_program; +#else + int x_flag_whole_program; +#define flag_whole_program global_options.x_flag_whole_program +#endif +#ifdef GENERATOR_FILE +extern int flag_working_directory; +#else + int x_flag_working_directory; +#define flag_working_directory global_options.x_flag_working_directory +#endif +#ifdef GENERATOR_FILE +extern const char *flag_wpa; +#else + const char *x_flag_wpa; +#define flag_wpa global_options.x_flag_wpa +#endif +#ifdef GENERATOR_FILE +extern int flag_wrapv; +#else + int x_flag_wrapv; +#define flag_wrapv global_options.x_flag_wrapv +#endif +#ifdef GENERATOR_FILE +extern int flag_writable_rel_rdata; +#else + int x_flag_writable_rel_rdata; +#define flag_writable_rel_rdata global_options.x_flag_writable_rel_rdata +#endif +#ifdef GENERATOR_FILE +extern int flag_zero_initialized_in_bss; +#else + int x_flag_zero_initialized_in_bss; +#define flag_zero_initialized_in_bss global_options.x_flag_zero_initialized_in_bss +#endif +#ifdef GENERATOR_FILE +extern int flag_zero_link; +#else + int x_flag_zero_link; +#define flag_zero_link global_options.x_flag_zero_link +#endif +#ifdef GENERATOR_FILE +extern int dwarf_version; +#else + int x_dwarf_version; +#define dwarf_version global_options.x_dwarf_version +#endif +#ifdef GENERATOR_FILE +extern int flag_gen_declaration; +#else + int x_flag_gen_declaration; +#define flag_gen_declaration global_options.x_flag_gen_declaration +#endif +#ifdef GENERATOR_FILE +extern int debug_generate_pub_sections; +#else + int x_debug_generate_pub_sections; +#define debug_generate_pub_sections global_options.x_debug_generate_pub_sections +#endif +#ifdef GENERATOR_FILE +extern int dwarf_record_gcc_switches; +#else + int x_dwarf_record_gcc_switches; +#define dwarf_record_gcc_switches global_options.x_dwarf_record_gcc_switches +#endif +#ifdef GENERATOR_FILE +extern int dwarf_split_debug_info; +#else + int x_dwarf_split_debug_info; +#define dwarf_split_debug_info global_options.x_dwarf_split_debug_info +#endif +#ifdef GENERATOR_FILE +extern int dwarf_strict; +#else + int x_dwarf_strict; +#define dwarf_strict global_options.x_dwarf_strict +#endif +#ifdef GENERATOR_FILE +extern int flag_gtoggle; +#else + int x_flag_gtoggle; +#define flag_gtoggle global_options.x_flag_gtoggle +#endif +#ifdef GENERATOR_FILE +extern const char *imultiarch; +#else + const char *x_imultiarch; +#define imultiarch global_options.x_imultiarch +#endif +#ifdef GENERATOR_FILE +extern const char *plugindir_string; +#else + const char *x_plugindir_string; +#define plugindir_string global_options.x_plugindir_string +#endif +#ifdef GENERATOR_FILE +extern enum calling_abi ix86_abi; +#else + enum calling_abi x_ix86_abi; +#define ix86_abi global_options.x_ix86_abi +#endif +#ifdef GENERATOR_FILE +extern enum pmode ix86_pmode; +#else + enum pmode x_ix86_pmode; +#define ix86_pmode global_options.x_ix86_pmode +#endif +#ifdef GENERATOR_FILE +extern enum ix86_align_data ix86_align_data_type; +#else + enum ix86_align_data x_ix86_align_data_type; +#define ix86_align_data_type global_options.x_ix86_align_data_type +#endif +#ifdef GENERATOR_FILE +extern const char *ix86_arch_string; +#else + const char *x_ix86_arch_string; +#define ix86_arch_string global_options.x_ix86_arch_string +#endif +#ifdef GENERATOR_FILE +extern enum asm_dialect ix86_asm_dialect; +#else + enum asm_dialect x_ix86_asm_dialect; +#define ix86_asm_dialect global_options.x_ix86_asm_dialect +#endif +#ifdef GENERATOR_FILE +extern int ix86_branch_cost; +#else + int x_ix86_branch_cost; +#define ix86_branch_cost global_options.x_ix86_branch_cost +#endif +#ifdef GENERATOR_FILE +extern enum cmodel ix86_cmodel; +#else + enum cmodel x_ix86_cmodel; +#define ix86_cmodel global_options.x_ix86_cmodel +#endif +#ifdef GENERATOR_FILE +extern int flag_dispatch_scheduler; +#else + int x_flag_dispatch_scheduler; +#define flag_dispatch_scheduler global_options.x_flag_dispatch_scheduler +#endif +#ifdef GENERATOR_FILE +extern int ix86_dump_tunes; +#else + int x_ix86_dump_tunes; +#define ix86_dump_tunes global_options.x_ix86_dump_tunes +#endif +#ifdef GENERATOR_FILE +extern int flag_fentry; +#else + int x_flag_fentry; +#define flag_fentry global_options.x_flag_fentry +#endif +#ifdef GENERATOR_FILE +extern int ix86_force_drap; +#else + int x_ix86_force_drap; +#define ix86_force_drap global_options.x_ix86_force_drap +#endif +#ifdef GENERATOR_FILE +extern enum fpmath_unit ix86_fpmath; +#else + enum fpmath_unit x_ix86_fpmath; +#define ix86_fpmath global_options.x_ix86_fpmath +#endif +#ifdef GENERATOR_FILE +extern int ix86_incoming_stack_boundary_arg; +#else + int x_ix86_incoming_stack_boundary_arg; +#define ix86_incoming_stack_boundary_arg global_options.x_ix86_incoming_stack_boundary_arg +#endif +#ifdef GENERATOR_FILE +extern int ix86_section_threshold; +#else + int x_ix86_section_threshold; +#define ix86_section_threshold global_options.x_ix86_section_threshold +#endif +#ifdef GENERATOR_FILE +extern const char *ix86_tune_memcpy_strategy; +#else + const char *x_ix86_tune_memcpy_strategy; +#define ix86_tune_memcpy_strategy global_options.x_ix86_tune_memcpy_strategy +#endif +#ifdef GENERATOR_FILE +extern const char *ix86_tune_memset_strategy; +#else + const char *x_ix86_tune_memset_strategy; +#define ix86_tune_memset_strategy global_options.x_ix86_tune_memset_strategy +#endif +#ifdef GENERATOR_FILE +extern int ix86_tune_no_default; +#else + int x_ix86_tune_no_default; +#define ix86_tune_no_default global_options.x_ix86_tune_no_default +#endif +#ifdef GENERATOR_FILE +extern int TARGET_NOP_FUN_DLLIMPORT; +#else + int x_TARGET_NOP_FUN_DLLIMPORT; +#define TARGET_NOP_FUN_DLLIMPORT global_options.x_TARGET_NOP_FUN_DLLIMPORT +#endif +#ifdef GENERATOR_FILE +extern int flag_nop_mcount; +#else + int x_flag_nop_mcount; +#define flag_nop_mcount global_options.x_flag_nop_mcount +#endif +#ifdef GENERATOR_FILE +extern int use_pe_aligned_common; +#else + int x_use_pe_aligned_common; +#define use_pe_aligned_common global_options.x_use_pe_aligned_common +#endif +#ifdef GENERATOR_FILE +extern int ix86_preferred_stack_boundary_arg; +#else + int x_ix86_preferred_stack_boundary_arg; +#define ix86_preferred_stack_boundary_arg global_options.x_ix86_preferred_stack_boundary_arg +#endif +#ifdef GENERATOR_FILE +extern const char *ix86_recip_name; +#else + const char *x_ix86_recip_name; +#define ix86_recip_name global_options.x_ix86_recip_name +#endif +#ifdef GENERATOR_FILE +extern int flag_record_mcount; +#else + int x_flag_record_mcount; +#define flag_record_mcount global_options.x_flag_record_mcount +#endif +#ifdef GENERATOR_FILE +extern int ix86_regparm; +#else + int x_ix86_regparm; +#define ix86_regparm global_options.x_ix86_regparm +#endif +#ifdef GENERATOR_FILE +extern int flag_skip_rax_setup; +#else + int x_flag_skip_rax_setup; +#define flag_skip_rax_setup global_options.x_flag_skip_rax_setup +#endif +#ifdef GENERATOR_FILE +extern int ix86_sse2avx; +#else + int x_ix86_sse2avx; +#define ix86_sse2avx global_options.x_ix86_sse2avx +#endif +#ifdef GENERATOR_FILE +extern enum stack_protector_guard ix86_stack_protector_guard; +#else + enum stack_protector_guard x_ix86_stack_protector_guard; +#define ix86_stack_protector_guard global_options.x_ix86_stack_protector_guard +#endif +#ifdef GENERATOR_FILE +extern int ix86_force_align_arg_pointer; +#else + int x_ix86_force_align_arg_pointer; +#define ix86_force_align_arg_pointer global_options.x_ix86_force_align_arg_pointer +#endif +#ifdef GENERATOR_FILE +extern enum stringop_alg ix86_stringop_alg; +#else + enum stringop_alg x_ix86_stringop_alg; +#define ix86_stringop_alg global_options.x_ix86_stringop_alg +#endif +#ifdef GENERATOR_FILE +extern enum tls_dialect ix86_tls_dialect; +#else + enum tls_dialect x_ix86_tls_dialect; +#define ix86_tls_dialect global_options.x_ix86_tls_dialect +#endif +#ifdef GENERATOR_FILE +extern const char *ix86_tune_ctrl_string; +#else + const char *x_ix86_tune_ctrl_string; +#define ix86_tune_ctrl_string global_options.x_ix86_tune_ctrl_string +#endif +#ifdef GENERATOR_FILE +extern const char *ix86_tune_string; +#else + const char *x_ix86_tune_string; +#define ix86_tune_string global_options.x_ix86_tune_string +#endif +#ifdef GENERATOR_FILE +extern enum ix86_veclibabi ix86_veclibabi_type; +#else + enum ix86_veclibabi x_ix86_veclibabi_type; +#define ix86_veclibabi_type global_options.x_ix86_veclibabi_type +#endif +#ifdef GENERATOR_FILE +extern const char *asm_file_name; +#else + const char *x_asm_file_name; +#define asm_file_name global_options.x_asm_file_name +#endif +#ifdef GENERATOR_FILE +extern int pass_exit_codes; +#else + int x_pass_exit_codes; +#define pass_exit_codes global_options.x_pass_exit_codes +#endif +#ifdef GENERATOR_FILE +extern int flag_pedantic_errors; +#else + int x_flag_pedantic_errors; +#define flag_pedantic_errors global_options.x_flag_pedantic_errors +#endif +#ifdef GENERATOR_FILE +extern int use_pipes; +#else + int x_use_pipes; +#define use_pipes global_options.x_use_pipes +#endif +#ifdef GENERATOR_FILE +extern const char *print_file_name; +#else + const char *x_print_file_name; +#define print_file_name global_options.x_print_file_name +#endif +#ifdef GENERATOR_FILE +extern int print_multi_directory; +#else + int x_print_multi_directory; +#define print_multi_directory global_options.x_print_multi_directory +#endif +#ifdef GENERATOR_FILE +extern int print_multi_lib; +#else + int x_print_multi_lib; +#define print_multi_lib global_options.x_print_multi_lib +#endif +#ifdef GENERATOR_FILE +extern int print_multi_os_directory; +#else + int x_print_multi_os_directory; +#define print_multi_os_directory global_options.x_print_multi_os_directory +#endif +#ifdef GENERATOR_FILE +extern int print_multiarch; +#else + int x_print_multiarch; +#define print_multiarch global_options.x_print_multiarch +#endif +#ifdef GENERATOR_FILE +extern const char *print_prog_name; +#else + const char *x_print_prog_name; +#define print_prog_name global_options.x_print_prog_name +#endif +#ifdef GENERATOR_FILE +extern int print_search_dirs; +#else + int x_print_search_dirs; +#define print_search_dirs global_options.x_print_search_dirs +#endif +#ifdef GENERATOR_FILE +extern int print_sysroot; +#else + int x_print_sysroot; +#define print_sysroot global_options.x_print_sysroot +#endif +#ifdef GENERATOR_FILE +extern int print_sysroot_headers_suffix; +#else + int x_print_sysroot_headers_suffix; +#define print_sysroot_headers_suffix global_options.x_print_sysroot_headers_suffix +#endif +#ifdef GENERATOR_FILE +extern int quiet_flag; +#else + int x_quiet_flag; +#define quiet_flag global_options.x_quiet_flag +#endif +#ifdef GENERATOR_FILE +extern int report_times; +#else + int x_report_times; +#define report_times global_options.x_report_times +#endif +#ifdef GENERATOR_FILE +extern int flag_undef; +#else + int x_flag_undef; +#define flag_undef global_options.x_flag_undef +#endif +#ifdef GENERATOR_FILE +extern int verbose_flag; +#else + int x_verbose_flag; +#define verbose_flag global_options.x_verbose_flag +#endif +#ifdef GENERATOR_FILE +extern int version_flag; +#else + int x_version_flag; +#define version_flag global_options.x_version_flag +#endif +#ifdef GENERATOR_FILE +extern int inhibit_warnings; +#else + int x_inhibit_warnings; +#define inhibit_warnings global_options.x_inhibit_warnings +#endif +#ifdef GENERATOR_FILE +extern const char *wrapper_string; +#else + const char *x_wrapper_string; +#define wrapper_string global_options.x_wrapper_string +#endif +#ifndef GENERATOR_FILE + int x_VAR_malign_functions_; +#define x_VAR_malign_functions_ do_not_use +#endif +#ifndef GENERATOR_FILE + int x_VAR_malign_jumps_; +#define x_VAR_malign_jumps_ do_not_use +#endif +#ifndef GENERATOR_FILE + int x_VAR_malign_loops_; +#define x_VAR_malign_loops_ do_not_use +#endif +#ifndef GENERATOR_FILE + int x_VAR_mconsole; +#define x_VAR_mconsole do_not_use +#endif +#ifndef GENERATOR_FILE + int x_VAR_mdll; +#define x_VAR_mdll do_not_use +#endif +#ifndef GENERATOR_FILE + int x_VAR_mpc32; +#define x_VAR_mpc32 do_not_use +#endif +#ifndef GENERATOR_FILE + int x_VAR_mpc64; +#define x_VAR_mpc64 do_not_use +#endif +#ifndef GENERATOR_FILE + int x_VAR_mpc80; +#define x_VAR_mpc80 do_not_use +#endif +#ifndef GENERATOR_FILE + int x_VAR_mthreads; +#define x_VAR_mthreads do_not_use +#endif +#ifndef GENERATOR_FILE + int x_VAR_muse_libstdc_wrappers; +#define x_VAR_muse_libstdc_wrappers do_not_use +#endif +#ifndef GENERATOR_FILE + int x_VAR_mwin32; +#define x_VAR_mwin32 do_not_use +#endif +#ifndef GENERATOR_FILE + int x_VAR_mwindows; +#define x_VAR_mwindows do_not_use +#endif +#ifndef GENERATOR_FILE + bool frontend_set_flag_associative_math; +#endif +#ifndef GENERATOR_FILE + bool frontend_set_flag_cx_limited_range; +#endif +#ifndef GENERATOR_FILE + bool frontend_set_flag_finite_math_only; +#endif +#ifndef GENERATOR_FILE + bool frontend_set_flag_errno_math; +#endif +#ifndef GENERATOR_FILE + bool frontend_set_flag_reciprocal_math; +#endif +#ifndef GENERATOR_FILE + bool frontend_set_flag_rounding_math; +#endif +#ifndef GENERATOR_FILE + bool frontend_set_flag_signaling_nans; +#endif +#ifndef GENERATOR_FILE + bool frontend_set_flag_signed_zeros; +#endif +#ifndef GENERATOR_FILE + bool frontend_set_flag_trapping_math; +#endif +#ifndef GENERATOR_FILE + bool frontend_set_flag_unsafe_math_optimizations; +#endif +#ifndef GENERATOR_FILE +}; +extern struct gcc_options global_options; +extern const struct gcc_options global_options_init; +extern struct gcc_options global_options_set; +#define target_flags_explicit global_options_set.x_target_flags +#endif +#endif + +#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS) + +/* Structure to save/restore optimization and target specific options. */ +struct GTY(()) cl_optimization +{ + int x_align_functions; + int x_align_jumps; + int x_align_labels; + int x_align_loops; + int x_flag_sched_stalled_insns; + int x_flag_sched_stalled_insns_dep; + int x_flag_tree_parallelize_loops; + enum fp_contract_mode x_flag_fp_contract_mode; + enum ira_algorithm x_flag_ira_algorithm; + enum ira_region x_flag_ira_region; + enum vect_cost_model x_flag_simd_cost_model; + enum stack_reuse_level x_flag_stack_reuse; + enum vect_cost_model x_flag_vect_cost_model; + unsigned char x_optimize; + unsigned char x_optimize_size; + unsigned char x_optimize_debug; + signed char x_flag_aggressive_loop_optimizations; + signed char x_flag_associative_math; + signed char x_flag_asynchronous_unwind_tables; + signed char x_flag_auto_inc_dec; + signed char x_flag_branch_on_count_reg; + signed char x_flag_branch_probabilities; + signed char x_flag_branch_target_load_optimize; + signed char x_flag_branch_target_load_optimize2; + signed char x_flag_btr_bb_exclusive; + signed char x_flag_caller_saves; + signed char x_flag_combine_stack_adjustments; + signed char x_flag_compare_elim_after_reload; + signed char x_flag_conserve_stack; + signed char x_flag_cprop_registers; + signed char x_flag_crossjumping; + signed char x_flag_cse_follow_jumps; + signed char x_flag_cx_fortran_rules; + signed char x_flag_cx_limited_range; + signed char x_flag_dce; + signed char x_flag_defer_pop; + signed char x_flag_delayed_branch; + signed char x_flag_delete_dead_exceptions; + signed char x_flag_delete_null_pointer_checks; + signed char x_flag_devirtualize; + signed char x_flag_devirtualize_speculatively; + signed char x_flag_dse; + signed char x_flag_early_inlining; + signed char x_flag_exceptions; + signed char x_flag_expensive_optimizations; + signed char x_flag_finite_math_only; + signed char x_flag_float_store; + signed char x_flag_forward_propagate; + signed char x_flag_no_function_cse; + signed char x_flag_gcse; + signed char x_flag_gcse_after_reload; + signed char x_flag_gcse_las; + signed char x_flag_gcse_lm; + signed char x_flag_gcse_sm; + signed char x_flag_graphite; + signed char x_flag_graphite_identity; + signed char x_flag_guess_branch_prob; + signed char x_flag_hoist_adjacent_loads; + signed char x_flag_if_conversion; + signed char x_flag_if_conversion2; + signed char x_flag_indirect_inlining; + signed char x_flag_no_inline; + signed char x_flag_inline_atomics; + signed char x_flag_inline_functions; + signed char x_flag_inline_functions_called_once; + signed char x_flag_inline_small_functions; + signed char x_flag_ipa_cp; + signed char x_flag_ipa_cp_alignment; + signed char x_flag_ipa_cp_clone; + signed char x_flag_ipa_icf; + signed char x_flag_ipa_icf_functions; + signed char x_flag_ipa_profile; + signed char x_flag_ipa_pta; + signed char x_flag_ipa_pure_const; + signed char x_flag_ipa_ra; + signed char x_flag_ipa_reference; + signed char x_flag_ipa_sra; + signed char x_flag_ira_hoist_pressure; + signed char x_flag_ira_loop_pressure; + signed char x_flag_ira_share_save_slots; + signed char x_flag_ira_share_spill_slots; + signed char x_flag_isolate_erroneous_paths_attribute; + signed char x_flag_isolate_erroneous_paths_dereference; + signed char x_flag_ivopts; + signed char x_flag_jump_tables; + signed char x_flag_lifetime_dse; + signed char x_flag_live_range_shrinkage; + signed char x_flag_loop_block; + signed char x_flag_loop_interchange; + signed char x_flag_loop_optimize_isl; + signed char x_flag_loop_parallelize_all; + signed char x_flag_loop_strip_mine; + signed char x_flag_loop_unroll_jam; + signed char x_flag_lra_remat; + signed char x_flag_errno_math; + signed char x_flag_modulo_sched; + signed char x_flag_modulo_sched_allow_regmoves; + signed char x_flag_move_loop_invariants; + signed char x_flag_non_call_exceptions; + signed char x_flag_nothrow_opt; + signed char x_flag_omit_frame_pointer; + signed char x_flag_opt_info; + signed char x_flag_optimize_sibling_calls; + signed char x_flag_optimize_strlen; + signed char x_flag_pack_struct; + signed char x_flag_partial_inlining; + signed char x_flag_peel_loops; + signed char x_flag_no_peephole; + signed char x_flag_peephole2; + signed char x_flag_predictive_commoning; + signed char x_flag_prefetch_loop_arrays; + signed char x_flag_reciprocal_math; + signed char x_flag_pcc_struct_return; + signed char x_flag_rename_registers; + signed char x_flag_reorder_blocks; + signed char x_flag_reorder_blocks_and_partition; + signed char x_flag_reorder_functions; + signed char x_flag_rerun_cse_after_loop; + signed char x_flag_resched_modulo_sched; + signed char x_flag_rounding_math; + signed char x_flag_rtti; + signed char x_flag_sched_critical_path_heuristic; + signed char x_flag_sched_dep_count_heuristic; + signed char x_flag_sched_group_heuristic; + signed char x_flag_schedule_interblock; + signed char x_flag_sched_last_insn_heuristic; + signed char x_flag_sched_pressure; + signed char x_flag_sched_rank_heuristic; + signed char x_flag_schedule_speculative; + signed char x_flag_sched_spec_insn_heuristic; + signed char x_flag_schedule_speculative_load; + signed char x_flag_schedule_speculative_load_dangerous; + signed char x_flag_sched2_use_superblocks; + signed char x_flag_schedule_fusion; + signed char x_flag_schedule_insns; + signed char x_flag_schedule_insns_after_reload; + signed char x_flag_section_anchors; + signed char x_flag_sel_sched_pipelining; + signed char x_flag_sel_sched_pipelining_outer_loops; + signed char x_flag_sel_sched_reschedule_pipelined; + signed char x_flag_selective_scheduling; + signed char x_flag_selective_scheduling2; + signed char x_flag_setstackexecutable; + signed char x_flag_short_double; + signed char x_flag_short_enums; + signed char x_flag_short_wchar; + signed char x_flag_shrink_wrap; + signed char x_flag_signaling_nans; + signed char x_flag_signed_zeros; + signed char x_flag_single_precision_constant; + signed char x_flag_split_ivs_in_unroller; + signed char x_flag_split_wide_types; + signed char x_flag_ssa_phiopt; + signed char x_flag_stdarg_opt; + signed char x_flag_strict_aliasing; + signed char x_flag_strict_enums; + signed char x_flag_strict_overflow; + signed char x_flag_strict_volatile_bitfields; + signed char x_flag_thread_jumps; + signed char x_flag_threadsafe_statics; + signed char x_flag_tracer; + signed char x_flag_trapping_math; + signed char x_flag_trapv; + signed char x_flag_tree_bit_ccp; + signed char x_flag_tree_builtin_call_dce; + signed char x_flag_tree_ccp; + signed char x_flag_tree_ch; + signed char x_flag_ssa_coalesce_vars; + signed char x_flag_tree_copy_prop; + signed char x_flag_tree_copyrename; + signed char x_flag_tree_cselim; + signed char x_flag_tree_dce; + signed char x_flag_tree_dom; + signed char x_flag_tree_dse; + signed char x_flag_tree_forwprop; + signed char x_flag_tree_fre; + signed char x_flag_tree_loop_distribute_patterns; + signed char x_flag_tree_loop_distribution; + signed char x_flag_tree_loop_if_convert; + signed char x_flag_tree_loop_if_convert_stores; + signed char x_flag_tree_loop_im; + signed char x_flag_tree_loop_ivcanon; + signed char x_flag_tree_loop_optimize; + signed char x_flag_tree_loop_vectorize; + signed char x_flag_tree_live_range_split; + signed char x_flag_tree_partial_pre; + signed char x_flag_tree_phiprop; + signed char x_flag_tree_pre; + signed char x_flag_tree_pta; + signed char x_flag_tree_reassoc; + signed char x_flag_tree_scev_cprop; + signed char x_flag_tree_sink; + signed char x_flag_tree_slp_vectorize; + signed char x_flag_tree_slsr; + signed char x_flag_tree_sra; + signed char x_flag_tree_switch_conversion; + signed char x_flag_tree_tail_merge; + signed char x_flag_tree_ter; + signed char x_flag_tree_vectorize; + signed char x_flag_tree_vrp; + signed char x_flag_unroll_all_loops; + signed char x_flag_unroll_loops; + signed char x_flag_unsafe_loop_optimizations; + signed char x_flag_unsafe_math_optimizations; + signed char x_flag_unswitch_loops; + signed char x_flag_unwind_tables; + signed char x_flag_var_tracking; + signed char x_flag_var_tracking_assignments; + signed char x_flag_var_tracking_assignments_toggle; + signed char x_flag_var_tracking_uninit; + signed char x_flag_variable_expansion_in_unroller; + signed char x_flag_value_profile_transformations; + signed char x_flag_web; + signed char x_flag_wrapv; +}; + +/* Structure to save/restore selected target specific options. */ +struct GTY(()) cl_target_option +{ + HOST_WIDE_INT x_ix86_isa_flags_explicit; + HOST_WIDE_INT x_ix86_target_flags_explicit; + const char *x_ix86_arch_string; + const char *x_ix86_recip_name; + const char *x_ix86_tune_ctrl_string; + const char *x_ix86_tune_memcpy_strategy; + const char *x_ix86_tune_memset_strategy; + const char *x_ix86_tune_string; + HOST_WIDE_INT x_ix86_isa_flags; + enum fpmath_unit x_ix86_fpmath; + enum asm_dialect x_ix86_asm_dialect; + enum calling_abi x_ix86_abi; + enum cmodel x_ix86_cmodel; + enum ix86_veclibabi x_ix86_veclibabi_type; + enum pmode x_ix86_pmode; + enum stack_protector_guard x_ix86_stack_protector_guard; + enum stringop_alg x_ix86_stringop_alg; + enum tls_dialect x_ix86_tls_dialect; + int x_ix86_branch_cost; + int x_ix86_dump_tunes; + int x_ix86_force_align_arg_pointer; + int x_ix86_force_drap; + int x_ix86_incoming_stack_boundary_arg; + int x_ix86_preferred_stack_boundary_arg; + int x_ix86_regparm; + int x_ix86_section_threshold; + int x_ix86_sse2avx; + int x_ix86_tune_no_default; + int x_recip_mask_explicit; + int x_recip_mask; + int x_target_flags; + unsigned char arch; + unsigned char arch_specified; + unsigned char branch_cost; + unsigned char prefetch_sse; + unsigned char schedule; + unsigned char tune; + unsigned char tune_defaulted; +}; + + +/* Save optimization variables into a structure. */ +extern void cl_optimization_save (struct cl_optimization *, struct gcc_options *); + +/* Restore optimization variables from a structure. */ +extern void cl_optimization_restore (struct gcc_options *, struct cl_optimization *); + +/* Print optimization variables from a structure. */ +extern void cl_optimization_print (FILE *, int, struct cl_optimization *); + +/* Print different optimization variables from structures provided as arguments. */ +extern void cl_optimization_print_diff (FILE *, int, cl_optimization *ptr1, cl_optimization *ptr2); + +/* Save selected option variables into a structure. */ +extern void cl_target_option_save (struct cl_target_option *, struct gcc_options *); + +/* Restore selected option variables from a structure. */ +extern void cl_target_option_restore (struct gcc_options *, struct cl_target_option *); + +/* Print target option variables from a structure. */ +extern void cl_target_option_print (FILE *, int, struct cl_target_option *); + +/* Print different target option variables from structures provided as arguments. */ +extern void cl_target_option_print_diff (FILE *, int, cl_target_option *ptr1, cl_target_option *ptr2); + +/* Compare two target option variables from a structure. */ +extern bool cl_target_option_eq (const struct cl_target_option *, const struct cl_target_option *); + +/* Hash option variables from a structure. */ +extern hashval_t cl_target_option_hash (const struct cl_target_option *); + +/* Hash optimization from a structure. */ +extern hashval_t cl_optimization_hash (const struct cl_optimization *); + +/* Anything that includes tm.h, does not necessarily need this. */ +#if !defined(GCC_TM_H) +#include "input.h" /* for location_t */ +bool +common_handle_option_auto (struct gcc_options *opts, + struct gcc_options *opts_set, + const struct cl_decoded_option *decoded, + unsigned int lang_mask, int kind, + location_t loc, + const struct cl_option_handlers *handlers, + diagnostic_context *dc); +bool +Ada_handle_option_auto (struct gcc_options *opts, + struct gcc_options *opts_set, + size_t scode, const char *arg, int value, + unsigned int lang_mask, int kind, + location_t loc, + const struct cl_option_handlers *handlers, + diagnostic_context *dc); +bool +AdaSCIL_handle_option_auto (struct gcc_options *opts, + struct gcc_options *opts_set, + size_t scode, const char *arg, int value, + unsigned int lang_mask, int kind, + location_t loc, + const struct cl_option_handlers *handlers, + diagnostic_context *dc); +bool +AdaWhy_handle_option_auto (struct gcc_options *opts, + struct gcc_options *opts_set, + size_t scode, const char *arg, int value, + unsigned int lang_mask, int kind, + location_t loc, + const struct cl_option_handlers *handlers, + diagnostic_context *dc); +bool +C_handle_option_auto (struct gcc_options *opts, + struct gcc_options *opts_set, + size_t scode, const char *arg, int value, + unsigned int lang_mask, int kind, + location_t loc, + const struct cl_option_handlers *handlers, + diagnostic_context *dc); +bool +CXX_handle_option_auto (struct gcc_options *opts, + struct gcc_options *opts_set, + size_t scode, const char *arg, int value, + unsigned int lang_mask, int kind, + location_t loc, + const struct cl_option_handlers *handlers, + diagnostic_context *dc); +bool +Fortran_handle_option_auto (struct gcc_options *opts, + struct gcc_options *opts_set, + size_t scode, const char *arg, int value, + unsigned int lang_mask, int kind, + location_t loc, + const struct cl_option_handlers *handlers, + diagnostic_context *dc); +bool +Go_handle_option_auto (struct gcc_options *opts, + struct gcc_options *opts_set, + size_t scode, const char *arg, int value, + unsigned int lang_mask, int kind, + location_t loc, + const struct cl_option_handlers *handlers, + diagnostic_context *dc); +bool +Java_handle_option_auto (struct gcc_options *opts, + struct gcc_options *opts_set, + size_t scode, const char *arg, int value, + unsigned int lang_mask, int kind, + location_t loc, + const struct cl_option_handlers *handlers, + diagnostic_context *dc); +bool +LTO_handle_option_auto (struct gcc_options *opts, + struct gcc_options *opts_set, + size_t scode, const char *arg, int value, + unsigned int lang_mask, int kind, + location_t loc, + const struct cl_option_handlers *handlers, + diagnostic_context *dc); +bool +ObjC_handle_option_auto (struct gcc_options *opts, + struct gcc_options *opts_set, + size_t scode, const char *arg, int value, + unsigned int lang_mask, int kind, + location_t loc, + const struct cl_option_handlers *handlers, + diagnostic_context *dc); +bool +ObjCXX_handle_option_auto (struct gcc_options *opts, + struct gcc_options *opts_set, + size_t scode, const char *arg, int value, + unsigned int lang_mask, int kind, + location_t loc, + const struct cl_option_handlers *handlers, + diagnostic_context *dc); +void cpp_handle_option_auto (const struct gcc_options * opts, size_t scode, + struct cpp_options * cpp_opts); +void init_global_opts_from_cpp(struct gcc_options * opts, + const struct cpp_options * cpp_opts); +#endif +#endif + +#define MASK_128BIT_LONG_DOUBLE (1 << 0) +#define OPTION_MASK_CODE16 (HOST_WIDE_INT_1 << 0) +#define OPTION_MASK_ISA_64BIT (HOST_WIDE_INT_1 << 1) +#define OPTION_MASK_ISA_3DNOW (HOST_WIDE_INT_1 << 2) +#define OPTION_MASK_ISA_3DNOW_A (HOST_WIDE_INT_1 << 3) +#define OPTION_MASK_ABI_64 (HOST_WIDE_INT_1 << 4) +#define MASK_80387 (1 << 1) +#define MASK_USE_8BIT_IDIV (1 << 2) +#define OPTION_MASK_ISA_ABM (HOST_WIDE_INT_1 << 5) +#define MASK_ACCUMULATE_OUTGOING_ARGS (1 << 3) +#define OPTION_MASK_ISA_ADX (HOST_WIDE_INT_1 << 6) +#define OPTION_MASK_ISA_AES (HOST_WIDE_INT_1 << 7) +#define MASK_ALIGN_DOUBLE (1 << 4) +#define MASK_NO_ALIGN_STRINGOPS (1 << 5) +#define OPTION_MASK_ISA_AVX (HOST_WIDE_INT_1 << 8) +#define OPTION_MASK_ISA_AVX2 (HOST_WIDE_INT_1 << 9) +#define MASK_AVX256_SPLIT_UNALIGNED_LOAD (1 << 6) +#define MASK_AVX256_SPLIT_UNALIGNED_STORE (1 << 7) +#define OPTION_MASK_ISA_AVX512BW (HOST_WIDE_INT_1 << 10) +#define OPTION_MASK_ISA_AVX512CD (HOST_WIDE_INT_1 << 11) +#define OPTION_MASK_ISA_AVX512DQ (HOST_WIDE_INT_1 << 12) +#define OPTION_MASK_ISA_AVX512ER (HOST_WIDE_INT_1 << 13) +#define OPTION_MASK_ISA_AVX512F (HOST_WIDE_INT_1 << 14) +#define OPTION_MASK_ISA_AVX512IFMA (HOST_WIDE_INT_1 << 15) +#define OPTION_MASK_ISA_AVX512PF (HOST_WIDE_INT_1 << 16) +#define OPTION_MASK_ISA_AVX512VBMI (HOST_WIDE_INT_1 << 17) +#define OPTION_MASK_ISA_AVX512VL (HOST_WIDE_INT_1 << 18) +#define OPTION_MASK_ISA_BMI (HOST_WIDE_INT_1 << 19) +#define OPTION_MASK_ISA_BMI2 (HOST_WIDE_INT_1 << 20) +#define MASK_CLD (1 << 8) +#define OPTION_MASK_ISA_CLFLUSHOPT (HOST_WIDE_INT_1 << 21) +#define OPTION_MASK_ISA_CLWB (HOST_WIDE_INT_1 << 22) +#define OPTION_MASK_ISA_CRC32 (HOST_WIDE_INT_1 << 23) +#define OPTION_MASK_ISA_CX16 (HOST_WIDE_INT_1 << 24) +#define OPTION_MASK_ISA_F16C (HOST_WIDE_INT_1 << 25) +#define MASK_NO_FANCY_MATH_387 (1 << 9) +#define OPTION_MASK_ISA_FMA (HOST_WIDE_INT_1 << 26) +#define OPTION_MASK_ISA_FMA4 (HOST_WIDE_INT_1 << 27) +#define MASK_FLOAT_RETURNS (1 << 10) +#define OPTION_MASK_ISA_FSGSBASE (HOST_WIDE_INT_1 << 28) +#define OPTION_MASK_ISA_FXSR (HOST_WIDE_INT_1 << 29) +#define OPTION_MASK_ISA_HLE (HOST_WIDE_INT_1 << 30) +#define MASK_IEEE_FP (1 << 11) +#define MASK_INLINE_ALL_STRINGOPS (1 << 12) +#define MASK_INLINE_STRINGOPS_DYNAMICALLY (1 << 13) +#define MASK_LONG_DOUBLE_128 (1 << 14) +#define MASK_LONG_DOUBLE_64 (1 << 15) +#define OPTION_MASK_ISA_LWP (HOST_WIDE_INT_1 << 31) +#define OPTION_MASK_ISA_LZCNT (HOST_WIDE_INT_1 << 32) +#define OPTION_MASK_ISA_MMX (HOST_WIDE_INT_1 << 33) +#define OPTION_MASK_ISA_MOVBE (HOST_WIDE_INT_1 << 34) +#define OPTION_MASK_ISA_MPX (HOST_WIDE_INT_1 << 35) +#define MASK_MS_BITFIELD_LAYOUT (1 << 16) +#define OPTION_MASK_ISA_MWAITX (HOST_WIDE_INT_1 << 36) +#define MASK_NO_PUSH_ARGS (1 << 17) +#define MASK_NO_RED_ZONE (1 << 18) +#define OPTION_MASK_ISA_SSE4_1 (HOST_WIDE_INT_1 << 37) +#define MASK_OMIT_LEAF_FRAME_POINTER (1 << 19) +#define OPTION_MASK_ISA_PCLMUL (HOST_WIDE_INT_1 << 38) +#define OPTION_MASK_ISA_PCOMMIT (HOST_WIDE_INT_1 << 39) +#define OPTION_MASK_ISA_POPCNT (HOST_WIDE_INT_1 << 40) +#define MASK_PREFER_AVX128 (1 << 20) +#define OPTION_MASK_ISA_PREFETCHWT1 (HOST_WIDE_INT_1 << 41) +#define OPTION_MASK_ISA_PRFCHW (HOST_WIDE_INT_1 << 42) +#define OPTION_MASK_ISA_RDRND (HOST_WIDE_INT_1 << 43) +#define OPTION_MASK_ISA_RDSEED (HOST_WIDE_INT_1 << 44) +#define MASK_RECIP (1 << 21) +#define MASK_RTD (1 << 22) +#define OPTION_MASK_ISA_RTM (HOST_WIDE_INT_1 << 45) +#define OPTION_MASK_ISA_SAHF (HOST_WIDE_INT_1 << 46) +#define OPTION_MASK_ISA_SHA (HOST_WIDE_INT_1 << 47) +#define OPTION_MASK_ISA_SSE (HOST_WIDE_INT_1 << 48) +#define OPTION_MASK_ISA_SSE2 (HOST_WIDE_INT_1 << 49) +#define OPTION_MASK_ISA_SSE3 (HOST_WIDE_INT_1 << 50) +#define OPTION_MASK_ISA_SSE4_2 (HOST_WIDE_INT_1 << 51) +#define OPTION_MASK_ISA_SSE4A (HOST_WIDE_INT_1 << 52) +#define MASK_SSEREGPARM (1 << 23) +#define OPTION_MASK_ISA_SSSE3 (HOST_WIDE_INT_1 << 53) +#define MASK_STACK_PROBE (1 << 24) +#define OPTION_MASK_ISA_TBM (HOST_WIDE_INT_1 << 54) +#define MASK_TLS_DIRECT_SEG_REFS (1 << 25) +#define MASK_VECT8_RETURNS (1 << 26) +#define MASK_VZEROUPPER (1 << 27) +#define OPTION_MASK_ABI_X32 (HOST_WIDE_INT_1 << 55) +#define OPTION_MASK_ISA_XOP (HOST_WIDE_INT_1 << 56) +#define OPTION_MASK_ISA_XSAVE (HOST_WIDE_INT_1 << 57) +#define OPTION_MASK_ISA_XSAVEC (HOST_WIDE_INT_1 << 58) +#define OPTION_MASK_ISA_XSAVEOPT (HOST_WIDE_INT_1 << 59) +#define OPTION_MASK_ISA_XSAVES (HOST_WIDE_INT_1 << 60) + #if defined(HOST_BITS_PER_WIDE_INT) && 61 >= HOST_BITS_PER_WIDE_INT +#error too many masks for ix86_isa_flags +#endif + +#define TARGET_128BIT_LONG_DOUBLE ((target_flags & MASK_128BIT_LONG_DOUBLE) != 0) +#define TARGET_128BIT_LONG_DOUBLE_P(target_flags) ((target_flags & MASK_128BIT_LONG_DOUBLE) != 0) +#define TARGET_CODE16 ((ix86_isa_flags & OPTION_MASK_CODE16) != 0) +#define TARGET_CODE16_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_CODE16) != 0) +#define TARGET_ISA_64BIT ((ix86_isa_flags & OPTION_MASK_ISA_64BIT) != 0) +#define TARGET_ISA_64BIT_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_64BIT) != 0) +#define TARGET_ISA_3DNOW ((ix86_isa_flags & OPTION_MASK_ISA_3DNOW) != 0) +#define TARGET_ISA_3DNOW_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_3DNOW) != 0) +#define TARGET_ISA_3DNOW_A ((ix86_isa_flags & OPTION_MASK_ISA_3DNOW_A) != 0) +#define TARGET_ISA_3DNOW_A_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_3DNOW_A) != 0) +#define TARGET_ABI_64 ((ix86_isa_flags & OPTION_MASK_ABI_64) != 0) +#define TARGET_ABI_64_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ABI_64) != 0) +#define TARGET_80387 ((target_flags & MASK_80387) != 0) +#define TARGET_80387_P(target_flags) ((target_flags & MASK_80387) != 0) +#define TARGET_USE_8BIT_IDIV ((target_flags & MASK_USE_8BIT_IDIV) != 0) +#define TARGET_USE_8BIT_IDIV_P(target_flags) ((target_flags & MASK_USE_8BIT_IDIV) != 0) +#define TARGET_ISA_ABM ((ix86_isa_flags & OPTION_MASK_ISA_ABM) != 0) +#define TARGET_ISA_ABM_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_ABM) != 0) +#define TARGET_ACCUMULATE_OUTGOING_ARGS ((target_flags & MASK_ACCUMULATE_OUTGOING_ARGS) != 0) +#define TARGET_ACCUMULATE_OUTGOING_ARGS_P(target_flags) ((target_flags & MASK_ACCUMULATE_OUTGOING_ARGS) != 0) +#define TARGET_ISA_ADX ((ix86_isa_flags & OPTION_MASK_ISA_ADX) != 0) +#define TARGET_ISA_ADX_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_ADX) != 0) +#define TARGET_ISA_AES ((ix86_isa_flags & OPTION_MASK_ISA_AES) != 0) +#define TARGET_ISA_AES_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_AES) != 0) +#define TARGET_ALIGN_DOUBLE ((target_flags & MASK_ALIGN_DOUBLE) != 0) +#define TARGET_ALIGN_DOUBLE_P(target_flags) ((target_flags & MASK_ALIGN_DOUBLE) != 0) +#define TARGET_NO_ALIGN_STRINGOPS ((target_flags & MASK_NO_ALIGN_STRINGOPS) != 0) +#define TARGET_NO_ALIGN_STRINGOPS_P(target_flags) ((target_flags & MASK_NO_ALIGN_STRINGOPS) != 0) +#define TARGET_ISA_AVX ((ix86_isa_flags & OPTION_MASK_ISA_AVX) != 0) +#define TARGET_ISA_AVX_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_AVX) != 0) +#define TARGET_ISA_AVX2 ((ix86_isa_flags & OPTION_MASK_ISA_AVX2) != 0) +#define TARGET_ISA_AVX2_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_AVX2) != 0) +#define TARGET_AVX256_SPLIT_UNALIGNED_LOAD ((target_flags & MASK_AVX256_SPLIT_UNALIGNED_LOAD) != 0) +#define TARGET_AVX256_SPLIT_UNALIGNED_LOAD_P(target_flags) ((target_flags & MASK_AVX256_SPLIT_UNALIGNED_LOAD) != 0) +#define TARGET_AVX256_SPLIT_UNALIGNED_STORE ((target_flags & MASK_AVX256_SPLIT_UNALIGNED_STORE) != 0) +#define TARGET_AVX256_SPLIT_UNALIGNED_STORE_P(target_flags) ((target_flags & MASK_AVX256_SPLIT_UNALIGNED_STORE) != 0) +#define TARGET_ISA_AVX512BW ((ix86_isa_flags & OPTION_MASK_ISA_AVX512BW) != 0) +#define TARGET_ISA_AVX512BW_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_AVX512BW) != 0) +#define TARGET_ISA_AVX512CD ((ix86_isa_flags & OPTION_MASK_ISA_AVX512CD) != 0) +#define TARGET_ISA_AVX512CD_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_AVX512CD) != 0) +#define TARGET_ISA_AVX512DQ ((ix86_isa_flags & OPTION_MASK_ISA_AVX512DQ) != 0) +#define TARGET_ISA_AVX512DQ_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_AVX512DQ) != 0) +#define TARGET_ISA_AVX512ER ((ix86_isa_flags & OPTION_MASK_ISA_AVX512ER) != 0) +#define TARGET_ISA_AVX512ER_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_AVX512ER) != 0) +#define TARGET_ISA_AVX512F ((ix86_isa_flags & OPTION_MASK_ISA_AVX512F) != 0) +#define TARGET_ISA_AVX512F_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_AVX512F) != 0) +#define TARGET_ISA_AVX512IFMA ((ix86_isa_flags & OPTION_MASK_ISA_AVX512IFMA) != 0) +#define TARGET_ISA_AVX512IFMA_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_AVX512IFMA) != 0) +#define TARGET_ISA_AVX512PF ((ix86_isa_flags & OPTION_MASK_ISA_AVX512PF) != 0) +#define TARGET_ISA_AVX512PF_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_AVX512PF) != 0) +#define TARGET_ISA_AVX512VBMI ((ix86_isa_flags & OPTION_MASK_ISA_AVX512VBMI) != 0) +#define TARGET_ISA_AVX512VBMI_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_AVX512VBMI) != 0) +#define TARGET_ISA_AVX512VL ((ix86_isa_flags & OPTION_MASK_ISA_AVX512VL) != 0) +#define TARGET_ISA_AVX512VL_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_AVX512VL) != 0) +#define TARGET_ISA_BMI ((ix86_isa_flags & OPTION_MASK_ISA_BMI) != 0) +#define TARGET_ISA_BMI_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_BMI) != 0) +#define TARGET_ISA_BMI2 ((ix86_isa_flags & OPTION_MASK_ISA_BMI2) != 0) +#define TARGET_ISA_BMI2_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_BMI2) != 0) +#define TARGET_CLD ((target_flags & MASK_CLD) != 0) +#define TARGET_CLD_P(target_flags) ((target_flags & MASK_CLD) != 0) +#define TARGET_ISA_CLFLUSHOPT ((ix86_isa_flags & OPTION_MASK_ISA_CLFLUSHOPT) != 0) +#define TARGET_ISA_CLFLUSHOPT_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_CLFLUSHOPT) != 0) +#define TARGET_ISA_CLWB ((ix86_isa_flags & OPTION_MASK_ISA_CLWB) != 0) +#define TARGET_ISA_CLWB_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_CLWB) != 0) +#define TARGET_ISA_CRC32 ((ix86_isa_flags & OPTION_MASK_ISA_CRC32) != 0) +#define TARGET_ISA_CRC32_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_CRC32) != 0) +#define TARGET_ISA_CX16 ((ix86_isa_flags & OPTION_MASK_ISA_CX16) != 0) +#define TARGET_ISA_CX16_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_CX16) != 0) +#define TARGET_ISA_F16C ((ix86_isa_flags & OPTION_MASK_ISA_F16C) != 0) +#define TARGET_ISA_F16C_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_F16C) != 0) +#define TARGET_NO_FANCY_MATH_387 ((target_flags & MASK_NO_FANCY_MATH_387) != 0) +#define TARGET_NO_FANCY_MATH_387_P(target_flags) ((target_flags & MASK_NO_FANCY_MATH_387) != 0) +#define TARGET_ISA_FMA ((ix86_isa_flags & OPTION_MASK_ISA_FMA) != 0) +#define TARGET_ISA_FMA_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_FMA) != 0) +#define TARGET_ISA_FMA4 ((ix86_isa_flags & OPTION_MASK_ISA_FMA4) != 0) +#define TARGET_ISA_FMA4_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_FMA4) != 0) +#define TARGET_FLOAT_RETURNS ((target_flags & MASK_FLOAT_RETURNS) != 0) +#define TARGET_FLOAT_RETURNS_P(target_flags) ((target_flags & MASK_FLOAT_RETURNS) != 0) +#define TARGET_ISA_FSGSBASE ((ix86_isa_flags & OPTION_MASK_ISA_FSGSBASE) != 0) +#define TARGET_ISA_FSGSBASE_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_FSGSBASE) != 0) +#define TARGET_ISA_FXSR ((ix86_isa_flags & OPTION_MASK_ISA_FXSR) != 0) +#define TARGET_ISA_FXSR_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_FXSR) != 0) +#define TARGET_ISA_HLE ((ix86_isa_flags & OPTION_MASK_ISA_HLE) != 0) +#define TARGET_ISA_HLE_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_HLE) != 0) +#define TARGET_IEEE_FP ((target_flags & MASK_IEEE_FP) != 0) +#define TARGET_IEEE_FP_P(target_flags) ((target_flags & MASK_IEEE_FP) != 0) +#define TARGET_INLINE_ALL_STRINGOPS ((target_flags & MASK_INLINE_ALL_STRINGOPS) != 0) +#define TARGET_INLINE_ALL_STRINGOPS_P(target_flags) ((target_flags & MASK_INLINE_ALL_STRINGOPS) != 0) +#define TARGET_INLINE_STRINGOPS_DYNAMICALLY ((target_flags & MASK_INLINE_STRINGOPS_DYNAMICALLY) != 0) +#define TARGET_INLINE_STRINGOPS_DYNAMICALLY_P(target_flags) ((target_flags & MASK_INLINE_STRINGOPS_DYNAMICALLY) != 0) +#define TARGET_LONG_DOUBLE_128 ((target_flags & MASK_LONG_DOUBLE_128) != 0) +#define TARGET_LONG_DOUBLE_128_P(target_flags) ((target_flags & MASK_LONG_DOUBLE_128) != 0) +#define TARGET_LONG_DOUBLE_64 ((target_flags & MASK_LONG_DOUBLE_64) != 0) +#define TARGET_LONG_DOUBLE_64_P(target_flags) ((target_flags & MASK_LONG_DOUBLE_64) != 0) +#define TARGET_ISA_LWP ((ix86_isa_flags & OPTION_MASK_ISA_LWP) != 0) +#define TARGET_ISA_LWP_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_LWP) != 0) +#define TARGET_ISA_LZCNT ((ix86_isa_flags & OPTION_MASK_ISA_LZCNT) != 0) +#define TARGET_ISA_LZCNT_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_LZCNT) != 0) +#define TARGET_ISA_MMX ((ix86_isa_flags & OPTION_MASK_ISA_MMX) != 0) +#define TARGET_ISA_MMX_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_MMX) != 0) +#define TARGET_ISA_MOVBE ((ix86_isa_flags & OPTION_MASK_ISA_MOVBE) != 0) +#define TARGET_ISA_MOVBE_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_MOVBE) != 0) +#define TARGET_ISA_MPX ((ix86_isa_flags & OPTION_MASK_ISA_MPX) != 0) +#define TARGET_ISA_MPX_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_MPX) != 0) +#define TARGET_MS_BITFIELD_LAYOUT ((target_flags & MASK_MS_BITFIELD_LAYOUT) != 0) +#define TARGET_MS_BITFIELD_LAYOUT_P(target_flags) ((target_flags & MASK_MS_BITFIELD_LAYOUT) != 0) +#define TARGET_ISA_MWAITX ((ix86_isa_flags & OPTION_MASK_ISA_MWAITX) != 0) +#define TARGET_ISA_MWAITX_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_MWAITX) != 0) +#define TARGET_NO_PUSH_ARGS ((target_flags & MASK_NO_PUSH_ARGS) != 0) +#define TARGET_NO_PUSH_ARGS_P(target_flags) ((target_flags & MASK_NO_PUSH_ARGS) != 0) +#define TARGET_NO_RED_ZONE ((target_flags & MASK_NO_RED_ZONE) != 0) +#define TARGET_NO_RED_ZONE_P(target_flags) ((target_flags & MASK_NO_RED_ZONE) != 0) +#define TARGET_ISA_SSE4_1 ((ix86_isa_flags & OPTION_MASK_ISA_SSE4_1) != 0) +#define TARGET_ISA_SSE4_1_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_SSE4_1) != 0) +#define TARGET_OMIT_LEAF_FRAME_POINTER ((target_flags & MASK_OMIT_LEAF_FRAME_POINTER) != 0) +#define TARGET_OMIT_LEAF_FRAME_POINTER_P(target_flags) ((target_flags & MASK_OMIT_LEAF_FRAME_POINTER) != 0) +#define TARGET_ISA_PCLMUL ((ix86_isa_flags & OPTION_MASK_ISA_PCLMUL) != 0) +#define TARGET_ISA_PCLMUL_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_PCLMUL) != 0) +#define TARGET_ISA_PCOMMIT ((ix86_isa_flags & OPTION_MASK_ISA_PCOMMIT) != 0) +#define TARGET_ISA_PCOMMIT_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_PCOMMIT) != 0) +#define TARGET_ISA_POPCNT ((ix86_isa_flags & OPTION_MASK_ISA_POPCNT) != 0) +#define TARGET_ISA_POPCNT_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_POPCNT) != 0) +#define TARGET_PREFER_AVX128 ((target_flags & MASK_PREFER_AVX128) != 0) +#define TARGET_PREFER_AVX128_P(target_flags) ((target_flags & MASK_PREFER_AVX128) != 0) +#define TARGET_ISA_PREFETCHWT1 ((ix86_isa_flags & OPTION_MASK_ISA_PREFETCHWT1) != 0) +#define TARGET_ISA_PREFETCHWT1_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_PREFETCHWT1) != 0) +#define TARGET_ISA_PRFCHW ((ix86_isa_flags & OPTION_MASK_ISA_PRFCHW) != 0) +#define TARGET_ISA_PRFCHW_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_PRFCHW) != 0) +#define TARGET_ISA_RDRND ((ix86_isa_flags & OPTION_MASK_ISA_RDRND) != 0) +#define TARGET_ISA_RDRND_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_RDRND) != 0) +#define TARGET_ISA_RDSEED ((ix86_isa_flags & OPTION_MASK_ISA_RDSEED) != 0) +#define TARGET_ISA_RDSEED_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_RDSEED) != 0) +#define TARGET_RECIP ((target_flags & MASK_RECIP) != 0) +#define TARGET_RECIP_P(target_flags) ((target_flags & MASK_RECIP) != 0) +#define TARGET_RTD ((target_flags & MASK_RTD) != 0) +#define TARGET_RTD_P(target_flags) ((target_flags & MASK_RTD) != 0) +#define TARGET_ISA_RTM ((ix86_isa_flags & OPTION_MASK_ISA_RTM) != 0) +#define TARGET_ISA_RTM_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_RTM) != 0) +#define TARGET_ISA_SAHF ((ix86_isa_flags & OPTION_MASK_ISA_SAHF) != 0) +#define TARGET_ISA_SAHF_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_SAHF) != 0) +#define TARGET_ISA_SHA ((ix86_isa_flags & OPTION_MASK_ISA_SHA) != 0) +#define TARGET_ISA_SHA_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_SHA) != 0) +#define TARGET_ISA_SSE ((ix86_isa_flags & OPTION_MASK_ISA_SSE) != 0) +#define TARGET_ISA_SSE_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_SSE) != 0) +#define TARGET_ISA_SSE2 ((ix86_isa_flags & OPTION_MASK_ISA_SSE2) != 0) +#define TARGET_ISA_SSE2_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_SSE2) != 0) +#define TARGET_ISA_SSE3 ((ix86_isa_flags & OPTION_MASK_ISA_SSE3) != 0) +#define TARGET_ISA_SSE3_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_SSE3) != 0) +#define TARGET_ISA_SSE4_2 ((ix86_isa_flags & OPTION_MASK_ISA_SSE4_2) != 0) +#define TARGET_ISA_SSE4_2_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_SSE4_2) != 0) +#define TARGET_ISA_SSE4A ((ix86_isa_flags & OPTION_MASK_ISA_SSE4A) != 0) +#define TARGET_ISA_SSE4A_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_SSE4A) != 0) +#define TARGET_SSEREGPARM ((target_flags & MASK_SSEREGPARM) != 0) +#define TARGET_SSEREGPARM_P(target_flags) ((target_flags & MASK_SSEREGPARM) != 0) +#define TARGET_ISA_SSSE3 ((ix86_isa_flags & OPTION_MASK_ISA_SSSE3) != 0) +#define TARGET_ISA_SSSE3_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_SSSE3) != 0) +#define TARGET_STACK_PROBE ((target_flags & MASK_STACK_PROBE) != 0) +#define TARGET_STACK_PROBE_P(target_flags) ((target_flags & MASK_STACK_PROBE) != 0) +#define TARGET_ISA_TBM ((ix86_isa_flags & OPTION_MASK_ISA_TBM) != 0) +#define TARGET_ISA_TBM_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_TBM) != 0) +#define TARGET_TLS_DIRECT_SEG_REFS ((target_flags & MASK_TLS_DIRECT_SEG_REFS) != 0) +#define TARGET_TLS_DIRECT_SEG_REFS_P(target_flags) ((target_flags & MASK_TLS_DIRECT_SEG_REFS) != 0) +#define TARGET_VECT8_RETURNS ((target_flags & MASK_VECT8_RETURNS) != 0) +#define TARGET_VECT8_RETURNS_P(target_flags) ((target_flags & MASK_VECT8_RETURNS) != 0) +#define TARGET_VZEROUPPER ((target_flags & MASK_VZEROUPPER) != 0) +#define TARGET_VZEROUPPER_P(target_flags) ((target_flags & MASK_VZEROUPPER) != 0) +#define TARGET_ABI_X32 ((ix86_isa_flags & OPTION_MASK_ABI_X32) != 0) +#define TARGET_ABI_X32_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ABI_X32) != 0) +#define TARGET_ISA_XOP ((ix86_isa_flags & OPTION_MASK_ISA_XOP) != 0) +#define TARGET_ISA_XOP_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_XOP) != 0) +#define TARGET_ISA_XSAVE ((ix86_isa_flags & OPTION_MASK_ISA_XSAVE) != 0) +#define TARGET_ISA_XSAVE_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_XSAVE) != 0) +#define TARGET_ISA_XSAVEC ((ix86_isa_flags & OPTION_MASK_ISA_XSAVEC) != 0) +#define TARGET_ISA_XSAVEC_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_XSAVEC) != 0) +#define TARGET_ISA_XSAVEOPT ((ix86_isa_flags & OPTION_MASK_ISA_XSAVEOPT) != 0) +#define TARGET_ISA_XSAVEOPT_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_XSAVEOPT) != 0) +#define TARGET_ISA_XSAVES ((ix86_isa_flags & OPTION_MASK_ISA_XSAVES) != 0) +#define TARGET_ISA_XSAVES_P(ix86_isa_flags) ((ix86_isa_flags & OPTION_MASK_ISA_XSAVES) != 0) + +#define TARGET_ALIGN_STRINGOPS ((target_flags & MASK_NO_ALIGN_STRINGOPS) == 0) +#define TARGET_USE_FANCY_MATH_387 ((target_flags & MASK_NO_FANCY_MATH_387) == 0) +#define TARGET_PUSH_ARGS ((target_flags & MASK_NO_PUSH_ARGS) == 0) +#define TARGET_RED_ZONE ((target_flags & MASK_NO_RED_ZONE) == 0) + +#define CL_Ada (1U << 0) +#define CL_AdaSCIL (1U << 1) +#define CL_AdaWhy (1U << 2) +#define CL_C (1U << 3) +#define CL_CXX (1U << 4) +#define CL_Fortran (1U << 5) +#define CL_Go (1U << 6) +#define CL_Java (1U << 7) +#define CL_LTO (1U << 8) +#define CL_ObjC (1U << 9) +#define CL_ObjCXX (1U << 10) +#define CL_LANG_ALL ((1U << 11) - 1) + +enum opt_code +{ + OPT____ = 0, /* -### */ + /* OPT__CLASSPATH = 1, */ /* --CLASSPATH */ + /* OPT__all_warnings = 2, */ /* --all-warnings */ + /* OPT__ansi = 3, */ /* --ansi */ + /* OPT__assemble = 4, */ /* --assemble */ + /* OPT__assert = 5, */ /* --assert */ + /* OPT__assert_ = 6, */ /* --assert= */ + /* OPT__bootclasspath = 7, */ /* --bootclasspath */ + /* OPT__classpath = 8, */ /* --classpath */ + /* OPT__comments = 9, */ /* --comments */ + /* OPT__comments_in_macros = 10, */ /* --comments-in-macros */ + /* OPT__compile = 11, */ /* --compile */ + /* OPT__coverage = 12, */ /* --coverage */ + /* OPT__debug = 13, */ /* --debug */ + /* OPT__define_macro = 14, */ /* --define-macro */ + /* OPT__define_macro_ = 15, */ /* --define-macro= */ + /* OPT__dependencies = 16, */ /* --dependencies */ + /* OPT__dump = 17, */ /* --dump */ + /* OPT__dump_ = 18, */ /* --dump= */ + /* OPT__dumpbase = 19, */ /* --dumpbase */ + /* OPT__dumpdir = 20, */ /* --dumpdir */ + /* OPT__encoding = 21, */ /* --encoding */ + /* OPT__entry = 22, */ /* --entry */ + /* OPT__entry_ = 23, */ /* --entry= */ + /* OPT__extdirs = 24, */ /* --extdirs */ + /* OPT__extra_warnings = 25, */ /* --extra-warnings */ + /* OPT__for_assembler = 26, */ /* --for-assembler */ + /* OPT__for_assembler_ = 27, */ /* --for-assembler= */ + /* OPT__for_linker = 28, */ /* --for-linker */ + /* OPT__for_linker_ = 29, */ /* --for-linker= */ + /* OPT__force_link = 30, */ /* --force-link */ + /* OPT__force_link_ = 31, */ /* --force-link= */ + OPT__help = 32, /* --help */ + OPT__help_ = 33, /* --help= */ + /* OPT__imacros = 34, */ /* --imacros */ + /* OPT__imacros_ = 35, */ /* --imacros= */ + /* OPT__include = 36, */ /* --include */ + /* OPT__include_barrier = 37, */ /* --include-barrier */ + /* OPT__include_directory = 38, */ /* --include-directory */ + /* OPT__include_directory_after = 39, */ /* --include-directory-after */ + /* OPT__include_directory_after_ = 40, */ /* --include-directory-after= */ + /* OPT__include_directory_ = 41, */ /* --include-directory= */ + /* OPT__include_prefix = 42, */ /* --include-prefix */ + /* OPT__include_prefix_ = 43, */ /* --include-prefix= */ + /* OPT__include_with_prefix = 44, */ /* --include-with-prefix */ + /* OPT__include_with_prefix_after = 45, */ /* --include-with-prefix-after */ + /* OPT__include_with_prefix_after_ = 46, *//* --include-with-prefix-after= */ + /* OPT__include_with_prefix_before = 47, *//* --include-with-prefix-before */ + /* OPT__include_with_prefix_before_ = 48, *//* --include-with-prefix-before= */ + /* OPT__include_with_prefix_ = 49, */ /* --include-with-prefix= */ + /* OPT__include_ = 50, */ /* --include= */ + /* OPT__language = 51, */ /* --language */ + /* OPT__language_ = 52, */ /* --language= */ + /* OPT__library_directory = 53, */ /* --library-directory */ + /* OPT__library_directory_ = 54, */ /* --library-directory= */ + /* OPT__no_canonical_prefixes = 55, */ /* --no-canonical-prefixes */ + /* OPT__no_integrated_cpp = 56, */ /* --no-integrated-cpp */ + /* OPT__no_line_commands = 57, */ /* --no-line-commands */ + /* OPT__no_standard_includes = 58, */ /* --no-standard-includes */ + /* OPT__no_standard_libraries = 59, */ /* --no-standard-libraries */ + OPT__no_sysroot_suffix = 60, /* --no-sysroot-suffix */ + /* OPT__no_warnings = 61, */ /* --no-warnings */ + /* OPT__optimize = 62, */ /* --optimize */ + /* OPT__output = 63, */ /* --output */ + /* OPT__output_class_directory = 64, */ /* --output-class-directory */ + /* OPT__output_class_directory_ = 65, */ /* --output-class-directory= */ + OPT__output_pch_ = 66, /* --output-pch= */ + /* OPT__output_ = 67, */ /* --output= */ + OPT__param = 68, /* --param */ + /* OPT__param_ = 69, */ /* --param= */ + /* OPT__pass_exit_codes = 70, */ /* --pass-exit-codes */ + /* OPT__pedantic = 71, */ /* --pedantic */ + /* OPT__pedantic_errors = 72, */ /* --pedantic-errors */ + /* OPT__pie = 73, */ /* --pie */ + /* OPT__pipe = 74, */ /* --pipe */ + /* OPT__prefix = 75, */ /* --prefix */ + /* OPT__prefix_ = 76, */ /* --prefix= */ + /* OPT__preprocess = 77, */ /* --preprocess */ + /* OPT__print_file_name = 78, */ /* --print-file-name */ + /* OPT__print_file_name_ = 79, */ /* --print-file-name= */ + /* OPT__print_libgcc_file_name = 80, */ /* --print-libgcc-file-name */ + /* OPT__print_missing_file_dependencies = 81, *//* --print-missing-file-dependencies */ + /* OPT__print_multi_directory = 82, */ /* --print-multi-directory */ + /* OPT__print_multi_lib = 83, */ /* --print-multi-lib */ + /* OPT__print_multi_os_directory = 84, */ /* --print-multi-os-directory */ + /* OPT__print_multiarch = 85, */ /* --print-multiarch */ + /* OPT__print_prog_name = 86, */ /* --print-prog-name */ + /* OPT__print_prog_name_ = 87, */ /* --print-prog-name= */ + /* OPT__print_search_dirs = 88, */ /* --print-search-dirs */ + /* OPT__print_sysroot = 89, */ /* --print-sysroot */ + /* OPT__print_sysroot_headers_suffix = 90, *//* --print-sysroot-headers-suffix */ + /* OPT__profile = 91, */ /* --profile */ + /* OPT__resource = 92, */ /* --resource */ + /* OPT__resource_ = 93, */ /* --resource= */ + /* OPT__save_temps = 94, */ /* --save-temps */ + /* OPT__shared = 95, */ /* --shared */ + /* OPT__specs = 96, */ /* --specs */ + /* OPT__specs_ = 97, */ /* --specs= */ + /* OPT__static = 98, */ /* --static */ + /* OPT__symbolic = 99, */ /* --symbolic */ + /* OPT__sysroot = 100, */ /* --sysroot */ + OPT__sysroot_ = 101, /* --sysroot= */ + OPT__target_help = 102, /* --target-help */ + /* OPT__time = 103, */ /* --time */ + /* OPT__trace_includes = 104, */ /* --trace-includes */ + /* OPT__traditional = 105, */ /* --traditional */ + /* OPT__traditional_cpp = 106, */ /* --traditional-cpp */ + /* OPT__trigraphs = 107, */ /* --trigraphs */ + /* OPT__undefine_macro = 108, */ /* --undefine-macro */ + /* OPT__undefine_macro_ = 109, */ /* --undefine-macro= */ + /* OPT__user_dependencies = 110, */ /* --user-dependencies */ + /* OPT__verbose = 111, */ /* --verbose */ + OPT__version = 112, /* --version */ + /* OPT__write_dependencies = 113, */ /* --write-dependencies */ + /* OPT__write_user_dependencies = 114, */ /* --write-user-dependencies */ + OPT_A = 115, /* -A */ + OPT_B = 116, /* -B */ + OPT_C = 117, /* -C */ + OPT_CC = 118, /* -CC */ + /* OPT_CLASSPATH = 119, */ /* -CLASSPATH */ + OPT_D = 120, /* -D */ + OPT_E = 121, /* -E */ + OPT_F = 122, /* -F */ + OPT_H = 123, /* -H */ + OPT_I = 124, /* -I */ + OPT_J = 125, /* -J */ + OPT_L = 126, /* -L */ + OPT_M = 127, /* -M */ + OPT_MD = 128, /* -MD */ + OPT_MD_ = 129, /* -MD_ */ + OPT_MF = 130, /* -MF */ + OPT_MG = 131, /* -MG */ + OPT_MM = 132, /* -MM */ + OPT_MMD = 133, /* -MMD */ + OPT_MMD_ = 134, /* -MMD_ */ + OPT_MP = 135, /* -MP */ + OPT_MQ = 136, /* -MQ */ + OPT_MT = 137, /* -MT */ + OPT_N = 138, /* -N */ + OPT_O = 139, /* -O */ + OPT_Ofast = 140, /* -Ofast */ + OPT_Og = 141, /* -Og */ + OPT_Os = 142, /* -Os */ + OPT_P = 143, /* -P */ + OPT_Q = 144, /* -Q */ + OPT_Qn = 145, /* -Qn */ + OPT_Qy = 146, /* -Qy */ + OPT_R = 147, /* -R */ + OPT_S = 148, /* -S */ + OPT_T = 149, /* -T */ + OPT_Tbss = 150, /* -Tbss */ + OPT_Tbss_ = 151, /* -Tbss= */ + OPT_Tdata = 152, /* -Tdata */ + OPT_Tdata_ = 153, /* -Tdata= */ + OPT_Ttext = 154, /* -Ttext */ + OPT_Ttext_ = 155, /* -Ttext= */ + OPT_U = 156, /* -U */ + /* OPT_W = 157, */ /* -W */ + OPT_Wa_ = 158, /* -Wa, */ + OPT_Wabi = 159, /* -Wabi */ + OPT_Wabi_tag = 160, /* -Wabi-tag */ + OPT_Wabi_ = 161, /* -Wabi= */ + OPT_Waddress = 162, /* -Waddress */ + OPT_Waggregate_return = 163, /* -Waggregate-return */ + OPT_Waggressive_loop_optimizations = 164, /* -Waggressive-loop-optimizations */ + OPT_Waliasing = 165, /* -Waliasing */ + OPT_Walign_commons = 166, /* -Walign-commons */ + OPT_Wall = 167, /* -Wall */ + OPT_Wall_deprecation = 168, /* -Wall-deprecation */ + OPT_Wall_javadoc = 169, /* -Wall-javadoc */ + OPT_Wampersand = 170, /* -Wampersand */ + OPT_Warray_bounds = 171, /* -Warray-bounds */ + OPT_Warray_bounds_ = 172, /* -Warray-bounds= */ + OPT_Warray_temporaries = 173, /* -Warray-temporaries */ + OPT_Wassert_identifier = 174, /* -Wassert-identifier */ + OPT_Wassign_intercept = 175, /* -Wassign-intercept */ + OPT_Wattributes = 176, /* -Wattributes */ + OPT_Wbad_function_cast = 177, /* -Wbad-function-cast */ + OPT_Wbool_compare = 178, /* -Wbool-compare */ + OPT_Wboxing = 179, /* -Wboxing */ + OPT_Wbuiltin_macro_redefined = 180, /* -Wbuiltin-macro-redefined */ + OPT_Wc___compat = 181, /* -Wc++-compat */ + OPT_Wc__0x_compat = 182, /* -Wc++0x-compat */ + /* OPT_Wc__11_compat = 183, */ /* -Wc++11-compat */ + OPT_Wc__14_compat = 184, /* -Wc++14-compat */ + OPT_Wc_binding_type = 185, /* -Wc-binding-type */ + OPT_Wc90_c99_compat = 186, /* -Wc90-c99-compat */ + OPT_Wc99_c11_compat = 187, /* -Wc99-c11-compat */ + OPT_Wcast_align = 188, /* -Wcast-align */ + OPT_Wcast_qual = 189, /* -Wcast-qual */ + OPT_Wchar_concat = 190, /* -Wchar-concat */ + OPT_Wchar_subscripts = 191, /* -Wchar-subscripts */ + OPT_Wcharacter_truncation = 192, /* -Wcharacter-truncation */ + OPT_Wchkp = 193, /* -Wchkp */ + OPT_Wclobbered = 194, /* -Wclobbered */ + OPT_Wcomment = 195, /* -Wcomment */ + /* OPT_Wcomments = 196, */ /* -Wcomments */ + OPT_Wcompare_reals = 197, /* -Wcompare-reals */ + OPT_Wcondition_assign = 198, /* -Wcondition-assign */ + OPT_Wconditionally_supported = 199, /* -Wconditionally-supported */ + OPT_Wconstructor_name = 200, /* -Wconstructor-name */ + OPT_Wconversion = 201, /* -Wconversion */ + OPT_Wconversion_extra = 202, /* -Wconversion-extra */ + OPT_Wconversion_null = 203, /* -Wconversion-null */ + OPT_Wcoverage_mismatch = 204, /* -Wcoverage-mismatch */ + OPT_Wcpp = 205, /* -Wcpp */ + OPT_Wctor_dtor_privacy = 206, /* -Wctor-dtor-privacy */ + OPT_Wdate_time = 207, /* -Wdate-time */ + OPT_Wdeclaration_after_statement = 208, /* -Wdeclaration-after-statement */ + OPT_Wdelete_incomplete = 209, /* -Wdelete-incomplete */ + OPT_Wdelete_non_virtual_dtor = 210, /* -Wdelete-non-virtual-dtor */ + OPT_Wdep_ann = 211, /* -Wdep-ann */ + OPT_Wdeprecated = 212, /* -Wdeprecated */ + OPT_Wdeprecated_declarations = 213, /* -Wdeprecated-declarations */ + OPT_Wdesignated_init = 214, /* -Wdesignated-init */ + OPT_Wdisabled_optimization = 215, /* -Wdisabled-optimization */ + OPT_Wdiscarded_array_qualifiers = 216, /* -Wdiscarded-array-qualifiers */ + OPT_Wdiscarded_qualifiers = 217, /* -Wdiscarded-qualifiers */ + OPT_Wdiscouraged = 218, /* -Wdiscouraged */ + OPT_Wdiv_by_zero = 219, /* -Wdiv-by-zero */ + OPT_Wdouble_promotion = 220, /* -Wdouble-promotion */ + OPT_Weffc__ = 221, /* -Weffc++ */ + OPT_Wempty_block = 222, /* -Wempty-block */ + OPT_Wempty_body = 223, /* -Wempty-body */ + OPT_Wendif_labels = 224, /* -Wendif-labels */ + OPT_Wenum_compare = 225, /* -Wenum-compare */ + OPT_Wenum_identifier = 226, /* -Wenum-identifier */ + OPT_Wenum_switch = 227, /* -Wenum-switch */ + OPT_Werror = 228, /* -Werror */ + /* OPT_Werror_implicit_function_declaration = 229, *//* -Werror-implicit-function-declaration */ + OPT_Werror_ = 230, /* -Werror= */ + OPT_Wextra = 231, /* -Wextra */ + OPT_Wextraneous_semicolon = 232, /* -Wextraneous-semicolon */ + OPT_Wfallthrough = 233, /* -Wfallthrough */ + OPT_Wfatal_errors = 234, /* -Wfatal-errors */ + OPT_Wfield_hiding = 235, /* -Wfield-hiding */ + OPT_Wfinal_bound = 236, /* -Wfinal-bound */ + OPT_Wfinally = 237, /* -Wfinally */ + OPT_Wfloat_conversion = 238, /* -Wfloat-conversion */ + OPT_Wfloat_equal = 239, /* -Wfloat-equal */ + OPT_Wforbidden = 240, /* -Wforbidden */ + /* OPT_Wformat = 241, */ /* -Wformat */ + OPT_Wformat_contains_nul = 242, /* -Wformat-contains-nul */ + OPT_Wformat_extra_args = 243, /* -Wformat-extra-args */ + OPT_Wformat_nonliteral = 244, /* -Wformat-nonliteral */ + OPT_Wformat_security = 245, /* -Wformat-security */ + OPT_Wformat_signedness = 246, /* -Wformat-signedness */ + OPT_Wformat_y2k = 247, /* -Wformat-y2k */ + OPT_Wformat_zero_length = 248, /* -Wformat-zero-length */ + OPT_Wformat_ = 249, /* -Wformat= */ + OPT_Wframe_larger_than_ = 250, /* -Wframe-larger-than= */ + OPT_Wfree_nonheap_object = 251, /* -Wfree-nonheap-object */ + OPT_Wfunction_elimination = 252, /* -Wfunction-elimination */ + OPT_Whiding = 253, /* -Whiding */ + OPT_Wignored_qualifiers = 254, /* -Wignored-qualifiers */ + OPT_Wimplicit = 255, /* -Wimplicit */ + OPT_Wimplicit_function_declaration = 256, /* -Wimplicit-function-declaration */ + OPT_Wimplicit_int = 257, /* -Wimplicit-int */ + OPT_Wimplicit_interface = 258, /* -Wimplicit-interface */ + OPT_Wimplicit_procedure = 259, /* -Wimplicit-procedure */ + /* OPT_Wimport = 260, */ /* -Wimport */ + OPT_Wincompatible_pointer_types = 261, /* -Wincompatible-pointer-types */ + OPT_Windirect_static = 262, /* -Windirect-static */ + OPT_Winherited_variadic_ctor = 263, /* -Winherited-variadic-ctor */ + OPT_Winit_self = 264, /* -Winit-self */ + OPT_Winline = 265, /* -Winline */ + OPT_Wint_conversion = 266, /* -Wint-conversion */ + OPT_Wint_to_pointer_cast = 267, /* -Wint-to-pointer-cast */ + OPT_Wintf_annotation = 268, /* -Wintf-annotation */ + OPT_Wintf_non_inherited = 269, /* -Wintf-non-inherited */ + OPT_Wintrinsic_shadow = 270, /* -Wintrinsic-shadow */ + OPT_Wintrinsics_std = 271, /* -Wintrinsics-std */ + OPT_Winvalid_memory_model = 272, /* -Winvalid-memory-model */ + OPT_Winvalid_offsetof = 273, /* -Winvalid-offsetof */ + OPT_Winvalid_pch = 274, /* -Winvalid-pch */ + OPT_Wjavadoc = 275, /* -Wjavadoc */ + OPT_Wjump_misses_init = 276, /* -Wjump-misses-init */ + OPT_Wl_ = 277, /* -Wl, */ + /* OPT_Wlarger_than_ = 278, */ /* -Wlarger-than- */ + OPT_Wlarger_than_ = 279, /* -Wlarger-than= */ + OPT_Wline_truncation = 280, /* -Wline-truncation */ + OPT_Wliteral_suffix = 281, /* -Wliteral-suffix */ + OPT_Wlocal_hiding = 282, /* -Wlocal-hiding */ + OPT_Wlogical_not_parentheses = 283, /* -Wlogical-not-parentheses */ + OPT_Wlogical_op = 284, /* -Wlogical-op */ + OPT_Wlong_long = 285, /* -Wlong-long */ + OPT_Wmain = 286, /* -Wmain */ + OPT_Wmasked_catch_block = 287, /* -Wmasked-catch-block */ + OPT_Wmaybe_uninitialized = 288, /* -Wmaybe-uninitialized */ + OPT_Wmemset_transposed_args = 289, /* -Wmemset-transposed-args */ + OPT_Wmissing_braces = 290, /* -Wmissing-braces */ + OPT_Wmissing_declarations = 291, /* -Wmissing-declarations */ + OPT_Wmissing_field_initializers = 292, /* -Wmissing-field-initializers */ + /* OPT_Wmissing_format_attribute = 293, */ /* -Wmissing-format-attribute */ + OPT_Wmissing_include_dirs = 294, /* -Wmissing-include-dirs */ + /* OPT_Wmissing_noreturn = 295, */ /* -Wmissing-noreturn */ + OPT_Wmissing_parameter_type = 296, /* -Wmissing-parameter-type */ + OPT_Wmissing_prototypes = 297, /* -Wmissing-prototypes */ + /* OPT_Wmudflap = 298, */ /* -Wmudflap */ + OPT_Wmultichar = 299, /* -Wmultichar */ + OPT_Wnarrowing = 300, /* -Wnarrowing */ + OPT_Wnested_externs = 301, /* -Wnested-externs */ + OPT_Wnls = 302, /* -Wnls */ + OPT_Wno_effect_assign = 303, /* -Wno-effect-assign */ + OPT_Wnoexcept = 304, /* -Wnoexcept */ + OPT_Wnon_template_friend = 305, /* -Wnon-template-friend */ + OPT_Wnon_virtual_dtor = 306, /* -Wnon-virtual-dtor */ + OPT_Wnonnull = 307, /* -Wnonnull */ + /* OPT_Wnormalized = 308, */ /* -Wnormalized */ + OPT_Wnormalized_ = 309, /* -Wnormalized= */ + OPT_Wnull = 310, /* -Wnull */ + OPT_Wodr = 311, /* -Wodr */ + OPT_Wold_style_cast = 312, /* -Wold-style-cast */ + OPT_Wold_style_declaration = 313, /* -Wold-style-declaration */ + OPT_Wold_style_definition = 314, /* -Wold-style-definition */ + OPT_Wopenmp_simd = 315, /* -Wopenmp-simd */ + OPT_Wout_of_date = 316, /* -Wout-of-date */ + OPT_Wover_ann = 317, /* -Wover-ann */ + OPT_Woverflow = 318, /* -Woverflow */ + OPT_Woverlength_strings = 319, /* -Woverlength-strings */ + OPT_Woverloaded_virtual = 320, /* -Woverloaded-virtual */ + OPT_Woverride_init = 321, /* -Woverride-init */ + OPT_Wp_ = 322, /* -Wp, */ + OPT_Wpacked = 323, /* -Wpacked */ + OPT_Wpacked_bitfield_compat = 324, /* -Wpacked-bitfield-compat */ + OPT_Wpadded = 325, /* -Wpadded */ + OPT_Wparam_assign = 326, /* -Wparam-assign */ + OPT_Wparentheses = 327, /* -Wparentheses */ + OPT_Wpedantic = 328, /* -Wpedantic */ + OPT_Wpedantic_ms_format = 329, /* -Wpedantic-ms-format */ + OPT_Wpkg_default_method = 330, /* -Wpkg-default-method */ + OPT_Wpmf_conversions = 331, /* -Wpmf-conversions */ + OPT_Wpointer_arith = 332, /* -Wpointer-arith */ + OPT_Wpointer_sign = 333, /* -Wpointer-sign */ + OPT_Wpointer_to_int_cast = 334, /* -Wpointer-to-int-cast */ + OPT_Wpragmas = 335, /* -Wpragmas */ + OPT_Wproperty_assign_default = 336, /* -Wproperty-assign-default */ + OPT_Wprotocol = 337, /* -Wprotocol */ + OPT_Wpsabi = 338, /* -Wpsabi */ + OPT_Wraw = 339, /* -Wraw */ + OPT_Wreal_q_constant = 340, /* -Wreal-q-constant */ + OPT_Wrealloc_lhs = 341, /* -Wrealloc-lhs */ + OPT_Wrealloc_lhs_all = 342, /* -Wrealloc-lhs-all */ + OPT_Wredundant_decls = 343, /* -Wredundant-decls */ + OPT_Wredundant_modifiers = 344, /* -Wredundant-modifiers */ + OPT_Wreorder = 345, /* -Wreorder */ + OPT_Wreturn_local_addr = 346, /* -Wreturn-local-addr */ + OPT_Wreturn_type = 347, /* -Wreturn-type */ + OPT_Wselector = 348, /* -Wselector */ + OPT_Wsequence_point = 349, /* -Wsequence-point */ + OPT_Wserial = 350, /* -Wserial */ + OPT_Wshadow = 351, /* -Wshadow */ + OPT_Wshadow_ivar = 352, /* -Wshadow-ivar */ + OPT_Wshift_count_negative = 353, /* -Wshift-count-negative */ + OPT_Wshift_count_overflow = 354, /* -Wshift-count-overflow */ + OPT_Wsign_compare = 355, /* -Wsign-compare */ + OPT_Wsign_conversion = 356, /* -Wsign-conversion */ + OPT_Wsign_promo = 357, /* -Wsign-promo */ + OPT_Wsized_deallocation = 358, /* -Wsized-deallocation */ + OPT_Wsizeof_array_argument = 359, /* -Wsizeof-array-argument */ + OPT_Wsizeof_pointer_memaccess = 360, /* -Wsizeof-pointer-memaccess */ + OPT_Wspecial_param_hiding = 361, /* -Wspecial-param-hiding */ + OPT_Wstack_protector = 362, /* -Wstack-protector */ + OPT_Wstack_usage_ = 363, /* -Wstack-usage= */ + OPT_Wstatic_access = 364, /* -Wstatic-access */ + OPT_Wstatic_receiver = 365, /* -Wstatic-receiver */ + OPT_Wstrict_aliasing = 366, /* -Wstrict-aliasing */ + OPT_Wstrict_aliasing_ = 367, /* -Wstrict-aliasing= */ + OPT_Wstrict_null_sentinel = 368, /* -Wstrict-null-sentinel */ + OPT_Wstrict_overflow = 369, /* -Wstrict-overflow */ + OPT_Wstrict_overflow_ = 370, /* -Wstrict-overflow= */ + OPT_Wstrict_prototypes = 371, /* -Wstrict-prototypes */ + OPT_Wstrict_selector_match = 372, /* -Wstrict-selector-match */ + OPT_Wsuggest_attribute_const = 373, /* -Wsuggest-attribute=const */ + OPT_Wsuggest_attribute_format = 374, /* -Wsuggest-attribute=format */ + OPT_Wsuggest_attribute_noreturn = 375, /* -Wsuggest-attribute=noreturn */ + OPT_Wsuggest_attribute_pure = 376, /* -Wsuggest-attribute=pure */ + OPT_Wsuggest_final_methods = 377, /* -Wsuggest-final-methods */ + OPT_Wsuggest_final_types = 378, /* -Wsuggest-final-types */ + OPT_Wsuggest_override = 379, /* -Wsuggest-override */ + OPT_Wsuppress = 380, /* -Wsuppress */ + OPT_Wsurprising = 381, /* -Wsurprising */ + OPT_Wswitch = 382, /* -Wswitch */ + OPT_Wswitch_bool = 383, /* -Wswitch-bool */ + OPT_Wswitch_default = 384, /* -Wswitch-default */ + OPT_Wswitch_enum = 385, /* -Wswitch-enum */ + OPT_Wsync_nand = 386, /* -Wsync-nand */ + OPT_Wsynth = 387, /* -Wsynth */ + OPT_Wsynthetic_access = 388, /* -Wsynthetic-access */ + OPT_Wsystem_headers = 389, /* -Wsystem-headers */ + OPT_Wtabs = 390, /* -Wtabs */ + OPT_Wtarget_lifetime = 391, /* -Wtarget-lifetime */ + OPT_Wtasks = 392, /* -Wtasks */ + OPT_Wtraditional = 393, /* -Wtraditional */ + OPT_Wtraditional_conversion = 394, /* -Wtraditional-conversion */ + OPT_Wtrampolines = 395, /* -Wtrampolines */ + OPT_Wtrigraphs = 396, /* -Wtrigraphs */ + OPT_Wtype_hiding = 397, /* -Wtype-hiding */ + OPT_Wtype_limits = 398, /* -Wtype-limits */ + OPT_Wuncheck = 399, /* -Wuncheck */ + OPT_Wundeclared_selector = 400, /* -Wundeclared-selector */ + OPT_Wundef = 401, /* -Wundef */ + OPT_Wunderflow = 402, /* -Wunderflow */ + OPT_Wuninitialized = 403, /* -Wuninitialized */ + OPT_Wunknown_pragmas = 404, /* -Wunknown-pragmas */ + OPT_Wunnecessary_else = 405, /* -Wunnecessary-else */ + OPT_Wunqualified_field = 406, /* -Wunqualified-field */ + /* OPT_Wunreachable_code = 407, */ /* -Wunreachable-code */ + OPT_Wunsafe_loop_optimizations = 408, /* -Wunsafe-loop-optimizations */ + OPT_Wunsuffixed_float_constants = 409, /* -Wunsuffixed-float-constants */ + OPT_Wunused = 410, /* -Wunused */ + OPT_Wunused_argument = 411, /* -Wunused-argument */ + OPT_Wunused_but_set_parameter = 412, /* -Wunused-but-set-parameter */ + OPT_Wunused_but_set_variable = 413, /* -Wunused-but-set-variable */ + OPT_Wunused_dummy_argument = 414, /* -Wunused-dummy-argument */ + OPT_Wunused_function = 415, /* -Wunused-function */ + OPT_Wunused_import = 416, /* -Wunused-import */ + OPT_Wunused_label = 417, /* -Wunused-label */ + OPT_Wunused_local = 418, /* -Wunused-local */ + OPT_Wunused_local_typedefs = 419, /* -Wunused-local-typedefs */ + OPT_Wunused_macros = 420, /* -Wunused-macros */ + OPT_Wunused_parameter = 421, /* -Wunused-parameter */ + OPT_Wunused_private = 422, /* -Wunused-private */ + OPT_Wunused_result = 423, /* -Wunused-result */ + OPT_Wunused_thrown = 424, /* -Wunused-thrown */ + OPT_Wunused_value = 425, /* -Wunused-value */ + OPT_Wunused_variable = 426, /* -Wunused-variable */ + OPT_Wuse_without_only = 427, /* -Wuse-without-only */ + OPT_Wuseless_cast = 428, /* -Wuseless-cast */ + OPT_Wuseless_type_check = 429, /* -Wuseless-type-check */ + OPT_Wvarargs = 430, /* -Wvarargs */ + OPT_Wvarargs_cast = 431, /* -Wvarargs-cast */ + OPT_Wvariadic_macros = 432, /* -Wvariadic-macros */ + OPT_Wvector_operation_performance = 433, /* -Wvector-operation-performance */ + OPT_Wvirtual_move_assign = 434, /* -Wvirtual-move-assign */ + OPT_Wvla = 435, /* -Wvla */ + OPT_Wvolatile_register_var = 436, /* -Wvolatile-register-var */ + OPT_Wwarning_token = 437, /* -Wwarning-token */ + OPT_Wwrite_strings = 438, /* -Wwrite-strings */ + OPT_Wzero_as_null_pointer_constant = 439, /* -Wzero-as-null-pointer-constant */ + OPT_Wzerotrip = 440, /* -Wzerotrip */ + OPT_Xassembler = 441, /* -Xassembler */ + OPT_Xlinker = 442, /* -Xlinker */ + OPT_Xpreprocessor = 443, /* -Xpreprocessor */ + OPT_Z = 444, /* -Z */ + OPT_ansi = 445, /* -ansi */ + OPT_aux_info = 446, /* -aux-info */ + /* OPT_aux_info_ = 447, */ /* -aux-info= */ + OPT_auxbase = 448, /* -auxbase */ + OPT_auxbase_strip = 449, /* -auxbase-strip */ + /* OPT_bootclasspath = 450, */ /* -bootclasspath */ + OPT_c = 451, /* -c */ + /* OPT_classpath = 452, */ /* -classpath */ + OPT_coverage = 453, /* -coverage */ + OPT_cpp = 454, /* -cpp */ + OPT_cpp_ = 455, /* -cpp= */ + OPT_d = 456, /* -d */ + OPT_dumpbase = 457, /* -dumpbase */ + OPT_dumpdir = 458, /* -dumpdir */ + OPT_dumpmachine = 459, /* -dumpmachine */ + OPT_dumpspecs = 460, /* -dumpspecs */ + OPT_dumpversion = 461, /* -dumpversion */ + OPT_e = 462, /* -e */ + /* OPT_encoding = 463, */ /* -encoding */ + OPT_export_dynamic = 464, /* -export-dynamic */ + OPT_extdirs = 465, /* -extdirs */ + /* OPT_fCLASSPATH_ = 466, */ /* -fCLASSPATH= */ + OPT_fPIC = 467, /* -fPIC */ + OPT_fPIE = 468, /* -fPIE */ + OPT_fRTS_ = 469, /* -fRTS= */ + OPT_fabi_compat_version_ = 470, /* -fabi-compat-version= */ + OPT_fabi_version_ = 471, /* -fabi-version= */ + OPT_faccess_control = 472, /* -faccess-control */ + OPT_fada_spec_parent_ = 473, /* -fada-spec-parent= */ + OPT_faggressive_function_elimination = 474,/* -faggressive-function-elimination */ + OPT_faggressive_loop_optimizations = 475, /* -faggressive-loop-optimizations */ + OPT_falign_commons = 476, /* -falign-commons */ + OPT_falign_functions = 477, /* -falign-functions */ + OPT_falign_functions_ = 478, /* -falign-functions= */ + OPT_falign_jumps = 479, /* -falign-jumps */ + OPT_falign_jumps_ = 480, /* -falign-jumps= */ + OPT_falign_labels = 481, /* -falign-labels */ + OPT_falign_labels_ = 482, /* -falign-labels= */ + OPT_falign_loops = 483, /* -falign-loops */ + OPT_falign_loops_ = 484, /* -falign-loops= */ + OPT_fall_intrinsics = 485, /* -fall-intrinsics */ + /* OPT_fall_virtual = 486, */ /* -fall-virtual */ + OPT_fallow_leading_underscore = 487, /* -fallow-leading-underscore */ + OPT_fallow_parameterless_variadic_functions = 488,/* -fallow-parameterless-variadic-functions */ + /* OPT_falt_external_templates = 489, */ /* -falt-external-templates */ + /* OPT_fargument_alias = 490, */ /* -fargument-alias */ + /* OPT_fargument_noalias = 491, */ /* -fargument-noalias */ + /* OPT_fargument_noalias_anything = 492, *//* -fargument-noalias-anything */ + /* OPT_fargument_noalias_global = 493, */ /* -fargument-noalias-global */ + OPT_fasan_shadow_offset_ = 494, /* -fasan-shadow-offset= */ + OPT_fasm = 495, /* -fasm */ + OPT_fassert = 496, /* -fassert */ + OPT_fassociative_math = 497, /* -fassociative-math */ + OPT_fassume_compiled = 498, /* -fassume-compiled */ + OPT_fassume_compiled_ = 499, /* -fassume-compiled= */ + OPT_fasynchronous_unwind_tables = 500, /* -fasynchronous-unwind-tables */ + OPT_fauto_inc_dec = 501, /* -fauto-inc-dec */ + OPT_fauto_profile = 502, /* -fauto-profile */ + OPT_fauto_profile_ = 503, /* -fauto-profile= */ + OPT_fautomatic = 504, /* -fautomatic */ + OPT_faux_classpath = 505, /* -faux-classpath */ + OPT_fbackslash = 506, /* -fbackslash */ + OPT_fbacktrace = 507, /* -fbacktrace */ + OPT_fblas_matmul_limit_ = 508, /* -fblas-matmul-limit= */ + OPT_fbootclasspath_ = 509, /* -fbootclasspath= */ + OPT_fbootstrap_classes = 510, /* -fbootstrap-classes */ + OPT_fbounds_check = 511, /* -fbounds-check */ + OPT_fbranch_count_reg = 512, /* -fbranch-count-reg */ + OPT_fbranch_probabilities = 513, /* -fbranch-probabilities */ + OPT_fbranch_target_load_optimize = 514, /* -fbranch-target-load-optimize */ + OPT_fbranch_target_load_optimize2 = 515, /* -fbranch-target-load-optimize2 */ + OPT_fbtr_bb_exclusive = 516, /* -fbtr-bb-exclusive */ + OPT_fbuilding_libgcc = 517, /* -fbuilding-libgcc */ + OPT_fbuiltin = 518, /* -fbuiltin */ + OPT_fbuiltin_ = 519, /* -fbuiltin- */ + OPT_fcall_saved_ = 520, /* -fcall-saved- */ + OPT_fcall_used_ = 521, /* -fcall-used- */ + OPT_fcaller_saves = 522, /* -fcaller-saves */ + OPT_fcanonical_system_headers = 523, /* -fcanonical-system-headers */ + OPT_fcheck_array_temporaries = 524, /* -fcheck-array-temporaries */ + OPT_fcheck_data_deps = 525, /* -fcheck-data-deps */ + OPT_fcheck_new = 526, /* -fcheck-new */ + OPT_fcheck_pointer_bounds = 527, /* -fcheck-pointer-bounds */ + OPT_fcheck_references = 528, /* -fcheck-references */ + OPT_fcheck_ = 529, /* -fcheck= */ + OPT_fchkp_check_incomplete_type = 530, /* -fchkp-check-incomplete-type */ + OPT_fchkp_check_read = 531, /* -fchkp-check-read */ + OPT_fchkp_check_write = 532, /* -fchkp-check-write */ + OPT_fchkp_first_field_has_own_bounds = 533,/* -fchkp-first-field-has-own-bounds */ + OPT_fchkp_instrument_calls = 534, /* -fchkp-instrument-calls */ + OPT_fchkp_instrument_marked_only = 535, /* -fchkp-instrument-marked-only */ + OPT_fchkp_narrow_bounds = 536, /* -fchkp-narrow-bounds */ + OPT_fchkp_narrow_to_innermost_array = 537, /* -fchkp-narrow-to-innermost-array */ + OPT_fchkp_optimize = 538, /* -fchkp-optimize */ + OPT_fchkp_store_bounds = 539, /* -fchkp-store-bounds */ + OPT_fchkp_treat_zero_dynamic_size_as_infinite = 540,/* -fchkp-treat-zero-dynamic-size-as-infinite */ + OPT_fchkp_use_fast_string_functions = 541, /* -fchkp-use-fast-string-functions */ + OPT_fchkp_use_nochk_string_functions = 542,/* -fchkp-use-nochk-string-functions */ + OPT_fchkp_use_static_bounds = 543, /* -fchkp-use-static-bounds */ + OPT_fchkp_use_static_const_bounds = 544, /* -fchkp-use-static-const-bounds */ + OPT_fchkp_use_wrappers = 545, /* -fchkp-use-wrappers */ + OPT_fchkp_zero_input_bounds_for_main = 546,/* -fchkp-zero-input-bounds-for-main */ + OPT_fcilkplus = 547, /* -fcilkplus */ + OPT_fclasspath_ = 548, /* -fclasspath= */ + OPT_fcoarray_ = 549, /* -fcoarray= */ + OPT_fcombine_stack_adjustments = 550, /* -fcombine-stack-adjustments */ + OPT_fcommon = 551, /* -fcommon */ + OPT_fcompare_debug = 552, /* -fcompare-debug */ + OPT_fcompare_debug_second = 553, /* -fcompare-debug-second */ + OPT_fcompare_debug_ = 554, /* -fcompare-debug= */ + OPT_fcompare_elim = 555, /* -fcompare-elim */ + OPT_fcompile_resource_ = 556, /* -fcompile-resource= */ + OPT_fcond_mismatch = 557, /* -fcond-mismatch */ + OPT_fconserve_space = 558, /* -fconserve-space */ + OPT_fconserve_stack = 559, /* -fconserve-stack */ + OPT_fconstant_string_class_ = 560, /* -fconstant-string-class= */ + OPT_fconstexpr_depth_ = 561, /* -fconstexpr-depth= */ + OPT_fconvert_ = 562, /* -fconvert= */ + OPT_fcprop_registers = 563, /* -fcprop-registers */ + OPT_fcray_pointer = 564, /* -fcray-pointer */ + OPT_fcrossjumping = 565, /* -fcrossjumping */ + OPT_fcse_follow_jumps = 566, /* -fcse-follow-jumps */ + /* OPT_fcse_skip_blocks = 567, */ /* -fcse-skip-blocks */ + OPT_fcx_fortran_rules = 568, /* -fcx-fortran-rules */ + OPT_fcx_limited_range = 569, /* -fcx-limited-range */ + OPT_fd_lines_as_code = 570, /* -fd-lines-as-code */ + OPT_fd_lines_as_comments = 571, /* -fd-lines-as-comments */ + OPT_fdata_sections = 572, /* -fdata-sections */ + OPT_fdbg_cnt_list = 573, /* -fdbg-cnt-list */ + OPT_fdbg_cnt_ = 574, /* -fdbg-cnt= */ + OPT_fdce = 575, /* -fdce */ + OPT_fdebug_cpp = 576, /* -fdebug-cpp */ + OPT_fdebug_prefix_map_ = 577, /* -fdebug-prefix-map= */ + OPT_fdebug_types_section = 578, /* -fdebug-types-section */ + OPT_fdeclone_ctor_dtor = 579, /* -fdeclone-ctor-dtor */ + OPT_fdeduce_init_list = 580, /* -fdeduce-init-list */ + OPT_fdefault_double_8 = 581, /* -fdefault-double-8 */ + /* OPT_fdefault_inline = 582, */ /* -fdefault-inline */ + OPT_fdefault_integer_8 = 583, /* -fdefault-integer-8 */ + OPT_fdefault_real_8 = 584, /* -fdefault-real-8 */ + OPT_fdefer_pop = 585, /* -fdefer-pop */ + OPT_fdelayed_branch = 586, /* -fdelayed-branch */ + OPT_fdelete_dead_exceptions = 587, /* -fdelete-dead-exceptions */ + OPT_fdelete_null_pointer_checks = 588, /* -fdelete-null-pointer-checks */ + OPT_fdevirtualize = 589, /* -fdevirtualize */ + OPT_fdevirtualize_at_ltrans = 590, /* -fdevirtualize-at-ltrans */ + OPT_fdevirtualize_speculatively = 591, /* -fdevirtualize-speculatively */ + /* OPT_fdiagnostics_color = 592, */ /* -fdiagnostics-color */ + OPT_fdiagnostics_color_ = 593, /* -fdiagnostics-color= */ + OPT_fdiagnostics_show_caret = 594, /* -fdiagnostics-show-caret */ + OPT_fdiagnostics_show_location_ = 595, /* -fdiagnostics-show-location= */ + OPT_fdiagnostics_show_option = 596, /* -fdiagnostics-show-option */ + OPT_fdirectives_only = 597, /* -fdirectives-only */ + OPT_fdisable_ = 598, /* -fdisable- */ + OPT_fdisable_assertions = 599, /* -fdisable-assertions */ + OPT_fdisable_assertions_ = 600, /* -fdisable-assertions= */ + OPT_fdollar_ok = 601, /* -fdollar-ok */ + OPT_fdollars_in_identifiers = 602, /* -fdollars-in-identifiers */ + OPT_fdse = 603, /* -fdse */ + OPT_fdump_ = 604, /* -fdump- */ + OPT_fdump_ada_spec = 605, /* -fdump-ada-spec */ + OPT_fdump_ada_spec_slim = 606, /* -fdump-ada-spec-slim */ + /* OPT_fdump_core = 607, */ /* -fdump-core */ + OPT_fdump_final_insns = 608, /* -fdump-final-insns */ + OPT_fdump_final_insns_ = 609, /* -fdump-final-insns= */ + OPT_fdump_fortran_optimized = 610, /* -fdump-fortran-optimized */ + OPT_fdump_fortran_original = 611, /* -fdump-fortran-original */ + OPT_fdump_go_spec_ = 612, /* -fdump-go-spec= */ + OPT_fdump_noaddr = 613, /* -fdump-noaddr */ + /* OPT_fdump_parse_tree = 614, */ /* -fdump-parse-tree */ + OPT_fdump_passes = 615, /* -fdump-passes */ + OPT_fdump_unnumbered = 616, /* -fdump-unnumbered */ + OPT_fdump_unnumbered_links = 617, /* -fdump-unnumbered-links */ + OPT_fdwarf2_cfi_asm = 618, /* -fdwarf2-cfi-asm */ + OPT_fearly_inlining = 619, /* -fearly-inlining */ + OPT_felide_constructors = 620, /* -felide-constructors */ + OPT_feliminate_dwarf2_dups = 621, /* -feliminate-dwarf2-dups */ + OPT_feliminate_unused_debug_symbols = 622, /* -feliminate-unused-debug-symbols */ + OPT_feliminate_unused_debug_types = 623, /* -feliminate-unused-debug-types */ + OPT_femit_class_debug_always = 624, /* -femit-class-debug-always */ + OPT_femit_class_file = 625, /* -femit-class-file */ + OPT_femit_class_files = 626, /* -femit-class-files */ + OPT_femit_struct_debug_baseonly = 627, /* -femit-struct-debug-baseonly */ + OPT_femit_struct_debug_detailed_ = 628, /* -femit-struct-debug-detailed= */ + OPT_femit_struct_debug_reduced = 629, /* -femit-struct-debug-reduced */ + OPT_fenable_ = 630, /* -fenable- */ + OPT_fenable_assertions = 631, /* -fenable-assertions */ + OPT_fenable_assertions_ = 632, /* -fenable-assertions= */ + OPT_fencoding_ = 633, /* -fencoding= */ + OPT_fenforce_eh_specs = 634, /* -fenforce-eh-specs */ + /* OPT_fenum_int_equiv = 635, */ /* -fenum-int-equiv */ + OPT_fexceptions = 636, /* -fexceptions */ + OPT_fexcess_precision_ = 637, /* -fexcess-precision= */ + OPT_fexec_charset_ = 638, /* -fexec-charset= */ + OPT_fexpensive_optimizations = 639, /* -fexpensive-optimizations */ + OPT_fext_numeric_literals = 640, /* -fext-numeric-literals */ + OPT_fextdirs_ = 641, /* -fextdirs= */ + OPT_fextended_identifiers = 642, /* -fextended-identifiers */ + OPT_fextern_tls_init = 643, /* -fextern-tls-init */ + OPT_fexternal_blas = 644, /* -fexternal-blas */ + /* OPT_fexternal_templates = 645, */ /* -fexternal-templates */ + OPT_ff2c = 646, /* -ff2c */ + OPT_ffast_math = 647, /* -ffast-math */ + OPT_ffat_lto_objects = 648, /* -ffat-lto-objects */ + OPT_ffilelist_file = 649, /* -ffilelist-file */ + OPT_ffinite_math_only = 650, /* -ffinite-math-only */ + OPT_ffixed_ = 651, /* -ffixed- */ + OPT_ffixed_form = 652, /* -ffixed-form */ + OPT_ffixed_line_length_ = 653, /* -ffixed-line-length- */ + OPT_ffixed_line_length_none = 654, /* -ffixed-line-length-none */ + OPT_ffloat_store = 655, /* -ffloat-store */ + OPT_ffor_scope = 656, /* -ffor-scope */ + /* OPT_fforce_addr = 657, */ /* -fforce-addr */ + OPT_fforce_classes_archive_check = 658, /* -fforce-classes-archive-check */ + OPT_fforward_propagate = 659, /* -fforward-propagate */ + OPT_ffp_contract_ = 660, /* -ffp-contract= */ + OPT_ffpe_summary_ = 661, /* -ffpe-summary= */ + OPT_ffpe_trap_ = 662, /* -ffpe-trap= */ + OPT_ffree_form = 663, /* -ffree-form */ + OPT_ffree_line_length_ = 664, /* -ffree-line-length- */ + OPT_ffree_line_length_none = 665, /* -ffree-line-length-none */ + OPT_ffreestanding = 666, /* -ffreestanding */ + OPT_ffriend_injection = 667, /* -ffriend-injection */ + OPT_ffrontend_optimize = 668, /* -ffrontend-optimize */ + OPT_ffunction_cse = 669, /* -ffunction-cse */ + OPT_ffunction_sections = 670, /* -ffunction-sections */ + OPT_fgcse = 671, /* -fgcse */ + OPT_fgcse_after_reload = 672, /* -fgcse-after-reload */ + OPT_fgcse_las = 673, /* -fgcse-las */ + OPT_fgcse_lm = 674, /* -fgcse-lm */ + OPT_fgcse_sm = 675, /* -fgcse-sm */ + OPT_fgnu_keywords = 676, /* -fgnu-keywords */ + OPT_fgnu_runtime = 677, /* -fgnu-runtime */ + OPT_fgnu_tm = 678, /* -fgnu-tm */ + OPT_fgnu_unique = 679, /* -fgnu-unique */ + OPT_fgnu89_inline = 680, /* -fgnu89-inline */ + OPT_fgo_check_divide_overflow = 681, /* -fgo-check-divide-overflow */ + OPT_fgo_check_divide_zero = 682, /* -fgo-check-divide-zero */ + OPT_fgo_dump_ = 683, /* -fgo-dump- */ + OPT_fgo_optimize_ = 684, /* -fgo-optimize- */ + OPT_fgo_pkgpath_ = 685, /* -fgo-pkgpath= */ + OPT_fgo_prefix_ = 686, /* -fgo-prefix= */ + OPT_fgo_relative_import_path_ = 687, /* -fgo-relative-import-path= */ + OPT_fgraphite = 688, /* -fgraphite */ + OPT_fgraphite_identity = 689, /* -fgraphite-identity */ + OPT_fguess_branch_probability = 690, /* -fguess-branch-probability */ + /* OPT_fguiding_decls = 691, */ /* -fguiding-decls */ + /* OPT_fhandle_exceptions = 692, */ /* -fhandle-exceptions */ + OPT_fhash_synchronization = 693, /* -fhash-synchronization */ + /* OPT_fhelp = 694, */ /* -fhelp */ + /* OPT_fhelp_ = 695, */ /* -fhelp= */ + OPT_fhoist_adjacent_loads = 696, /* -fhoist-adjacent-loads */ + /* OPT_fhonor_std = 697, */ /* -fhonor-std */ + OPT_fhosted = 698, /* -fhosted */ + /* OPT_fhuge_objects = 699, */ /* -fhuge-objects */ + OPT_fident = 700, /* -fident */ + OPT_fif_conversion = 701, /* -fif-conversion */ + OPT_fif_conversion2 = 702, /* -fif-conversion2 */ + OPT_fimplement_inlines = 703, /* -fimplement-inlines */ + OPT_fimplicit_inline_templates = 704, /* -fimplicit-inline-templates */ + OPT_fimplicit_none = 705, /* -fimplicit-none */ + OPT_fimplicit_templates = 706, /* -fimplicit-templates */ + OPT_findirect_classes = 707, /* -findirect-classes */ + OPT_findirect_dispatch = 708, /* -findirect-dispatch */ + OPT_findirect_inlining = 709, /* -findirect-inlining */ + OPT_finhibit_size_directive = 710, /* -finhibit-size-directive */ + OPT_finit_character_ = 711, /* -finit-character= */ + OPT_finit_integer_ = 712, /* -finit-integer= */ + OPT_finit_local_zero = 713, /* -finit-local-zero */ + OPT_finit_logical_ = 714, /* -finit-logical= */ + OPT_finit_real_ = 715, /* -finit-real= */ + OPT_finline = 716, /* -finline */ + OPT_finline_atomics = 717, /* -finline-atomics */ + OPT_finline_functions = 718, /* -finline-functions */ + OPT_finline_functions_called_once = 719, /* -finline-functions-called-once */ + /* OPT_finline_limit_ = 720, */ /* -finline-limit- */ + OPT_finline_limit_ = 721, /* -finline-limit= */ + OPT_finline_small_functions = 722, /* -finline-small-functions */ + OPT_finput_charset_ = 723, /* -finput-charset= */ + OPT_finstrument_functions = 724, /* -finstrument-functions */ + OPT_finstrument_functions_exclude_file_list_ = 725,/* -finstrument-functions-exclude-file-list= */ + OPT_finstrument_functions_exclude_function_list_ = 726,/* -finstrument-functions-exclude-function-list= */ + OPT_finteger_4_integer_8 = 727, /* -finteger-4-integer-8 */ + OPT_fintrinsic_modules_path = 728, /* -fintrinsic-modules-path */ + OPT_fintrinsic_modules_path_ = 729, /* -fintrinsic-modules-path= */ + OPT_fipa_cp = 730, /* -fipa-cp */ + OPT_fipa_cp_alignment = 731, /* -fipa-cp-alignment */ + OPT_fipa_cp_clone = 732, /* -fipa-cp-clone */ + OPT_fipa_icf = 733, /* -fipa-icf */ + OPT_fipa_icf_functions = 734, /* -fipa-icf-functions */ + OPT_fipa_icf_variables = 735, /* -fipa-icf-variables */ + /* OPT_fipa_matrix_reorg = 736, */ /* -fipa-matrix-reorg */ + OPT_fipa_profile = 737, /* -fipa-profile */ + OPT_fipa_pta = 738, /* -fipa-pta */ + OPT_fipa_pure_const = 739, /* -fipa-pure-const */ + OPT_fipa_ra = 740, /* -fipa-ra */ + OPT_fipa_reference = 741, /* -fipa-reference */ + OPT_fipa_sra = 742, /* -fipa-sra */ + /* OPT_fipa_struct_reorg = 743, */ /* -fipa-struct-reorg */ + OPT_fira_algorithm_ = 744, /* -fira-algorithm= */ + OPT_fira_hoist_pressure = 745, /* -fira-hoist-pressure */ + OPT_fira_loop_pressure = 746, /* -fira-loop-pressure */ + OPT_fira_region_ = 747, /* -fira-region= */ + OPT_fira_share_save_slots = 748, /* -fira-share-save-slots */ + OPT_fira_share_spill_slots = 749, /* -fira-share-spill-slots */ + OPT_fira_verbose_ = 750, /* -fira-verbose= */ + OPT_fisolate_erroneous_paths_attribute = 751,/* -fisolate-erroneous-paths-attribute */ + OPT_fisolate_erroneous_paths_dereference = 752,/* -fisolate-erroneous-paths-dereference */ + OPT_fivar_visibility_ = 753, /* -fivar-visibility= */ + OPT_fivopts = 754, /* -fivopts */ + OPT_fjni = 755, /* -fjni */ + OPT_fjump_tables = 756, /* -fjump-tables */ + OPT_fkeep_inline_dllexport = 757, /* -fkeep-inline-dllexport */ + OPT_fkeep_inline_functions = 758, /* -fkeep-inline-functions */ + OPT_fkeep_static_consts = 759, /* -fkeep-static-consts */ + /* OPT_flabels_ok = 760, */ /* -flabels-ok */ + OPT_flax_vector_conversions = 761, /* -flax-vector-conversions */ + OPT_fleading_underscore = 762, /* -fleading-underscore */ + OPT_flifetime_dse = 763, /* -flifetime-dse */ + OPT_flive_range_shrinkage = 764, /* -flive-range-shrinkage */ + OPT_flocal_ivars = 765, /* -flocal-ivars */ + OPT_floop_block = 766, /* -floop-block */ + /* OPT_floop_flatten = 767, */ /* -floop-flatten */ + OPT_floop_interchange = 768, /* -floop-interchange */ + OPT_floop_nest_optimize = 769, /* -floop-nest-optimize */ + /* OPT_floop_optimize = 770, */ /* -floop-optimize */ + OPT_floop_parallelize_all = 771, /* -floop-parallelize-all */ + OPT_floop_strip_mine = 772, /* -floop-strip-mine */ + OPT_floop_unroll_and_jam = 773, /* -floop-unroll-and-jam */ + OPT_flra_remat = 774, /* -flra-remat */ + OPT_flto = 775, /* -flto */ + OPT_flto_compression_level_ = 776, /* -flto-compression-level= */ + OPT_flto_odr_type_merging = 777, /* -flto-odr-type-merging */ + OPT_flto_partition_ = 778, /* -flto-partition= */ + OPT_flto_report = 779, /* -flto-report */ + OPT_flto_report_wpa = 780, /* -flto-report-wpa */ + OPT_flto_ = 781, /* -flto= */ + OPT_fltrans = 782, /* -fltrans */ + OPT_fltrans_output_list_ = 783, /* -fltrans-output-list= */ + OPT_fmain_ = 784, /* -fmain= */ + OPT_fmath_errno = 785, /* -fmath-errno */ + OPT_fmax_array_constructor_ = 786, /* -fmax-array-constructor= */ + OPT_fmax_errors_ = 787, /* -fmax-errors= */ + OPT_fmax_identifier_length_ = 788, /* -fmax-identifier-length= */ + OPT_fmax_stack_var_size_ = 789, /* -fmax-stack-var-size= */ + OPT_fmax_subrecord_length_ = 790, /* -fmax-subrecord-length= */ + OPT_fmem_report = 791, /* -fmem-report */ + OPT_fmem_report_wpa = 792, /* -fmem-report-wpa */ + OPT_fmerge_all_constants = 793, /* -fmerge-all-constants */ + OPT_fmerge_constants = 794, /* -fmerge-constants */ + OPT_fmerge_debug_strings = 795, /* -fmerge-debug-strings */ + OPT_fmessage_length_ = 796, /* -fmessage-length= */ + OPT_fmodule_private = 797, /* -fmodule-private */ + OPT_fmodulo_sched = 798, /* -fmodulo-sched */ + OPT_fmodulo_sched_allow_regmoves = 799, /* -fmodulo-sched-allow-regmoves */ + OPT_fmove_loop_invariants = 800, /* -fmove-loop-invariants */ + OPT_fms_extensions = 801, /* -fms-extensions */ + /* OPT_fmudflap = 802, */ /* -fmudflap */ + /* OPT_fmudflapir = 803, */ /* -fmudflapir */ + /* OPT_fmudflapth = 804, */ /* -fmudflapth */ + /* OPT_fname_mangling_version_ = 805, */ /* -fname-mangling-version- */ + /* OPT_fnew_abi = 806, */ /* -fnew-abi */ + OPT_fnext_runtime = 807, /* -fnext-runtime */ + OPT_fnil_receivers = 808, /* -fnil-receivers */ + /* OPT_fno_vect_cost_model = 809, */ /* -fno-vect-cost-model */ + OPT_fnon_call_exceptions = 810, /* -fnon-call-exceptions */ + OPT_fnonansi_builtins = 811, /* -fnonansi-builtins */ + /* OPT_fnonnull_objects = 812, */ /* -fnonnull-objects */ + OPT_fnothrow_opt = 813, /* -fnothrow-opt */ + OPT_fobjc_abi_version_ = 814, /* -fobjc-abi-version= */ + OPT_fobjc_call_cxx_cdtors = 815, /* -fobjc-call-cxx-cdtors */ + OPT_fobjc_direct_dispatch = 816, /* -fobjc-direct-dispatch */ + OPT_fobjc_exceptions = 817, /* -fobjc-exceptions */ + OPT_fobjc_gc = 818, /* -fobjc-gc */ + OPT_fobjc_nilcheck = 819, /* -fobjc-nilcheck */ + OPT_fobjc_sjlj_exceptions = 820, /* -fobjc-sjlj-exceptions */ + OPT_fobjc_std_objc1 = 821, /* -fobjc-std=objc1 */ + OPT_foffload_abi_ = 822, /* -foffload-abi= */ + OPT_foffload_ = 823, /* -foffload= */ + OPT_fomit_frame_pointer = 824, /* -fomit-frame-pointer */ + OPT_fopenacc = 825, /* -fopenacc */ + OPT_fopenmp = 826, /* -fopenmp */ + OPT_fopenmp_simd = 827, /* -fopenmp-simd */ + OPT_foperator_names = 828, /* -foperator-names */ + OPT_fopt_info = 829, /* -fopt-info */ + OPT_fopt_info_ = 830, /* -fopt-info- */ + /* OPT_foptimize_register_move = 831, */ /* -foptimize-register-move */ + OPT_foptimize_sibling_calls = 832, /* -foptimize-sibling-calls */ + OPT_foptimize_static_class_initialization = 833,/* -foptimize-static-class-initialization */ + OPT_foptimize_strlen = 834, /* -foptimize-strlen */ + /* OPT_foptional_diags = 835, */ /* -foptional-diags */ + OPT_foutput_class_dir_ = 836, /* -foutput-class-dir= */ + OPT_fpack_derived = 837, /* -fpack-derived */ + OPT_fpack_struct = 838, /* -fpack-struct */ + OPT_fpack_struct_ = 839, /* -fpack-struct= */ + OPT_fpartial_inlining = 840, /* -fpartial-inlining */ + OPT_fpcc_struct_return = 841, /* -fpcc-struct-return */ + OPT_fpch_deps = 842, /* -fpch-deps */ + OPT_fpch_preprocess = 843, /* -fpch-preprocess */ + OPT_fpeel_loops = 844, /* -fpeel-loops */ + OPT_fpeephole = 845, /* -fpeephole */ + OPT_fpeephole2 = 846, /* -fpeephole2 */ + OPT_fpermissive = 847, /* -fpermissive */ + OPT_fpic = 848, /* -fpic */ + OPT_fpie = 849, /* -fpie */ + OPT_fplan9_extensions = 850, /* -fplan9-extensions */ + OPT_fplugin_arg_ = 851, /* -fplugin-arg- */ + OPT_fplugin_ = 852, /* -fplugin= */ + OPT_fpost_ipa_mem_report = 853, /* -fpost-ipa-mem-report */ + OPT_fpre_ipa_mem_report = 854, /* -fpre-ipa-mem-report */ + OPT_fpredictive_commoning = 855, /* -fpredictive-commoning */ + OPT_fprefetch_loop_arrays = 856, /* -fprefetch-loop-arrays */ + OPT_fpreprocessed = 857, /* -fpreprocessed */ + OPT_fpretty_templates = 858, /* -fpretty-templates */ + OPT_fprofile = 859, /* -fprofile */ + OPT_fprofile_arcs = 860, /* -fprofile-arcs */ + OPT_fprofile_correction = 861, /* -fprofile-correction */ + OPT_fprofile_dir_ = 862, /* -fprofile-dir= */ + OPT_fprofile_generate = 863, /* -fprofile-generate */ + OPT_fprofile_generate_ = 864, /* -fprofile-generate= */ + OPT_fprofile_reorder_functions = 865, /* -fprofile-reorder-functions */ + OPT_fprofile_report = 866, /* -fprofile-report */ + OPT_fprofile_use = 867, /* -fprofile-use */ + OPT_fprofile_use_ = 868, /* -fprofile-use= */ + OPT_fprofile_values = 869, /* -fprofile-values */ + OPT_fprotect_parens = 870, /* -fprotect-parens */ + OPT_frandom_seed = 871, /* -frandom-seed */ + OPT_frandom_seed_ = 872, /* -frandom-seed= */ + OPT_frange_check = 873, /* -frange-check */ + OPT_freal_4_real_10 = 874, /* -freal-4-real-10 */ + OPT_freal_4_real_16 = 875, /* -freal-4-real-16 */ + OPT_freal_4_real_8 = 876, /* -freal-4-real-8 */ + OPT_freal_8_real_10 = 877, /* -freal-8-real-10 */ + OPT_freal_8_real_16 = 878, /* -freal-8-real-16 */ + OPT_freal_8_real_4 = 879, /* -freal-8-real-4 */ + OPT_frealloc_lhs = 880, /* -frealloc-lhs */ + OPT_freciprocal_math = 881, /* -freciprocal-math */ + OPT_frecord_gcc_switches = 882, /* -frecord-gcc-switches */ + OPT_frecord_marker_4 = 883, /* -frecord-marker=4 */ + OPT_frecord_marker_8 = 884, /* -frecord-marker=8 */ + OPT_frecursive = 885, /* -frecursive */ + OPT_freduced_reflection = 886, /* -freduced-reflection */ + OPT_free = 887, /* -free */ + OPT_freg_struct_return = 888, /* -freg-struct-return */ + /* OPT_fregmove = 889, */ /* -fregmove */ + OPT_frename_registers = 890, /* -frename-registers */ + OPT_freorder_blocks = 891, /* -freorder-blocks */ + OPT_freorder_blocks_and_partition = 892, /* -freorder-blocks-and-partition */ + OPT_freorder_functions = 893, /* -freorder-functions */ + OPT_frepack_arrays = 894, /* -frepack-arrays */ + OPT_freplace_objc_classes = 895, /* -freplace-objc-classes */ + OPT_frepo = 896, /* -frepo */ + OPT_freport_bug = 897, /* -freport-bug */ + OPT_frequire_return_statement = 898, /* -frequire-return-statement */ + OPT_frerun_cse_after_loop = 899, /* -frerun-cse-after-loop */ + /* OPT_frerun_loop_opt = 900, */ /* -frerun-loop-opt */ + OPT_freschedule_modulo_scheduled_loops = 901,/* -freschedule-modulo-scheduled-loops */ + OPT_fresolution_ = 902, /* -fresolution= */ + OPT_frounding_math = 903, /* -frounding-math */ + OPT_frtti = 904, /* -frtti */ + OPT_fsanitize_recover = 905, /* -fsanitize-recover */ + OPT_fsanitize_recover_ = 906, /* -fsanitize-recover= */ + OPT_fsanitize_undefined_trap_on_error = 907,/* -fsanitize-undefined-trap-on-error */ + OPT_fsanitize_ = 908, /* -fsanitize= */ + OPT_fsaw_java_file = 909, /* -fsaw-java-file */ + OPT_fsched_critical_path_heuristic = 910, /* -fsched-critical-path-heuristic */ + OPT_fsched_dep_count_heuristic = 911, /* -fsched-dep-count-heuristic */ + OPT_fsched_group_heuristic = 912, /* -fsched-group-heuristic */ + OPT_fsched_interblock = 913, /* -fsched-interblock */ + OPT_fsched_last_insn_heuristic = 914, /* -fsched-last-insn-heuristic */ + OPT_fsched_pressure = 915, /* -fsched-pressure */ + OPT_fsched_rank_heuristic = 916, /* -fsched-rank-heuristic */ + OPT_fsched_spec = 917, /* -fsched-spec */ + OPT_fsched_spec_insn_heuristic = 918, /* -fsched-spec-insn-heuristic */ + OPT_fsched_spec_load = 919, /* -fsched-spec-load */ + OPT_fsched_spec_load_dangerous = 920, /* -fsched-spec-load-dangerous */ + OPT_fsched_stalled_insns = 921, /* -fsched-stalled-insns */ + OPT_fsched_stalled_insns_dep = 922, /* -fsched-stalled-insns-dep */ + OPT_fsched_stalled_insns_dep_ = 923, /* -fsched-stalled-insns-dep= */ + OPT_fsched_stalled_insns_ = 924, /* -fsched-stalled-insns= */ + OPT_fsched_verbose_ = 925, /* -fsched-verbose= */ + OPT_fsched2_use_superblocks = 926, /* -fsched2-use-superblocks */ + /* OPT_fsched2_use_traces = 927, */ /* -fsched2-use-traces */ + OPT_fschedule_fusion = 928, /* -fschedule-fusion */ + OPT_fschedule_insns = 929, /* -fschedule-insns */ + OPT_fschedule_insns2 = 930, /* -fschedule-insns2 */ + OPT_fsecond_underscore = 931, /* -fsecond-underscore */ + OPT_fsection_anchors = 932, /* -fsection-anchors */ + /* OPT_fsee = 933, */ /* -fsee */ + OPT_fsel_sched_pipelining = 934, /* -fsel-sched-pipelining */ + OPT_fsel_sched_pipelining_outer_loops = 935,/* -fsel-sched-pipelining-outer-loops */ + OPT_fsel_sched_reschedule_pipelined = 936, /* -fsel-sched-reschedule-pipelined */ + OPT_fselective_scheduling = 937, /* -fselective-scheduling */ + OPT_fselective_scheduling2 = 938, /* -fselective-scheduling2 */ + OPT_fsemantic_interposition = 939, /* -fsemantic-interposition */ + OPT_fset_stack_executable = 940, /* -fset-stack-executable */ + OPT_fshort_double = 941, /* -fshort-double */ + OPT_fshort_enums = 942, /* -fshort-enums */ + OPT_fshort_wchar = 943, /* -fshort-wchar */ + OPT_fshow_column = 944, /* -fshow-column */ + OPT_fshrink_wrap = 945, /* -fshrink-wrap */ + OPT_fsign_zero = 946, /* -fsign-zero */ + OPT_fsignaling_nans = 947, /* -fsignaling-nans */ + OPT_fsigned_bitfields = 948, /* -fsigned-bitfields */ + OPT_fsigned_char = 949, /* -fsigned-char */ + OPT_fsigned_zeros = 950, /* -fsigned-zeros */ + OPT_fsimd_cost_model_ = 951, /* -fsimd-cost-model= */ + OPT_fsingle_precision_constant = 952, /* -fsingle-precision-constant */ + OPT_fsized_deallocation = 953, /* -fsized-deallocation */ + OPT_fsource_filename_ = 954, /* -fsource-filename= */ + OPT_fsource_ = 955, /* -fsource= */ + OPT_fsplit_ivs_in_unroller = 956, /* -fsplit-ivs-in-unroller */ + OPT_fsplit_stack = 957, /* -fsplit-stack */ + OPT_fsplit_wide_types = 958, /* -fsplit-wide-types */ + /* OPT_fsquangle = 959, */ /* -fsquangle */ + OPT_fssa_phiopt = 960, /* -fssa-phiopt */ + OPT_fstack_arrays = 961, /* -fstack-arrays */ + /* OPT_fstack_check = 962, */ /* -fstack-check */ + OPT_fstack_check_ = 963, /* -fstack-check= */ + OPT_fstack_limit = 964, /* -fstack-limit */ + OPT_fstack_limit_register_ = 965, /* -fstack-limit-register= */ + OPT_fstack_limit_symbol_ = 966, /* -fstack-limit-symbol= */ + OPT_fstack_protector = 967, /* -fstack-protector */ + OPT_fstack_protector_all = 968, /* -fstack-protector-all */ + OPT_fstack_protector_explicit = 969, /* -fstack-protector-explicit */ + OPT_fstack_protector_strong = 970, /* -fstack-protector-strong */ + OPT_fstack_reuse_ = 971, /* -fstack-reuse= */ + OPT_fstack_usage = 972, /* -fstack-usage */ + OPT_fstats = 973, /* -fstats */ + OPT_fstdarg_opt = 974, /* -fstdarg-opt */ + OPT_fstore_check = 975, /* -fstore-check */ + /* OPT_fstrength_reduce = 976, */ /* -fstrength-reduce */ + OPT_fstrict_aliasing = 977, /* -fstrict-aliasing */ + OPT_fstrict_enums = 978, /* -fstrict-enums */ + OPT_fstrict_overflow = 979, /* -fstrict-overflow */ + /* OPT_fstrict_prototype = 980, */ /* -fstrict-prototype */ + OPT_fstrict_volatile_bitfields = 981, /* -fstrict-volatile-bitfields */ + OPT_fsync_libcalls = 982, /* -fsync-libcalls */ + OPT_fsyntax_only = 983, /* -fsyntax-only */ + OPT_ftabstop_ = 984, /* -ftabstop= */ + /* OPT_ftarget_help = 985, */ /* -ftarget-help */ + OPT_ftarget_ = 986, /* -ftarget= */ + OPT_ftemplate_backtrace_limit_ = 987, /* -ftemplate-backtrace-limit= */ + /* OPT_ftemplate_depth_ = 988, */ /* -ftemplate-depth- */ + OPT_ftemplate_depth_ = 989, /* -ftemplate-depth= */ + OPT_ftest_coverage = 990, /* -ftest-coverage */ + /* OPT_fthis_is_variable = 991, */ /* -fthis-is-variable */ + OPT_fthread_jumps = 992, /* -fthread-jumps */ + OPT_fthreadsafe_statics = 993, /* -fthreadsafe-statics */ + OPT_ftime_report = 994, /* -ftime-report */ + OPT_ftls_model_ = 995, /* -ftls-model= */ + OPT_ftoplevel_reorder = 996, /* -ftoplevel-reorder */ + OPT_ftracer = 997, /* -ftracer */ + OPT_ftrack_macro_expansion = 998, /* -ftrack-macro-expansion */ + OPT_ftrack_macro_expansion_ = 999, /* -ftrack-macro-expansion= */ + OPT_ftrapping_math = 1000, /* -ftrapping-math */ + OPT_ftrapv = 1001, /* -ftrapv */ + OPT_ftree_bit_ccp = 1002, /* -ftree-bit-ccp */ + OPT_ftree_builtin_call_dce = 1003, /* -ftree-builtin-call-dce */ + OPT_ftree_ccp = 1004, /* -ftree-ccp */ + OPT_ftree_ch = 1005, /* -ftree-ch */ + OPT_ftree_coalesce_inlined_vars = 1006, /* -ftree-coalesce-inlined-vars */ + OPT_ftree_coalesce_vars = 1007, /* -ftree-coalesce-vars */ + OPT_ftree_copy_prop = 1008, /* -ftree-copy-prop */ + OPT_ftree_copyrename = 1009, /* -ftree-copyrename */ + OPT_ftree_cselim = 1010, /* -ftree-cselim */ + OPT_ftree_dce = 1011, /* -ftree-dce */ + OPT_ftree_dominator_opts = 1012, /* -ftree-dominator-opts */ + OPT_ftree_dse = 1013, /* -ftree-dse */ + OPT_ftree_forwprop = 1014, /* -ftree-forwprop */ + OPT_ftree_fre = 1015, /* -ftree-fre */ + OPT_ftree_loop_distribute_patterns = 1016, /* -ftree-loop-distribute-patterns */ + OPT_ftree_loop_distribution = 1017, /* -ftree-loop-distribution */ + OPT_ftree_loop_if_convert = 1018, /* -ftree-loop-if-convert */ + OPT_ftree_loop_if_convert_stores = 1019, /* -ftree-loop-if-convert-stores */ + OPT_ftree_loop_im = 1020, /* -ftree-loop-im */ + OPT_ftree_loop_ivcanon = 1021, /* -ftree-loop-ivcanon */ + /* OPT_ftree_loop_linear = 1022, */ /* -ftree-loop-linear */ + OPT_ftree_loop_optimize = 1023, /* -ftree-loop-optimize */ + OPT_ftree_loop_vectorize = 1024, /* -ftree-loop-vectorize */ + OPT_ftree_lrs = 1025, /* -ftree-lrs */ + OPT_ftree_parallelize_loops_ = 1026, /* -ftree-parallelize-loops= */ + OPT_ftree_partial_pre = 1027, /* -ftree-partial-pre */ + OPT_ftree_phiprop = 1028, /* -ftree-phiprop */ + OPT_ftree_pre = 1029, /* -ftree-pre */ + OPT_ftree_pta = 1030, /* -ftree-pta */ + OPT_ftree_reassoc = 1031, /* -ftree-reassoc */ + /* OPT_ftree_salias = 1032, */ /* -ftree-salias */ + OPT_ftree_scev_cprop = 1033, /* -ftree-scev-cprop */ + OPT_ftree_sink = 1034, /* -ftree-sink */ + OPT_ftree_slp_vectorize = 1035, /* -ftree-slp-vectorize */ + OPT_ftree_slsr = 1036, /* -ftree-slsr */ + OPT_ftree_sra = 1037, /* -ftree-sra */ + /* OPT_ftree_store_ccp = 1038, */ /* -ftree-store-ccp */ + /* OPT_ftree_store_copy_prop = 1039, */ /* -ftree-store-copy-prop */ + OPT_ftree_switch_conversion = 1040, /* -ftree-switch-conversion */ + OPT_ftree_tail_merge = 1041, /* -ftree-tail-merge */ + OPT_ftree_ter = 1042, /* -ftree-ter */ + /* OPT_ftree_vect_loop_version = 1043, */ /* -ftree-vect-loop-version */ + OPT_ftree_vectorize = 1044, /* -ftree-vectorize */ + /* OPT_ftree_vectorizer_verbose_ = 1045, *//* -ftree-vectorizer-verbose= */ + OPT_ftree_vrp = 1046, /* -ftree-vrp */ + OPT_funderscoring = 1047, /* -funderscoring */ + OPT_funit_at_a_time = 1048, /* -funit-at-a-time */ + OPT_funroll_all_loops = 1049, /* -funroll-all-loops */ + OPT_funroll_loops = 1050, /* -funroll-loops */ + OPT_funsafe_loop_optimizations = 1051, /* -funsafe-loop-optimizations */ + OPT_funsafe_math_optimizations = 1052, /* -funsafe-math-optimizations */ + OPT_funsigned_bitfields = 1053, /* -funsigned-bitfields */ + OPT_funsigned_char = 1054, /* -funsigned-char */ + OPT_funswitch_loops = 1055, /* -funswitch-loops */ + OPT_funwind_tables = 1056, /* -funwind-tables */ + OPT_fuse_atomic_builtins = 1057, /* -fuse-atomic-builtins */ + OPT_fuse_boehm_gc = 1058, /* -fuse-boehm-gc */ + OPT_fuse_cxa_atexit = 1059, /* -fuse-cxa-atexit */ + OPT_fuse_cxa_get_exception_ptr = 1060, /* -fuse-cxa-get-exception-ptr */ + OPT_fuse_divide_subroutine = 1061, /* -fuse-divide-subroutine */ + OPT_fuse_ld_bfd = 1062, /* -fuse-ld=bfd */ + OPT_fuse_ld_gold = 1063, /* -fuse-ld=gold */ + OPT_fuse_linker_plugin = 1064, /* -fuse-linker-plugin */ + OPT_fvar_tracking = 1065, /* -fvar-tracking */ + OPT_fvar_tracking_assignments = 1066, /* -fvar-tracking-assignments */ + OPT_fvar_tracking_assignments_toggle = 1067,/* -fvar-tracking-assignments-toggle */ + OPT_fvar_tracking_uninit = 1068, /* -fvar-tracking-uninit */ + OPT_fvariable_expansion_in_unroller = 1069,/* -fvariable-expansion-in-unroller */ + /* OPT_fvect_cost_model = 1070, */ /* -fvect-cost-model */ + OPT_fvect_cost_model_ = 1071, /* -fvect-cost-model= */ + OPT_fverbose_asm = 1072, /* -fverbose-asm */ + /* OPT_fversion = 1073, */ /* -fversion */ + OPT_fvisibility_inlines_hidden = 1074, /* -fvisibility-inlines-hidden */ + OPT_fvisibility_ms_compat = 1075, /* -fvisibility-ms-compat */ + OPT_fvisibility_ = 1076, /* -fvisibility= */ + OPT_fvpt = 1077, /* -fvpt */ + /* OPT_fvtable_gc = 1078, */ /* -fvtable-gc */ + /* OPT_fvtable_thunks = 1079, */ /* -fvtable-thunks */ + OPT_fvtable_verify_ = 1080, /* -fvtable-verify= */ + OPT_fvtv_counts = 1081, /* -fvtv-counts */ + OPT_fvtv_debug = 1082, /* -fvtv-debug */ + OPT_fweak = 1083, /* -fweak */ + OPT_fweb = 1084, /* -fweb */ + /* OPT_fwhole_file = 1085, */ /* -fwhole-file */ + OPT_fwhole_program = 1086, /* -fwhole-program */ + OPT_fwide_exec_charset_ = 1087, /* -fwide-exec-charset= */ + OPT_fworking_directory = 1088, /* -fworking-directory */ + OPT_fwpa = 1089, /* -fwpa */ + OPT_fwpa_ = 1090, /* -fwpa= */ + OPT_fwrapv = 1091, /* -fwrapv */ + OPT_fwritable_relocated_rdata = 1092, /* -fwritable-relocated-rdata */ + /* OPT_fxref = 1093, */ /* -fxref */ + /* OPT_fzee = 1094, */ /* -fzee */ + OPT_fzero_initialized_in_bss = 1095, /* -fzero-initialized-in-bss */ + OPT_fzero_link = 1096, /* -fzero-link */ + OPT_g = 1097, /* -g */ + OPT_gant = 1098, /* -gant */ + OPT_gcoff = 1099, /* -gcoff */ + OPT_gdwarf = 1100, /* -gdwarf */ + OPT_gdwarf_ = 1101, /* -gdwarf- */ + OPT_gen_decls = 1102, /* -gen-decls */ + OPT_ggdb = 1103, /* -ggdb */ + OPT_ggnu_pubnames = 1104, /* -ggnu-pubnames */ + OPT_gnat = 1105, /* -gnat */ + OPT_gnatO = 1106, /* -gnatO */ + OPT_gno_pubnames = 1107, /* -gno-pubnames */ + OPT_gno_record_gcc_switches = 1108, /* -gno-record-gcc-switches */ + OPT_gno_split_dwarf = 1109, /* -gno-split-dwarf */ + OPT_gno_strict_dwarf = 1110, /* -gno-strict-dwarf */ + OPT_gpubnames = 1111, /* -gpubnames */ + OPT_grecord_gcc_switches = 1112, /* -grecord-gcc-switches */ + OPT_gsplit_dwarf = 1113, /* -gsplit-dwarf */ + OPT_gstabs = 1114, /* -gstabs */ + OPT_gstabs_ = 1115, /* -gstabs+ */ + OPT_gstrict_dwarf = 1116, /* -gstrict-dwarf */ + OPT_gtoggle = 1117, /* -gtoggle */ + OPT_gvms = 1118, /* -gvms */ + OPT_gxcoff = 1119, /* -gxcoff */ + OPT_gxcoff_ = 1120, /* -gxcoff+ */ + OPT_gz = 1121, /* -gz */ + OPT_gz_ = 1122, /* -gz= */ + OPT_h = 1123, /* -h */ + OPT_idirafter = 1124, /* -idirafter */ + OPT_imacros = 1125, /* -imacros */ + OPT_imultiarch = 1126, /* -imultiarch */ + OPT_imultilib = 1127, /* -imultilib */ + OPT_include = 1128, /* -include */ + OPT_iplugindir_ = 1129, /* -iplugindir= */ + OPT_iprefix = 1130, /* -iprefix */ + OPT_iquote = 1131, /* -iquote */ + OPT_isysroot = 1132, /* -isysroot */ + OPT_isystem = 1133, /* -isystem */ + OPT_iwithprefix = 1134, /* -iwithprefix */ + OPT_iwithprefixbefore = 1135, /* -iwithprefixbefore */ + OPT_k8 = 1136, /* -k8 */ + OPT_l = 1137, /* -l */ + OPT_lang_asm = 1138, /* -lang-asm */ + OPT_m128bit_long_double = 1139, /* -m128bit-long-double */ + OPT_m16 = 1140, /* -m16 */ + OPT_m32 = 1141, /* -m32 */ + OPT_m3dnow = 1142, /* -m3dnow */ + OPT_m3dnowa = 1143, /* -m3dnowa */ + OPT_m64 = 1144, /* -m64 */ + OPT_m80387 = 1145, /* -m80387 */ + OPT_m8bit_idiv = 1146, /* -m8bit-idiv */ + OPT_m96bit_long_double = 1147, /* -m96bit-long-double */ + OPT_mabi_ = 1148, /* -mabi= */ + OPT_mabm = 1149, /* -mabm */ + OPT_maccumulate_outgoing_args = 1150, /* -maccumulate-outgoing-args */ + OPT_maddress_mode_ = 1151, /* -maddress-mode= */ + OPT_madx = 1152, /* -madx */ + OPT_maes = 1153, /* -maes */ + OPT_malign_data_ = 1154, /* -malign-data= */ + OPT_malign_double = 1155, /* -malign-double */ + OPT_malign_functions_ = 1156, /* -malign-functions= */ + OPT_malign_jumps_ = 1157, /* -malign-jumps= */ + OPT_malign_loops_ = 1158, /* -malign-loops= */ + OPT_malign_stringops = 1159, /* -malign-stringops */ + OPT_march_ = 1160, /* -march= */ + OPT_masm_ = 1161, /* -masm= */ + OPT_mavx = 1162, /* -mavx */ + OPT_mavx2 = 1163, /* -mavx2 */ + OPT_mavx256_split_unaligned_load = 1164, /* -mavx256-split-unaligned-load */ + OPT_mavx256_split_unaligned_store = 1165, /* -mavx256-split-unaligned-store */ + OPT_mavx512bw = 1166, /* -mavx512bw */ + OPT_mavx512cd = 1167, /* -mavx512cd */ + OPT_mavx512dq = 1168, /* -mavx512dq */ + OPT_mavx512er = 1169, /* -mavx512er */ + OPT_mavx512f = 1170, /* -mavx512f */ + OPT_mavx512ifma = 1171, /* -mavx512ifma */ + OPT_mavx512pf = 1172, /* -mavx512pf */ + OPT_mavx512vbmi = 1173, /* -mavx512vbmi */ + OPT_mavx512vl = 1174, /* -mavx512vl */ + OPT_mbmi = 1175, /* -mbmi */ + OPT_mbmi2 = 1176, /* -mbmi2 */ + OPT_mbranch_cost_ = 1177, /* -mbranch-cost= */ + OPT_mcld = 1178, /* -mcld */ + OPT_mclflushopt = 1179, /* -mclflushopt */ + OPT_mclwb = 1180, /* -mclwb */ + OPT_mcmodel_ = 1181, /* -mcmodel= */ + OPT_mconsole = 1182, /* -mconsole */ + /* OPT_mcpu_ = 1183, */ /* -mcpu= */ + OPT_mcrc32 = 1184, /* -mcrc32 */ + OPT_mcx16 = 1185, /* -mcx16 */ + OPT_mdispatch_scheduler = 1186, /* -mdispatch-scheduler */ + OPT_mdll = 1187, /* -mdll */ + OPT_mdump_tune_features = 1188, /* -mdump-tune-features */ + OPT_mf16c = 1189, /* -mf16c */ + OPT_mfancy_math_387 = 1190, /* -mfancy-math-387 */ + OPT_mfentry = 1191, /* -mfentry */ + OPT_mfma = 1192, /* -mfma */ + OPT_mfma4 = 1193, /* -mfma4 */ + OPT_mforce_drap = 1194, /* -mforce-drap */ + OPT_mfp_ret_in_387 = 1195, /* -mfp-ret-in-387 */ + OPT_mfpmath_ = 1196, /* -mfpmath= */ + OPT_mfsgsbase = 1197, /* -mfsgsbase */ + /* OPT_mfused_madd = 1198, */ /* -mfused-madd */ + OPT_mfxsr = 1199, /* -mfxsr */ + OPT_mhard_float = 1200, /* -mhard-float */ + OPT_mhle = 1201, /* -mhle */ + OPT_mieee_fp = 1202, /* -mieee-fp */ + OPT_mincoming_stack_boundary_ = 1203, /* -mincoming-stack-boundary= */ + OPT_minline_all_stringops = 1204, /* -minline-all-stringops */ + OPT_minline_stringops_dynamically = 1205, /* -minline-stringops-dynamically */ + /* OPT_mintel_syntax = 1206, */ /* -mintel-syntax */ + OPT_mlarge_data_threshold_ = 1207, /* -mlarge-data-threshold= */ + OPT_mlong_double_128 = 1208, /* -mlong-double-128 */ + OPT_mlong_double_64 = 1209, /* -mlong-double-64 */ + OPT_mlong_double_80 = 1210, /* -mlong-double-80 */ + OPT_mlwp = 1211, /* -mlwp */ + OPT_mlzcnt = 1212, /* -mlzcnt */ + OPT_mmemcpy_strategy_ = 1213, /* -mmemcpy-strategy= */ + OPT_mmemset_strategy_ = 1214, /* -mmemset-strategy= */ + OPT_mmmx = 1215, /* -mmmx */ + OPT_mmovbe = 1216, /* -mmovbe */ + OPT_mmpx = 1217, /* -mmpx */ + OPT_mms_bitfields = 1218, /* -mms-bitfields */ + OPT_mmwaitx = 1219, /* -mmwaitx */ + OPT_mno_align_stringops = 1220, /* -mno-align-stringops */ + OPT_mno_default = 1221, /* -mno-default */ + OPT_mno_fancy_math_387 = 1222, /* -mno-fancy-math-387 */ + OPT_mno_push_args = 1223, /* -mno-push-args */ + OPT_mno_red_zone = 1224, /* -mno-red-zone */ + OPT_mno_sse4 = 1225, /* -mno-sse4 */ + OPT_mnop_fun_dllimport = 1226, /* -mnop-fun-dllimport */ + OPT_mnop_mcount = 1227, /* -mnop-mcount */ + OPT_momit_leaf_frame_pointer = 1228, /* -momit-leaf-frame-pointer */ + OPT_mpc32 = 1229, /* -mpc32 */ + OPT_mpc64 = 1230, /* -mpc64 */ + OPT_mpc80 = 1231, /* -mpc80 */ + OPT_mpclmul = 1232, /* -mpclmul */ + OPT_mpcommit = 1233, /* -mpcommit */ + OPT_mpe_aligned_commons = 1234, /* -mpe-aligned-commons */ + OPT_mpopcnt = 1235, /* -mpopcnt */ + OPT_mprefer_avx128 = 1236, /* -mprefer-avx128 */ + OPT_mpreferred_stack_boundary_ = 1237, /* -mpreferred-stack-boundary= */ + OPT_mprefetchwt1 = 1238, /* -mprefetchwt1 */ + OPT_mprfchw = 1239, /* -mprfchw */ + OPT_mpush_args = 1240, /* -mpush-args */ + OPT_mrdrnd = 1241, /* -mrdrnd */ + OPT_mrdseed = 1242, /* -mrdseed */ + OPT_mrecip = 1243, /* -mrecip */ + OPT_mrecip_ = 1244, /* -mrecip= */ + OPT_mrecord_mcount = 1245, /* -mrecord-mcount */ + OPT_mred_zone = 1246, /* -mred-zone */ + OPT_mregparm_ = 1247, /* -mregparm= */ + OPT_mrtd = 1248, /* -mrtd */ + OPT_mrtm = 1249, /* -mrtm */ + OPT_msahf = 1250, /* -msahf */ + OPT_msha = 1251, /* -msha */ + OPT_mskip_rax_setup = 1252, /* -mskip-rax-setup */ + OPT_msoft_float = 1253, /* -msoft-float */ + OPT_msse = 1254, /* -msse */ + OPT_msse2 = 1255, /* -msse2 */ + OPT_msse2avx = 1256, /* -msse2avx */ + OPT_msse3 = 1257, /* -msse3 */ + OPT_msse4 = 1258, /* -msse4 */ + OPT_msse4_1 = 1259, /* -msse4.1 */ + OPT_msse4_2 = 1260, /* -msse4.2 */ + OPT_msse4a = 1261, /* -msse4a */ + /* OPT_msse5 = 1262, */ /* -msse5 */ + OPT_msseregparm = 1263, /* -msseregparm */ + OPT_mssse3 = 1264, /* -mssse3 */ + OPT_mstack_arg_probe = 1265, /* -mstack-arg-probe */ + OPT_mstack_protector_guard_ = 1266, /* -mstack-protector-guard= */ + OPT_mstackrealign = 1267, /* -mstackrealign */ + OPT_mstringop_strategy_ = 1268, /* -mstringop-strategy= */ + OPT_mtbm = 1269, /* -mtbm */ + OPT_mthreads = 1270, /* -mthreads */ + OPT_mtls_dialect_ = 1271, /* -mtls-dialect= */ + OPT_mtls_direct_seg_refs = 1272, /* -mtls-direct-seg-refs */ + OPT_mtune_ctrl_ = 1273, /* -mtune-ctrl= */ + OPT_mtune_ = 1274, /* -mtune= */ + OPT_muse_libstdc_wrappers = 1275, /* -muse-libstdc-wrappers */ + OPT_mveclibabi_ = 1276, /* -mveclibabi= */ + OPT_mvect8_ret_in_mem = 1277, /* -mvect8-ret-in-mem */ + OPT_mvzeroupper = 1278, /* -mvzeroupper */ + OPT_mwin32 = 1279, /* -mwin32 */ + OPT_mwindows = 1280, /* -mwindows */ + OPT_mx32 = 1281, /* -mx32 */ + OPT_mxop = 1282, /* -mxop */ + OPT_mxsave = 1283, /* -mxsave */ + OPT_mxsavec = 1284, /* -mxsavec */ + OPT_mxsaveopt = 1285, /* -mxsaveopt */ + OPT_mxsaves = 1286, /* -mxsaves */ + OPT_n = 1287, /* -n */ + OPT_no_canonical_prefixes = 1288, /* -no-canonical-prefixes */ + OPT_no_integrated_cpp = 1289, /* -no-integrated-cpp */ + OPT_no_pthread = 1290, /* -no-pthread */ + OPT_nocpp = 1291, /* -nocpp */ + OPT_nodefaultlibs = 1292, /* -nodefaultlibs */ + OPT_nostartfiles = 1293, /* -nostartfiles */ + OPT_nostdinc = 1294, /* -nostdinc */ + OPT_nostdinc__ = 1295, /* -nostdinc++ */ + OPT_nostdlib = 1296, /* -nostdlib */ + OPT_o = 1297, /* -o */ + OPT_p = 1298, /* -p */ + OPT_pass_exit_codes = 1299, /* -pass-exit-codes */ + /* OPT_pedantic = 1300, */ /* -pedantic */ + OPT_pedantic_errors = 1301, /* -pedantic-errors */ + OPT_pg = 1302, /* -pg */ + OPT_pie = 1303, /* -pie */ + OPT_pipe = 1304, /* -pipe */ + OPT_posix = 1305, /* -posix */ + OPT_print_file_name_ = 1306, /* -print-file-name= */ + OPT_print_libgcc_file_name = 1307, /* -print-libgcc-file-name */ + OPT_print_multi_directory = 1308, /* -print-multi-directory */ + OPT_print_multi_lib = 1309, /* -print-multi-lib */ + OPT_print_multi_os_directory = 1310, /* -print-multi-os-directory */ + OPT_print_multiarch = 1311, /* -print-multiarch */ + OPT_print_objc_runtime_info = 1312, /* -print-objc-runtime-info */ + OPT_print_prog_name_ = 1313, /* -print-prog-name= */ + OPT_print_search_dirs = 1314, /* -print-search-dirs */ + OPT_print_sysroot = 1315, /* -print-sysroot */ + OPT_print_sysroot_headers_suffix = 1316, /* -print-sysroot-headers-suffix */ + OPT_pthread = 1317, /* -pthread */ + OPT_quiet = 1318, /* -quiet */ + OPT_r = 1319, /* -r */ + OPT_remap = 1320, /* -remap */ + OPT_s = 1321, /* -s */ + OPT_s_bc_abi = 1322, /* -s-bc-abi */ + OPT_save_temps = 1323, /* -save-temps */ + OPT_save_temps_ = 1324, /* -save-temps= */ + OPT_shared = 1325, /* -shared */ + OPT_shared_libgcc = 1326, /* -shared-libgcc */ + /* OPT_specs = 1327, */ /* -specs */ + OPT_specs_ = 1328, /* -specs= */ + OPT_static = 1329, /* -static */ + OPT_static_libasan = 1330, /* -static-libasan */ + OPT_static_libgcc = 1331, /* -static-libgcc */ + OPT_static_libgcj = 1332, /* -static-libgcj */ + OPT_static_libgfortran = 1333, /* -static-libgfortran */ + OPT_static_libgo = 1334, /* -static-libgo */ + OPT_static_liblsan = 1335, /* -static-liblsan */ + OPT_static_libmpx = 1336, /* -static-libmpx */ + OPT_static_libmpxwrappers = 1337, /* -static-libmpxwrappers */ + OPT_static_libstdc__ = 1338, /* -static-libstdc++ */ + OPT_static_libtsan = 1339, /* -static-libtsan */ + OPT_static_libubsan = 1340, /* -static-libubsan */ + /* OPT_std_c__03 = 1341, */ /* -std=c++03 */ + /* OPT_std_c__0x = 1342, */ /* -std=c++0x */ + OPT_std_c__11 = 1343, /* -std=c++11 */ + OPT_std_c__14 = 1344, /* -std=c++14 */ + /* OPT_std_c__17 = 1345, */ /* -std=c++17 */ + /* OPT_std_c__1y = 1346, */ /* -std=c++1y */ + OPT_std_c__1z = 1347, /* -std=c++1z */ + OPT_std_c__98 = 1348, /* -std=c++98 */ + OPT_std_c11 = 1349, /* -std=c11 */ + /* OPT_std_c1x = 1350, */ /* -std=c1x */ + /* OPT_std_c89 = 1351, */ /* -std=c89 */ + OPT_std_c90 = 1352, /* -std=c90 */ + OPT_std_c99 = 1353, /* -std=c99 */ + /* OPT_std_c9x = 1354, */ /* -std=c9x */ + OPT_std_f2003 = 1355, /* -std=f2003 */ + OPT_std_f2008 = 1356, /* -std=f2008 */ + OPT_std_f2008ts = 1357, /* -std=f2008ts */ + OPT_std_f95 = 1358, /* -std=f95 */ + OPT_std_gnu = 1359, /* -std=gnu */ + /* OPT_std_gnu__03 = 1360, */ /* -std=gnu++03 */ + /* OPT_std_gnu__0x = 1361, */ /* -std=gnu++0x */ + OPT_std_gnu__11 = 1362, /* -std=gnu++11 */ + OPT_std_gnu__14 = 1363, /* -std=gnu++14 */ + /* OPT_std_gnu__17 = 1364, */ /* -std=gnu++17 */ + /* OPT_std_gnu__1y = 1365, */ /* -std=gnu++1y */ + OPT_std_gnu__1z = 1366, /* -std=gnu++1z */ + OPT_std_gnu__98 = 1367, /* -std=gnu++98 */ + OPT_std_gnu11 = 1368, /* -std=gnu11 */ + /* OPT_std_gnu1x = 1369, */ /* -std=gnu1x */ + /* OPT_std_gnu89 = 1370, */ /* -std=gnu89 */ + OPT_std_gnu90 = 1371, /* -std=gnu90 */ + OPT_std_gnu99 = 1372, /* -std=gnu99 */ + /* OPT_std_gnu9x = 1373, */ /* -std=gnu9x */ + /* OPT_std_iso9899_1990 = 1374, */ /* -std=iso9899:1990 */ + OPT_std_iso9899_199409 = 1375, /* -std=iso9899:199409 */ + /* OPT_std_iso9899_1999 = 1376, */ /* -std=iso9899:1999 */ + /* OPT_std_iso9899_199x = 1377, */ /* -std=iso9899:199x */ + /* OPT_std_iso9899_2011 = 1378, */ /* -std=iso9899:2011 */ + OPT_std_legacy = 1379, /* -std=legacy */ + OPT_symbolic = 1380, /* -symbolic */ + OPT_t = 1381, /* -t */ + OPT_time = 1382, /* -time */ + OPT_time_ = 1383, /* -time= */ + OPT_traditional = 1384, /* -traditional */ + OPT_traditional_cpp = 1385, /* -traditional-cpp */ + OPT_trigraphs = 1386, /* -trigraphs */ + OPT_u = 1387, /* -u */ + OPT_undef = 1388, /* -undef */ + OPT_v = 1389, /* -v */ + OPT_version = 1390, /* -version */ + OPT_w = 1391, /* -w */ + OPT_wrapper = 1392, /* -wrapper */ + OPT_x = 1393, /* -x */ + OPT_z = 1394, /* -z */ + N_OPTS, + OPT_SPECIAL_unknown, + OPT_SPECIAL_ignore, + OPT_SPECIAL_program_name, + OPT_SPECIAL_input_file +}; + +#ifdef GCC_C_COMMON_C +/* Mapping from cpp message reasons to the options that enable them. */ +#include +struct cpp_reason_option_codes_t +{ + const int reason; /* cpplib message reason. */ + const int option_code; /* gcc option that controls this message. */ +}; + +static const struct cpp_reason_option_codes_t cpp_reason_option_codes[] = { + {CPP_W_BUILTIN_MACRO_REDEFINED, OPT_Wbuiltin_macro_redefined}, + {CPP_W_CXX_OPERATOR_NAMES, OPT_Wc___compat}, + {CPP_W_C90_C99_COMPAT, OPT_Wc90_c99_compat}, + {CPP_W_COMMENTS, OPT_Wcomment}, + {CPP_W_WARNING_DIRECTIVE, OPT_Wcpp}, + {CPP_W_DATE_TIME, OPT_Wdate_time}, + {CPP_W_DEPRECATED, OPT_Wdeprecated}, + {CPP_W_ENDIF_LABELS, OPT_Wendif_labels}, + {CPP_W_INVALID_PCH, OPT_Winvalid_pch}, + {CPP_W_LITERAL_SUFFIX, OPT_Wliteral_suffix}, + {CPP_W_LONG_LONG, OPT_Wlong_long}, + {CPP_W_MISSING_INCLUDE_DIRS, OPT_Wmissing_include_dirs}, + {CPP_W_MULTICHAR, OPT_Wmultichar}, + {CPP_W_NORMALIZE, OPT_Wnormalized_}, + {CPP_W_PEDANTIC, OPT_Wpedantic}, + {CPP_W_TRADITIONAL, OPT_Wtraditional}, + {CPP_W_TRIGRAPHS, OPT_Wtrigraphs}, + {CPP_W_UNDEF, OPT_Wundef}, + {CPP_W_UNUSED_MACROS, OPT_Wunused_macros}, + {CPP_W_VARIADIC_MACROS, OPT_Wvariadic_macros}, + {CPP_W_NONE, 0}, +}; +#endif + +#endif /* OPTIONS_H */ diff --git a/contrib/toolchain/gcc/5x/gcc/tconfig.h b/contrib/toolchain/gcc/5x/gcc/tconfig.h new file mode 100644 index 0000000000..9b2058d186 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/tconfig.h @@ -0,0 +1,11 @@ +#ifndef GCC_TCONFIG_H +#define GCC_TCONFIG_H +#ifndef USED_FOR_TARGET +# define USED_FOR_TARGET +#endif +#include "auto-host.h" +#ifdef IN_GCC +# include "ansidecl.h" +# include "config/i386/xm-mingw32.h" +#endif +#endif /* GCC_TCONFIG_H */ diff --git a/contrib/toolchain/gcc/5x/gcc/tm.h b/contrib/toolchain/gcc/5x/gcc/tm.h new file mode 100644 index 0000000000..febbfaf9f7 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/tm.h @@ -0,0 +1,37 @@ +#ifndef GCC_TM_H +#define GCC_TM_H +#ifndef LIBC_GLIBC +# define LIBC_GLIBC 1 +#endif +#ifndef LIBC_UCLIBC +# define LIBC_UCLIBC 2 +#endif +#ifndef LIBC_BIONIC +# define LIBC_BIONIC 3 +#endif +#ifdef IN_GCC +# include "options.h" +# include "insn-constants.h" +# include "config/vxworks-dummy.h" +# include "config/i386/i386.h" +# include "config/i386/unix.h" +# include "config/i386/bsd.h" +# include "config/i386/gas.h" +# include "config/dbxcoff.h" +# include "config/i386/cygming.h" +# include "config/i386/mingw32.h" +# include "config/i386/mingw-stdint.h" +# include "config/initfini-array.h" +# include "config/tm-dwarf2.h" +#endif +#if defined IN_GCC && !defined GENERATOR_FILE && !defined USED_FOR_TARGET +# include "insn-flags.h" +#endif +#if defined IN_GCC && !defined GENERATOR_FILE +# include "insn-modes.h" +#endif +#if defined IN_GCC && defined GENERATOR_FILE && !defined BITS_PER_UNIT +#include "machmode.h" +#endif +# include "defaults.h" +#endif /* GCC_TM_H */ diff --git a/contrib/toolchain/gcc/5x/gcc/tsystem.h b/contrib/toolchain/gcc/5x/gcc/tsystem.h new file mode 100644 index 0000000000..be16ef0a89 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/tsystem.h @@ -0,0 +1,137 @@ +/* Get common system includes and various definitions and declarations + based on target macros. + Copyright (C) 2000-2015 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 GCC_TSYSTEM_H +#define GCC_TSYSTEM_H + +/* System headers (e.g. stdio.h, stdlib.h, unistd.h) sometimes + indirectly include getopt.h. Our -I flags will cause gcc's gnu + getopt.h to be included, not the platform's copy. In the default + case, gnu getopt.h will provide us with a no-argument prototype + which will generate -Wstrict-prototypes warnings. None of the + target files actually use getopt, so it is safe to tell gnu + getopt.h we never need this prototype. */ +#ifndef HAVE_DECL_GETOPT +#define HAVE_DECL_GETOPT 1 +#endif + +/* We want everything from the glibc headers. */ +#define _GNU_SOURCE 1 + +/* GCC supplies these headers. */ +#include +#include + +#ifdef inhibit_libc + +#ifndef malloc +extern void *malloc (size_t); +#endif + +#ifndef free +extern void free (void *); +#endif + +#ifndef atexit +extern int atexit (void (*)(void)); +#endif + +#ifndef abort +extern void abort (void) __attribute__ ((__noreturn__)); +#endif + +#ifndef strlen +extern size_t strlen (const char *); +#endif + +#ifndef memcpy +extern void *memcpy (void *, const void *, size_t); +#endif + +#ifndef memset +extern void *memset (void *, int, size_t); +#endif + +#else /* ! inhibit_libc */ +/* We disable this when inhibit_libc, so that gcc can still be built without + needing header files first. */ +/* ??? This is not a good solution, since prototypes may be required in + some cases for correct code. */ + +/* GCC supplies this header. */ +#include + +/* All systems have this header. */ +#include + +/* All systems have this header. */ +#include + +/* All systems have this header. */ +#include + +#ifndef errno +extern int errno; +#endif + +/* If these system headers do not exist, fixincludes must create them. */ +#include +#include +#include + +/* GCC supplies this header. */ +#include + +/* If these system headers do not exist, fixincludes must create them. */ +#include + +#endif /* inhibit_libc */ + +/* Define a generic NULL if one hasn't already been defined. */ +#ifndef NULL +#define NULL 0 +#endif + +/* GCC always provides __builtin_alloca(x). */ +#undef alloca +#define alloca(x) __builtin_alloca(x) + +#ifdef ENABLE_RUNTIME_CHECKING +#define gcc_assert(EXPR) ((void)(!(EXPR) ? abort (), 0 : 0)) +#else +/* Include EXPR, so that unused variable warnings do not occur. */ +#define gcc_assert(EXPR) ((void)(0 && (EXPR))) +#endif +/* Use gcc_unreachable() to mark unreachable locations (like an + unreachable default case of a switch. Do not use gcc_assert(0). */ +#define gcc_unreachable() (abort ()) + +#define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq) +#define CONST_CAST(TYPE,X) CONST_CAST2 (TYPE, const TYPE, (X)) + +/* Filename handling macros. */ +#include "filenames.h" + +#endif /* ! GCC_TSYSTEM_H */ diff --git a/contrib/toolchain/gcc/5x/gcc/vxworks-dummy.h b/contrib/toolchain/gcc/5x/gcc/vxworks-dummy.h new file mode 100644 index 0000000000..2b5ddcccc7 --- /dev/null +++ b/contrib/toolchain/gcc/5x/gcc/vxworks-dummy.h @@ -0,0 +1,40 @@ +/* Dummy definitions of VxWorks-related macros + Copyright (C) 2007-2015 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 +. */ + +/* True if we're targeting VxWorks. */ +#ifndef TARGET_VXWORKS +#define TARGET_VXWORKS 0 +#endif + +/* True if generating code for a VxWorks RTP. */ +#ifndef TARGET_VXWORKS_RTP +#define TARGET_VXWORKS_RTP false +#endif + +/* The symbol that points to an RTP's table of GOTs. */ +#define VXWORKS_GOTT_BASE (gcc_unreachable (), "") + +/* The symbol that holds the index of the current module's GOT in + VXWORKS_GOTT_BASE. */ +#define VXWORKS_GOTT_INDEX (gcc_unreachable (), "") diff --git a/contrib/toolchain/gcc/5x/include/filenames.h b/contrib/toolchain/gcc/5x/include/filenames.h new file mode 100644 index 0000000000..470c5e091a --- /dev/null +++ b/contrib/toolchain/gcc/5x/include/filenames.h @@ -0,0 +1,99 @@ +/* Macros for taking apart, interpreting and processing file names. + + These are here because some non-Posix (a.k.a. DOSish) systems have + drive letter brain-damage at the beginning of an absolute file name, + use forward- and back-slash in path names interchangeably, and + some of them have case-insensitive file names. + + Copyright 2000, 2001, 2007, 2010 Free Software Foundation, Inc. + +This file is part of BFD, the Binary File Descriptor library. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef FILENAMES_H +#define FILENAMES_H + +#include "hashtab.h" /* for hashval_t */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(__MSDOS__) || defined(_WIN32) || defined(__OS2__) || defined (__CYGWIN__) +# ifndef HAVE_DOS_BASED_FILE_SYSTEM +# define HAVE_DOS_BASED_FILE_SYSTEM 1 +# endif +# ifndef HAVE_CASE_INSENSITIVE_FILE_SYSTEM +# define HAVE_CASE_INSENSITIVE_FILE_SYSTEM 1 +# endif +# define HAS_DRIVE_SPEC(f) HAS_DOS_DRIVE_SPEC (f) +# define IS_DIR_SEPARATOR(c) IS_DOS_DIR_SEPARATOR (c) +# define IS_ABSOLUTE_PATH(f) IS_DOS_ABSOLUTE_PATH (f) +#else /* not DOSish */ +# if defined(__APPLE__) +# ifndef HAVE_CASE_INSENSITIVE_FILE_SYSTEM +# define HAVE_CASE_INSENSITIVE_FILE_SYSTEM 1 +# endif +# endif /* __APPLE__ */ +# define HAS_DRIVE_SPEC(f) (0) +# define IS_DIR_SEPARATOR(c) IS_UNIX_DIR_SEPARATOR (c) +# define IS_ABSOLUTE_PATH(f) IS_UNIX_ABSOLUTE_PATH (f) +#endif + +#define IS_DIR_SEPARATOR_1(dos_based, c) \ + (((c) == '/') \ + || (((c) == '\\') && (dos_based))) + +#define HAS_DRIVE_SPEC_1(dos_based, f) \ + ((f)[0] && ((f)[1] == ':') && (dos_based)) + +/* Remove the drive spec from F, assuming HAS_DRIVE_SPEC (f). + The result is a pointer to the remainder of F. */ +#define STRIP_DRIVE_SPEC(f) ((f) + 2) + +#define IS_DOS_DIR_SEPARATOR(c) IS_DIR_SEPARATOR_1 (1, c) +#define IS_DOS_ABSOLUTE_PATH(f) IS_ABSOLUTE_PATH_1 (1, f) +#define HAS_DOS_DRIVE_SPEC(f) HAS_DRIVE_SPEC_1 (1, f) + +#define IS_UNIX_DIR_SEPARATOR(c) IS_DIR_SEPARATOR_1 (0, c) +#define IS_UNIX_ABSOLUTE_PATH(f) IS_ABSOLUTE_PATH_1 (0, f) + +/* Note that when DOS_BASED is true, IS_ABSOLUTE_PATH accepts d:foo as + well, although it is only semi-absolute. This is because the users + of IS_ABSOLUTE_PATH want to know whether to prepend the current + working directory to a file name, which should not be done with a + name like d:foo. */ +#define IS_ABSOLUTE_PATH_1(dos_based, f) \ + (IS_DIR_SEPARATOR_1 (dos_based, (f)[0]) \ + || HAS_DRIVE_SPEC_1 (dos_based, f)) + +extern int filename_cmp (const char *s1, const char *s2); +#define FILENAME_CMP(s1, s2) filename_cmp(s1, s2) + +extern int filename_ncmp (const char *s1, const char *s2, + size_t n); + +extern hashval_t filename_hash (const void *s); + +extern int filename_eq (const void *s1, const void *s2); + +extern int canonical_filename_eq (const char *a, const char *b); + +#ifdef __cplusplus +} +#endif + +#endif /* FILENAMES_H */ diff --git a/contrib/toolchain/gcc/5x/include/hashtab.h b/contrib/toolchain/gcc/5x/include/hashtab.h new file mode 100644 index 0000000000..188b8494db --- /dev/null +++ b/contrib/toolchain/gcc/5x/include/hashtab.h @@ -0,0 +1,205 @@ +/* An expandable hash tables datatype. + Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2009, 2010 + Free Software Foundation, Inc. + Contributed by Vladimir Makarov (vmakarov@cygnus.com). + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* This package implements basic hash table functionality. It is possible + to search for an entry, create an entry and destroy an entry. + + Elements in the table are generic pointers. + + The size of the table is not fixed; if the occupancy of the table + grows too high the hash table will be expanded. + + The abstract data implementation is based on generalized Algorithm D + from Knuth's book "The art of computer programming". Hash table is + expanded by creation of new hash table and transferring elements from + the old table to the new table. */ + +#ifndef __HASHTAB_H__ +#define __HASHTAB_H__ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include "ansidecl.h" + +/* The type for a hash code. */ +typedef unsigned int hashval_t; + +/* Callback function pointer types. */ + +/* Calculate hash of a table entry. */ +typedef hashval_t (*htab_hash) (const void *); + +/* Compare a table entry with a possible entry. The entry already in + the table always comes first, so the second element can be of a + different type (but in this case htab_find and htab_find_slot + cannot be used; instead the variants that accept a hash value + must be used). */ +typedef int (*htab_eq) (const void *, const void *); + +/* Cleanup function called whenever a live element is removed from + the hash table. */ +typedef void (*htab_del) (void *); + +/* Function called by htab_traverse for each live element. The first + arg is the slot of the element (which can be passed to htab_clear_slot + if desired), the second arg is the auxiliary pointer handed to + htab_traverse. Return 1 to continue scan, 0 to stop. */ +typedef int (*htab_trav) (void **, void *); + +/* Memory-allocation function, with the same functionality as calloc(). + Iff it returns NULL, the hash table implementation will pass an error + code back to the user, so if your code doesn't handle errors, + best if you use xcalloc instead. */ +typedef void *(*htab_alloc) (size_t, size_t); + +/* We also need a free() routine. */ +typedef void (*htab_free) (void *); + +/* Memory allocation and deallocation; variants which take an extra + argument. */ +typedef void *(*htab_alloc_with_arg) (void *, size_t, size_t); +typedef void (*htab_free_with_arg) (void *, void *); + +/* This macro defines reserved value for empty table entry. */ + +#define HTAB_EMPTY_ENTRY ((PTR) 0) + +/* This macro defines reserved value for table entry which contained + a deleted element. */ + +#define HTAB_DELETED_ENTRY ((PTR) 1) + +/* Hash tables are of the following type. The structure + (implementation) of this type is not needed for using the hash + tables. All work with hash table should be executed only through + functions mentioned below. The size of this structure is subject to + change. */ + +struct htab { + /* Pointer to hash function. */ + htab_hash hash_f; + + /* Pointer to comparison function. */ + htab_eq eq_f; + + /* Pointer to cleanup function. */ + htab_del del_f; + + /* Table itself. */ + void **entries; + + /* Current size (in entries) of the hash table. */ + size_t size; + + /* Current number of elements including also deleted elements. */ + size_t n_elements; + + /* Current number of deleted elements in the table. */ + size_t n_deleted; + + /* The following member is used for debugging. Its value is number + of all calls of `htab_find_slot' for the hash table. */ + unsigned int searches; + + /* The following member is used for debugging. Its value is number + of collisions fixed for time of work with the hash table. */ + unsigned int collisions; + + /* Pointers to allocate/free functions. */ + htab_alloc alloc_f; + htab_free free_f; + + /* Alternate allocate/free functions, which take an extra argument. */ + void *alloc_arg; + htab_alloc_with_arg alloc_with_arg_f; + htab_free_with_arg free_with_arg_f; + + /* Current size (in entries) of the hash table, as an index into the + table of primes. */ + unsigned int size_prime_index; +}; + +typedef struct htab *htab_t; + +/* An enum saying whether we insert into the hash table or not. */ +enum insert_option {NO_INSERT, INSERT}; + +/* The prototypes of the package functions. */ + +extern htab_t htab_create_alloc (size_t, htab_hash, + htab_eq, htab_del, + htab_alloc, htab_free); + +extern htab_t htab_create_alloc_ex (size_t, htab_hash, + htab_eq, htab_del, + void *, htab_alloc_with_arg, + htab_free_with_arg); + +extern htab_t htab_create_typed_alloc (size_t, htab_hash, htab_eq, htab_del, + htab_alloc, htab_alloc, htab_free); + +/* Backward-compatibility functions. */ +extern htab_t htab_create (size_t, htab_hash, htab_eq, htab_del); +extern htab_t htab_try_create (size_t, htab_hash, htab_eq, htab_del); + +extern void htab_set_functions_ex (htab_t, htab_hash, + htab_eq, htab_del, + void *, htab_alloc_with_arg, + htab_free_with_arg); + +extern void htab_delete (htab_t); +extern void htab_empty (htab_t); + +extern void * htab_find (htab_t, const void *); +extern void ** htab_find_slot (htab_t, const void *, enum insert_option); +extern void * htab_find_with_hash (htab_t, const void *, hashval_t); +extern void ** htab_find_slot_with_hash (htab_t, const void *, + hashval_t, enum insert_option); +extern void htab_clear_slot (htab_t, void **); +extern void htab_remove_elt (htab_t, void *); +extern void htab_remove_elt_with_hash (htab_t, void *, hashval_t); + +extern void htab_traverse (htab_t, htab_trav, void *); +extern void htab_traverse_noresize (htab_t, htab_trav, void *); + +extern size_t htab_size (htab_t); +extern size_t htab_elements (htab_t); +extern double htab_collisions (htab_t); + +/* A hash function for pointers. */ +extern htab_hash htab_hash_pointer; + +/* An equality function for pointers. */ +extern htab_eq htab_eq_pointer; + +/* A hash function for null-terminated strings. */ +extern hashval_t htab_hash_string (const void *); + +/* An iterative hash function for arbitrary data. */ +extern hashval_t iterative_hash (const void *, size_t, hashval_t); +/* Shorthand for hashing something with an intrinsic size. */ +#define iterative_hash_object(OB,INIT) iterative_hash (&OB, sizeof (OB), INIT) + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __HASHTAB_H */ diff --git a/contrib/toolchain/gcc/5x/include/longlong.h b/contrib/toolchain/gcc/5x/include/longlong.h new file mode 100644 index 0000000000..8cd2c79898 --- /dev/null +++ b/contrib/toolchain/gcc/5x/include/longlong.h @@ -0,0 +1,1745 @@ +/* longlong.h -- definitions for mixed size 32/64 bit arithmetic. + Copyright (C) 1991-2014 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +/* You have to define the following before including this file: + + UWtype -- An unsigned type, default type for operations (typically a "word") + UHWtype -- An unsigned type, at least half the size of UWtype. + UDWtype -- An unsigned type, at least twice as large a UWtype + W_TYPE_SIZE -- size in bits of UWtype + + UQItype -- Unsigned 8 bit type. + SItype, USItype -- Signed and unsigned 32 bit types. + DItype, UDItype -- Signed and unsigned 64 bit types. + + On a 32 bit machine UWtype should typically be USItype; + on a 64 bit machine, UWtype should typically be UDItype. */ + +#define __BITS4 (W_TYPE_SIZE / 4) +#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2)) +#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1)) +#define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2)) + +#ifndef W_TYPE_SIZE +#define W_TYPE_SIZE 32 +#define UWtype USItype +#define UHWtype USItype +#define UDWtype UDItype +#endif + +/* Used in glibc only. */ +#ifndef attribute_hidden +#define attribute_hidden +#endif + +extern const UQItype __clz_tab[256] attribute_hidden; + +/* Define auxiliary asm macros. + + 1) umul_ppmm(high_prod, low_prod, multiplier, multiplicand) multiplies two + UWtype integers MULTIPLIER and MULTIPLICAND, and generates a two UWtype + word product in HIGH_PROD and LOW_PROD. + + 2) __umulsidi3(a,b) multiplies two UWtype integers A and B, and returns a + UDWtype product. This is just a variant of umul_ppmm. + + 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator, + denominator) divides a UDWtype, composed by the UWtype integers + HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient + in QUOTIENT and the remainder in REMAINDER. HIGH_NUMERATOR must be less + than DENOMINATOR for correct operation. If, in addition, the most + significant bit of DENOMINATOR must be 1, then the pre-processor symbol + UDIV_NEEDS_NORMALIZATION is defined to 1. + + 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator, + denominator). Like udiv_qrnnd but the numbers are signed. The quotient + is rounded towards 0. + + 5) count_leading_zeros(count, x) counts the number of zero-bits from the + msb to the first nonzero bit in the UWtype X. This is the number of + steps X needs to be shifted left to set the msb. Undefined for X == 0, + unless the symbol COUNT_LEADING_ZEROS_0 is defined to some value. + + 6) count_trailing_zeros(count, x) like count_leading_zeros, but counts + from the least significant end. + + 7) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1, + high_addend_2, low_addend_2) adds two UWtype integers, composed by + HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and LOW_ADDEND_2 + respectively. The result is placed in HIGH_SUM and LOW_SUM. Overflow + (i.e. carry out) is not stored anywhere, and is lost. + + 8) sub_ddmmss(high_difference, low_difference, high_minuend, low_minuend, + high_subtrahend, low_subtrahend) subtracts two two-word UWtype integers, + composed by HIGH_MINUEND_1 and LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and + LOW_SUBTRAHEND_2 respectively. The result is placed in HIGH_DIFFERENCE + and LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere, + and is lost. + + If any of these macros are left undefined for a particular CPU, + C macros are used. */ + +/* The CPUs come in alphabetical order below. + + Please add support for more CPUs here, or improve the current support + for the CPUs below! + (E.g. WE32100, IBM360.) */ + +#if defined (__GNUC__) && !defined (NO_ASM) + +/* We sometimes need to clobber "cc" with gcc2, but that would not be + understood by gcc1. Use cpp to avoid major code duplication. */ +#if __GNUC__ < 2 +#define __CLOBBER_CC +#define __AND_CLOBBER_CC +#else /* __GNUC__ >= 2 */ +#define __CLOBBER_CC : "cc" +#define __AND_CLOBBER_CC , "cc" +#endif /* __GNUC__ < 2 */ + +#if defined (__aarch64__) + +#if W_TYPE_SIZE == 32 +#define count_leading_zeros(COUNT, X) ((COUNT) = __builtin_clz (X)) +#define count_trailing_zeros(COUNT, X) ((COUNT) = __builtin_ctz (X)) +#define COUNT_LEADING_ZEROS_0 32 +#endif /* W_TYPE_SIZE == 32 */ + +#if W_TYPE_SIZE == 64 +#define count_leading_zeros(COUNT, X) ((COUNT) = __builtin_clzll (X)) +#define count_trailing_zeros(COUNT, X) ((COUNT) = __builtin_ctzll (X)) +#define COUNT_LEADING_ZEROS_0 64 +#endif /* W_TYPE_SIZE == 64 */ + +#endif /* __aarch64__ */ + +#if defined (__alpha) && W_TYPE_SIZE == 64 +/* There is a bug in g++ before version 5 that + errors on __builtin_alpha_umulh. */ +#if !defined(__cplusplus) || __GNUC__ >= 5 +#define umul_ppmm(ph, pl, m0, m1) \ + do { \ + UDItype __m0 = (m0), __m1 = (m1); \ + (ph) = __builtin_alpha_umulh (__m0, __m1); \ + (pl) = __m0 * __m1; \ + } while (0) +#define UMUL_TIME 46 +#endif /* !c++ */ +#ifndef LONGLONG_STANDALONE +#define udiv_qrnnd(q, r, n1, n0, d) \ + do { UDItype __r; \ + (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \ + (r) = __r; \ + } while (0) +extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, UDItype); +#define UDIV_TIME 220 +#endif /* LONGLONG_STANDALONE */ +#ifdef __alpha_cix__ +#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clzl (X)) +#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctzl (X)) +#define COUNT_LEADING_ZEROS_0 64 +#else +#define count_leading_zeros(COUNT,X) \ + do { \ + UDItype __xr = (X), __t, __a; \ + __t = __builtin_alpha_cmpbge (0, __xr); \ + __a = __clz_tab[__t ^ 0xff] - 1; \ + __t = __builtin_alpha_extbl (__xr, __a); \ + (COUNT) = 64 - (__clz_tab[__t] + __a*8); \ + } while (0) +#define count_trailing_zeros(COUNT,X) \ + do { \ + UDItype __xr = (X), __t, __a; \ + __t = __builtin_alpha_cmpbge (0, __xr); \ + __t = ~__t & -~__t; \ + __a = ((__t & 0xCC) != 0) * 2; \ + __a += ((__t & 0xF0) != 0) * 4; \ + __a += ((__t & 0xAA) != 0); \ + __t = __builtin_alpha_extbl (__xr, __a); \ + __a <<= 3; \ + __t &= -__t; \ + __a += ((__t & 0xCC) != 0) * 2; \ + __a += ((__t & 0xF0) != 0) * 4; \ + __a += ((__t & 0xAA) != 0); \ + (COUNT) = __a; \ + } while (0) +#endif /* __alpha_cix__ */ +#endif /* __alpha */ + +#if defined (__arc__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("add.f %1, %4, %5\n\tadc %0, %2, %3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "%r" ((USItype) (ah)), \ + "rIJ" ((USItype) (bh)), \ + "%r" ((USItype) (al)), \ + "rIJ" ((USItype) (bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("sub.f %1, %4, %5\n\tsbc %0, %2, %3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "r" ((USItype) (ah)), \ + "rIJ" ((USItype) (bh)), \ + "r" ((USItype) (al)), \ + "rIJ" ((USItype) (bl))) + +#define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v) +#ifdef __ARC_NORM__ +#define count_leading_zeros(count, x) \ + do \ + { \ + SItype c_; \ + \ + __asm__ ("norm.f\t%0,%1\n\tmov.mi\t%0,-1" : "=r" (c_) : "r" (x) : "cc");\ + (count) = c_ + 1; \ + } \ + while (0) +#define COUNT_LEADING_ZEROS_0 32 +#endif +#endif + +#if defined (__arm__) && (defined (__thumb2__) || !defined (__thumb__)) \ + && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("adds %1, %4, %5\n\tadc %0, %2, %3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "%r" ((USItype) (ah)), \ + "rI" ((USItype) (bh)), \ + "%r" ((USItype) (al)), \ + "rI" ((USItype) (bl)) __CLOBBER_CC) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subs %1, %4, %5\n\tsbc %0, %2, %3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "r" ((USItype) (ah)), \ + "rI" ((USItype) (bh)), \ + "r" ((USItype) (al)), \ + "rI" ((USItype) (bl)) __CLOBBER_CC) +# if defined(__ARM_ARCH_2__) || defined(__ARM_ARCH_2A__) \ + || defined(__ARM_ARCH_3__) +# define umul_ppmm(xh, xl, a, b) \ + do { \ + register USItype __t0, __t1, __t2; \ + __asm__ ("%@ Inlined umul_ppmm\n" \ + " mov %2, %5, lsr #16\n" \ + " mov %0, %6, lsr #16\n" \ + " bic %3, %5, %2, lsl #16\n" \ + " bic %4, %6, %0, lsl #16\n" \ + " mul %1, %3, %4\n" \ + " mul %4, %2, %4\n" \ + " mul %3, %0, %3\n" \ + " mul %0, %2, %0\n" \ + " adds %3, %4, %3\n" \ + " addcs %0, %0, #65536\n" \ + " adds %1, %1, %3, lsl #16\n" \ + " adc %0, %0, %3, lsr #16" \ + : "=&r" ((USItype) (xh)), \ + "=r" ((USItype) (xl)), \ + "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \ + : "r" ((USItype) (a)), \ + "r" ((USItype) (b)) __CLOBBER_CC ); \ + } while (0) +# define UMUL_TIME 20 +# else +# define umul_ppmm(xh, xl, a, b) \ + do { \ + /* Generate umull, under compiler control. */ \ + register UDItype __t0 = (UDItype)(USItype)(a) * (USItype)(b); \ + (xl) = (USItype)__t0; \ + (xh) = (USItype)(__t0 >> 32); \ + } while (0) +# define UMUL_TIME 3 +# endif +# define UDIV_TIME 100 +#endif /* __arm__ */ + +#if defined(__arm__) +/* Let gcc decide how best to implement count_leading_zeros. */ +#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clz (X)) +#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctz (X)) +#define COUNT_LEADING_ZEROS_0 32 +#endif + +#if defined (__AVR__) + +#if W_TYPE_SIZE == 16 +#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clz (X)) +#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctz (X)) +#define COUNT_LEADING_ZEROS_0 16 +#endif /* W_TYPE_SIZE == 16 */ + +#if W_TYPE_SIZE == 32 +#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clzl (X)) +#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctzl (X)) +#define COUNT_LEADING_ZEROS_0 32 +#endif /* W_TYPE_SIZE == 32 */ + +#if W_TYPE_SIZE == 64 +#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clzll (X)) +#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctzll (X)) +#define COUNT_LEADING_ZEROS_0 64 +#endif /* W_TYPE_SIZE == 64 */ + +#endif /* defined (__AVR__) */ + +#if defined (__CRIS__) + +#if __CRIS_arch_version >= 3 +#define count_leading_zeros(COUNT, X) ((COUNT) = __builtin_clz (X)) +#define COUNT_LEADING_ZEROS_0 32 +#endif /* __CRIS_arch_version >= 3 */ + +#if __CRIS_arch_version >= 8 +#define count_trailing_zeros(COUNT, X) ((COUNT) = __builtin_ctz (X)) +#endif /* __CRIS_arch_version >= 8 */ + +#if __CRIS_arch_version >= 10 +#define __umulsidi3(u,v) ((UDItype)(USItype) (u) * (UDItype)(USItype) (v)) +#else +#define __umulsidi3 __umulsidi3 +extern UDItype __umulsidi3 (USItype, USItype); +#endif /* __CRIS_arch_version >= 10 */ + +#define umul_ppmm(w1, w0, u, v) \ + do { \ + UDItype __x = __umulsidi3 (u, v); \ + (w0) = (USItype) (__x); \ + (w1) = (USItype) (__x >> 32); \ + } while (0) + +/* FIXME: defining add_ssaaaa and sub_ddmmss should be advantageous for + DFmode ("double" intrinsics, avoiding two of the three insns handling + carry), but defining them as open-code C composing and doing the + operation in DImode (UDImode) shows that the DImode needs work: + register pressure from requiring neighboring registers and the + traffic to and from them come to dominate, in the 4.7 series. */ + +#endif /* defined (__CRIS__) */ + +#if defined (__hppa) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("add %4,%5,%1\n\taddc %2,%3,%0" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "%rM" ((USItype) (ah)), \ + "rM" ((USItype) (bh)), \ + "%rM" ((USItype) (al)), \ + "rM" ((USItype) (bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("sub %4,%5,%1\n\tsubb %2,%3,%0" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "rM" ((USItype) (ah)), \ + "rM" ((USItype) (bh)), \ + "rM" ((USItype) (al)), \ + "rM" ((USItype) (bl))) +#if defined (_PA_RISC1_1) +#define umul_ppmm(w1, w0, u, v) \ + do { \ + union \ + { \ + UDItype __f; \ + struct {USItype __w1, __w0;} __w1w0; \ + } __t; \ + __asm__ ("xmpyu %1,%2,%0" \ + : "=x" (__t.__f) \ + : "x" ((USItype) (u)), \ + "x" ((USItype) (v))); \ + (w1) = __t.__w1w0.__w1; \ + (w0) = __t.__w1w0.__w0; \ + } while (0) +#define UMUL_TIME 8 +#else +#define UMUL_TIME 30 +#endif +#define UDIV_TIME 40 +#define count_leading_zeros(count, x) \ + do { \ + USItype __tmp; \ + __asm__ ( \ + "ldi 1,%0\n" \ +" extru,= %1,15,16,%%r0 ; Bits 31..16 zero?\n" \ +" extru,tr %1,15,16,%1 ; No. Shift down, skip add.\n"\ +" ldo 16(%0),%0 ; Yes. Perform add.\n" \ +" extru,= %1,23,8,%%r0 ; Bits 15..8 zero?\n" \ +" extru,tr %1,23,8,%1 ; No. Shift down, skip add.\n"\ +" ldo 8(%0),%0 ; Yes. Perform add.\n" \ +" extru,= %1,27,4,%%r0 ; Bits 7..4 zero?\n" \ +" extru,tr %1,27,4,%1 ; No. Shift down, skip add.\n"\ +" ldo 4(%0),%0 ; Yes. Perform add.\n" \ +" extru,= %1,29,2,%%r0 ; Bits 3..2 zero?\n" \ +" extru,tr %1,29,2,%1 ; No. Shift down, skip add.\n"\ +" ldo 2(%0),%0 ; Yes. Perform add.\n" \ +" extru %1,30,1,%1 ; Extract bit 1.\n" \ +" sub %0,%1,%0 ; Subtract it.\n" \ + : "=r" (count), "=r" (__tmp) : "1" (x)); \ + } while (0) +#endif + +#if (defined (__i370__) || defined (__s390__) || defined (__mvs__)) && W_TYPE_SIZE == 32 +#if !defined (__zarch__) +#define smul_ppmm(xh, xl, m0, m1) \ + do { \ + union {DItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __x; \ + __asm__ ("lr %N0,%1\n\tmr %0,%2" \ + : "=&r" (__x.__ll) \ + : "r" (m0), "r" (m1)); \ + (xh) = __x.__i.__h; (xl) = __x.__i.__l; \ + } while (0) +#define sdiv_qrnnd(q, r, n1, n0, d) \ + do { \ + union {DItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __x; \ + __x.__i.__h = n1; __x.__i.__l = n0; \ + __asm__ ("dr %0,%2" \ + : "=r" (__x.__ll) \ + : "0" (__x.__ll), "r" (d)); \ + (q) = __x.__i.__l; (r) = __x.__i.__h; \ + } while (0) +#else +#define smul_ppmm(xh, xl, m0, m1) \ + do { \ + register SItype __r0 __asm__ ("0"); \ + register SItype __r1 __asm__ ("1") = (m0); \ + \ + __asm__ ("mr\t%%r0,%3" \ + : "=r" (__r0), "=r" (__r1) \ + : "r" (__r1), "r" (m1)); \ + (xh) = __r0; (xl) = __r1; \ + } while (0) + +#define sdiv_qrnnd(q, r, n1, n0, d) \ + do { \ + register SItype __r0 __asm__ ("0") = (n1); \ + register SItype __r1 __asm__ ("1") = (n0); \ + \ + __asm__ ("dr\t%%r0,%4" \ + : "=r" (__r0), "=r" (__r1) \ + : "r" (__r0), "r" (__r1), "r" (d)); \ + (q) = __r1; (r) = __r0; \ + } while (0) +#endif /* __zarch__ */ +#endif + +#if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("add{l} {%5,%1|%1,%5}\n\tadc{l} {%3,%0|%0,%3}" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "%0" ((USItype) (ah)), \ + "g" ((USItype) (bh)), \ + "%1" ((USItype) (al)), \ + "g" ((USItype) (bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("sub{l} {%5,%1|%1,%5}\n\tsbb{l} {%3,%0|%0,%3}" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "0" ((USItype) (ah)), \ + "g" ((USItype) (bh)), \ + "1" ((USItype) (al)), \ + "g" ((USItype) (bl))) +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("mul{l} %3" \ + : "=a" ((USItype) (w0)), \ + "=d" ((USItype) (w1)) \ + : "%0" ((USItype) (u)), \ + "rm" ((USItype) (v))) +#define udiv_qrnnd(q, r, n1, n0, dv) \ + __asm__ ("div{l} %4" \ + : "=a" ((USItype) (q)), \ + "=d" ((USItype) (r)) \ + : "0" ((USItype) (n0)), \ + "1" ((USItype) (n1)), \ + "rm" ((USItype) (dv))) +#define count_leading_zeros(count, x) ((count) = __builtin_clz (x)) +#define count_trailing_zeros(count, x) ((count) = __builtin_ctz (x)) +#define UMUL_TIME 40 +#define UDIV_TIME 40 +#endif /* 80x86 */ + +#if defined (__x86_64__) && W_TYPE_SIZE == 64 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("add{q} {%5,%1|%1,%5}\n\tadc{q} {%3,%0|%0,%3}" \ + : "=r" ((UDItype) (sh)), \ + "=&r" ((UDItype) (sl)) \ + : "%0" ((UDItype) (ah)), \ + "rme" ((UDItype) (bh)), \ + "%1" ((UDItype) (al)), \ + "rme" ((UDItype) (bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("sub{q} {%5,%1|%1,%5}\n\tsbb{q} {%3,%0|%0,%3}" \ + : "=r" ((UDItype) (sh)), \ + "=&r" ((UDItype) (sl)) \ + : "0" ((UDItype) (ah)), \ + "rme" ((UDItype) (bh)), \ + "1" ((UDItype) (al)), \ + "rme" ((UDItype) (bl))) +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("mul{q} %3" \ + : "=a" ((UDItype) (w0)), \ + "=d" ((UDItype) (w1)) \ + : "%0" ((UDItype) (u)), \ + "rm" ((UDItype) (v))) +#define udiv_qrnnd(q, r, n1, n0, dv) \ + __asm__ ("div{q} %4" \ + : "=a" ((UDItype) (q)), \ + "=d" ((UDItype) (r)) \ + : "0" ((UDItype) (n0)), \ + "1" ((UDItype) (n1)), \ + "rm" ((UDItype) (dv))) +#define count_leading_zeros(count, x) ((count) = __builtin_clzll (x)) +#define count_trailing_zeros(count, x) ((count) = __builtin_ctzll (x)) +#define UMUL_TIME 40 +#define UDIV_TIME 40 +#endif /* x86_64 */ + +#if defined (__i960__) && W_TYPE_SIZE == 32 +#define umul_ppmm(w1, w0, u, v) \ + ({union {UDItype __ll; \ + struct {USItype __l, __h;} __i; \ + } __xx; \ + __asm__ ("emul %2,%1,%0" \ + : "=d" (__xx.__ll) \ + : "%dI" ((USItype) (u)), \ + "dI" ((USItype) (v))); \ + (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) +#define __umulsidi3(u, v) \ + ({UDItype __w; \ + __asm__ ("emul %2,%1,%0" \ + : "=d" (__w) \ + : "%dI" ((USItype) (u)), \ + "dI" ((USItype) (v))); \ + __w; }) +#endif /* __i960__ */ + +#if defined (__ia64) && W_TYPE_SIZE == 64 +/* This form encourages gcc (pre-release 3.4 at least) to emit predicated + "sub r=r,r" and "sub r=r,r,1", giving a 2 cycle latency. The generic + code using "al>= _c; \ + if (_x >= 1 << 4) \ + _x >>= 4, _c += 4; \ + if (_x >= 1 << 2) \ + _x >>= 2, _c += 2; \ + _c += _x >> 1; \ + (count) = W_TYPE_SIZE - 1 - _c; \ + } while (0) +/* similar to what gcc does for __builtin_ffs, but 0 based rather than 1 + based, and we don't need a special case for x==0 here */ +#define count_trailing_zeros(count, x) \ + do { \ + UWtype __ctz_x = (x); \ + __asm__ ("popcnt %0 = %1" \ + : "=r" (count) \ + : "r" ((__ctz_x-1) & ~__ctz_x)); \ + } while (0) +#define UMUL_TIME 14 +#endif + +#if defined (__M32R__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + /* The cmp clears the condition bit. */ \ + __asm__ ("cmp %0,%0\n\taddx %1,%5\n\taddx %0,%3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "0" ((USItype) (ah)), \ + "r" ((USItype) (bh)), \ + "1" ((USItype) (al)), \ + "r" ((USItype) (bl)) \ + : "cbit") +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + /* The cmp clears the condition bit. */ \ + __asm__ ("cmp %0,%0\n\tsubx %1,%5\n\tsubx %0,%3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "0" ((USItype) (ah)), \ + "r" ((USItype) (bh)), \ + "1" ((USItype) (al)), \ + "r" ((USItype) (bl)) \ + : "cbit") +#endif /* __M32R__ */ + +#if defined (__mc68000__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("add%.l %5,%1\n\taddx%.l %3,%0" \ + : "=d" ((USItype) (sh)), \ + "=&d" ((USItype) (sl)) \ + : "%0" ((USItype) (ah)), \ + "d" ((USItype) (bh)), \ + "%1" ((USItype) (al)), \ + "g" ((USItype) (bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("sub%.l %5,%1\n\tsubx%.l %3,%0" \ + : "=d" ((USItype) (sh)), \ + "=&d" ((USItype) (sl)) \ + : "0" ((USItype) (ah)), \ + "d" ((USItype) (bh)), \ + "1" ((USItype) (al)), \ + "g" ((USItype) (bl))) + +/* The '020, '030, '040, '060 and CPU32 have 32x32->64 and 64/32->32q-32r. */ +#if (defined (__mc68020__) && !defined (__mc68060__)) +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("mulu%.l %3,%1:%0" \ + : "=d" ((USItype) (w0)), \ + "=d" ((USItype) (w1)) \ + : "%0" ((USItype) (u)), \ + "dmi" ((USItype) (v))) +#define UMUL_TIME 45 +#define udiv_qrnnd(q, r, n1, n0, d) \ + __asm__ ("divu%.l %4,%1:%0" \ + : "=d" ((USItype) (q)), \ + "=d" ((USItype) (r)) \ + : "0" ((USItype) (n0)), \ + "1" ((USItype) (n1)), \ + "dmi" ((USItype) (d))) +#define UDIV_TIME 90 +#define sdiv_qrnnd(q, r, n1, n0, d) \ + __asm__ ("divs%.l %4,%1:%0" \ + : "=d" ((USItype) (q)), \ + "=d" ((USItype) (r)) \ + : "0" ((USItype) (n0)), \ + "1" ((USItype) (n1)), \ + "dmi" ((USItype) (d))) + +#elif defined (__mcoldfire__) /* not mc68020 */ + +#define umul_ppmm(xh, xl, a, b) \ + __asm__ ("| Inlined umul_ppmm\n" \ + " move%.l %2,%/d0\n" \ + " move%.l %3,%/d1\n" \ + " move%.l %/d0,%/d2\n" \ + " swap %/d0\n" \ + " move%.l %/d1,%/d3\n" \ + " swap %/d1\n" \ + " move%.w %/d2,%/d4\n" \ + " mulu %/d3,%/d4\n" \ + " mulu %/d1,%/d2\n" \ + " mulu %/d0,%/d3\n" \ + " mulu %/d0,%/d1\n" \ + " move%.l %/d4,%/d0\n" \ + " clr%.w %/d0\n" \ + " swap %/d0\n" \ + " add%.l %/d0,%/d2\n" \ + " add%.l %/d3,%/d2\n" \ + " jcc 1f\n" \ + " add%.l %#65536,%/d1\n" \ + "1: swap %/d2\n" \ + " moveq %#0,%/d0\n" \ + " move%.w %/d2,%/d0\n" \ + " move%.w %/d4,%/d2\n" \ + " move%.l %/d2,%1\n" \ + " add%.l %/d1,%/d0\n" \ + " move%.l %/d0,%0" \ + : "=g" ((USItype) (xh)), \ + "=g" ((USItype) (xl)) \ + : "g" ((USItype) (a)), \ + "g" ((USItype) (b)) \ + : "d0", "d1", "d2", "d3", "d4") +#define UMUL_TIME 100 +#define UDIV_TIME 400 +#else /* not ColdFire */ +/* %/ inserts REGISTER_PREFIX, %# inserts IMMEDIATE_PREFIX. */ +#define umul_ppmm(xh, xl, a, b) \ + __asm__ ("| Inlined umul_ppmm\n" \ + " move%.l %2,%/d0\n" \ + " move%.l %3,%/d1\n" \ + " move%.l %/d0,%/d2\n" \ + " swap %/d0\n" \ + " move%.l %/d1,%/d3\n" \ + " swap %/d1\n" \ + " move%.w %/d2,%/d4\n" \ + " mulu %/d3,%/d4\n" \ + " mulu %/d1,%/d2\n" \ + " mulu %/d0,%/d3\n" \ + " mulu %/d0,%/d1\n" \ + " move%.l %/d4,%/d0\n" \ + " eor%.w %/d0,%/d0\n" \ + " swap %/d0\n" \ + " add%.l %/d0,%/d2\n" \ + " add%.l %/d3,%/d2\n" \ + " jcc 1f\n" \ + " add%.l %#65536,%/d1\n" \ + "1: swap %/d2\n" \ + " moveq %#0,%/d0\n" \ + " move%.w %/d2,%/d0\n" \ + " move%.w %/d4,%/d2\n" \ + " move%.l %/d2,%1\n" \ + " add%.l %/d1,%/d0\n" \ + " move%.l %/d0,%0" \ + : "=g" ((USItype) (xh)), \ + "=g" ((USItype) (xl)) \ + : "g" ((USItype) (a)), \ + "g" ((USItype) (b)) \ + : "d0", "d1", "d2", "d3", "d4") +#define UMUL_TIME 100 +#define UDIV_TIME 400 + +#endif /* not mc68020 */ + +/* The '020, '030, '040 and '060 have bitfield insns. + cpu32 disguises as a 68020, but lacks them. */ +#if defined (__mc68020__) && !defined (__mcpu32__) +#define count_leading_zeros(count, x) \ + __asm__ ("bfffo %1{%b2:%b2},%0" \ + : "=d" ((USItype) (count)) \ + : "od" ((USItype) (x)), "n" (0)) +/* Some ColdFire architectures have a ff1 instruction supported via + __builtin_clz. */ +#elif defined (__mcfisaaplus__) || defined (__mcfisac__) +#define count_leading_zeros(count,x) ((count) = __builtin_clz (x)) +#define COUNT_LEADING_ZEROS_0 32 +#endif +#endif /* mc68000 */ + +#if defined (__m88000__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("addu.co %1,%r4,%r5\n\taddu.ci %0,%r2,%r3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "%rJ" ((USItype) (ah)), \ + "rJ" ((USItype) (bh)), \ + "%rJ" ((USItype) (al)), \ + "rJ" ((USItype) (bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subu.co %1,%r4,%r5\n\tsubu.ci %0,%r2,%r3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "rJ" ((USItype) (ah)), \ + "rJ" ((USItype) (bh)), \ + "rJ" ((USItype) (al)), \ + "rJ" ((USItype) (bl))) +#define count_leading_zeros(count, x) \ + do { \ + USItype __cbtmp; \ + __asm__ ("ff1 %0,%1" \ + : "=r" (__cbtmp) \ + : "r" ((USItype) (x))); \ + (count) = __cbtmp ^ 31; \ + } while (0) +#define COUNT_LEADING_ZEROS_0 63 /* sic */ +#if defined (__mc88110__) +#define umul_ppmm(wh, wl, u, v) \ + do { \ + union {UDItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __xx; \ + __asm__ ("mulu.d %0,%1,%2" \ + : "=r" (__xx.__ll) \ + : "r" ((USItype) (u)), \ + "r" ((USItype) (v))); \ + (wh) = __xx.__i.__h; \ + (wl) = __xx.__i.__l; \ + } while (0) +#define udiv_qrnnd(q, r, n1, n0, d) \ + ({union {UDItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __xx; \ + USItype __q; \ + __xx.__i.__h = (n1); __xx.__i.__l = (n0); \ + __asm__ ("divu.d %0,%1,%2" \ + : "=r" (__q) \ + : "r" (__xx.__ll), \ + "r" ((USItype) (d))); \ + (r) = (n0) - __q * (d); (q) = __q; }) +#define UMUL_TIME 5 +#define UDIV_TIME 25 +#else +#define UMUL_TIME 17 +#define UDIV_TIME 150 +#endif /* __mc88110__ */ +#endif /* __m88000__ */ + +#if defined (__mn10300__) +# if defined (__AM33__) +# define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clz (X)) +# define umul_ppmm(w1, w0, u, v) \ + asm("mulu %3,%2,%1,%0" : "=r"(w0), "=r"(w1) : "r"(u), "r"(v)) +# define smul_ppmm(w1, w0, u, v) \ + asm("mul %3,%2,%1,%0" : "=r"(w0), "=r"(w1) : "r"(u), "r"(v)) +# else +# define umul_ppmm(w1, w0, u, v) \ + asm("nop; nop; mulu %3,%0" : "=d"(w0), "=z"(w1) : "%0"(u), "d"(v)) +# define smul_ppmm(w1, w0, u, v) \ + asm("nop; nop; mul %3,%0" : "=d"(w0), "=z"(w1) : "%0"(u), "d"(v)) +# endif +# define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + do { \ + DWunion __s, __a, __b; \ + __a.s.low = (al); __a.s.high = (ah); \ + __b.s.low = (bl); __b.s.high = (bh); \ + __s.ll = __a.ll + __b.ll; \ + (sl) = __s.s.low; (sh) = __s.s.high; \ + } while (0) +# define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + do { \ + DWunion __s, __a, __b; \ + __a.s.low = (al); __a.s.high = (ah); \ + __b.s.low = (bl); __b.s.high = (bh); \ + __s.ll = __a.ll - __b.ll; \ + (sl) = __s.s.low; (sh) = __s.s.high; \ + } while (0) +# define udiv_qrnnd(q, r, nh, nl, d) \ + asm("divu %2,%0" : "=D"(q), "=z"(r) : "D"(d), "0"(nl), "1"(nh)) +# define sdiv_qrnnd(q, r, nh, nl, d) \ + asm("div %2,%0" : "=D"(q), "=z"(r) : "D"(d), "0"(nl), "1"(nh)) +# define UMUL_TIME 3 +# define UDIV_TIME 38 +#endif + +#if defined (__mips__) && W_TYPE_SIZE == 32 +#define umul_ppmm(w1, w0, u, v) \ + do { \ + UDItype __x = (UDItype) (USItype) (u) * (USItype) (v); \ + (w1) = (USItype) (__x >> 32); \ + (w0) = (USItype) (__x); \ + } while (0) +#define UMUL_TIME 10 +#define UDIV_TIME 100 + +#if (__mips == 32 || __mips == 64) && ! defined (__mips16) +#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clz (X)) +#define COUNT_LEADING_ZEROS_0 32 +#endif +#endif /* __mips__ */ + +#if defined (__ns32000__) && W_TYPE_SIZE == 32 +#define umul_ppmm(w1, w0, u, v) \ + ({union {UDItype __ll; \ + struct {USItype __l, __h;} __i; \ + } __xx; \ + __asm__ ("meid %2,%0" \ + : "=g" (__xx.__ll) \ + : "%0" ((USItype) (u)), \ + "g" ((USItype) (v))); \ + (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) +#define __umulsidi3(u, v) \ + ({UDItype __w; \ + __asm__ ("meid %2,%0" \ + : "=g" (__w) \ + : "%0" ((USItype) (u)), \ + "g" ((USItype) (v))); \ + __w; }) +#define udiv_qrnnd(q, r, n1, n0, d) \ + ({union {UDItype __ll; \ + struct {USItype __l, __h;} __i; \ + } __xx; \ + __xx.__i.__h = (n1); __xx.__i.__l = (n0); \ + __asm__ ("deid %2,%0" \ + : "=g" (__xx.__ll) \ + : "0" (__xx.__ll), \ + "g" ((USItype) (d))); \ + (r) = __xx.__i.__l; (q) = __xx.__i.__h; }) +#define count_trailing_zeros(count,x) \ + do { \ + __asm__ ("ffsd %2,%0" \ + : "=r" ((USItype) (count)) \ + : "0" ((USItype) 0), \ + "r" ((USItype) (x))); \ + } while (0) +#endif /* __ns32000__ */ + +/* FIXME: We should test _IBMR2 here when we add assembly support for the + system vendor compilers. + FIXME: What's needed for gcc PowerPC VxWorks? __vxworks__ is not good + enough, since that hits ARM and m68k too. */ +#if (defined (_ARCH_PPC) /* AIX */ \ + || defined (__powerpc__) /* gcc */ \ + || defined (__POWERPC__) /* BEOS */ \ + || defined (__ppc__) /* Darwin */ \ + || (defined (PPC) && ! defined (CPU_FAMILY)) /* gcc 2.7.x GNU&SysV */ \ + || (defined (PPC) && defined (CPU_FAMILY) /* VxWorks */ \ + && CPU_FAMILY == PPC) \ + ) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + do { \ + if (__builtin_constant_p (bh) && (bh) == 0) \ + __asm__ ("add%I4c %1,%3,%4\n\taddze %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0) \ + __asm__ ("add%I4c %1,%3,%4\n\taddme %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\ + else \ + __asm__ ("add%I5c %1,%4,%5\n\tadde %0,%2,%3" \ + : "=r" (sh), "=&r" (sl) \ + : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl)); \ + } while (0) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + do { \ + if (__builtin_constant_p (ah) && (ah) == 0) \ + __asm__ ("subf%I3c %1,%4,%3\n\tsubfze %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (ah) && (ah) == ~(USItype) 0) \ + __asm__ ("subf%I3c %1,%4,%3\n\tsubfme %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == 0) \ + __asm__ ("subf%I3c %1,%4,%3\n\taddme %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0) \ + __asm__ ("subf%I3c %1,%4,%3\n\taddze %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ + else \ + __asm__ ("subf%I4c %1,%5,%4\n\tsubfe %0,%3,%2" \ + : "=r" (sh), "=&r" (sl) \ + : "r" (ah), "r" (bh), "rI" (al), "r" (bl)); \ + } while (0) +#define count_leading_zeros(count, x) \ + __asm__ ("cntlzw %0,%1" : "=r" (count) : "r" (x)) +#define COUNT_LEADING_ZEROS_0 32 +#if defined (_ARCH_PPC) || defined (__powerpc__) || defined (__POWERPC__) \ + || defined (__ppc__) \ + || (defined (PPC) && ! defined (CPU_FAMILY)) /* gcc 2.7.x GNU&SysV */ \ + || (defined (PPC) && defined (CPU_FAMILY) /* VxWorks */ \ + && CPU_FAMILY == PPC) +#define umul_ppmm(ph, pl, m0, m1) \ + do { \ + USItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mulhwu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \ + (pl) = __m0 * __m1; \ + } while (0) +#define UMUL_TIME 15 +#define smul_ppmm(ph, pl, m0, m1) \ + do { \ + SItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mulhw %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \ + (pl) = __m0 * __m1; \ + } while (0) +#define SMUL_TIME 14 +#define UDIV_TIME 120 +#endif +#endif /* 32-bit POWER architecture variants. */ + +/* We should test _IBMR2 here when we add assembly support for the system + vendor compilers. */ +#if (defined (_ARCH_PPC64) || defined (__powerpc64__)) && W_TYPE_SIZE == 64 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + do { \ + if (__builtin_constant_p (bh) && (bh) == 0) \ + __asm__ ("add%I4c %1,%3,%4\n\taddze %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \ + __asm__ ("add%I4c %1,%3,%4\n\taddme %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\ + else \ + __asm__ ("add%I5c %1,%4,%5\n\tadde %0,%2,%3" \ + : "=r" (sh), "=&r" (sl) \ + : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl)); \ + } while (0) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + do { \ + if (__builtin_constant_p (ah) && (ah) == 0) \ + __asm__ ("subf%I3c %1,%4,%3\n\tsubfze %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (ah) && (ah) == ~(UDItype) 0) \ + __asm__ ("subf%I3c %1,%4,%3\n\tsubfme %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == 0) \ + __asm__ ("subf%I3c %1,%4,%3\n\taddme %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \ + __asm__ ("subf%I3c %1,%4,%3\n\taddze %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ + else \ + __asm__ ("subf%I4c %1,%5,%4\n\tsubfe %0,%3,%2" \ + : "=r" (sh), "=&r" (sl) \ + : "r" (ah), "r" (bh), "rI" (al), "r" (bl)); \ + } while (0) +#define count_leading_zeros(count, x) \ + __asm__ ("cntlzd %0,%1" : "=r" (count) : "r" (x)) +#define COUNT_LEADING_ZEROS_0 64 +#define umul_ppmm(ph, pl, m0, m1) \ + do { \ + UDItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mulhdu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \ + (pl) = __m0 * __m1; \ + } while (0) +#define UMUL_TIME 15 +#define smul_ppmm(ph, pl, m0, m1) \ + do { \ + DItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mulhd %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \ + (pl) = __m0 * __m1; \ + } while (0) +#define SMUL_TIME 14 /* ??? */ +#define UDIV_TIME 120 /* ??? */ +#endif /* 64-bit PowerPC. */ + +#if defined (__ibm032__) /* RT/ROMP */ && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("a %1,%5\n\tae %0,%3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "%0" ((USItype) (ah)), \ + "r" ((USItype) (bh)), \ + "%1" ((USItype) (al)), \ + "r" ((USItype) (bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("s %1,%5\n\tse %0,%3" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "0" ((USItype) (ah)), \ + "r" ((USItype) (bh)), \ + "1" ((USItype) (al)), \ + "r" ((USItype) (bl))) +#define umul_ppmm(ph, pl, m0, m1) \ + do { \ + USItype __m0 = (m0), __m1 = (m1); \ + __asm__ ( \ + "s r2,r2\n" \ +" mts r10,%2\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" m r2,%3\n" \ +" cas %0,r2,r0\n" \ +" mfs r10,%1" \ + : "=r" ((USItype) (ph)), \ + "=r" ((USItype) (pl)) \ + : "%r" (__m0), \ + "r" (__m1) \ + : "r2"); \ + (ph) += ((((SItype) __m0 >> 31) & __m1) \ + + (((SItype) __m1 >> 31) & __m0)); \ + } while (0) +#define UMUL_TIME 20 +#define UDIV_TIME 200 +#define count_leading_zeros(count, x) \ + do { \ + if ((x) >= 0x10000) \ + __asm__ ("clz %0,%1" \ + : "=r" ((USItype) (count)) \ + : "r" ((USItype) (x) >> 16)); \ + else \ + { \ + __asm__ ("clz %0,%1" \ + : "=r" ((USItype) (count)) \ + : "r" ((USItype) (x))); \ + (count) += 16; \ + } \ + } while (0) +#endif + +#if defined(__sh__) && !__SHMEDIA__ && W_TYPE_SIZE == 32 +#ifndef __sh1__ +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ( \ + "dmulu.l %2,%3\n\tsts%M1 macl,%1\n\tsts%M0 mach,%0" \ + : "=r<" ((USItype)(w1)), \ + "=r<" ((USItype)(w0)) \ + : "r" ((USItype)(u)), \ + "r" ((USItype)(v)) \ + : "macl", "mach") +#define UMUL_TIME 5 +#endif + +/* This is the same algorithm as __udiv_qrnnd_c. */ +#define UDIV_NEEDS_NORMALIZATION 1 + +#define udiv_qrnnd(q, r, n1, n0, d) \ + do { \ + extern UWtype __udiv_qrnnd_16 (UWtype, UWtype) \ + __attribute__ ((visibility ("hidden"))); \ + /* r0: rn r1: qn */ /* r0: n1 r4: n0 r5: d r6: d1 */ /* r2: __m */ \ + __asm__ ( \ + "mov%M4 %4,r5\n" \ +" swap.w %3,r4\n" \ +" swap.w r5,r6\n" \ +" jsr @%5\n" \ +" shll16 r6\n" \ +" swap.w r4,r4\n" \ +" jsr @%5\n" \ +" swap.w r1,%0\n" \ +" or r1,%0" \ + : "=r" (q), "=&z" (r) \ + : "1" (n1), "r" (n0), "rm" (d), "r" (&__udiv_qrnnd_16) \ + : "r1", "r2", "r4", "r5", "r6", "pr", "t"); \ + } while (0) + +#define UDIV_TIME 80 + +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("clrt;subc %5,%1; subc %4,%0" \ + : "=r" (sh), "=r" (sl) \ + : "0" (ah), "1" (al), "r" (bh), "r" (bl) : "t") + +#endif /* __sh__ */ + +#if defined (__SH5__) && __SHMEDIA__ && W_TYPE_SIZE == 32 +#define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v) +#define count_leading_zeros(count, x) \ + do \ + { \ + UDItype x_ = (USItype)(x); \ + SItype c_; \ + \ + __asm__ ("nsb %1, %0" : "=r" (c_) : "r" (x_)); \ + (count) = c_ - 31; \ + } \ + while (0) +#define COUNT_LEADING_ZEROS_0 32 +#endif + +#if defined (__sparc__) && !defined (__arch64__) && !defined (__sparcv9) \ + && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("addcc %r4,%5,%1\n\taddx %r2,%3,%0" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "%rJ" ((USItype) (ah)), \ + "rI" ((USItype) (bh)), \ + "%rJ" ((USItype) (al)), \ + "rI" ((USItype) (bl)) \ + __CLOBBER_CC) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subcc %r4,%5,%1\n\tsubx %r2,%3,%0" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "rJ" ((USItype) (ah)), \ + "rI" ((USItype) (bh)), \ + "rJ" ((USItype) (al)), \ + "rI" ((USItype) (bl)) \ + __CLOBBER_CC) +#if defined (__sparc_v9__) +#define umul_ppmm(w1, w0, u, v) \ + do { \ + register USItype __g1 asm ("g1"); \ + __asm__ ("umul\t%2,%3,%1\n\t" \ + "srlx\t%1, 32, %0" \ + : "=r" ((USItype) (w1)), \ + "=r" (__g1) \ + : "r" ((USItype) (u)), \ + "r" ((USItype) (v))); \ + (w0) = __g1; \ + } while (0) +#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \ + __asm__ ("mov\t%2,%%y\n\t" \ + "udiv\t%3,%4,%0\n\t" \ + "umul\t%0,%4,%1\n\t" \ + "sub\t%3,%1,%1" \ + : "=&r" ((USItype) (__q)), \ + "=&r" ((USItype) (__r)) \ + : "r" ((USItype) (__n1)), \ + "r" ((USItype) (__n0)), \ + "r" ((USItype) (__d))) +#else +#if defined (__sparc_v8__) +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("umul %2,%3,%1;rd %%y,%0" \ + : "=r" ((USItype) (w1)), \ + "=r" ((USItype) (w0)) \ + : "r" ((USItype) (u)), \ + "r" ((USItype) (v))) +#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \ + __asm__ ("mov %2,%%y;nop;nop;nop;udiv %3,%4,%0;umul %0,%4,%1;sub %3,%1,%1"\ + : "=&r" ((USItype) (__q)), \ + "=&r" ((USItype) (__r)) \ + : "r" ((USItype) (__n1)), \ + "r" ((USItype) (__n0)), \ + "r" ((USItype) (__d))) +#else +#if defined (__sparclite__) +/* This has hardware multiply but not divide. It also has two additional + instructions scan (ffs from high bit) and divscc. */ +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("umul %2,%3,%1;rd %%y,%0" \ + : "=r" ((USItype) (w1)), \ + "=r" ((USItype) (w0)) \ + : "r" ((USItype) (u)), \ + "r" ((USItype) (v))) +#define udiv_qrnnd(q, r, n1, n0, d) \ + __asm__ ("! Inlined udiv_qrnnd\n" \ +" wr %%g0,%2,%%y ! Not a delayed write for sparclite\n" \ +" tst %%g0\n" \ +" divscc %3,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%%g1\n" \ +" divscc %%g1,%4,%0\n" \ +" rd %%y,%1\n" \ +" bl,a 1f\n" \ +" add %1,%4,%1\n" \ +"1: ! End of inline udiv_qrnnd" \ + : "=r" ((USItype) (q)), \ + "=r" ((USItype) (r)) \ + : "r" ((USItype) (n1)), \ + "r" ((USItype) (n0)), \ + "rI" ((USItype) (d)) \ + : "g1" __AND_CLOBBER_CC) +#define UDIV_TIME 37 +#define count_leading_zeros(count, x) \ + do { \ + __asm__ ("scan %1,1,%0" \ + : "=r" ((USItype) (count)) \ + : "r" ((USItype) (x))); \ + } while (0) +/* Early sparclites return 63 for an argument of 0, but they warn that future + implementations might change this. Therefore, leave COUNT_LEADING_ZEROS_0 + undefined. */ +#else +/* SPARC without integer multiplication and divide instructions. + (i.e. at least Sun4/20,40,60,65,75,110,260,280,330,360,380,470,490) */ +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("! Inlined umul_ppmm\n" \ +" wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr\n"\ +" sra %3,31,%%o5 ! Don't move this insn\n" \ +" and %2,%%o5,%%o5 ! Don't move this insn\n" \ +" andcc %%g0,0,%%g1 ! Don't move this insn\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,%3,%%g1\n" \ +" mulscc %%g1,0,%%g1\n" \ +" add %%g1,%%o5,%0\n" \ +" rd %%y,%1" \ + : "=r" ((USItype) (w1)), \ + "=r" ((USItype) (w0)) \ + : "%rI" ((USItype) (u)), \ + "r" ((USItype) (v)) \ + : "g1", "o5" __AND_CLOBBER_CC) +#define UMUL_TIME 39 /* 39 instructions */ +/* It's quite necessary to add this much assembler for the sparc. + The default udiv_qrnnd (in C) is more than 10 times slower! */ +#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \ + __asm__ ("! Inlined udiv_qrnnd\n" \ +" mov 32,%%g1\n" \ +" subcc %1,%2,%%g0\n" \ +"1: bcs 5f\n" \ +" addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb\n" \ +" sub %1,%2,%1 ! this kills msb of n\n" \ +" addx %1,%1,%1 ! so this can't give carry\n" \ +" subcc %%g1,1,%%g1\n" \ +"2: bne 1b\n" \ +" subcc %1,%2,%%g0\n" \ +" bcs 3f\n" \ +" addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb\n" \ +" b 3f\n" \ +" sub %1,%2,%1 ! this kills msb of n\n" \ +"4: sub %1,%2,%1\n" \ +"5: addxcc %1,%1,%1\n" \ +" bcc 2b\n" \ +" subcc %%g1,1,%%g1\n" \ +"! Got carry from n. Subtract next step to cancel this carry.\n" \ +" bne 4b\n" \ +" addcc %0,%0,%0 ! shift n1n0 and a 0-bit in lsb\n" \ +" sub %1,%2,%1\n" \ +"3: xnor %0,0,%0\n" \ +" ! End of inline udiv_qrnnd" \ + : "=&r" ((USItype) (__q)), \ + "=&r" ((USItype) (__r)) \ + : "r" ((USItype) (__d)), \ + "1" ((USItype) (__n1)), \ + "0" ((USItype) (__n0)) : "g1" __AND_CLOBBER_CC) +#define UDIV_TIME (3+7*32) /* 7 instructions/iteration. 32 iterations. */ +#endif /* __sparclite__ */ +#endif /* __sparc_v8__ */ +#endif /* __sparc_v9__ */ +#endif /* sparc32 */ + +#if ((defined (__sparc__) && defined (__arch64__)) || defined (__sparcv9)) \ + && W_TYPE_SIZE == 64 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + do { \ + UDItype __carry = 0; \ + __asm__ ("addcc\t%r5,%6,%1\n\t" \ + "add\t%r3,%4,%0\n\t" \ + "movcs\t%%xcc, 1, %2\n\t" \ + "add\t%0, %2, %0" \ + : "=r" ((UDItype)(sh)), \ + "=&r" ((UDItype)(sl)), \ + "+r" (__carry) \ + : "%rJ" ((UDItype)(ah)), \ + "rI" ((UDItype)(bh)), \ + "%rJ" ((UDItype)(al)), \ + "rI" ((UDItype)(bl)) \ + __CLOBBER_CC); \ + } while (0) + +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + do { \ + UDItype __carry = 0; \ + __asm__ ("subcc\t%r5,%6,%1\n\t" \ + "sub\t%r3,%4,%0\n\t" \ + "movcs\t%%xcc, 1, %2\n\t" \ + "sub\t%0, %2, %0" \ + : "=r" ((UDItype)(sh)), \ + "=&r" ((UDItype)(sl)), \ + "+r" (__carry) \ + : "%rJ" ((UDItype)(ah)), \ + "rI" ((UDItype)(bh)), \ + "%rJ" ((UDItype)(al)), \ + "rI" ((UDItype)(bl)) \ + __CLOBBER_CC); \ + } while (0) + +#define umul_ppmm(wh, wl, u, v) \ + do { \ + UDItype tmp1, tmp2, tmp3, tmp4; \ + __asm__ __volatile__ ( \ + "srl %7,0,%3\n\t" \ + "mulx %3,%6,%1\n\t" \ + "srlx %6,32,%2\n\t" \ + "mulx %2,%3,%4\n\t" \ + "sllx %4,32,%5\n\t" \ + "srl %6,0,%3\n\t" \ + "sub %1,%5,%5\n\t" \ + "srlx %5,32,%5\n\t" \ + "addcc %4,%5,%4\n\t" \ + "srlx %7,32,%5\n\t" \ + "mulx %3,%5,%3\n\t" \ + "mulx %2,%5,%5\n\t" \ + "sethi %%hi(0x80000000),%2\n\t" \ + "addcc %4,%3,%4\n\t" \ + "srlx %4,32,%4\n\t" \ + "add %2,%2,%2\n\t" \ + "movcc %%xcc,%%g0,%2\n\t" \ + "addcc %5,%4,%5\n\t" \ + "sllx %3,32,%3\n\t" \ + "add %1,%3,%1\n\t" \ + "add %5,%2,%0" \ + : "=r" ((UDItype)(wh)), \ + "=&r" ((UDItype)(wl)), \ + "=&r" (tmp1), "=&r" (tmp2), "=&r" (tmp3), "=&r" (tmp4) \ + : "r" ((UDItype)(u)), \ + "r" ((UDItype)(v)) \ + __CLOBBER_CC); \ + } while (0) +#define UMUL_TIME 96 +#define UDIV_TIME 230 +#endif /* sparc64 */ + +#if defined (__vax__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("addl2 %5,%1\n\tadwc %3,%0" \ + : "=g" ((USItype) (sh)), \ + "=&g" ((USItype) (sl)) \ + : "%0" ((USItype) (ah)), \ + "g" ((USItype) (bh)), \ + "%1" ((USItype) (al)), \ + "g" ((USItype) (bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subl2 %5,%1\n\tsbwc %3,%0" \ + : "=g" ((USItype) (sh)), \ + "=&g" ((USItype) (sl)) \ + : "0" ((USItype) (ah)), \ + "g" ((USItype) (bh)), \ + "1" ((USItype) (al)), \ + "g" ((USItype) (bl))) +#define umul_ppmm(xh, xl, m0, m1) \ + do { \ + union { \ + UDItype __ll; \ + struct {USItype __l, __h;} __i; \ + } __xx; \ + USItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("emul %1,%2,$0,%0" \ + : "=r" (__xx.__ll) \ + : "g" (__m0), \ + "g" (__m1)); \ + (xh) = __xx.__i.__h; \ + (xl) = __xx.__i.__l; \ + (xh) += ((((SItype) __m0 >> 31) & __m1) \ + + (((SItype) __m1 >> 31) & __m0)); \ + } while (0) +#define sdiv_qrnnd(q, r, n1, n0, d) \ + do { \ + union {DItype __ll; \ + struct {SItype __l, __h;} __i; \ + } __xx; \ + __xx.__i.__h = n1; __xx.__i.__l = n0; \ + __asm__ ("ediv %3,%2,%0,%1" \ + : "=g" (q), "=g" (r) \ + : "g" (__xx.__ll), "g" (d)); \ + } while (0) +#endif /* __vax__ */ + +#ifdef _TMS320C6X +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + do \ + { \ + UDItype __ll; \ + __asm__ ("addu .l1 %1, %2, %0" \ + : "=a" (__ll) : "a" (al), "a" (bl)); \ + (sl) = (USItype)__ll; \ + (sh) = ((USItype)(__ll >> 32)) + (ah) + (bh); \ + } \ + while (0) + +#ifdef _TMS320C6400_PLUS +#define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v) +#define umul_ppmm(w1, w0, u, v) \ + do { \ + UDItype __x = (UDItype) (USItype) (u) * (USItype) (v); \ + (w1) = (USItype) (__x >> 32); \ + (w0) = (USItype) (__x); \ + } while (0) +#endif /* _TMS320C6400_PLUS */ + +#define count_leading_zeros(count, x) ((count) = __builtin_clz (x)) +#ifdef _TMS320C6400 +#define count_trailing_zeros(count, x) ((count) = __builtin_ctz (x)) +#endif +#define UMUL_TIME 4 +#define UDIV_TIME 40 +#endif /* _TMS320C6X */ + +#if defined (__xtensa__) && W_TYPE_SIZE == 32 +/* This code is not Xtensa-configuration-specific, so rely on the compiler + to expand builtin functions depending on what configuration features + are available. This avoids library calls when the operation can be + performed in-line. */ +#define umul_ppmm(w1, w0, u, v) \ + do { \ + DWunion __w; \ + __w.ll = __builtin_umulsidi3 (u, v); \ + w1 = __w.s.high; \ + w0 = __w.s.low; \ + } while (0) +#define __umulsidi3(u, v) __builtin_umulsidi3 (u, v) +#define count_leading_zeros(COUNT, X) ((COUNT) = __builtin_clz (X)) +#define count_trailing_zeros(COUNT, X) ((COUNT) = __builtin_ctz (X)) +#endif /* __xtensa__ */ + +#if defined xstormy16 +extern UHItype __stormy16_count_leading_zeros (UHItype); +#define count_leading_zeros(count, x) \ + do \ + { \ + UHItype size; \ + \ + /* We assume that W_TYPE_SIZE is a multiple of 16... */ \ + for ((count) = 0, size = W_TYPE_SIZE; size; size -= 16) \ + { \ + UHItype c; \ + \ + c = __clzhi2 ((x) >> (size - 16)); \ + (count) += c; \ + if (c != 16) \ + break; \ + } \ + } \ + while (0) +#define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE +#endif + +#if defined (__z8000__) && W_TYPE_SIZE == 16 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("add %H1,%H5\n\tadc %H0,%H3" \ + : "=r" ((unsigned int)(sh)), \ + "=&r" ((unsigned int)(sl)) \ + : "%0" ((unsigned int)(ah)), \ + "r" ((unsigned int)(bh)), \ + "%1" ((unsigned int)(al)), \ + "rQR" ((unsigned int)(bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("sub %H1,%H5\n\tsbc %H0,%H3" \ + : "=r" ((unsigned int)(sh)), \ + "=&r" ((unsigned int)(sl)) \ + : "0" ((unsigned int)(ah)), \ + "r" ((unsigned int)(bh)), \ + "1" ((unsigned int)(al)), \ + "rQR" ((unsigned int)(bl))) +#define umul_ppmm(xh, xl, m0, m1) \ + do { \ + union {long int __ll; \ + struct {unsigned int __h, __l;} __i; \ + } __xx; \ + unsigned int __m0 = (m0), __m1 = (m1); \ + __asm__ ("mult %S0,%H3" \ + : "=r" (__xx.__i.__h), \ + "=r" (__xx.__i.__l) \ + : "%1" (__m0), \ + "rQR" (__m1)); \ + (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ + (xh) += ((((signed int) __m0 >> 15) & __m1) \ + + (((signed int) __m1 >> 15) & __m0)); \ + } while (0) +#endif /* __z8000__ */ + +#endif /* __GNUC__ */ + +/* If this machine has no inline assembler, use C macros. */ + +#if !defined (add_ssaaaa) +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + do { \ + UWtype __x; \ + __x = (al) + (bl); \ + (sh) = (ah) + (bh) + (__x < (al)); \ + (sl) = __x; \ + } while (0) +#endif + +#if !defined (sub_ddmmss) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + do { \ + UWtype __x; \ + __x = (al) - (bl); \ + (sh) = (ah) - (bh) - (__x > (al)); \ + (sl) = __x; \ + } while (0) +#endif + +/* If we lack umul_ppmm but have smul_ppmm, define umul_ppmm in terms of + smul_ppmm. */ +#if !defined (umul_ppmm) && defined (smul_ppmm) +#define umul_ppmm(w1, w0, u, v) \ + do { \ + UWtype __w1; \ + UWtype __xm0 = (u), __xm1 = (v); \ + smul_ppmm (__w1, w0, __xm0, __xm1); \ + (w1) = __w1 + (-(__xm0 >> (W_TYPE_SIZE - 1)) & __xm1) \ + + (-(__xm1 >> (W_TYPE_SIZE - 1)) & __xm0); \ + } while (0) +#endif + +/* If we still don't have umul_ppmm, define it using plain C. */ +#if !defined (umul_ppmm) +#define umul_ppmm(w1, w0, u, v) \ + do { \ + UWtype __x0, __x1, __x2, __x3; \ + UHWtype __ul, __vl, __uh, __vh; \ + \ + __ul = __ll_lowpart (u); \ + __uh = __ll_highpart (u); \ + __vl = __ll_lowpart (v); \ + __vh = __ll_highpart (v); \ + \ + __x0 = (UWtype) __ul * __vl; \ + __x1 = (UWtype) __ul * __vh; \ + __x2 = (UWtype) __uh * __vl; \ + __x3 = (UWtype) __uh * __vh; \ + \ + __x1 += __ll_highpart (__x0);/* this can't give carry */ \ + __x1 += __x2; /* but this indeed can */ \ + if (__x1 < __x2) /* did we get it? */ \ + __x3 += __ll_B; /* yes, add it in the proper pos. */ \ + \ + (w1) = __x3 + __ll_highpart (__x1); \ + (w0) = __ll_lowpart (__x1) * __ll_B + __ll_lowpart (__x0); \ + } while (0) +#endif + +#if !defined (__umulsidi3) +#define __umulsidi3(u, v) \ + ({DWunion __w; \ + umul_ppmm (__w.s.high, __w.s.low, u, v); \ + __w.ll; }) +#endif + +/* Define this unconditionally, so it can be used for debugging. */ +#define __udiv_qrnnd_c(q, r, n1, n0, d) \ + do { \ + UWtype __d1, __d0, __q1, __q0; \ + UWtype __r1, __r0, __m; \ + __d1 = __ll_highpart (d); \ + __d0 = __ll_lowpart (d); \ + \ + __r1 = (n1) % __d1; \ + __q1 = (n1) / __d1; \ + __m = (UWtype) __q1 * __d0; \ + __r1 = __r1 * __ll_B | __ll_highpart (n0); \ + if (__r1 < __m) \ + { \ + __q1--, __r1 += (d); \ + if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\ + if (__r1 < __m) \ + __q1--, __r1 += (d); \ + } \ + __r1 -= __m; \ + \ + __r0 = __r1 % __d1; \ + __q0 = __r1 / __d1; \ + __m = (UWtype) __q0 * __d0; \ + __r0 = __r0 * __ll_B | __ll_lowpart (n0); \ + if (__r0 < __m) \ + { \ + __q0--, __r0 += (d); \ + if (__r0 >= (d)) \ + if (__r0 < __m) \ + __q0--, __r0 += (d); \ + } \ + __r0 -= __m; \ + \ + (q) = (UWtype) __q1 * __ll_B | __q0; \ + (r) = __r0; \ + } while (0) + +/* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through + __udiv_w_sdiv (defined in libgcc or elsewhere). */ +#if !defined (udiv_qrnnd) && defined (sdiv_qrnnd) +#define udiv_qrnnd(q, r, nh, nl, d) \ + do { \ + extern UWtype __udiv_w_sdiv (UWtype *, UWtype, UWtype, UWtype); \ + UWtype __r; \ + (q) = __udiv_w_sdiv (&__r, nh, nl, d); \ + (r) = __r; \ + } while (0) +#endif + +/* If udiv_qrnnd was not defined for this processor, use __udiv_qrnnd_c. */ +#if !defined (udiv_qrnnd) +#define UDIV_NEEDS_NORMALIZATION 1 +#define udiv_qrnnd __udiv_qrnnd_c +#endif + +#if !defined (count_leading_zeros) +#define count_leading_zeros(count, x) \ + do { \ + UWtype __xr = (x); \ + UWtype __a; \ + \ + if (W_TYPE_SIZE <= 32) \ + { \ + __a = __xr < ((UWtype)1<<2*__BITS4) \ + ? (__xr < ((UWtype)1<<__BITS4) ? 0 : __BITS4) \ + : (__xr < ((UWtype)1<<3*__BITS4) ? 2*__BITS4 : 3*__BITS4); \ + } \ + else \ + { \ + for (__a = W_TYPE_SIZE - 8; __a > 0; __a -= 8) \ + if (((__xr >> __a) & 0xff) != 0) \ + break; \ + } \ + \ + (count) = W_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a); \ + } while (0) +#define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE +#endif + +#if !defined (count_trailing_zeros) +/* Define count_trailing_zeros using count_leading_zeros. The latter might be + defined in asm, but if it is not, the C version above is good enough. */ +#define count_trailing_zeros(count, x) \ + do { \ + UWtype __ctz_x = (x); \ + UWtype __ctz_c; \ + count_leading_zeros (__ctz_c, __ctz_x & -__ctz_x); \ + (count) = W_TYPE_SIZE - 1 - __ctz_c; \ + } while (0) +#endif + +#ifndef UDIV_NEEDS_NORMALIZATION +#define UDIV_NEEDS_NORMALIZATION 0 +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/Makefile b/contrib/toolchain/gcc/5x/libgcc/Makefile new file mode 100644 index 0000000000..d1c75a3765 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/Makefile @@ -0,0 +1,57 @@ + +export CC = kos32-gcc +export AR = kos32-ar +export LD = kos32-ld +export STRIP = kos32-strip + +export SDK_DIR:= $(abspath ../../../../sdk) + +CFLAGS_OPT+= -fomit-frame-pointer -fno-ident -mno-ms-bitfields +CFLAGS_OPT+= -fbuilding-libgcc -fno-stack-protector + +CFLAGS = -c -O2 -DIN_GCC -DIN_LIBGCC2 -DHAVE_CC_TLS -DUSE_EMUTLS -DENABLE_DECIMAL_BID_FORMAT +CFLAGS+= -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 -U_MSC_VER +CFLAGS+= -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wstrict-prototypes +CFLAGS+= -Wmissing-prototypes -Wold-style-definition $(CFLAGS_OPT) + +INCLUDES = -I../gcc -I../include + +objext = .o + +lib2funcs = _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 _cmpdi2 _ucmpdi2 \ + _clear_cache _trampoline __main _absvsi2 _absvdi2 _addvsi3 \ + _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 \ + _ctors _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 \ + _popcount_tab _popcountsi2 _popcountdi2 _paritysi2 _paritydi2 \ + _powisf2 _powidf2 _powixf2 _powitf2 _mulsc3 _muldc3 _mulxc3 \ + _multc3 _divsc3 _divdc3 _divxc3 _divtc3 _bswapsi2 _bswapdi2 \ + _clrsbsi2 _clrsbdi2 + + +swfloatfuncs = $(patsubst %,_fixuns%XX,sf df xf) + + +dwfloatfuncs = $(patsubst %,_fix%XX,sf df xf tf) \ + $(patsubst %,_fixuns%XX,sf df xf tf) \ + $(patsubst %,_floatXX%,sf df xf tf) \ + $(patsubst %,_floatunXX%,sf df xf tf) + +lib2funcs += $(subst XX,si,$(swfloatfuncs)) +lib2funcs += $(subst XX,di,$(dwfloatfuncs)) + +# targets + +all: libgcc.a + +lib2funcs-o = $(patsubst %,%$(objext),$(lib2funcs) $(LIB2FUNCS_ST)) + + +$(lib2funcs-o): %$(objext): libgcc2.c + $(CC) $(INCLUDES) $(CFLAGS) -DL$* -c $< -o $@ + +libgcc.a : $(lib2funcs-o) MAkefile + $(AR) crs libgcc.a $(lib2funcs-o) +# mv -f libbfd.a $(SDK_DIR)/lib + + + \ No newline at end of file diff --git a/contrib/toolchain/gcc/5x/libgcc/config/gthr-lynx.h b/contrib/toolchain/gcc/5x/libgcc/config/gthr-lynx.h new file mode 100644 index 0000000000..9a3ea40c36 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/gthr-lynx.h @@ -0,0 +1,61 @@ +/* Threads compatibility routines for libgcc2 and libobjc for + LynxOS. */ +/* Compile this one with gcc. */ +/* Copyright (C) 2004-2015 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 GCC_GTHR_LYNX_H +#define GCC_GTHR_LYNX_H + +#ifdef _MULTITHREADED + +/* Using the macro version of pthread_setspecific leads to a + compilation error. Instead we have two choices either kill all + macros in pthread.h with defining _POSIX_THREADS_CALLS or undefine + individual macros where we should fall back on the function + implementation. We choose the second approach. */ + +#include +#undef pthread_setspecific + +/* When using static libc on LynxOS, we cannot define pthread_create + weak. If the multi-threaded application includes iostream.h, + gthr-posix.h is included and pthread_create will be defined weak. + If pthread_create is weak its defining module in libc is not + necessarily included in the link and the symbol is resolved to zero. + Therefore the first call to it will crash. + + Since -mthreads is a multilib switch on LynxOS we know that at this + point we are compiling for multi-threaded. Omitting the weak + definitions at this point should have no effect. */ + +#undef GTHREAD_USE_WEAK +#define GTHREAD_USE_WEAK 0 + +#include "gthr-posix.h" + +#else +#include "gthr-single.h" +#endif + +#endif /* GCC_GTHR_LYNX_H */ diff --git a/contrib/toolchain/gcc/5x/libgcc/config/gthr-rtems.h b/contrib/toolchain/gcc/5x/libgcc/config/gthr-rtems.h new file mode 100644 index 0000000000..23038c6c9a --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/gthr-rtems.h @@ -0,0 +1,164 @@ +/* RTEMS threads compatibility routines for libgcc2 and libobjc. + by: Rosimildo da Silva( rdasilva@connecttel.com ) */ +/* Compile this one with gcc. */ +/* Copyright (C) 1997-2015 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 GCC_GTHR_RTEMS_H +#define GCC_GTHR_RTEMS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define __GTHREADS 1 + +#define __GTHREAD_ONCE_INIT 0 +#define __GTHREAD_MUTEX_INIT_FUNCTION rtems_gxx_mutex_init +#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION rtems_gxx_recursive_mutex_init + +/* Avoid dependency on rtems specific headers. */ +typedef void *__gthread_key_t; +typedef int __gthread_once_t; +typedef void *__gthread_mutex_t; +typedef void *__gthread_recursive_mutex_t; + +/* + * External functions provided by RTEMS. They are very similar to their POSIX + * counterparts. A "Wrapper API" is being use to avoid dependency on any RTEMS + * header files. + */ + +/* generic per task variables */ +extern int rtems_gxx_once (__gthread_once_t *__once, void (*__func) (void)); +extern int rtems_gxx_key_create (__gthread_key_t *__key, void (*__dtor) (void *)); +extern int rtems_gxx_key_delete (__gthread_key_t __key); +extern void *rtems_gxx_getspecific (__gthread_key_t __key); +extern int rtems_gxx_setspecific (__gthread_key_t __key, const void *__ptr); + +/* mutex support */ +extern void rtems_gxx_mutex_init (__gthread_mutex_t *__mutex); +extern int rtems_gxx_mutex_destroy (__gthread_mutex_t *__mutex); +extern int rtems_gxx_mutex_lock (__gthread_mutex_t *__mutex); +extern int rtems_gxx_mutex_trylock (__gthread_mutex_t *__mutex); +extern int rtems_gxx_mutex_unlock (__gthread_mutex_t *__mutex); + +/* recursive mutex support */ +extern void rtems_gxx_recursive_mutex_init (__gthread_recursive_mutex_t *__mutex); +extern int rtems_gxx_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex); +extern int rtems_gxx_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex); +extern int rtems_gxx_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex); + +/* RTEMS threading is always active */ +static inline int +__gthread_active_p (void) +{ + return 1; +} + +/* Wrapper calls */ +static inline int +__gthread_once (__gthread_once_t *__once, void (*__func) (void)) +{ + return rtems_gxx_once( __once, __func ); +} + +static inline int +__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *)) +{ + return rtems_gxx_key_create( __key, __dtor ); +} + +static inline int +__gthread_key_delete (__gthread_key_t __key) +{ + return rtems_gxx_key_delete (__key); +} + +static inline void * +__gthread_getspecific (__gthread_key_t __key) +{ + return rtems_gxx_getspecific (__key); +} + +static inline int +__gthread_setspecific (__gthread_key_t __key, const void *__ptr) +{ + return rtems_gxx_setspecific (__key, __ptr); +} + +static inline int +__gthread_mutex_destroy (__gthread_mutex_t *__mutex) +{ + return rtems_gxx_mutex_destroy (__mutex); +} + +static inline int +__gthread_mutex_lock (__gthread_mutex_t *__mutex) +{ + return rtems_gxx_mutex_lock (__mutex); +} + +static inline int +__gthread_mutex_trylock (__gthread_mutex_t *__mutex) +{ + return rtems_gxx_mutex_trylock (__mutex); +} + +static inline int +__gthread_mutex_unlock (__gthread_mutex_t *__mutex) +{ + return rtems_gxx_mutex_unlock( __mutex ); +} + +static inline int +__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) +{ + return rtems_gxx_recursive_mutex_lock (__mutex); +} + +static inline int +__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) +{ + return rtems_gxx_recursive_mutex_trylock (__mutex); +} + +static inline int +__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) +{ + return rtems_gxx_recursive_mutex_unlock( __mutex ); +} + +static inline int +__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex) +{ + /* This requires that recursive and non-recursive mutexes have the same + representation. */ + return rtems_gxx_mutex_destroy (__mutex ); +} + +#ifdef __cplusplus +} +#endif + +#endif /* ! GCC_GTHR_RTEMS_H */ diff --git a/contrib/toolchain/gcc/5x/libgcc/config/gthr-vxworks.h b/contrib/toolchain/gcc/5x/libgcc/config/gthr-vxworks.h new file mode 100644 index 0000000000..c90879a21b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/gthr-vxworks.h @@ -0,0 +1,175 @@ +/* Threads compatibility routines for libgcc2 and libobjc for VxWorks. */ +/* Compile this one with gcc. */ +/* Copyright (C) 1997-2015 Free Software Foundation, Inc. + Contributed by Mike Stump . + +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 GCC_GTHR_VXWORKS_H +#define GCC_GTHR_VXWORKS_H + +#ifdef _LIBOBJC + +/* libobjc requires the optional pthreads component. */ +#include "gthr-posix.h" + +#else +#ifdef __cplusplus +#define UNUSED(x) +#else +#define UNUSED(x) x __attribute__((__unused__)) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define __GTHREADS 1 +#define __gthread_active_p() 1 + +/* Mutexes are easy, except that they need to be initialized at runtime. */ + +#include + +typedef SEM_ID __gthread_mutex_t; +/* All VxWorks mutexes are recursive. */ +typedef SEM_ID __gthread_recursive_mutex_t; +#define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function +#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function + +static inline void +__gthread_mutex_init_function (__gthread_mutex_t *mutex) +{ + *mutex = semMCreate (SEM_Q_PRIORITY | SEM_INVERSION_SAFE | SEM_DELETE_SAFE); +} + +static inline int +__gthread_mutex_destroy (__gthread_mutex_t * UNUSED(mutex)) +{ + return 0; +} + +static inline int +__gthread_mutex_lock (__gthread_mutex_t *mutex) +{ + return semTake (*mutex, WAIT_FOREVER); +} + +static inline int +__gthread_mutex_trylock (__gthread_mutex_t *mutex) +{ + return semTake (*mutex, NO_WAIT); +} + +static inline int +__gthread_mutex_unlock (__gthread_mutex_t *mutex) +{ + return semGive (*mutex); +} + +static inline void +__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *mutex) +{ + __gthread_mutex_init_function (mutex); +} + +static inline int +__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *mutex) +{ + return __gthread_mutex_lock (mutex); +} + +static inline int +__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *mutex) +{ + return __gthread_mutex_trylock (mutex); +} + +static inline int +__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex) +{ + return __gthread_mutex_unlock (mutex); +} + +static inline int +__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_destroy (__mutex); +} + +/* pthread_once is complicated enough that it's implemented + out-of-line. See config/vxlib.c. */ + +typedef struct +{ +#if !defined(__RTP__) +#if defined(__PPC__) + __attribute ((aligned (__alignof (unsigned)))) +#endif + volatile unsigned char busy; +#endif + volatile unsigned char done; +#if !defined(__RTP__) && defined(__PPC__) + /* PPC's test-and-set implementation requires a 4 byte aligned + object, of which it only sets the first byte. We use padding + here, in order to maintain some amount of backwards + compatibility. Without this padding, gthread_once objects worked + by accident because they happen to be static objects and the ppc + port automatically increased their alignment to 4 bytes. */ + unsigned char pad1; + unsigned char pad2; +#endif +} +__gthread_once_t; + +#if defined (__RTP__) +# define __GTHREAD_ONCE_INIT { 0 } +#elif defined (__PPC__) +# define __GTHREAD_ONCE_INIT { 0, 0, 0, 0 } +#else +# define __GTHREAD_ONCE_INIT { 0, 0 } +#endif + +extern int __gthread_once (__gthread_once_t *__once, void (*__func)(void)); + +/* Thread-specific data requires a great deal of effort, since VxWorks + is not really set up for it. See config/vxlib.c for the gory + details. All the TSD routines are sufficiently complex that they + need to be implemented out of line. */ + +typedef unsigned int __gthread_key_t; + +extern int __gthread_key_create (__gthread_key_t *__keyp, void (*__dtor)(void *)); +extern int __gthread_key_delete (__gthread_key_t __key); + +extern void *__gthread_getspecific (__gthread_key_t __key); +extern int __gthread_setspecific (__gthread_key_t __key, void *__ptr); + +#undef UNUSED + +#ifdef __cplusplus +} +#endif + +#endif /* not _LIBOBJC */ + +#endif /* gthr-vxworks.h */ diff --git a/contrib/toolchain/gcc/5x/libgcc/config/hardfp.c b/contrib/toolchain/gcc/5x/libgcc/config/hardfp.c new file mode 100644 index 0000000000..a3537eff08 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/hardfp.c @@ -0,0 +1,62 @@ +/* Dummy floating-point routines for hard-float code. + Copyright (C) 2014-2015 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 sf float +#define df double + +#if defined (OP_add3) +TYPE FUNC (TYPE x, TYPE y) { return x + y; } +#elif defined (OP_sub3) +TYPE FUNC (TYPE x, TYPE y) { return x - y; } +#elif defined (OP_neg2) +TYPE FUNC (TYPE x) { return -x; } +#elif defined (OP_mul3) +TYPE FUNC (TYPE x, TYPE y) { return x * y; } +#elif defined (OP_div3) +TYPE FUNC (TYPE x, TYPE y) { return x / y; } +#elif defined (OP_eq2) || defined (OP_ne2) +int FUNC (TYPE x, TYPE y) { return x == y ? 0 : 1; } +#elif defined (OP_ge2) +int FUNC (TYPE x, TYPE y) { return x >= y ? 0 : -1; } +#elif defined (OP_gt2) +int FUNC (TYPE x, TYPE y) { return x > y ? 1 : 0; } +#elif defined (OP_le2) +int FUNC (TYPE x, TYPE y) { return x <= y ? 0 : 1; } +#elif defined (OP_lt2) +int FUNC (TYPE x, TYPE y) { return x < y ? -1 : 0; } +#elif defined (OP_unord2) +int FUNC (TYPE x, TYPE y) { return __builtin_isunordered (x, y); } +#elif defined (OP_fixsi) +int FUNC (TYPE x) { return (int) x; } +#elif defined (OP_floatsi) +TYPE FUNC (int x) { return (TYPE) x; } +#elif defined (OP_floatunsi) +TYPE FUNC (unsigned int x) { return (TYPE) x; } +#elif defined (OP_extendsf2) +TYPE FUNC (float x) { return (TYPE) x; } +#elif defined (OP_truncdf2) +TYPE FUNC (double x) { return (TYPE) x; } +#else +#error Unknown operation +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/32/sfp-machine.h b/contrib/toolchain/gcc/5x/libgcc/config/i386/32/sfp-machine.h new file mode 100644 index 0000000000..1fa282d7af --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/32/sfp-machine.h @@ -0,0 +1,113 @@ +#define _FP_W_TYPE_SIZE 32 +#define _FP_W_TYPE unsigned int +#define _FP_WS_TYPE signed int +#define _FP_I_TYPE int + +#define __FP_FRAC_ADD_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0) \ + __asm__ ("add{l} {%11,%3|%3,%11}\n\t" \ + "adc{l} {%9,%2|%2,%9}\n\t" \ + "adc{l} {%7,%1|%1,%7}\n\t" \ + "adc{l} {%5,%0|%0,%5}" \ + : "=r" ((USItype) (r3)), \ + "=&r" ((USItype) (r2)), \ + "=&r" ((USItype) (r1)), \ + "=&r" ((USItype) (r0)) \ + : "%0" ((USItype) (x3)), \ + "g" ((USItype) (y3)), \ + "%1" ((USItype) (x2)), \ + "g" ((USItype) (y2)), \ + "%2" ((USItype) (x1)), \ + "g" ((USItype) (y1)), \ + "%3" ((USItype) (x0)), \ + "g" ((USItype) (y0))) +#define __FP_FRAC_ADD_3(r2,r1,r0,x2,x1,x0,y2,y1,y0) \ + __asm__ ("add{l} {%8,%2|%2,%8}\n\t" \ + "adc{l} {%6,%1|%1,%6}\n\t" \ + "adc{l} {%4,%0|%0,%4}" \ + : "=r" ((USItype) (r2)), \ + "=&r" ((USItype) (r1)), \ + "=&r" ((USItype) (r0)) \ + : "%0" ((USItype) (x2)), \ + "g" ((USItype) (y2)), \ + "%1" ((USItype) (x1)), \ + "g" ((USItype) (y1)), \ + "%2" ((USItype) (x0)), \ + "g" ((USItype) (y0))) +#define __FP_FRAC_SUB_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0) \ + __asm__ ("sub{l} {%11,%3|%3,%11}\n\t" \ + "sbb{l} {%9,%2|%2,%9}\n\t" \ + "sbb{l} {%7,%1|%1,%7}\n\t" \ + "sbb{l} {%5,%0|%0,%5}" \ + : "=r" ((USItype) (r3)), \ + "=&r" ((USItype) (r2)), \ + "=&r" ((USItype) (r1)), \ + "=&r" ((USItype) (r0)) \ + : "0" ((USItype) (x3)), \ + "g" ((USItype) (y3)), \ + "1" ((USItype) (x2)), \ + "g" ((USItype) (y2)), \ + "2" ((USItype) (x1)), \ + "g" ((USItype) (y1)), \ + "3" ((USItype) (x0)), \ + "g" ((USItype) (y0))) +#define __FP_FRAC_SUB_3(r2,r1,r0,x2,x1,x0,y2,y1,y0) \ + __asm__ ("sub{l} {%8,%2|%2,%8}\n\t" \ + "sbb{l} {%6,%1|%1,%6}\n\t" \ + "sbb{l} {%4,%0|%0,%4}" \ + : "=r" ((USItype) (r2)), \ + "=&r" ((USItype) (r1)), \ + "=&r" ((USItype) (r0)) \ + : "0" ((USItype) (x2)), \ + "g" ((USItype) (y2)), \ + "1" ((USItype) (x1)), \ + "g" ((USItype) (y1)), \ + "2" ((USItype) (x0)), \ + "g" ((USItype) (y0))) +#define __FP_FRAC_ADDI_4(x3,x2,x1,x0,i) \ + __asm__ ("add{l} {%4,%3|%3,%4}\n\t" \ + "adc{l} {$0,%2|%2,0}\n\t" \ + "adc{l} {$0,%1|%1,0}\n\t" \ + "adc{l} {$0,%0|%0,0}" \ + : "+r" ((USItype) (x3)), \ + "+&r" ((USItype) (x2)), \ + "+&r" ((USItype) (x1)), \ + "+&r" ((USItype) (x0)) \ + : "g" ((USItype) (i))) + + +#define _FP_MUL_MEAT_S(R,X,Y) \ + _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) +#define _FP_MUL_MEAT_D(R,X,Y) \ + _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) +#define _FP_MUL_MEAT_Q(R,X,Y) \ + _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) + +#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y) +#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) +#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) + +#define _FP_NANFRAC_S _FP_QNANBIT_S +#define _FP_NANFRAC_D _FP_QNANBIT_D, 0 +/* Even if XFmode is 12byte, we have to pad it to + 16byte since soft-fp emulation is done in 16byte. */ +#define _FP_NANFRAC_E _FP_QNANBIT_E, 0, 0, 0 +#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0, 0, 0 + +#ifndef _SOFT_FLOAT +#define FP_EX_SHIFT 0 + +#define _FP_DECL_EX \ + unsigned short _fcw __attribute__ ((unused)) = FP_RND_NEAREST; + +#define FP_RND_NEAREST 0 +#define FP_RND_ZERO 0xc00 +#define FP_RND_PINF 0x800 +#define FP_RND_MINF 0x400 + +#define FP_RND_MASK 0xc00 + +#define FP_INIT_ROUNDMODE \ + do { \ + __asm__ __volatile__ ("fnstcw\t%0" : "=m" (_fcw)); \ + } while (0) +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/32/tf-signs.c b/contrib/toolchain/gcc/5x/libgcc/config/i386/32/tf-signs.c new file mode 100644 index 0000000000..157e11c5de --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/32/tf-signs.c @@ -0,0 +1,62 @@ +/* Copyright (C) 2008-2015 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 +. */ + +union _FP_UNION_Q +{ + __float128 flt; + struct + { + unsigned long frac0 : 32; + unsigned long frac1 : 32; + unsigned long frac2 : 32; + unsigned long frac3 : 16; + unsigned exp : 15; + unsigned sign : 1; + } bits __attribute__((packed)); +}; + +__float128 __copysigntf3 (__float128, __float128); +__float128 __fabstf2 (__float128); + +__float128 +__copysigntf3 (__float128 a, __float128 b) +{ + union _FP_UNION_Q A, B; + + A.flt = a; + B.flt = b; + A.bits.sign = B.bits.sign; + + return A.flt; +} + +__float128 +__fabstf2 (__float128 a) +{ + union _FP_UNION_Q A; + + A.flt = a; + A.bits.sign = 0; + + return A.flt; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/cpuinfo.c b/contrib/toolchain/gcc/5x/libgcc/config/i386/cpuinfo.c new file mode 100644 index 0000000000..775b597aca --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/cpuinfo.c @@ -0,0 +1,429 @@ +/* Get CPU type and Features for x86 processors. + Copyright (C) 2012-2015 Free Software Foundation, Inc. + Contributed by Sriraman Tallam (tmsriram@google.com) + +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 "cpuid.h" +#include "tsystem.h" +#include "auto-target.h" + +#ifdef HAVE_INIT_PRIORITY +#define CONSTRUCTOR_PRIORITY (101) +#else +#define CONSTRUCTOR_PRIORITY +#endif + +int __cpu_indicator_init (void) + __attribute__ ((constructor CONSTRUCTOR_PRIORITY)); + +/* Processor Vendor and Models. */ + +enum processor_vendor +{ + VENDOR_INTEL = 1, + VENDOR_AMD, + VENDOR_OTHER, + VENDOR_MAX +}; + +/* Any new types or subtypes have to be inserted at the end. */ + +enum processor_types +{ + INTEL_BONNELL = 1, + INTEL_CORE2, + INTEL_COREI7, + AMDFAM10H, + AMDFAM15H, + INTEL_SILVERMONT, + AMD_BTVER1, + AMD_BTVER2, + CPU_TYPE_MAX +}; + +enum processor_subtypes +{ + INTEL_COREI7_NEHALEM = 1, + INTEL_COREI7_WESTMERE, + INTEL_COREI7_SANDYBRIDGE, + AMDFAM10H_BARCELONA, + AMDFAM10H_SHANGHAI, + AMDFAM10H_ISTANBUL, + AMDFAM15H_BDVER1, + AMDFAM15H_BDVER2, + AMDFAM15H_BDVER3, + AMDFAM15H_BDVER4, + INTEL_COREI7_IVYBRIDGE, + INTEL_COREI7_HASWELL, + INTEL_COREI7_BROADWELL, + CPU_SUBTYPE_MAX +}; + +/* ISA Features supported. */ + +enum processor_features +{ + FEATURE_CMOV = 0, + FEATURE_MMX, + FEATURE_POPCNT, + FEATURE_SSE, + FEATURE_SSE2, + FEATURE_SSE3, + FEATURE_SSSE3, + FEATURE_SSE4_1, + FEATURE_SSE4_2, + FEATURE_AVX, + FEATURE_AVX2, + FEATURE_SSE4_A, + FEATURE_FMA4, + FEATURE_XOP, + FEATURE_FMA, + FEATURE_AVX512F, + FEATURE_BMI, + FEATURE_BMI2 +}; + +struct __processor_model +{ + unsigned int __cpu_vendor; + unsigned int __cpu_type; + unsigned int __cpu_subtype; + unsigned int __cpu_features[1]; +} __cpu_model; + + +/* Get the specific type of AMD CPU. */ + +static void +get_amd_cpu (unsigned int family, unsigned int model) +{ + switch (family) + { + /* AMD Family 10h. */ + case 0x10: + __cpu_model.__cpu_type = AMDFAM10H; + switch (model) + { + case 0x2: + /* Barcelona. */ + __cpu_model.__cpu_subtype = AMDFAM10H_BARCELONA; + break; + case 0x4: + /* Shanghai. */ + __cpu_model.__cpu_subtype = AMDFAM10H_SHANGHAI; + break; + case 0x8: + /* Istanbul. */ + __cpu_model.__cpu_subtype = AMDFAM10H_ISTANBUL; + break; + default: + break; + } + break; + /* AMD Family 14h "btver1". */ + case 0x14: + __cpu_model.__cpu_type = AMD_BTVER1; + break; + /* AMD Family 15h "Bulldozer". */ + case 0x15: + __cpu_model.__cpu_type = AMDFAM15H; + /* Bulldozer version 1. */ + if ( model <= 0xf) + __cpu_model.__cpu_subtype = AMDFAM15H_BDVER1; + /* Bulldozer version 2 "Piledriver" */ + if (model >= 0x10 && model <= 0x2f) + __cpu_model.__cpu_subtype = AMDFAM15H_BDVER2; + /* Bulldozer version 3 "Steamroller" */ + if (model >= 0x30 && model <= 0x4f) + __cpu_model.__cpu_subtype = AMDFAM15H_BDVER3; + /* Bulldozer version 4 "Excavator" */ + if (model >= 0x60 && model <= 0x7f) + __cpu_model.__cpu_subtype = AMDFAM15H_BDVER4; + break; + /* AMD Family 16h "btver2" */ + case 0x16: + __cpu_model.__cpu_type = AMD_BTVER2; + break; + default: + break; + } +} + +/* Get the specific type of Intel CPU. */ + +static void +get_intel_cpu (unsigned int family, unsigned int model, unsigned int brand_id) +{ + /* Parse family and model only if brand ID is 0. */ + if (brand_id == 0) + { + switch (family) + { + case 0x5: + /* Pentium. */ + break; + case 0x6: + switch (model) + { + case 0x1c: + case 0x26: + /* Bonnell. */ + __cpu_model.__cpu_type = INTEL_BONNELL; + break; + case 0x37: + case 0x4a: + case 0x4d: + case 0x5a: + case 0x5d: + /* Silvermont. */ + __cpu_model.__cpu_type = INTEL_SILVERMONT; + break; + case 0x1a: + case 0x1e: + case 0x1f: + case 0x2e: + /* Nehalem. */ + __cpu_model.__cpu_type = INTEL_COREI7; + __cpu_model.__cpu_subtype = INTEL_COREI7_NEHALEM; + break; + case 0x25: + case 0x2c: + case 0x2f: + /* Westmere. */ + __cpu_model.__cpu_type = INTEL_COREI7; + __cpu_model.__cpu_subtype = INTEL_COREI7_WESTMERE; + break; + case 0x2a: + case 0x2d: + /* Sandy Bridge. */ + __cpu_model.__cpu_type = INTEL_COREI7; + __cpu_model.__cpu_subtype = INTEL_COREI7_SANDYBRIDGE; + break; + case 0x3a: + case 0x3e: + /* Ivy Bridge. */ + __cpu_model.__cpu_type = INTEL_COREI7; + __cpu_model.__cpu_subtype = INTEL_COREI7_IVYBRIDGE; + break; + case 0x3c: + case 0x3f: + case 0x45: + case 0x46: + /* Haswell. */ + __cpu_model.__cpu_type = INTEL_COREI7; + __cpu_model.__cpu_subtype = INTEL_COREI7_HASWELL; + break; + case 0x3d: + case 0x4f: + case 0x56: + /* Broadwell. */ + __cpu_model.__cpu_type = INTEL_COREI7; + __cpu_model.__cpu_subtype = INTEL_COREI7_BROADWELL; + break; + case 0x17: + case 0x1d: + /* Penryn. */ + case 0x0f: + /* Merom. */ + __cpu_model.__cpu_type = INTEL_CORE2; + break; + default: + break; + } + break; + default: + /* We have no idea. */ + break; + } + } +} + +/* ECX and EDX are output of CPUID at level one. MAX_CPUID_LEVEL is + the max possible level of CPUID insn. */ +static void +get_available_features (unsigned int ecx, unsigned int edx, + int max_cpuid_level) +{ + unsigned int features = 0; + + if (edx & bit_CMOV) + features |= (1 << FEATURE_CMOV); + if (edx & bit_MMX) + features |= (1 << FEATURE_MMX); + if (edx & bit_SSE) + features |= (1 << FEATURE_SSE); + if (edx & bit_SSE2) + features |= (1 << FEATURE_SSE2); + if (ecx & bit_POPCNT) + features |= (1 << FEATURE_POPCNT); + if (ecx & bit_SSE3) + features |= (1 << FEATURE_SSE3); + if (ecx & bit_SSSE3) + features |= (1 << FEATURE_SSSE3); + if (ecx & bit_SSE4_1) + features |= (1 << FEATURE_SSE4_1); + if (ecx & bit_SSE4_2) + features |= (1 << FEATURE_SSE4_2); + if (ecx & bit_AVX) + features |= (1 << FEATURE_AVX); + if (ecx & bit_FMA) + features |= (1 << FEATURE_FMA); + + /* Get Advanced Features at level 7 (eax = 7, ecx = 0). */ + if (max_cpuid_level >= 7) + { + unsigned int eax, ebx, ecx, edx; + __cpuid_count (7, 0, eax, ebx, ecx, edx); + if (ebx & bit_BMI) + features |= (1 << FEATURE_BMI); + if (ebx & bit_AVX2) + features |= (1 << FEATURE_AVX2); + if (ebx & bit_BMI2) + features |= (1 << FEATURE_BMI2); + if (ebx & bit_AVX512F) + features |= (1 << FEATURE_AVX512F); + } + + unsigned int ext_level; + unsigned int eax, ebx; + /* Check cpuid level of extended features. */ + __cpuid (0x80000000, ext_level, ebx, ecx, edx); + + if (ext_level > 0x80000000) + { + __cpuid (0x80000001, eax, ebx, ecx, edx); + + if (ecx & bit_SSE4a) + features |= (1 << FEATURE_SSE4_A); + if (ecx & bit_FMA4) + features |= (1 << FEATURE_FMA4); + if (ecx & bit_XOP) + features |= (1 << FEATURE_XOP); + } + + __cpu_model.__cpu_features[0] = features; +} + +/* A noinline function calling __get_cpuid. Having many calls to + cpuid in one function in 32-bit mode causes GCC to complain: + "can't find a register in class CLOBBERED_REGS". This is + related to PR rtl-optimization 44174. */ + +static int __attribute__ ((noinline)) +__get_cpuid_output (unsigned int __level, + unsigned int *__eax, unsigned int *__ebx, + unsigned int *__ecx, unsigned int *__edx) +{ + return __get_cpuid (__level, __eax, __ebx, __ecx, __edx); +} + + +/* A constructor function that is sets __cpu_model and __cpu_features with + the right values. This needs to run only once. This constructor is + given the highest priority and it should run before constructors without + the priority set. However, it still runs after ifunc initializers and + needs to be called explicitly there. */ + +int __attribute__ ((constructor CONSTRUCTOR_PRIORITY)) +__cpu_indicator_init (void) +{ + unsigned int eax, ebx, ecx, edx; + + int max_level = 5; + unsigned int vendor; + unsigned int model, family, brand_id; + unsigned int extended_model, extended_family; + + /* This function needs to run just once. */ + if (__cpu_model.__cpu_vendor) + return 0; + + /* Assume cpuid insn present. Run in level 0 to get vendor id. */ + if (!__get_cpuid_output (0, &eax, &ebx, &ecx, &edx)) + { + __cpu_model.__cpu_vendor = VENDOR_OTHER; + return -1; + } + + vendor = ebx; + max_level = eax; + + if (max_level < 1) + { + __cpu_model.__cpu_vendor = VENDOR_OTHER; + return -1; + } + + if (!__get_cpuid_output (1, &eax, &ebx, &ecx, &edx)) + { + __cpu_model.__cpu_vendor = VENDOR_OTHER; + return -1; + } + + model = (eax >> 4) & 0x0f; + family = (eax >> 8) & 0x0f; + brand_id = ebx & 0xff; + extended_model = (eax >> 12) & 0xf0; + extended_family = (eax >> 20) & 0xff; + + if (vendor == signature_INTEL_ebx) + { + /* Adjust model and family for Intel CPUS. */ + if (family == 0x0f) + { + family += extended_family; + model += extended_model; + } + else if (family == 0x06) + model += extended_model; + + /* Get CPU type. */ + get_intel_cpu (family, model, brand_id); + /* Find available features. */ + get_available_features (ecx, edx, max_level); + __cpu_model.__cpu_vendor = VENDOR_INTEL; + } + else if (vendor == signature_AMD_ebx) + { + /* Adjust model and family for AMD CPUS. */ + if (family == 0x0f) + { + family += extended_family; + model += extended_model; + } + + /* Get CPU type. */ + get_amd_cpu (family, model); + /* Find available features. */ + get_available_features (ecx, edx, max_level); + __cpu_model.__cpu_vendor = VENDOR_AMD; + } + else + __cpu_model.__cpu_vendor = VENDOR_OTHER; + + gcc_assert (__cpu_model.__cpu_vendor < VENDOR_MAX); + gcc_assert (__cpu_model.__cpu_type < CPU_TYPE_MAX); + gcc_assert (__cpu_model.__cpu_subtype < CPU_SUBTYPE_MAX); + + return 0; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/crtfastmath.c b/contrib/toolchain/gcc/5x/libgcc/config/i386/crtfastmath.c new file mode 100644 index 0000000000..a0916ac8dc --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/crtfastmath.c @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2005-2015 Free Software Foundation, Inc. + * + * 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, or (at your option) any + * later version. + * + * This file is distributed in the hope that 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 _SOFT_FLOAT +#define MXCSR_DAZ (1 << 6) /* Enable denormals are zero mode */ +#define MXCSR_FTZ (1 << 15) /* Enable flush to zero mode */ + +#ifndef __x86_64__ +/* All 64-bit targets have SSE and DAZ; + only check them explicitly for 32-bit ones. */ +#include "cpuid.h" +#endif + +static void __attribute__((constructor)) +#ifndef __x86_64__ +/* The i386 ABI only requires 4-byte stack alignment, so this is necessary + to make sure the fxsave struct gets correct alignment. + See PR27537 and PR28621. */ +__attribute__ ((force_align_arg_pointer)) +#endif +set_fast_math (void) +{ +#ifndef __x86_64__ + unsigned int eax, ebx, ecx, edx; + + if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) + return; + + if (edx & bit_SSE) + { + unsigned int mxcsr; + + if (edx & bit_FXSAVE) + { + /* Check if DAZ is available. */ + struct + { + unsigned short cwd; + unsigned short swd; + unsigned short twd; + unsigned short fop; + unsigned int fip; + unsigned int fcs; + unsigned int foo; + unsigned int fos; + unsigned int mxcsr; + unsigned int mxcsr_mask; + unsigned int st_space[32]; + unsigned int xmm_space[32]; + unsigned int padding[56]; + } __attribute__ ((aligned (16))) fxsave; + + /* This is necessary since some implementations of FXSAVE + do not modify reserved areas within the image. */ + fxsave.mxcsr_mask = 0; + + __builtin_ia32_fxsave (&fxsave); + + mxcsr = fxsave.mxcsr; + + if (fxsave.mxcsr_mask & MXCSR_DAZ) + mxcsr |= MXCSR_DAZ; + } + else + mxcsr = __builtin_ia32_stmxcsr (); + + mxcsr |= MXCSR_FTZ; + __builtin_ia32_ldmxcsr (mxcsr); + } +#else + unsigned int mxcsr = __builtin_ia32_stmxcsr (); + mxcsr |= MXCSR_DAZ | MXCSR_FTZ; + __builtin_ia32_ldmxcsr (mxcsr); +#endif +} +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/crti.S b/contrib/toolchain/gcc/5x/libgcc/config/i386/crti.S new file mode 100644 index 0000000000..88098d1c54 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/crti.S @@ -0,0 +1,40 @@ +/* crti.S for x86. + + Copyright (C) 1993-2015 Free Software Foundation, Inc. + Written By Fred Fish, Nov 1992 + +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, or (at your option) any +later version. + +This file is distributed in the hope that 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 file just supplies labeled starting points for the .init and .fini + sections. It is linked in before the values-Xx.o files and also before + crtbegin.o. */ + + .ident "GNU C crti.s" + + .section .init + .globl _init + .type _init,@function +_init: + + .section .fini + .globl _fini + .type _fini,@function +_fini: diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/crtn.S b/contrib/toolchain/gcc/5x/libgcc/config/i386/crtn.S new file mode 100644 index 0000000000..c06889e79e --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/crtn.S @@ -0,0 +1,35 @@ +/* crtn.S for x86. + + Copyright (C) 1993-2015 Free Software Foundation, Inc. + Written By Fred Fish, Nov 1992 + +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, or (at your option) any +later version. + +This file is distributed in the hope that 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 file just supplies returns for the .init and .fini sections. It is + linked in after all other files. */ + + .ident "GNU C crtn.o" + + .section .init + ret $0x0 + + .section .fini + ret $0x0 diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/crtprec.c b/contrib/toolchain/gcc/5x/libgcc/config/i386/crtprec.c new file mode 100644 index 0000000000..48d5ef301f --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/crtprec.c @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2007-2015 Free Software Foundation, Inc. + * + * 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, or (at your option) any + * later version. + * + * This file is distributed in the hope that 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 _SOFT_FLOAT +#if __PREC == 32 + #define X87CW (0 << 8) /* Single precision (24 bits) */ +#elif __PREC == 64 + #define X87CW (2 << 8) /* Double precision (53 bits) */ +#elif __PREC == 80 + #define X87CW (3 << 8) /* Extended precision (64 bits) */ +#else + #error "Wrong precision requested." +#endif + +#define X87CW_PCMASK (3 << 8) + +static void __attribute__((constructor)) +set_precision (void) +{ + unsigned short int cwd; + + asm volatile ("fstcw\t%0" : "=m" (cwd)); + + cwd &= ~X87CW_PCMASK; + cwd |= X87CW; + + asm volatile ("fldcw\t%0" : : "m" (cwd)); +} +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/cygming-crtbegin.c b/contrib/toolchain/gcc/5x/libgcc/config/i386/cygming-crtbegin.c new file mode 100644 index 0000000000..87928e5be2 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/cygming-crtbegin.c @@ -0,0 +1,199 @@ +/* crtbegin object for windows32 targets. + Copyright (C) 2007-2015 Free Software Foundation, Inc. + + Contributed by Danny Smith + +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 +. */ + +/* Target machine header files require this define. */ +#define IN_LIBGCC2 + +#include "auto-host.h" +#include "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" +#include "unwind-dw2-fde.h" + +#define WIN32_LEAN_AND_MEAN +#include + +#ifndef LIBGCC_SONAME +#define LIBGCC_SONAME "libgcc_s.dll" +#endif + +#ifndef LIBGCJ_SONAME +#define LIBGCJ_SONAME "libgcj_s.dll" +#endif + +#if DWARF2_UNWIND_INFO +/* Make the declarations weak. This is critical for + _Jv_RegisterClasses because it lives in libgcj.a */ +extern void __register_frame_info (__attribute__((unused)) const void *, + __attribute__((unused)) struct object *) + TARGET_ATTRIBUTE_WEAK; +extern void *__deregister_frame_info (__attribute__((unused)) const void *) + TARGET_ATTRIBUTE_WEAK; + +/* Work around for current cygwin32 build problems (Bug gas/16858). + Compile weak default functions only for 64-bit systems, + when absolutely necessary. */ +#ifdef __x86_64__ +TARGET_ATTRIBUTE_WEAK void +__register_frame_info (__attribute__((unused)) const void *p, + __attribute__((unused)) struct object *o) +{ +} + +TARGET_ATTRIBUTE_WEAK void * +__deregister_frame_info (__attribute__((unused)) const void *p) +{ + return (void*) 0; +} +#endif +#endif /* DWARF2_UNWIND_INFO */ + +#if TARGET_USE_JCR_SECTION +extern void _Jv_RegisterClasses (__attribute__((unused)) const void *) + TARGET_ATTRIBUTE_WEAK; + +#ifdef __x86_64__ +TARGET_ATTRIBUTE_WEAK void +_Jv_RegisterClasses (__attribute__((unused)) const void *p) +{ +} +#endif +#endif /* TARGET_USE_JCR_SECTION */ + +#if defined(HAVE_LD_RO_RW_SECTION_MIXING) +# define EH_FRAME_SECTION_CONST const +#else +# define EH_FRAME_SECTION_CONST +#endif + +/* Stick a label at the beginning of the frame unwind info so we can + register/deregister it with the exception handling library code. */ +#if DWARF2_UNWIND_INFO +static EH_FRAME_SECTION_CONST char __EH_FRAME_BEGIN__[] + __attribute__((used, section(__LIBGCC_EH_FRAME_SECTION_NAME__), aligned(4))) + = { }; + +static struct object obj; + +/* Handle of libgcc's DLL reference. */ +HANDLE hmod_libgcc; +static void * (*deregister_frame_fn) (const void *) = NULL; +#endif + +#if TARGET_USE_JCR_SECTION +static void *__JCR_LIST__[] + __attribute__ ((used, section(__LIBGCC_JCR_SECTION_NAME__), aligned(4))) + = { }; +#endif + +#ifdef __CYGWIN__ +/* Declare the __dso_handle variable. It should have a unique value + in every shared-object; in a main program its value is zero. The + object should in any case be protected. This means the instance + in one DSO or the main program is not used in another object. The + dynamic linker takes care of this. */ + +#ifdef CRTSTUFFS_O +extern void *__ImageBase; +void *__dso_handle = &__ImageBase; +#else +void *__dso_handle = 0; +#endif + +#endif /* __CYGWIN__ */ + + +/* Pull in references from libgcc.a(unwind-dw2-fde.o) in the + startfile. These are referenced by a ctor and dtor in crtend.o. */ +extern void __gcc_register_frame (void); +extern void __gcc_deregister_frame (void); + +void +__gcc_register_frame (void) +{ +#if DWARF2_UNWIND_INFO +/* Weak undefined symbols won't be pulled in from dlls; hence + we first test if the dll is already loaded and, if so, + get the symbol's address at run-time. If the dll is not loaded, + fallback to weak linkage to static archive. */ + + void (*register_frame_fn) (const void *, struct object *); + HANDLE h = GetModuleHandle (LIBGCC_SONAME); + + if (h) + { + /* Increasing the load-count of LIBGCC_SONAME DLL. */ + hmod_libgcc = LoadLibrary (LIBGCC_SONAME); + register_frame_fn = (void (*) (const void *, struct object *)) + GetProcAddress (h, "__register_frame_info"); + deregister_frame_fn = (void* (*) (const void *)) + GetProcAddress (h, "__deregister_frame_info"); + } + else + { + register_frame_fn = __register_frame_info; + deregister_frame_fn = __deregister_frame_info; + } + if (register_frame_fn) + register_frame_fn (__EH_FRAME_BEGIN__, &obj); +#endif + +#if TARGET_USE_JCR_SECTION + if (__JCR_LIST__[0]) + { + void (*register_class_fn) (const void *); + HANDLE h = GetModuleHandle (LIBGCJ_SONAME); + if (h) + register_class_fn = (void (*) (const void *)) + GetProcAddress (h, "_Jv_RegisterClasses"); + else + register_class_fn = _Jv_RegisterClasses; + + if (register_class_fn) + register_class_fn (__JCR_LIST__); + } +#endif + +#if DEFAULT_USE_CXA_ATEXIT + /* If we use the __cxa_atexit method to register C++ dtors + at object construction, also use atexit to register eh frame + info cleanup. */ + atexit(__gcc_deregister_frame); +#endif /* DEFAULT_USE_CXA_ATEXIT */ +} + +void +__gcc_deregister_frame (void) +{ +#if DWARF2_UNWIND_INFO + if (deregister_frame_fn) + deregister_frame_fn (__EH_FRAME_BEGIN__); + if (hmod_libgcc) + FreeLibrary (hmod_libgcc); +#endif +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/cygming-crtend.c b/contrib/toolchain/gcc/5x/libgcc/config/i386/cygming-crtend.c new file mode 100644 index 0000000000..717a8fb02c --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/cygming-crtend.c @@ -0,0 +1,83 @@ +/* crtend object for windows32 targets. + Copyright (C) 2007-2015 Free Software Foundation, Inc. + + Contributed by Danny Smith + +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 +. */ + +/* Target machine header files require this define. */ +#define IN_LIBGCC2 + +/* auto-host.h is needed by cygming.h for HAVE_GAS_WEAK and here + for HAVE_LD_RO_RW_SECTION_MIXING. */ +#include "auto-host.h" +#include "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" +#include "unwind-dw2-fde.h" + +#if defined(HAVE_LD_RO_RW_SECTION_MIXING) +# define EH_FRAME_SECTION_CONST const +#else +# define EH_FRAME_SECTION_CONST +#endif + +#if DWARF2_UNWIND_INFO +/* Terminate the frame unwind info section with a 0 as a sentinel; + this would be the 'length' field in a real FDE. */ + +static EH_FRAME_SECTION_CONST int __FRAME_END__[] + __attribute__ ((used, section(__LIBGCC_EH_FRAME_SECTION_NAME__), + aligned(4))) + = { 0 }; +#endif + +#if TARGET_USE_JCR_SECTION +/* Null terminate the .jcr section array. */ +static void *__JCR_END__[1] + __attribute__ ((used, section(__LIBGCC_JCR_SECTION_NAME__), + aligned(sizeof(void *)))) + = { 0 }; +#endif + +extern void __gcc_register_frame (void); +extern void __gcc_deregister_frame (void); + +static void register_frame_ctor (void) __attribute__ ((constructor (0))); + +static void +register_frame_ctor (void) +{ + __gcc_register_frame (); +} + +#if !DEFAULT_USE_CXA_ATEXIT +static void deregister_frame_dtor (void) __attribute__ ((destructor (0))); + +static void +deregister_frame_dtor (void) +{ + __gcc_deregister_frame (); +} +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/cygwin.S b/contrib/toolchain/gcc/5x/libgcc/config/i386/cygwin.S new file mode 100644 index 0000000000..ed763a3300 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/cygwin.S @@ -0,0 +1,187 @@ +/* stuff needed for libgcc on win32. + * + * Copyright (C) 1996-2015 Free Software Foundation, Inc. + * Written By Steve Chamberlain + * + * 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, or (at your option) any + * later version. + * + * This file is distributed in the hope that 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 "auto-host.h" + +#ifdef HAVE_GAS_CFI_SECTIONS_DIRECTIVE + .cfi_sections .debug_frame +# define cfi_startproc() .cfi_startproc +# define cfi_endproc() .cfi_endproc +# define cfi_adjust_cfa_offset(X) .cfi_adjust_cfa_offset X +# define cfi_def_cfa_register(X) .cfi_def_cfa_register X +# define cfi_register(D,S) .cfi_register D, S +# ifdef __x86_64__ +# define cfi_push(X) .cfi_adjust_cfa_offset 8; .cfi_rel_offset X, 0 +# define cfi_pop(X) .cfi_adjust_cfa_offset -8; .cfi_restore X +# else +# define cfi_push(X) .cfi_adjust_cfa_offset 4; .cfi_rel_offset X, 0 +# define cfi_pop(X) .cfi_adjust_cfa_offset -4; .cfi_restore X +# endif +#else +# define cfi_startproc() +# define cfi_endproc() +# define cfi_adjust_cfa_offset(X) +# define cfi_def_cfa_register(X) +# define cfi_register(D,S) +# define cfi_push(X) +# define cfi_pop(X) +#endif /* HAVE_GAS_CFI_SECTIONS_DIRECTIVE */ + +#ifdef L_chkstk +/* Function prologue calls __chkstk to probe the stack when allocating more + than CHECK_STACK_LIMIT bytes in one go. Touching the stack at 4K + increments is necessary to ensure that the guard pages used + by the OS virtual memory manger are allocated in correct sequence. */ + + .global ___chkstk + .global __alloca +#ifdef __x86_64__ +/* __alloca is a normal function call, which uses %rcx as the argument. */ + cfi_startproc() +__alloca: + movq %rcx, %rax + /* FALLTHRU */ + +/* ___chkstk is a *special* function call, which uses %rax as the argument. + We avoid clobbering the 4 integer argument registers, %rcx, %rdx, + %r8 and %r9, which leaves us with %rax, %r10, and %r11 to use. */ + .align 4 +___chkstk: + popq %r11 /* pop return address */ + cfi_adjust_cfa_offset(-8) /* indicate return address in r11 */ + cfi_register(%rip, %r11) + movq %rsp, %r10 + cmpq $0x1000, %rax /* > 4k ?*/ + jb 2f + +1: subq $0x1000, %r10 /* yes, move pointer down 4k*/ + orl $0x0, (%r10) /* probe there */ + subq $0x1000, %rax /* decrement count */ + cmpq $0x1000, %rax + ja 1b /* and do it again */ + +2: subq %rax, %r10 + movq %rsp, %rax /* hold CFA until return */ + cfi_def_cfa_register(%rax) + orl $0x0, (%r10) /* less than 4k, just peek here */ + movq %r10, %rsp /* decrement stack */ + + /* Push the return value back. Doing this instead of just + jumping to %r11 preserves the cached call-return stack + used by most modern processors. */ + pushq %r11 + ret + cfi_endproc() +#else + cfi_startproc() +___chkstk: +__alloca: + pushl %ecx /* save temp */ + cfi_push(%eax) + leal 8(%esp), %ecx /* point past return addr */ + cmpl $0x1000, %eax /* > 4k ?*/ + jb 2f + +1: subl $0x1000, %ecx /* yes, move pointer down 4k*/ + orl $0x0, (%ecx) /* probe there */ + subl $0x1000, %eax /* decrement count */ + cmpl $0x1000, %eax + ja 1b /* and do it again */ + +2: subl %eax, %ecx + orl $0x0, (%ecx) /* less than 4k, just peek here */ + movl %esp, %eax /* save current stack pointer */ + cfi_def_cfa_register(%eax) + movl %ecx, %esp /* decrement stack */ + movl (%eax), %ecx /* recover saved temp */ + + /* Copy the return register. Doing this instead of just jumping to + the address preserves the cached call-return stack used by most + modern processors. */ + pushl 4(%eax) + ret + cfi_endproc() +#endif /* __x86_64__ */ +#endif /* L_chkstk */ + +#ifdef L_chkstk_ms +/* ___chkstk_ms is a *special* function call, which uses %rax as the argument. + We avoid clobbering any registers. Unlike ___chkstk, it just probes the + stack and does no stack allocation. */ + .global ___chkstk_ms +#ifdef __x86_64__ + cfi_startproc() +___chkstk_ms: + pushq %rcx /* save temps */ + cfi_push(%rcx) + pushq %rax + cfi_push(%rax) + cmpq $0x1000, %rax /* > 4k ?*/ + leaq 24(%rsp), %rcx /* point past return addr */ + jb 2f + +1: subq $0x1000, %rcx /* yes, move pointer down 4k */ + orq $0x0, (%rcx) /* probe there */ + subq $0x1000, %rax /* decrement count */ + cmpq $0x1000, %rax + ja 1b /* and do it again */ + +2: subq %rax, %rcx + orq $0x0, (%rcx) /* less than 4k, just peek here */ + + popq %rax + cfi_pop(%rax) + popq %rcx + cfi_pop(%rcx) + ret + cfi_endproc() +#else + cfi_startproc() +___chkstk_ms: + pushl %ecx /* save temp */ + cfi_push(%ecx) + pushl %eax + cfi_push(%eax) + cmpl $0x1000, %eax /* > 4k ?*/ + leal 12(%esp), %ecx /* point past return addr */ + jb 2f + +1: subl $0x1000, %ecx /* yes, move pointer down 4k*/ + orl $0x0, (%ecx) /* probe there */ + subl $0x1000, %eax /* decrement count */ + cmpl $0x1000, %eax + ja 1b /* and do it again */ + +2: subl %eax, %ecx + orl $0x0, (%ecx) /* less than 4k, just peek here */ + + popl %eax + cfi_pop(%eax) + popl %ecx + cfi_pop(%ecx) + ret + cfi_endproc() +#endif /* __x86_64__ */ +#endif /* L_chkstk_ms */ diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/darwin-lib.h b/contrib/toolchain/gcc/5x/libgcc/config/i386/darwin-lib.h new file mode 100644 index 0000000000..d435803384 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/darwin-lib.h @@ -0,0 +1,32 @@ +/* Target definitions for x86 running Darwin, library renames. + Copyright (C) 2011-2015 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 +. */ + +/* The system ___divdc3 routine in libSystem on darwin10 is not + accurate to 1ulp, ours is, so we avoid ever using the system name + for this routine and instead install a non-conflicting name that is + accurate. See darwin_rename_builtins. */ +#ifdef L_divdc3 +#define DECLARE_LIBRARY_RENAMES \ + asm(".text; ___divdc3: jmp ___ieee_divdc3 ; .globl ___divdc3"); +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/dragonfly-unwind.h b/contrib/toolchain/gcc/5x/libgcc/config/i386/dragonfly-unwind.h new file mode 100644 index 0000000000..b06211239c --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/dragonfly-unwind.h @@ -0,0 +1,180 @@ +/* DWARF2 EH unwinding support for DragonFly BSD: AMD x86-64 and x86. + Copyright (C) 2014-2015 Free Software Foundation, Inc. + Contributed by John Marino + +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 +. */ + +/* Do code reading to identify a signal frame, and set the frame + state data appropriately. See unwind-dw2.c for the structs. */ + +#include +#include +#include +#include +#include + + +#define REG_NAME(reg) sf_uc.uc_mcontext.mc_## reg + +#ifdef __x86_64__ +#define MD_FALLBACK_FRAME_STATE_FOR x86_64_dragonfly_fallback_frame_state + + +static void +x86_64_sigtramp_range (unsigned char **start, unsigned char **end) +{ + unsigned long ps_strings; + int mib[2]; + size_t len; + + mib[0] = CTL_KERN; + mib[1] = KERN_PS_STRINGS; + len = sizeof (ps_strings); + sysctl (mib, 2, &ps_strings, &len, NULL, 0); + + *start = (unsigned char *)ps_strings - 32; + *end = (unsigned char *)ps_strings; +} + + +static _Unwind_Reason_Code +x86_64_dragonfly_fallback_frame_state +(struct _Unwind_Context *context, _Unwind_FrameState *fs) +{ + unsigned char *pc = context->ra; + unsigned char *sigtramp_start, *sigtramp_end; + struct sigframe *sf; + long new_cfa; + + x86_64_sigtramp_range(&sigtramp_start, &sigtramp_end); + if (pc >= sigtramp_end || pc < sigtramp_start) + return _URC_END_OF_STACK; + + sf = (struct sigframe *) context->cfa; + new_cfa = sf->REG_NAME(rsp); + fs->regs.cfa_how = CFA_REG_OFFSET; + /* Register 7 is rsp */ + fs->regs.cfa_reg = 7; + fs->regs.cfa_offset = new_cfa - (long) context->cfa; + + /* The SVR4 register numbering macros aren't usable in libgcc. */ + fs->regs.reg[0].how = REG_SAVED_OFFSET; + fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(rax) - new_cfa; + fs->regs.reg[1].how = REG_SAVED_OFFSET; + fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(rdx) - new_cfa; + fs->regs.reg[2].how = REG_SAVED_OFFSET; + fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(rcx) - new_cfa; + fs->regs.reg[3].how = REG_SAVED_OFFSET; + fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(rbx) - new_cfa; + fs->regs.reg[4].how = REG_SAVED_OFFSET; + fs->regs.reg[4].loc.offset = (long)&sf->REG_NAME(rsi) - new_cfa; + fs->regs.reg[5].how = REG_SAVED_OFFSET; + fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(rdi) - new_cfa; + fs->regs.reg[6].how = REG_SAVED_OFFSET; + fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(rbp) - new_cfa; + fs->regs.reg[8].how = REG_SAVED_OFFSET; + fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(r8) - new_cfa; + fs->regs.reg[9].how = REG_SAVED_OFFSET; + fs->regs.reg[9].loc.offset = (long)&sf->REG_NAME(r9) - new_cfa; + fs->regs.reg[10].how = REG_SAVED_OFFSET; + fs->regs.reg[10].loc.offset = (long)&sf->REG_NAME(r10) - new_cfa; + fs->regs.reg[11].how = REG_SAVED_OFFSET; + fs->regs.reg[11].loc.offset = (long)&sf->REG_NAME(r11) - new_cfa; + fs->regs.reg[12].how = REG_SAVED_OFFSET; + fs->regs.reg[12].loc.offset = (long)&sf->REG_NAME(r12) - new_cfa; + fs->regs.reg[13].how = REG_SAVED_OFFSET; + fs->regs.reg[13].loc.offset = (long)&sf->REG_NAME(r13) - new_cfa; + fs->regs.reg[14].how = REG_SAVED_OFFSET; + fs->regs.reg[14].loc.offset = (long)&sf->REG_NAME(r14) - new_cfa; + fs->regs.reg[15].how = REG_SAVED_OFFSET; + fs->regs.reg[15].loc.offset = (long)&sf->REG_NAME(r15) - new_cfa; + fs->regs.reg[16].how = REG_SAVED_OFFSET; + fs->regs.reg[16].loc.offset = (long)&sf->REG_NAME(rip) - new_cfa; + fs->retaddr_column = 16; + fs->signal_frame = 1; + return _URC_NO_REASON; +} + +#else /* Next section is for i386 */ + +#define MD_FALLBACK_FRAME_STATE_FOR x86_dragonfly_fallback_frame_state + + +static void +x86_sigtramp_range (unsigned char **start, unsigned char **end) +{ + unsigned long ps_strings; + int mib[2]; + size_t len; + + mib[0] = CTL_KERN; + mib[1] = KERN_PS_STRINGS; + len = sizeof (ps_strings); + sysctl (mib, 2, &ps_strings, &len, NULL, 0); + + *start = (unsigned char *)ps_strings - 128; + *end = (unsigned char *)ps_strings; +} + + +static _Unwind_Reason_Code +x86_dragonfly_fallback_frame_state +(struct _Unwind_Context *context, _Unwind_FrameState *fs) +{ + unsigned char *pc = context->ra; + unsigned char *sigtramp_start, *sigtramp_end; + struct sigframe *sf; + long new_cfa; + + x86_sigtramp_range(&sigtramp_start, &sigtramp_end); + + if (pc >= sigtramp_end || pc < sigtramp_start) + return _URC_END_OF_STACK; + + sf = (struct sigframe *) context->cfa; + new_cfa = sf->REG_NAME(esp); + fs->regs.cfa_how = CFA_REG_OFFSET; + fs->regs.cfa_reg = 4; + fs->regs.cfa_offset = new_cfa - (long) context->cfa; + + /* The SVR4 register numbering macros aren't usable in libgcc. */ + fs->regs.reg[0].how = REG_SAVED_OFFSET; + fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(eax) - new_cfa; + fs->regs.reg[3].how = REG_SAVED_OFFSET; + fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(ebx) - new_cfa; + fs->regs.reg[1].how = REG_SAVED_OFFSET; + fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(ecx) - new_cfa; + fs->regs.reg[2].how = REG_SAVED_OFFSET; + fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(edx) - new_cfa; + fs->regs.reg[6].how = REG_SAVED_OFFSET; + fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(esi) - new_cfa; + fs->regs.reg[7].how = REG_SAVED_OFFSET; + fs->regs.reg[7].loc.offset = (long)&sf->REG_NAME(edi) - new_cfa; + fs->regs.reg[5].how = REG_SAVED_OFFSET; + fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(ebp) - new_cfa; + fs->regs.reg[8].how = REG_SAVED_OFFSET; + fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(eip) - new_cfa; + fs->retaddr_column = 8; + fs->signal_frame = 1; + return _URC_NO_REASON; +} +#endif /* ifdef __x86_64__ */ diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/elf-lib.h b/contrib/toolchain/gcc/5x/libgcc/config/i386/elf-lib.h new file mode 100644 index 0000000000..4411185155 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/elf-lib.h @@ -0,0 +1,36 @@ +/* Definitions for Intel 386 ELF systems. + Copyright (C) 2015 Free Software Foundation, Inc. + +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 __i386__ +/* Used by crtstuff.c to initialize the base of data-relative relocations. + These are GOT relative on x86, so return the pic register. */ +#define CRT_GET_RFIB_DATA(BASE) \ + __asm__ ("call\t.LPR%=\n" \ + ".LPR%=:\n\t" \ + "pop{l}\t%0\n\t" \ + /* Due to a GAS bug, this cannot use EAX. That encodes \ + smaller than the traditional EBX, which results in the \ + offset being off by one. */ \ + "add{l}\t{$_GLOBAL_OFFSET_TABLE_+[.-.LPR%=],%0" \ + "|%0,_GLOBAL_OFFSET_TABLE_+(.-.LPR%=)}" \ + : "=d"(BASE)) +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/enable-execute-stack-mingw32.c b/contrib/toolchain/gcc/5x/libgcc/config/i386/enable-execute-stack-mingw32.c new file mode 100644 index 0000000000..acc0f0e9cd --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/enable-execute-stack-mingw32.c @@ -0,0 +1,38 @@ +/* Implement __enable_execute_stack for Windows32. + Copyright (C) 2011-2015 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 + +extern void __enable_execute_stack (void *); + +void +__enable_execute_stack (void *addr) +{ + MEMORY_BASIC_INFORMATION b; + + if (!VirtualQuery (addr, &b, sizeof(b))) + abort (); + VirtualProtect (b.BaseAddress, b.RegionSize, PAGE_EXECUTE_READWRITE, + &b.Protect); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/freebsd-unwind.h b/contrib/toolchain/gcc/5x/libgcc/config/i386/freebsd-unwind.h new file mode 100644 index 0000000000..b83ba0db50 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/freebsd-unwind.h @@ -0,0 +1,173 @@ +/* DWARF2 EH unwinding support for FreeBSD: AMD x86-64 and x86. + Copyright (C) 2015 Free Software Foundation, Inc. + Contributed by John Marino + +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 +. */ + +/* Do code reading to identify a signal frame, and set the frame + state data appropriately. See unwind-dw2.c for the structs. */ + +#include +#include +#include +#include + +#define REG_NAME(reg) sf_uc.uc_mcontext.mc_## reg + +#ifdef __x86_64__ +#define MD_FALLBACK_FRAME_STATE_FOR x86_64_freebsd_fallback_frame_state + +static _Unwind_Reason_Code +x86_64_freebsd_fallback_frame_state +(struct _Unwind_Context *context, _Unwind_FrameState *fs) +{ + struct sigframe *sf; + long new_cfa; + + /* Prior to FreeBSD 9, the signal trampoline was located immediately + before the ps_strings. To support non-executable stacks on AMD64, + the sigtramp was moved to a shared page for FreeBSD 9. Unfortunately + this means looking frame patterns again (sys/amd64/amd64/sigtramp.S) + rather than using the robust and convenient KERN_PS_STRINGS trick. + + : lea 0x10(%rsp),%rdi + : pushq $0x0 + : mov $0x1a1,%rax + : syscall + + If we can't find this pattern, we're at the end of the stack. + */ + + if (!( *(unsigned int *)(context->ra) == 0x247c8d48 + && *(unsigned int *)(context->ra + 4) == 0x48006a10 + && *(unsigned int *)(context->ra + 8) == 0x01a1c0c7 + && *(unsigned int *)(context->ra + 12) == 0x050f0000 )) + return _URC_END_OF_STACK; + + sf = (struct sigframe *) context->cfa; + new_cfa = sf->REG_NAME(rsp); + fs->regs.cfa_how = CFA_REG_OFFSET; + /* Register 7 is rsp */ + fs->regs.cfa_reg = 7; + fs->regs.cfa_offset = new_cfa - (long) context->cfa; + + /* The SVR4 register numbering macros aren't usable in libgcc. */ + fs->regs.reg[0].how = REG_SAVED_OFFSET; + fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(rax) - new_cfa; + fs->regs.reg[1].how = REG_SAVED_OFFSET; + fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(rdx) - new_cfa; + fs->regs.reg[2].how = REG_SAVED_OFFSET; + fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(rcx) - new_cfa; + fs->regs.reg[3].how = REG_SAVED_OFFSET; + fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(rbx) - new_cfa; + fs->regs.reg[4].how = REG_SAVED_OFFSET; + fs->regs.reg[4].loc.offset = (long)&sf->REG_NAME(rsi) - new_cfa; + fs->regs.reg[5].how = REG_SAVED_OFFSET; + fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(rdi) - new_cfa; + fs->regs.reg[6].how = REG_SAVED_OFFSET; + fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(rbp) - new_cfa; + fs->regs.reg[8].how = REG_SAVED_OFFSET; + fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(r8) - new_cfa; + fs->regs.reg[9].how = REG_SAVED_OFFSET; + fs->regs.reg[9].loc.offset = (long)&sf->REG_NAME(r9) - new_cfa; + fs->regs.reg[10].how = REG_SAVED_OFFSET; + fs->regs.reg[10].loc.offset = (long)&sf->REG_NAME(r10) - new_cfa; + fs->regs.reg[11].how = REG_SAVED_OFFSET; + fs->regs.reg[11].loc.offset = (long)&sf->REG_NAME(r11) - new_cfa; + fs->regs.reg[12].how = REG_SAVED_OFFSET; + fs->regs.reg[12].loc.offset = (long)&sf->REG_NAME(r12) - new_cfa; + fs->regs.reg[13].how = REG_SAVED_OFFSET; + fs->regs.reg[13].loc.offset = (long)&sf->REG_NAME(r13) - new_cfa; + fs->regs.reg[14].how = REG_SAVED_OFFSET; + fs->regs.reg[14].loc.offset = (long)&sf->REG_NAME(r14) - new_cfa; + fs->regs.reg[15].how = REG_SAVED_OFFSET; + fs->regs.reg[15].loc.offset = (long)&sf->REG_NAME(r15) - new_cfa; + fs->regs.reg[16].how = REG_SAVED_OFFSET; + fs->regs.reg[16].loc.offset = (long)&sf->REG_NAME(rip) - new_cfa; + fs->retaddr_column = 16; + fs->signal_frame = 1; + return _URC_NO_REASON; +} + +#else /* Next section is for i386 */ + +#define MD_FALLBACK_FRAME_STATE_FOR x86_freebsd_fallback_frame_state + +/* + * We can't use KERN_PS_STRINGS anymore if we want to support FreeBSD32 + * compat on AMD64. The sigtramp is in a shared page in that case so the + * x86_sigtramp_range only works on a true i386 system. We have to + * search for the sigtramp frame if we want it working everywhere. + */ + +static _Unwind_Reason_Code +x86_freebsd_fallback_frame_state +(struct _Unwind_Context *context, _Unwind_FrameState *fs) +{ + struct sigframe *sf; + long new_cfa; + +/* + * i386 sigtramp frame we are looking for follows. + * Apparently PSL_VM is variable, so we can't look past context->ra + 4 + * : + * 0: ff 54 24 10 call *0x10(%esp) *SIGF_HANDLER + * 4: 8d 44 24 20 lea 0x20(%esp),%eax SIGF_UC + * 8: 50 push %eax + * 9: f7 40 54 00 00 02 00 testl $0x20000,0x54(%eax) $PSL_VM + * 10: 75 03 jne 15 + * 12: 8e 68 14 mov 0x14(%eax),%gs UC_GS + * 15: b8 a1 01 00 00 mov 0x1a1,%eax $SYS_sigreturn + */ + + if (!( *(unsigned int *)(context->ra - 4) == 0x102454ff + && *(unsigned int *)(context->ra) == 0x2024448d )) + return _URC_END_OF_STACK; + + sf = (struct sigframe *) context->cfa; + new_cfa = sf->REG_NAME(esp); + fs->regs.cfa_how = CFA_REG_OFFSET; + fs->regs.cfa_reg = 4; + fs->regs.cfa_offset = new_cfa - (long) context->cfa; + + /* The SVR4 register numbering macros aren't usable in libgcc. */ + fs->regs.reg[0].how = REG_SAVED_OFFSET; + fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(eax) - new_cfa; + fs->regs.reg[3].how = REG_SAVED_OFFSET; + fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(ebx) - new_cfa; + fs->regs.reg[1].how = REG_SAVED_OFFSET; + fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(ecx) - new_cfa; + fs->regs.reg[2].how = REG_SAVED_OFFSET; + fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(edx) - new_cfa; + fs->regs.reg[6].how = REG_SAVED_OFFSET; + fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(esi) - new_cfa; + fs->regs.reg[7].how = REG_SAVED_OFFSET; + fs->regs.reg[7].loc.offset = (long)&sf->REG_NAME(edi) - new_cfa; + fs->regs.reg[5].how = REG_SAVED_OFFSET; + fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(ebp) - new_cfa; + fs->regs.reg[8].how = REG_SAVED_OFFSET; + fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(eip) - new_cfa; + fs->retaddr_column = 8; + fs->signal_frame = 1; + return _URC_NO_REASON; +} +#endif /* ifdef __x86_64__ */ diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/gthr-win32.c b/contrib/toolchain/gcc/5x/libgcc/config/i386/gthr-win32.c new file mode 100644 index 0000000000..8492d54c4a --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/gthr-win32.c @@ -0,0 +1,267 @@ +/* Implementation of W32-specific threads compatibility routines for + libgcc2. */ + +/* Copyright (C) 1999-2015 Free Software Foundation, Inc. + Contributed by Mumit Khan . + Modified and moved to separate file by Danny Smith + . + +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 +#ifndef __GTHREAD_HIDE_WIN32API +# define __GTHREAD_HIDE_WIN32API 1 +#endif +#undef __GTHREAD_I486_INLINE_LOCK_PRIMITIVES +#define __GTHREAD_I486_INLINE_LOCK_PRIMITIVES +#include "gthr-win32.h" + +/* Windows32 threads specific definitions. The windows32 threading model + does not map well into pthread-inspired gcc's threading model, and so + there are caveats one needs to be aware of. + + 1. The destructor supplied to __gthread_key_create is ignored for + generic x86-win32 ports. This will certainly cause memory leaks + due to unreclaimed eh contexts (sizeof (eh_context) is at least + 24 bytes for x86 currently). + + This memory leak may be significant for long-running applications + that make heavy use of C++ EH. + + However, Mingw runtime (version 0.3 or newer) provides a mechanism + to emulate pthreads key dtors; the runtime provides a special DLL, + linked in if -mthreads option is specified, that runs the dtors in + the reverse order of registration when each thread exits. If + -mthreads option is not given, a stub is linked in instead of the + DLL, which results in memory leak. Other x86-win32 ports can use + the same technique of course to avoid the leak. + + 2. The error codes returned are non-POSIX like, and cast into ints. + This may cause incorrect error return due to truncation values on + hw where sizeof (DWORD) > sizeof (int). + + 3. We are currently using a special mutex instead of the Critical + Sections, since Win9x does not support TryEnterCriticalSection + (while NT does). + + The basic framework should work well enough. In the long term, GCC + needs to use Structured Exception Handling on Windows32. */ + +int +__gthr_win32_once (__gthread_once_t *once, void (*func) (void)) +{ + if (once == NULL || func == NULL) + return EINVAL; + + if (! once->done) + { + if (InterlockedIncrement (&(once->started)) == 0) + { + (*func) (); + once->done = TRUE; + } + else + { + /* Another thread is currently executing the code, so wait for it + to finish; yield the CPU in the meantime. If performance + does become an issue, the solution is to use an Event that + we wait on here (and set above), but that implies a place to + create the event before this routine is called. */ + while (! once->done) + Sleep (0); + } + } + return 0; +} + +/* Windows32 thread local keys don't support destructors; this leads to + leaks, especially in threaded applications making extensive use of + C++ EH. Mingw uses a thread-support DLL to work-around this problem. */ + +int +__gthr_win32_key_create (__gthread_key_t *key, + void (*dtor) (void *) __attribute__((unused))) +{ + int status = 0; + DWORD tls_index = TlsAlloc (); + if (tls_index != 0xFFFFFFFF) + { + *key = tls_index; +#ifdef MINGW32_SUPPORTS_MT_EH + /* Mingw runtime will run the dtors in reverse order for each thread + when the thread exits. */ + status = __mingwthr_key_dtor (*key, dtor); +#endif + } + else + status = (int) GetLastError (); + return status; +} + +int +__gthr_win32_key_delete (__gthread_key_t key) +{ + return (TlsFree (key) != 0) ? 0 : (int) GetLastError (); +} + +void * +__gthr_win32_getspecific (__gthread_key_t key) +{ + DWORD lasterror; + void *ptr; + lasterror = GetLastError(); + ptr = TlsGetValue(key); + SetLastError( lasterror ); + return ptr; +} + +int +__gthr_win32_setspecific (__gthread_key_t key, const void *ptr) +{ + if (TlsSetValue (key, CONST_CAST2(void *, const void *, ptr)) != 0) + return 0; + else + return GetLastError (); +} + +void +__gthr_win32_mutex_init_function (__gthread_mutex_t *mutex) +{ + mutex->counter = -1; + mutex->sema = CreateSemaphoreW (NULL, 0, 65535, NULL); +} + +void +__gthr_win32_mutex_destroy (__gthread_mutex_t *mutex) +{ + CloseHandle ((HANDLE) mutex->sema); +} + +int +__gthr_win32_mutex_lock (__gthread_mutex_t *mutex) +{ + if (InterlockedIncrement (&mutex->counter) == 0 || + WaitForSingleObject (mutex->sema, INFINITE) == WAIT_OBJECT_0) + return 0; + else + { + /* WaitForSingleObject returns WAIT_FAILED, and we can only do + some best-effort cleanup here. */ + InterlockedDecrement (&mutex->counter); + return 1; + } +} + +int +__gthr_win32_mutex_trylock (__gthread_mutex_t *mutex) +{ + if (__GTHR_W32_InterlockedCompareExchange (&mutex->counter, 0, -1) < 0) + return 0; + else + return 1; +} + +int +__gthr_win32_mutex_unlock (__gthread_mutex_t *mutex) +{ + if (InterlockedDecrement (&mutex->counter) >= 0) + return ReleaseSemaphore (mutex->sema, 1, NULL) ? 0 : 1; + else + return 0; +} + +void +__gthr_win32_recursive_mutex_init_function (__gthread_recursive_mutex_t *mutex) +{ + mutex->counter = -1; + mutex->depth = 0; + mutex->owner = 0; + mutex->sema = CreateSemaphoreW (NULL, 0, 65535, NULL); +} + +int +__gthr_win32_recursive_mutex_lock (__gthread_recursive_mutex_t *mutex) +{ + DWORD me = GetCurrentThreadId(); + if (InterlockedIncrement (&mutex->counter) == 0) + { + mutex->depth = 1; + mutex->owner = me; + } + else if (mutex->owner == me) + { + InterlockedDecrement (&mutex->counter); + ++(mutex->depth); + } + else if (WaitForSingleObject (mutex->sema, INFINITE) == WAIT_OBJECT_0) + { + mutex->depth = 1; + mutex->owner = me; + } + else + { + /* WaitForSingleObject returns WAIT_FAILED, and we can only do + some best-effort cleanup here. */ + InterlockedDecrement (&mutex->counter); + return 1; + } + return 0; +} + +int +__gthr_win32_recursive_mutex_trylock (__gthread_recursive_mutex_t *mutex) +{ + DWORD me = GetCurrentThreadId(); + if (__GTHR_W32_InterlockedCompareExchange (&mutex->counter, 0, -1) < 0) + { + mutex->depth = 1; + mutex->owner = me; + } + else if (mutex->owner == me) + ++(mutex->depth); + else + return 1; + + return 0; +} + +int +__gthr_win32_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex) +{ + --(mutex->depth); + if (mutex->depth == 0) + { + mutex->owner = 0; + + if (InterlockedDecrement (&mutex->counter) >= 0) + return ReleaseSemaphore (mutex->sema, 1, NULL) ? 0 : 1; + } + + return 0; +} + +int +__gthr_win32_recursive_mutex_destroy (__gthread_recursive_mutex_t *mutex) +{ + CloseHandle ((HANDLE) mutex->sema); + return 0; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/gthr-win32.h b/contrib/toolchain/gcc/5x/libgcc/config/i386/gthr-win32.h new file mode 100644 index 0000000000..3f3e308027 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/gthr-win32.h @@ -0,0 +1,786 @@ +/* Threads compatibility routines for libgcc2 and libobjc. */ +/* Compile this one with gcc. */ + +/* Copyright (C) 1999-2015 Free Software Foundation, Inc. + Contributed by Mumit Khan . + +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 GCC_GTHR_WIN32_H +#define GCC_GTHR_WIN32_H + +/* Make sure CONST_CAST2 (origin in system.h) is declared. */ +#ifndef CONST_CAST2 +#define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq) +#endif + +/* Windows32 threads specific definitions. The windows32 threading model + does not map well into pthread-inspired gcc's threading model, and so + there are caveats one needs to be aware of. + + 1. The destructor supplied to __gthread_key_create is ignored for + generic x86-win32 ports. This will certainly cause memory leaks + due to unreclaimed eh contexts (sizeof (eh_context) is at least + 24 bytes for x86 currently). + + This memory leak may be significant for long-running applications + that make heavy use of C++ EH. + + However, Mingw runtime (version 0.3 or newer) provides a mechanism + to emulate pthreads key dtors; the runtime provides a special DLL, + linked in if -mthreads option is specified, that runs the dtors in + the reverse order of registration when each thread exits. If + -mthreads option is not given, a stub is linked in instead of the + DLL, which results in memory leak. Other x86-win32 ports can use + the same technique of course to avoid the leak. + + 2. The error codes returned are non-POSIX like, and cast into ints. + This may cause incorrect error return due to truncation values on + hw where sizeof (DWORD) > sizeof (int). + + 3. We are currently using a special mutex instead of the Critical + Sections, since Win9x does not support TryEnterCriticalSection + (while NT does). + + The basic framework should work well enough. In the long term, GCC + needs to use Structured Exception Handling on Windows32. */ + +#define __GTHREADS 1 + +#include +#ifdef __MINGW32__ +#include <_mingw.h> +#endif + +#ifndef __UNUSED_PARAM +#define __UNUSED_PARAM(x) x +#endif + +#ifdef _LIBOBJC + +/* This is necessary to prevent windef.h (included from windows.h) from + defining its own BOOL as a typedef. */ +#ifndef __OBJC__ +#define __OBJC__ +#endif +#include +/* Now undef the windows BOOL. */ +#undef BOOL + +/* Key structure for maintaining thread specific storage */ +static DWORD __gthread_objc_data_tls = (DWORD) -1; + +/* Backend initialization functions */ + +/* Initialize the threads subsystem. */ +int +__gthread_objc_init_thread_system (void) +{ + /* Initialize the thread storage key. */ + if ((__gthread_objc_data_tls = TlsAlloc ()) != (DWORD) -1) + return 0; + else + return -1; +} + +/* Close the threads subsystem. */ +int +__gthread_objc_close_thread_system (void) +{ + if (__gthread_objc_data_tls != (DWORD) -1) + TlsFree (__gthread_objc_data_tls); + return 0; +} + +/* Backend thread functions */ + +/* Create a new thread of execution. */ +objc_thread_t +__gthread_objc_thread_detach (void (*func)(void *arg), void *arg) +{ + DWORD thread_id = 0; + HANDLE win32_handle; + + if (!(win32_handle = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) func, + arg, 0, &thread_id))) + thread_id = 0; + + return (objc_thread_t) (INT_PTR) thread_id; +} + +/* Set the current thread's priority. */ +int +__gthread_objc_thread_set_priority (int priority) +{ + int sys_priority = 0; + + switch (priority) + { + case OBJC_THREAD_INTERACTIVE_PRIORITY: + sys_priority = THREAD_PRIORITY_NORMAL; + break; + default: + case OBJC_THREAD_BACKGROUND_PRIORITY: + sys_priority = THREAD_PRIORITY_BELOW_NORMAL; + break; + case OBJC_THREAD_LOW_PRIORITY: + sys_priority = THREAD_PRIORITY_LOWEST; + break; + } + + /* Change priority */ + if (SetThreadPriority (GetCurrentThread (), sys_priority)) + return 0; + else + return -1; +} + +/* Return the current thread's priority. */ +int +__gthread_objc_thread_get_priority (void) +{ + int sys_priority; + + sys_priority = GetThreadPriority (GetCurrentThread ()); + + switch (sys_priority) + { + case THREAD_PRIORITY_HIGHEST: + case THREAD_PRIORITY_TIME_CRITICAL: + case THREAD_PRIORITY_ABOVE_NORMAL: + case THREAD_PRIORITY_NORMAL: + return OBJC_THREAD_INTERACTIVE_PRIORITY; + + default: + case THREAD_PRIORITY_BELOW_NORMAL: + return OBJC_THREAD_BACKGROUND_PRIORITY; + + case THREAD_PRIORITY_IDLE: + case THREAD_PRIORITY_LOWEST: + return OBJC_THREAD_LOW_PRIORITY; + } + + /* Couldn't get priority. */ + return -1; +} + +/* Yield our process time to another thread. */ +void +__gthread_objc_thread_yield (void) +{ + Sleep (0); +} + +/* Terminate the current thread. */ +int +__gthread_objc_thread_exit (void) +{ + /* exit the thread */ + ExitThread (__objc_thread_exit_status); + + /* Failed if we reached here */ + return -1; +} + +/* Returns an integer value which uniquely describes a thread. */ +objc_thread_t +__gthread_objc_thread_id (void) +{ + return (objc_thread_t) (INT_PTR) GetCurrentThreadId (); +} + +/* Sets the thread's local storage pointer. */ +int +__gthread_objc_thread_set_data (void *value) +{ + if (TlsSetValue (__gthread_objc_data_tls, value)) + return 0; + else + return -1; +} + +/* Returns the thread's local storage pointer. */ +void * +__gthread_objc_thread_get_data (void) +{ + DWORD lasterror; + void *ptr; + + lasterror = GetLastError (); + + ptr = TlsGetValue (__gthread_objc_data_tls); /* Return thread data. */ + + SetLastError (lasterror); + + return ptr; +} + +/* Backend mutex functions */ + +/* Allocate a mutex. */ +int +__gthread_objc_mutex_allocate (objc_mutex_t mutex) +{ + if ((mutex->backend = (void *) CreateMutex (NULL, 0, NULL)) == NULL) + return -1; + else + return 0; +} + +/* Deallocate a mutex. */ +int +__gthread_objc_mutex_deallocate (objc_mutex_t mutex) +{ + CloseHandle ((HANDLE) (mutex->backend)); + return 0; +} + +/* Grab a lock on a mutex. */ +int +__gthread_objc_mutex_lock (objc_mutex_t mutex) +{ + int status; + + status = WaitForSingleObject ((HANDLE) (mutex->backend), INFINITE); + if (status != WAIT_OBJECT_0 && status != WAIT_ABANDONED) + return -1; + else + return 0; +} + +/* Try to grab a lock on a mutex. */ +int +__gthread_objc_mutex_trylock (objc_mutex_t mutex) +{ + int status; + + status = WaitForSingleObject ((HANDLE) (mutex->backend), 0); + if (status != WAIT_OBJECT_0 && status != WAIT_ABANDONED) + return -1; + else + return 0; +} + +/* Unlock the mutex */ +int +__gthread_objc_mutex_unlock (objc_mutex_t mutex) +{ + if (ReleaseMutex ((HANDLE) (mutex->backend)) == 0) + return -1; + else + return 0; +} + +/* Backend condition mutex functions */ + +/* Allocate a condition. */ +int +__gthread_objc_condition_allocate (objc_condition_t __UNUSED_PARAM(condition)) +{ + /* Unimplemented. */ + return -1; +} + +/* Deallocate a condition. */ +int +__gthread_objc_condition_deallocate (objc_condition_t __UNUSED_PARAM(condition)) +{ + /* Unimplemented. */ + return -1; +} + +/* Wait on the condition */ +int +__gthread_objc_condition_wait (objc_condition_t __UNUSED_PARAM(condition), + objc_mutex_t __UNUSED_PARAM(mutex)) +{ + /* Unimplemented. */ + return -1; +} + +/* Wake up all threads waiting on this condition. */ +int +__gthread_objc_condition_broadcast (objc_condition_t __UNUSED_PARAM(condition)) +{ + /* Unimplemented. */ + return -1; +} + +/* Wake up one thread waiting on this condition. */ +int +__gthread_objc_condition_signal (objc_condition_t __UNUSED_PARAM(condition)) +{ + /* Unimplemented. */ + return -1; +} + +#else /* _LIBOBJC */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef unsigned long __gthread_key_t; + +typedef struct { + int done; + long started; +} __gthread_once_t; + +typedef struct { + long counter; + void *sema; +} __gthread_mutex_t; + +typedef struct { + long counter; + long depth; + unsigned long owner; + void *sema; +} __gthread_recursive_mutex_t; + +#define __GTHREAD_ONCE_INIT {0, -1} +#define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function +#define __GTHREAD_MUTEX_INIT_DEFAULT {-1, 0} +#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION \ + __gthread_recursive_mutex_init_function +#define __GTHREAD_RECURSIVE_MUTEX_INIT_DEFAULT {-1, 0, 0, 0} + +#if defined (_WIN32) && !defined(__CYGWIN__) +#define MINGW32_SUPPORTS_MT_EH 1 +/* Mingw runtime >= v0.3 provides a magic variable that is set to nonzero + if -mthreads option was specified, or 0 otherwise. This is to get around + the lack of weak symbols in PE-COFF. */ +extern int _CRT_MT; +extern int __mingwthr_key_dtor (unsigned long, void (*) (void *)); +#endif /* _WIN32 && !__CYGWIN__ */ + +/* The Windows95 kernel does not export InterlockedCompareExchange. + This provides a substitute. When building apps that reference + gthread_mutex_try_lock, the __GTHREAD_I486_INLINE_LOCK_PRIMITIVES + macro must be defined if Windows95 is a target. Currently + gthread_mutex_try_lock is not referenced by libgcc or libstdc++. */ +#ifdef __GTHREAD_I486_INLINE_LOCK_PRIMITIVES +static inline long +__gthr_i486_lock_cmp_xchg(long *__dest, long __xchg, long __comperand) +{ + long result; + __asm__ __volatile__ ("\n\ + lock\n\ + cmpxchg{l} {%4, %1|%1, %4}\n" + : "=a" (result), "=m" (*__dest) + : "0" (__comperand), "m" (*__dest), "r" (__xchg) + : "cc"); + return result; +} +#define __GTHR_W32_InterlockedCompareExchange __gthr_i486_lock_cmp_xchg +#else /* __GTHREAD_I486_INLINE_LOCK_PRIMITIVES */ +#define __GTHR_W32_InterlockedCompareExchange InterlockedCompareExchange +#endif /* __GTHREAD_I486_INLINE_LOCK_PRIMITIVES */ + +static inline int +__gthread_active_p (void) +{ +#ifdef MINGW32_SUPPORTS_MT_EH + return _CRT_MT; +#else + return 1; +#endif +} + +#if __GTHREAD_HIDE_WIN32API + +/* The implementations are in config/i386/gthr-win32.c in libgcc.a. + Only stubs are exposed to avoid polluting the C++ namespace with + windows api definitions. */ + +extern int __gthr_win32_once (__gthread_once_t *, void (*) (void)); +extern int __gthr_win32_key_create (__gthread_key_t *, void (*) (void*)); +extern int __gthr_win32_key_delete (__gthread_key_t); +extern void * __gthr_win32_getspecific (__gthread_key_t); +extern int __gthr_win32_setspecific (__gthread_key_t, const void *); +extern void __gthr_win32_mutex_init_function (__gthread_mutex_t *); +extern int __gthr_win32_mutex_lock (__gthread_mutex_t *); +extern int __gthr_win32_mutex_trylock (__gthread_mutex_t *); +extern int __gthr_win32_mutex_unlock (__gthread_mutex_t *); +extern void + __gthr_win32_recursive_mutex_init_function (__gthread_recursive_mutex_t *); +extern int __gthr_win32_recursive_mutex_lock (__gthread_recursive_mutex_t *); +extern int + __gthr_win32_recursive_mutex_trylock (__gthread_recursive_mutex_t *); +extern int __gthr_win32_recursive_mutex_unlock (__gthread_recursive_mutex_t *); +extern void __gthr_win32_mutex_destroy (__gthread_mutex_t *); +extern int + __gthr_win32_recursive_mutex_destroy (__gthread_recursive_mutex_t *); + +static inline int +__gthread_once (__gthread_once_t *__once, void (*__func) (void)) +{ + if (__gthread_active_p ()) + return __gthr_win32_once (__once, __func); + else + return -1; +} + +static inline int +__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *)) +{ + return __gthr_win32_key_create (__key, __dtor); +} + +static inline int +__gthread_key_delete (__gthread_key_t __key) +{ + return __gthr_win32_key_delete (__key); +} + +static inline void * +__gthread_getspecific (__gthread_key_t __key) +{ + return __gthr_win32_getspecific (__key); +} + +static inline int +__gthread_setspecific (__gthread_key_t __key, const void *__ptr) +{ + return __gthr_win32_setspecific (__key, __ptr); +} + +static inline void +__gthread_mutex_init_function (__gthread_mutex_t *__mutex) +{ + __gthr_win32_mutex_init_function (__mutex); +} + +static inline void +__gthread_mutex_destroy (__gthread_mutex_t *__mutex) +{ + __gthr_win32_mutex_destroy (__mutex); +} + +static inline int +__gthread_mutex_lock (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + return __gthr_win32_mutex_lock (__mutex); + else + return 0; +} + +static inline int +__gthread_mutex_trylock (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + return __gthr_win32_mutex_trylock (__mutex); + else + return 0; +} + +static inline int +__gthread_mutex_unlock (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + return __gthr_win32_mutex_unlock (__mutex); + else + return 0; +} + +static inline void +__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex) +{ + __gthr_win32_recursive_mutex_init_function (__mutex); +} + +static inline int +__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + return __gthr_win32_recursive_mutex_lock (__mutex); + else + return 0; +} + +static inline int +__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + return __gthr_win32_recursive_mutex_trylock (__mutex); + else + return 0; +} + +static inline int +__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + return __gthr_win32_recursive_mutex_unlock (__mutex); + else + return 0; +} + +static inline int +__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex) +{ + return __gthr_win32_recursive_mutex_destroy (__mutex); +} + +#else /* ! __GTHREAD_HIDE_WIN32API */ + +#include +#include + +static inline int +__gthread_once (__gthread_once_t *__once, void (*__func) (void)) +{ + if (! __gthread_active_p ()) + return -1; + else if (__once == NULL || __func == NULL) + return EINVAL; + + if (! __once->done) + { + if (InterlockedIncrement (&(__once->started)) == 0) + { + (*__func) (); + __once->done = TRUE; + } + else + { + /* Another thread is currently executing the code, so wait for it + to finish; yield the CPU in the meantime. If performance + does become an issue, the solution is to use an Event that + we wait on here (and set above), but that implies a place to + create the event before this routine is called. */ + while (! __once->done) + Sleep (0); + } + } + + return 0; +} + +/* Windows32 thread local keys don't support destructors; this leads to + leaks, especially in threaded applications making extensive use of + C++ EH. Mingw uses a thread-support DLL to work-around this problem. */ +static inline int +__gthread_key_create (__gthread_key_t *__key, + void (*__dtor) (void *) __attribute__((__unused__))) +{ + int __status = 0; + DWORD __tls_index = TlsAlloc (); + if (__tls_index != 0xFFFFFFFF) + { + *__key = __tls_index; +#ifdef MINGW32_SUPPORTS_MT_EH + /* Mingw runtime will run the dtors in reverse order for each thread + when the thread exits. */ + __status = __mingwthr_key_dtor (*__key, __dtor); +#endif + } + else + __status = (int) GetLastError (); + return __status; +} + +static inline int +__gthread_key_delete (__gthread_key_t __key) +{ + return (TlsFree (__key) != 0) ? 0 : (int) GetLastError (); +} + +static inline void * +__gthread_getspecific (__gthread_key_t __key) +{ + DWORD __lasterror; + void *__ptr; + + __lasterror = GetLastError (); + + __ptr = TlsGetValue (__key); + + SetLastError (__lasterror); + + return __ptr; +} + +static inline int +__gthread_setspecific (__gthread_key_t __key, const void *__ptr) +{ + if (TlsSetValue (__key, CONST_CAST2(void *, const void *, __ptr)) != 0) + return 0; + else + return GetLastError (); +} + +static inline void +__gthread_mutex_init_function (__gthread_mutex_t *__mutex) +{ + __mutex->counter = -1; + __mutex->sema = CreateSemaphoreW (NULL, 0, 65535, NULL); +} + +static inline void +__gthread_mutex_destroy (__gthread_mutex_t *__mutex) +{ + CloseHandle ((HANDLE) __mutex->sema); +} + +static inline int +__gthread_mutex_lock (__gthread_mutex_t *__mutex) +{ + int __status = 0; + + if (__gthread_active_p ()) + { + if (InterlockedIncrement (&__mutex->counter) == 0 || + WaitForSingleObject (__mutex->sema, INFINITE) == WAIT_OBJECT_0) + __status = 0; + else + { + /* WaitForSingleObject returns WAIT_FAILED, and we can only do + some best-effort cleanup here. */ + InterlockedDecrement (&__mutex->counter); + __status = 1; + } + } + return __status; +} + +static inline int +__gthread_mutex_trylock (__gthread_mutex_t *__mutex) +{ + int __status = 0; + + if (__gthread_active_p ()) + { + if (__GTHR_W32_InterlockedCompareExchange (&__mutex->counter, 0, -1) < 0) + __status = 0; + else + __status = 1; + } + return __status; +} + +static inline int +__gthread_mutex_unlock (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + { + if (InterlockedDecrement (&__mutex->counter) >= 0) + return ReleaseSemaphore (__mutex->sema, 1, NULL) ? 0 : 1; + } + return 0; +} + +static inline void +__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex) +{ + __mutex->counter = -1; + __mutex->depth = 0; + __mutex->owner = 0; + __mutex->sema = CreateSemaphoreW (NULL, 0, 65535, NULL); +} + +static inline int +__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + { + DWORD __me = GetCurrentThreadId(); + if (InterlockedIncrement (&__mutex->counter) == 0) + { + __mutex->depth = 1; + __mutex->owner = __me; + } + else if (__mutex->owner == __me) + { + InterlockedDecrement (&__mutex->counter); + ++(__mutex->depth); + } + else if (WaitForSingleObject (__mutex->sema, INFINITE) == WAIT_OBJECT_0) + { + __mutex->depth = 1; + __mutex->owner = __me; + } + else + { + /* WaitForSingleObject returns WAIT_FAILED, and we can only do + some best-effort cleanup here. */ + InterlockedDecrement (&__mutex->counter); + return 1; + } + } + return 0; +} + +static inline int +__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + { + DWORD __me = GetCurrentThreadId(); + if (__GTHR_W32_InterlockedCompareExchange (&__mutex->counter, 0, -1) < 0) + { + __mutex->depth = 1; + __mutex->owner = __me; + } + else if (__mutex->owner == __me) + ++(__mutex->depth); + else + return 1; + } + return 0; +} + +static inline int +__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + { + --(__mutex->depth); + if (__mutex->depth == 0) + { + __mutex->owner = 0; + + if (InterlockedDecrement (&__mutex->counter) >= 0) + return ReleaseSemaphore (__mutex->sema, 1, NULL) ? 0 : 1; + } + } + return 0; +} + +static inline int +__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex) +{ + CloseHandle ((HANDLE) __mutex->sema); + return 0; +} + +#endif /* __GTHREAD_HIDE_WIN32API */ + +#ifdef __cplusplus +} +#endif + +#endif /* _LIBOBJC */ + +#endif /* ! GCC_GTHR_WIN32_H */ diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/linux-unwind.h b/contrib/toolchain/gcc/5x/libgcc/config/i386/linux-unwind.h new file mode 100644 index 0000000000..e54bf73b1f --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/linux-unwind.h @@ -0,0 +1,198 @@ +/* DWARF2 EH unwinding support for AMD x86-64 and x86. + Copyright (C) 2004-2015 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 +. */ + +/* Do code reading to identify a signal frame, and set the frame + state data appropriately. See unwind-dw2.c for the structs. + Don't use this at all if inhibit_libc is used. */ + +#ifndef inhibit_libc + +/* There's no sys/ucontext.h for glibc 2.0, so no + signal-turned-exceptions for them. There's also no configure-run for + the target, so we can't check on (e.g.) HAVE_SYS_UCONTEXT_H. Using the + target libc version macro should be enough. */ +#if defined __GLIBC__ && !(__GLIBC__ == 2 && __GLIBC_MINOR__ == 0) + +#include +#include + +#ifdef __x86_64__ + +#define MD_FALLBACK_FRAME_STATE_FOR x86_64_fallback_frame_state + +static _Unwind_Reason_Code +x86_64_fallback_frame_state (struct _Unwind_Context *context, + _Unwind_FrameState *fs) +{ + unsigned char *pc = context->ra; + struct sigcontext *sc; + long new_cfa; + + /* movq $__NR_rt_sigreturn, %rax ; syscall. */ +#ifdef __LP64__ +#define RT_SIGRETURN_SYSCALL 0x050f0000000fc0c7ULL +#else +#define RT_SIGRETURN_SYSCALL 0x050f40000201c0c7ULL +#endif + if (*(unsigned char *)(pc+0) == 0x48 + && *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL) + { + struct ucontext *uc_ = context->cfa; + /* The void * cast is necessary to avoid an aliasing warning. + The aliasing warning is correct, but should not be a problem + because it does not alias anything. */ + sc = (struct sigcontext *) (void *) &uc_->uc_mcontext; + } + else + return _URC_END_OF_STACK; + + new_cfa = sc->rsp; + fs->regs.cfa_how = CFA_REG_OFFSET; + /* Register 7 is rsp */ + fs->regs.cfa_reg = 7; + fs->regs.cfa_offset = new_cfa - (long) context->cfa; + + /* The SVR4 register numbering macros aren't usable in libgcc. */ + fs->regs.reg[0].how = REG_SAVED_OFFSET; + fs->regs.reg[0].loc.offset = (long)&sc->rax - new_cfa; + fs->regs.reg[1].how = REG_SAVED_OFFSET; + fs->regs.reg[1].loc.offset = (long)&sc->rdx - new_cfa; + fs->regs.reg[2].how = REG_SAVED_OFFSET; + fs->regs.reg[2].loc.offset = (long)&sc->rcx - new_cfa; + fs->regs.reg[3].how = REG_SAVED_OFFSET; + fs->regs.reg[3].loc.offset = (long)&sc->rbx - new_cfa; + fs->regs.reg[4].how = REG_SAVED_OFFSET; + fs->regs.reg[4].loc.offset = (long)&sc->rsi - new_cfa; + fs->regs.reg[5].how = REG_SAVED_OFFSET; + fs->regs.reg[5].loc.offset = (long)&sc->rdi - new_cfa; + fs->regs.reg[6].how = REG_SAVED_OFFSET; + fs->regs.reg[6].loc.offset = (long)&sc->rbp - new_cfa; + fs->regs.reg[8].how = REG_SAVED_OFFSET; + fs->regs.reg[8].loc.offset = (long)&sc->r8 - new_cfa; + fs->regs.reg[9].how = REG_SAVED_OFFSET; + fs->regs.reg[9].loc.offset = (long)&sc->r9 - new_cfa; + fs->regs.reg[10].how = REG_SAVED_OFFSET; + fs->regs.reg[10].loc.offset = (long)&sc->r10 - new_cfa; + fs->regs.reg[11].how = REG_SAVED_OFFSET; + fs->regs.reg[11].loc.offset = (long)&sc->r11 - new_cfa; + fs->regs.reg[12].how = REG_SAVED_OFFSET; + fs->regs.reg[12].loc.offset = (long)&sc->r12 - new_cfa; + fs->regs.reg[13].how = REG_SAVED_OFFSET; + fs->regs.reg[13].loc.offset = (long)&sc->r13 - new_cfa; + fs->regs.reg[14].how = REG_SAVED_OFFSET; + fs->regs.reg[14].loc.offset = (long)&sc->r14 - new_cfa; + fs->regs.reg[15].how = REG_SAVED_OFFSET; + fs->regs.reg[15].loc.offset = (long)&sc->r15 - new_cfa; + fs->regs.reg[16].how = REG_SAVED_OFFSET; + fs->regs.reg[16].loc.offset = (long)&sc->rip - new_cfa; + fs->retaddr_column = 16; + fs->signal_frame = 1; + return _URC_NO_REASON; +} + +#else /* ifdef __x86_64__ */ + +#define MD_FALLBACK_FRAME_STATE_FOR x86_fallback_frame_state + +static _Unwind_Reason_Code +x86_fallback_frame_state (struct _Unwind_Context *context, + _Unwind_FrameState *fs) +{ + unsigned char *pc = context->ra; + struct sigcontext *sc; + long new_cfa; + + /* popl %eax ; movl $__NR_sigreturn,%eax ; int $0x80 */ + if (*(unsigned short *)(pc+0) == 0xb858 + && *(unsigned int *)(pc+2) == 119 + && *(unsigned short *)(pc+6) == 0x80cd) + sc = context->cfa + 4; + /* movl $__NR_rt_sigreturn,%eax ; int $0x80 */ + else if (*(unsigned char *)(pc+0) == 0xb8 + && *(unsigned int *)(pc+1) == 173 + && *(unsigned short *)(pc+5) == 0x80cd) + { + struct rt_sigframe { + int sig; + siginfo_t *pinfo; + void *puc; + siginfo_t info; + struct ucontext uc; + } *rt_ = context->cfa; + /* The void * cast is necessary to avoid an aliasing warning. + The aliasing warning is correct, but should not be a problem + because it does not alias anything. */ + sc = (struct sigcontext *) (void *) &rt_->uc.uc_mcontext; + } + else + return _URC_END_OF_STACK; + + new_cfa = sc->esp; + fs->regs.cfa_how = CFA_REG_OFFSET; + fs->regs.cfa_reg = 4; + fs->regs.cfa_offset = new_cfa - (long) context->cfa; + + /* The SVR4 register numbering macros aren't usable in libgcc. */ + fs->regs.reg[0].how = REG_SAVED_OFFSET; + fs->regs.reg[0].loc.offset = (long)&sc->eax - new_cfa; + fs->regs.reg[3].how = REG_SAVED_OFFSET; + fs->regs.reg[3].loc.offset = (long)&sc->ebx - new_cfa; + fs->regs.reg[1].how = REG_SAVED_OFFSET; + fs->regs.reg[1].loc.offset = (long)&sc->ecx - new_cfa; + fs->regs.reg[2].how = REG_SAVED_OFFSET; + fs->regs.reg[2].loc.offset = (long)&sc->edx - new_cfa; + fs->regs.reg[6].how = REG_SAVED_OFFSET; + fs->regs.reg[6].loc.offset = (long)&sc->esi - new_cfa; + fs->regs.reg[7].how = REG_SAVED_OFFSET; + fs->regs.reg[7].loc.offset = (long)&sc->edi - new_cfa; + fs->regs.reg[5].how = REG_SAVED_OFFSET; + fs->regs.reg[5].loc.offset = (long)&sc->ebp - new_cfa; + fs->regs.reg[8].how = REG_SAVED_OFFSET; + fs->regs.reg[8].loc.offset = (long)&sc->eip - new_cfa; + fs->retaddr_column = 8; + fs->signal_frame = 1; + return _URC_NO_REASON; +} + +#define MD_FROB_UPDATE_CONTEXT x86_frob_update_context + +/* Fix up for kernels that have vDSO, but don't have S flag in it. */ + +static void +x86_frob_update_context (struct _Unwind_Context *context, + _Unwind_FrameState *fs ATTRIBUTE_UNUSED) +{ + unsigned char *pc = context->ra; + + /* movl $__NR_rt_sigreturn,%eax ; {int $0x80 | syscall} */ + if (*(unsigned char *)(pc+0) == 0xb8 + && *(unsigned int *)(pc+1) == 173 + && (*(unsigned short *)(pc+5) == 0x80cd + || *(unsigned short *)(pc+5) == 0x050f)) + _Unwind_SetSignalFrame (context, 1); +} + +#endif /* ifdef __x86_64__ */ +#endif /* not glibc 2.0 */ +#endif /* ifdef inhibit_libc */ diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/morestack.S b/contrib/toolchain/gcc/5x/libgcc/config/i386/morestack.S new file mode 100644 index 0000000000..1f607e0112 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/morestack.S @@ -0,0 +1,863 @@ +# x86/x86_64 support for -fsplit-stack. +# Copyright (C) 2009-2015 Free Software Foundation, Inc. +# Contributed by Ian Lance Taylor . + +# 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 +# . + + +# Support for allocating more stack space when using -fsplit-stack. +# When a function discovers that it needs more stack space, it will +# call __morestack with the size of the stack frame and the size of +# the parameters to copy from the old stack frame to the new one. +# The __morestack function preserves the parameter registers and +# calls __generic_morestack to actually allocate the stack space. + +# When this is called stack space is very low, but we ensure that +# there is enough space to push the parameter registers and to call +# __generic_morestack. + +# When calling __generic_morestack, FRAME_SIZE points to the size of +# the desired frame when the function is called, and the function +# sets it to the size of the allocated stack. OLD_STACK points to +# the parameters on the old stack and PARAM_SIZE is the number of +# bytes of parameters to copy to the new stack. These are the +# parameters of the function that called __morestack. The +# __generic_morestack function returns the new stack pointer, +# pointing to the address of the first copied parameter. The return +# value minus the returned *FRAME_SIZE will be the first address on +# the stack which we should not use. + +# void *__generic_morestack (size_t *frame_size, void *old_stack, +# size_t param_size); + +# The __morestack routine has to arrange for the caller to return to a +# stub on the new stack. The stub is responsible for restoring the +# old stack pointer and returning to the caller's caller. This calls +# __generic_releasestack to retrieve the old stack pointer and release +# the newly allocated stack. + +# void *__generic_releasestack (size_t *available); + +# We do a little dance so that the processor's call/return return +# address prediction works out. The compiler arranges for the caller +# to look like this: +# call __generic_morestack +# ret +# L: +# // carry on with function +# After we allocate more stack, we call L, which is in our caller. +# When that returns (to the predicted instruction), we release the +# stack segment and reset the stack pointer. We then return to the +# predicted instruction, namely the ret instruction immediately after +# the call to __generic_morestack. That then returns to the caller of +# the original caller. + + +# The amount of extra space we ask for. In general this has to be +# enough for the dynamic loader to find a symbol and for a signal +# handler to run. + +#ifndef __x86_64__ +#define BACKOFF (1024) +#else +#define BACKOFF (1536) +#endif + + +# The amount of space we ask for when calling non-split-stack code. +#define NON_SPLIT_STACK 0x100000 + +# This entry point is for split-stack code which calls non-split-stack +# code. When the linker sees this case, it converts the call to +# __morestack to call __morestack_non_split instead. We just bump the +# requested stack space by 16K. + + .global __morestack_non_split + .hidden __morestack_non_split + +#ifdef __ELF__ + .type __morestack_non_split,@function +#endif + +__morestack_non_split: + .cfi_startproc + +#ifndef __x86_64__ + + # See below for an extended explanation of this. + .cfi_def_cfa %esp,16 + + pushl %eax # Save %eax in case it is a parameter. + + .cfi_adjust_cfa_offset 4 # Account for pushed register. + + movl %esp,%eax # Current stack, + subl 8(%esp),%eax # less required stack frame size, + subl $NON_SPLIT_STACK,%eax # less space for non-split code. + cmpl %gs:0x30,%eax # See if we have enough space. + jb 2f # Get more space if we need it. + + # Here the stack is + # %esp + 20: stack pointer after two returns + # %esp + 16: return address of morestack caller's caller + # %esp + 12: size of parameters + # %esp + 8: new stack frame size + # %esp + 4: return address of this function + # %esp: saved %eax + # + # Since we aren't doing a full split stack, we don't need to + # do anything when our caller returns. So we return to our + # caller rather than calling it, and let it return as usual. + # To make that work we adjust the return address. + + # This breaks call/return address prediction for the call to + # this function. I can't figure out a way to make it work + # short of copying the parameters down the stack, which will + # probably take more clock cycles than we will lose breaking + # call/return address prediction. We will only break + # prediction for this call, not for our caller. + + movl 4(%esp),%eax # Increment the return address + cmpb $0xc3,(%eax) # to skip the ret instruction; + je 1f # see above. + addl $2,%eax +1: inc %eax + + # If the instruction that we return to is + # leal 20(%ebp),{%eax,%ecx,%edx} + # then we have been called by a varargs function that expects + # %ebp to hold a real value. That can only work if we do the + # full stack split routine. FIXME: This is fragile. + cmpb $0x8d,(%eax) + jne 3f + cmpb $0x14,2(%eax) + jne 3f + cmpb $0x45,1(%eax) + je 2f + cmpb $0x4d,1(%eax) + je 2f + cmpb $0x55,1(%eax) + je 2f + +3: + movl %eax,4(%esp) # Update return address. + + popl %eax # Restore %eax and stack. + + .cfi_adjust_cfa_offset -4 # Account for popped register. + + ret $8 # Return to caller, popping args. + +2: + .cfi_adjust_cfa_offset 4 # Back to where we were. + + popl %eax # Restore %eax and stack. + + .cfi_adjust_cfa_offset -4 # Account for popped register. + + # Increment space we request. + addl $NON_SPLIT_STACK+0x1000+BACKOFF,4(%esp) + + # Fall through into morestack. + +#else + + # See below for an extended explanation of this. + .cfi_def_cfa %rsp,16 + + pushq %rax # Save %rax in case caller is using + # it to preserve original %r10. + .cfi_adjust_cfa_offset 8 # Adjust for pushed register. + + movq %rsp,%rax # Current stack, + subq %r10,%rax # less required stack frame size, + subq $NON_SPLIT_STACK,%rax # less space for non-split code. + +#ifdef __LP64__ + cmpq %fs:0x70,%rax # See if we have enough space. +#else + cmpl %fs:0x40,%eax +#endif + + jb 2f # Get more space if we need it. + + # If the instruction that we return to is + # leaq 24(%rbp), %r11n + # then we have been called by a varargs function that expects + # %ebp to hold a real value. That can only work if we do the + # full stack split routine. FIXME: This is fragile. + movq 8(%rsp),%rax + incq %rax # Skip ret instruction in caller. + cmpl $0x185d8d4c,(%rax) + je 2f + + # This breaks call/return prediction, as described above. + incq 8(%rsp) # Increment the return address. + + popq %rax # Restore register. + + .cfi_adjust_cfa_offset -8 # Adjust for popped register. + + ret # Return to caller. + +2: + popq %rax # Restore register. + + .cfi_adjust_cfa_offset -8 # Adjust for popped register. + + # Increment space we request. + addq $NON_SPLIT_STACK+0x1000+BACKOFF,%r10 + + # Fall through into morestack. + +#endif + + .cfi_endproc +#ifdef __ELF__ + .size __morestack_non_split, . - __morestack_non_split +#endif + +# __morestack_non_split falls through into __morestack. + + +# The __morestack function. + + .global __morestack + .hidden __morestack + +#ifdef __ELF__ + .type __morestack,@function +#endif + +__morestack: +.LFB1: + .cfi_startproc + + +#ifndef __x86_64__ + + +# The 32-bit __morestack function. + + # We use a cleanup to restore the stack guard if an exception + # is thrown through this code. +#ifndef __PIC__ + .cfi_personality 0,__gcc_personality_v0 + .cfi_lsda 0,.LLSDA1 +#else + .cfi_personality 0x9b,DW.ref.__gcc_personality_v0 + .cfi_lsda 0x1b,.LLSDA1 +#endif + + # We return below with a ret $8. We will return to a single + # return instruction, which will return to the caller of our + # caller. We let the unwinder skip that single return + # instruction, and just return to the real caller. + + # Here CFA points just past the return address on the stack, + # e.g., on function entry it is %esp + 4. The stack looks + # like this: + # CFA + 12: stack pointer after two returns + # CFA + 8: return address of morestack caller's caller + # CFA + 4: size of parameters + # CFA: new stack frame size + # CFA - 4: return address of this function + # CFA - 8: previous value of %ebp; %ebp points here + # Setting the new CFA to be the current CFA + 12 (i.e., %esp + + # 16) will make the unwinder pick up the right return address. + + .cfi_def_cfa %esp,16 + + pushl %ebp + .cfi_adjust_cfa_offset 4 + .cfi_offset %ebp, -20 + movl %esp,%ebp + .cfi_def_cfa_register %ebp + + # In 32-bit mode the parameters are pushed on the stack. The + # argument size is pushed then the new stack frame size is + # pushed. + + # In the body of a non-leaf function, the stack pointer will + # be aligned to a 16-byte boundary. That is CFA + 12 in the + # stack picture above: (CFA + 12) % 16 == 0. At this point we + # have %esp == CFA - 8, so %esp % 16 == 12. We need some + # space for saving registers and passing parameters, and we + # need to wind up with %esp % 16 == 0. + subl $44,%esp + + # Because our cleanup code may need to clobber %ebx, we need + # to save it here so the unwinder can restore the value used + # by the caller. Note that we don't have to restore the + # register, since we don't change it, we just have to save it + # for the unwinder. + movl %ebx,-4(%ebp) + .cfi_offset %ebx, -24 + + # In 32-bit mode the registers %eax, %edx, and %ecx may be + # used for parameters, depending on the regparm and fastcall + # attributes. + + movl %eax,-8(%ebp) + movl %edx,-12(%ebp) + movl %ecx,-16(%ebp) + + call __morestack_block_signals + + movl 12(%ebp),%eax # The size of the parameters. + movl %eax,8(%esp) + leal 20(%ebp),%eax # Address of caller's parameters. + movl %eax,4(%esp) + addl $BACKOFF,8(%ebp) # Ask for backoff bytes. + leal 8(%ebp),%eax # The address of the new frame size. + movl %eax,(%esp) + + call __generic_morestack + + movl %eax,%esp # Switch to the new stack. + subl 8(%ebp),%eax # The end of the stack space. + addl $BACKOFF,%eax # Back off 512 bytes. + +.LEHB0: + # FIXME: The offset must match + # TARGET_THREAD_SPLIT_STACK_OFFSET in + # gcc/config/i386/linux.h. + movl %eax,%gs:0x30 # Save the new stack boundary. + + call __morestack_unblock_signals + + movl -12(%ebp),%edx # Restore registers. + movl -16(%ebp),%ecx + + movl 4(%ebp),%eax # Increment the return address + cmpb $0xc3,(%eax) # to skip the ret instruction; + je 1f # see above. + addl $2,%eax +1: inc %eax + + movl %eax,-12(%ebp) # Store return address in an + # unused slot. + + movl -8(%ebp),%eax # Restore the last register. + + call *-12(%ebp) # Call our caller! + + # The caller will return here, as predicted. + + # Save the registers which may hold a return value. We + # assume that __generic_releasestack does not touch any + # floating point or vector registers. + pushl %eax + pushl %edx + + # Push the arguments to __generic_releasestack now so that the + # stack is at a 16-byte boundary for + # __morestack_block_signals. + pushl $0 # Where the available space is returned. + leal 0(%esp),%eax # Push its address. + push %eax + + call __morestack_block_signals + + call __generic_releasestack + + subl 4(%esp),%eax # Subtract available space. + addl $BACKOFF,%eax # Back off 512 bytes. +.LEHE0: + movl %eax,%gs:0x30 # Save the new stack boundary. + + addl $8,%esp # Remove values from stack. + + # We need to restore the old stack pointer, which is in %rbp, + # before we unblock signals. We also need to restore %eax and + # %edx after we unblock signals but before we return. Do this + # by moving %eax and %edx from the current stack to the old + # stack. + + popl %edx # Pop return value from current stack. + popl %eax + + movl %ebp,%esp # Restore stack pointer. + + # As before, we now have %esp % 16 == 12. + + pushl %eax # Push return value on old stack. + pushl %edx + subl $4,%esp # Align stack to 16-byte boundary. + + call __morestack_unblock_signals + + addl $4,%esp + popl %edx # Restore return value. + popl %eax + + .cfi_remember_state + + # We never changed %ebx, so we don't have to actually restore it. + .cfi_restore %ebx + + popl %ebp + .cfi_restore %ebp + .cfi_def_cfa %esp, 16 + ret $8 # Return to caller, which will + # immediately return. Pop + # arguments as we go. + +# This is the cleanup code called by the stack unwinder when unwinding +# through the code between .LEHB0 and .LEHE0 above. + +.L1: + .cfi_restore_state + subl $16,%esp # Maintain 16 byte alignment. + movl %eax,4(%esp) # Save exception header. + movl %ebp,(%esp) # Stack pointer after resume. + call __generic_findstack + movl %ebp,%ecx # Get the stack pointer. + subl %eax,%ecx # Subtract available space. + addl $BACKOFF,%ecx # Back off 512 bytes. + movl %ecx,%gs:0x30 # Save new stack boundary. + movl 4(%esp),%eax # Function argument. + movl %eax,(%esp) +#ifdef __PIC__ + call __x86.get_pc_thunk.bx # %ebx may not be set up for us. + addl $_GLOBAL_OFFSET_TABLE_, %ebx + call _Unwind_Resume@PLT # Resume unwinding. +#else + call _Unwind_Resume +#endif + +#else /* defined(__x86_64__) */ + + +# The 64-bit __morestack function. + + # We use a cleanup to restore the stack guard if an exception + # is thrown through this code. +#ifndef __PIC__ + .cfi_personality 0x3,__gcc_personality_v0 + .cfi_lsda 0x3,.LLSDA1 +#else + .cfi_personality 0x9b,DW.ref.__gcc_personality_v0 + .cfi_lsda 0x1b,.LLSDA1 +#endif + + # We will return a single return instruction, which will + # return to the caller of our caller. Let the unwinder skip + # that single return instruction, and just return to the real + # caller. + .cfi_def_cfa %rsp,16 + + # Set up a normal backtrace. + pushq %rbp + .cfi_adjust_cfa_offset 8 + .cfi_offset %rbp, -24 + movq %rsp, %rbp + .cfi_def_cfa_register %rbp + + # In 64-bit mode the new stack frame size is passed in r10 + # and the argument size is passed in r11. + + addq $BACKOFF,%r10 # Ask for backoff bytes. + pushq %r10 # Save new frame size. + + # In 64-bit mode the registers %rdi, %rsi, %rdx, %rcx, %r8, + # and %r9 may be used for parameters. We also preserve %rax + # which the caller may use to hold %r10. + + pushq %rax + pushq %rdi + pushq %rsi + pushq %rdx + pushq %rcx + pushq %r8 + pushq %r9 + + pushq %r11 + + # We entered morestack with the stack pointer aligned to a + # 16-byte boundary (the call to morestack's caller used 8 + # bytes, and the call to morestack used 8 bytes). We have now + # pushed 10 registers, so we are still aligned to a 16-byte + # boundary. + + call __morestack_block_signals + + leaq -8(%rbp),%rdi # Address of new frame size. + leaq 24(%rbp),%rsi # The caller's parameters. + popq %rdx # The size of the parameters. + + subq $8,%rsp # Align stack. + + call __generic_morestack + + movq -8(%rbp),%r10 # Reload modified frame size + movq %rax,%rsp # Switch to the new stack. + subq %r10,%rax # The end of the stack space. + addq $BACKOFF,%rax # Back off 1024 bytes. + +.LEHB0: + # FIXME: The offset must match + # TARGET_THREAD_SPLIT_STACK_OFFSET in + # gcc/config/i386/linux64.h. + # Macro to save the new stack boundary. +#ifdef __LP64__ +#define X86_64_SAVE_NEW_STACK_BOUNDARY(reg) movq %r##reg,%fs:0x70 +#else +#define X86_64_SAVE_NEW_STACK_BOUNDARY(reg) movl %e##reg,%fs:0x40 +#endif + X86_64_SAVE_NEW_STACK_BOUNDARY (ax) + + call __morestack_unblock_signals + + movq -24(%rbp),%rdi # Restore registers. + movq -32(%rbp),%rsi + movq -40(%rbp),%rdx + movq -48(%rbp),%rcx + movq -56(%rbp),%r8 + movq -64(%rbp),%r9 + + movq 8(%rbp),%r10 # Increment the return address + incq %r10 # to skip the ret instruction; + # see above. + + movq -16(%rbp),%rax # Restore caller's %rax. + + call *%r10 # Call our caller! + + # The caller will return here, as predicted. + + # Save the registers which may hold a return value. We + # assume that __generic_releasestack does not touch any + # floating point or vector registers. + pushq %rax + pushq %rdx + + call __morestack_block_signals + + pushq $0 # For alignment. + pushq $0 # Where the available space is returned. + leaq 0(%rsp),%rdi # Pass its address. + + call __generic_releasestack + + subq 0(%rsp),%rax # Subtract available space. + addq $BACKOFF,%rax # Back off 1024 bytes. +.LEHE0: + X86_64_SAVE_NEW_STACK_BOUNDARY (ax) + + addq $16,%rsp # Remove values from stack. + + # We need to restore the old stack pointer, which is in %rbp, + # before we unblock signals. We also need to restore %rax and + # %rdx after we unblock signals but before we return. Do this + # by moving %rax and %rdx from the current stack to the old + # stack. + + popq %rdx # Pop return value from current stack. + popq %rax + + movq %rbp,%rsp # Restore stack pointer. + + # Now (%rsp & 16) == 8. + + subq $8,%rsp # For alignment. + pushq %rax # Push return value on old stack. + pushq %rdx + + call __morestack_unblock_signals + + popq %rdx # Restore return value. + popq %rax + addq $8,%rsp + + .cfi_remember_state + popq %rbp + .cfi_restore %rbp + .cfi_def_cfa %rsp, 16 + ret # Return to caller, which will + # immediately return. + +# This is the cleanup code called by the stack unwinder when unwinding +# through the code between .LEHB0 and .LEHE0 above. + +.L1: + .cfi_restore_state + subq $16,%rsp # Maintain 16 byte alignment. + movq %rax,(%rsp) # Save exception header. + movq %rbp,%rdi # Stack pointer after resume. + call __generic_findstack + movq %rbp,%rcx # Get the stack pointer. + subq %rax,%rcx # Subtract available space. + addq $BACKOFF,%rcx # Back off 1024 bytes. + X86_64_SAVE_NEW_STACK_BOUNDARY (cx) + movq (%rsp),%rdi # Restore exception data for call. +#ifdef __PIC__ + call _Unwind_Resume@PLT # Resume unwinding. +#else + call _Unwind_Resume # Resume unwinding. +#endif + +#endif /* defined(__x86_64__) */ + + .cfi_endproc +#ifdef __ELF__ + .size __morestack, . - __morestack +#endif + +#if !defined(__x86_64__) && defined(__PIC__) +# Output the thunk to get PC into bx, since we use it above. + .section .text.__x86.get_pc_thunk.bx,"axG",@progbits,__x86.get_pc_thunk.bx,comdat + .globl __x86.get_pc_thunk.bx + .hidden __x86.get_pc_thunk.bx +#ifdef __ELF__ + .type __x86.get_pc_thunk.bx, @function +#endif +__x86.get_pc_thunk.bx: + .cfi_startproc + movl (%esp), %ebx + ret + .cfi_endproc +#ifdef __ELF__ + .size __x86.get_pc_thunk.bx, . - __x86.get_pc_thunk.bx +#endif +#endif + +# The exception table. This tells the personality routine to execute +# the exception handler. + + .section .gcc_except_table,"a",@progbits + .align 4 +.LLSDA1: + .byte 0xff # @LPStart format (omit) + .byte 0xff # @TType format (omit) + .byte 0x1 # call-site format (uleb128) + .uleb128 .LLSDACSE1-.LLSDACSB1 # Call-site table length +.LLSDACSB1: + .uleb128 .LEHB0-.LFB1 # region 0 start + .uleb128 .LEHE0-.LEHB0 # length + .uleb128 .L1-.LFB1 # landing pad + .uleb128 0 # action +.LLSDACSE1: + + + .global __gcc_personality_v0 +#ifdef __PIC__ + # Build a position independent reference to the basic + # personality function. + .hidden DW.ref.__gcc_personality_v0 + .weak DW.ref.__gcc_personality_v0 + .section .data.DW.ref.__gcc_personality_v0,"awG",@progbits,DW.ref.__gcc_personality_v0,comdat + .type DW.ref.__gcc_personality_v0, @object +DW.ref.__gcc_personality_v0: +#ifndef __LP64__ + .align 4 + .size DW.ref.__gcc_personality_v0, 4 + .long __gcc_personality_v0 +#else + .align 8 + .size DW.ref.__gcc_personality_v0, 8 + .quad __gcc_personality_v0 +#endif +#endif + +#if defined __x86_64__ && defined __LP64__ + +# This entry point is used for the large model. With this entry point +# the upper 32 bits of %r10 hold the argument size and the lower 32 +# bits hold the new stack frame size. There doesn't seem to be a way +# to know in the assembler code that we are assembling for the large +# model, and there doesn't seem to be a large model multilib anyhow. +# If one is developed, then the non-PIC code is probably OK since we +# will probably be close to the morestack code, but the PIC code +# almost certainly needs to be changed. FIXME. + + .text + .global __morestack_large_model + .hidden __morestack_large_model + +#ifdef __ELF__ + .type __morestack_large_model,@function +#endif + +__morestack_large_model: + + .cfi_startproc + + movq %r10, %r11 + andl $0xffffffff, %r10d + sarq $32, %r11 + jmp __morestack + + .cfi_endproc +#ifdef __ELF__ + .size __morestack_large_model, . - __morestack_large_model +#endif + +#endif /* __x86_64__ && __LP64__ */ + +# Initialize the stack test value when the program starts or when a +# new thread starts. We don't know how large the main stack is, so we +# guess conservatively. We might be able to use getrlimit here. + + .text + .global __stack_split_initialize + .hidden __stack_split_initialize + +#ifdef __ELF__ + .type __stack_split_initialize, @function +#endif + +__stack_split_initialize: + +#ifndef __x86_64__ + + leal -16000(%esp),%eax # We should have at least 16K. + movl %eax,%gs:0x30 + subl $4,%esp # Align stack. + pushl $16000 + pushl %esp +#ifdef __PIC__ + call __generic_morestack_set_initial_sp@PLT +#else + call __generic_morestack_set_initial_sp +#endif + addl $12,%esp + ret + +#else /* defined(__x86_64__) */ + + leaq -16000(%rsp),%rax # We should have at least 16K. + X86_64_SAVE_NEW_STACK_BOUNDARY (ax) + subq $8,%rsp # Align stack. + movq %rsp,%rdi + movq $16000,%rsi +#ifdef __PIC__ + call __generic_morestack_set_initial_sp@PLT +#else + call __generic_morestack_set_initial_sp +#endif + addq $8,%rsp + ret + +#endif /* defined(__x86_64__) */ + +#ifdef __ELF__ + .size __stack_split_initialize, . - __stack_split_initialize +#endif + +# Routines to get and set the guard, for __splitstack_getcontext, +# __splitstack_setcontext, and __splitstack_makecontext. + +# void *__morestack_get_guard (void) returns the current stack guard. + .text + .global __morestack_get_guard + .hidden __morestack_get_guard + +#ifdef __ELF__ + .type __morestack_get_guard,@function +#endif + +__morestack_get_guard: + +#ifndef __x86_64__ + movl %gs:0x30,%eax +#else +#ifdef __LP64__ + movq %fs:0x70,%rax +#else + movl %fs:0x40,%eax +#endif +#endif + ret + +#ifdef __ELF__ + .size __morestack_get_guard, . - __morestack_get_guard +#endif + +# void __morestack_set_guard (void *) sets the stack guard. + .global __morestack_set_guard + .hidden __morestack_set_guard + +#ifdef __ELF__ + .type __morestack_set_guard,@function +#endif + +__morestack_set_guard: + +#ifndef __x86_64__ + movl 4(%esp),%eax + movl %eax,%gs:0x30 +#else + X86_64_SAVE_NEW_STACK_BOUNDARY (di) +#endif + ret + +#ifdef __ELF__ + .size __morestack_set_guard, . - __morestack_set_guard +#endif + +# void *__morestack_make_guard (void *, size_t) returns the stack +# guard value for a stack. + .global __morestack_make_guard + .hidden __morestack_make_guard + +#ifdef __ELF__ + .type __morestack_make_guard,@function +#endif + +__morestack_make_guard: + +#ifndef __x86_64__ + movl 4(%esp),%eax + subl 8(%esp),%eax + addl $BACKOFF,%eax +#else + subq %rsi,%rdi + addq $BACKOFF,%rdi + movq %rdi,%rax +#endif + ret + +#ifdef __ELF__ + .size __morestack_make_guard, . - __morestack_make_guard +#endif + +# Make __stack_split_initialize a high priority constructor. FIXME: +# This is ELF specific. + + .section .ctors.65535,"aw",@progbits + +#ifndef __LP64__ + .align 4 + .long __stack_split_initialize + .long __morestack_load_mmap +#else + .align 8 + .quad __stack_split_initialize + .quad __morestack_load_mmap +#endif + +#ifdef __ELF__ + .section .note.GNU-stack,"",@progbits + .section .note.GNU-split-stack,"",@progbits + .section .note.GNU-no-split-stack,"",@progbits +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/sfp-exceptions.c b/contrib/toolchain/gcc/5x/libgcc/config/i386/sfp-exceptions.c new file mode 100644 index 0000000000..17041240df --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/sfp-exceptions.c @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2012-2015 Free Software Foundation, Inc. + * + * 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, or (at your option) any + * later version. + * + * This file is distributed in the hope that 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 _SOFT_FLOAT +#include "sfp-machine.h" + +struct fenv +{ + unsigned short int __control_word; + unsigned short int __unused1; + unsigned short int __status_word; + unsigned short int __unused2; + unsigned short int __tags; + unsigned short int __unused3; + unsigned int __eip; + unsigned short int __cs_selector; + unsigned int __opcode:11; + unsigned int __unused4:5; + unsigned int __data_offset; + unsigned short int __data_selector; + unsigned short int __unused5; +}; + +void +__sfp_handle_exceptions (int _fex) +{ + if (_fex & FP_EX_INVALID) + { + float f = 0.0f; +#ifdef __SSE_MATH__ + volatile float r __attribute__ ((unused)); + asm volatile ("%vdivss\t{%0, %d0|%d0, %0}" : "+x" (f)); + r = f; /* Needed to trigger exception. */ +#else + asm volatile ("fdiv\t{%y0, %0|%0, %y0}" : "+t" (f)); + /* No need for fwait, exception is triggered by emitted fstp. */ +#endif + } + if (_fex & FP_EX_DENORM) + { + struct fenv temp; + asm volatile ("fnstenv\t%0" : "=m" (temp)); + temp.__status_word |= FP_EX_DENORM; + asm volatile ("fldenv\t%0" : : "m" (temp)); + asm volatile ("fwait"); + } + if (_fex & FP_EX_DIVZERO) + { + float f = 1.0f, g = 0.0f; +#ifdef __SSE_MATH__ + volatile float r __attribute__ ((unused)); + asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g)); + r = f; /* Needed to trigger exception. */ +#else + asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g)); + /* No need for fwait, exception is triggered by emitted fstp. */ +#endif + } + if (_fex & FP_EX_OVERFLOW) + { + struct fenv temp; + asm volatile ("fnstenv\t%0" : "=m" (temp)); + temp.__status_word |= FP_EX_OVERFLOW; + asm volatile ("fldenv\t%0" : : "m" (temp)); + asm volatile ("fwait"); + } + if (_fex & FP_EX_UNDERFLOW) + { + struct fenv temp; + asm volatile ("fnstenv\t%0" : "=m" (temp)); + temp.__status_word |= FP_EX_UNDERFLOW; + asm volatile ("fldenv\t%0" : : "m" (temp)); + asm volatile ("fwait"); + } + if (_fex & FP_EX_INEXACT) + { + float f = 1.0f, g = 3.0f; +#ifdef __SSE_MATH__ + volatile float r __attribute__ ((unused)); + asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g)); + r = f; /* Needed to trigger exception. */ +#else + asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g)); + /* No need for fwait, exception is triggered by emitted fstp. */ +#endif + } +}; +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/sfp-machine.h b/contrib/toolchain/gcc/5x/libgcc/config/i386/sfp-machine.h new file mode 100644 index 0000000000..8a1923b6c1 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/sfp-machine.h @@ -0,0 +1,85 @@ +#ifdef __MINGW32__ + /* Make sure we are using gnu-style bitfield handling. */ +#define _FP_STRUCT_LAYOUT __attribute__ ((gcc_struct)) +#endif + +/* The type of the result of a floating point comparison. This must + match `__libgcc_cmp_return__' in GCC for the target. */ +typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__))); +#define CMPtype __gcc_CMPtype + +#ifdef __x86_64__ +#include "config/i386/64/sfp-machine.h" +#else +#include "config/i386/32/sfp-machine.h" +#endif + +#define _FP_KEEPNANFRACP 1 +#define _FP_QNANNEGATEDP 0 + +#define _FP_NANSIGN_S 1 +#define _FP_NANSIGN_D 1 +#define _FP_NANSIGN_E 1 +#define _FP_NANSIGN_Q 1 + +/* Here is something Intel misdesigned: the specs don't define + the case where we have two NaNs with same mantissas, but + different sign. Different operations pick up different NaNs. */ +#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ + do { \ + if (_FP_FRAC_GT_##wc(X, Y) \ + || (_FP_FRAC_EQ_##wc(X,Y) && (OP == '+' || OP == '*'))) \ + { \ + R##_s = X##_s; \ + _FP_FRAC_COPY_##wc(R,X); \ + } \ + else \ + { \ + R##_s = Y##_s; \ + _FP_FRAC_COPY_##wc(R,Y); \ + } \ + R##_c = FP_CLS_NAN; \ + } while (0) + +#ifndef _SOFT_FLOAT +#define FP_EX_INVALID 0x01 +#define FP_EX_DENORM 0x02 +#define FP_EX_DIVZERO 0x04 +#define FP_EX_OVERFLOW 0x08 +#define FP_EX_UNDERFLOW 0x10 +#define FP_EX_INEXACT 0x20 +#define FP_EX_ALL \ + (FP_EX_INVALID | FP_EX_DENORM | FP_EX_DIVZERO | FP_EX_OVERFLOW \ + | FP_EX_UNDERFLOW | FP_EX_INEXACT) + +void __sfp_handle_exceptions (int); + +#define FP_HANDLE_EXCEPTIONS \ + do { \ + if (__builtin_expect (_fex, 0)) \ + __sfp_handle_exceptions (_fex); \ + } while (0); + +#define FP_TRAPPING_EXCEPTIONS ((~_fcw >> FP_EX_SHIFT) & FP_EX_ALL) + +#define FP_ROUNDMODE (_fcw & FP_RND_MASK) +#endif + +#define _FP_TININESS_AFTER_ROUNDING 1 + +#define __LITTLE_ENDIAN 1234 +#define __BIG_ENDIAN 4321 + +#define __BYTE_ORDER __LITTLE_ENDIAN + +/* Define ALIASNAME as a strong alias for NAME. */ +#if defined __MACH__ +/* Mach-O doesn't support aliasing. If these functions ever return + anything but CMPtype we need to revisit this... */ +#define strong_alias(name, aliasname) \ + CMPtype aliasname (TFtype a, TFtype b) { return name(a, b); } +#else +# define strong_alias(name, aliasname) _strong_alias(name, aliasname) +# define _strong_alias(name, aliasname) \ + extern __typeof (name) aliasname __attribute__ ((alias (#name))); +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/sol2-c1.S b/contrib/toolchain/gcc/5x/libgcc/config/i386/sol2-c1.S new file mode 100644 index 0000000000..b3a4698123 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/sol2-c1.S @@ -0,0 +1,173 @@ +/* crt1.s for Solaris 2, x86 + + Copyright (C) 1993-2015 Free Software Foundation, Inc. + Written By Fred Fish, Nov 1992 + +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, or (at your option) any +later version. + +This file is distributed in the hope that 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 file takes control of the process from the kernel, as specified + in section 3 of the System V Application Binary Interface, Intel386 + Processor Supplement. It has been constructed from information obtained + from the ABI, information obtained from single stepping existing + Solaris executables through their startup code with gdb, and from + information obtained by single stepping executables on other i386 SVR4 + implementations. This file is the first thing linked into any + executable. */ + +#ifndef GCRT1 + .ident "GNU C crt1.s" +#define CLEANUP _cleanup +#else +/* This is a modified crt1.s by J.W.Hawtin 15/8/96, + to allow program profiling, by calling monstartup on entry and _mcleanup + on exit. */ + .ident "GNU C gcrt1.s" +#define CLEANUP _mcleanup +#endif + .weak _cleanup + .weak _DYNAMIC + .text + +/* Start creating the initial frame by pushing a NULL value for the return + address of the initial frame, and mark the end of the stack frame chain + (the innermost stack frame) with a NULL value, per page 3-32 of the ABI. + Initialize the first stack frame pointer in %ebp (the contents of which + are unspecified at process initialization). */ + + .globl _start +_start: + pushl $0x0 + pushl $0x0 + movl %esp,%ebp + +/* As specified per page 3-32 of the ABI, %edx contains a function + pointer that should be registered with atexit(), for proper + shared object termination. Just push it onto the stack for now + to preserve it. We want to register _cleanup() first. */ + + pushl %edx + +/* Check to see if there is an _cleanup() function linked in, and if + so, register it with atexit() as the last thing to be run by + atexit(). */ + + movl $CLEANUP,%eax + testl %eax,%eax + je .L1 + pushl $CLEANUP + call atexit + addl $0x4,%esp +.L1: + +/* Now check to see if we have an _DYNAMIC table, and if so then + we need to register the function pointer previously in %edx, but + now conveniently saved on the stack as the argument to pass to + atexit(). */ + + movl $_DYNAMIC,%eax + testl %eax,%eax + je .L2 + call atexit +.L2: + +/* Register _fini() with atexit(). We will take care of calling _init() + directly. */ + + pushl $_fini + call atexit + +#ifdef GCRT1 +/* Start profiling. */ + + pushl %ebp + movl %esp,%ebp + pushl $_etext + pushl $_start + call monstartup + addl $8,%esp + popl %ebp +#endif + +/* Compute the address of the environment vector on the stack and load + it into the global variable _environ. Currently argc is at 8 off + the frame pointer. Fetch the argument count into %eax, scale by the + size of each arg (4 bytes) and compute the address of the environment + vector which is 16 bytes (the two zero words we pushed, plus argc, + plus the null word terminating the arg vector) further up the stack, + off the frame pointer (whew!). */ + + movl 8(%ebp),%eax + leal 16(%ebp,%eax,4),%edx + movl %edx,_environ + +/* Push the environment vector pointer, the argument vector pointer, + and the argument count on to the stack to set up the arguments + for _init(), _fpstart(), and main(). Note that the environment + vector pointer and the arg count were previously loaded into + %edx and %eax respectively. The only new value we need to compute + is the argument vector pointer, which is at a fixed address off + the initial frame pointer. */ + +/* Make sure the stack is properly aligned. */ + andl $0xfffffff0,%esp + subl $4,%esp + + pushl %edx + leal 12(%ebp),%edx + pushl %edx + pushl %eax + +/* Call _init(argc, argv, environ), _fpstart(argc, argv, environ), and + main(argc, argv, environ). */ + + call _init + call __fpstart + call main + +/* Pop the argc, argv, and environ arguments off the stack, push the + value returned from main(), and call exit(). */ + + addl $12,%esp + pushl %eax + call exit + +/* An inline equivalent of _exit, as specified in Figure 3-26 of the ABI. */ + + pushl $0x0 + movl $0x1,%eax + lcall $7,$0 + +/* If all else fails, just try a halt! */ + + hlt + .type _start,@function + .size _start,.-_start + +#ifndef GCRT1 +/* A dummy profiling support routine for non-profiling executables, + in case we link in some objects that have been compiled for profiling. */ + + .weak _mcount +_mcount: + ret + .type _mcount,@function + .size _mcount,.-_mcount +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/sol2-unwind.h b/contrib/toolchain/gcc/5x/libgcc/config/i386/sol2-unwind.h new file mode 100644 index 0000000000..fc2fe71e3c --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/sol2-unwind.h @@ -0,0 +1,244 @@ +/* DWARF2 EH unwinding support for AMD x86-64 and x86. + Copyright (C) 2009-2015 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 +. */ + +/* Do code reading to identify a signal frame, and set the frame + state data appropriately. See unwind-dw2.c for the structs. */ + +#include +#include + +#ifdef __x86_64__ + +#define MD_FALLBACK_FRAME_STATE_FOR x86_64_fallback_frame_state + +static _Unwind_Reason_Code +x86_64_fallback_frame_state (struct _Unwind_Context *context, + _Unwind_FrameState *fs) +{ + unsigned char *pc = context->ra; + mcontext_t *mctx; + long new_cfa; + + if (/* Solaris 10+ + ------------ + <__sighndlr+0>: push %rbp + <__sighndlr+1>: mov %rsp,%rbp + <__sighndlr+4>: callq *%rcx + <__sighndlr+6>: leaveq <--- PC + <__sighndlr+7>: retq */ + *(unsigned long *)(pc - 6) == 0xc3c9d1ffe5894855) + + /* We need to move up three frames: + + <-- context->cfa + __sighndlr + call_user_handler + sigacthandler + + + context->cfa points into the frame after the saved frame pointer and + saved pc (struct frame). + + The ucontext_t structure is in the kernel frame after the signal + number and a siginfo_t *. Since the frame sizes vary even within + Solaris 10 updates, we need to walk the stack to get there. */ + { + struct frame *fp = (struct frame *) context->cfa - 1; + struct handler_args { + int signo; + siginfo_t *sip; + ucontext_t ucontext; + } *handler_args; + ucontext_t *ucp; + + /* Next frame: __sighndlr frame pointer. */ + fp = (struct frame *) fp->fr_savfp; + /* call_user_handler frame pointer. */ + fp = (struct frame *) fp->fr_savfp; + /* sigacthandler frame pointer. */ + fp = (struct frame *) fp->fr_savfp; + + /* The argument area precedes the struct frame. */ + handler_args = (struct handler_args *) (fp + 1); + ucp = &handler_args->ucontext; + mctx = &ucp->uc_mcontext; + } + else + return _URC_END_OF_STACK; + + new_cfa = mctx->gregs[REG_RSP]; + + fs->regs.cfa_how = CFA_REG_OFFSET; + fs->regs.cfa_reg = 7; + fs->regs.cfa_offset = new_cfa - (long) context->cfa; + + /* The SVR4 register numbering macros aren't usable in libgcc. */ + fs->regs.reg[0].how = REG_SAVED_OFFSET; + fs->regs.reg[0].loc.offset = (long)&mctx->gregs[REG_RAX] - new_cfa; + fs->regs.reg[1].how = REG_SAVED_OFFSET; + fs->regs.reg[1].loc.offset = (long)&mctx->gregs[REG_RDX] - new_cfa; + fs->regs.reg[2].how = REG_SAVED_OFFSET; + fs->regs.reg[2].loc.offset = (long)&mctx->gregs[REG_RCX] - new_cfa; + fs->regs.reg[3].how = REG_SAVED_OFFSET; + fs->regs.reg[3].loc.offset = (long)&mctx->gregs[REG_RBX] - new_cfa; + fs->regs.reg[4].how = REG_SAVED_OFFSET; + fs->regs.reg[4].loc.offset = (long)&mctx->gregs[REG_RSI] - new_cfa; + fs->regs.reg[5].how = REG_SAVED_OFFSET; + fs->regs.reg[5].loc.offset = (long)&mctx->gregs[REG_RDI] - new_cfa; + fs->regs.reg[6].how = REG_SAVED_OFFSET; + fs->regs.reg[6].loc.offset = (long)&mctx->gregs[REG_RBP] - new_cfa; + fs->regs.reg[8].how = REG_SAVED_OFFSET; + fs->regs.reg[8].loc.offset = (long)&mctx->gregs[REG_R8] - new_cfa; + fs->regs.reg[9].how = REG_SAVED_OFFSET; + fs->regs.reg[9].loc.offset = (long)&mctx->gregs[REG_R9] - new_cfa; + fs->regs.reg[10].how = REG_SAVED_OFFSET; + fs->regs.reg[10].loc.offset = (long)&mctx->gregs[REG_R10] - new_cfa; + fs->regs.reg[11].how = REG_SAVED_OFFSET; + fs->regs.reg[11].loc.offset = (long)&mctx->gregs[REG_R11] - new_cfa; + fs->regs.reg[12].how = REG_SAVED_OFFSET; + fs->regs.reg[12].loc.offset = (long)&mctx->gregs[REG_R12] - new_cfa; + fs->regs.reg[13].how = REG_SAVED_OFFSET; + fs->regs.reg[13].loc.offset = (long)&mctx->gregs[REG_R13] - new_cfa; + fs->regs.reg[14].how = REG_SAVED_OFFSET; + fs->regs.reg[14].loc.offset = (long)&mctx->gregs[REG_R14] - new_cfa; + fs->regs.reg[15].how = REG_SAVED_OFFSET; + fs->regs.reg[15].loc.offset = (long)&mctx->gregs[REG_R15] - new_cfa; + fs->regs.reg[16].how = REG_SAVED_OFFSET; + fs->regs.reg[16].loc.offset = (long)&mctx->gregs[REG_RIP] - new_cfa; + fs->retaddr_column = 16; + fs->signal_frame = 1; + + return _URC_NO_REASON; +} + +#else + +#define MD_FALLBACK_FRAME_STATE_FOR x86_fallback_frame_state + +static _Unwind_Reason_Code +x86_fallback_frame_state (struct _Unwind_Context *context, + _Unwind_FrameState *fs) +{ + unsigned char *pc = context->ra; + mcontext_t *mctx; + long new_cfa; + + if (/* Solaris 10 + ----------- + <__sighndlr+0>: push %ebp + <__sighndlr+1>: mov %esp,%ebp + <__sighndlr+3>: pushl 0x10(%ebp) + <__sighndlr+6>: pushl 0xc(%ebp) + <__sighndlr+9>: pushl 0x8(%ebp) + <__sighndlr+12>: call *0x14(%ebp) + <__sighndlr+15>: add $0xc,%esp <--- PC + <__sighndlr+18>: leave + <__sighndlr+19>: ret */ + (*(unsigned long *)(pc - 15) == 0xffec8b55 + && *(unsigned long *)(pc - 11) == 0x75ff1075 + && *(unsigned long *)(pc - 7) == 0x0875ff0c + && *(unsigned long *)(pc - 3) == 0x831455ff + && *(unsigned long *)(pc + 1) == 0xc3c90cc4) + + || /* Solaris 11 before snv_125 + -------------------------- + <__sighndlr+0> push %ebp + <__sighndlr+1> mov %esp,%ebp + <__sighndlr+4> pushl 0x10(%ebp) + <__sighndlr+6> pushl 0xc(%ebp) + <__sighndlr+9> pushl 0x8(%ebp) + <__sighndlr+12> call *0x14(%ebp) + <__sighndlr+15> add $0xc,%esp + <__sighndlr+18> leave <--- PC + <__sighndlr+19> ret */ + (*(unsigned long *)(pc - 18) == 0xffec8b55 + && *(unsigned long *)(pc - 14) == 0x7fff107f + && *(unsigned long *)(pc - 10) == 0x0875ff0c + && *(unsigned long *)(pc - 6) == 0x83145fff + && *(unsigned long *)(pc - 1) == 0xc3c90cc4) + + || /* Solaris 11 since snv_125 + ------------------------- + <__sighndlr+0> push %ebp + <__sighndlr+1> mov %esp,%ebp + <__sighndlr+3> and $0xfffffff0,%esp + <__sighndlr+6> sub $0x4,%esp + <__sighndlr+9> pushl 0x10(%ebp) + <__sighndlr+12> pushl 0xc(%ebp) + <__sighndlr+15> pushl 0x8(%ebp) + <__sighndlr+18> call *0x14(%ebp) + <__sighndlr+21> leave <--- PC + <__sighndlr+22> ret */ + (*(unsigned long *)(pc - 21) == 0x83ec8b55 + && *(unsigned long *)(pc - 17) == 0xec83f0e4 + && *(unsigned long *)(pc - 13) == 0x1075ff04 + && *(unsigned long *)(pc - 9) == 0xff0c75ff + && *(unsigned long *)(pc - 5) == 0x55ff0875 + && (*(unsigned long *)(pc - 1) & 0x00ffffff) == 0x00c3c914)) + { + struct handler_args { + int signo; + siginfo_t *sip; + ucontext_t *ucontext; + } *handler_args = context->cfa; + mctx = &handler_args->ucontext->uc_mcontext; + } + else + return _URC_END_OF_STACK; + + new_cfa = mctx->gregs[UESP]; + + fs->regs.cfa_how = CFA_REG_OFFSET; + fs->regs.cfa_reg = 4; + fs->regs.cfa_offset = new_cfa - (long) context->cfa; + + /* The SVR4 register numbering macros aren't usable in libgcc. */ + fs->regs.reg[0].how = REG_SAVED_OFFSET; + fs->regs.reg[0].loc.offset = (long)&mctx->gregs[EAX] - new_cfa; + fs->regs.reg[3].how = REG_SAVED_OFFSET; + fs->regs.reg[3].loc.offset = (long)&mctx->gregs[EBX] - new_cfa; + fs->regs.reg[1].how = REG_SAVED_OFFSET; + fs->regs.reg[1].loc.offset = (long)&mctx->gregs[ECX] - new_cfa; + fs->regs.reg[2].how = REG_SAVED_OFFSET; + fs->regs.reg[2].loc.offset = (long)&mctx->gregs[EDX] - new_cfa; + fs->regs.reg[6].how = REG_SAVED_OFFSET; + fs->regs.reg[6].loc.offset = (long)&mctx->gregs[ESI] - new_cfa; + fs->regs.reg[7].how = REG_SAVED_OFFSET; + fs->regs.reg[7].loc.offset = (long)&mctx->gregs[EDI] - new_cfa; + fs->regs.reg[5].how = REG_SAVED_OFFSET; + fs->regs.reg[5].loc.offset = (long)&mctx->gregs[EBP] - new_cfa; + fs->regs.reg[8].how = REG_SAVED_OFFSET; + fs->regs.reg[8].loc.offset = (long)&mctx->gregs[EIP] - new_cfa; + fs->retaddr_column = 8; + + /* SIGFPE for IEEE-754 exceptions is delivered after the faulting insn + rather than before it, so don't set fs->signal_frame in that case. + We test whether the ES field of the Status Register is zero. */ + if ((mctx->fpregs.fp_reg_set.fpchip_state.status & 0x80) == 0) + fs->signal_frame = 1; + + return _URC_NO_REASON; +} + +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/value-unwind.h b/contrib/toolchain/gcc/5x/libgcc/config/i386/value-unwind.h new file mode 100644 index 0000000000..c45fa9ce14 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/value-unwind.h @@ -0,0 +1,25 @@ +/* Store register values as _Unwind_Word type in DWARF2 EH unwind context. + Copyright (C) 2011-2015 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 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 this macro if the target stores register values as _Unwind_Word + type in unwind context. Only enable it for x32. */ +#if defined __x86_64 && !defined __LP64__ +# define REG_VALUE_IN_UNWIND_CONTEXT +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/i386/w32-unwind.h b/contrib/toolchain/gcc/5x/libgcc/config/i386/w32-unwind.h new file mode 100644 index 0000000000..d482836db6 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/i386/w32-unwind.h @@ -0,0 +1,207 @@ +/* Definitions for Dwarf2 EH unwind support for Windows32 targets + Copyright (C) 2007-2015 Free Software Foundation, Inc. + Contributed by Pascal Obry + +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 file implements the md_fallback_frame_state_for routine for + Windows, triggered when the GCC table based unwinding process hits a + frame for which no unwind info has been registered. This typically + occurs when raising an exception from a signal handler, because the + handler is actually called from the OS kernel. + + The basic idea is to detect that we are indeed trying to unwind past a + signal handler and to fill out the GCC internal unwinding structures for + the OS kernel frame as if it had been directly called from the + interrupted context. + + This is all assuming that the code to set the handler asked the kernel + to pass a pointer to such context information. + + There is three main parts. + + 1) The first thing to do is to check if we are in a signal context. If + not we can just return as there is nothing to do. We are probably on + some foreign code for which no unwind frame can be found. If this is + a call from the Windows signal handler, then: + + 2) We must get the signal context information. + + * With the standard exception filter: + + This is on Windows pointed to by an EXCEPTION_POINTERS. We know that + the signal handle will call an UnhandledExceptionFilter with this + parameter. The spec for this routine is: + + LONG WINAPI UnhandledExceptionFilter(struct _EXCEPTION_POINTERS*); + + So the pointer to struct _EXCEPTION_POINTERS must be somewhere on the + stack. + + This was found experimentally to always be at offset 0 of the context + frame in all cases handled by this implementation. + + * With the SEH exception handler: + + In this case the signal context is directly on the stack as the SEH + exception handler has the following prototype: + + DWORD + SEH_error_handler (PEXCEPTION_RECORD ExceptionRecord, + PVOID EstablisherFrame, + PCONTEXT ContextRecord, + PVOID DispatcherContext) + + This was found experimentally to always be at offset 56 of the + context frame in all cases handled by this implementation. + + 3) When we have the signal context we just have to save some registers + and set the return address based on the program counter (Eip). + + Note that this implementation follows closely the same principles as the + GNU/Linux and OSF ones. */ + +#ifndef __MINGW64__ + +#define WIN32_MEAN_AND_LEAN +#include +/* Patterns found experimentally to be on a Windows signal handler */ + +/* In a standard exception filter */ + +#define SIG_PAT1 \ + (pc_[-2] == 0xff && pc_[-1] == 0xd0 /* call %eax */ \ + && pc_[0] == 0x83 && pc_[1] == 0xf8) /* cmp 0xdepl,%eax */ + +#define SIG_PAT2 \ + (pc_[-5] == 0xe8 && pc_[-4] == 0x68 /* call (depl16) */ \ + && pc_[0] == 0xc3) /* ret */ + +/* In a Win32 SEH handler */ + +#define SIG_SEH1 \ + (pc_[-5] == 0xe8 /* call addr */ \ + && pc_[0] == 0x83 && pc_[1] == 0xc4 /* add 0xval,%esp */ \ + && pc_[3] == 0xb8) /* mov 0xval,%eax */ + +#define SIG_SEH2 \ + (pc_[-5] == 0x8b && pc_[-4] == 0x4d /* mov depl(%ebp),%ecx */ \ + && pc_[0] == 0x64 && pc_[1] == 0x8b) /* mov %fs:(0), */ \ + +/* In the GCC alloca (stack probing) */ + +#define SIG_ALLOCA \ + (pc_[-1] == 0x83 /* orl $0x0,(%ecx) */ \ + && pc_[0] == 0x9 && pc_[1] == 0 \ + && pc_[2] == 0x2d && pc_[3] == 0 /* subl $0x1000,%eax */ \ + && pc_[4] == 0x10 && pc_[5] == 0) + + +#define MD_FALLBACK_FRAME_STATE_FOR i386_w32_fallback_frame_state + +static _Unwind_Reason_Code +i386_w32_fallback_frame_state (struct _Unwind_Context *context, + _Unwind_FrameState *fs) + +{ + void * ctx_ra_ = (void *)(context->ra); /* return address */ + void * ctx_cfa_ = (void *)(context->cfa); /* context frame address */ + unsigned char * pc_ = (unsigned char *) ctx_ra_; + + /* In the test below we look for two specific patterns found + experimentally to be in the Windows signal handler. */ + if (SIG_PAT1 || SIG_PAT2 || SIG_SEH1 || SIG_SEH2) + { + PEXCEPTION_POINTERS weinfo_; + PCONTEXT proc_ctx_; + long new_cfa_; + + if (SIG_SEH1) + proc_ctx_ = (PCONTEXT) (*(int*)(ctx_cfa_ + 56)); + else if (SIG_SEH2) + proc_ctx_ = (PCONTEXT) (*(int*)(ctx_cfa_ + 8)); + else + { + weinfo_ = (PEXCEPTION_POINTERS) (*(int*)ctx_cfa_); + proc_ctx_ = weinfo_->ContextRecord; + } + + /* The new context frame address is the stack pointer. */ + new_cfa_ = proc_ctx_->Esp; + fs->regs.cfa_how = CFA_REG_OFFSET; + fs->regs.cfa_reg = __builtin_dwarf_sp_column(); + fs->regs.cfa_offset = new_cfa_ - (long) ctx_cfa_; + + /* Restore registers. */ + fs->regs.reg[0].how = REG_SAVED_OFFSET; + fs->regs.reg[0].loc.offset = (long)&proc_ctx_->Eax - new_cfa_; + fs->regs.reg[3].how = REG_SAVED_OFFSET; + fs->regs.reg[3].loc.offset = (long)&proc_ctx_->Ebx - new_cfa_; + fs->regs.reg[1].how = REG_SAVED_OFFSET; + fs->regs.reg[1].loc.offset = (long)&proc_ctx_->Ecx - new_cfa_; + fs->regs.reg[2].how = REG_SAVED_OFFSET; + fs->regs.reg[2].loc.offset = (long)&proc_ctx_->Edx - new_cfa_; + fs->regs.reg[6].how = REG_SAVED_OFFSET; + fs->regs.reg[6].loc.offset = (long)&proc_ctx_->Esi - new_cfa_; + fs->regs.reg[7].how = REG_SAVED_OFFSET; + fs->regs.reg[7].loc.offset = (long)&proc_ctx_->Edi - new_cfa_; + fs->regs.reg[5].how = REG_SAVED_OFFSET; + fs->regs.reg[5].loc.offset = (long)&proc_ctx_->Ebp - new_cfa_; + fs->regs.reg[8].how = REG_SAVED_OFFSET; + fs->regs.reg[8].loc.offset = (long)&proc_ctx_->Eip - new_cfa_; + fs->retaddr_column = 8; + fs->signal_frame = 1; + + return _URC_NO_REASON; + } + + /* Unwinding through _alloca, propagating from a trap triggered by + one of it's probes prior to the real SP adjustment. The only + operations of interest performed is "pushl %ecx", followed by + ecx clobbering. */ + else if (SIG_ALLOCA) + { + /* Only one push between entry in _alloca and the probe trap. */ + long new_cfa_ = (long) ctx_cfa_ + 4; + + fs->regs.cfa_how = CFA_REG_OFFSET; + fs->regs.cfa_reg = __builtin_dwarf_sp_column(); + fs->regs.cfa_offset = new_cfa_ - (long) ctx_cfa_; + + /* The saved value of %ecx is at CFA - 4 */ + fs->regs.reg[1].how = REG_SAVED_OFFSET; + fs->regs.reg[1].loc.offset = -4; + + /* and what is stored at the CFA is the return address. */ + fs->retaddr_column = 8; + fs->regs.reg[8].how = REG_SAVED_OFFSET; + fs->regs.reg[8].loc.offset = 0; + fs->signal_frame = 1; + + return _URC_NO_REASON; + } + else + return _URC_END_OF_STACK; +} + +#endif /* !__MINGW64__ */ diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_addsub_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_addsub_dd.c new file mode 100644 index 0000000000..4ec9dc3390 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_addsub_dd.c @@ -0,0 +1,46 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_addsub_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_addsub_sd.c new file mode 100644 index 0000000000..fdea9872cb --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_addsub_sd.c @@ -0,0 +1,54 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_addsub_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_addsub_td.c new file mode 100644 index 0000000000..50c0ab2f56 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_addsub_td.c @@ -0,0 +1,46 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_df.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_df.c new file mode 100644 index 0000000000..3520a925e0 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_df.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_di.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_di.c new file mode 100644 index 0000000000..1df2affb0d --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_di.c @@ -0,0 +1,39 @@ +/* Copyright (C) 2007-2015 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); +} + + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_sd.c new file mode 100644 index 0000000000..ebf16fb24f --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_sd.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_sf.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_sf.c new file mode 100644 index 0000000000..6539b442e3 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_sf.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_si.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_si.c new file mode 100644 index 0000000000..3d169b79e5 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_si.c @@ -0,0 +1,39 @@ +/* Copyright (C) 2007-2015 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); +} + + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_td.c new file mode 100644 index 0000000000..038fa2a46e --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_td.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_tf.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_tf.c new file mode 100644 index 0000000000..c244e817ea --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_tf.c @@ -0,0 +1,38 @@ +/* Copyright (C) 2007-2015 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); +} +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_udi.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_udi.c new file mode 100644 index 0000000000..3d0da5be61 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_udi.c @@ -0,0 +1,39 @@ +/* Copyright (C) 2007-2015 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); +} + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_usi.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_usi.c new file mode 100644 index 0000000000..484a401e14 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_usi.c @@ -0,0 +1,39 @@ +/* Copyright (C) 2007-2015 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); +} + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_xf.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_xf.c new file mode 100644 index 0000000000..405304ee8b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_dd_to_xf.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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" + +XFtype +__bid_extendddxf (_Decimal64 x) { + XFtype res; + union decimal64 ux; + + ux.d = x; + res = __bid64_to_binary80 (ux.i); + return (res); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_df_to_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_df_to_dd.c new file mode 100644 index 0000000000..708390f939 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_df_to_dd.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_df_to_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_df_to_sd.c new file mode 100644 index 0000000000..531f55cc20 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_df_to_sd.c @@ -0,0 +1,34 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_df_to_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_df_to_td.c new file mode 100644 index 0000000000..7ba6dc5283 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_df_to_td.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_di_to_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_di_to_dd.c new file mode 100644 index 0000000000..f5b788ad1c --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_di_to_dd.c @@ -0,0 +1,35 @@ +/* Copyright (C) 2007-2015 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); +} + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_di_to_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_di_to_sd.c new file mode 100644 index 0000000000..8dbf675cac --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_di_to_sd.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_di_to_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_di_to_td.c new file mode 100644 index 0000000000..d7e0bb7b79 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_di_to_td.c @@ -0,0 +1,35 @@ +/* Copyright (C) 2007-2015 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); +} + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_div_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_div_dd.c new file mode 100644 index 0000000000..82d0f17b1f --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_div_dd.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_div_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_div_sd.c new file mode 100644 index 0000000000..1179e6a044 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_div_sd.c @@ -0,0 +1,40 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_div_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_div_td.c new file mode 100644 index 0000000000..76c5e596a0 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_div_td.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_eq_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_eq_dd.c new file mode 100644 index 0000000000..f8b49378eb --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_eq_dd.c @@ -0,0 +1,41 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_eq_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_eq_sd.c new file mode 100644 index 0000000000..f943490de2 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_eq_sd.c @@ -0,0 +1,44 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_eq_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_eq_td.c new file mode 100644 index 0000000000..1ae070f5eb --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_eq_td.c @@ -0,0 +1,41 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ge_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ge_dd.c new file mode 100644 index 0000000000..f83ebc01a8 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ge_dd.c @@ -0,0 +1,39 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ge_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ge_sd.c new file mode 100644 index 0000000000..0c0a0ea493 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ge_sd.c @@ -0,0 +1,42 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ge_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ge_td.c new file mode 100644 index 0000000000..b4845ca5a6 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ge_td.c @@ -0,0 +1,39 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_gt_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_gt_dd.c new file mode 100644 index 0000000000..29c3264914 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_gt_dd.c @@ -0,0 +1,37 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_gt_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_gt_sd.c new file mode 100644 index 0000000000..fa35446f34 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_gt_sd.c @@ -0,0 +1,40 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_gt_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_gt_td.c new file mode 100644 index 0000000000..e7e1dd442c --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_gt_td.c @@ -0,0 +1,37 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_isinfd128.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_isinfd128.c new file mode 100644 index 0000000000..0c19c5c088 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_isinfd128.c @@ -0,0 +1,37 @@ +/* Copyright (C) 2007-2015 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); +} + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_isinfd32.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_isinfd32.c new file mode 100644 index 0000000000..dce990b318 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_isinfd32.c @@ -0,0 +1,39 @@ +/* Copyright (C) 2007-2015 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); +} + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_isinfd64.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_isinfd64.c new file mode 100644 index 0000000000..7c0f88e3ee --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_isinfd64.c @@ -0,0 +1,37 @@ +/* Copyright (C) 2007-2015 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); +} + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_le_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_le_dd.c new file mode 100644 index 0000000000..011309a291 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_le_dd.c @@ -0,0 +1,41 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_le_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_le_sd.c new file mode 100644 index 0000000000..ca2e504e77 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_le_sd.c @@ -0,0 +1,44 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_le_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_le_td.c new file mode 100644 index 0000000000..ea18db837f --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_le_td.c @@ -0,0 +1,41 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_lt_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_lt_dd.c new file mode 100644 index 0000000000..e4a73669aa --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_lt_dd.c @@ -0,0 +1,37 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_lt_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_lt_sd.c new file mode 100644 index 0000000000..c7ec3acc0d --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_lt_sd.c @@ -0,0 +1,40 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_lt_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_lt_td.c new file mode 100644 index 0000000000..16d221d10b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_lt_td.c @@ -0,0 +1,37 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_mul_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_mul_dd.c new file mode 100644 index 0000000000..76130701c6 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_mul_dd.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_mul_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_mul_sd.c new file mode 100644 index 0000000000..08f1fd072e --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_mul_sd.c @@ -0,0 +1,40 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_mul_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_mul_td.c new file mode 100644 index 0000000000..4a65fa6f14 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_mul_td.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ne_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ne_dd.c new file mode 100644 index 0000000000..84091e2b52 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ne_dd.c @@ -0,0 +1,37 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ne_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ne_sd.c new file mode 100644 index 0000000000..62c50947ed --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ne_sd.c @@ -0,0 +1,40 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ne_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ne_td.c new file mode 100644 index 0000000000..9f2661424f --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_ne_td.c @@ -0,0 +1,37 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_dd.c new file mode 100644 index 0000000000..b980e39ecb --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_dd.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_df.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_df.c new file mode 100644 index 0000000000..fc927a65d1 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_df.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_di.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_di.c new file mode 100644 index 0000000000..37ed95b1bd --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_di.c @@ -0,0 +1,41 @@ +/* Copyright (C) 2007-2015 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); +} + + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_sf.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_sf.c new file mode 100644 index 0000000000..212ae36a08 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_sf.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_si.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_si.c new file mode 100644 index 0000000000..a4a4ab89fd --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_si.c @@ -0,0 +1,41 @@ +/* Copyright (C) 2007-2015 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); +} + + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_td.c new file mode 100644 index 0000000000..c6ac5c0998 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_td.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_tf.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_tf.c new file mode 100644 index 0000000000..063b8e8f13 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_tf.c @@ -0,0 +1,38 @@ +/* Copyright (C) 2007-2015 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); +} +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_udi.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_udi.c new file mode 100644 index 0000000000..73a32dfea9 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_udi.c @@ -0,0 +1,41 @@ +/* Copyright (C) 2007-2015 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); +} + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_usi.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_usi.c new file mode 100644 index 0000000000..1f50e8a919 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_usi.c @@ -0,0 +1,41 @@ +/* Copyright (C) 2007-2015 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); +} + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_xf.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_xf.c new file mode 100644 index 0000000000..5657feee0c --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sd_to_xf.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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" + +XFtype +__bid_extendsdxf (_Decimal32 x) { + XFtype res; + union decimal32 ux; + + ux.d = x; + res = __bid32_to_binary80 (ux.i); + return (res); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sf_to_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sf_to_dd.c new file mode 100644 index 0000000000..7eff3c575a --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sf_to_dd.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sf_to_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sf_to_sd.c new file mode 100644 index 0000000000..1b0ccbd813 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sf_to_sd.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sf_to_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sf_to_td.c new file mode 100644 index 0000000000..1986ea79e7 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_sf_to_td.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_si_to_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_si_to_dd.c new file mode 100644 index 0000000000..f62179763f --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_si_to_dd.c @@ -0,0 +1,34 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_si_to_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_si_to_sd.c new file mode 100644 index 0000000000..d4ead1d0d3 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_si_to_sd.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_si_to_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_si_to_td.c new file mode 100644 index 0000000000..eed6ca7cf1 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_si_to_td.c @@ -0,0 +1,34 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_dd.c new file mode 100644 index 0000000000..5b89887515 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_dd.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_df.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_df.c new file mode 100644 index 0000000000..7e9a425f00 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_df.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_di.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_di.c new file mode 100644 index 0000000000..e6f9c219b0 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_di.c @@ -0,0 +1,39 @@ +/* Copyright (C) 2007-2015 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); +} + + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_sd.c new file mode 100644 index 0000000000..1f4af48d4f --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_sd.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_sf.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_sf.c new file mode 100644 index 0000000000..0867bae3b1 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_sf.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_si.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_si.c new file mode 100644 index 0000000000..ae187aba57 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_si.c @@ -0,0 +1,38 @@ +/* Copyright (C) 2007-2015 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); +} + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_tf.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_tf.c new file mode 100644 index 0000000000..82d91e52ec --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_tf.c @@ -0,0 +1,38 @@ +/* Copyright (C) 2007-2015 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); +} +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_udi.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_udi.c new file mode 100644 index 0000000000..7f6c345c48 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_udi.c @@ -0,0 +1,41 @@ +/* Copyright (C) 2007-2015 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); +} + + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_usi.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_usi.c new file mode 100644 index 0000000000..406198d0d0 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_usi.c @@ -0,0 +1,40 @@ +/* Copyright (C) 2007-2015 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); +} + + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_xf.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_xf.c new file mode 100644 index 0000000000..ae49f4944a --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_td_to_xf.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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" + +XFtype +__bid_trunctdxf (_Decimal128 x) { + XFtype res; + union decimal128 ux; + + ux.d = x; + res = __bid128_to_binary80 (ux.i); + return (res); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_tf_to_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_tf_to_dd.c new file mode 100644 index 0000000000..c4fc63830b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_tf_to_dd.c @@ -0,0 +1,38 @@ +/* Copyright (C) 2007-2015 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); +} +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_tf_to_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_tf_to_sd.c new file mode 100644 index 0000000000..33ef4ea624 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_tf_to_sd.c @@ -0,0 +1,38 @@ +/* Copyright (C) 2007-2015 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); +} +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_tf_to_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_tf_to_td.c new file mode 100644 index 0000000000..7637b2ee4a --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_tf_to_td.c @@ -0,0 +1,38 @@ +/* Copyright (C) 2007-2015 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); +} +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_udi_to_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_udi_to_dd.c new file mode 100644 index 0000000000..4406ec0c27 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_udi_to_dd.c @@ -0,0 +1,35 @@ +/* Copyright (C) 2007-2015 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); +} + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_udi_to_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_udi_to_sd.c new file mode 100644 index 0000000000..37490f2d97 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_udi_to_sd.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_udi_to_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_udi_to_td.c new file mode 100644 index 0000000000..b888a92040 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_udi_to_td.c @@ -0,0 +1,35 @@ +/* Copyright (C) 2007-2015 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); +} + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_unord_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_unord_dd.c new file mode 100644 index 0000000000..6ccc83dd3a --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_unord_dd.c @@ -0,0 +1,37 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_unord_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_unord_sd.c new file mode 100644 index 0000000000..2934b61029 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_unord_sd.c @@ -0,0 +1,41 @@ +/* Copyright (C) 2007-2015 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); +} + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_unord_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_unord_td.c new file mode 100644 index 0000000000..0685d7678b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_unord_td.c @@ -0,0 +1,37 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_usi_to_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_usi_to_dd.c new file mode 100644 index 0000000000..0b2715631c --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_usi_to_dd.c @@ -0,0 +1,35 @@ +/* Copyright (C) 2007-2015 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); +} + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_usi_to_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_usi_to_sd.c new file mode 100644 index 0000000000..0e98862210 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_usi_to_sd.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_usi_to_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_usi_to_td.c new file mode 100644 index 0000000000..0f126523e6 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_usi_to_td.c @@ -0,0 +1,35 @@ +/* Copyright (C) 2007-2015 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); +} + diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_xf_to_dd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_xf_to_dd.c new file mode 100644 index 0000000000..4bd39d71c7 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_xf_to_dd.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2007-2015 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_truncxfdd (XFtype x) { + union decimal64 res; + res.i = __binary80_to_bid64 (x); + return (res.d); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_xf_to_sd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_xf_to_sd.c new file mode 100644 index 0000000000..50f8543daf --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_xf_to_sd.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2007-2015 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_truncxfsd (XFtype x) { + union decimal32 res; + res.i = __binary80_to_bid32 (x); + return (res.d); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/_xf_to_td.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_xf_to_td.c new file mode 100644 index 0000000000..d8b4e41a04 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/_xf_to_td.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2007-2015 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_extendxftd (XFtype x) { + union decimal128 res; + res.i = __binary80_to_bid128 (x); + return (res.d); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128.c new file mode 100644 index 0000000000..a741a3b735 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128.c @@ -0,0 +1,4333 @@ +/* Copyright (C) 2007-2015 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 +}; diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_2_str.h b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_2_str.h new file mode 100644 index 0000000000..be64871787 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_2_str.h @@ -0,0 +1,33 @@ +/* Copyright (C) 2007-2015 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]; diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_2_str_macros.h b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_2_str_macros.h new file mode 100644 index 0000000000..a62bfe0908 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_2_str_macros.h @@ -0,0 +1,149 @@ +/* Copyright (C) 2007-2015 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); \ +} \ +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_2_str_tables.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_2_str_tables.c new file mode 100644 index 0000000000..83e446ef1a --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_2_str_tables.c @@ -0,0 +1,642 @@ +/* Copyright (C) 2007-2015 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} +}; diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_add.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_add.c new file mode 100644 index 0000000000..14a5adf322 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_add.c @@ -0,0 +1,2941 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_compare.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_compare.c new file mode 100644 index 0000000000..74c4f04ea2 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_compare.c @@ -0,0 +1,4346 @@ +/* Copyright (C) 2007-2015 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); +} +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_div.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_div.c new file mode 100644 index 0000000000..c3789affec --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_div.c @@ -0,0 +1,1851 @@ +/* Copyright (C) 2007-2015 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); + +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_fma.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_fma.c new file mode 100644 index 0000000000..d8fcdea1be --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_fma.c @@ -0,0 +1,4458 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_logb.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_logb.c new file mode 100644 index 0000000000..713880d207 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_logb.c @@ -0,0 +1,58 @@ +/* Copyright (C) 2007-2015 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); + +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_minmax.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_minmax.c new file mode 100644 index 0000000000..af4ee9cefc --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_minmax.c @@ -0,0 +1,1095 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_mul.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_mul.c new file mode 100644 index 0000000000..fbb992c5cf --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_mul.c @@ -0,0 +1,423 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_next.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_next.c new file mode 100644 index 0000000000..cebc4e69b2 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_next.c @@ -0,0 +1,643 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_noncomp.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_noncomp.c new file mode 100644 index 0000000000..e6409c06a1 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_noncomp.c @@ -0,0 +1,1200 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_quantize.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_quantize.c new file mode 100644 index 0000000000..c415bf67de --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_quantize.c @@ -0,0 +1,274 @@ +/* Copyright (C) 2007-2015 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); + +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_rem.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_rem.c new file mode 100644 index 0000000000..e095e930e6 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_rem.c @@ -0,0 +1,217 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_round_integral.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_round_integral.c new file mode 100644 index 0000000000..2d4980f76c --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_round_integral.c @@ -0,0 +1,1951 @@ +/* Copyright (C) 2007-2015 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); +} +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_scalb.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_scalb.c new file mode 100644 index 0000000000..dad604568b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_scalb.c @@ -0,0 +1,96 @@ +/* Copyright (C) 2007-2015 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); + +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_sqrt.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_sqrt.c new file mode 100644 index 0000000000..0105e04c21 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_sqrt.c @@ -0,0 +1,564 @@ +/* Copyright (C) 2007-2015 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); + + +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_string.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_string.c new file mode 100644 index 0000000000..a6270fb0c8 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_string.c @@ -0,0 +1,672 @@ +/* Copyright (C) 2007-2015 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); + } +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_int16.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_int16.c new file mode 100644 index 0000000000..6b324a1d24 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_int16.c @@ -0,0 +1,67 @@ +/* Copyright (C) 2007-2015 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) diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_int32.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_int32.c new file mode 100644 index 0000000000..d1ad9f1db6 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_int32.c @@ -0,0 +1,3659 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_int64.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_int64.c new file mode 100644 index 0000000000..8a6050f299 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_int64.c @@ -0,0 +1,2994 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_int8.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_int8.c new file mode 100644 index 0000000000..ebcf8b47ed --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_int8.c @@ -0,0 +1,67 @@ +/* Copyright (C) 2007-2015 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) diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_uint16.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_uint16.c new file mode 100644 index 0000000000..bedce51b57 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_uint16.c @@ -0,0 +1,68 @@ +/* Copyright (C) 2007-2015 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) diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_uint32.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_uint32.c new file mode 100644 index 0000000000..11a0bc5cb2 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_uint32.c @@ -0,0 +1,3588 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_uint64.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_uint64.c new file mode 100644 index 0000000000..89e2c9cfe0 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_uint64.c @@ -0,0 +1,3401 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_uint8.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_uint8.c new file mode 100644 index 0000000000..11ede91d01 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid128_to_uint8.c @@ -0,0 +1,67 @@ +/* Copyright (C) 2007-2015 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) diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid32_to_bid128.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid32_to_bid128.c new file mode 100644 index 0000000000..c8edbddbe6 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid32_to_bid128.c @@ -0,0 +1,264 @@ +/* Copyright (C) 2007-2015 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); + +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid32_to_bid64.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid32_to_bid64.c new file mode 100644 index 0000000000..c475100cc2 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid32_to_bid64.c @@ -0,0 +1,216 @@ +/* Copyright (C) 2007-2015 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); + +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_add.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_add.c new file mode 100644 index 0000000000..e850767a4b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_add.c @@ -0,0 +1,595 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_compare.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_compare.c new file mode 100644 index 0000000000..7c179efcc5 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_compare.c @@ -0,0 +1,3172 @@ +/* Copyright (C) 2007-2015 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); + } +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_div.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_div.c new file mode 100644 index 0000000000..3943451eee --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_div.c @@ -0,0 +1,1795 @@ +/* Copyright (C) 2007-2015 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); + + } + +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_fma.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_fma.c new file mode 100644 index 0000000000..670fccf7bb --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_fma.c @@ -0,0 +1,506 @@ +/* Copyright (C) 2007-2015 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); + } +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_logb.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_logb.c new file mode 100644 index 0000000000..0582e11626 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_logb.c @@ -0,0 +1,68 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_minmax.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_minmax.c new file mode 100644 index 0000000000..4bc7923acf --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_minmax.c @@ -0,0 +1,854 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_mul.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_mul.c new file mode 100644 index 0000000000..d2ac42c5d5 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_mul.c @@ -0,0 +1,374 @@ +/* Copyright (C) 2007-2015 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); + } +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_next.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_next.c new file mode 100644 index 0000000000..9acfd42e12 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_next.c @@ -0,0 +1,481 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_noncomp.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_noncomp.c new file mode 100644 index 0000000000..dc2387f4e1 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_noncomp.c @@ -0,0 +1,954 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_quantize.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_quantize.c new file mode 100644 index 0000000000..92d0c15aec --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_quantize.c @@ -0,0 +1,236 @@ +/* Copyright (C) 2007-2015 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); + +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_rem.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_rem.c new file mode 100644 index 0000000000..f7d892f884 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_rem.c @@ -0,0 +1,228 @@ +/* Copyright (C) 2007-2015 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); + +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_round_integral.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_round_integral.c new file mode 100644 index 0000000000..4ce6f4ddc8 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_round_integral.c @@ -0,0 +1,1221 @@ +/* Copyright (C) 2007-2015 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); + } +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_scalb.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_scalb.c new file mode 100644 index 0000000000..346fe87539 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_scalb.c @@ -0,0 +1,105 @@ +/* Copyright (C) 2007-2015 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); + +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_sqrt.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_sqrt.c new file mode 100644 index 0000000000..5508ad28b9 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_sqrt.c @@ -0,0 +1,552 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_bid128.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_bid128.c new file mode 100644 index 0000000000..a5bcd46fb7 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_bid128.c @@ -0,0 +1,262 @@ +/* Copyright (C) 2007-2015 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); + +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_int16.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_int16.c new file mode 100644 index 0000000000..f476cbe468 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_int16.c @@ -0,0 +1,67 @@ +/* Copyright (C) 2007-2015 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) diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_int32.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_int32.c new file mode 100644 index 0000000000..980b937c7f --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_int32.c @@ -0,0 +1,2587 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_int64.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_int64.c new file mode 100644 index 0000000000..0a1758ebac --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_int64.c @@ -0,0 +1,2329 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_int8.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_int8.c new file mode 100644 index 0000000000..064b13708f --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_int8.c @@ -0,0 +1,69 @@ +/* Copyright (C) 2007-2015 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) diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_uint16.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_uint16.c new file mode 100644 index 0000000000..693bf75379 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_uint16.c @@ -0,0 +1,67 @@ +/* Copyright (C) 2007-2015 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) diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_uint32.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_uint32.c new file mode 100644 index 0000000000..6b3fbec172 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_uint32.c @@ -0,0 +1,2270 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_uint64.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_uint64.c new file mode 100644 index 0000000000..98a8af1ba4 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_uint64.c @@ -0,0 +1,2273 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_uint8.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_uint8.c new file mode 100644 index 0000000000..528e55742b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid64_to_uint8.c @@ -0,0 +1,67 @@ +/* Copyright (C) 2007-2015 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) diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_b2d.h b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_b2d.h new file mode 100644 index 0000000000..983ace94c6 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_b2d.h @@ -0,0 +1,3055 @@ +/* Copyright (C) 2007-2015 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 +}; diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_binarydecimal.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_binarydecimal.c new file mode 100644 index 0000000000..681b109b1f --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_binarydecimal.c @@ -0,0 +1,147479 @@ +/* Copyright (C) 2007-2015 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" + +// Counting leading zeros in an unsigned 32-bit word +// The "_nz" version will return the wrong answer (31) for zero inputs + +#define CLZ32_MASK16 0xFFFF0000ul +#define CLZ32_MASK8 0xFF00FF00ul +#define CLZ32_MASK4 0xF0F0F0F0ul +#define CLZ32_MASK2 0xCCCCCCCCul +#define CLZ32_MASK1 0xAAAAAAAAul + +#define clz32_nz(n) \ + (((((n) & CLZ32_MASK16) <= ((n) & ~CLZ32_MASK16)) ? 16 : 0) + \ + ((((n) & CLZ32_MASK8) <= ((n) & ~CLZ32_MASK8)) ? 8 : 0) + \ + ((((n) & CLZ32_MASK4) <= ((n) & ~CLZ32_MASK4)) ? 4 : 0) + \ + ((((n) & CLZ32_MASK2) <= ((n) & ~CLZ32_MASK2)) ? 2 : 0) + \ + ((((n) & CLZ32_MASK1) <= ((n) & ~CLZ32_MASK1)) ? 1 : 0)) + +#define clz32(n) (((n)==0) ? 32 : clz32_nz(n)) + +// Counting trailing zeros in an unsigned 32-bit word +// The ctz32_1bit version is for a single bit + +#define ctz32_1bit(n) \ + ((((n) & ~CLZ32_MASK16) ? 0 : 16) + \ + (((n) & ~CLZ32_MASK8) ? 0 : 8) + \ + (((n) & ~CLZ32_MASK4) ? 0 : 4) + \ + (((n) & ~CLZ32_MASK2) ? 0 : 2) + \ + (((n) & ~CLZ32_MASK1) ? 0 : 1)) + +#define ctz32(n) (((n) == 0) ? 32 : ctz32_1bit((n) & -(n))) + +// Counting leading zeros in an unsigned 64-bit word +// The "_nz" version will return the wrong answer (63) for zero inputs + +#define CLZ64_MASK32 0xFFFFFFFF00000000ull +#define CLZ64_MASK16 0xFFFF0000FFFF0000ull +#define CLZ64_MASK8 0xFF00FF00FF00FF00ull +#define CLZ64_MASK4 0xF0F0F0F0F0F0F0F0ull +#define CLZ64_MASK2 0xCCCCCCCCCCCCCCCCull +#define CLZ64_MASK1 0xAAAAAAAAAAAAAAAAull + +#define clz64_nz(n) \ + (((((n) & CLZ64_MASK32) <= ((n) & ~CLZ64_MASK32)) ? 32 : 0) + \ + ((((n) & CLZ64_MASK16) <= ((n) & ~CLZ64_MASK16)) ? 16 : 0) + \ + ((((n) & CLZ64_MASK8) <= ((n) & ~CLZ64_MASK8)) ? 8 : 0) + \ + ((((n) & CLZ64_MASK4) <= ((n) & ~CLZ64_MASK4)) ? 4 : 0) + \ + ((((n) & CLZ64_MASK2) <= ((n) & ~CLZ64_MASK2)) ? 2 : 0) + \ + ((((n) & CLZ64_MASK1) <= ((n) & ~CLZ64_MASK1)) ? 1 : 0)) \ + +#define clz64(n) (((n)==0) ? 64 : clz64_nz(n)) + +// Counting trailing zeros in an unsigned 64-bit word +// The ctz64_1bit version is for a single bit + +#define ctz64_1bit(n) \ + ((((n) & ~CLZ64_MASK32) ? 0 : 32) + \ + (((n) & ~CLZ64_MASK16) ? 0 : 16) + \ + (((n) & ~CLZ64_MASK8) ? 0 : 8) + \ + (((n) & ~CLZ64_MASK4) ? 0 : 4) + \ + (((n) & ~CLZ64_MASK2) ? 0 : 2) + \ + (((n) & ~CLZ64_MASK1) ? 0 : 1)) + +#define ctz64(n) (((n) == 0) ? 64 : ctz64_1bit((n) & -(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; \ + *pfpsf |= DENORMAL_EXCEPTION; \ + } \ + else if (e == ((1ull<<8)-1)) \ + { if (c == 0) inf; \ + if ((c&(1ul<<22))==0) *pfpsf |= 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; \ + *pfpsf |= DENORMAL_EXCEPTION; \ + } \ + else if (e == ((1ull<<11)-1)) \ + { if (c == 0) inf; \ + if ((c&(1ull<<51))==0) *pfpsf |= 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; \ + *pfpsf |= DENORMAL_EXCEPTION; \ + } \ + else if (e == ((1ull<<15)-1)) \ + { if ((c & ((1ull<<63)-1)) == 0) inf; \ + if ((c&(1ull<<62))==0) *pfpsf |= 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; \ + *pfpsf |= DENORMAL_EXCEPTION; \ + } \ + else if (e == ((1ull<<15)-1)) \ + { if ((c_hi == 0) && (c_lo == 0)) inf; \ + if ((c_hi&(1ull<<47))==0) *pfpsf |= 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) *pfpsf |= 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) *pfpsf |= 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) \ + *pfpsf |= 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 + + 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) { + *pfpsf |= (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)))) + *pfpsf |= UNDERFLOW_EXCEPTION; + } + } +// Check for overflow + + if (e_out >= 255) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (e_out == 0) + *pfpsf |= 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 + + 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) { + *pfpsf |= (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)))) + *pfpsf |= UNDERFLOW_EXCEPTION; + } + } +// Check for overflow + + if (e_out >= 255) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (e_out == 0) + *pfpsf |= 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 + + 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) { + *pfpsf |= (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)))) + *pfpsf |= UNDERFLOW_EXCEPTION; + } + } +// Check for overflow + + if (e_out >= 255) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (e_out == 0) + *pfpsf |= 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; + + 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) { + *pfpsf |= (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) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (e_out == 0) + *pfpsf |= 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; + + 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) { + *pfpsf |= (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)))) + + *pfpsf |= UNDERFLOW_EXCEPTION; + } + } +// Check for overflow + + if (e_out >= 2047) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (e_out == 0) + *pfpsf |= 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; + + 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) { + *pfpsf |= (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)))) + *pfpsf |= UNDERFLOW_EXCEPTION; + } + } +// Check for overflow + + if (e_out >= 2047) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (e_out == 0) + *pfpsf |= 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 + + 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) { + *pfpsf |= (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) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (e_out == 0) + *pfpsf |= 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 + + 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) { + *pfpsf |= (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) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (e_out == 0) + *pfpsf |= 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 + + 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) { + *pfpsf |= (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)))) + *pfpsf |= UNDERFLOW_EXCEPTION; + } + } +// Check for overflow + + if (e_out >= 32767) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (e_out == 0) + *pfpsf |= 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 + + 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) { + *pfpsf |= (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) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (e_out == 0) + *pfpsf |= 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 + + 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) { + *pfpsf |= (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) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (e_out == 0) + *pfpsf |= 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 + +// 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) { + *pfpsf |= (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)))) + *pfpsf |= UNDERFLOW_EXCEPTION; + } + } + } +// Check for overflow + + if (e_out >= 32767) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (e_out == 0) + *pfpsf |= 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) { + *pfpsf |= (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) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (c_prov < 1000000ull) + *pfpsf |= 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) { + *pfpsf |= (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))) + *pfpsf |= UNDERFLOW_EXCEPTION; + } + } +// Check for overflow + + if (e_out > 90 + 101) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (c_prov < 1000000ull) + *pfpsf |= 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) { + *pfpsf |= (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))) + *pfpsf |= UNDERFLOW_EXCEPTION; + } + } +// Check for overflow + + if (e_out > 90 + 101) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (c_prov < 1000000ull) + *pfpsf |= 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) { + *pfpsf |= (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))) + *pfpsf |= UNDERFLOW_EXCEPTION; + } + } +// Check for overflow + + if (e_out > 90 + 101) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (c_prov < 1000000ull) + *pfpsf |= 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) { + *pfpsf |= (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) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (c_prov < 1000000000000000ull) + *pfpsf |= 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) { + *pfpsf |= (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) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (c_prov < 1000000000000000ull) + *pfpsf |= 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) { + *pfpsf |= (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))) + *pfpsf |= UNDERFLOW_EXCEPTION; + } + } +// Check for overflow + + if (e_out > 369 + 398) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (c_prov < 1000000000000000ull) + *pfpsf |= 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) { + *pfpsf |= (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))) + *pfpsf |= UNDERFLOW_EXCEPTION; + } + } +// Check for overflow + + if (e_out > 369 + 398) { + *pfpsf |= (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)) { + *pfpsf |= INEXACT_EXCEPTION; + if (c_prov < 1000000000000000ull) + *pfpsf |= 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)) + *pfpsf |= 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)) + *pfpsf |= 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)) + *pfpsf |= 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)) + *pfpsf |= INEXACT_EXCEPTION; + +// Package up the result + + return_bid128 (s, e_out, c_prov_hi, c_prov_lo); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_conf.h b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_conf.h new file mode 100644 index 0000000000..676b098509 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_conf.h @@ -0,0 +1,1171 @@ +/* Copyright (C) 2007-2015 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 */ + +// 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 diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_convert_data.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_convert_data.c new file mode 100644 index 0000000000..322349a36a --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_convert_data.c @@ -0,0 +1,2108 @@ +/* Copyright (C) 2007-2015 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} + , +}; diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_decimal_data.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_decimal_data.c new file mode 100644 index 0000000000..67431f47fe --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_decimal_data.c @@ -0,0 +1,1293 @@ +/* Copyright (C) 2007-2015 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 +}; diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_decimal_globals.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_decimal_globals.c new file mode 100644 index 0000000000..d576f2044b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_decimal_globals.c @@ -0,0 +1,100 @@ +/* Copyright (C) 2007-2015 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; +} +#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 diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_div_macros.h b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_div_macros.h new file mode 100644 index 0000000000..7da25da970 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_div_macros.h @@ -0,0 +1,540 @@ +/* Copyright (C) 2007-2015 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 diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_dpd.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_dpd.c new file mode 100644 index 0000000000..7c36c0c13d --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_dpd.c @@ -0,0 +1,782 @@ +/* Copyright (C) 2007-2015 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; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_flag_operations.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_flag_operations.c new file mode 100644 index 0000000000..449a4ab0c5 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_flag_operations.c @@ -0,0 +1,345 @@ +/* Copyright (C) 2007-2015 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 diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_from_int.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_from_int.c new file mode 100644 index 0000000000..b115fc39ce --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_from_int.c @@ -0,0 +1,349 @@ +/* Copyright (C) 2007-2015 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); +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_functions.h b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_functions.h new file mode 100644 index 0000000000..14c9869036 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_functions.h @@ -0,0 +1,3279 @@ +/* Copyright (C) 2007-2015 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 (16) + 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); diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_gcc_intrinsics.h b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_gcc_intrinsics.h new file mode 100644 index 0000000000..f75e295584 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_gcc_intrinsics.h @@ -0,0 +1,286 @@ +/* Copyright (C) 2007-2015 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_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_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. */ + +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 */ + +#ifndef BID_HAS_XF_MODE +#define BID_HAS_XF_MODE 1 +#endif + +#ifndef BID_HAS_TF_MODE +#if defined __i386__ +#define BID_HAS_TF_MODE 0 +#else +#define BID_HAS_TF_MODE 1 +#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 /* IN_LIBGCC2 */ + +#if BID_HAS_TF_MODE +#ifndef TFtype +#define TFtype __float128 +#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); +extern _Decimal64 __bid_subdd3 (_Decimal64, _Decimal64); +extern _Decimal32 __bid_addsd3 (_Decimal32, _Decimal32); +extern _Decimal32 __bid_subsd3 (_Decimal32, _Decimal32); +extern _Decimal128 __bid_addtd3 (_Decimal128, _Decimal128); +extern _Decimal128 __bid_subtd3 (_Decimal128, _Decimal128); +extern DFtype __bid_truncdddf (_Decimal64); +extern DItype __bid_fixdddi (_Decimal64); +extern _Decimal32 __bid_truncddsd2 (_Decimal64); +extern SFtype __bid_truncddsf (_Decimal64); +extern SItype __bid_fixddsi (_Decimal64); +extern _Decimal128 __bid_extendddtd2 (_Decimal64); +#if BID_HAS_TF_MODE +extern TFtype __bid_extendddtf (_Decimal64); +#endif +extern UDItype __bid_fixunsdddi (_Decimal64); +extern USItype __bid_fixunsddsi (_Decimal64); +#if BID_HAS_XF_MODE +extern XFtype __bid_extendddxf (_Decimal64); +#endif +extern _Decimal64 __bid_extenddfdd (DFtype); +extern _Decimal32 __bid_truncdfsd (DFtype); +extern _Decimal128 __bid_extenddftd (DFtype); +extern _Decimal64 __bid_floatdidd (DItype); +extern _Decimal32 __bid_floatdisd (DItype); +extern _Decimal128 __bid_floatditd (DItype); +extern _Decimal64 __bid_divdd3 (_Decimal64, _Decimal64); +extern _Decimal32 __bid_divsd3 (_Decimal32, _Decimal32); +extern _Decimal128 __bid_divtd3 (_Decimal128, _Decimal128); +extern CMPtype __bid_eqdd2 (_Decimal64, _Decimal64); +extern CMPtype __bid_eqsd2 (_Decimal32, _Decimal32); +extern CMPtype __bid_eqtd2 (_Decimal128, _Decimal128); +extern CMPtype __bid_gedd2 (_Decimal64, _Decimal64); +extern CMPtype __bid_gesd2 (_Decimal32, _Decimal32); +extern CMPtype __bid_getd2 (_Decimal128, _Decimal128); +extern CMPtype __bid_gtdd2 (_Decimal64, _Decimal64); +extern CMPtype __bid_gtsd2 (_Decimal32, _Decimal32); +extern CMPtype __bid_gttd2 (_Decimal128, _Decimal128); +extern CMPtype __bid_ledd2 (_Decimal64, _Decimal64); +extern CMPtype __bid_lesd2 (_Decimal32, _Decimal32); +extern CMPtype __bid_letd2 (_Decimal128, _Decimal128); +extern CMPtype __bid_ltdd2 (_Decimal64, _Decimal64); +extern CMPtype __bid_ltsd2 (_Decimal32, _Decimal32); +extern CMPtype __bid_lttd2 (_Decimal128, _Decimal128); +extern CMPtype __bid_nedd2 (_Decimal64, _Decimal64); +extern CMPtype __bid_nesd2 (_Decimal32, _Decimal32); +extern CMPtype __bid_netd2 (_Decimal128, _Decimal128); +extern CMPtype __bid_unorddd2 (_Decimal64, _Decimal64); +extern CMPtype __bid_unordsd2 (_Decimal32, _Decimal32); +extern CMPtype __bid_unordtd2 (_Decimal128, _Decimal128); +extern _Decimal64 __bid_muldd3 (_Decimal64, _Decimal64); +extern _Decimal32 __bid_mulsd3 (_Decimal32, _Decimal32); +extern _Decimal128 __bid_multd3 (_Decimal128, _Decimal128); +extern _Decimal64 __bid_extendsddd2 (_Decimal32); +extern DFtype __bid_extendsddf (_Decimal32); +extern DItype __bid_fixsddi (_Decimal32); +extern SFtype __bid_truncsdsf (_Decimal32); +extern SItype __bid_fixsdsi (_Decimal32); +extern _Decimal128 __bid_extendsdtd2 (_Decimal32); +#if BID_HAS_TF_MODE +extern TFtype __bid_extendsdtf (_Decimal32); +#endif +extern UDItype __bid_fixunssddi (_Decimal32); +extern USItype __bid_fixunssdsi (_Decimal32); +#if BID_HAS_XF_MODE +extern XFtype __bid_extendsdxf (_Decimal32); +#endif +extern _Decimal64 __bid_extendsfdd (SFtype); +extern _Decimal32 __bid_extendsfsd (SFtype); +extern _Decimal128 __bid_extendsftd (SFtype); +extern _Decimal64 __bid_floatsidd (SItype); +extern _Decimal32 __bid_floatsisd (SItype); +extern _Decimal128 __bid_floatsitd (SItype); +extern _Decimal64 __bid_trunctddd2 (_Decimal128); +extern DFtype __bid_trunctddf (_Decimal128); +extern DItype __bid_fixtddi (_Decimal128); +extern _Decimal32 __bid_trunctdsd2 (_Decimal128); +extern SFtype __bid_trunctdsf (_Decimal128); +extern SItype __bid_fixtdsi (_Decimal128); +#if BID_HAS_TF_MODE +extern TFtype __bid_trunctdtf (_Decimal128); +#endif +extern UDItype __bid_fixunstddi (_Decimal128); +extern USItype __bid_fixunstdsi (_Decimal128); +#if BID_HAS_XF_MODE +extern XFtype __bid_trunctdxf (_Decimal128); +#endif +#if BID_HAS_TF_MODE +extern _Decimal64 __bid_trunctfdd (TFtype); +extern _Decimal32 __bid_trunctfsd (TFtype); +extern _Decimal128 __bid_extendtftd (TFtype); +#endif +extern _Decimal64 __bid_floatunsdidd (UDItype); +extern _Decimal32 __bid_floatunsdisd (UDItype); +extern _Decimal128 __bid_floatunsditd (UDItype); +extern _Decimal64 __bid_floatunssidd (USItype); +extern _Decimal32 __bid_floatunssisd (USItype); +extern _Decimal128 __bid_floatunssitd (USItype); +#if BID_HAS_XF_MODE +extern _Decimal64 __bid_truncxfdd (XFtype); +extern _Decimal32 __bid_truncxfsd (XFtype); +extern _Decimal128 __bid_extendxftd (XFtype); +#endif +extern int isinfd32 (_Decimal32); +extern int isinfd64 (_Decimal64); +extern int isinfd128 (_Decimal128); +#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 */ diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_inline_add.h b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_inline_add.h new file mode 100644 index 0000000000..03bb65156b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_inline_add.h @@ -0,0 +1,1253 @@ +/* Copyright (C) 2007-2015 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 diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_internal.h b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_internal.h new file mode 100644 index 0000000000..7a9f447e59 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_internal.h @@ -0,0 +1,2607 @@ +/* Copyright (C) 2007-2015 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 +///////////////////////////////////////////// +#define __set_status_flags(fpsc, status) *(fpsc) |= status +#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); + } + + expon = 0; + +#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); + } + + expon = 0; + +#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 diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_round.c b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_round.c new file mode 100644 index 0000000000..0e11cdc2a1 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_round.c @@ -0,0 +1,1049 @@ +/* Copyright (C) 2007-2015 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]; + +} diff --git a/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_sqrt_macros.h b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_sqrt_macros.h new file mode 100644 index 0000000000..268e6be1e4 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/libbid/bid_sqrt_macros.h @@ -0,0 +1,331 @@ +/* Copyright (C) 2007-2015 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 diff --git a/contrib/toolchain/gcc/5x/libgcc/config/no-sfp-machine.h b/contrib/toolchain/gcc/5x/libgcc/config/no-sfp-machine.h new file mode 100644 index 0000000000..8f7341d4f9 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/no-sfp-machine.h @@ -0,0 +1 @@ +/* Dummy sfp-machine.h header for targets that don't need one. */ diff --git a/contrib/toolchain/gcc/5x/libgcc/config/no-unwind.h b/contrib/toolchain/gcc/5x/libgcc/config/no-unwind.h new file mode 100644 index 0000000000..0ecd78a60d --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/config/no-unwind.h @@ -0,0 +1,2 @@ +/* Dummy header for targets without a definition of + MD_FALLBACK_FRAME_STATE_FOR. */ diff --git a/contrib/toolchain/gcc/5x/libgcc/crtstuff.c b/contrib/toolchain/gcc/5x/libgcc/crtstuff.c new file mode 100644 index 0000000000..f37e46486d --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/crtstuff.c @@ -0,0 +1,774 @@ +/* Specialized bits of code needed to support construction and + destruction of file-scope objects in C++ code. + Copyright (C) 1991-2015 Free Software Foundation, Inc. + Contributed by Ron Guilmette (rfg@monkeys.com). + +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 file is a bit like libgcc2.c in that it is compiled + multiple times and yields multiple .o files. + + This file is useful on target machines where the object file format + supports multiple "user-defined" sections (e.g. COFF, ELF, ROSE). On + such systems, this file allows us to avoid running collect (or any + other such slow and painful kludge). Additionally, if the target + system supports a .init section, this file allows us to support the + linking of C++ code with a non-C++ main program. + + Note that if INIT_SECTION_ASM_OP is defined in the tm.h file, then + this file *will* make use of the .init section. If that symbol is + not defined however, then the .init section will not be used. + + Currently, only ELF and COFF are supported. It is likely however that + ROSE could also be supported, if someone was willing to do the work to + make whatever (small?) adaptations are needed. (Some work may be + needed on the ROSE assembler and linker also.) + + This file must be compiled with gcc. */ + +/* Target machine header files require this define. */ +#define IN_LIBGCC2 + +/* FIXME: Including auto-host is incorrect, but until we have + identified the set of defines that need to go into auto-target.h, + this will have to do. */ +#include "auto-host.h" +#undef caddr_t +#undef pid_t +#undef rlim_t +#undef ssize_t +#undef vfork +#include "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" +#include "unwind-dw2-fde.h" + +#ifndef FORCE_CODE_SECTION_ALIGN +# define FORCE_CODE_SECTION_ALIGN +#endif + +#ifndef CRT_CALL_STATIC_FUNCTION +# define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \ +static void __attribute__((__used__)) \ +call_ ## FUNC (void) \ +{ \ + asm (SECTION_OP); \ + FUNC (); \ + FORCE_CODE_SECTION_ALIGN \ + asm (__LIBGCC_TEXT_SECTION_ASM_OP__); \ +} +#endif + +#if defined(TARGET_DL_ITERATE_PHDR) && \ + (defined(__DragonFly__) || defined(__FreeBSD__)) +#define BSD_DL_ITERATE_PHDR_AVAILABLE +#endif + +#if defined(OBJECT_FORMAT_ELF) \ + && !defined(OBJECT_FORMAT_FLAT) \ + && defined(HAVE_LD_EH_FRAME_HDR) \ + && !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \ + && defined(BSD_DL_ITERATE_PHDR_AVAILABLE) +#include +# define USE_PT_GNU_EH_FRAME +#endif + +#if defined(OBJECT_FORMAT_ELF) \ + && !defined(OBJECT_FORMAT_FLAT) \ + && defined(HAVE_LD_EH_FRAME_HDR) && defined(TARGET_DL_ITERATE_PHDR) \ + && !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \ + && defined(__sun__) && defined(__svr4__) +#include +# define USE_PT_GNU_EH_FRAME +#endif + +#if defined(OBJECT_FORMAT_ELF) \ + && !defined(OBJECT_FORMAT_FLAT) \ + && defined(HAVE_LD_EH_FRAME_HDR) \ + && !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \ + && defined(__GLIBC__) && __GLIBC__ >= 2 +#include +/* uClibc pretends to be glibc 2.2 and DT_CONFIG is defined in its link.h. + But it doesn't use PT_GNU_EH_FRAME ELF segment currently. */ +# if !defined(__UCLIBC__) \ + && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \ + || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG))) +# define USE_PT_GNU_EH_FRAME +# endif +#endif + +#if defined(OBJECT_FORMAT_ELF) \ + && !defined(OBJECT_FORMAT_FLAT) \ + && defined(HAVE_LD_EH_FRAME_HDR) \ + && !defined(CRTSTUFFT_O) \ + && defined(inhibit_libc) \ + && (defined(__GLIBC__) || defined(__gnu_linux__) || defined(__GNU__)) +/* On systems using glibc, an inhibit_libc build of libgcc is only + part of a bootstrap process. Build the same crt*.o as would be + built with headers present, so that it is not necessary to build + glibc more than once for the bootstrap to converge. */ +# define USE_PT_GNU_EH_FRAME +#endif + +#ifdef USE_EH_FRAME_REGISTRY_ALWAYS +# ifndef __LIBGCC_EH_FRAME_SECTION_NAME__ +# error "Can't use explicit exception-frame-registration without __LIBGCC_EH_FRAME_SECTION_NAME__" +# endif +#endif +#if defined(__LIBGCC_EH_FRAME_SECTION_NAME__) && (!defined(USE_PT_GNU_EH_FRAME) || defined(USE_EH_FRAME_REGISTRY_ALWAYS)) +# define USE_EH_FRAME_REGISTRY +#endif +#if defined(__LIBGCC_EH_FRAME_SECTION_NAME__) \ + && __LIBGCC_EH_TABLES_CAN_BE_READ_ONLY__ +# define EH_FRAME_SECTION_CONST const +#else +# define EH_FRAME_SECTION_CONST +#endif + +#if !defined(DTOR_LIST_END) && defined(OBJECT_FORMAT_ELF) \ + && defined(HAVE_GAS_HIDDEN) && !defined(FINI_ARRAY_SECTION_ASM_OP) +# define HIDDEN_DTOR_LIST_END +#endif + +#if !defined(USE_TM_CLONE_REGISTRY) && defined(OBJECT_FORMAT_ELF) +# define USE_TM_CLONE_REGISTRY 1 +#endif + +/* We do not want to add the weak attribute to the declarations of these + routines in unwind-dw2-fde.h because that will cause the definition of + these symbols to be weak as well. + + This exposes a core issue, how to handle creating weak references vs + how to create weak definitions. Either we have to have the definition + of TARGET_WEAK_ATTRIBUTE be conditional in the shared header files or + have a second declaration if we want a function's references to be weak, + but not its definition. + + Making TARGET_WEAK_ATTRIBUTE conditional seems like a good solution until + one thinks about scaling to larger problems -- i.e., the condition under + which TARGET_WEAK_ATTRIBUTE is active will eventually get far too + complicated. + + So, we take an approach similar to #pragma weak -- we have a second + declaration for functions that we want to have weak references. + + Neither way is particularly good. */ + +/* References to __register_frame_info and __deregister_frame_info should + be weak in this file if at all possible. */ +extern void __register_frame_info (const void *, struct object *) + TARGET_ATTRIBUTE_WEAK; +extern void __register_frame_info_bases (const void *, struct object *, + void *, void *) + TARGET_ATTRIBUTE_WEAK; +extern void *__deregister_frame_info (const void *) + TARGET_ATTRIBUTE_WEAK; +extern void *__deregister_frame_info_bases (const void *) + TARGET_ATTRIBUTE_WEAK; +extern void __do_global_ctors_1 (void); + +/* Likewise for _Jv_RegisterClasses. */ +extern void _Jv_RegisterClasses (void *) TARGET_ATTRIBUTE_WEAK; + +/* Likewise for transactional memory clone tables. */ +extern void _ITM_registerTMCloneTable (void *, size_t) TARGET_ATTRIBUTE_WEAK; +extern void _ITM_deregisterTMCloneTable (void *) TARGET_ATTRIBUTE_WEAK; + +#ifdef OBJECT_FORMAT_ELF + +/* Declare a pointer to void function type. */ +typedef void (*func_ptr) (void); +#define STATIC static + +#else /* OBJECT_FORMAT_ELF */ + +#include "gbl-ctors.h" + +#define STATIC + +#endif /* OBJECT_FORMAT_ELF */ + +#ifdef CRT_BEGIN + +/* NOTE: In order to be able to support SVR4 shared libraries, we arrange + to have one set of symbols { __CTOR_LIST__, __DTOR_LIST__, __CTOR_END__, + __DTOR_END__ } per root executable and also one set of these symbols + per shared library. So in any given whole process image, we may have + multiple definitions of each of these symbols. In order to prevent + these definitions from conflicting with one another, and in order to + ensure that the proper lists are used for the initialization/finalization + of each individual shared library (respectively), we give these symbols + only internal (i.e. `static') linkage, and we also make it a point to + refer to only the __CTOR_END__ symbol in crtend.o and the __DTOR_LIST__ + symbol in crtbegin.o, where they are defined. */ + +/* No need for .ctors/.dtors section if linker can place them in + .init_array/.fini_array section. */ +#ifndef USE_INITFINI_ARRAY +/* The -1 is a flag to __do_global_[cd]tors indicating that this table + does not start with a count of elements. */ +#ifdef CTOR_LIST_BEGIN +CTOR_LIST_BEGIN; +#elif defined(__LIBGCC_CTORS_SECTION_ASM_OP__) +/* Hack: force cc1 to switch to .data section early, so that assembling + __CTOR_LIST__ does not undo our behind-the-back change to .ctors. */ +static func_ptr force_to_data[1] __attribute__ ((__used__)) = { }; +asm (__LIBGCC_CTORS_SECTION_ASM_OP__); +STATIC func_ptr __CTOR_LIST__[1] + __attribute__ ((__used__, aligned(sizeof(func_ptr)))) + = { (func_ptr) (-1) }; +#else +STATIC func_ptr __CTOR_LIST__[1] + __attribute__ ((__used__, section(".ctors"), aligned(sizeof(func_ptr)))) + = { (func_ptr) (-1) }; +#endif /* __CTOR_LIST__ alternatives */ + +#ifdef DTOR_LIST_BEGIN +DTOR_LIST_BEGIN; +#elif defined(__LIBGCC_DTORS_SECTION_ASM_OP__) +asm (__LIBGCC_DTORS_SECTION_ASM_OP__); +STATIC func_ptr __DTOR_LIST__[1] + __attribute__ ((aligned(sizeof(func_ptr)))) + = { (func_ptr) (-1) }; +#else +STATIC func_ptr __DTOR_LIST__[1] + __attribute__((section(".dtors"), aligned(sizeof(func_ptr)))) + = { (func_ptr) (-1) }; +#endif /* __DTOR_LIST__ alternatives */ +#endif /* USE_INITFINI_ARRAY */ + +#ifdef USE_EH_FRAME_REGISTRY +/* Stick a label at the beginning of the frame unwind info so we can register + and deregister it with the exception handling library code. */ +STATIC EH_FRAME_SECTION_CONST char __EH_FRAME_BEGIN__[] + __attribute__((section(__LIBGCC_EH_FRAME_SECTION_NAME__), aligned(4))) + = { }; +#endif /* USE_EH_FRAME_REGISTRY */ + +#ifdef __LIBGCC_JCR_SECTION_NAME__ +/* Stick a label at the beginning of the java class registration info + so we can register them properly. */ +STATIC void *__JCR_LIST__[] + __attribute__ ((used, section(__LIBGCC_JCR_SECTION_NAME__), + aligned(sizeof(void*)))) + = { }; +#endif /* __LIBGCC_JCR_SECTION_NAME__ */ + +#if USE_TM_CLONE_REGISTRY +STATIC func_ptr __TMC_LIST__[] + __attribute__((used, section(".tm_clone_table"), aligned(sizeof(void*)))) + = { }; +# ifdef HAVE_GAS_HIDDEN +extern func_ptr __TMC_END__[] __attribute__((__visibility__ ("hidden"))); +# endif + +static inline void +deregister_tm_clones (void) +{ + void (*fn) (void *); + +#ifdef HAVE_GAS_HIDDEN + if (__TMC_END__ - __TMC_LIST__ == 0) + return; +#else + if (__TMC_LIST__[0] == NULL) + return; +#endif + + fn = _ITM_deregisterTMCloneTable; + __asm ("" : "+r" (fn)); + if (fn) + fn (__TMC_LIST__); +} + +static inline void +register_tm_clones (void) +{ + void (*fn) (void *, size_t); + size_t size; + +#ifdef HAVE_GAS_HIDDEN + size = (__TMC_END__ - __TMC_LIST__) / 2; +#else + for (size = 0; __TMC_LIST__[size * 2] != NULL; size++) + continue; +#endif + if (size == 0) + return; + + fn = _ITM_registerTMCloneTable; + __asm ("" : "+r" (fn)); + if (fn) + fn (__TMC_LIST__, size); +} +#endif /* USE_TM_CLONE_REGISTRY */ + +#if defined(__LIBGCC_INIT_SECTION_ASM_OP__) \ + || defined(__LIBGCC_INIT_ARRAY_SECTION_ASM_OP__) + +#ifdef OBJECT_FORMAT_ELF + +/* Declare the __dso_handle variable. It should have a unique value + in every shared-object; in a main program its value is zero. The + object should in any case be protected. This means the instance + in one DSO or the main program is not used in another object. The + dynamic linker takes care of this. */ + +#ifdef TARGET_LIBGCC_SDATA_SECTION +extern void *__dso_handle __attribute__ ((__section__ (TARGET_LIBGCC_SDATA_SECTION))); +#endif +#ifdef HAVE_GAS_HIDDEN +extern void *__dso_handle __attribute__ ((__visibility__ ("hidden"))); +#endif +#ifdef CRTSTUFFS_O +void *__dso_handle = &__dso_handle; +#else +void *__dso_handle = 0; +#endif + +/* The __cxa_finalize function may not be available so we use only a + weak declaration. */ +extern void __cxa_finalize (void *) TARGET_ATTRIBUTE_WEAK; + +/* Run all the global destructors on exit from the program. */ + +/* Some systems place the number of pointers in the first word of the + table. On SVR4 however, that word is -1. In all cases, the table is + null-terminated. On SVR4, we start from the beginning of the list and + invoke each per-compilation-unit destructor routine in order + until we find that null. + + Note that this function MUST be static. There will be one of these + functions in each root executable and one in each shared library, but + although they all have the same code, each one is unique in that it + refers to one particular associated `__DTOR_LIST__' which belongs to the + same particular root executable or shared library file. + + On some systems, this routine is run more than once from the .fini, + when exit is called recursively, so we arrange to remember where in + the list we left off processing, and we resume at that point, + should we be re-invoked. */ + +static void __attribute__((used)) +__do_global_dtors_aux (void) +{ + static _Bool completed; + + if (__builtin_expect (completed, 0)) + return; + +#ifdef CRTSTUFFS_O + if (__cxa_finalize) + __cxa_finalize (__dso_handle); +#endif + +#ifdef FINI_ARRAY_SECTION_ASM_OP + /* If we are using .fini_array then destructors will be run via that + mechanism. */ +#elif defined(HIDDEN_DTOR_LIST_END) + { + /* Safer version that makes sure only .dtors function pointers are + called even if the static variable is maliciously changed. */ + extern func_ptr __DTOR_END__[] __attribute__((visibility ("hidden"))); + static size_t dtor_idx; + const size_t max_idx = __DTOR_END__ - __DTOR_LIST__ - 1; + func_ptr *dtor_list; + + __asm ("" : "=g" (dtor_list) : "0" (__DTOR_LIST__)); + while (dtor_idx < max_idx) + dtor_list[++dtor_idx] (); + } +#else /* !defined (FINI_ARRAY_SECTION_ASM_OP) */ + { + static func_ptr *p = __DTOR_LIST__ + 1; + func_ptr f; + + while ((f = *p)) + { + p++; + f (); + } + } +#endif /* !defined(FINI_ARRAY_SECTION_ASM_OP) */ + +#if USE_TM_CLONE_REGISTRY + deregister_tm_clones (); +#endif /* USE_TM_CLONE_REGISTRY */ + +#ifdef USE_EH_FRAME_REGISTRY +#ifdef CRT_GET_RFIB_DATA + /* If we used the new __register_frame_info_bases interface, + make sure that we deregister from the same place. */ + if (__deregister_frame_info_bases) + __deregister_frame_info_bases (__EH_FRAME_BEGIN__); +#else + if (__deregister_frame_info) + __deregister_frame_info (__EH_FRAME_BEGIN__); +#endif +#endif + + completed = 1; +} + +/* Stick a call to __do_global_dtors_aux into the .fini section. */ +#ifdef FINI_SECTION_ASM_OP +CRT_CALL_STATIC_FUNCTION (FINI_SECTION_ASM_OP, __do_global_dtors_aux) +#elif defined (FINI_ARRAY_SECTION_ASM_OP) +static func_ptr __do_global_dtors_aux_fini_array_entry[] + __attribute__ ((__used__, section(".fini_array"), aligned(sizeof(func_ptr)))) + = { __do_global_dtors_aux }; +#else /* !FINI_SECTION_ASM_OP && !FINI_ARRAY_SECTION_ASM_OP */ +static void __attribute__((used)) +__do_global_dtors_aux_1 (void) +{ + atexit (__do_global_dtors_aux); +} +CRT_CALL_STATIC_FUNCTION (__LIBGCC_INIT_SECTION_ASM_OP__, + __do_global_dtors_aux_1) +#endif + +#if defined(USE_EH_FRAME_REGISTRY) \ + || defined(__LIBGCC_JCR_SECTION_NAME__) \ + || defined(USE_TM_CLONE_REGISTRY) +/* Stick a call to __register_frame_info into the .init section. For some + reason calls with no arguments work more reliably in .init, so stick the + call in another function. */ + +static void __attribute__((used)) +frame_dummy (void) +{ +#ifdef USE_EH_FRAME_REGISTRY + static struct object object; +#ifdef CRT_GET_RFIB_DATA + void *tbase, *dbase; + tbase = 0; + CRT_GET_RFIB_DATA (dbase); + if (__register_frame_info_bases) + __register_frame_info_bases (__EH_FRAME_BEGIN__, &object, tbase, dbase); +#else + if (__register_frame_info) + __register_frame_info (__EH_FRAME_BEGIN__, &object); +#endif /* CRT_GET_RFIB_DATA */ +#endif /* USE_EH_FRAME_REGISTRY */ + +#ifdef __LIBGCC_JCR_SECTION_NAME__ + void **jcr_list; + __asm ("" : "=g" (jcr_list) : "0" (__JCR_LIST__)); + if (__builtin_expect (*jcr_list != NULL, 0)) + { + void (*register_classes) (void *) = _Jv_RegisterClasses; + __asm ("" : "+r" (register_classes)); + if (register_classes) + register_classes (jcr_list); + } +#endif /* __LIBGCC_JCR_SECTION_NAME__ */ + +#if USE_TM_CLONE_REGISTRY + register_tm_clones (); +#endif /* USE_TM_CLONE_REGISTRY */ +} + +#ifdef __LIBGCC_INIT_SECTION_ASM_OP__ +CRT_CALL_STATIC_FUNCTION (__LIBGCC_INIT_SECTION_ASM_OP__, frame_dummy) +#else /* defined(__LIBGCC_INIT_SECTION_ASM_OP__) */ +static func_ptr __frame_dummy_init_array_entry[] + __attribute__ ((__used__, section(".init_array"), aligned(sizeof(func_ptr)))) + = { frame_dummy }; +#endif /* !defined(__LIBGCC_INIT_SECTION_ASM_OP__) */ +#endif /* USE_EH_FRAME_REGISTRY || __LIBGCC_JCR_SECTION_NAME__ || USE_TM_CLONE_REGISTRY */ + +#else /* OBJECT_FORMAT_ELF */ + +/* The function __do_global_ctors_aux is compiled twice (once in crtbegin.o + and once in crtend.o). It must be declared static to avoid a link + error. Here, we define __do_global_ctors as an externally callable + function. It is externally callable so that __main can invoke it when + INVOKE__main is defined. This has the additional effect of forcing cc1 + to switch to the .text section. */ + +static void __do_global_ctors_aux (void); +void +__do_global_ctors (void) +{ +#ifdef INVOKE__main + /* If __main won't actually call __do_global_ctors then it doesn't matter + what's inside the function. The inside of __do_global_ctors_aux is + called automatically in that case. And the Alliant fx2800 linker + crashes on this reference. So prevent the crash. */ + __do_global_ctors_aux (); +#endif +} + +asm (__LIBGCC_INIT_SECTION_ASM_OP__); /* cc1 doesn't know that we are switching! */ + +/* A routine to invoke all of the global constructors upon entry to the + program. We put this into the .init section (for systems that have + such a thing) so that we can properly perform the construction of + file-scope static-storage C++ objects within shared libraries. */ + +static void __attribute__((used)) +__do_global_ctors_aux (void) /* prologue goes in .init section */ +{ + FORCE_CODE_SECTION_ALIGN /* explicit align before switch to .text */ + asm (__LIBGCC_TEXT_SECTION_ASM_OP__); /* don't put epilogue and body in .init */ + DO_GLOBAL_CTORS_BODY; + atexit (__do_global_dtors); +} + +#endif /* OBJECT_FORMAT_ELF */ + +#elif defined(HAS_INIT_SECTION) /* ! __LIBGCC_INIT_SECTION_ASM_OP__ */ + +extern void __do_global_dtors (void); + +/* This case is used by the Irix 6 port, which supports named sections but + not an SVR4-style .fini section. __do_global_dtors can be non-static + in this case because we protect it with -hidden_symbol. */ + +void +__do_global_dtors (void) +{ + func_ptr *p, f; + for (p = __DTOR_LIST__ + 1; (f = *p); p++) + f (); + +#if USE_TM_CLONE_REGISTRY + deregister_tm_clones (); +#endif /* USE_TM_CLONE_REGISTRY */ + +#ifdef USE_EH_FRAME_REGISTRY + if (__deregister_frame_info) + __deregister_frame_info (__EH_FRAME_BEGIN__); +#endif +} + +#if defined(USE_EH_FRAME_REGISTRY) \ + || defined(__LIBGCC_JCR_SECTION_NAME__) \ + || defined(USE_TM_CLONE_REGISTRY) +/* A helper function for __do_global_ctors, which is in crtend.o. Here + in crtbegin.o, we can reference a couple of symbols not visible there. + Plus, since we're before libgcc.a, we have no problems referencing + functions from there. */ +void +__do_global_ctors_1(void) +{ +#ifdef USE_EH_FRAME_REGISTRY + static struct object object; + if (__register_frame_info) + __register_frame_info (__EH_FRAME_BEGIN__, &object); +#endif + +#ifdef __LIBGCC_JCR_SECTION_NAME__ + void **jcr_list; + __asm ("" : "=g" (jcr_list) : "0" (__JCR_LIST__)); + if (__builtin_expect (*jcr_list != NULL, 0)) + { + void (*register_classes) (void *) = _Jv_RegisterClasses; + __asm ("" : "+r" (register_classes)); + if (register_classes) + register_classes (jcr_list); + } +#endif + +#if USE_TM_CLONE_REGISTRY + register_tm_clones (); +#endif /* USE_TM_CLONE_REGISTRY */ +} +#endif /* USE_EH_FRAME_REGISTRY || __LIBGCC_JCR_SECTION_NAME__ || USE_TM_CLONE_REGISTRY */ + +#else /* ! __LIBGCC_INIT_SECTION_ASM_OP__ && ! HAS_INIT_SECTION */ +#error "What are you doing with crtstuff.c, then?" +#endif + +#elif defined(CRT_END) /* ! CRT_BEGIN */ + +/* No need for .ctors/.dtors section if linker can place them in + .init_array/.fini_array section. */ +#ifndef USE_INITFINI_ARRAY +/* Put a word containing zero at the end of each of our two lists of function + addresses. Note that the words defined here go into the .ctors and .dtors + sections of the crtend.o file, and since that file is always linked in + last, these words naturally end up at the very ends of the two lists + contained in these two sections. */ + +#ifdef CTOR_LIST_END +CTOR_LIST_END; +#elif defined(__LIBGCC_CTORS_SECTION_ASM_OP__) +/* Hack: force cc1 to switch to .data section early, so that assembling + __CTOR_LIST__ does not undo our behind-the-back change to .ctors. */ +static func_ptr force_to_data[1] __attribute__ ((__used__)) = { }; +asm (__LIBGCC_CTORS_SECTION_ASM_OP__); +STATIC func_ptr __CTOR_END__[1] + __attribute__((aligned(sizeof(func_ptr)))) + = { (func_ptr) 0 }; +#else +STATIC func_ptr __CTOR_END__[1] + __attribute__((section(".ctors"), aligned(sizeof(func_ptr)))) + = { (func_ptr) 0 }; +#endif + +#ifdef DTOR_LIST_END +DTOR_LIST_END; +#elif defined(HIDDEN_DTOR_LIST_END) +#ifdef __LIBGCC_DTORS_SECTION_ASM_OP__ +asm (__LIBGCC_DTORS_SECTION_ASM_OP__); +#endif +func_ptr __DTOR_END__[1] + __attribute__ ((used, +#ifndef __LIBGCC_DTORS_SECTION_ASM_OP__ + section(".dtors"), +#endif + aligned(sizeof(func_ptr)), visibility ("hidden"))) + = { (func_ptr) 0 }; +#elif defined(__LIBGCC_DTORS_SECTION_ASM_OP__) +asm (__LIBGCC_DTORS_SECTION_ASM_OP__); +STATIC func_ptr __DTOR_END__[1] + __attribute__ ((used, aligned(sizeof(func_ptr)))) + = { (func_ptr) 0 }; +#else +STATIC func_ptr __DTOR_END__[1] + __attribute__((used, section(".dtors"), aligned(sizeof(func_ptr)))) + = { (func_ptr) 0 }; +#endif +#endif /* USE_INITFINI_ARRAY */ + +#ifdef __LIBGCC_EH_FRAME_SECTION_NAME__ +/* Terminate the frame unwind info section with a 4byte 0 as a sentinel; + this would be the 'length' field in a real FDE. */ +# if __INT_MAX__ == 2147483647 +typedef int int32; +# elif __LONG_MAX__ == 2147483647 +typedef long int32; +# elif __SHRT_MAX__ == 2147483647 +typedef short int32; +# else +# error "Missing a 4 byte integer" +# endif +STATIC EH_FRAME_SECTION_CONST int32 __FRAME_END__[] + __attribute__ ((used, section(__LIBGCC_EH_FRAME_SECTION_NAME__), + aligned(sizeof(int32)))) + = { 0 }; +#endif /* __LIBGCC_EH_FRAME_SECTION_NAME__ */ + +#ifdef __LIBGCC_JCR_SECTION_NAME__ +/* Null terminate the .jcr section array. */ +STATIC void *__JCR_END__[1] + __attribute__ ((used, section(__LIBGCC_JCR_SECTION_NAME__), + aligned(sizeof(void *)))) + = { 0 }; +#endif /* __LIBGCC_JCR_SECTION_NAME__ */ + +#if USE_TM_CLONE_REGISTRY +# ifndef HAVE_GAS_HIDDEN +static +# endif +func_ptr __TMC_END__[] + __attribute__((used, section(".tm_clone_table"), aligned(sizeof(void *)))) +# ifdef HAVE_GAS_HIDDEN + __attribute__((__visibility__ ("hidden"))) = { }; +# else + = { 0, 0 }; +# endif +#endif /* USE_TM_CLONE_REGISTRY */ + +#ifdef __LIBGCC_INIT_ARRAY_SECTION_ASM_OP__ + +/* If we are using .init_array, there is nothing to do. */ + +#elif defined(__LIBGCC_INIT_SECTION_ASM_OP__) + +#ifdef OBJECT_FORMAT_ELF +static void __attribute__((used)) +__do_global_ctors_aux (void) +{ + func_ptr *p; + for (p = __CTOR_END__ - 1; *p != (func_ptr) -1; p--) + (*p) (); +} + +/* Stick a call to __do_global_ctors_aux into the .init section. */ +CRT_CALL_STATIC_FUNCTION (__LIBGCC_INIT_SECTION_ASM_OP__, __do_global_ctors_aux) +#else /* OBJECT_FORMAT_ELF */ + +/* Stick the real initialization code, followed by a normal sort of + function epilogue at the very end of the .init section for this + entire root executable file or for this entire shared library file. + + Note that we use some tricks here to get *just* the body and just + a function epilogue (but no function prologue) into the .init + section of the crtend.o file. Specifically, we switch to the .text + section, start to define a function, and then we switch to the .init + section just before the body code. + + Earlier on, we put the corresponding function prologue into the .init + section of the crtbegin.o file (which will be linked in first). + + Note that we want to invoke all constructors for C++ file-scope static- + storage objects AFTER any other possible initialization actions which + may be performed by the code in the .init section contributions made by + other libraries, etc. That's because those other initializations may + include setup operations for very primitive things (e.g. initializing + the state of the floating-point coprocessor, etc.) which should be done + before we start to execute any of the user's code. */ + +static void +__do_global_ctors_aux (void) /* prologue goes in .text section */ +{ + asm (__LIBGCC_INIT_SECTION_ASM_OP__); + DO_GLOBAL_CTORS_BODY; + atexit (__do_global_dtors); +} /* epilogue and body go in .init section */ + +FORCE_CODE_SECTION_ALIGN +asm (__LIBGCC_TEXT_SECTION_ASM_OP__); + +#endif /* OBJECT_FORMAT_ELF */ + +#elif defined(HAS_INIT_SECTION) /* ! __LIBGCC_INIT_SECTION_ASM_OP__ */ + +extern void __do_global_ctors (void); + +/* This case is used by the Irix 6 port, which supports named sections but + not an SVR4-style .init section. __do_global_ctors can be non-static + in this case because we protect it with -hidden_symbol. */ +void +__do_global_ctors (void) +{ + func_ptr *p; +#if defined(USE_EH_FRAME_REGISTRY) \ + || defined(__LIBGCC_JCR_SECTION_NAME__) \ + || defined(USE_TM_CLONE_REGISTRY) + __do_global_ctors_1(); +#endif + for (p = __CTOR_END__ - 1; *p != (func_ptr) -1; p--) + (*p) (); +} + +#else /* ! __LIBGCC_INIT_SECTION_ASM_OP__ && ! HAS_INIT_SECTION */ +#error "What are you doing with crtstuff.c, then?" +#endif + +#else /* ! CRT_BEGIN && ! CRT_END */ +#error "One of CRT_BEGIN or CRT_END must be defined." +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/dfp-bit.c b/contrib/toolchain/gcc/5x/libgcc/dfp-bit.c new file mode 100644 index 0000000000..e027440c5d --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/dfp-bit.c @@ -0,0 +1,680 @@ +/* This is a software decimal floating point library. + Copyright (C) 2005-2015 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 754 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 . */ + +#include +#include +/* FIXME: compile with -std=gnu99 to get these from stdlib.h */ +extern float strtof (const char *, char **); +extern long double strtold (const char *, char **); +#include +#include + +#include "dfp-bit.h" + +/* Forward declarations. */ +#if WIDTH == 32 || WIDTH_TO == 32 +void __host_to_ieee_32 (_Decimal32 in, decimal32 *out); +void __ieee_to_host_32 (decimal32 in, _Decimal32 *out); +#endif +#if WIDTH == 64 || WIDTH_TO == 64 +void __host_to_ieee_64 (_Decimal64 in, decimal64 *out); +void __ieee_to_host_64 (decimal64 in, _Decimal64 *out); +#endif +#if WIDTH == 128 || WIDTH_TO == 128 +void __host_to_ieee_128 (_Decimal128 in, decimal128 *out); +void __ieee_to_host_128 (decimal128 in, _Decimal128 *out); +#endif + +/* A pointer to a binary decFloat operation. */ +typedef decFloat* (*dfp_binary_func) + (decFloat *, const decFloat *, const decFloat *, decContext *); + +/* Binary operations. */ + +/* Use a decFloat (decDouble or decQuad) function to perform a DFP + binary operation. */ +static inline decFloat +dfp_binary_op (dfp_binary_func op, decFloat arg_a, decFloat arg_b) +{ + decFloat result; + decContext context; + + decContextDefault (&context, CONTEXT_INIT); + DFP_INIT_ROUNDMODE (context.round); + + /* Perform the operation. */ + op (&result, &arg_a, &arg_b, &context); + + if (DFP_EXCEPTIONS_ENABLED && context.status != 0) + { + /* decNumber exception flags we care about here. */ + int ieee_flags; + int dec_flags = DEC_IEEE_854_Division_by_zero | DEC_IEEE_854_Inexact + | DEC_IEEE_854_Invalid_operation | DEC_IEEE_854_Overflow + | DEC_IEEE_854_Underflow; + dec_flags &= context.status; + ieee_flags = DFP_IEEE_FLAGS (dec_flags); + if (ieee_flags != 0) + DFP_HANDLE_EXCEPTIONS (ieee_flags); + } + + return result; +} + +#if WIDTH == 32 +/* The decNumber package doesn't provide arithmetic for decSingle (32 bits); + convert to decDouble, use the operation for that, and convert back. */ +static inline _Decimal32 +d32_binary_op (dfp_binary_func op, _Decimal32 arg_a, _Decimal32 arg_b) +{ + union { _Decimal32 c; decSingle f; } a32, b32, res32; + decDouble a, b, res; + decContext context; + + /* Widen the operands and perform the operation. */ + a32.c = arg_a; + b32.c = arg_b; + decSingleToWider (&a32.f, &a); + decSingleToWider (&b32.f, &b); + res = dfp_binary_op (op, a, b); + + /* Narrow the result, which might result in an underflow or overflow. */ + decContextDefault (&context, CONTEXT_INIT); + DFP_INIT_ROUNDMODE (context.round); + decSingleFromWider (&res32.f, &res, &context); + if (DFP_EXCEPTIONS_ENABLED && context.status != 0) + { + /* decNumber exception flags we care about here. */ + int ieee_flags; + int dec_flags = DEC_IEEE_854_Inexact | DEC_IEEE_854_Overflow + | DEC_IEEE_854_Underflow; + dec_flags &= context.status; + ieee_flags = DFP_IEEE_FLAGS (dec_flags); + if (ieee_flags != 0) + DFP_HANDLE_EXCEPTIONS (ieee_flags); + } + + return res32.c; +} +#else +/* decFloat operations are supported for decDouble (64 bits) and + decQuad (128 bits). The bit patterns for the types are the same. */ +static inline DFP_C_TYPE +dnn_binary_op (dfp_binary_func op, DFP_C_TYPE arg_a, DFP_C_TYPE arg_b) +{ + union { DFP_C_TYPE c; decFloat f; } a, b, result; + + a.c = arg_a; + b.c = arg_b; + result.f = dfp_binary_op (op, a.f, b.f); + return result.c; +} +#endif + +/* Comparison operations. */ + +/* Use a decFloat (decDouble or decQuad) function to perform a DFP + comparison. */ +static inline CMPtype +dfp_compare_op (dfp_binary_func op, decFloat arg_a, decFloat arg_b) +{ + decContext context; + decFloat res; + int result; + + decContextDefault (&context, CONTEXT_INIT); + DFP_INIT_ROUNDMODE (context.round); + + /* Perform the comparison. */ + op (&res, &arg_a, &arg_b, &context); + + if (DEC_FLOAT_IS_SIGNED (&res)) + result = -1; + else if (DEC_FLOAT_IS_ZERO (&res)) + result = 0; + else if (DEC_FLOAT_IS_NAN (&res)) + result = -2; + else + result = 1; + + return (CMPtype) result; +} + +#if WIDTH == 32 +/* The decNumber package doesn't provide comparisons for decSingle (32 bits); + convert to decDouble, use the operation for that, and convert back. */ +static inline CMPtype +d32_compare_op (dfp_binary_func op, _Decimal32 arg_a, _Decimal32 arg_b) +{ + union { _Decimal32 c; decSingle f; } a32, b32; + decDouble a, b; + + a32.c = arg_a; + b32.c = arg_b; + decSingleToWider (&a32.f, &a); + decSingleToWider (&b32.f, &b); + return dfp_compare_op (op, a, b); +} +#else +/* decFloat comparisons are supported for decDouble (64 bits) and + decQuad (128 bits). The bit patterns for the types are the same. */ +static inline CMPtype +dnn_compare_op (dfp_binary_func op, DFP_C_TYPE arg_a, DFP_C_TYPE arg_b) +{ + union { DFP_C_TYPE c; decFloat f; } a, b; + + a.c = arg_a; + b.c = arg_b; + return dfp_compare_op (op, a.f, b.f); +} +#endif + +#if defined(L_conv_sd) +void +__host_to_ieee_32 (_Decimal32 in, decimal32 *out) +{ + memcpy (out, &in, 4); +} + +void +__ieee_to_host_32 (decimal32 in, _Decimal32 *out) +{ + memcpy (out, &in, 4); +} +#endif /* L_conv_sd */ + +#if defined(L_conv_dd) +void +__host_to_ieee_64 (_Decimal64 in, decimal64 *out) +{ + memcpy (out, &in, 8); +} + +void +__ieee_to_host_64 (decimal64 in, _Decimal64 *out) +{ + memcpy (out, &in, 8); +} +#endif /* L_conv_dd */ + +#if defined(L_conv_td) +void +__host_to_ieee_128 (_Decimal128 in, decimal128 *out) +{ + memcpy (out, &in, 16); +} + +void +__ieee_to_host_128 (decimal128 in, _Decimal128 *out) +{ + memcpy (out, &in, 16); +} +#endif /* L_conv_td */ + +#if defined(L_addsub_sd) || defined(L_addsub_dd) || defined(L_addsub_td) +DFP_C_TYPE +DFP_ADD (DFP_C_TYPE arg_a, DFP_C_TYPE arg_b) +{ + return DFP_BINARY_OP (DEC_FLOAT_ADD, arg_a, arg_b); +} + +DFP_C_TYPE +DFP_SUB (DFP_C_TYPE arg_a, DFP_C_TYPE arg_b) +{ + return DFP_BINARY_OP (DEC_FLOAT_SUBTRACT, arg_a, arg_b); +} +#endif /* L_addsub */ + +#if defined(L_mul_sd) || defined(L_mul_dd) || defined(L_mul_td) +DFP_C_TYPE +DFP_MULTIPLY (DFP_C_TYPE arg_a, DFP_C_TYPE arg_b) +{ + return DFP_BINARY_OP (DEC_FLOAT_MULTIPLY, arg_a, arg_b); +} +#endif /* L_mul */ + +#if defined(L_div_sd) || defined(L_div_dd) || defined(L_div_td) +DFP_C_TYPE +DFP_DIVIDE (DFP_C_TYPE arg_a, DFP_C_TYPE arg_b) +{ + return DFP_BINARY_OP (DEC_FLOAT_DIVIDE, arg_a, arg_b); +} +#endif /* L_div */ + +#if defined (L_eq_sd) || defined (L_eq_dd) || defined (L_eq_td) +CMPtype +DFP_EQ (DFP_C_TYPE arg_a, DFP_C_TYPE arg_b) +{ + CMPtype stat; + stat = DFP_COMPARE_OP (DEC_FLOAT_COMPARE, arg_a, arg_b); + /* For EQ return zero for true, nonzero for false. */ + return stat != 0; +} +#endif /* L_eq */ + +#if defined (L_ne_sd) || defined (L_ne_dd) || defined (L_ne_td) +CMPtype +DFP_NE (DFP_C_TYPE arg_a, DFP_C_TYPE arg_b) +{ + int stat; + stat = DFP_COMPARE_OP (DEC_FLOAT_COMPARE, arg_a, arg_b); + /* For NE return zero for true, nonzero for false. */ + if (__builtin_expect (stat == -2, 0)) /* An operand is NaN. */ + return 1; + return stat != 0; +} +#endif /* L_ne */ + +#if defined (L_lt_sd) || defined (L_lt_dd) || defined (L_lt_td) +CMPtype +DFP_LT (DFP_C_TYPE arg_a, DFP_C_TYPE arg_b) +{ + int stat; + stat = DFP_COMPARE_OP (DEC_FLOAT_COMPARE, arg_a, arg_b); + /* For LT return -1 (<0) for true, 1 for false. */ + return (stat == -1) ? -1 : 1; +} +#endif /* L_lt */ + +#if defined (L_gt_sd) || defined (L_gt_dd) || defined (L_gt_td) +CMPtype +DFP_GT (DFP_C_TYPE arg_a, DFP_C_TYPE arg_b) +{ + int stat; + stat = DFP_COMPARE_OP (DEC_FLOAT_COMPARE, arg_a, arg_b); + /* For GT return 1 (>0) for true, -1 for false. */ + return (stat == 1) ? 1 : -1; +} +#endif + +#if defined (L_le_sd) || defined (L_le_dd) || defined (L_le_td) +CMPtype +DFP_LE (DFP_C_TYPE arg_a, DFP_C_TYPE arg_b) +{ + int stat; + stat = DFP_COMPARE_OP (DEC_FLOAT_COMPARE, arg_a, arg_b); + /* For LE return 0 (<= 0) for true, 1 for false. */ + if (__builtin_expect (stat == -2, 0)) /* An operand is NaN. */ + return 1; + return stat == 1; +} +#endif /* L_le */ + +#if defined (L_ge_sd) || defined (L_ge_dd) || defined (L_ge_td) +CMPtype +DFP_GE (DFP_C_TYPE arg_a, DFP_C_TYPE arg_b) +{ + int stat; + stat = DFP_COMPARE_OP (DEC_FLOAT_COMPARE, arg_a, arg_b); + /* For GE return 1 (>=0) for true, -1 for false. */ + if (__builtin_expect (stat == -2, 0)) /* An operand is NaN. */ + return -1; + return (stat != -1) ? 1 : -1; +} +#endif /* L_ge */ + +#define BUFMAX 128 + +/* Check for floating point exceptions that are relevant for conversions + between decimal float values and handle them. */ +static inline void +dfp_conversion_exceptions (const int status) +{ + /* decNumber exception flags we care about here. */ + int ieee_flags; + int dec_flags = DEC_IEEE_854_Inexact | DEC_IEEE_854_Invalid_operation + | DEC_IEEE_854_Overflow; + dec_flags &= status; + ieee_flags = DFP_IEEE_FLAGS (dec_flags); + if (ieee_flags != 0) + DFP_HANDLE_EXCEPTIONS (ieee_flags); +} + +#if defined (L_sd_to_dd) +/* Use decNumber to convert directly from _Decimal32 to _Decimal64. */ +_Decimal64 +DFP_TO_DFP (_Decimal32 f_from) +{ + union { _Decimal32 c; decSingle f; } from; + union { _Decimal64 c; decDouble f; } to; + + from.c = f_from; + to.f = *decSingleToWider (&from.f, &to.f); + return to.c; +} +#endif + +#if defined (L_sd_to_td) +/* Use decNumber to convert directly from _Decimal32 to _Decimal128. */ +_Decimal128 +DFP_TO_DFP (_Decimal32 f_from) +{ + union { _Decimal32 c; decSingle f; } from; + union { _Decimal128 c; decQuad f; } to; + decDouble temp; + + from.c = f_from; + temp = *decSingleToWider (&from.f, &temp); + to.f = *decDoubleToWider (&temp, &to.f); + return to.c; +} +#endif + +#if defined (L_dd_to_td) +/* Use decNumber to convert directly from _Decimal64 to _Decimal128. */ +_Decimal128 +DFP_TO_DFP (_Decimal64 f_from) +{ + union { _Decimal64 c; decDouble f; } from; + union { _Decimal128 c; decQuad f; } to; + + from.c = f_from; + to.f = *decDoubleToWider (&from.f, &to.f); + return to.c; +} +#endif + +#if defined (L_dd_to_sd) +/* Use decNumber to convert directly from _Decimal64 to _Decimal32. */ +_Decimal32 +DFP_TO_DFP (_Decimal64 f_from) +{ + union { _Decimal32 c; decSingle f; } to; + union { _Decimal64 c; decDouble f; } from; + decContext context; + + decContextDefault (&context, CONTEXT_INIT); + DFP_INIT_ROUNDMODE (context.round); + from.c = f_from; + to.f = *decSingleFromWider (&to.f, &from.f, &context); + if (DFP_EXCEPTIONS_ENABLED && context.status != 0) + dfp_conversion_exceptions (context.status); + return to.c; +} +#endif + +#if defined (L_td_to_sd) +/* Use decNumber to convert directly from _Decimal128 to _Decimal32. */ +_Decimal32 +DFP_TO_DFP (_Decimal128 f_from) +{ + union { _Decimal32 c; decSingle f; } to; + union { _Decimal128 c; decQuad f; } from; + decDouble temp; + decContext context; + + decContextDefault (&context, CONTEXT_INIT); + DFP_INIT_ROUNDMODE (context.round); + from.c = f_from; + temp = *decDoubleFromWider (&temp, &from.f, &context); + to.f = *decSingleFromWider (&to.f, &temp, &context); + if (DFP_EXCEPTIONS_ENABLED && context.status != 0) + dfp_conversion_exceptions (context.status); + return to.c; +} +#endif + +#if defined (L_td_to_dd) +/* Use decNumber to convert directly from _Decimal128 to _Decimal64. */ +_Decimal64 +DFP_TO_DFP (_Decimal128 f_from) +{ + union { _Decimal64 c; decDouble f; } to; + union { _Decimal128 c; decQuad f; } from; + decContext context; + + decContextDefault (&context, CONTEXT_INIT); + DFP_INIT_ROUNDMODE (context.round); + from.c = f_from; + to.f = *decDoubleFromWider (&to.f, &from.f, &context); + if (DFP_EXCEPTIONS_ENABLED && context.status != 0) + dfp_conversion_exceptions (context.status); + return to.c; +} +#endif + +#if defined (L_dd_to_si) || defined (L_td_to_si) \ + || defined (L_dd_to_usi) || defined (L_td_to_usi) +/* Use decNumber to convert directly from decimal float to integer types. */ +INT_TYPE +DFP_TO_INT (DFP_C_TYPE x) +{ + union { DFP_C_TYPE c; decFloat f; } u; + decContext context; + INT_TYPE i; + + decContextDefault (&context, DEC_INIT_DECIMAL128); + context.round = DEC_ROUND_DOWN; + u.c = x; + i = DEC_FLOAT_TO_INT (&u.f, &context, context.round); + if (DFP_EXCEPTIONS_ENABLED && context.status != 0) + dfp_conversion_exceptions (context.status); + return i; +} +#endif + +#if defined (L_sd_to_si) || (L_sd_to_usi) +/* Use decNumber to convert directly from decimal float to integer types. */ +INT_TYPE +DFP_TO_INT (_Decimal32 x) +{ + union { _Decimal32 c; decSingle f; } u32; + decDouble f64; + decContext context; + INT_TYPE i; + + decContextDefault (&context, DEC_INIT_DECIMAL128); + context.round = DEC_ROUND_DOWN; + u32.c = x; + f64 = *decSingleToWider (&u32.f, &f64); + i = DEC_FLOAT_TO_INT (&f64, &context, context.round); + if (DFP_EXCEPTIONS_ENABLED && context.status != 0) + dfp_conversion_exceptions (context.status); + return i; +} +#endif + +#if defined (L_sd_to_di) || defined (L_dd_to_di) || defined (L_td_to_di) \ + || defined (L_sd_to_udi) || defined (L_dd_to_udi) || defined (L_td_to_udi) +/* decNumber doesn't provide support for conversions to 64-bit integer + types, so do it the hard way. */ +INT_TYPE +DFP_TO_INT (DFP_C_TYPE x) +{ + /* 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. */ + + IEEE_TYPE s; + 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; + + HOST_TO_IEEE (x, &s); + TO_INTERNAL (&s, &n1); + /* Rescale if the exponent is less than zero. */ + decNumberToIntegralValue (&n2, &n1, &context); + /* Get a value to use for the quantize call. */ + decNumberFromString (&qval, "1.", &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); +} +#endif + +#if defined (L_si_to_dd) || defined (L_si_to_td) \ + || defined (L_usi_to_dd) || defined (L_usi_to_td) +/* Use decNumber to convert directly from integer to decimal float types. */ +DFP_C_TYPE +INT_TO_DFP (INT_TYPE i) +{ + union { DFP_C_TYPE c; decFloat f; } u; + + u.f = *DEC_FLOAT_FROM_INT (&u.f, i); + return u.c; +} +#endif + +#if defined (L_si_to_sd) || defined (L_usi_to_sd) +_Decimal32 +/* Use decNumber to convert directly from integer to decimal float types. */ +INT_TO_DFP (INT_TYPE i) +{ + union { _Decimal32 c; decSingle f; } u32; + decDouble f64; + decContext context; + + decContextDefault (&context, DEC_INIT_DECIMAL128); + f64 = *DEC_FLOAT_FROM_INT (&f64, i); + u32.f = *decSingleFromWider (&u32.f, &f64, &context); + if (DFP_EXCEPTIONS_ENABLED && context.status != 0) + dfp_conversion_exceptions (context.status); + return u32.c; +} +#endif + +#if defined (L_di_to_sd) || defined (L_di_to_dd) || defined (L_di_to_td) \ + || defined (L_udi_to_sd) || defined (L_udi_to_dd) || defined (L_udi_to_td) +/* decNumber doesn't provide support for conversions from 64-bit integer + types, so do it the hard way. */ +DFP_C_TYPE +INT_TO_DFP (INT_TYPE i) +{ + DFP_C_TYPE f; + IEEE_TYPE s; + char buf[BUFMAX]; + decContext context; + + decContextDefault (&context, CONTEXT_INIT); + DFP_INIT_ROUNDMODE (context.round); + + /* Use a C library function to get a floating point string. */ + sprintf (buf, INT_FMT ".", CAST_FOR_FMT(i)); + /* Convert from the floating point string to a decimal* type. */ + FROM_STRING (&s, buf, &context); + IEEE_TO_HOST (s, &f); + + if (DFP_EXCEPTIONS_ENABLED && context.status != 0) + dfp_conversion_exceptions (context.status); + + return f; +} +#endif + +#if defined (L_sd_to_sf) || defined (L_dd_to_sf) || defined (L_td_to_sf) \ + || defined (L_sd_to_df) || defined (L_dd_to_df) || defined (L_td_to_df) \ + || ((defined (L_sd_to_xf) || defined (L_dd_to_xf) || defined (L_td_to_xf)) \ + && LONG_DOUBLE_HAS_XF_MODE) \ + || ((defined (L_sd_to_tf) || defined (L_dd_to_tf) || defined (L_td_to_tf)) \ + && LONG_DOUBLE_HAS_TF_MODE) +BFP_TYPE +DFP_TO_BFP (DFP_C_TYPE f) +{ + IEEE_TYPE s; + char buf[BUFMAX]; + + HOST_TO_IEEE (f, &s); + /* Write the value to a string. */ + TO_STRING (&s, buf); + /* Read it as the binary floating point type and return that. */ + return STR_TO_BFP (buf, NULL); +} +#endif + +#if defined (L_sf_to_sd) || defined (L_sf_to_dd) || defined (L_sf_to_td) \ + || defined (L_df_to_sd) || defined (L_df_to_dd) || defined (L_df_to_td) \ + || ((defined (L_xf_to_sd) || defined (L_xf_to_dd) || defined (L_xf_to_td)) \ + && LONG_DOUBLE_HAS_XF_MODE) \ + || ((defined (L_tf_to_sd) || defined (L_tf_to_dd) || defined (L_tf_to_td)) \ + && LONG_DOUBLE_HAS_TF_MODE) +DFP_C_TYPE +BFP_TO_DFP (BFP_TYPE x) +{ + DFP_C_TYPE f; + IEEE_TYPE s; + char buf[BUFMAX]; + decContext context; + + decContextDefault (&context, CONTEXT_INIT); + DFP_INIT_ROUNDMODE (context.round); + + /* Use a C library function to write the floating point value to a string. */ + sprintf (buf, BFP_FMT, (BFP_VIA_TYPE) x); + + /* Convert from the floating point string to a decimal* type. */ + FROM_STRING (&s, buf, &context); + IEEE_TO_HOST (s, &f); + + if (DFP_EXCEPTIONS_ENABLED && context.status != 0) + { + /* decNumber exception flags we care about here. */ + int ieee_flags; + int dec_flags = DEC_IEEE_854_Inexact | DEC_IEEE_854_Invalid_operation + | DEC_IEEE_854_Overflow | DEC_IEEE_854_Underflow; + dec_flags &= context.status; + ieee_flags = DFP_IEEE_FLAGS (dec_flags); + if (ieee_flags != 0) + DFP_HANDLE_EXCEPTIONS (ieee_flags); + } + + return f; +} +#endif + +#if defined (L_unord_sd) || defined (L_unord_dd) || defined (L_unord_td) +CMPtype +DFP_UNORD (DFP_C_TYPE arg_a, DFP_C_TYPE arg_b) +{ + decNumber arg1, arg2; + IEEE_TYPE a, b; + + HOST_TO_IEEE (arg_a, &a); + HOST_TO_IEEE (arg_b, &b); + TO_INTERNAL (&a, &arg1); + TO_INTERNAL (&b, &arg2); + return (decNumberIsNaN (&arg1) || decNumberIsNaN (&arg2)); +} +#endif /* L_unord_sd || L_unord_dd || L_unord_td */ diff --git a/contrib/toolchain/gcc/5x/libgcc/dfp-bit.h b/contrib/toolchain/gcc/5x/libgcc/dfp-bit.h new file mode 100644 index 0000000000..aa0d405ad4 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/dfp-bit.h @@ -0,0 +1,628 @@ +/* Header file for dfp-bit.c. + Copyright (C) 2005-2015 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 _DFPBIT_H +#define _DFPBIT_H + +#include +#include +#include +#include +#include "tconfig.h" +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" + +/* We need to know the size of long double that the C library supports. + Don't use LIBGCC2_HAS_XF_MODE or LIBGCC2_HAS_TF_MODE here because + some targets set both of those. */ + +#ifndef __LIBGCC_XF_MANT_DIG__ +#define __LIBGCC_XF_MANT_DIG__ 0 +#endif +#define LONG_DOUBLE_HAS_XF_MODE \ + (__LDBL_MANT_DIG__ == __LIBGCC_XF_MANT_DIG__) + +#ifndef __LIBGCC_TF_MANT_DIG__ +#define __LIBGCC_TF_MANT_DIG__ 0 +#endif +#define LONG_DOUBLE_HAS_TF_MODE \ + (__LDBL_MANT_DIG__ == __LIBGCC_TF_MANT_DIG__) + +/* Depending on WIDTH, define a number of macros: + + DFP_C_TYPE: type of the arguments to the libgcc functions; + (eg _Decimal32) + + IEEE_TYPE: the corresponding (encoded) IEEE754 type; + (eg decimal32) + + TO_INTERNAL: the name of the decNumber function to convert an + encoded value into the decNumber internal representation; + + TO_ENCODED: the name of the decNumber function to convert an + internally represented decNumber into the encoded + representation. + + FROM_STRING: the name of the decNumber function to read an + encoded value from a string. + + TO_STRING: the name of the decNumber function to write an + encoded value to a string. */ + +#if WIDTH == 32 +#define DFP_C_TYPE _Decimal32 +#define IEEE_TYPE decimal32 +#define HOST_TO_IEEE __host_to_ieee_32 +#define IEEE_TO_HOST __ieee_to_host_32 +#define TO_INTERNAL __decimal32ToNumber +#define TO_ENCODED __decimal32FromNumber +#define FROM_STRING __decimal32FromString +#define TO_STRING __decimal32ToString +#elif WIDTH == 64 +#define DFP_C_TYPE _Decimal64 +#define IEEE_TYPE decimal64 +#define HOST_TO_IEEE __host_to_ieee_64 +#define IEEE_TO_HOST __ieee_to_host_64 +#define TO_INTERNAL __decimal64ToNumber +#define TO_ENCODED __decimal64FromNumber +#define FROM_STRING __decimal64FromString +#define TO_STRING __decimal64ToString +#elif WIDTH == 128 +#define DFP_C_TYPE _Decimal128 +#define IEEE_TYPE decimal128 +#define HOST_TO_IEEE __host_to_ieee_128 +#define IEEE_TO_HOST __ieee_to_host_128 +#define TO_INTERNAL __decimal128ToNumber +#define TO_ENCODED __decimal128FromNumber +#define FROM_STRING __decimal128FromString +#define TO_STRING __decimal128ToString +#else +#error invalid decimal float word width +#endif + +/* We define __DEC_EVAL_METHOD__ to 2, saying that we evaluate all + operations and constants to the range and precision of the _Decimal128 + type. Make it so. */ +#if WIDTH == 32 +#define CONTEXT_INIT DEC_INIT_DECIMAL32 +#elif WIDTH == 64 +#define CONTEXT_INIT DEC_INIT_DECIMAL64 +#elif WIDTH == 128 +#define CONTEXT_INIT DEC_INIT_DECIMAL128 +#endif + +#ifndef DFP_INIT_ROUNDMODE +#define DFP_INIT_ROUNDMODE(A) A = DEC_ROUND_HALF_EVEN +#endif + +#ifdef DFP_EXCEPTIONS_ENABLED +/* Return IEEE exception flags based on decNumber status flags. */ +#define DFP_IEEE_FLAGS(DEC_FLAGS) __extension__ \ +({int _fe_flags = 0; \ + if ((dec_flags & DEC_IEEE_854_Division_by_zero) != 0) \ + _fe_flags |= FE_DIVBYZERO; \ + if ((dec_flags & DEC_IEEE_854_Inexact) != 0) \ + _fe_flags |= FE_INEXACT; \ + if ((dec_flags & DEC_IEEE_854_Invalid_operation) != 0) \ + _fe_flags |= FE_INVALID; \ + if ((dec_flags & DEC_IEEE_854_Overflow) != 0) \ + _fe_flags |= FE_OVERFLOW; \ + if ((dec_flags & DEC_IEEE_854_Underflow) != 0) \ + _fe_flags |= FE_UNDERFLOW; \ + _fe_flags; }) +#else +#define DFP_EXCEPTIONS_ENABLED 0 +#define DFP_IEEE_FLAGS(A) 0 +#define DFP_HANDLE_EXCEPTIONS(A) do {} while (0) +#endif + +/* Conversions between different decimal float types use WIDTH_TO to + determine additional macros to define. */ + +#if defined (L_dd_to_sd) || defined (L_td_to_sd) +#define WIDTH_TO 32 +#elif defined (L_sd_to_dd) || defined (L_td_to_dd) +#define WIDTH_TO 64 +#elif defined (L_sd_to_td) || defined (L_dd_to_td) +#define WIDTH_TO 128 +#endif + +/* If WIDTH_TO is defined, define additional macros: + + DFP_C_TYPE_TO: type of the result of dfp to dfp conversion. + + IEEE_TYPE_TO: the corresponding (encoded) IEEE754 type. + + TO_ENCODED_TO: the name of the decNumber function to convert an + internally represented decNumber into the encoded representation + for the destination. */ + +#if WIDTH_TO == 32 +#define DFP_C_TYPE_TO _Decimal32 +#define IEEE_TYPE_TO decimal32 +#define TO_ENCODED_TO __decimal32FromNumber +#define IEEE_TO_HOST_TO __ieee_to_host_32 +#elif WIDTH_TO == 64 +#define DFP_C_TYPE_TO _Decimal64 +#define IEEE_TYPE_TO decimal64 +#define TO_ENCODED_TO __decimal64FromNumber +#define IEEE_TO_HOST_TO __ieee_to_host_64 +#elif WIDTH_TO == 128 +#define DFP_C_TYPE_TO _Decimal128 +#define IEEE_TYPE_TO decimal128 +#define TO_ENCODED_TO __decimal128FromNumber +#define IEEE_TO_HOST_TO __ieee_to_host_128 +#endif + +/* Conversions between decimal float types and integral types use INT_KIND + to determine the data type and C functions to use. */ + +#if defined (L_sd_to_si) || defined (L_dd_to_si) || defined (L_td_to_si) \ + || defined (L_si_to_sd) || defined (L_si_to_dd) || defined (L_si_to_td) +#define INT_KIND 1 +#elif defined (L_sd_to_di) || defined (L_dd_to_di) || defined (L_td_to_di) \ + || defined (L_di_to_sd) || defined (L_di_to_dd) || defined (L_di_to_td) +#define INT_KIND 2 +#elif defined (L_sd_to_usi) || defined (L_dd_to_usi) || defined (L_td_to_usi) \ + || defined (L_usi_to_sd) || defined (L_usi_to_dd) || defined (L_usi_to_td) +#define INT_KIND 3 +#elif defined (L_sd_to_udi) || defined (L_dd_to_udi) || defined (L_td_to_udi) \ + || defined (L_udi_to_sd) || defined (L_udi_to_dd) || defined (L_udi_to_td) +#define INT_KIND 4 +#endif + +/* If INT_KIND is defined, define additional macros: + + INT_TYPE: The integer data type. + + INT_FMT: The format string for writing the integer to a string. + + CAST_FOR_FMT: Cast variable of INT_KIND to C type for sprintf. + This works for ILP32 and LP64, won't for other type size systems. + + STR_TO_INT: The function to read the integer from a string. */ + +#if INT_KIND == 1 +#define INT_TYPE SItype +#define INT_FMT "%d" +#define CAST_FOR_FMT(A) (int)A +#define STR_TO_INT strtol +#elif INT_KIND == 2 +#define INT_TYPE DItype +#define INT_FMT "%lld" +#define CAST_FOR_FMT(A) (long long)A +#define STR_TO_INT strtoll +#elif INT_KIND == 3 +#define INT_TYPE USItype +#define INT_FMT "%u" +#define CAST_FOR_FMT(A) (unsigned int)A +#define STR_TO_INT strtoul +#elif INT_KIND == 4 +#define INT_TYPE UDItype +#define INT_FMT "%llu" +#define CAST_FOR_FMT(A) (unsigned long long)A +#define STR_TO_INT strtoull +#endif + +/* Conversions between decimal float types and binary float types use + BFP_KIND to determine the data type and C functions to use. */ + +#if defined (L_sd_to_sf) || defined (L_dd_to_sf) || defined (L_td_to_sf) \ + || defined (L_sf_to_sd) || defined (L_sf_to_dd) || defined (L_sf_to_td) +#define BFP_KIND 1 +#elif defined (L_sd_to_df) || defined (L_dd_to_df ) || defined (L_td_to_df) \ + || defined (L_df_to_sd) || defined (L_df_to_dd) || defined (L_df_to_td) +#define BFP_KIND 2 +#elif defined (L_sd_to_xf) || defined (L_dd_to_xf ) || defined (L_td_to_xf) \ + || defined (L_xf_to_sd) || defined (L_xf_to_dd) || defined (L_xf_to_td) +#define BFP_KIND 3 +#elif defined (L_sd_to_tf) || defined (L_dd_to_tf) || defined (L_td_to_tf) \ + || defined (L_tf_to_sd) || defined (L_tf_to_dd) || defined (L_tf_to_td) +#define BFP_KIND 4 +#endif + +/* If BFP_KIND is defined, define additional macros: + + BFP_TYPE: The binary floating point data type. + + BFP_FMT: The format string for writing the value to a string. + The number of decimal digits printed is + ceil (nbits / log2 (10.) + 1) + as described in David Matula's CACM 19(3) 716-723 June 1968 paper. + + BFP_VIA_TYPE: Type to which to cast a variable of BPF_TYPE for a + call to sprintf. + + STR_TO_BFP: The function to read the value from a string. */ + +#if BFP_KIND == 1 +#define BFP_TYPE SFtype +#define BFP_FMT "%.9e" +#define BFP_VIA_TYPE double +#define STR_TO_BFP strtof + +#elif BFP_KIND == 2 +#define BFP_TYPE DFtype +#define BFP_FMT "%.17e" +#define BFP_VIA_TYPE double +#define STR_TO_BFP strtod + +#elif BFP_KIND == 3 +#if LONG_DOUBLE_HAS_XF_MODE +#define BFP_TYPE XFtype +#define BFP_FMT "%.21Le" +#define BFP_VIA_TYPE long double +#define STR_TO_BFP strtold +#endif /* LONG_DOUBLE_HAS_XF_MODE */ + +#elif BFP_KIND == 4 +#if LONG_DOUBLE_HAS_TF_MODE +#define BFP_TYPE TFtype +#if LDBL_MANT_DIG == 106 +#define BFP_FMT "%.33Le" +#elif LDBL_MANT_DIG == 113 +#define BFP_FMT "%.36Le" +#else +#error "unknown long double size, cannot define BFP_FMT" +#endif /* LDBL_MANT_DIG */ +#define STR_TO_BFP strtold +#define BFP_VIA_TYPE long double +#endif /* LONG_DOUBLE_HAS_TF_MODE */ + +#endif /* BFP_KIND */ + +#if WIDTH == 128 || WIDTH_TO == 128 +#include "decimal128.h" +#include "decQuad.h" +#endif +#if WIDTH == 64 || WIDTH_TO == 64 +#include "decimal64.h" +#include "decDouble.h" +#endif +#if WIDTH == 32 || WIDTH_TO == 32 +#include "decimal32.h" +#include "decSingle.h" +#endif +#include "decNumber.h" + +/* Names of arithmetic functions. */ + +#if ENABLE_DECIMAL_BID_FORMAT +#define DPD_BID_NAME(DPD,BID) BID +#else +#define DPD_BID_NAME(DPD,BID) DPD +#endif + +#if WIDTH == 32 +#define DFP_ADD DPD_BID_NAME(__dpd_addsd3,__bid_addsd3) +#define DFP_SUB DPD_BID_NAME(__dpd_subsd3,__bid_subsd3) +#define DFP_MULTIPLY DPD_BID_NAME(__dpd_mulsd3,__bid_mulsd3) +#define DFP_DIVIDE DPD_BID_NAME(__dpd_divsd3,__bid_divsd3) +#define DFP_EQ DPD_BID_NAME(__dpd_eqsd2,__bid_eqsd2) +#define DFP_NE DPD_BID_NAME(__dpd_nesd2,__bid_nesd2) +#define DFP_LT DPD_BID_NAME(__dpd_ltsd2,__bid_ltsd2) +#define DFP_GT DPD_BID_NAME(__dpd_gtsd2,__bid_gtsd2) +#define DFP_LE DPD_BID_NAME(__dpd_lesd2,__bid_lesd2) +#define DFP_GE DPD_BID_NAME(__dpd_gesd2,__bid_gesd2) +#define DFP_UNORD DPD_BID_NAME(__dpd_unordsd2,__bid_unordsd2) +#elif WIDTH == 64 +#define DFP_ADD DPD_BID_NAME(__dpd_adddd3,__bid_adddd3) +#define DFP_SUB DPD_BID_NAME(__dpd_subdd3,__bid_subdd3) +#define DFP_MULTIPLY DPD_BID_NAME(__dpd_muldd3,__bid_muldd3) +#define DFP_DIVIDE DPD_BID_NAME(__dpd_divdd3,__bid_divdd3) +#define DFP_EQ DPD_BID_NAME(__dpd_eqdd2,__bid_eqdd2) +#define DFP_NE DPD_BID_NAME(__dpd_nedd2,__bid_nedd2) +#define DFP_LT DPD_BID_NAME(__dpd_ltdd2,__bid_ltdd2) +#define DFP_GT DPD_BID_NAME(__dpd_gtdd2,__bid_gtdd2) +#define DFP_LE DPD_BID_NAME(__dpd_ledd2,__bid_ledd2) +#define DFP_GE DPD_BID_NAME(__dpd_gedd2,__bid_gedd2) +#define DFP_UNORD DPD_BID_NAME(__dpd_unorddd2,__bid_unorddd2) +#elif WIDTH == 128 +#define DFP_ADD DPD_BID_NAME(__dpd_addtd3,__bid_addtd3) +#define DFP_SUB DPD_BID_NAME(__dpd_subtd3,__bid_subtd3) +#define DFP_MULTIPLY DPD_BID_NAME(__dpd_multd3,__bid_multd3) +#define DFP_DIVIDE DPD_BID_NAME(__dpd_divtd3,__bid_divtd3) +#define DFP_EQ DPD_BID_NAME(__dpd_eqtd2,__bid_eqtd2) +#define DFP_NE DPD_BID_NAME(__dpd_netd2,__bid_netd2) +#define DFP_LT DPD_BID_NAME(__dpd_lttd2,__bid_lttd2) +#define DFP_GT DPD_BID_NAME(__dpd_gttd2,__bid_gttd2) +#define DFP_LE DPD_BID_NAME(__dpd_letd2,__bid_letd2) +#define DFP_GE DPD_BID_NAME(__dpd_getd2,__bid_getd2) +#define DFP_UNORD DPD_BID_NAME(__dpd_unordtd2,__bid_unordtd2) +#endif + +/* Names of decNumber functions for DPD arithmetic. */ + +#if WIDTH == 32 +#define decFloat decDouble +#define DFP_BINARY_OP d32_binary_op +#define DFP_COMPARE_OP d32_compare_op +#define DEC_FLOAT_ADD decDoubleAdd +#define DEC_FLOAT_SUBTRACT decDoubleSubtract +#define DEC_FLOAT_MULTIPLY decDoubleMultiply +#define DEC_FLOAT_DIVIDE decDoubleDivide +#define DEC_FLOAT_COMPARE decDoubleCompare +#define DEC_FLOAT_IS_ZERO decDoubleIsZero +#define DEC_FLOAT_IS_NAN decDoubleIsNaN +#define DEC_FLOAT_IS_SIGNED decDoubleIsSigned +#elif WIDTH == 64 +#define DFP_BINARY_OP dnn_binary_op +#define DFP_COMPARE_OP dnn_compare_op +#define decFloat decDouble +#define DEC_FLOAT_ADD decDoubleAdd +#define DEC_FLOAT_SUBTRACT decDoubleSubtract +#define DEC_FLOAT_MULTIPLY decDoubleMultiply +#define DEC_FLOAT_DIVIDE decDoubleDivide +#define DEC_FLOAT_COMPARE decDoubleCompare +#define DEC_FLOAT_IS_ZERO decDoubleIsZero +#define DEC_FLOAT_IS_NAN decDoubleIsNaN +#define DEC_FLOAT_IS_SIGNED decDoubleIsSigned +#elif WIDTH == 128 +#define DFP_BINARY_OP dnn_binary_op +#define DFP_COMPARE_OP dnn_compare_op +#define decFloat decQuad +#define DEC_FLOAT_ADD decQuadAdd +#define DEC_FLOAT_SUBTRACT decQuadSubtract +#define DEC_FLOAT_MULTIPLY decQuadMultiply +#define DEC_FLOAT_DIVIDE decQuadDivide +#define DEC_FLOAT_COMPARE decQuadCompare +#define DEC_FLOAT_IS_ZERO decQuadIsZero +#define DEC_FLOAT_IS_NAN decQuadIsNaN +#define DEC_FLOAT_IS_SIGNED decQuadIsSigned +#endif + +/* Names of functions to convert between different decimal float types. */ + +#if WIDTH == 32 +#if WIDTH_TO == 64 +#define DFP_TO_DFP DPD_BID_NAME(__dpd_extendsddd2,__bid_extendsddd2) +#elif WIDTH_TO == 128 +#define DFP_TO_DFP DPD_BID_NAME(__dpd_extendsdtd2,__bid_extendsdtd2) +#endif +#elif WIDTH == 64 +#if WIDTH_TO == 32 +#define DFP_TO_DFP DPD_BID_NAME(__dpd_truncddsd2,__bid_truncddsd2) +#elif WIDTH_TO == 128 +#define DFP_TO_DFP DPD_BID_NAME(__dpd_extendddtd2,__bid_extendddtd2) +#endif +#elif WIDTH == 128 +#if WIDTH_TO == 32 +#define DFP_TO_DFP DPD_BID_NAME(__dpd_trunctdsd2,__bid_trunctdsd2) +#elif WIDTH_TO == 64 +#define DFP_TO_DFP DPD_BID_NAME(__dpd_trunctddd2,__bid_trunctddd2) +#endif +#endif + +/* Names of functions to convert between decimal float and integers. */ + +#if WIDTH == 32 +#if INT_KIND == 1 +#define INT_TO_DFP DPD_BID_NAME(__dpd_floatsisd,__bid_floatsisd) +#define DFP_TO_INT DPD_BID_NAME(__dpd_fixsdsi,__bid_fixsdsi) +#define DEC_FLOAT_FROM_INT decDoubleFromInt32 +#define DEC_FLOAT_TO_INT decDoubleToInt32 +#elif INT_KIND == 2 +#define INT_TO_DFP DPD_BID_NAME(__dpd_floatdisd,__bid_floatdisd) +#define DFP_TO_INT DPD_BID_NAME(__dpd_fixsddi,__bid_fixsddi) +#elif INT_KIND == 3 +#define INT_TO_DFP DPD_BID_NAME(__dpd_floatunssisd,__bid_floatunssisd) +#define DFP_TO_INT DPD_BID_NAME(__dpd_fixunssdsi,__bid_fixunssdsi) +#define DEC_FLOAT_FROM_INT decDoubleFromUInt32 +#define DEC_FLOAT_TO_INT decDoubleToUInt32 +#elif INT_KIND == 4 +#define INT_TO_DFP DPD_BID_NAME(__dpd_floatunsdisd,__bid_floatunsdisd) +#define DFP_TO_INT DPD_BID_NAME(__dpd_fixunssddi,__bid_fixunssddi) +#endif +#elif WIDTH == 64 +#define decFloat decDouble +#if INT_KIND == 1 +#define INT_TO_DFP DPD_BID_NAME(__dpd_floatsidd,__bid_floatsidd) +#define DFP_TO_INT DPD_BID_NAME(__dpd_fixddsi,__bid_fixddsi) +#define DEC_FLOAT_FROM_INT decDoubleFromInt32 +#define DEC_FLOAT_TO_INT decDoubleToInt32 +#elif INT_KIND == 2 +#define INT_TO_DFP DPD_BID_NAME(__dpd_floatdidd,__bid_floatdidd) +#define DFP_TO_INT DPD_BID_NAME(__dpd_fixdddi,__bid_fixdddi) +#elif INT_KIND == 3 +#define INT_TO_DFP DPD_BID_NAME(__dpd_floatunssidd,__bid_floatunssidd) +#define DFP_TO_INT DPD_BID_NAME(__dpd_fixunsddsi,__bid_fixunsddsi) +#define DEC_FLOAT_FROM_INT decDoubleFromUInt32 +#define DEC_FLOAT_TO_INT decDoubleToUInt32 +#elif INT_KIND == 4 +#define INT_TO_DFP DPD_BID_NAME(__dpd_floatunsdidd,__bid_floatunsdidd) +#define DFP_TO_INT DPD_BID_NAME(__dpd_fixunsdddi,__bid_fixunsdddi) +#endif +#elif WIDTH == 128 +#define decFloat decQuad +#if INT_KIND == 1 +#define INT_TO_DFP DPD_BID_NAME(__dpd_floatsitd,__bid_floatsitd) +#define DFP_TO_INT DPD_BID_NAME(__dpd_fixtdsi,__bid_fixtdsi) +#define DEC_FLOAT_FROM_INT decQuadFromInt32 +#define DEC_FLOAT_TO_INT decQuadToInt32 +#elif INT_KIND == 2 +#define INT_TO_DFP DPD_BID_NAME(__dpd_floatditd,__bid_floatditd) +#define DFP_TO_INT DPD_BID_NAME(__dpd_fixtddi,__bid_fixtddi) +#elif INT_KIND == 3 +#define INT_TO_DFP DPD_BID_NAME(__dpd_floatunssitd,__bid_floatunssitd) +#define DFP_TO_INT DPD_BID_NAME(__dpd_fixunstdsi,__bid_fixunstdsi) +#define DEC_FLOAT_FROM_INT decQuadFromUInt32 +#define DEC_FLOAT_TO_INT decQuadToUInt32 +#elif INT_KIND == 4 +#define INT_TO_DFP DPD_BID_NAME(__dpd_floatunsditd,__bid_floatunsditd) +#define DFP_TO_INT DPD_BID_NAME(__dpd_fixunstddi,__bid_fixunstddi) +#endif +#endif + +/* Names of functions to convert between decimal float and binary float. */ + +#if WIDTH == 32 +#if BFP_KIND == 1 +#define BFP_TO_DFP DPD_BID_NAME(__dpd_extendsfsd,__bid_extendsfsd) +#define DFP_TO_BFP DPD_BID_NAME(__dpd_truncsdsf,__bid_truncsdsf) +#elif BFP_KIND == 2 +#define BFP_TO_DFP DPD_BID_NAME(__dpd_truncdfsd,__bid_truncdfsd) +#define DFP_TO_BFP DPD_BID_NAME(__dpd_extendsddf,__bid_extendsddf) +#elif BFP_KIND == 3 +#define BFP_TO_DFP DPD_BID_NAME(__dpd_truncxfsd,__bid_truncxfsd) +#define DFP_TO_BFP DPD_BID_NAME(__dpd_extendsdxf,__bid_extendsdxf) +#elif BFP_KIND == 4 +#define BFP_TO_DFP DPD_BID_NAME(__dpd_trunctfsd,__bid_trunctfsd) +#define DFP_TO_BFP DPD_BID_NAME(__dpd_extendsdtf,__bid_extendsdtf) +#endif /* BFP_KIND */ + +#elif WIDTH == 64 +#if BFP_KIND == 1 +#define BFP_TO_DFP DPD_BID_NAME(__dpd_extendsfdd,__bid_extendsfdd) +#define DFP_TO_BFP DPD_BID_NAME(__dpd_truncddsf,__bid_truncddsf) +#elif BFP_KIND == 2 +#define BFP_TO_DFP DPD_BID_NAME(__dpd_extenddfdd,__bid_extenddfdd) +#define DFP_TO_BFP DPD_BID_NAME(__dpd_truncdddf,__bid_truncdddf) +#elif BFP_KIND == 3 +#define BFP_TO_DFP DPD_BID_NAME(__dpd_truncxfdd,__bid_truncxfdd) +#define DFP_TO_BFP DPD_BID_NAME(__dpd_extendddxf,__bid_extendddxf) +#elif BFP_KIND == 4 +#define BFP_TO_DFP DPD_BID_NAME(__dpd_trunctfdd,__bid_trunctfdd) +#define DFP_TO_BFP DPD_BID_NAME(__dpd_extendddtf,__bid_extendddtf) +#endif /* BFP_KIND */ + +#elif WIDTH == 128 +#if BFP_KIND == 1 +#define BFP_TO_DFP DPD_BID_NAME(__dpd_extendsftd,__bid_extendsftd) +#define DFP_TO_BFP DPD_BID_NAME(__dpd_trunctdsf,__bid_trunctdsf) +#elif BFP_KIND == 2 +#define BFP_TO_DFP DPD_BID_NAME(__dpd_extenddftd,__bid_extenddftd) +#define DFP_TO_BFP DPD_BID_NAME(__dpd_trunctddf,__bid_trunctddf) +#elif BFP_KIND == 3 +#define BFP_TO_DFP DPD_BID_NAME(__dpd_extendxftd,__bid_extendxftd) +#define DFP_TO_BFP DPD_BID_NAME(__dpd_trunctdxf,__bid_trunctdxf) +#elif BFP_KIND == 4 +#define BFP_TO_DFP DPD_BID_NAME(__dpd_extendtftd,__bid_extendtftd) +#define DFP_TO_BFP DPD_BID_NAME(__dpd_trunctdtf,__bid_trunctdtf) +#endif /* BFP_KIND */ + +#endif /* WIDTH */ + +/* Some handy typedefs. */ + +typedef float SFtype __attribute__ ((mode (SF))); +typedef float DFtype __attribute__ ((mode (DF))); +#if LONG_DOUBLE_HAS_XF_MODE +typedef float XFtype __attribute__ ((mode (XF))); +#endif /* LONG_DOUBLE_HAS_XF_MODE */ +#if LONG_DOUBLE_HAS_TF_MODE +typedef float TFtype __attribute__ ((mode (TF))); +#endif /* LONG_DOUBLE_HAS_TF_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 `__libgcc_cmp_return__' in GCC for the target. */ + +typedef int CMPtype __attribute__ ((mode (__libgcc_cmp_return__))); + +/* Prototypes. */ + +#if defined (L_mul_sd) || defined (L_mul_dd) || defined (L_mul_td) +extern DFP_C_TYPE DFP_MULTIPLY (DFP_C_TYPE, DFP_C_TYPE); +#endif + +#if defined (L_div_sd) || defined (L_div_dd) || defined (L_div_td) +extern DFP_C_TYPE DFP_DIVIDE (DFP_C_TYPE, DFP_C_TYPE); +#endif + +#if defined (L_addsub_sd) || defined (L_addsub_dd) || defined (L_addsub_td) +extern DFP_C_TYPE DFP_ADD (DFP_C_TYPE, DFP_C_TYPE); +extern DFP_C_TYPE DFP_SUB (DFP_C_TYPE, DFP_C_TYPE); +#endif + +#if defined (L_eq_sd) || defined (L_eq_dd) || defined (L_eq_td) +extern CMPtype DFP_EQ (DFP_C_TYPE, DFP_C_TYPE); +#endif + +#if defined (L_ne_sd) || defined (L_ne_dd) || defined (L_ne_td) +extern CMPtype DFP_NE (DFP_C_TYPE, DFP_C_TYPE); +#endif + +#if defined (L_lt_sd) || defined (L_lt_dd) || defined (L_lt_td) +extern CMPtype DFP_LT (DFP_C_TYPE, DFP_C_TYPE); +#endif + +#if defined (L_gt_sd) || defined (L_gt_dd) || defined (L_gt_td) +extern CMPtype DFP_GT (DFP_C_TYPE, DFP_C_TYPE); +#endif + +#if defined (L_le_sd) || defined (L_le_dd) || defined (L_le_td) +extern CMPtype DFP_LE (DFP_C_TYPE, DFP_C_TYPE); +#endif + +#if defined (L_ge_sd) || defined (L_ge_dd) || defined (L_ge_td) +extern CMPtype DFP_GE (DFP_C_TYPE, DFP_C_TYPE); +#endif + +#if defined (L_unord_sd) || defined (L_unord_dd) || defined (L_unord_td) +extern CMPtype DFP_UNORD (DFP_C_TYPE, DFP_C_TYPE); +#endif + +#if defined (L_sd_to_dd) || defined (L_sd_to_td) || defined (L_dd_to_sd) \ + || defined (L_dd_to_td) || defined (L_td_to_sd) || defined (L_td_to_dd) +extern DFP_C_TYPE_TO DFP_TO_DFP (DFP_C_TYPE); +#endif + +#if defined (L_sd_to_si) || defined (L_dd_to_si) || defined (L_td_to_si) \ + || defined (L_sd_to_di) || defined (L_dd_to_di) || defined (L_td_to_di) \ + || defined (L_sd_to_usi) || defined (L_dd_to_usi) || defined (L_td_to_usi) \ + || defined (L_sd_to_udi) || defined (L_dd_to_udi) || defined (L_td_to_udi) +extern INT_TYPE DFP_TO_INT (DFP_C_TYPE); +#endif + +#if defined (L_si_to_sd) || defined (L_si_to_dd) || defined (L_si_to_td) \ + || defined (L_di_to_sd) || defined (L_di_to_dd) || defined (L_di_to_td) \ + || defined (L_usi_to_sd) || defined (L_usi_to_dd) || defined (L_usi_to_td) \ + || defined (L_udi_to_sd) || defined (L_udi_to_dd) || defined (L_udi_to_td) +extern DFP_C_TYPE INT_TO_DFP (INT_TYPE); +#endif + +#if defined (L_sd_to_sf) || defined (L_dd_to_sf) || defined (L_td_to_sf) \ + || defined (L_sd_to_df) || defined (L_dd_to_df) || defined (L_td_to_df) \ + || ((defined (L_sd_to_xf) || defined (L_dd_to_xf) || defined (L_td_to_xf)) \ + && LONG_DOUBLE_HAS_XF_MODE) \ + || ((defined (L_sd_to_tf) || defined (L_dd_to_tf) || defined (L_td_to_tf)) \ + && LONG_DOUBLE_HAS_TF_MODE) +extern BFP_TYPE DFP_TO_BFP (DFP_C_TYPE); +#endif + +#if defined (L_sf_to_sd) || defined (L_sf_to_dd) || defined (L_sf_to_td) \ + || defined (L_df_to_sd) || defined (L_df_to_dd) || defined (L_df_to_td) \ + || ((defined (L_xf_to_sd) || defined (L_xf_to_dd) || defined (L_xf_to_td)) \ + && LONG_DOUBLE_HAS_XF_MODE) \ + || ((defined (L_tf_to_sd) || defined (L_tf_to_dd) || defined (L_tf_to_td)) \ + && LONG_DOUBLE_HAS_TF_MODE) +extern DFP_C_TYPE BFP_TO_DFP (BFP_TYPE); +#endif + +#endif /* _DFPBIT_H */ diff --git a/contrib/toolchain/gcc/5x/libgcc/divmod.c b/contrib/toolchain/gcc/5x/libgcc/divmod.c new file mode 100644 index 0000000000..5a058690ca --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/divmod.c @@ -0,0 +1,73 @@ +/* Copyright (C) 2000-2015 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 +. */ + +long udivmodsi4 (); + +long +__divsi3 (long a, long b) +{ + int neg = 0; + long res; + + if (a < 0) + { + a = -a; + neg = !neg; + } + + if (b < 0) + { + b = -b; + neg = !neg; + } + + res = udivmodsi4 (a, b, 0); + + if (neg) + res = -res; + + return res; +} + +long +__modsi3 (long a, long b) +{ + int neg = 0; + long res; + + if (a < 0) + { + a = -a; + neg = 1; + } + + if (b < 0) + b = -b; + + res = udivmodsi4 (a, b, 1); + + if (neg) + res = -res; + + return res; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/emutls.c b/contrib/toolchain/gcc/5x/libgcc/emutls.c new file mode 100644 index 0000000000..3eab33fd30 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/emutls.c @@ -0,0 +1,203 @@ +/* TLS emulation. + Copyright (C) 2006-2015 Free Software Foundation, Inc. + Contributed by Jakub Jelinek . + +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 "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" +#include "gthr.h" + +typedef unsigned int word __attribute__((mode(word))); +typedef unsigned int pointer __attribute__((mode(pointer))); + +struct __emutls_object +{ + word size; + word align; + union { + pointer offset; + void *ptr; + } loc; + void *templ; +}; + +struct __emutls_array +{ + pointer size; + void **data[]; +}; + +void *__emutls_get_address (struct __emutls_object *); +void __emutls_register_common (struct __emutls_object *, word, word, void *); + +#ifdef __GTHREADS +#ifdef __GTHREAD_MUTEX_INIT +static __gthread_mutex_t emutls_mutex = __GTHREAD_MUTEX_INIT; +#else +static __gthread_mutex_t emutls_mutex; +#endif +static __gthread_key_t emutls_key; +static pointer emutls_size; + +static void +emutls_destroy (void *ptr) +{ + struct __emutls_array *arr = ptr; + pointer size = arr->size; + pointer i; + + for (i = 0; i < size; ++i) + { + if (arr->data[i]) + free (arr->data[i][-1]); + } + + free (ptr); +} + +static void +emutls_init (void) +{ +#ifndef __GTHREAD_MUTEX_INIT + __GTHREAD_MUTEX_INIT_FUNCTION (&emutls_mutex); +#endif + if (__gthread_key_create (&emutls_key, emutls_destroy) != 0) + abort (); +} +#endif + +static void * +emutls_alloc (struct __emutls_object *obj) +{ + void *ptr; + void *ret; + + /* We could use here posix_memalign if available and adjust + emutls_destroy accordingly. */ + if (obj->align <= sizeof (void *)) + { + ptr = malloc (obj->size + sizeof (void *)); + if (ptr == NULL) + abort (); + ((void **) ptr)[0] = ptr; + ret = ptr + sizeof (void *); + } + else + { + ptr = malloc (obj->size + sizeof (void *) + obj->align - 1); + if (ptr == NULL) + abort (); + ret = (void *) (((pointer) (ptr + sizeof (void *) + obj->align - 1)) + & ~(pointer)(obj->align - 1)); + ((void **) ret)[-1] = ptr; + } + + if (obj->templ) + memcpy (ret, obj->templ, obj->size); + else + memset (ret, 0, obj->size); + + return ret; +} + +void * +__emutls_get_address (struct __emutls_object *obj) +{ + if (! __gthread_active_p ()) + { + if (__builtin_expect (obj->loc.ptr == NULL, 0)) + obj->loc.ptr = emutls_alloc (obj); + return obj->loc.ptr; + } + +#ifndef __GTHREADS + abort (); +#else + pointer offset = __atomic_load_n (&obj->loc.offset, __ATOMIC_ACQUIRE); + + if (__builtin_expect (offset == 0, 0)) + { + static __gthread_once_t once = __GTHREAD_ONCE_INIT; + __gthread_once (&once, emutls_init); + __gthread_mutex_lock (&emutls_mutex); + offset = obj->loc.offset; + if (offset == 0) + { + offset = ++emutls_size; + __atomic_store_n (&obj->loc.offset, offset, __ATOMIC_RELEASE); + } + __gthread_mutex_unlock (&emutls_mutex); + } + + struct __emutls_array *arr = __gthread_getspecific (emutls_key); + if (__builtin_expect (arr == NULL, 0)) + { + pointer size = offset + 32; + arr = calloc (size + 1, sizeof (void *)); + if (arr == NULL) + abort (); + arr->size = size; + __gthread_setspecific (emutls_key, (void *) arr); + } + else if (__builtin_expect (offset > arr->size, 0)) + { + pointer orig_size = arr->size; + pointer size = orig_size * 2; + if (offset > size) + size = offset + 32; + arr = realloc (arr, (size + 1) * sizeof (void *)); + if (arr == NULL) + abort (); + arr->size = size; + memset (arr->data + orig_size, 0, + (size - orig_size) * sizeof (void *)); + __gthread_setspecific (emutls_key, (void *) arr); + } + + void *ret = arr->data[offset - 1]; + if (__builtin_expect (ret == NULL, 0)) + { + ret = emutls_alloc (obj); + arr->data[offset - 1] = ret; + } + return ret; +#endif +} + +void +__emutls_register_common (struct __emutls_object *obj, + word size, word align, void *templ) +{ + if (obj->size < size) + { + obj->size = size; + obj->templ = NULL; + } + if (obj->align < align) + obj->align = align; + if (templ && size == obj->size) + obj->templ = templ; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/enable-execute-stack-empty.c b/contrib/toolchain/gcc/5x/libgcc/enable-execute-stack-empty.c new file mode 100644 index 0000000000..e2cc02ba11 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/enable-execute-stack-empty.c @@ -0,0 +1,10 @@ +/* Dummy implementation of __enable_execute_stack. */ + +extern void __enable_execute_stack (void *); + +/* Attempt to turn on execute permission for the stack. */ + +void +__enable_execute_stack (void *addr __attribute__((__unused__))) +{ +} diff --git a/contrib/toolchain/gcc/5x/libgcc/enable-execute-stack-mprotect.c b/contrib/toolchain/gcc/5x/libgcc/enable-execute-stack-mprotect.c new file mode 100644 index 0000000000..b9cbdd77ac --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/enable-execute-stack-mprotect.c @@ -0,0 +1,79 @@ +/* Implement __enable_execute_stack using mprotect(2). + Copyright (C) 2011-2015 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 +#include + +#define STACK_PROT_RWX (PROT_READ | PROT_WRITE | PROT_EXEC) + +static int need_enable_exec_stack; + +static void check_enabling (void) __attribute__ ((unused)); +extern void __enable_execute_stack (void *); + +#if defined __sun__ && defined __svr4__ +static void __attribute__ ((constructor)) +check_enabling (void) +{ + int prot = (int) sysconf (_SC_STACK_PROT); + + if (prot != STACK_PROT_RWX) + need_enable_exec_stack = 1; +} +#else +/* There is no way to query the execute permission of the stack, so + we always issue the mprotect() call. */ + +static int need_enable_exec_stack = 1; +#endif + +/* Attempt to turn on access permissions for the stack. Unfortunately it + is not possible to make this namespace-clean.*/ + +void +__enable_execute_stack (void *addr) +{ + if (!need_enable_exec_stack) + return; + else + { + static long size, mask; + + if (size == 0) { + size = getpagesize (); + mask = ~(size - 1); + } + + char *page = (char *) (((long) addr) & mask); + char *end = (char *) + ((((long) (addr + __LIBGCC_TRAMPOLINE_SIZE__)) & mask) + size); + + if (mprotect (page, end - page, STACK_PROT_RWX) < 0) + /* Note that no errors should be emitted by this code; it is + considered dangerous for library calls to send messages to + stdout/stderr. */ + abort (); + } +} diff --git a/contrib/toolchain/gcc/5x/libgcc/fixed-bit.c b/contrib/toolchain/gcc/5x/libgcc/fixed-bit.c new file mode 100644 index 0000000000..a8953e3e41 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/fixed-bit.c @@ -0,0 +1,1205 @@ +/* This is a software fixed-point library. + Copyright (C) 2007-2015 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 fixed-point arithmetic. + + Contributed by Chao-ying Fu . */ + +/* To use this file, we need to define one of the following: + QQ_MODE, UQQ_MODE, HQ_MODE, UHQ_MODE, SQ_MODE, USQ_MODE, DQ_MODE, UDQ_MODE, + TQ_MODE, UTQ_MODE, HA_MODE, UHA_MODE, SA_MODE, USA_MODE, DA_MODE, UDA_MODE, + TA_MODE, UTA_MODE. + Then, all operators for this machine mode will be created. + + Or, we need to define FROM_* TO_* for conversions from one mode to another + mode. The mode could be one of the following: + Fract: QQ, UQQ, HQ, UHQ, SQ, USQ, DQ, UDQ, TQ, UTQ + Accum: HA, UHA, SA, USA, DA, UDA, TA, UTA + Signed integer: QI, HI, SI, DI, TI + Unsigned integer: UQI, UHI, USI, UDI, UTI + Floating-point: SF, DF + Ex: If we define FROM_QQ and TO_SI, the conversion from QQ to SI is + generated. */ + +#include "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" + +#ifndef MIN_UNITS_PER_WORD +#define MIN_UNITS_PER_WORD UNITS_PER_WORD +#endif + +#include "fixed-bit.h" + +#if defined(FIXED_ADD) && defined(L_add) +FIXED_C_TYPE +FIXED_ADD (FIXED_C_TYPE a, FIXED_C_TYPE b) +{ + FIXED_C_TYPE c; + INT_C_TYPE x, y, z; + memcpy (&x, &a, FIXED_SIZE); + memcpy (&y, &b, FIXED_SIZE); + z = x + y; +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + memcpy (&c, &z, FIXED_SIZE); + return c; +} +#endif /* FIXED_ADD */ + +#if defined(FIXED_SSADD) && defined(L_ssadd) +FIXED_C_TYPE +FIXED_SSADD (FIXED_C_TYPE a, FIXED_C_TYPE b) +{ + FIXED_C_TYPE c; + INT_C_TYPE x, y, z; + memcpy (&x, &a, FIXED_SIZE); + memcpy (&y, &b, FIXED_SIZE); + z = x + (UINT_C_TYPE) y; + if ((((x ^ y) >> I_F_BITS) & 1) == 0) + { + if (((z ^ x) >> I_F_BITS) & 1) + { + z = ((UINT_C_TYPE) 1) << I_F_BITS; + if (x >= 0) + z -= (UINT_C_TYPE) 1; + } + } +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + memcpy (&c, &z, FIXED_SIZE); + return c; +} +#endif /* FIXED_SSADD */ + +#if defined(FIXED_USADD) && defined(L_usadd) +FIXED_C_TYPE +FIXED_USADD (FIXED_C_TYPE a, FIXED_C_TYPE b) +{ + FIXED_C_TYPE c; + INT_C_TYPE x, y, z; + memcpy (&x, &a, FIXED_SIZE); + memcpy (&y, &b, FIXED_SIZE); + z = x + y; +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + if (z < x || z < y) /* max */ + { + z = -1; +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + } + memcpy (&c, &z, FIXED_SIZE); + return c; +} +#endif /* FIXED_USADD */ + +#if defined(FIXED_SUB) && defined(L_sub) +FIXED_C_TYPE +FIXED_SUB (FIXED_C_TYPE a, FIXED_C_TYPE b) +{ + FIXED_C_TYPE c; + INT_C_TYPE x, y, z; + memcpy (&x, &a, FIXED_SIZE); + memcpy (&y, &b, FIXED_SIZE); + z = x - y; +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + memcpy (&c, &z, FIXED_SIZE); + return c; +} +#endif /* FIXED_SUB */ + +#if defined(FIXED_SSSUB) && defined(L_sssub) +FIXED_C_TYPE +FIXED_SSSUB (FIXED_C_TYPE a, FIXED_C_TYPE b) +{ + FIXED_C_TYPE c; + INT_C_TYPE x, y, z; + memcpy (&x, &a, FIXED_SIZE); + memcpy (&y, &b, FIXED_SIZE); + z = x - (UINT_C_TYPE) y; + if (((x ^ y) >> I_F_BITS) & 1) + { + if (((z ^ x) >> I_F_BITS) & 1) + { + z = ((UINT_C_TYPE) 1) << I_F_BITS; + if (x >= 0) + z -= (UINT_C_TYPE) 1; + } + } +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + memcpy (&c, &z, FIXED_SIZE); + return c; +} +#endif /* FIXED_SSSUB */ + +#if defined(FIXED_USSUB) && defined(L_ussub) +FIXED_C_TYPE +FIXED_USSUB (FIXED_C_TYPE a, FIXED_C_TYPE b) +{ + FIXED_C_TYPE c; + INT_C_TYPE x, y, z; + memcpy (&x, &a, FIXED_SIZE); + memcpy (&y, &b, FIXED_SIZE); + z = x - y; + if (x < y) + z = 0; +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + memcpy (&c, &z, FIXED_SIZE); + return c; +} +#endif /* FIXED_USSUB */ + +#if defined(FIXED_SATURATE1) && defined(L_saturate1) +void +FIXED_SATURATE1 (DINT_C_TYPE *a) +{ + DINT_C_TYPE max, min; + max = (DINT_C_TYPE)1 << I_F_BITS; + max = max - 1; +#if MODE_UNSIGNED == 0 + min = (DINT_C_TYPE)1 << (2 * FIXED_WIDTH - 1); + min = min >> (2 * FIXED_WIDTH - 1 - I_F_BITS); +#else + min = 0; +#endif + if (*a > max) + *a = max; + else if (*a < min) + *a = min; +} +#endif /* FIXED_SATURATE1 */ + +#if defined(FIXED_SATURATE2) && defined(L_saturate2) +void +FIXED_SATURATE2 (INT_C_TYPE *high, INT_C_TYPE *low) +{ + INT_C_TYPE r_max, s_max, r_min, s_min; + r_max = 0; +#if (MODE_UNSIGNED == 0) || HAVE_PADDING_BITS + s_max = (INT_C_TYPE)1 << I_F_BITS; + s_max = s_max - 1; +#else + s_max = -1; +#endif +#if MODE_UNSIGNED == 0 + r_min = -1; + s_min = (INT_C_TYPE)1 << (FIXED_WIDTH - 1); + s_min = s_min >> (FIXED_WIDTH - 1 - I_F_BITS); +#else + r_min = 0; + s_min = 0; +#endif + + if (*high > r_max + || (*high == r_max && (UINT_C_TYPE)(*low) > (UINT_C_TYPE)s_max)) + { + *high = r_max; + *low = s_max; + } + else if (*high < r_min || + (*high == r_min && (UINT_C_TYPE)(*low) < (UINT_C_TYPE)s_min)) + { + *high = r_min; + *low = s_min; + } +} +#endif /* FIXED_SATURATE2 */ + +#if defined(FIXED_MULHELPER) && defined(L_mulhelper) +FIXED_C_TYPE +FIXED_MULHELPER (FIXED_C_TYPE a, FIXED_C_TYPE b, word_type satp) +{ + FIXED_C_TYPE c; + INT_C_TYPE x, y; + +#if defined (DINT_C_TYPE) + INT_C_TYPE z; + DINT_C_TYPE dx, dy, dz; + memcpy (&x, &a, FIXED_SIZE); + memcpy (&y, &b, FIXED_SIZE); + dx = (DINT_C_TYPE) x; + dy = (DINT_C_TYPE) y; + dz = dx * dy; + /* Round the result by adding (1 << (FBITS -1)). */ + dz += ((DINT_C_TYPE) 1 << (FBITS - 1)); + dz = dz >> FBITS; + if (satp) + FIXED_SATURATE1 (&dz); + + z = (INT_C_TYPE) dz; +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + memcpy (&c, &z, FIXED_SIZE); + return c; + +#else /* No DINT_C_TYPE */ + /* The result of multiplication expands to two INT_C_TYPE. */ + INTunion aa, bb; + INTunion a_high, a_low, b_high, b_low; + INTunion high_high, high_low, low_high, low_low; + INTunion r, s, temp1, temp2; + INT_C_TYPE carry = 0; + INT_C_TYPE z; + + memcpy (&x, &a, FIXED_SIZE); + memcpy (&y, &b, FIXED_SIZE); + + /* Decompose a and b. */ + aa.ll = x; + bb.ll = y; + + a_high.s.low = aa.s.high; + a_high.s.high = 0; + a_low.s.low = aa.s.low; + a_low.s.high = 0; + b_high.s.low = bb.s.high; + b_high.s.high = 0; + b_low.s.low = bb.s.low; + b_low.s.high = 0; + + /* Perform four multiplications. */ + low_low.ll = a_low.ll * b_low.ll; + low_high.ll = a_low.ll * b_high.ll; + high_low.ll = a_high.ll * b_low.ll; + high_high.ll = a_high.ll * b_high.ll; + + /* Accumulate four results to {r, s}. */ + temp1.s.high = high_low.s.low; + temp1.s.low = 0; + s.ll = low_low.ll + temp1.ll; + if ((UINT_C_TYPE) s.ll < (UINT_C_TYPE) low_low.ll + || (UINT_C_TYPE) s.ll < (UINT_C_TYPE) temp1.ll) + carry ++; /* Carry. */ + temp1.ll = s.ll; + temp2.s.high = low_high.s.low; + temp2.s.low = 0; + s.ll = temp1.ll + temp2.ll; + if ((UINT_C_TYPE) s.ll < (UINT_C_TYPE) temp1.ll + || (UINT_C_TYPE) s.ll < (UINT_C_TYPE) temp2.ll) + carry ++; /* Carry. */ + + temp1.s.low = high_low.s.high; + temp1.s.high = 0; + r.ll = high_high.ll + temp1.ll; + temp1.s.low = low_high.s.high; + temp1.s.high = 0; + r.ll = r.ll + temp1.ll + carry; + +#if MODE_UNSIGNED == 0 + /* For signed types, we need to add neg(y) to r, if x < 0. */ + if (x < 0) + r.ll = r.ll - y; + /* We need to add neg(x) to r, if y < 0. */ + if (y < 0) + r.ll = r.ll - x; +#endif + + /* Round the result by adding (1 << (FBITS -1)). */ + temp1.ll = s.ll; + s.ll += ((INT_C_TYPE) 1 << (FBITS -1)); + if ((UINT_C_TYPE) s.ll < (UINT_C_TYPE) temp1.ll + || (UINT_C_TYPE) s.ll < (UINT_C_TYPE) ((INT_C_TYPE) 1 << (FBITS -1))) + r.ll += 1; + + /* Shift right the result by FBITS. */ +#if FBITS == FIXED_WIDTH + /* This happens only for unsigned types without any padding bits. + So, it is safe to set r.ll to 0 as it is logically shifted right. */ + s.ll = r.ll; + r.ll = 0; +#else + s.ll = ((UINT_C_TYPE)s.ll) >> FBITS; + temp1.ll = r.ll << (FIXED_WIDTH - FBITS); + s.ll = s.ll | temp1.ll; + r.ll = r.ll >> FBITS; +#endif + + if (satp) + FIXED_SATURATE2 (&r.ll, &s.ll); + + z = (INT_C_TYPE) s.ll; +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + memcpy (&c, &z, FIXED_SIZE); + return c; +#endif +} +#endif /* FIXED_MULHELPER */ + +#if defined(FIXED_MUL) && defined(L_mul) +FIXED_C_TYPE +FIXED_MUL (FIXED_C_TYPE a, FIXED_C_TYPE b) +{ + return FIXED_MULHELPER (a, b, 0); +} +#endif /* FIXED_MUL */ + +#if defined(FIXED_SSMUL) && defined(L_ssmul) +FIXED_C_TYPE +FIXED_SSMUL (FIXED_C_TYPE a, FIXED_C_TYPE b) +{ + return FIXED_MULHELPER (a, b, 1); +} +#endif /* FIXED_SSMUL */ + +#if defined(FIXED_USMUL) && defined(L_usmul) +FIXED_C_TYPE +FIXED_USMUL (FIXED_C_TYPE a, FIXED_C_TYPE b) +{ + return FIXED_MULHELPER (a, b, 1); +} +#endif /* FIXED_USMUL */ + +#if defined(FIXED_DIVHELPER) && defined(L_divhelper) +FIXED_C_TYPE +FIXED_DIVHELPER (FIXED_C_TYPE a, FIXED_C_TYPE b, word_type satp) +{ + FIXED_C_TYPE c; + INT_C_TYPE x, y; + INT_C_TYPE z; + +#if defined (DINT_C_TYPE) + DINT_C_TYPE dx, dy, dz; + memcpy (&x, &a, FIXED_SIZE); + memcpy (&y, &b, FIXED_SIZE); + dx = (DINT_C_TYPE) x; + dy = (DINT_C_TYPE) y; + dx = dx << FBITS; + dz = dx / dy; + if (satp) + FIXED_SATURATE1 (&dz); + z = (INT_C_TYPE) dz; +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + memcpy (&c, &z, FIXED_SIZE); + return c; + +#else /* No DINT_C_TYPE */ + INT_C_TYPE pos_a, pos_b, r, s; + INT_C_TYPE quo_r, quo_s, mod, temp; + word_type i; +#if MODE_UNSIGNED == 0 + word_type num_of_neg = 0; +#endif + + memcpy (&x, &a, FIXED_SIZE); + memcpy (&y, &b, FIXED_SIZE); + pos_a = x; + pos_b = y; + +#if MODE_UNSIGNED == 0 + /* If a < 0, negate a. */ + if (pos_a < 0) + { + pos_a = -pos_a; + num_of_neg ++; + } + /* If b < 0, negate b. */ + if (pos_b < 0) + { + pos_b = -pos_b; + num_of_neg ++; + } +#endif + + /* Left shift pos_a to {r, s} by FBITS. */ +#if FBITS == FIXED_WIDTH + /* This happens only for unsigned types without any padding bits. */ + r = pos_a; + s = 0; +#else + s = pos_a << FBITS; + r = pos_a >> (FIXED_WIDTH - FBITS); +#endif + + /* Unsigned divide r by pos_b to quo_r. The remainder is in mod. */ + quo_r = (UINT_C_TYPE)r / (UINT_C_TYPE)pos_b; + mod = (UINT_C_TYPE)r % (UINT_C_TYPE)pos_b; + quo_s = 0; + + for (i = 0; i < FIXED_WIDTH; i++) + { + /* Record the leftmost bit of mod. */ + word_type leftmost_mode = (mod >> (FIXED_WIDTH - 1)) & 1; + /* Shift left mod by 1 bit. */ + mod = mod << 1; + /* Test the leftmost bit of s to add to mod. */ + if ((s >> (FIXED_WIDTH - 1)) & 1) + mod ++; + /* Shift left quo_s by 1 bit. */ + quo_s = quo_s << 1; + /* Try to calculate (mod - pos_b). */ + temp = mod - pos_b; + if (leftmost_mode || (UINT_C_TYPE)mod >= (UINT_C_TYPE)pos_b) + { + quo_s ++; + mod = temp; + } + /* Shift left s by 1 bit. */ + s = s << 1; + } + +#if MODE_UNSIGNED == 0 + if (num_of_neg == 1) + { + quo_s = -quo_s; + if (quo_s == 0) + quo_r = -quo_r; + else + quo_r = ~quo_r; + } +#endif + if (satp) + FIXED_SATURATE2 (&quo_r, &quo_s); + z = quo_s; +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + memcpy (&c, &z, FIXED_SIZE); + return c; +#endif +} +#endif /* FIXED_DIVHELPER */ + +#if defined(FIXED_DIV) && defined(L_div) +FIXED_C_TYPE +FIXED_DIV (FIXED_C_TYPE a, FIXED_C_TYPE b) +{ + return FIXED_DIVHELPER (a, b, 0); +} +#endif /* FIXED_DIV */ + + +#if defined(FIXED_UDIV) && defined(L_udiv) +FIXED_C_TYPE +FIXED_UDIV (FIXED_C_TYPE a, FIXED_C_TYPE b) +{ + return FIXED_DIVHELPER (a, b, 0); +} +#endif /* FIXED_UDIV */ + +#if defined(FIXED_SSDIV) && defined(L_ssdiv) +FIXED_C_TYPE +FIXED_SSDIV (FIXED_C_TYPE a, FIXED_C_TYPE b) +{ + return FIXED_DIVHELPER (a, b, 1); +} +#endif /* FIXED_SSDIV */ + +#if defined(FIXED_USDIV) && defined(L_usdiv) +FIXED_C_TYPE +FIXED_USDIV (FIXED_C_TYPE a, FIXED_C_TYPE b) +{ + return FIXED_DIVHELPER (a, b, 1); +} +#endif /* FIXED_USDIV */ + +#if defined(FIXED_NEG) && defined(L_neg) +FIXED_C_TYPE +FIXED_NEG (FIXED_C_TYPE a) +{ + FIXED_C_TYPE c; + INT_C_TYPE x, z; + memcpy (&x, &a, FIXED_SIZE); + z = -x; +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + memcpy (&c, &z, FIXED_SIZE); + return c; +} +#endif /* FIXED_NEG */ + +#if defined(FIXED_SSNEG) && defined(L_ssneg) +FIXED_C_TYPE +FIXED_SSNEG (FIXED_C_TYPE a) +{ + FIXED_C_TYPE c; + INT_C_TYPE x, y, z; + memcpy (&y, &a, FIXED_SIZE); + x = 0; + z = x - (UINT_C_TYPE) y; + if (((x ^ y) >> I_F_BITS) & 1) + { + if (((z ^ x) >> I_F_BITS) & 1) + z = (((UINT_C_TYPE) 1) << I_F_BITS) - 1; + } +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + memcpy (&c, &z, FIXED_SIZE); + return c; +} +#endif /* FIXED_SSNEG */ + +#if defined(FIXED_USNEG) && defined(L_usneg) +FIXED_C_TYPE +FIXED_USNEG (FIXED_C_TYPE a __attribute__ ((__unused__))) +{ + FIXED_C_TYPE c; + INT_C_TYPE z; + z = 0; + memcpy (&c, &z, FIXED_SIZE); + return c; +} +#endif /* FIXED_USNEG */ + +#if defined(FIXED_ASHLHELPER) && defined(L_ashlhelper) +FIXED_C_TYPE +FIXED_ASHLHELPER (FIXED_C_TYPE a, word_type b, word_type satp) +{ + FIXED_C_TYPE c; + INT_C_TYPE x, z; + +#if defined (DINT_C_TYPE) + DINT_C_TYPE dx, dz; + memcpy (&x, &a, FIXED_SIZE); + dx = (DINT_C_TYPE) x; + if (b >= FIXED_WIDTH) + dz = dx << FIXED_WIDTH; + else + dz = dx << b; + if (satp) + FIXED_SATURATE1 (&dz); + z = (INT_C_TYPE) dz; +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + memcpy (&c, &z, FIXED_SIZE); + return c; + +#else /* No DINT_C_TYPE */ + INT_C_TYPE r, s; + memcpy (&x, &a, FIXED_SIZE); + /* We need to shift left x by b bits to {r, s}. */ + if (b >= FIXED_WIDTH) + { + r = b; + s = 0; + } + else + { + s = x << b; + r = x >> (FIXED_WIDTH - b); + } + if (satp) + FIXED_SATURATE2 (&r, &s); + z = s; +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + memcpy (&c, &z, FIXED_SIZE); + return c; +#endif +} +#endif /* FIXED_ASHLHELPER */ + +#if defined(FIXED_ASHL) && defined(L_ashl) +FIXED_C_TYPE +FIXED_ASHL (FIXED_C_TYPE a, word_type b) +{ + return FIXED_ASHLHELPER (a, b, 0); +} +#endif /* FIXED_ASHL */ + +#if defined(FIXED_ASHR) && defined(L_ashr) +FIXED_C_TYPE +FIXED_ASHR (FIXED_C_TYPE a, word_type b) +{ + FIXED_C_TYPE c; + INT_C_TYPE x, z; + memcpy (&x, &a, FIXED_SIZE); + z = x >> b; +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + memcpy (&c, &z, FIXED_SIZE); + return c; +} +#endif /* FIXED_ASHR */ + +#if defined(FIXED_LSHR) && defined(L_lshr) +FIXED_C_TYPE +FIXED_LSHR (FIXED_C_TYPE a, word_type b) +{ + FIXED_C_TYPE c; + INT_C_TYPE x, z; + memcpy (&x, &a, FIXED_SIZE); + z = x >> b; +#if HAVE_PADDING_BITS + z = z << PADDING_BITS; + z = z >> PADDING_BITS; +#endif + memcpy (&c, &z, FIXED_SIZE); + return c; +} +#endif /* FIXED_LSHR */ + +#if defined(FIXED_SSASHL) && defined(L_ssashl) +FIXED_C_TYPE +FIXED_SSASHL (FIXED_C_TYPE a, word_type b) +{ + return FIXED_ASHLHELPER (a, b, 1); +} +#endif /* FIXED_SSASHL */ + +#if defined(FIXED_USASHL) && defined(L_usashl) +FIXED_C_TYPE +FIXED_USASHL (FIXED_C_TYPE a, word_type b) +{ + return FIXED_ASHLHELPER (a, b, 1); +} +#endif /* FIXED_USASHL */ + +#if defined(FIXED_CMP) && defined(L_cmp) +word_type +FIXED_CMP (FIXED_C_TYPE a, FIXED_C_TYPE b) +{ + INT_C_TYPE x, y; + memcpy (&x, &a, FIXED_SIZE); + memcpy (&y, &b, FIXED_SIZE); + + if (x < y) + return 0; + else if (x > y) + return 2; + + return 1; +} +#endif /* FIXED_CMP */ + +/* Fixed -> Fixed. */ +#if defined(FRACT) && defined(L_fract) && FROM_TYPE == 4 && TO_TYPE == 4 +TO_FIXED_C_TYPE +FRACT (FROM_FIXED_C_TYPE a) +{ + TO_FIXED_C_TYPE c; + FROM_INT_C_TYPE x; + TO_INT_C_TYPE z; + int shift_amount; + memcpy (&x, &a, FROM_FIXED_SIZE); +#if TO_FBITS > FROM_FBITS /* Need left shift. */ + shift_amount = TO_FBITS - FROM_FBITS; + z = (TO_INT_C_TYPE) x; + z = z << shift_amount; +#else /* TO_FBITS <= FROM_FBITS. Need right Shift. */ + shift_amount = FROM_FBITS - TO_FBITS; + x = x >> shift_amount; + z = (TO_INT_C_TYPE) x; +#endif /* TO_FBITS > FROM_FBITS */ + +#if TO_HAVE_PADDING_BITS + z = z << TO_PADDING_BITS; + z = z >> TO_PADDING_BITS; +#endif + memcpy (&c, &z, TO_FIXED_SIZE); + return c; +} +#endif /* FRACT && FROM_TYPE == 4 && TO_TYPE == 4 */ + +/* Fixed -> Fixed with saturation. */ +#if defined(SATFRACT) && defined(L_satfract) && FROM_TYPE == 4 && TO_TYPE == 4 +TO_FIXED_C_TYPE +SATFRACT (FROM_FIXED_C_TYPE a) +{ + TO_FIXED_C_TYPE c; + TO_INT_C_TYPE z; + FROM_INT_C_TYPE x; +#if FROM_MODE_UNSIGNED == 0 + BIG_SINT_C_TYPE high, low; + BIG_SINT_C_TYPE max_high, max_low; +#if TO_MODE_UNSIGNED == 0 + BIG_SINT_C_TYPE min_high, min_low; +#endif +#else + BIG_UINT_C_TYPE high, low; + BIG_UINT_C_TYPE max_high, max_low; +#endif +#if TO_FBITS > FROM_FBITS + BIG_UINT_C_TYPE utemp; +#endif +#if TO_MODE_UNSIGNED == 0 + BIG_SINT_C_TYPE stemp; +#endif +#if TO_FBITS != FROM_FBITS + int shift_amount; +#endif + memcpy (&x, &a, FROM_FIXED_SIZE); + + /* Step 1. We need to store x to {high, low}. */ +#if FROM_MODE_UNSIGNED == 0 + low = (BIG_SINT_C_TYPE) x; + if (x < 0) + high = -1; + else + high = 0; +#else + low = (BIG_UINT_C_TYPE) x; + high = 0; +#endif + + /* Step 2. We need to shift {high, low}. */ +#if TO_FBITS > FROM_FBITS /* Left shift. */ + shift_amount = TO_FBITS - FROM_FBITS; + utemp = (BIG_UINT_C_TYPE) low; + utemp = utemp >> (BIG_WIDTH - shift_amount); + high = ((BIG_UINT_C_TYPE)(high << shift_amount)) | utemp; + low = low << shift_amount; +#elif TO_FBITS < FROM_FBITS /* Right shift. */ + shift_amount = FROM_FBITS - TO_FBITS; + low = low >> shift_amount; +#endif + + /* Step 3. Compare {high, low} with max and min of TO_FIXED_C_TYPE. */ + max_high = 0; +#if BIG_WIDTH > TO_FIXED_WIDTH || TO_MODE_UNSIGNED == 0 || TO_HAVE_PADDING_BITS + max_low = (BIG_UINT_C_TYPE)1 << TO_I_F_BITS; + max_low = max_low - 1; +#else + max_low = -1; +#endif + +#if TO_MODE_UNSIGNED == 0 + stemp = (BIG_SINT_C_TYPE)1 << (BIG_WIDTH - 1); + stemp = stemp >> (BIG_WIDTH - 1 - TO_I_F_BITS); +#if FROM_MODE_UNSIGNED == 0 + min_high = -1; + min_low = stemp; +#endif +#endif + +#if FROM_MODE_UNSIGNED == 0 && TO_MODE_UNSIGNED == 0 + /* Signed -> Signed. */ + if ((BIG_SINT_C_TYPE) high > (BIG_SINT_C_TYPE) max_high + || ((BIG_SINT_C_TYPE) high == (BIG_SINT_C_TYPE) max_high + && (BIG_UINT_C_TYPE) low > (BIG_UINT_C_TYPE) max_low)) + low = max_low; /* Maximum. */ + else if ((BIG_SINT_C_TYPE) high < (BIG_SINT_C_TYPE) min_high + || ((BIG_SINT_C_TYPE) high == (BIG_SINT_C_TYPE) min_high + && (BIG_UINT_C_TYPE) low < (BIG_UINT_C_TYPE) min_low)) + low = min_low; /* Minimum. */ +#elif FROM_MODE_UNSIGNED == 1 && TO_MODE_UNSIGNED == 1 + /* Unigned -> Unsigned. */ + if ((BIG_UINT_C_TYPE) high > (BIG_UINT_C_TYPE) max_high + || ((BIG_UINT_C_TYPE) high == (BIG_UINT_C_TYPE) max_high + && (BIG_UINT_C_TYPE) low > (BIG_UINT_C_TYPE) max_low)) + low = max_low; /* Maximum. */ +#elif FROM_MODE_UNSIGNED == 0 && TO_MODE_UNSIGNED == 1 + /* Signed -> Unsigned. */ + if (x < 0) + low = 0; /* Minimum. */ + else if ((BIG_UINT_C_TYPE) high > (BIG_UINT_C_TYPE) max_high + || ((BIG_UINT_C_TYPE) high == (BIG_UINT_C_TYPE) max_high + && (BIG_UINT_C_TYPE) low > (BIG_UINT_C_TYPE) max_low)) + low = max_low; /* Maximum. */ +#elif FROM_MODE_UNSIGNED == 1 && TO_MODE_UNSIGNED == 0 + /* Unsigned -> Signed. */ + if ((BIG_SINT_C_TYPE) high < 0) + low = max_low; /* Maximum. */ + else if ((BIG_SINT_C_TYPE) high > (BIG_SINT_C_TYPE) max_high + || ((BIG_SINT_C_TYPE) high == (BIG_SINT_C_TYPE) max_high + && (BIG_UINT_C_TYPE) low > (BIG_UINT_C_TYPE) max_low)) + low = max_low; /* Maximum. */ +#endif + + /* Step 4. Store the result. */ + z = (TO_INT_C_TYPE) low; +#if TO_HAVE_PADDING_BITS + z = z << TO_PADDING_BITS; + z = z >> TO_PADDING_BITS; +#endif + memcpy (&c, &z, TO_FIXED_SIZE); + return c; +} +#endif /* defined(SATFRACT) && FROM_TYPE == 4 && TO_TYPE == 4 */ + +/* Fixed -> Int. */ +#if defined(FRACT) && defined(L_fract) && FROM_TYPE == 4 && TO_TYPE == 1 +TO_INT_C_TYPE +FRACT (FROM_FIXED_C_TYPE a) +{ + FROM_INT_C_TYPE x; + TO_INT_C_TYPE z; + FROM_INT_C_TYPE i = 0; + memcpy (&x, &a, FROM_FIXED_SIZE); + +#if FROM_MODE_UNSIGNED == 0 + if (x < 0) + { +#if FROM_FIXED_WIDTH == FROM_FBITS + if (x != 0) + i = 1; +#else + if (((FROM_INT_C_TYPE)(x << (FROM_FIXED_WIDTH - FROM_FBITS))) != 0) + i = 1; +#endif + } +#endif + +#if FROM_FIXED_WIDTH == FROM_FBITS + x = 0; +#else + x = x >> FROM_FBITS; +#endif + x = x + i; + z = (TO_INT_C_TYPE) x; + return z; +} +#endif /* defined(FRACT) && FROM_TYPE == 4 && TO_TYPE == 1 */ + +/* Fixed -> Unsigned int. */ +#if defined(FRACTUNS) && defined(L_fractuns) && FROM_TYPE == 4 && TO_TYPE == 2 +TO_INT_C_TYPE +FRACTUNS (FROM_FIXED_C_TYPE a) +{ + FROM_INT_C_TYPE x; + TO_INT_C_TYPE z; + FROM_INT_C_TYPE i = 0; + memcpy (&x, &a, FROM_FIXED_SIZE); + +#if FROM_MODE_UNSIGNED == 0 + if (x < 0) + { +#if FROM_FIXED_WIDTH == FROM_FBITS + if (x != 0) + i = 1; +#else + if (((FROM_INT_C_TYPE)(x << (FROM_FIXED_WIDTH - FROM_FBITS))) != 0) + i = 1; +#endif + } +#endif + +#if FROM_FIXED_WIDTH == FROM_FBITS + x = 0; +#else + x = x >> FROM_FBITS; +#endif + x = x + i; + z = (TO_INT_C_TYPE) x; + return z; +} +#endif /* defined(FRACTUNS) && FROM_TYPE == 4 && TO_TYPE == 2 */ + +/* Int -> Fixed. */ +#if defined(FRACT) && defined(L_fract) && FROM_TYPE == 1 && TO_TYPE == 4 +TO_FIXED_C_TYPE +FRACT (FROM_INT_C_TYPE a) +{ + TO_FIXED_C_TYPE c; + TO_INT_C_TYPE z; + z = (TO_INT_C_TYPE) a; +#if TO_FIXED_WIDTH == TO_FBITS + z = 0; +#else + z = z << TO_FBITS; +#endif +#if TO_HAVE_PADDING_BITS + z = z << TO_PADDING_BITS; + z = z >> TO_PADDING_BITS; +#endif + memcpy (&c, &z, TO_FIXED_SIZE); + return c; +} +#endif /* defined(FRACT) && FROM_TYPE == 1 && TO_TYPE == 4 */ + +/* Signed int -> Fixed with saturation. */ +#if defined(SATFRACT) && defined(L_satfract) && FROM_TYPE == 1 && TO_TYPE == 4 +TO_FIXED_C_TYPE +SATFRACT (FROM_INT_C_TYPE a) +{ + TO_FIXED_C_TYPE c; + TO_INT_C_TYPE z; + FROM_INT_C_TYPE x = a; + BIG_SINT_C_TYPE high, low; + BIG_SINT_C_TYPE max_high, max_low; +#if TO_MODE_UNSIGNED == 0 + BIG_SINT_C_TYPE min_high, min_low; + BIG_SINT_C_TYPE stemp; +#endif +#if BIG_WIDTH != TO_FBITS + BIG_UINT_C_TYPE utemp; + int shift_amount; +#endif + + /* Step 1. We need to store x to {high, low}. */ + low = (BIG_SINT_C_TYPE) x; + if (x < 0) + high = -1; + else + high = 0; + + /* Step 2. We need to left shift {high, low}. */ +#if BIG_WIDTH == TO_FBITS + high = low; + low = 0; +#else + shift_amount = TO_FBITS; + utemp = (BIG_UINT_C_TYPE) low; + utemp = utemp >> (BIG_WIDTH - shift_amount); + high = ((BIG_UINT_C_TYPE)(high << shift_amount)) | utemp; + low = low << shift_amount; +#endif + + /* Step 3. Compare {high, low} with max and min of TO_FIXED_C_TYPE. */ + max_high = 0; +#if BIG_WIDTH > TO_FIXED_WIDTH || TO_MODE_UNSIGNED == 0 || TO_HAVE_PADDING_BITS + max_low = (BIG_UINT_C_TYPE)1 << TO_I_F_BITS; + max_low = max_low - 1; +#else + max_low = -1; +#endif + +#if TO_MODE_UNSIGNED == 0 + min_high = -1; + stemp = (BIG_SINT_C_TYPE)1 << (BIG_WIDTH - 1); + stemp = stemp >> (BIG_WIDTH - 1 - TO_I_F_BITS); + min_low = stemp; + + /* Signed -> Signed. */ + if ((BIG_SINT_C_TYPE) high > (BIG_SINT_C_TYPE) max_high + || ((BIG_SINT_C_TYPE) high == (BIG_SINT_C_TYPE) max_high + && (BIG_UINT_C_TYPE) low > (BIG_UINT_C_TYPE) max_low)) + low = max_low; /* Maximum. */ + else if ((BIG_SINT_C_TYPE) high < (BIG_SINT_C_TYPE) min_high + || ((BIG_SINT_C_TYPE) high == (BIG_SINT_C_TYPE) min_high + && (BIG_UINT_C_TYPE) low < (BIG_UINT_C_TYPE) min_low)) + low = min_low; /* Minimum. */ +#else + /* Signed -> Unsigned. */ + if (x < 0) + low = 0; /* Minimum. */ + else if ((BIG_UINT_C_TYPE) high > (BIG_UINT_C_TYPE) max_high + || ((BIG_UINT_C_TYPE) high == (BIG_UINT_C_TYPE) max_high + && (BIG_UINT_C_TYPE) low > (BIG_UINT_C_TYPE) max_low)) + low = max_low; /* Maximum. */ +#endif + + /* Step 4. Store the result. */ + z = (TO_INT_C_TYPE) low; +#if TO_HAVE_PADDING_BITS + z = z << TO_PADDING_BITS; + z = z >> TO_PADDING_BITS; +#endif + memcpy (&c, &z, TO_FIXED_SIZE); + return c; +} +#endif /* defined(SATFRACT) && FROM_TYPE == 1 && TO_TYPE == 4 */ + +/* Unsigned int -> Fixed. */ +#if defined(FRACTUNS) && defined(L_fractuns) &&FROM_TYPE == 2 && TO_TYPE == 4 +TO_FIXED_C_TYPE +FRACTUNS (FROM_INT_C_TYPE a) +{ + TO_FIXED_C_TYPE c; + TO_INT_C_TYPE z; + z = (TO_INT_C_TYPE) a; +#if TO_FIXED_WIDTH == TO_FBITS + z = 0; +#else + z = z << TO_FBITS; +#endif +#if TO_HAVE_PADDING_BITS + z = z << TO_PADDING_BITS; + z = z >> TO_PADDING_BITS; +#endif + memcpy (&c, &z, TO_FIXED_SIZE); + return c; +} +#endif /* defined(FRACTUNS) && FROM_TYPE == 2 && TO_TYPE == 4 */ + +/* Unsigned int -> Fixed with saturation. */ +#if defined(SATFRACTUNS) && defined(L_satfractuns) && FROM_TYPE == 2 && TO_TYPE == 4 +TO_FIXED_C_TYPE +SATFRACTUNS (FROM_INT_C_TYPE a) +{ + TO_FIXED_C_TYPE c; + TO_INT_C_TYPE z; + FROM_INT_C_TYPE x = a; + BIG_UINT_C_TYPE high, low; + BIG_UINT_C_TYPE max_high, max_low; +#if BIG_WIDTH != TO_FBITS + BIG_UINT_C_TYPE utemp; + int shift_amount; +#endif + + /* Step 1. We need to store x to {high, low}. */ + low = (BIG_UINT_C_TYPE) x; + high = 0; + + /* Step 2. We need to left shift {high, low}. */ +#if BIG_WIDTH == TO_FBITS + high = low; + low = 0; +#else + shift_amount = TO_FBITS; + utemp = (BIG_UINT_C_TYPE) low; + utemp = utemp >> (BIG_WIDTH - shift_amount); + high = ((BIG_UINT_C_TYPE)(high << shift_amount)) | utemp; + low = low << shift_amount; +#endif + + /* Step 3. Compare {high, low} with max and min of TO_FIXED_C_TYPE. */ + max_high = 0; +#if BIG_WIDTH > TO_FIXED_WIDTH || TO_MODE_UNSIGNED == 0 || TO_HAVE_PADDING_BITS + max_low = (BIG_UINT_C_TYPE)1 << TO_I_F_BITS; + max_low = max_low - 1; +#else + max_low = -1; +#endif + +#if TO_MODE_UNSIGNED == 1 + /* Unigned -> Unsigned. */ + if ((BIG_UINT_C_TYPE) high > (BIG_UINT_C_TYPE) max_high + || ((BIG_UINT_C_TYPE) high == (BIG_UINT_C_TYPE) max_high + && (BIG_UINT_C_TYPE) low > (BIG_UINT_C_TYPE) max_low)) + low = max_low; /* Maximum. */ +#else + /* Unsigned -> Signed. */ + if ((BIG_SINT_C_TYPE) high < 0) + low = max_low; /* Maximum. */ + else if ((BIG_SINT_C_TYPE) high > (BIG_SINT_C_TYPE) max_high + || ((BIG_SINT_C_TYPE) high == (BIG_SINT_C_TYPE) max_high + && (BIG_UINT_C_TYPE) low > (BIG_UINT_C_TYPE) max_low)) + low = max_low; /* Maximum. */ +#endif + + /* Step 4. Store the result. */ + z = (TO_INT_C_TYPE) low; +#if TO_HAVE_PADDING_BITS + z = z << TO_PADDING_BITS; + z = z >> TO_PADDING_BITS; +#endif + memcpy (&c, &z, TO_FIXED_SIZE); + return c; +} +#endif /* defined(SATFRACTUNS) && FROM_TYPE == 2 && TO_TYPE == 4 */ + +/* Fixed -> Float. */ +#if defined(FRACT) && defined(L_fract) && FROM_TYPE == 4 && TO_TYPE == 3 +TO_FLOAT_C_TYPE +FRACT (FROM_FIXED_C_TYPE a) +{ + FROM_INT_C_TYPE x; + TO_FLOAT_C_TYPE z; + memcpy (&x, &a, FROM_FIXED_SIZE); + z = (TO_FLOAT_C_TYPE) x; + z = z / BASE; + return z; +} +#endif /* defined(FRACT) && FROM_TYPE == 4 && TO_TYPE == 3 */ + +/* Float -> Fixed. */ +#if defined(FRACT) && defined(L_fract) && FROM_TYPE == 3 && TO_TYPE == 4 +TO_FIXED_C_TYPE +FRACT (FROM_FLOAT_C_TYPE a) +{ + FROM_FLOAT_C_TYPE temp; + TO_INT_C_TYPE z; + TO_FIXED_C_TYPE c; + + temp = a * BASE; + z = (TO_INT_C_TYPE) temp; +#if TO_HAVE_PADDING_BITS + z = z << TO_PADDING_BITS; + z = z >> TO_PADDING_BITS; +#endif + memcpy (&c, &z, TO_FIXED_SIZE); + return c; +} +#endif /* defined(FRACT) && FROM_TYPE == 3 && TO_TYPE == 4 */ + +/* Float -> Fixed with saturation. */ +#if defined(SATFRACT) && defined(L_satfract) && FROM_TYPE == 3 && TO_TYPE == 4 +TO_FIXED_C_TYPE +SATFRACT (FROM_FLOAT_C_TYPE a) +{ + FROM_FLOAT_C_TYPE temp; + TO_INT_C_TYPE z; + TO_FIXED_C_TYPE c; + + if (a >= FIXED_MAX) + { +#if TO_MODE_UNSIGNED == 0 || TO_HAVE_PADDING_BITS + z = (TO_INT_C_TYPE)1 << TO_I_F_BITS; + z = z - 1; +#else + z = -1; +#endif + } + else if (a <= FIXED_MIN) + { +#if TO_MODE_UNSIGNED == 0 + z = (TO_INT_C_TYPE)1 << TO_I_F_BITS; +#else + z = 0; +#endif + } + else + { + temp = a * BASE; + z = (TO_INT_C_TYPE) temp; + } + +#if TO_HAVE_PADDING_BITS + z = z << TO_PADDING_BITS; + z = z >> TO_PADDING_BITS; +#endif + memcpy (&c, &z, TO_FIXED_SIZE); + return c; +} +#endif /* defined(SATFRACT) && FROM_TYPE == 3 && TO_TYPE == 4 */ + diff --git a/contrib/toolchain/gcc/5x/libgcc/fixed-bit.h b/contrib/toolchain/gcc/5x/libgcc/fixed-bit.h new file mode 100644 index 0000000000..2efe01d3d3 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/fixed-bit.h @@ -0,0 +1,1283 @@ +/* This is a software fixed-point library. + Copyright (C) 2007-2015 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 _FIXED_BIT_H +#define _FIXED_BIT_H + +#ifdef LIBGCC2_GNU_PREFIX +#define LIBGCC2_FIXEDBIT_GNU_PREFIX +#endif + +/* To use this file we need to define one of the following: + QQ_MODE, UQQ_MODE, HQ_MODE, UHQ_MODE, SQ_MODE, USQ_MODE, DQ_MODE, UDQ_MODE, + TQ_MODE, UTQ_MODE, HA_MODE, UHA_MODE, SA_MODE, USA_MODE, DA_MODE, UDA_MODE, + TA_MODE, UTA_MODE. + Then, all operators for this machine mode will be created. + + Or, we need to define FROM_* TO_* for conversions from one mode to another + mode. The mode could be one of the following: + Fract: QQ, UQQ, HQ, UHQ, SQ, USQ, DQ, UDQ, TQ, UTQ + Accum: HA, UHA, SA, USA, DA, UDA, TA, UTA + Signed integer: QI, HI, SI, DI, TI + Unsigned integer: UQI, UHI, USI, UDI, UTI + Floating-point: SF, DF + Ex: If we define FROM_QQ and TO_SI, the conversion from QQ to SI is + generated. */ + +#ifdef __LIBGCC_HAS_SF_MODE__ +#define LIBGCC2_HAS_SF_MODE 1 +#else +#define LIBGCC2_HAS_SF_MODE 0 +#endif + +#ifdef __LIBGCC_HAS_DF_MODE__ +#define LIBGCC2_HAS_DF_MODE 1 +#else +#define LIBGCC2_HAS_DF_MODE 0 +#endif + +typedef int QItype __attribute__ ((mode (QI))); +typedef unsigned int UQItype __attribute__ ((mode (QI))); +typedef int HItype __attribute__ ((mode (HI))); +typedef unsigned int UHItype __attribute__ ((mode (HI))); +typedef _Fract QQtype __attribute__ ((mode (QQ))); +typedef unsigned _Fract UQQtype __attribute__ ((mode (UQQ))); +typedef _Fract HQtype __attribute__ ((mode (HQ))); +typedef unsigned _Fract UHQtype __attribute__ ((mode (UHQ))); +typedef _Fract HAtype __attribute__ ((mode (HA))); +typedef unsigned _Fract UHAtype __attribute__ ((mode (UHA))); +#define HAVE_QQ 1 +#define HAVE_UQQ 1 +#define HAVE_HQ 1 +#define HAVE_UHQ 1 +#define HAVE_HA 1 +#define HAVE_UHA 1 +#define HAVE_QI 1 +#define HAVE_UQI 1 +#define HAVE_HI 1 +#define HAVE_UHI 1 +#if MIN_UNITS_PER_WORD > 1 +/* These typedefs are usually forbidden on dsp's with UNITS_PER_WORD 1. */ +typedef int SItype __attribute__ ((mode (SI))); +typedef unsigned int USItype __attribute__ ((mode (SI))); +typedef _Fract SQtype __attribute__ ((mode (SQ))); +typedef unsigned _Fract USQtype __attribute__ ((mode (USQ))); +typedef _Fract SAtype __attribute__ ((mode (SA))); +typedef unsigned _Fract USAtype __attribute__ ((mode (USA))); +#define HAVE_SQ 1 +#define HAVE_USQ 1 +#define HAVE_SA 1 +#define HAVE_USA 1 +#define HAVE_SI 1 +#define HAVE_USI 1 +#if LONG_LONG_TYPE_SIZE > 32 +/* These typedefs are usually forbidden on archs with UNITS_PER_WORD 2. */ +typedef int DItype __attribute__ ((mode (DI))); +typedef unsigned int UDItype __attribute__ ((mode (DI))); +typedef _Fract DQtype __attribute__ ((mode (DQ))); +typedef unsigned _Fract UDQtype __attribute__ ((mode (UDQ))); +typedef _Fract DAtype __attribute__ ((mode (DA))); +typedef unsigned _Fract UDAtype __attribute__ ((mode (UDA))); +#define HAVE_DQ 1 +#define HAVE_UDQ 1 +#define HAVE_DA 1 +#define HAVE_UDA 1 +#define HAVE_DI 1 +#define HAVE_UDI 1 +#if MIN_UNITS_PER_WORD > 4 +/* These typedefs are usually forbidden on archs with UNITS_PER_WORD 4. */ +typedef int TItype __attribute__ ((mode (TI))); +typedef unsigned int UTItype __attribute__ ((mode (TI))); +typedef _Fract TQtype __attribute__ ((mode (TQ))); +typedef unsigned _Fract UTQtype __attribute__ ((mode (UTQ))); +typedef _Fract TAtype __attribute__ ((mode (TA))); +typedef unsigned _Fract UTAtype __attribute__ ((mode (UTA))); +#define HAVE_TQ 1 +#define HAVE_UTQ 1 +#define HAVE_TA 1 +#define HAVE_UTA 1 +#define HAVE_TI 1 +#define HAVE_UTI 1 +#endif +#endif +#endif + +#if LIBGCC2_HAS_SF_MODE +typedef float SFtype __attribute__ ((mode (SF))); +#define HAVE_SF 1 +#endif +#if LIBGCC2_HAS_DF_MODE +typedef float DFtype __attribute__ ((mode (DF))); +#define HAVE_DF 1 +#endif + +typedef int word_type __attribute__ ((mode (__word__))); + +/* Based on modes, we create many defines. */ + +#if defined (QQ_MODE) && (HAVE_QQ == 1) +#define FIXED_SIZE 1 /* in bytes. */ +#define INT_C_TYPE QItype +#define UINT_C_TYPE UQItype +#define DINT_C_TYPE HItype +#define DUINT_C_TYPE UHItype +#define MODE_NAME QQ +#define MODE_NAME_S qq +#define MODE_UNSIGNED 0 +#endif + +#if defined (UQQ_MODE) && (HAVE_UQQ == 1) +#define FIXED_SIZE 1 /* in bytes. */ +#define INT_C_TYPE UQItype +#define UINT_C_TYPE UQItype +#define DINT_C_TYPE UHItype +#define DUINT_C_TYPE UHItype +#define MODE_NAME UQQ +#define MODE_NAME_S uqq +#define MODE_UNSIGNED 1 +#endif + +#if defined (HQ_MODE) && (HAVE_HQ == 1) +#define FIXED_SIZE 2 /* in bytes. */ +#define INT_C_TYPE HItype +#define UINT_C_TYPE UHItype + +#if HAVE_SI == 1 +#define DINT_C_TYPE SItype +#define DUINT_C_TYPE USItype +#else +#define HINT_C_TYPE QItype +#define HUINT_C_TYPE UQItype +#endif + +#define MODE_NAME HQ +#define MODE_NAME_S hq +#define MODE_UNSIGNED 0 +#endif + +#if defined (UHQ_MODE) && (HAVE_UHQ == 1) +#define FIXED_SIZE 2 /* in bytes. */ +#define INT_C_TYPE UHItype +#define UINT_C_TYPE UHItype + +#if HAVE_SI == 1 +#define DINT_C_TYPE USItype +#define DUINT_C_TYPE USItype +#else +#define HINT_C_TYPE UQItype +#define HUINT_C_TYPE UQItype +#endif + +#define MODE_NAME UHQ +#define MODE_NAME_S uhq +#define MODE_UNSIGNED 1 +#endif + +#if defined (SQ_MODE) && (HAVE_SQ == 1) +#define FIXED_SIZE 4 /* in bytes. */ +#define INT_C_TYPE SItype +#define UINT_C_TYPE USItype + +#if HAVE_DI == 1 +#define DINT_C_TYPE DItype +#define DUINT_C_TYPE UDItype +#else +#define HINT_C_TYPE HItype +#define HUINT_C_TYPE UHItype +#endif + +#define MODE_NAME SQ +#define MODE_NAME_S sq +#define MODE_UNSIGNED 0 +#endif + +#if defined (USQ_MODE) && (HAVE_USQ == 1) +#define FIXED_SIZE 4 /* in bytes. */ +#define INT_C_TYPE USItype +#define UINT_C_TYPE USItype + +#if HAVE_DI == 1 +#define DINT_C_TYPE UDItype +#define DUINT_C_TYPE UDItype +#else +#define HINT_C_TYPE UHItype +#define HUINT_C_TYPE UHItype +#endif + +#define MODE_NAME USQ +#define MODE_NAME_S usq +#define MODE_UNSIGNED 1 +#endif + +#if defined (DQ_MODE) && (HAVE_DQ == 1) +#define FIXED_SIZE 8 /* in bytes. */ +#define INT_C_TYPE DItype +#define UINT_C_TYPE UDItype + +#if HAVE_TI == 1 +#define DINT_C_TYPE TItype +#define DUINT_C_TYPE UTItype +#else +#define HINT_C_TYPE SItype +#define HUINT_C_TYPE USItype +#endif + +#define MODE_NAME DQ +#define MODE_NAME_S dq +#define MODE_UNSIGNED 0 +#endif + +#if defined (UDQ_MODE) && (HAVE_UDQ == 1) +#define FIXED_SIZE 8 /* in bytes. */ +#define INT_C_TYPE UDItype +#define UINT_C_TYPE UDItype + +#if HAVE_TI == 1 +#define DINT_C_TYPE UTItype +#define DUINT_C_TYPE UTItype +#else +#define HINT_C_TYPE USItype +#define HUINT_C_TYPE USItype +#endif + +#define MODE_NAME UDQ +#define MODE_NAME_S udq +#define MODE_UNSIGNED 1 +#endif + +#if defined (TQ_MODE) && (HAVE_TQ == 1) +#define FIXED_SIZE 16 /* in bytes. */ +#define INT_C_TYPE TItype +#define UINT_C_TYPE UTItype +#define HINT_C_TYPE DItype +#define HUINT_C_TYPE UDItype +#define MODE_NAME TQ +#define MODE_NAME_S tq +#define MODE_UNSIGNED 0 +#endif + +#if defined (UTQ_MODE) && (HAVE_UTQ == 1) +#define FIXED_SIZE 16 /* in bytes. */ +#define INT_C_TYPE UTItype +#define UINT_C_TYPE UTItype +#define HINT_C_TYPE UDItype +#define HUINT_C_TYPE UDItype +#define MODE_NAME UTQ +#define MODE_NAME_S utq +#define MODE_UNSIGNED 1 +#endif + +#if defined (HA_MODE) && (HAVE_HA == 1) +#define FIXED_SIZE 2 /* in bytes. */ +#define INT_C_TYPE HItype +#define UINT_C_TYPE UHItype + +#if HAVE_SI == 1 +#define DINT_C_TYPE SItype +#define DUINT_C_TYPE USItype +#else +#define HINT_C_TYPE QItype +#define HUINT_C_TYPE UQItype +#endif + +#define MODE_NAME HA +#define MODE_NAME_S ha +#define MODE_UNSIGNED 0 +#endif + +#if defined (UHA_MODE) && (HAVE_UHA == 1) +#define FIXED_SIZE 2 /* in bytes. */ +#define INT_C_TYPE UHItype +#define UINT_C_TYPE UHItype + +#if HAVE_SI == 1 +#define DINT_C_TYPE USItype +#define DUINT_C_TYPE USItype +#else +#define HINT_C_TYPE UQItype +#define HUINT_C_TYPE UQItype +#endif + +#define MODE_NAME UHA +#define MODE_NAME_S uha +#define MODE_UNSIGNED 1 +#endif + +#if defined (SA_MODE) && (HAVE_SA == 1) +#define FIXED_SIZE 4 /* in bytes. */ +#define INT_C_TYPE SItype +#define UINT_C_TYPE USItype + +#if HAVE_DI == 1 +#define DINT_C_TYPE DItype +#define DUINT_C_TYPE UDItype +#else +#define HINT_C_TYPE HItype +#define HUINT_C_TYPE UHItype +#endif + +#define MODE_NAME SA +#define MODE_NAME_S sa +#define MODE_UNSIGNED 0 +#endif + +#if defined (USA_MODE) && (HAVE_USA == 1) +#define FIXED_SIZE 4 /* in bytes. */ +#define INT_C_TYPE USItype +#define UINT_C_TYPE USItype + +#if HAVE_DI == 1 +#define DINT_C_TYPE UDItype +#define DUINT_C_TYPE UDItype +#else +#define HINT_C_TYPE UHItype +#define HUINT_C_TYPE UHItype +#endif + +#define MODE_NAME USA +#define MODE_NAME_S usa +#define MODE_UNSIGNED 1 +#endif + +#if defined (DA_MODE) && (HAVE_DA == 1) +#define FIXED_SIZE 8 /* in bytes. */ +#define INT_C_TYPE DItype +#define UINT_C_TYPE UDItype + +#if HAVE_TI == 1 +#define DINT_C_TYPE TItype +#define DUINT_C_TYPE UTItype +#else +#define HINT_C_TYPE SItype +#define HUINT_C_TYPE USItype +#endif + +#define MODE_NAME DA +#define MODE_NAME_S da +#define MODE_UNSIGNED 0 +#endif + +#if defined (UDA_MODE) && (HAVE_UDA == 1) +#define FIXED_SIZE 8 /* in bytes. */ +#define INT_C_TYPE UDItype +#define UINT_C_TYPE UDItype + +#if HAVE_TI == 1 +#define DINT_C_TYPE UTItype +#define DUINT_C_TYPE UTItype +#else +#define HINT_C_TYPE USItype +#define HUINT_C_TYPE USItype +#endif + +#define MODE_NAME UDA +#define MODE_NAME_S uda +#define MODE_UNSIGNED 1 +#endif + +#if defined (TA_MODE) && (HAVE_TA == 1) +#define FIXED_SIZE 16 /* in bytes. */ +#define INT_C_TYPE TItype +#define UINT_C_TYPE UTItype +#define HINT_C_TYPE DItype +#define HUINT_C_TYPE UDItype +#define MODE_NAME TA +#define MODE_NAME_S ta +#define MODE_UNSIGNED 0 +#endif + +#if defined (UTA_MODE) && (HAVE_UTA == 1) +#define FIXED_SIZE 16 /* in bytes. */ +#define INT_C_TYPE UTItype +#define UINT_C_TYPE UTItype +#define HINT_C_TYPE UDItype +#define HUINT_C_TYPE UDItype +#define MODE_NAME UTA +#define MODE_NAME_S uta +#define MODE_UNSIGNED 1 +#endif + +/* The following defines are based on the previous defines. */ + +#if defined (HINT_C_TYPE) +#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__ + struct INTstruct {HINT_C_TYPE high, low;}; +#else + struct INTstruct {HINT_C_TYPE low, high;}; +#endif + +typedef union +{ + struct INTstruct s; + INT_C_TYPE ll; +} INTunion; +#endif + +#define FIXED_WIDTH (FIXED_SIZE * BITS_PER_UNIT) /* in bits. */ +#define FIXED_C_TYPE1(NAME) NAME ## type +#define FIXED_C_TYPE2(NAME) FIXED_C_TYPE1(NAME) +#define FIXED_C_TYPE FIXED_C_TYPE2(MODE_NAME) +#define FBITS1(NAME) __ ## NAME ## _FBIT__ +#define FBITS2(NAME) FBITS1(NAME) +#define FBITS FBITS2(MODE_NAME) +#define IBITS1(NAME) __ ## NAME ## _IBIT__ +#define IBITS2(NAME) IBITS1(NAME) +#define IBITS IBITS2(MODE_NAME) +#define I_F_BITS (FBITS + IBITS) + +#ifdef LIBGCC2_FIXEDBIT_GNU_PREFIX +#define FIXED_OP(OP,MODE,NUM) __gnu_ ## OP ## MODE ## NUM +#else +#define FIXED_OP(OP,MODE,NUM) __ ## OP ## MODE ## NUM +#endif + +#define FIXED_SATURATE1_TEMP(NAME) FIXED_OP(saturate1,NAME,) +#define FIXED_SATURATE2_TEMP(NAME) FIXED_OP(saturate2,NAME,) +#define FIXED_MULHELPER_TEMP(NAME) FIXED_OP(mulhelper,NAME,) +#define FIXED_DIVHELPER_TEMP(NAME) FIXED_OP(divhelper,NAME,) +#define FIXED_ASHLHELPER_TEMP(NAME) FIXED_OP(ashlhelper,NAME,) +#define FIXED_ADD_TEMP(NAME) FIXED_OP(add,NAME,3) +#define FIXED_SSADD_TEMP(NAME) FIXED_OP(ssadd,NAME,3) +#define FIXED_USADD_TEMP(NAME) FIXED_OP(usadd,NAME,3) +#define FIXED_SUB_TEMP(NAME) FIXED_OP(sub,NAME,3) +#define FIXED_SSSUB_TEMP(NAME) FIXED_OP(sssub,NAME,3) +#define FIXED_USSUB_TEMP(NAME) FIXED_OP(ussub,NAME,3) +#define FIXED_MUL_TEMP(NAME) FIXED_OP(mul,NAME,3) +#define FIXED_SSMUL_TEMP(NAME) FIXED_OP(ssmul,NAME,3) +#define FIXED_USMUL_TEMP(NAME) FIXED_OP(usmul,NAME,3) +#define FIXED_DIV_TEMP(NAME) FIXED_OP(div,NAME,3) +#define FIXED_UDIV_TEMP(NAME) FIXED_OP(udiv,NAME,3) +#define FIXED_SSDIV_TEMP(NAME) FIXED_OP(ssdiv,NAME,3) +#define FIXED_USDIV_TEMP(NAME) FIXED_OP(usdiv,NAME,3) +#define FIXED_NEG_TEMP(NAME) FIXED_OP(neg,NAME,2) +#define FIXED_SSNEG_TEMP(NAME) FIXED_OP(ssneg,NAME,2) +#define FIXED_USNEG_TEMP(NAME) FIXED_OP(usneg,NAME,2) +#define FIXED_ASHL_TEMP(NAME) FIXED_OP(ashl,NAME,3) +#define FIXED_ASHR_TEMP(NAME) FIXED_OP(ashr,NAME,3) +#define FIXED_LSHR_TEMP(NAME) FIXED_OP(lshr,NAME,3) +#define FIXED_SSASHL_TEMP(NAME) FIXED_OP(ssashl,NAME,3) +#define FIXED_USASHL_TEMP(NAME) FIXED_OP(usashl,NAME,3) +#define FIXED_CMP_TEMP(NAME) FIXED_OP(cmp,NAME,2) + +#if defined (MODE_NAME) +#if defined (DINT_C_TYPE) +#define FIXED_SATURATE1 FIXED_SATURATE1_TEMP(MODE_NAME_S) +#else +#define FIXED_SATURATE2 FIXED_SATURATE2_TEMP(MODE_NAME_S) +#endif +#define FIXED_MULHELPER FIXED_MULHELPER_TEMP(MODE_NAME_S) +#define FIXED_DIVHELPER FIXED_DIVHELPER_TEMP(MODE_NAME_S) +#define FIXED_ASHLHELPER FIXED_ASHLHELPER_TEMP(MODE_NAME_S) +#define FIXED_ADD FIXED_ADD_TEMP(MODE_NAME_S) +#define FIXED_SUB FIXED_SUB_TEMP(MODE_NAME_S) +#define FIXED_MUL FIXED_MUL_TEMP(MODE_NAME_S) +#define FIXED_NEG FIXED_NEG_TEMP(MODE_NAME_S) +#define FIXED_ASHL FIXED_ASHL_TEMP(MODE_NAME_S) +#define FIXED_CMP FIXED_CMP_TEMP(MODE_NAME_S) + +/* The following functions are for all fixed-point modes. */ +#if defined (DINT_C_TYPE) +extern void FIXED_SATURATE1 (DINT_C_TYPE *); +#else +extern void FIXED_SATURATE2 (INT_C_TYPE *, INT_C_TYPE *); +#endif +extern FIXED_C_TYPE FIXED_MULHELPER (FIXED_C_TYPE, FIXED_C_TYPE, word_type); +extern FIXED_C_TYPE FIXED_DIVHELPER (FIXED_C_TYPE, FIXED_C_TYPE, word_type); +extern FIXED_C_TYPE FIXED_ASHLHELPER (FIXED_C_TYPE, word_type, word_type); +extern FIXED_C_TYPE FIXED_ADD (FIXED_C_TYPE, FIXED_C_TYPE); +extern FIXED_C_TYPE FIXED_SUB (FIXED_C_TYPE, FIXED_C_TYPE); +extern FIXED_C_TYPE FIXED_MUL (FIXED_C_TYPE, FIXED_C_TYPE); +extern FIXED_C_TYPE FIXED_NEG (FIXED_C_TYPE); +extern FIXED_C_TYPE FIXED_ASHL (FIXED_C_TYPE, word_type); +extern word_type FIXED_CMP (FIXED_C_TYPE, FIXED_C_TYPE); +#endif + +#if MODE_UNSIGNED == 0 /* Signed types. */ +#define PADDING_BITS (FIXED_WIDTH - 1 - I_F_BITS) +#define NONPADDING_BITS (1 + I_F_BITS) + +#if defined (MODE_NAME) +#define FIXED_DIV FIXED_DIV_TEMP(MODE_NAME_S) +#define FIXED_ASHR FIXED_ASHR_TEMP(MODE_NAME_S) +#define FIXED_SSADD FIXED_SSADD_TEMP(MODE_NAME_S) +#define FIXED_SSSUB FIXED_SSSUB_TEMP(MODE_NAME_S) +#define FIXED_SSMUL FIXED_SSMUL_TEMP(MODE_NAME_S) +#define FIXED_SSDIV FIXED_SSDIV_TEMP(MODE_NAME_S) +#define FIXED_SSNEG FIXED_SSNEG_TEMP(MODE_NAME_S) +#define FIXED_SSASHL FIXED_SSASHL_TEMP(MODE_NAME_S) + +/* The following functions are for signed fixed-point modes. */ +extern FIXED_C_TYPE FIXED_DIV (FIXED_C_TYPE, FIXED_C_TYPE); +extern FIXED_C_TYPE FIXED_ASHR (FIXED_C_TYPE, word_type); +extern FIXED_C_TYPE FIXED_SSADD (FIXED_C_TYPE, FIXED_C_TYPE); +extern FIXED_C_TYPE FIXED_SSSUB (FIXED_C_TYPE, FIXED_C_TYPE); +extern FIXED_C_TYPE FIXED_SSMUL (FIXED_C_TYPE, FIXED_C_TYPE); +extern FIXED_C_TYPE FIXED_SSDIV (FIXED_C_TYPE, FIXED_C_TYPE); +extern FIXED_C_TYPE FIXED_SSNEG (FIXED_C_TYPE); +extern FIXED_C_TYPE FIXED_SSASHL (FIXED_C_TYPE, word_type); +#endif + +#else /* Unsigned types. */ +#define PADDING_BITS (FIXED_WIDTH - I_F_BITS) +#define NONPADDING_BITS (I_F_BITS) + +#if defined (MODE_NAME) +#define FIXED_UDIV FIXED_UDIV_TEMP(MODE_NAME_S) +#define FIXED_LSHR FIXED_LSHR_TEMP(MODE_NAME_S) +#define FIXED_USDIV FIXED_USDIV_TEMP(MODE_NAME_S) +#define FIXED_USADD FIXED_USADD_TEMP(MODE_NAME_S) +#define FIXED_USSUB FIXED_USSUB_TEMP(MODE_NAME_S) +#define FIXED_USMUL FIXED_USMUL_TEMP(MODE_NAME_S) +#define FIXED_USNEG FIXED_USNEG_TEMP(MODE_NAME_S) +#define FIXED_USASHL FIXED_USASHL_TEMP(MODE_NAME_S) + +/* The following functions are for unsigned fixed-point modes. */ +extern FIXED_C_TYPE FIXED_UDIV (FIXED_C_TYPE, FIXED_C_TYPE); +extern FIXED_C_TYPE FIXED_LSHR (FIXED_C_TYPE, word_type); +extern FIXED_C_TYPE FIXED_USADD (FIXED_C_TYPE, FIXED_C_TYPE); +extern FIXED_C_TYPE FIXED_USSUB (FIXED_C_TYPE, FIXED_C_TYPE); +extern FIXED_C_TYPE FIXED_USMUL (FIXED_C_TYPE, FIXED_C_TYPE); +extern FIXED_C_TYPE FIXED_USDIV (FIXED_C_TYPE, FIXED_C_TYPE); +extern FIXED_C_TYPE FIXED_USNEG (FIXED_C_TYPE); +extern FIXED_C_TYPE FIXED_USASHL (FIXED_C_TYPE, word_type); +#endif + +#endif /* End of testing MODE_UNSIGNED. */ + +/* This define is to check if this mode have any padding bits. */ +#define HAVE_PADDING_BITS (PADDING_BITS > 0) + +/* ------------------------------------------------------------------------ */ +/* The following defines are for conversions. */ + +#if defined (FROM_QI) && HAVE_QI == 1 +#define FROM_TYPE 1 /* Signed integer. */ +#define FROM_INT_C_TYPE QItype +#define FROM_SINT_C_TYPE QItype +#define FROM_UINT_C_TYPE UQItype +#define FROM_MODE_NAME_S qi +#define FROM_INT_SIZE 1 /* in bytes. */ + +#elif defined (FROM_HI) && HAVE_HI == 1 +#define FROM_TYPE 1 /* Signed integer. */ +#define FROM_INT_C_TYPE HItype +#define FROM_SINT_C_TYPE HItype +#define FROM_UINT_C_TYPE UHItype +#define FROM_MODE_NAME_S hi +#define FROM_INT_SIZE 2 /* in bytes. */ + +#elif defined (FROM_SI) && HAVE_SI == 1 +#define FROM_TYPE 1 /* Signed integer. */ +#define FROM_INT_C_TYPE SItype +#define FROM_SINT_C_TYPE SItype +#define FROM_UINT_C_TYPE USItype +#define FROM_MODE_NAME_S si +#define FROM_INT_SIZE 4 /* in bytes. */ + +#elif defined (FROM_DI) && HAVE_DI == 1 +#define FROM_TYPE 1 /* Signed integer. */ +#define FROM_INT_C_TYPE DItype +#define FROM_SINT_C_TYPE DItype +#define FROM_UINT_C_TYPE UDItype +#define FROM_MODE_NAME_S di +#define FROM_INT_SIZE 8 /* in bytes. */ + +#elif defined (FROM_TI) && HAVE_TI == 1 +#define FROM_TYPE 1 /* Signed integer. */ +#define FROM_INT_C_TYPE TItype +#define FROM_SINT_C_TYPE TItype +#define FROM_UINT_C_TYPE UTItype +#define FROM_MODE_NAME_S ti +#define FROM_INT_SIZE 16 /* in bytes. */ + +#elif defined (FROM_UQI) && HAVE_UQI == 1 +#define FROM_TYPE 2 /* Unsigned integer. */ +#define FROM_INT_C_TYPE QItype +#define FROM_SINT_C_TYPE QItype +#define FROM_UINT_C_TYPE UQItype +#define FROM_MODE_NAME_S qi +#define FROM_INT_SIZE 1 /* in bytes. */ + +#elif defined (FROM_UHI) && HAVE_UHI == 1 +#define FROM_TYPE 2 /* Unsigned integer. */ +#define FROM_INT_C_TYPE UHItype +#define FROM_SINT_C_TYPE HItype +#define FROM_UINT_C_TYPE UHItype +#define FROM_MODE_NAME_S hi +#define FROM_INT_SIZE 2 /* in bytes. */ + +#elif defined (FROM_USI) && HAVE_USI == 1 +#define FROM_TYPE 2 /* Unsigned integer. */ +#define FROM_INT_C_TYPE USItype +#define FROM_SINT_C_TYPE SItype +#define FROM_UINT_C_TYPE USItype +#define FROM_MODE_NAME_S si +#define FROM_INT_SIZE 4 /* in bytes. */ + +#elif defined (FROM_UDI) && HAVE_UDI == 1 +#define FROM_TYPE 2 /* Unsigned integer. */ +#define FROM_INT_C_TYPE UDItype +#define FROM_SINT_C_TYPE DItype +#define FROM_UINT_C_TYPE UDItype +#define FROM_MODE_NAME_S di +#define FROM_INT_SIZE 8 /* in bytes. */ + +#elif defined (FROM_UTI) && HAVE_UTI == 1 +#define FROM_TYPE 2 /* Unsigned integer. */ +#define FROM_INT_C_TYPE UTItype +#define FROM_SINT_C_TYPE TItype +#define FROM_UINT_C_TYPE UTItype +#define FROM_MODE_NAME_S ti +#define FROM_INT_SIZE 16 /* in bytes. */ + +#elif defined (FROM_SF) && HAVE_SF == 1 +#define FROM_TYPE 3 /* Floating-point. */ +#define FROM_FLOAT_C_TYPE SFtype +#define FROM_MODE_NAME_S sf + +#elif defined (FROM_DF) && HAVE_DF == 1 +#define FROM_TYPE 3 /* Floating-point. */ +#define FROM_FLOAT_C_TYPE DFtype +#define FROM_MODE_NAME_S df + +#elif defined (FROM_QQ) && HAVE_QQ == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME QQ +#define FROM_MODE_NAME_S qq +#define FROM_INT_C_TYPE QItype +#define FROM_SINT_C_TYPE QItype +#define FROM_UINT_C_TYPE UQItype +#define FROM_MODE_UNSIGNED 0 +#define FROM_FIXED_SIZE 1 /* in bytes. */ + +#elif defined (FROM_HQ) && HAVE_HQ == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME HQ +#define FROM_MODE_NAME_S hq +#define FROM_INT_C_TYPE HItype +#define FROM_SINT_C_TYPE HItype +#define FROM_UINT_C_TYPE UHItype +#define FROM_MODE_UNSIGNED 0 +#define FROM_FIXED_SIZE 2 /* in bytes. */ + +#elif defined (FROM_SQ) && HAVE_SQ == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME SQ +#define FROM_MODE_NAME_S sq +#define FROM_INT_C_TYPE SItype +#define FROM_SINT_C_TYPE SItype +#define FROM_UINT_C_TYPE USItype +#define FROM_MODE_UNSIGNED 0 +#define FROM_FIXED_SIZE 4 /* in bytes. */ + +#elif defined (FROM_DQ) && HAVE_DQ == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME DQ +#define FROM_MODE_NAME_S dq +#define FROM_INT_C_TYPE DItype +#define FROM_SINT_C_TYPE DItype +#define FROM_UINT_C_TYPE UDItype +#define FROM_MODE_UNSIGNED 0 +#define FROM_FIXED_SIZE 8 /* in bytes. */ + +#elif defined (FROM_TQ) && HAVE_TQ == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME TQ +#define FROM_MODE_NAME_S tq +#define FROM_INT_C_TYPE TItype +#define FROM_SINT_C_TYPE TItype +#define FROM_UINT_C_TYPE UTItype +#define FROM_MODE_UNSIGNED 0 +#define FROM_FIXED_SIZE 16 /* in bytes. */ + +#elif defined (FROM_UQQ) && HAVE_UQQ == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME UQQ +#define FROM_MODE_NAME_S uqq +#define FROM_INT_C_TYPE UQItype +#define FROM_SINT_C_TYPE QItype +#define FROM_UINT_C_TYPE UQItype +#define FROM_MODE_UNSIGNED 1 +#define FROM_FIXED_SIZE 1 /* in bytes. */ + +#elif defined (FROM_UHQ) && HAVE_UHQ == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME UHQ +#define FROM_MODE_NAME_S uhq +#define FROM_INT_C_TYPE UHItype +#define FROM_SINT_C_TYPE HItype +#define FROM_UINT_C_TYPE UHItype +#define FROM_MODE_UNSIGNED 1 +#define FROM_FIXED_SIZE 2 /* in bytes. */ + +#elif defined (FROM_USQ) && HAVE_USQ == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME USQ +#define FROM_MODE_NAME_S usq +#define FROM_INT_C_TYPE USItype +#define FROM_SINT_C_TYPE SItype +#define FROM_UINT_C_TYPE USItype +#define FROM_MODE_UNSIGNED 1 +#define FROM_FIXED_SIZE 4 /* in bytes. */ + +#elif defined (FROM_UDQ) && HAVE_UDQ == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME UDQ +#define FROM_MODE_NAME_S udq +#define FROM_INT_C_TYPE UDItype +#define FROM_SINT_C_TYPE DItype +#define FROM_UINT_C_TYPE UDItype +#define FROM_MODE_UNSIGNED 1 +#define FROM_FIXED_SIZE 8 /* in bytes. */ + +#elif defined (FROM_UTQ) && HAVE_UTQ == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME UTQ +#define FROM_MODE_NAME_S utq +#define FROM_INT_C_TYPE UTItype +#define FROM_SINT_C_TYPE TItype +#define FROM_UINT_C_TYPE UTItype +#define FROM_MODE_UNSIGNED 1 +#define FROM_FIXED_SIZE 16 /* in bytes. */ + +#elif defined (FROM_HA) && HAVE_HA == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME HA +#define FROM_MODE_NAME_S ha +#define FROM_INT_C_TYPE HItype +#define FROM_SINT_C_TYPE HItype +#define FROM_UINT_C_TYPE UHItype +#define FROM_MODE_UNSIGNED 0 +#define FROM_FIXED_SIZE 2 /* in bytes. */ + +#elif defined (FROM_SA) && HAVE_SA == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME SA +#define FROM_MODE_NAME_S sa +#define FROM_INT_C_TYPE SItype +#define FROM_SINT_C_TYPE SItype +#define FROM_UINT_C_TYPE USItype +#define FROM_MODE_UNSIGNED 0 +#define FROM_FIXED_SIZE 4 /* in bytes. */ + +#elif defined (FROM_DA) && HAVE_DA == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME DA +#define FROM_MODE_NAME_S da +#define FROM_INT_C_TYPE DItype +#define FROM_SINT_C_TYPE DItype +#define FROM_UINT_C_TYPE UDItype +#define FROM_MODE_UNSIGNED 0 +#define FROM_FIXED_SIZE 8 /* in bytes. */ + +#elif defined (FROM_TA) && HAVE_TA == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME TA +#define FROM_MODE_NAME_S ta +#define FROM_INT_C_TYPE TItype +#define FROM_SINT_C_TYPE TItype +#define FROM_UINT_C_TYPE UTItype +#define FROM_MODE_UNSIGNED 0 +#define FROM_FIXED_SIZE 16 /* in bytes. */ + +#elif defined (FROM_UHA) && HAVE_UHA == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME UHA +#define FROM_MODE_NAME_S uha +#define FROM_INT_C_TYPE UHItype +#define FROM_SINT_C_TYPE HItype +#define FROM_UINT_C_TYPE UHItype +#define FROM_MODE_UNSIGNED 1 +#define FROM_FIXED_SIZE 2 /* in bytes. */ + +#elif defined (FROM_USA) && HAVE_USA == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME USA +#define FROM_MODE_NAME_S usa +#define FROM_INT_C_TYPE USItype +#define FROM_SINT_C_TYPE SItype +#define FROM_UINT_C_TYPE USItype +#define FROM_MODE_UNSIGNED 1 +#define FROM_FIXED_SIZE 4 /* in bytes. */ + +#elif defined (FROM_UDA) && HAVE_UDA == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME UDA +#define FROM_MODE_NAME_S uda +#define FROM_INT_C_TYPE UDItype +#define FROM_SINT_C_TYPE DItype +#define FROM_UINT_C_TYPE UDItype +#define FROM_MODE_UNSIGNED 1 +#define FROM_FIXED_SIZE 8 /* in bytes. */ + +#elif defined (FROM_UTA) && HAVE_UTA == 1 +#define FROM_TYPE 4 /* Fixed-point. */ +#define FROM_MODE_NAME UTA +#define FROM_MODE_NAME_S uta +#define FROM_INT_C_TYPE UTItype +#define FROM_SINT_C_TYPE TItype +#define FROM_UINT_C_TYPE UTItype +#define FROM_MODE_UNSIGNED 1 +#define FROM_FIXED_SIZE 16 /* in bytes. */ + +#endif + +#if defined (TO_QI) && HAVE_QI == 1 && !defined (FROM_QI) +#define TO_TYPE 1 /* Signed integer. */ +#define TO_INT_C_TYPE QItype +#define TO_SINT_C_TYPE QItype +#define TO_UINT_C_TYPE UQItype +#define TO_MODE_NAME_S qi + +#elif defined (TO_HI) && HAVE_HI == 1 && !defined (FROM_HI) +#define TO_TYPE 1 /* Signed integer. */ +#define TO_INT_C_TYPE HItype +#define TO_SINT_C_TYPE HItype +#define TO_UINT_C_TYPE UHItype +#define TO_MODE_NAME_S hi + +#elif defined (TO_SI) && HAVE_SI == 1 && !defined (FROM_SI) +#define TO_TYPE 1 /* Signed integer. */ +#define TO_INT_C_TYPE SItype +#define TO_SINT_C_TYPE SItype +#define TO_UINT_C_TYPE USItype +#define TO_MODE_NAME_S si + +#elif defined (TO_DI) && HAVE_DI == 1 && !defined (FROM_DI) +#define TO_TYPE 1 /* Signed integer. */ +#define TO_INT_C_TYPE DItype +#define TO_SINT_C_TYPE DItype +#define TO_UINT_C_TYPE UDItype +#define TO_MODE_NAME_S di + +#elif defined (TO_TI) && HAVE_TI == 1 && !defined (FROM_TI) +#define TO_TYPE 1 /* Signed integer. */ +#define TO_INT_C_TYPE TItype +#define TO_SINT_C_TYPE TItype +#define TO_UINT_C_TYPE UTItype +#define TO_MODE_NAME_S ti + +#elif defined (TO_UQI) && HAVE_UQI == 1 && !defined (FROM_UQI) +#define TO_TYPE 2 /* Unsigned integer. */ +#define TO_INT_C_TYPE UQItype +#define TO_SINT_C_TYPE QItype +#define TO_UINT_C_TYPE UQItype +#define TO_MODE_NAME_S qi + +#elif defined (TO_UHI) && HAVE_UHI == 1 && !defined (FROM_UHI) +#define TO_TYPE 2 /* Unsigned integer. */ +#define TO_INT_C_TYPE UHItype +#define TO_SINT_C_TYPE HItype +#define TO_UINT_C_TYPE UHItype +#define TO_MODE_NAME_S hi + +#elif defined (TO_USI) && HAVE_USI == 1 && !defined (FROM_USI) +#define TO_TYPE 2 /* Unsigned integer. */ +#define TO_INT_C_TYPE USItype +#define TO_SINT_C_TYPE SItype +#define TO_UINT_C_TYPE USItype +#define TO_MODE_NAME_S si + +#elif defined (TO_UDI) && HAVE_UDI == 1 && !defined (FROM_UDI) +#define TO_TYPE 2 /* Unsigned integer. */ +#define TO_INT_C_TYPE UDItype +#define TO_SINT_C_TYPE DItype +#define TO_UINT_C_TYPE UDItype +#define TO_MODE_NAME_S di + +#elif defined (TO_UTI) && HAVE_UTI == 1 && !defined (FROM_UTI) +#define TO_TYPE 2 /* Unsigned integer. */ +#define TO_INT_C_TYPE UTItype +#define TO_SINT_C_TYPE TItype +#define TO_UINT_C_TYPE UTItype +#define TO_MODE_NAME_S ti + +#elif defined (TO_SF) && HAVE_SF == 1 && !defined (FROM_SF) +#define TO_TYPE 3 /* Floating-point. */ +#define TO_FLOAT_C_TYPE SFtype +#define TO_MODE_NAME_S sf + +#elif defined (TO_DF) && HAVE_DF == 1 && !defined (FROM_DF) +#define TO_TYPE 3 /* Floating-point. */ +#define TO_FLOAT_C_TYPE DFtype +#define TO_MODE_NAME_S df + +#elif defined (TO_QQ) && HAVE_QQ == 1 && !defined (FROM_QQ) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME QQ +#define TO_MODE_NAME_S qq +#define TO_INT_C_TYPE QItype +#define TO_SINT_C_TYPE QItype +#define TO_UINT_C_TYPE UQItype +#define TO_MODE_UNSIGNED 0 +#define TO_FIXED_SIZE 1 /* in bytes. */ + +#elif defined (TO_HQ) && HAVE_HQ == 1 && !defined (FROM_HQ) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME HQ +#define TO_MODE_NAME_S hq +#define TO_INT_C_TYPE HItype +#define TO_SINT_C_TYPE HItype +#define TO_UINT_C_TYPE UHItype +#define TO_MODE_UNSIGNED 0 +#define TO_FIXED_SIZE 2 /* in bytes. */ + +#elif defined (TO_SQ) && HAVE_SQ == 1 && !defined (FROM_SQ) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME SQ +#define TO_MODE_NAME_S sq +#define TO_INT_C_TYPE SItype +#define TO_SINT_C_TYPE SItype +#define TO_UINT_C_TYPE USItype +#define TO_MODE_UNSIGNED 0 +#define TO_FIXED_SIZE 4 /* in bytes. */ + +#elif defined (TO_DQ) && HAVE_DQ == 1 && !defined (FROM_DQ) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME DQ +#define TO_MODE_NAME_S dq +#define TO_INT_C_TYPE DItype +#define TO_SINT_C_TYPE DItype +#define TO_UINT_C_TYPE UDItype +#define TO_MODE_UNSIGNED 0 +#define TO_FIXED_SIZE 8 /* in bytes. */ + +#elif defined (TO_TQ) && HAVE_TQ == 1 && !defined (FROM_TQ) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME TQ +#define TO_MODE_NAME_S tq +#define TO_INT_C_TYPE TItype +#define TO_SINT_C_TYPE TItype +#define TO_UINT_C_TYPE UTItype +#define TO_MODE_UNSIGNED 0 +#define TO_FIXED_SIZE 16 /* in bytes. */ + +#elif defined (TO_UQQ) && HAVE_UQQ == 1 && !defined (FROM_UQQ) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME UQQ +#define TO_MODE_NAME_S uqq +#define TO_INT_C_TYPE UQItype +#define TO_SINT_C_TYPE QItype +#define TO_UINT_C_TYPE UQItype +#define TO_MODE_UNSIGNED 1 +#define TO_FIXED_SIZE 1 /* in bytes. */ + +#elif defined (TO_UHQ) && HAVE_UHQ == 1 && !defined (FROM_UHQ) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME UHQ +#define TO_MODE_NAME_S uhq +#define TO_INT_C_TYPE UHItype +#define TO_SINT_C_TYPE HItype +#define TO_UINT_C_TYPE UHItype +#define TO_MODE_UNSIGNED 1 +#define TO_FIXED_SIZE 2 /* in bytes. */ + +#elif defined (TO_USQ) && HAVE_USQ == 1 && !defined (FROM_USQ) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME USQ +#define TO_MODE_NAME_S usq +#define TO_INT_C_TYPE USItype +#define TO_SINT_C_TYPE SItype +#define TO_UINT_C_TYPE USItype +#define TO_MODE_UNSIGNED 1 +#define TO_FIXED_SIZE 4 /* in bytes. */ + +#elif defined (TO_UDQ) && HAVE_UDQ == 1 && !defined (FROM_UDQ) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME UDQ +#define TO_MODE_NAME_S udq +#define TO_INT_C_TYPE UDItype +#define TO_SINT_C_TYPE DItype +#define TO_UINT_C_TYPE UDItype +#define TO_MODE_UNSIGNED 1 +#define TO_FIXED_SIZE 8 /* in bytes. */ + +#elif defined (TO_UTQ) && HAVE_UTQ == 1 && !defined (FROM_UTQ) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME UTQ +#define TO_MODE_NAME_S utq +#define TO_INT_C_TYPE UTItype +#define TO_SINT_C_TYPE TItype +#define TO_UINT_C_TYPE UTItype +#define TO_MODE_UNSIGNED 1 +#define TO_FIXED_SIZE 16 /* in bytes. */ + +#elif defined (TO_HA) && HAVE_HA == 1 && !defined (FROM_HA) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME HA +#define TO_MODE_NAME_S ha +#define TO_INT_C_TYPE HItype +#define TO_SINT_C_TYPE HItype +#define TO_UINT_C_TYPE UHItype +#define TO_MODE_UNSIGNED 0 +#define TO_FIXED_SIZE 2 /* in bytes. */ + +#elif defined (TO_SA) && HAVE_SA == 1 && !defined (FROM_SA) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME SA +#define TO_MODE_NAME_S sa +#define TO_INT_C_TYPE SItype +#define TO_SINT_C_TYPE SItype +#define TO_UINT_C_TYPE USItype +#define TO_MODE_UNSIGNED 0 +#define TO_FIXED_SIZE 4 /* in bytes. */ + +#elif defined (TO_DA) && HAVE_DA == 1 && !defined (FROM_DA) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME DA +#define TO_MODE_NAME_S da +#define TO_INT_C_TYPE DItype +#define TO_SINT_C_TYPE DItype +#define TO_UINT_C_TYPE UDItype +#define TO_MODE_UNSIGNED 0 +#define TO_FIXED_SIZE 8 /* in bytes. */ + +#elif defined (TO_TA) && HAVE_TA == 1 && !defined (FROM_TA) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME TA +#define TO_MODE_NAME_S ta +#define TO_INT_C_TYPE TItype +#define TO_SINT_C_TYPE TItype +#define TO_UINT_C_TYPE UTItype +#define TO_MODE_UNSIGNED 0 +#define TO_FIXED_SIZE 16 /* in bytes. */ + +#elif defined (TO_UHA) && HAVE_UHA == 1 && !defined (FROM_UHA) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME UHA +#define TO_MODE_NAME_S uha +#define TO_INT_C_TYPE UHItype +#define TO_SINT_C_TYPE HItype +#define TO_UINT_C_TYPE UHItype +#define TO_MODE_UNSIGNED 1 +#define TO_FIXED_SIZE 2 /* in bytes. */ + +#elif defined (TO_USA) && HAVE_USA == 1 && !defined (FROM_USA) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME USA +#define TO_MODE_NAME_S usa +#define TO_INT_C_TYPE USItype +#define TO_SINT_C_TYPE SItype +#define TO_UINT_C_TYPE USItype +#define TO_MODE_UNSIGNED 1 +#define TO_FIXED_SIZE 4 /* in bytes. */ + +#elif defined (TO_UDA) && HAVE_UDA == 1 && !defined (FROM_UDA) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME UDA +#define TO_MODE_NAME_S uda +#define TO_INT_C_TYPE UDItype +#define TO_SINT_C_TYPE DItype +#define TO_UINT_C_TYPE UDItype +#define TO_MODE_UNSIGNED 1 +#define TO_FIXED_SIZE 8 /* in bytes. */ + +#elif defined (TO_UTA) && HAVE_UTA == 1 && !defined (FROM_UTA) +#define TO_TYPE 4 /* Fixed-point. */ +#define TO_MODE_NAME UTA +#define TO_MODE_NAME_S uta +#define TO_INT_C_TYPE UTItype +#define TO_SINT_C_TYPE TItype +#define TO_UINT_C_TYPE UTItype +#define TO_MODE_UNSIGNED 1 +#define TO_FIXED_SIZE 16 /* in bytes. */ + +#endif + +#if defined (FROM_MODE_NAME_S) && defined (TO_MODE_NAME_S) + +#if FROM_TYPE == 1 /* Signed integer. */ +#define FROM_INT_WIDTH (FROM_INT_SIZE * BITS_PER_UNIT) +#endif + +#if FROM_TYPE == 2 /* Unsigned integer. */ +#define FROM_INT_WIDTH (FROM_INT_SIZE * BITS_PER_UNIT) +#endif + +#if FROM_TYPE == 4 /* Fixed-point. */ +#define FROM_FIXED_C_TYPE FIXED_C_TYPE2(FROM_MODE_NAME) +#define FROM_FBITS FBITS2(FROM_MODE_NAME) +#define FROM_FIXED_WIDTH (FROM_FIXED_SIZE * BITS_PER_UNIT) +#define FROM_FBITS FBITS2(FROM_MODE_NAME) +#define FROM_IBITS IBITS2(FROM_MODE_NAME) +#define FROM_I_F_BITS (FROM_FBITS + FROM_IBITS) + +#if FROM_MODE_UNSIGNED == 0 /* Signed types. */ +#define FROM_PADDING_BITS (FROM_FIXED_WIDTH - 1 - FROM_I_F_BITS) +#define FROM_NONPADDING_BITS (1 + FROM_I_F_BITS) +#else /* Unsigned types. */ +#define FROM_PADDING_BITS (FROM_FIXED_WIDTH - FROM_I_F_BITS) +#define FROM_NONPADDING_BITS (FROM_I_F_BITS) +#endif +#define FROM_HAVE_PADDING_BITS (FROM_PADDING_BITS > 0) +#endif /* FROM_TYPE == 4 */ + +#if TO_TYPE == 4 /* Fixed-point. */ +#define TO_FIXED_C_TYPE FIXED_C_TYPE2(TO_MODE_NAME) +#define TO_FBITS FBITS2(TO_MODE_NAME) +#define TO_FIXED_WIDTH (TO_FIXED_SIZE * BITS_PER_UNIT) +#define TO_FBITS FBITS2(TO_MODE_NAME) +#define TO_IBITS IBITS2(TO_MODE_NAME) +#define TO_I_F_BITS (TO_FBITS + TO_IBITS) + +#if TO_MODE_UNSIGNED == 0 /* Signed types. */ +#define TO_PADDING_BITS (TO_FIXED_WIDTH - 1 - TO_I_F_BITS) +#define TO_NONPADDING_BITS (1 + TO_I_F_BITS) +#else /* Unsigned types. */ +#define TO_PADDING_BITS (TO_FIXED_WIDTH - TO_I_F_BITS) +#define TO_NONPADDING_BITS (TO_I_F_BITS) +#endif +#define TO_HAVE_PADDING_BITS (TO_PADDING_BITS > 0) +#endif /* TO_TYPE == 4 */ + +#ifdef LIBGCC2_FIXEDBIT_GNU_PREFIX +#define FIXED_CONVERT_OP(OP,FROM,TO) __gnu_ ## OP ## FROM ## TO +#define FIXED_CONVERT_OP2(OP,FROM,TO) __gnu_ ## OP ## FROM ## TO ## 2 +#else +#define FIXED_CONVERT_OP(OP,FROM,TO) __ ## OP ## FROM ## TO +#define FIXED_CONVERT_OP2(OP,FROM,TO) __ ## OP ## FROM ## TO ## 2 +#endif +#define FRACT_TEMP(N1,N2) FIXED_CONVERT_OP(fract,N1,N2) +#define FRACT2_TEMP(N1,N2) FIXED_CONVERT_OP2(fract,N1,N2) +#define SATFRACT_TEMP(N1,N2) FIXED_CONVERT_OP(satfract,N1,N2) +#define SATFRACT2_TEMP(N1,N2) FIXED_CONVERT_OP2(satfract,N1,N2) +#define FRACTUNS_TEMP(N1,N2) FIXED_CONVERT_OP(fractuns,N1,N2) +#define SATFRACTUNS_TEMP(N1,N2) FIXED_CONVERT_OP(satfractuns,N1,N2) + +/* Define conversions from fixed-point to fixed-point. */ +#if FROM_TYPE == 4 && TO_TYPE == 4 + +#if FROM_FIXED_SIZE > TO_FIXED_SIZE +#define BIG_SINT_C_TYPE FROM_SINT_C_TYPE +#define BIG_UINT_C_TYPE FROM_UINT_C_TYPE +#define BIG_WIDTH FROM_FIXED_WIDTH +#else +#define BIG_SINT_C_TYPE TO_SINT_C_TYPE +#define BIG_UINT_C_TYPE TO_UINT_C_TYPE +#define BIG_WIDTH TO_FIXED_WIDTH +#endif + +/* Check if FROM* and TO* are in the same machine class. */ +#if ((FROM_MODE_UNSIGNED == TO_MODE_UNSIGNED) \ + && ((FROM_IBITS == 0) == (TO_IBITS == 0))) +/* Same modes: append '2' to conversion function names */ +#define FRACT FRACT2_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) +#define SATFRACT SATFRACT2_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) +#else +/* Different modes: don't append '2' to conversion function names */ +#define FRACT FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) +#define SATFRACT SATFRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) +#endif + +extern TO_FIXED_C_TYPE FRACT (FROM_FIXED_C_TYPE); +extern TO_FIXED_C_TYPE SATFRACT (FROM_FIXED_C_TYPE); +#endif /* FROM_TYPE == 4 && TO_TYPE == 4 */ + +/* Define conversions from fixed-point to signed integer. */ +#if FROM_TYPE == 4 && TO_TYPE == 1 +#define FRACT FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) +extern TO_INT_C_TYPE FRACT (FROM_FIXED_C_TYPE); +#endif /* FROM_TYPE == 4 && TO_TYPE == 1 */ + +/* Define conversions from fixed-point to unsigned integer. */ +#if FROM_TYPE == 4 && TO_TYPE == 2 +#define FRACTUNS FRACTUNS_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) +extern TO_INT_C_TYPE FRACTUNS (FROM_FIXED_C_TYPE); +#endif /* FROM_TYPE == 4 && TO_TYPE == 2 */ + +/* Define conversions from fixed-point to floating-point. */ +#if FROM_TYPE == 4 && TO_TYPE == 3 +#define BASE1(NUM) 0x1.0p ## NUM +#define BASE2(NUM) BASE1(NUM) +#define BASE BASE2(FROM_FBITS) +#define FRACT FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) +extern TO_FLOAT_C_TYPE FRACT (FROM_FIXED_C_TYPE); +#endif /* FROM_TYPE == 4 && TO_TYPE == 3 */ + +/* Define conversions from signed integer to fixed-point. */ +#if FROM_TYPE == 1 && TO_TYPE == 4 + +#if FROM_INT_SIZE > TO_FIXED_SIZE +#define BIG_SINT_C_TYPE FROM_SINT_C_TYPE +#define BIG_UINT_C_TYPE FROM_UINT_C_TYPE +#define BIG_WIDTH FROM_INT_WIDTH +#else +#define BIG_SINT_C_TYPE TO_SINT_C_TYPE +#define BIG_UINT_C_TYPE TO_UINT_C_TYPE +#define BIG_WIDTH TO_FIXED_WIDTH +#endif + +#define FRACT FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) +#define SATFRACT SATFRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) +extern TO_FIXED_C_TYPE FRACT (FROM_INT_C_TYPE); +extern TO_FIXED_C_TYPE SATFRACT (FROM_INT_C_TYPE); +#endif /* FROM_TYPE == 1 && TO_TYPE == 4 */ + +/* Define conversions from unsigned integer to fixed-point. */ +#if FROM_TYPE == 2 && TO_TYPE == 4 + +#if FROM_INT_SIZE > TO_FIXED_SIZE +#define BIG_SINT_C_TYPE FROM_SINT_C_TYPE +#define BIG_UINT_C_TYPE FROM_UINT_C_TYPE +#define BIG_WIDTH FROM_INT_WIDTH +#else +#define BIG_SINT_C_TYPE TO_SINT_C_TYPE +#define BIG_UINT_C_TYPE TO_UINT_C_TYPE +#define BIG_WIDTH TO_FIXED_WIDTH +#endif + +#define FRACTUNS FRACTUNS_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) +#define SATFRACTUNS SATFRACTUNS_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) +extern TO_FIXED_C_TYPE FRACTUNS (FROM_INT_C_TYPE); +extern TO_FIXED_C_TYPE SATFRACTUNS (FROM_INT_C_TYPE); +#endif /* FROM_TYPE == 2 && TO_TYPE == 4 */ + +/* Define conversions from floating-point to fixed-point. */ +#if FROM_TYPE == 3 && TO_TYPE == 4 + +#define BASE1(NUM) (0x1.0p ## NUM) +#define BASE2(NUM) BASE1(NUM) +#define BASE BASE2(TO_FBITS) + +#define FIXED_MAX1(NUM1,NUM2) (0x1.0p ## NUM1 - 0x1.0p- ## NUM2) +#define FIXED_MAX2(NUM1,NUM2) FIXED_MAX1(NUM1,NUM2) +#define FIXED_MAX FIXED_MAX2(TO_IBITS,TO_FBITS) + +#define FIXED_MIN1(NUM) (-0x1.0p ## NUM) +#define FIXED_MIN2(NUM) FIXED_MIN1(NUM) +#if TO_MODE_UNSIGNED == 0 +#define FIXED_MIN FIXED_MIN2(TO_IBITS) +#else +#define FIXED_MIN 0.0 +#endif + +#define FRACT FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) +#define SATFRACT SATFRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) +extern TO_FIXED_C_TYPE FRACT (FROM_FLOAT_C_TYPE); +extern TO_FIXED_C_TYPE SATFRACT (FROM_FLOAT_C_TYPE); +#endif /* FROM_TYPE == 3 && TO_TYPE == 4 */ + +#endif /* defined (FROM_MODE_NAME_S) && defined (TO_MODE_NAME_S) */ + +#endif /* _FIXED_BIT_H */ diff --git a/contrib/toolchain/gcc/5x/libgcc/floatunsidf.c b/contrib/toolchain/gcc/5x/libgcc/floatunsidf.c new file mode 100644 index 0000000000..ff28112502 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/floatunsidf.c @@ -0,0 +1,15 @@ +/* Public domain. */ +typedef int SItype __attribute__ ((mode (SI))); +typedef unsigned int USItype __attribute__ ((mode (SI))); +typedef float DFtype __attribute__ ((mode (DF))); + +DFtype +__floatunsidf (USItype u) +{ + SItype s = (SItype) u; + DFtype r = (DFtype) s; + if (s < 0) + r += (DFtype)2.0 * (DFtype) ((USItype) 1 + << (sizeof (USItype) * __CHAR_BIT__ - 1)); + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/floatunsisf.c b/contrib/toolchain/gcc/5x/libgcc/floatunsisf.c new file mode 100644 index 0000000000..11d4aa78cb --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/floatunsisf.c @@ -0,0 +1,18 @@ +/* Public domain. */ +typedef int SItype __attribute__ ((mode (SI))); +typedef unsigned int USItype __attribute__ ((mode (SI))); +typedef float SFtype __attribute__ ((mode (SF))); + +SFtype +__floatunsisf (USItype u) +{ + SItype s = (SItype) u; + if (s < 0) + { + /* As in expand_float, compute (u & 1) | (u >> 1) to ensure + correct rounding if a nonzero bit is shifted out. */ + return (SFtype) 2.0 * (SFtype) (SItype) ((u & 1) | (u >> 1)); + } + else + return (SFtype) s; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/floatunsitf.c b/contrib/toolchain/gcc/5x/libgcc/floatunsitf.c new file mode 100644 index 0000000000..955d67666c --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/floatunsitf.c @@ -0,0 +1,15 @@ +/* Public domain. */ +typedef int SItype __attribute__ ((mode (SI))); +typedef unsigned int USItype __attribute__ ((mode (SI))); +typedef float TFtype __attribute__ ((mode (TF))); + +TFtype +__floatunsitf (USItype u) +{ + SItype s = (SItype) u; + TFtype r = (TFtype) s; + if (s < 0) + r += (TFtype)2.0 * (TFtype) ((USItype) 1 + << (sizeof (USItype) * __CHAR_BIT__ - 1)); + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/floatunsixf.c b/contrib/toolchain/gcc/5x/libgcc/floatunsixf.c new file mode 100644 index 0000000000..52511688da --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/floatunsixf.c @@ -0,0 +1,15 @@ +/* Public domain. */ +typedef int SItype __attribute__ ((mode (SI))); +typedef unsigned int USItype __attribute__ ((mode (SI))); +typedef float XFtype __attribute__ ((mode (XF))); + +XFtype +__floatunsixf (USItype u) +{ + SItype s = (SItype) u; + XFtype r = (XFtype) s; + if (s < 0) + r += (XFtype)2.0 * (XFtype) ((USItype) 1 + << (sizeof (USItype) * __CHAR_BIT__ - 1)); + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/fp-bit.c b/contrib/toolchain/gcc/5x/libgcc/fp-bit.c new file mode 100644 index 0000000000..c24d553fcb --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/fp-bit.c @@ -0,0 +1,1646 @@ +/* This is a software floating point library which can be used + for targets without hardware floating point. + Copyright (C) 1994-2015 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 754 format arithmetic, but does not provide a + mechanism for setting the rounding mode, or for generating or handling + exceptions. + + The original code by Steve Chamberlain, hacked by Mark Eichin and Jim + Wilson, all of Cygnus Support. */ + +/* The intended way to use this file is to make two copies, add `#define FLOAT' + to one copy, then compile both copies and add them to libgcc.a. */ + +#include "tconfig.h" +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" +#include "fp-bit.h" + +/* The following macros can be defined to change the behavior of this file: + FLOAT: Implement a `float', aka SFmode, fp library. If this is not + defined, then this file implements a `double', aka DFmode, fp library. + FLOAT_ONLY: Used with FLOAT, to implement a `float' only library, i.e. + don't include float->double conversion which requires the double library. + This is useful only for machines which can't support doubles, e.g. some + 8-bit processors. + CMPtype: Specify the type that floating point compares should return. + This defaults to SItype, aka int. + _DEBUG_BITFLOAT: This makes debugging the code a little easier, by adding + two integers to the FLO_union_type. + NO_DENORMALS: Disable handling of denormals. + NO_NANS: Disable nan and infinity handling + SMALL_MACHINE: Useful when operations on QIs and HIs are faster + than on an SI */ + +/* We don't currently support extended floats (long doubles) on machines + without hardware to deal with them. + + These stubs are just to keep the linker from complaining about unresolved + references which can be pulled in from libio & libstdc++, even if the + user isn't using long doubles. However, they may generate an unresolved + external to abort if abort is not used by the function, and the stubs + are referenced from within libc, since libgcc goes before and after the + system library. */ + +#ifdef DECLARE_LIBRARY_RENAMES + DECLARE_LIBRARY_RENAMES +#endif + +#ifdef EXTENDED_FLOAT_STUBS +extern void abort (void); +void __extendsfxf2 (void) { abort(); } +void __extenddfxf2 (void) { abort(); } +void __truncxfdf2 (void) { abort(); } +void __truncxfsf2 (void) { abort(); } +void __fixxfsi (void) { abort(); } +void __floatsixf (void) { abort(); } +void __addxf3 (void) { abort(); } +void __subxf3 (void) { abort(); } +void __mulxf3 (void) { abort(); } +void __divxf3 (void) { abort(); } +void __negxf2 (void) { abort(); } +void __eqxf2 (void) { abort(); } +void __nexf2 (void) { abort(); } +void __gtxf2 (void) { abort(); } +void __gexf2 (void) { abort(); } +void __lexf2 (void) { abort(); } +void __ltxf2 (void) { abort(); } + +void __extendsftf2 (void) { abort(); } +void __extenddftf2 (void) { abort(); } +void __trunctfdf2 (void) { abort(); } +void __trunctfsf2 (void) { abort(); } +void __fixtfsi (void) { abort(); } +void __floatsitf (void) { abort(); } +void __addtf3 (void) { abort(); } +void __subtf3 (void) { abort(); } +void __multf3 (void) { abort(); } +void __divtf3 (void) { abort(); } +void __negtf2 (void) { abort(); } +void __eqtf2 (void) { abort(); } +void __netf2 (void) { abort(); } +void __gttf2 (void) { abort(); } +void __getf2 (void) { abort(); } +void __letf2 (void) { abort(); } +void __lttf2 (void) { abort(); } +#else /* !EXTENDED_FLOAT_STUBS, rest of file */ + +/* IEEE "special" number predicates */ + +#ifdef NO_NANS + +#define nan() 0 +#define isnan(x) 0 +#define isinf(x) 0 +#else + +#if defined L_thenan_sf +const fp_number_type __thenan_sf = { CLASS_SNAN, 0, 0, {(fractype) 0} }; +#elif defined L_thenan_df +const fp_number_type __thenan_df = { CLASS_SNAN, 0, 0, {(fractype) 0} }; +#elif defined L_thenan_tf +const fp_number_type __thenan_tf = { CLASS_SNAN, 0, 0, {(fractype) 0} }; +#elif defined TFLOAT +extern const fp_number_type __thenan_tf; +#elif defined FLOAT +extern const fp_number_type __thenan_sf; +#else +extern const fp_number_type __thenan_df; +#endif + +INLINE +static const fp_number_type * +makenan (void) +{ +#ifdef TFLOAT + return & __thenan_tf; +#elif defined FLOAT + return & __thenan_sf; +#else + return & __thenan_df; +#endif +} + +INLINE +static int +isnan (const fp_number_type *x) +{ + return __builtin_expect (x->class == CLASS_SNAN || x->class == CLASS_QNAN, + 0); +} + +INLINE +static int +isinf (const fp_number_type * x) +{ + return __builtin_expect (x->class == CLASS_INFINITY, 0); +} + +#endif /* NO_NANS */ + +INLINE +static int +iszero (const fp_number_type * x) +{ + return x->class == CLASS_ZERO; +} + +INLINE +static void +flip_sign ( fp_number_type * x) +{ + x->sign = !x->sign; +} + +/* Count leading zeroes in N. */ +INLINE +static int +clzusi (USItype n) +{ + extern int __clzsi2 (USItype); + if (sizeof (USItype) == sizeof (unsigned int)) + return __builtin_clz (n); + else if (sizeof (USItype) == sizeof (unsigned long)) + return __builtin_clzl (n); + else if (sizeof (USItype) == sizeof (unsigned long long)) + return __builtin_clzll (n); + else + return __clzsi2 (n); +} + +extern FLO_type pack_d (const fp_number_type * ); + +#if defined(L_pack_df) || defined(L_pack_sf) || defined(L_pack_tf) +FLO_type +pack_d (const fp_number_type *src) +{ + FLO_union_type dst; + fractype fraction = src->fraction.ll; /* wasn't unsigned before? */ + int sign = src->sign; + int exp = 0; + + if (isnan (src)) + { + exp = EXPMAX; + /* Restore the NaN's payload. */ + fraction >>= NGARDS; + fraction &= QUIET_NAN - 1; + if (src->class == CLASS_QNAN || 1) + { +#ifdef QUIET_NAN_NEGATED + /* The quiet/signaling bit remains unset. */ + /* Make sure the fraction has a non-zero value. */ + if (fraction == 0) + fraction |= QUIET_NAN - 1; +#else + /* Set the quiet/signaling bit. */ + fraction |= QUIET_NAN; +#endif + } + } + else if (isinf (src)) + { + exp = EXPMAX; + fraction = 0; + } + else if (iszero (src)) + { + exp = 0; + fraction = 0; + } + else if (fraction == 0) + { + exp = 0; + } + else + { + if (__builtin_expect (src->normal_exp < NORMAL_EXPMIN, 0)) + { +#ifdef NO_DENORMALS + /* Go straight to a zero representation if denormals are not + supported. The denormal handling would be harmless but + isn't unnecessary. */ + exp = 0; + fraction = 0; +#else /* NO_DENORMALS */ + /* This number's exponent is too low to fit into the bits + available in the number, so we'll store 0 in the exponent and + shift the fraction to the right to make up for it. */ + + int shift = NORMAL_EXPMIN - src->normal_exp; + + exp = 0; + + if (shift > FRAC_NBITS - NGARDS) + { + /* No point shifting, since it's more that 64 out. */ + fraction = 0; + } + else + { + int lowbit = (fraction & (((fractype)1 << shift) - 1)) ? 1 : 0; + fraction = (fraction >> shift) | lowbit; + } + if ((fraction & GARDMASK) == GARDMSB) + { + if ((fraction & (1 << NGARDS))) + fraction += GARDROUND + 1; + } + else + { + /* Add to the guards to round up. */ + fraction += GARDROUND; + } + /* Perhaps the rounding means we now need to change the + exponent, because the fraction is no longer denormal. */ + if (fraction >= IMPLICIT_1) + { + exp += 1; + } + fraction >>= NGARDS; +#endif /* NO_DENORMALS */ + } + else if (__builtin_expect (src->normal_exp > EXPBIAS, 0)) + { + exp = EXPMAX; + fraction = 0; + } + else + { + exp = src->normal_exp + EXPBIAS; + /* IF the gard bits are the all zero, but the first, then we're + half way between two numbers, choose the one which makes the + lsb of the answer 0. */ + if ((fraction & GARDMASK) == GARDMSB) + { + if (fraction & (1 << NGARDS)) + fraction += GARDROUND + 1; + } + else + { + /* Add a one to the guards to round up */ + fraction += GARDROUND; + } + if (fraction >= IMPLICIT_2) + { + fraction >>= 1; + exp += 1; + } + fraction >>= NGARDS; + } + } + + /* We previously used bitfields to store the number, but this doesn't + handle little/big endian systems conveniently, so use shifts and + masks */ +#ifdef FLOAT_BIT_ORDER_MISMATCH + dst.bits.fraction = fraction; + dst.bits.exp = exp; + dst.bits.sign = sign; +#else +# if defined TFLOAT && defined HALFFRACBITS + { + halffractype high, low, unity; + int lowsign, lowexp; + + unity = (halffractype) 1 << HALFFRACBITS; + + /* Set HIGH to the high double's significand, masking out the implicit 1. + Set LOW to the low double's full significand. */ + high = (fraction >> (FRACBITS - HALFFRACBITS)) & (unity - 1); + low = fraction & (unity * 2 - 1); + + /* Get the initial sign and exponent of the low double. */ + lowexp = exp - HALFFRACBITS - 1; + lowsign = sign; + + /* HIGH should be rounded like a normal double, making |LOW| <= + 0.5 ULP of HIGH. Assume round-to-nearest. */ + if (exp < EXPMAX) + if (low > unity || (low == unity && (high & 1) == 1)) + { + /* Round HIGH up and adjust LOW to match. */ + high++; + if (high == unity) + { + /* May make it infinite, but that's OK. */ + high = 0; + exp++; + } + low = unity * 2 - low; + lowsign ^= 1; + } + + high |= (halffractype) exp << HALFFRACBITS; + high |= (halffractype) sign << (HALFFRACBITS + EXPBITS); + + if (exp == EXPMAX || exp == 0 || low == 0) + low = 0; + else + { + while (lowexp > 0 && low < unity) + { + low <<= 1; + lowexp--; + } + + if (lowexp <= 0) + { + halffractype roundmsb, round; + int shift; + + shift = 1 - lowexp; + roundmsb = (1 << (shift - 1)); + round = low & ((roundmsb << 1) - 1); + + low >>= shift; + lowexp = 0; + + if (round > roundmsb || (round == roundmsb && (low & 1) == 1)) + { + low++; + if (low == unity) + /* LOW rounds up to the smallest normal number. */ + lowexp++; + } + } + + low &= unity - 1; + low |= (halffractype) lowexp << HALFFRACBITS; + low |= (halffractype) lowsign << (HALFFRACBITS + EXPBITS); + } + dst.value_raw = ((fractype) high << HALFSHIFT) | low; + } +# else + dst.value_raw = fraction & ((((fractype)1) << FRACBITS) - (fractype)1); + dst.value_raw |= ((fractype) (exp & ((1 << EXPBITS) - 1))) << FRACBITS; + dst.value_raw |= ((fractype) (sign & 1)) << (FRACBITS | EXPBITS); +# endif +#endif + +#if defined(FLOAT_WORD_ORDER_MISMATCH) && !defined(FLOAT) +#ifdef TFLOAT + { + qrtrfractype tmp1 = dst.words[0]; + qrtrfractype tmp2 = dst.words[1]; + dst.words[0] = dst.words[3]; + dst.words[1] = dst.words[2]; + dst.words[2] = tmp2; + dst.words[3] = tmp1; + } +#else + { + halffractype tmp = dst.words[0]; + dst.words[0] = dst.words[1]; + dst.words[1] = tmp; + } +#endif +#endif + + return dst.value; +} +#endif + +#if defined(L_unpack_df) || defined(L_unpack_sf) || defined(L_unpack_tf) +void +unpack_d (FLO_union_type * src, fp_number_type * dst) +{ + /* We previously used bitfields to store the number, but this doesn't + handle little/big endian systems conveniently, so use shifts and + masks */ + fractype fraction; + int exp; + int sign; + +#if defined(FLOAT_WORD_ORDER_MISMATCH) && !defined(FLOAT) + FLO_union_type swapped; + +#ifdef TFLOAT + swapped.words[0] = src->words[3]; + swapped.words[1] = src->words[2]; + swapped.words[2] = src->words[1]; + swapped.words[3] = src->words[0]; +#else + swapped.words[0] = src->words[1]; + swapped.words[1] = src->words[0]; +#endif + src = &swapped; +#endif + +#ifdef FLOAT_BIT_ORDER_MISMATCH + fraction = src->bits.fraction; + exp = src->bits.exp; + sign = src->bits.sign; +#else +# if defined TFLOAT && defined HALFFRACBITS + { + halffractype high, low; + + high = src->value_raw >> HALFSHIFT; + low = src->value_raw & (((fractype)1 << HALFSHIFT) - 1); + + fraction = high & ((((fractype)1) << HALFFRACBITS) - 1); + fraction <<= FRACBITS - HALFFRACBITS; + exp = ((int)(high >> HALFFRACBITS)) & ((1 << EXPBITS) - 1); + sign = ((int)(high >> (((HALFFRACBITS + EXPBITS))))) & 1; + + if (exp != EXPMAX && exp != 0 && low != 0) + { + int lowexp = ((int)(low >> HALFFRACBITS)) & ((1 << EXPBITS) - 1); + int lowsign = ((int)(low >> (((HALFFRACBITS + EXPBITS))))) & 1; + int shift; + fractype xlow; + + xlow = low & ((((fractype)1) << HALFFRACBITS) - 1); + if (lowexp) + xlow |= (((halffractype)1) << HALFFRACBITS); + else + lowexp = 1; + shift = (FRACBITS - HALFFRACBITS) - (exp - lowexp); + if (shift > 0) + xlow <<= shift; + else if (shift < 0) + xlow >>= -shift; + if (sign == lowsign) + fraction += xlow; + else if (fraction >= xlow) + fraction -= xlow; + else + { + /* The high part is a power of two but the full number is lower. + This code will leave the implicit 1 in FRACTION, but we'd + have added that below anyway. */ + fraction = (((fractype) 1 << FRACBITS) - xlow) << 1; + exp--; + } + } + } +# else + fraction = src->value_raw & ((((fractype)1) << FRACBITS) - 1); + exp = ((int)(src->value_raw >> FRACBITS)) & ((1 << EXPBITS) - 1); + sign = ((int)(src->value_raw >> (FRACBITS + EXPBITS))) & 1; +# endif +#endif + + dst->sign = sign; + if (exp == 0) + { + /* Hmm. Looks like 0 */ + if (fraction == 0 +#ifdef NO_DENORMALS + || 1 +#endif + ) + { + /* tastes like zero */ + dst->class = CLASS_ZERO; + } + else + { + /* Zero exponent with nonzero fraction - it's denormalized, + so there isn't a leading implicit one - we'll shift it so + it gets one. */ + dst->normal_exp = exp - EXPBIAS + 1; + fraction <<= NGARDS; + + dst->class = CLASS_NUMBER; +#if 1 + while (fraction < IMPLICIT_1) + { + fraction <<= 1; + dst->normal_exp--; + } +#endif + dst->fraction.ll = fraction; + } + } + else if (__builtin_expect (exp == EXPMAX, 0)) + { + /* Huge exponent*/ + if (fraction == 0) + { + /* Attached to a zero fraction - means infinity */ + dst->class = CLASS_INFINITY; + } + else + { + /* Nonzero fraction, means nan */ +#ifdef QUIET_NAN_NEGATED + if ((fraction & QUIET_NAN) == 0) +#else + if (fraction & QUIET_NAN) +#endif + { + dst->class = CLASS_QNAN; + } + else + { + dst->class = CLASS_SNAN; + } + /* Now that we know which kind of NaN we got, discard the + quiet/signaling bit, but do preserve the NaN payload. */ + fraction &= ~QUIET_NAN; + dst->fraction.ll = fraction << NGARDS; + } + } + else + { + /* Nothing strange about this number */ + dst->normal_exp = exp - EXPBIAS; + dst->class = CLASS_NUMBER; + dst->fraction.ll = (fraction << NGARDS) | IMPLICIT_1; + } +} +#endif /* L_unpack_df || L_unpack_sf */ + +#if defined(L_addsub_sf) || defined(L_addsub_df) || defined(L_addsub_tf) +static const fp_number_type * +_fpadd_parts (fp_number_type * a, + fp_number_type * b, + fp_number_type * tmp) +{ + intfrac tfraction; + + /* Put commonly used fields in local variables. */ + int a_normal_exp; + int b_normal_exp; + fractype a_fraction; + fractype b_fraction; + + if (isnan (a)) + { + return a; + } + if (isnan (b)) + { + return b; + } + if (isinf (a)) + { + /* Adding infinities with opposite signs yields a NaN. */ + if (isinf (b) && a->sign != b->sign) + return makenan (); + return a; + } + if (isinf (b)) + { + return b; + } + if (iszero (b)) + { + if (iszero (a)) + { + *tmp = *a; + tmp->sign = a->sign & b->sign; + return tmp; + } + return a; + } + if (iszero (a)) + { + return b; + } + + /* Got two numbers. shift the smaller and increment the exponent till + they're the same */ + { + int diff; + int sdiff; + + a_normal_exp = a->normal_exp; + b_normal_exp = b->normal_exp; + a_fraction = a->fraction.ll; + b_fraction = b->fraction.ll; + + diff = a_normal_exp - b_normal_exp; + sdiff = diff; + + if (diff < 0) + diff = -diff; + if (diff < FRAC_NBITS) + { + if (sdiff > 0) + { + b_normal_exp += diff; + LSHIFT (b_fraction, diff); + } + else if (sdiff < 0) + { + a_normal_exp += diff; + LSHIFT (a_fraction, diff); + } + } + else + { + /* Somethings's up.. choose the biggest */ + if (a_normal_exp > b_normal_exp) + { + b_normal_exp = a_normal_exp; + b_fraction = 0; + } + else + { + a_normal_exp = b_normal_exp; + a_fraction = 0; + } + } + } + + if (a->sign != b->sign) + { + if (a->sign) + { + tfraction = -a_fraction + b_fraction; + } + else + { + tfraction = a_fraction - b_fraction; + } + if (tfraction >= 0) + { + tmp->sign = 0; + tmp->normal_exp = a_normal_exp; + tmp->fraction.ll = tfraction; + } + else + { + tmp->sign = 1; + tmp->normal_exp = a_normal_exp; + tmp->fraction.ll = -tfraction; + } + /* and renormalize it */ + + while (tmp->fraction.ll < IMPLICIT_1 && tmp->fraction.ll) + { + tmp->fraction.ll <<= 1; + tmp->normal_exp--; + } + } + else + { + tmp->sign = a->sign; + tmp->normal_exp = a_normal_exp; + tmp->fraction.ll = a_fraction + b_fraction; + } + tmp->class = CLASS_NUMBER; + /* Now the fraction is added, we have to shift down to renormalize the + number */ + + if (tmp->fraction.ll >= IMPLICIT_2) + { + LSHIFT (tmp->fraction.ll, 1); + tmp->normal_exp++; + } + return tmp; +} + +FLO_type +add (FLO_type arg_a, FLO_type arg_b) +{ + fp_number_type a; + fp_number_type b; + fp_number_type tmp; + const fp_number_type *res; + FLO_union_type au, bu; + + au.value = arg_a; + bu.value = arg_b; + + unpack_d (&au, &a); + unpack_d (&bu, &b); + + res = _fpadd_parts (&a, &b, &tmp); + + return pack_d (res); +} + +FLO_type +sub (FLO_type arg_a, FLO_type arg_b) +{ + fp_number_type a; + fp_number_type b; + fp_number_type tmp; + const fp_number_type *res; + FLO_union_type au, bu; + + au.value = arg_a; + bu.value = arg_b; + + unpack_d (&au, &a); + unpack_d (&bu, &b); + + b.sign ^= 1; + + res = _fpadd_parts (&a, &b, &tmp); + + return pack_d (res); +} +#endif /* L_addsub_sf || L_addsub_df */ + +#if defined(L_mul_sf) || defined(L_mul_df) || defined(L_mul_tf) +static inline __attribute__ ((__always_inline__)) const fp_number_type * +_fpmul_parts ( fp_number_type * a, + fp_number_type * b, + fp_number_type * tmp) +{ + fractype low = 0; + fractype high = 0; + + if (isnan (a)) + { + a->sign = a->sign != b->sign; + return a; + } + if (isnan (b)) + { + b->sign = a->sign != b->sign; + return b; + } + if (isinf (a)) + { + if (iszero (b)) + return makenan (); + a->sign = a->sign != b->sign; + return a; + } + if (isinf (b)) + { + if (iszero (a)) + { + return makenan (); + } + b->sign = a->sign != b->sign; + return b; + } + if (iszero (a)) + { + a->sign = a->sign != b->sign; + return a; + } + if (iszero (b)) + { + b->sign = a->sign != b->sign; + return b; + } + + /* Calculate the mantissa by multiplying both numbers to get a + twice-as-wide number. */ + { +#if defined(NO_DI_MODE) || defined(TFLOAT) + { + fractype x = a->fraction.ll; + fractype ylow = b->fraction.ll; + fractype yhigh = 0; + int bit; + + /* ??? This does multiplies one bit at a time. Optimize. */ + for (bit = 0; bit < FRAC_NBITS; bit++) + { + int carry; + + if (x & 1) + { + carry = (low += ylow) < ylow; + high += yhigh + carry; + } + yhigh <<= 1; + if (ylow & FRACHIGH) + { + yhigh |= 1; + } + ylow <<= 1; + x >>= 1; + } + } +#elif defined(FLOAT) + /* Multiplying two USIs to get a UDI, we're safe. */ + { + UDItype answer = (UDItype)a->fraction.ll * (UDItype)b->fraction.ll; + + high = answer >> BITS_PER_SI; + low = answer; + } +#else + /* fractype is DImode, but we need the result to be twice as wide. + Assuming a widening multiply from DImode to TImode is not + available, build one by hand. */ + { + USItype nl = a->fraction.ll; + USItype nh = a->fraction.ll >> BITS_PER_SI; + USItype ml = b->fraction.ll; + USItype mh = b->fraction.ll >> BITS_PER_SI; + UDItype pp_ll = (UDItype) ml * nl; + UDItype pp_hl = (UDItype) mh * nl; + UDItype pp_lh = (UDItype) ml * nh; + UDItype pp_hh = (UDItype) mh * nh; + UDItype res2 = 0; + UDItype res0 = 0; + UDItype ps_hh__ = pp_hl + pp_lh; + if (ps_hh__ < pp_hl) + res2 += (UDItype)1 << BITS_PER_SI; + pp_hl = (UDItype)(USItype)ps_hh__ << BITS_PER_SI; + res0 = pp_ll + pp_hl; + if (res0 < pp_ll) + res2++; + res2 += (ps_hh__ >> BITS_PER_SI) + pp_hh; + high = res2; + low = res0; + } +#endif + } + + tmp->normal_exp = a->normal_exp + b->normal_exp + + FRAC_NBITS - (FRACBITS + NGARDS); + tmp->sign = a->sign != b->sign; + while (high >= IMPLICIT_2) + { + tmp->normal_exp++; + if (high & 1) + { + low >>= 1; + low |= FRACHIGH; + } + high >>= 1; + } + while (high < IMPLICIT_1) + { + tmp->normal_exp--; + + high <<= 1; + if (low & FRACHIGH) + high |= 1; + low <<= 1; + } + + if ((high & GARDMASK) == GARDMSB) + { + if (high & (1 << NGARDS)) + { + /* Because we're half way, we would round to even by adding + GARDROUND + 1, except that's also done in the packing + function, and rounding twice will lose precision and cause + the result to be too far off. Example: 32-bit floats with + bit patterns 0xfff * 0x3f800400 ~= 0xfff (less than 0.5ulp + off), not 0x1000 (more than 0.5ulp off). */ + } + else if (low) + { + /* We're a further than half way by a small amount corresponding + to the bits set in "low". Knowing that, we round here and + not in pack_d, because there we don't have "low" available + anymore. */ + high += GARDROUND + 1; + + /* Avoid further rounding in pack_d. */ + high &= ~(fractype) GARDMASK; + } + } + tmp->fraction.ll = high; + tmp->class = CLASS_NUMBER; + return tmp; +} + +FLO_type +multiply (FLO_type arg_a, FLO_type arg_b) +{ + fp_number_type a; + fp_number_type b; + fp_number_type tmp; + const fp_number_type *res; + FLO_union_type au, bu; + + au.value = arg_a; + bu.value = arg_b; + + unpack_d (&au, &a); + unpack_d (&bu, &b); + + res = _fpmul_parts (&a, &b, &tmp); + + return pack_d (res); +} +#endif /* L_mul_sf || L_mul_df || L_mul_tf */ + +#if defined(L_div_sf) || defined(L_div_df) || defined(L_div_tf) +static inline __attribute__ ((__always_inline__)) const fp_number_type * +_fpdiv_parts (fp_number_type * a, + fp_number_type * b) +{ + fractype bit; + fractype numerator; + fractype denominator; + fractype quotient; + + if (isnan (a)) + { + return a; + } + if (isnan (b)) + { + return b; + } + + a->sign = a->sign ^ b->sign; + + if (isinf (a) || iszero (a)) + { + if (a->class == b->class) + return makenan (); + return a; + } + + if (isinf (b)) + { + a->fraction.ll = 0; + a->normal_exp = 0; + return a; + } + if (iszero (b)) + { + a->class = CLASS_INFINITY; + return a; + } + + /* Calculate the mantissa by multiplying both 64bit numbers to get a + 128 bit number */ + { + /* quotient = + ( numerator / denominator) * 2^(numerator exponent - denominator exponent) + */ + + a->normal_exp = a->normal_exp - b->normal_exp; + numerator = a->fraction.ll; + denominator = b->fraction.ll; + + if (numerator < denominator) + { + /* Fraction will be less than 1.0 */ + numerator *= 2; + a->normal_exp--; + } + bit = IMPLICIT_1; + quotient = 0; + /* ??? Does divide one bit at a time. Optimize. */ + while (bit) + { + if (numerator >= denominator) + { + quotient |= bit; + numerator -= denominator; + } + bit >>= 1; + numerator *= 2; + } + + if ((quotient & GARDMASK) == GARDMSB) + { + if (quotient & (1 << NGARDS)) + { + /* Because we're half way, we would round to even by adding + GARDROUND + 1, except that's also done in the packing + function, and rounding twice will lose precision and cause + the result to be too far off. */ + } + else if (numerator) + { + /* We're a further than half way by the small amount + corresponding to the bits set in "numerator". Knowing + that, we round here and not in pack_d, because there we + don't have "numerator" available anymore. */ + quotient += GARDROUND + 1; + + /* Avoid further rounding in pack_d. */ + quotient &= ~(fractype) GARDMASK; + } + } + + a->fraction.ll = quotient; + return (a); + } +} + +FLO_type +divide (FLO_type arg_a, FLO_type arg_b) +{ + fp_number_type a; + fp_number_type b; + const fp_number_type *res; + FLO_union_type au, bu; + + au.value = arg_a; + bu.value = arg_b; + + unpack_d (&au, &a); + unpack_d (&bu, &b); + + res = _fpdiv_parts (&a, &b); + + return pack_d (res); +} +#endif /* L_div_sf || L_div_df */ + +#if defined(L_fpcmp_parts_sf) || defined(L_fpcmp_parts_df) \ + || defined(L_fpcmp_parts_tf) +/* according to the demo, fpcmp returns a comparison with 0... thus + a -1 + a==b -> 0 + a>b -> +1 + */ + +int +__fpcmp_parts (fp_number_type * a, fp_number_type * b) +{ +#if 0 + /* either nan -> unordered. Must be checked outside of this routine. */ + if (isnan (a) && isnan (b)) + { + return 1; /* still unordered! */ + } +#endif + + if (isnan (a) || isnan (b)) + { + return 1; /* how to indicate unordered compare? */ + } + if (isinf (a) && isinf (b)) + { + /* +inf > -inf, but +inf != +inf */ + /* b \a| +inf(0)| -inf(1) + ______\+--------+-------- + +inf(0)| a==b(0)| ab(1) | a==b(0) + -------+--------+-------- + So since unordered must be nonzero, just line up the columns... + */ + return b->sign - a->sign; + } + /* but not both... */ + if (isinf (a)) + { + return a->sign ? -1 : 1; + } + if (isinf (b)) + { + return b->sign ? 1 : -1; + } + if (iszero (a) && iszero (b)) + { + return 0; + } + if (iszero (a)) + { + return b->sign ? 1 : -1; + } + if (iszero (b)) + { + return a->sign ? -1 : 1; + } + /* now both are "normal". */ + if (a->sign != b->sign) + { + /* opposite signs */ + return a->sign ? -1 : 1; + } + /* same sign; exponents? */ + if (a->normal_exp > b->normal_exp) + { + return a->sign ? -1 : 1; + } + if (a->normal_exp < b->normal_exp) + { + return a->sign ? 1 : -1; + } + /* same exponents; check size. */ + if (a->fraction.ll > b->fraction.ll) + { + return a->sign ? -1 : 1; + } + if (a->fraction.ll < b->fraction.ll) + { + return a->sign ? 1 : -1; + } + /* after all that, they're equal. */ + return 0; +} +#endif + +#if defined(L_compare_sf) || defined(L_compare_df) || defined(L_compoare_tf) +CMPtype +compare (FLO_type arg_a, FLO_type arg_b) +{ + fp_number_type a; + fp_number_type b; + FLO_union_type au, bu; + + au.value = arg_a; + bu.value = arg_b; + + unpack_d (&au, &a); + unpack_d (&bu, &b); + + return __fpcmp_parts (&a, &b); +} +#endif /* L_compare_sf || L_compare_df */ + +/* These should be optimized for their specific tasks someday. */ + +#if defined(L_eq_sf) || defined(L_eq_df) || defined(L_eq_tf) +CMPtype +_eq_f2 (FLO_type arg_a, FLO_type arg_b) +{ + fp_number_type a; + fp_number_type b; + FLO_union_type au, bu; + + au.value = arg_a; + bu.value = arg_b; + + unpack_d (&au, &a); + unpack_d (&bu, &b); + + if (isnan (&a) || isnan (&b)) + return 1; /* false, truth == 0 */ + + return __fpcmp_parts (&a, &b) ; +} +#endif /* L_eq_sf || L_eq_df */ + +#if defined(L_ne_sf) || defined(L_ne_df) || defined(L_ne_tf) +CMPtype +_ne_f2 (FLO_type arg_a, FLO_type arg_b) +{ + fp_number_type a; + fp_number_type b; + FLO_union_type au, bu; + + au.value = arg_a; + bu.value = arg_b; + + unpack_d (&au, &a); + unpack_d (&bu, &b); + + if (isnan (&a) || isnan (&b)) + return 1; /* true, truth != 0 */ + + return __fpcmp_parts (&a, &b) ; +} +#endif /* L_ne_sf || L_ne_df */ + +#if defined(L_gt_sf) || defined(L_gt_df) || defined(L_gt_tf) +CMPtype +_gt_f2 (FLO_type arg_a, FLO_type arg_b) +{ + fp_number_type a; + fp_number_type b; + FLO_union_type au, bu; + + au.value = arg_a; + bu.value = arg_b; + + unpack_d (&au, &a); + unpack_d (&bu, &b); + + if (isnan (&a) || isnan (&b)) + return -1; /* false, truth > 0 */ + + return __fpcmp_parts (&a, &b); +} +#endif /* L_gt_sf || L_gt_df */ + +#if defined(L_ge_sf) || defined(L_ge_df) || defined(L_ge_tf) +CMPtype +_ge_f2 (FLO_type arg_a, FLO_type arg_b) +{ + fp_number_type a; + fp_number_type b; + FLO_union_type au, bu; + + au.value = arg_a; + bu.value = arg_b; + + unpack_d (&au, &a); + unpack_d (&bu, &b); + + if (isnan (&a) || isnan (&b)) + return -1; /* false, truth >= 0 */ + return __fpcmp_parts (&a, &b) ; +} +#endif /* L_ge_sf || L_ge_df */ + +#if defined(L_lt_sf) || defined(L_lt_df) || defined(L_lt_tf) +CMPtype +_lt_f2 (FLO_type arg_a, FLO_type arg_b) +{ + fp_number_type a; + fp_number_type b; + FLO_union_type au, bu; + + au.value = arg_a; + bu.value = arg_b; + + unpack_d (&au, &a); + unpack_d (&bu, &b); + + if (isnan (&a) || isnan (&b)) + return 1; /* false, truth < 0 */ + + return __fpcmp_parts (&a, &b); +} +#endif /* L_lt_sf || L_lt_df */ + +#if defined(L_le_sf) || defined(L_le_df) || defined(L_le_tf) +CMPtype +_le_f2 (FLO_type arg_a, FLO_type arg_b) +{ + fp_number_type a; + fp_number_type b; + FLO_union_type au, bu; + + au.value = arg_a; + bu.value = arg_b; + + unpack_d (&au, &a); + unpack_d (&bu, &b); + + if (isnan (&a) || isnan (&b)) + return 1; /* false, truth <= 0 */ + + return __fpcmp_parts (&a, &b) ; +} +#endif /* L_le_sf || L_le_df */ + +#if defined(L_unord_sf) || defined(L_unord_df) || defined(L_unord_tf) +CMPtype +_unord_f2 (FLO_type arg_a, FLO_type arg_b) +{ + fp_number_type a; + fp_number_type b; + FLO_union_type au, bu; + + au.value = arg_a; + bu.value = arg_b; + + unpack_d (&au, &a); + unpack_d (&bu, &b); + + return (isnan (&a) || isnan (&b)); +} +#endif /* L_unord_sf || L_unord_df */ + +#if defined(L_si_to_sf) || defined(L_si_to_df) || defined(L_si_to_tf) +FLO_type +si_to_float (SItype arg_a) +{ + fp_number_type in; + + in.class = CLASS_NUMBER; + in.sign = arg_a < 0; + if (!arg_a) + { + in.class = CLASS_ZERO; + } + else + { + USItype uarg; + int shift; + in.normal_exp = FRACBITS + NGARDS; + if (in.sign) + { + /* Special case for minint, since there is no +ve integer + representation for it */ + if (arg_a == (- MAX_SI_INT - 1)) + { + return (FLO_type)(- MAX_SI_INT - 1); + } + uarg = (-arg_a); + } + else + uarg = arg_a; + + in.fraction.ll = uarg; + shift = clzusi (uarg) - (BITS_PER_SI - 1 - FRACBITS - NGARDS); + if (shift > 0) + { + in.fraction.ll <<= shift; + in.normal_exp -= shift; + } + } + return pack_d (&in); +} +#endif /* L_si_to_sf || L_si_to_df */ + +#if defined(L_usi_to_sf) || defined(L_usi_to_df) || defined(L_usi_to_tf) +FLO_type +usi_to_float (USItype arg_a) +{ + fp_number_type in; + + in.sign = 0; + if (!arg_a) + { + in.class = CLASS_ZERO; + } + else + { + int shift; + in.class = CLASS_NUMBER; + in.normal_exp = FRACBITS + NGARDS; + in.fraction.ll = arg_a; + + shift = clzusi (arg_a) - (BITS_PER_SI - 1 - FRACBITS - NGARDS); + if (shift < 0) + { + fractype guard = in.fraction.ll & (((fractype)1 << -shift) - 1); + in.fraction.ll >>= -shift; + in.fraction.ll |= (guard != 0); + in.normal_exp -= shift; + } + else if (shift > 0) + { + in.fraction.ll <<= shift; + in.normal_exp -= shift; + } + } + return pack_d (&in); +} +#endif + +#if defined(L_sf_to_si) || defined(L_df_to_si) || defined(L_tf_to_si) +SItype +float_to_si (FLO_type arg_a) +{ + fp_number_type a; + SItype tmp; + FLO_union_type au; + + au.value = arg_a; + unpack_d (&au, &a); + + if (iszero (&a)) + return 0; + if (isnan (&a)) + return 0; + /* get reasonable MAX_SI_INT... */ + if (isinf (&a)) + return a.sign ? (-MAX_SI_INT)-1 : MAX_SI_INT; + /* it is a number, but a small one */ + if (a.normal_exp < 0) + return 0; + if (a.normal_exp > BITS_PER_SI - 2) + return a.sign ? (-MAX_SI_INT)-1 : MAX_SI_INT; + tmp = a.fraction.ll >> ((FRACBITS + NGARDS) - a.normal_exp); + return a.sign ? (-tmp) : (tmp); +} +#endif /* L_sf_to_si || L_df_to_si */ + +#if defined(L_tf_to_usi) +USItype +float_to_usi (FLO_type arg_a) +{ + fp_number_type a; + FLO_union_type au; + + au.value = arg_a; + unpack_d (&au, &a); + + if (iszero (&a)) + return 0; + if (isnan (&a)) + return 0; + /* it is a negative number */ + if (a.sign) + return 0; + /* get reasonable MAX_USI_INT... */ + if (isinf (&a)) + return MAX_USI_INT; + /* it is a number, but a small one */ + if (a.normal_exp < 0) + return 0; + if (a.normal_exp > BITS_PER_SI - 1) + return MAX_USI_INT; + else if (a.normal_exp > (FRACBITS + NGARDS)) + return a.fraction.ll << (a.normal_exp - (FRACBITS + NGARDS)); + else + return a.fraction.ll >> ((FRACBITS + NGARDS) - a.normal_exp); +} +#endif /* L_tf_to_usi */ + +#if defined(L_negate_sf) || defined(L_negate_df) || defined(L_negate_tf) +FLO_type +negate (FLO_type arg_a) +{ + fp_number_type a; + FLO_union_type au; + + au.value = arg_a; + unpack_d (&au, &a); + + flip_sign (&a); + return pack_d (&a); +} +#endif /* L_negate_sf || L_negate_df */ + +#ifdef FLOAT + +#if defined(L_make_sf) +SFtype +__make_fp(fp_class_type class, + unsigned int sign, + int exp, + USItype frac) +{ + fp_number_type in; + + in.class = class; + in.sign = sign; + in.normal_exp = exp; + in.fraction.ll = frac; + return pack_d (&in); +} +#endif /* L_make_sf */ + +#ifndef FLOAT_ONLY + +/* This enables one to build an fp library that supports float but not double. + Otherwise, we would get an undefined reference to __make_dp. + This is needed for some 8-bit ports that can't handle well values that + are 8-bytes in size, so we just don't support double for them at all. */ + +#if defined(L_sf_to_df) +DFtype +sf_to_df (SFtype arg_a) +{ + fp_number_type in; + FLO_union_type au; + + au.value = arg_a; + unpack_d (&au, &in); + + return __make_dp (in.class, in.sign, in.normal_exp, + ((UDItype) in.fraction.ll) << F_D_BITOFF); +} +#endif /* L_sf_to_df */ + +#if defined(L_sf_to_tf) && defined(TMODES) +TFtype +sf_to_tf (SFtype arg_a) +{ + fp_number_type in; + FLO_union_type au; + + au.value = arg_a; + unpack_d (&au, &in); + + return __make_tp (in.class, in.sign, in.normal_exp, + ((UTItype) in.fraction.ll) << F_T_BITOFF); +} +#endif /* L_sf_to_df */ + +#endif /* ! FLOAT_ONLY */ +#endif /* FLOAT */ + +#ifndef FLOAT + +extern SFtype __make_fp (fp_class_type, unsigned int, int, USItype); + +#if defined(L_make_df) +DFtype +__make_dp (fp_class_type class, unsigned int sign, int exp, UDItype frac) +{ + fp_number_type in; + + in.class = class; + in.sign = sign; + in.normal_exp = exp; + in.fraction.ll = frac; + return pack_d (&in); +} +#endif /* L_make_df */ + +#if defined(L_df_to_sf) +SFtype +df_to_sf (DFtype arg_a) +{ + fp_number_type in; + USItype sffrac; + FLO_union_type au; + + au.value = arg_a; + unpack_d (&au, &in); + + sffrac = in.fraction.ll >> F_D_BITOFF; + + /* We set the lowest guard bit in SFFRAC if we discarded any non + zero bits. */ + if ((in.fraction.ll & (((USItype) 1 << F_D_BITOFF) - 1)) != 0) + sffrac |= 1; + + return __make_fp (in.class, in.sign, in.normal_exp, sffrac); +} +#endif /* L_df_to_sf */ + +#if defined(L_df_to_tf) && defined(TMODES) \ + && !defined(FLOAT) && !defined(TFLOAT) +TFtype +df_to_tf (DFtype arg_a) +{ + fp_number_type in; + FLO_union_type au; + + au.value = arg_a; + unpack_d (&au, &in); + + return __make_tp (in.class, in.sign, in.normal_exp, + ((UTItype) in.fraction.ll) << D_T_BITOFF); +} +#endif /* L_sf_to_df */ + +#ifdef TFLOAT +#if defined(L_make_tf) +TFtype +__make_tp(fp_class_type class, + unsigned int sign, + int exp, + UTItype frac) +{ + fp_number_type in; + + in.class = class; + in.sign = sign; + in.normal_exp = exp; + in.fraction.ll = frac; + return pack_d (&in); +} +#endif /* L_make_tf */ + +#if defined(L_tf_to_df) +DFtype +tf_to_df (TFtype arg_a) +{ + fp_number_type in; + UDItype sffrac; + FLO_union_type au; + + au.value = arg_a; + unpack_d (&au, &in); + + sffrac = in.fraction.ll >> D_T_BITOFF; + + /* We set the lowest guard bit in SFFRAC if we discarded any non + zero bits. */ + if ((in.fraction.ll & (((UTItype) 1 << D_T_BITOFF) - 1)) != 0) + sffrac |= 1; + + return __make_dp (in.class, in.sign, in.normal_exp, sffrac); +} +#endif /* L_tf_to_df */ + +#if defined(L_tf_to_sf) +SFtype +tf_to_sf (TFtype arg_a) +{ + fp_number_type in; + USItype sffrac; + FLO_union_type au; + + au.value = arg_a; + unpack_d (&au, &in); + + sffrac = in.fraction.ll >> F_T_BITOFF; + + /* We set the lowest guard bit in SFFRAC if we discarded any non + zero bits. */ + if ((in.fraction.ll & (((UTItype) 1 << F_T_BITOFF) - 1)) != 0) + sffrac |= 1; + + return __make_fp (in.class, in.sign, in.normal_exp, sffrac); +} +#endif /* L_tf_to_sf */ +#endif /* TFLOAT */ + +#endif /* ! FLOAT */ +#endif /* !EXTENDED_FLOAT_STUBS */ diff --git a/contrib/toolchain/gcc/5x/libgcc/fp-bit.h b/contrib/toolchain/gcc/5x/libgcc/fp-bit.h new file mode 100644 index 0000000000..d844f420fc --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/fp-bit.h @@ -0,0 +1,506 @@ +/* Header file for fp-bit.c. */ +/* Copyright (C) 2000-2015 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 GCC_FP_BIT_H +#define GCC_FP_BIT_H + +/* Defining FINE_GRAINED_LIBRARIES allows one to select which routines + from this file are compiled via additional -D options. + + This avoids the need to pull in the entire fp emulation library + when only a small number of functions are needed. + + If FINE_GRAINED_LIBRARIES is not defined, then compile every + suitable routine. */ +#ifndef FINE_GRAINED_LIBRARIES +#define L_pack_df +#define L_unpack_df +#define L_pack_sf +#define L_unpack_sf +#define L_addsub_sf +#define L_addsub_df +#define L_mul_sf +#define L_mul_df +#define L_div_sf +#define L_div_df +#define L_fpcmp_parts_sf +#define L_fpcmp_parts_df +#define L_compare_sf +#define L_compare_df +#define L_eq_sf +#define L_eq_df +#define L_ne_sf +#define L_ne_df +#define L_gt_sf +#define L_gt_df +#define L_ge_sf +#define L_ge_df +#define L_lt_sf +#define L_lt_df +#define L_le_sf +#define L_le_df +#define L_unord_sf +#define L_unord_df +#define L_usi_to_sf +#define L_usi_to_df +#define L_si_to_sf +#define L_si_to_df +#define L_sf_to_si +#define L_df_to_si +#define L_f_to_usi +#define L_df_to_usi +#define L_negate_sf +#define L_negate_df +#define L_make_sf +#define L_make_df +#define L_sf_to_df +#define L_df_to_sf +#ifdef FLOAT +#define L_thenan_sf +#else +#define L_thenan_df +#endif +#endif /* ! FINE_GRAINED_LIBRARIES */ + +#if __LDBL_MANT_DIG__ == 113 || __LDBL_MANT_DIG__ == 106 +# if defined(TFLOAT) || defined(L_sf_to_tf) || defined(L_df_to_tf) +# define TMODES +# endif +#endif + +typedef float SFtype __attribute__ ((mode (SF))); +typedef float DFtype __attribute__ ((mode (DF))); +#ifdef TMODES +typedef float TFtype __attribute__ ((mode (TF))); +#endif + +typedef int HItype __attribute__ ((mode (HI))); +typedef int SItype __attribute__ ((mode (SI))); +typedef int DItype __attribute__ ((mode (DI))); +#ifdef TMODES +typedef int TItype __attribute__ ((mode (TI))); +#endif + +/* The type of the result of a floating point comparison. This must + match `__libgcc_cmp_return__' in GCC for the target. */ +#ifndef CMPtype +typedef int CMPtype __attribute__ ((mode (__libgcc_cmp_return__))); +#endif + +typedef unsigned int UHItype __attribute__ ((mode (HI))); +typedef unsigned int USItype __attribute__ ((mode (SI))); +typedef unsigned int UDItype __attribute__ ((mode (DI))); +#ifdef TMODES +typedef unsigned int UTItype __attribute__ ((mode (TI))); +#endif + +#define MAX_USI_INT (~(USItype)0) +#define MAX_SI_INT ((SItype) (MAX_USI_INT >> 1)) +#define BITS_PER_SI (4 * BITS_PER_UNIT) +#ifdef TMODES +#define MAX_UDI_INT (~(UDItype)0) +#define MAX_DI_INT ((DItype) (MAX_UDI_INT >> 1)) +#define BITS_PER_DI (8 * BITS_PER_UNIT) +#endif + +#ifdef FLOAT_ONLY +#define NO_DI_MODE +#endif + +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +#define FLOAT_BIT_ORDER_MISMATCH +#endif + +#if __BYTE_ORDER__ != __FLOAT_WORD_ORDER__ +#define FLOAT_WORD_ORDER_MISMATCH +#endif + +#ifdef TFLOAT +# ifndef TMODES +# error "TFLOAT requires long double to have 113 bits of mantissa" +# endif + +# define PREFIXFPDP tp +# define PREFIXSFDF tf +# define NGARDS 10L /* Is this right? */ +# define GARDROUND 0x1ff +# define GARDMASK 0x3ff +# define GARDMSB 0x200 +# define FRAC_NBITS 128 + +# if __LDBL_MANT_DIG__ == 113 /* IEEE quad */ +# define EXPBITS 15 +# define EXPBIAS 16383 +# define EXPMAX (0x7fff) +# define QUIET_NAN ((TItype)0x8 << 108) +# define FRACHIGH ((TItype)0x8 << 124) +# define FRACHIGH2 ((TItype)0xc << 124) +# define FRACBITS 112 +# endif + +# if __LDBL_MANT_DIG__ == 106 /* IBM extended (double+double) */ +# define EXPBITS 11 +# define EXPBIAS 1023 +# define EXPMAX (0x7ff) +# define QUIET_NAN ((TItype)0x8 << (48 + 64)) +# define FRACHIGH ((TItype)0x8 << 124) +# define FRACHIGH2 ((TItype)0xc << 124) +# define FRACBITS 105 +# define HALFFRACBITS 52 +# define HALFSHIFT 64 +# endif + +# define pack_d __pack_t +# define unpack_d __unpack_t +# define __fpcmp_parts __fpcmp_parts_t + typedef UTItype fractype; + typedef UDItype halffractype; + typedef USItype qrtrfractype; +#define qrtrfractype qrtrfractype + typedef TFtype FLO_type; + typedef TItype intfrac; +#elif defined FLOAT +# define NGARDS 7L +# define GARDROUND 0x3f +# define GARDMASK 0x7f +# define GARDMSB 0x40 +# define EXPBITS 8 +# define EXPBIAS 127 +# define FRACBITS 23 +# define EXPMAX (0xff) +# define QUIET_NAN 0x400000L +# define FRAC_NBITS 32 +# define FRACHIGH 0x80000000L +# define FRACHIGH2 0xc0000000L +# define pack_d __pack_f +# define unpack_d __unpack_f +# define __fpcmp_parts __fpcmp_parts_f + typedef USItype fractype; + typedef UHItype halffractype; + typedef SFtype FLO_type; + typedef SItype intfrac; + +#else +# define PREFIXFPDP dp +# define PREFIXSFDF df +# define NGARDS 8L +# define GARDROUND 0x7f +# define GARDMASK 0xff +# define GARDMSB 0x80 +# define EXPBITS 11 +# define EXPBIAS 1023 +# define FRACBITS 52 +# define EXPMAX (0x7ff) +# define QUIET_NAN 0x8000000000000LL +# define FRAC_NBITS 64 +# define FRACHIGH 0x8000000000000000LL +# define FRACHIGH2 0xc000000000000000LL +# define pack_d __pack_d +# define unpack_d __unpack_d +# define __fpcmp_parts __fpcmp_parts_d + typedef UDItype fractype; + typedef USItype halffractype; + typedef DFtype FLO_type; + typedef DItype intfrac; +#endif /* FLOAT */ + +#ifdef TFLOAT +# define add __addtf3 +# define sub __subtf3 +# define multiply __multf3 +# define divide __divtf3 +# define compare __cmptf2 +# define _eq_f2 __eqtf2 +# define _ne_f2 __netf2 +# define _gt_f2 __gttf2 +# define _ge_f2 __getf2 +# define _lt_f2 __lttf2 +# define _le_f2 __letf2 +# define _unord_f2 __unordtf2 +# define usi_to_float __floatunsitf +# define si_to_float __floatsitf +# define float_to_si __fixtfsi +# define float_to_usi __fixunstfsi +# define negate __negtf2 +# define tf_to_sf __trunctfsf2 +# define tf_to_df __trunctfdf2 +#elif defined FLOAT +# define add __addsf3 +# define sub __subsf3 +# define multiply __mulsf3 +# define divide __divsf3 +# define compare __cmpsf2 +# define _eq_f2 __eqsf2 +# define _ne_f2 __nesf2 +# define _gt_f2 __gtsf2 +# define _ge_f2 __gesf2 +# define _lt_f2 __ltsf2 +# define _le_f2 __lesf2 +# define _unord_f2 __unordsf2 +# define usi_to_float __floatunsisf +# define si_to_float __floatsisf +# define float_to_si __fixsfsi +# define float_to_usi __fixunssfsi +# define negate __negsf2 +# define sf_to_df __extendsfdf2 +# define sf_to_tf __extendsftf2 +#else +# define add __adddf3 +# define sub __subdf3 +# define multiply __muldf3 +# define divide __divdf3 +# define compare __cmpdf2 +# define _eq_f2 __eqdf2 +# define _ne_f2 __nedf2 +# define _gt_f2 __gtdf2 +# define _ge_f2 __gedf2 +# define _lt_f2 __ltdf2 +# define _le_f2 __ledf2 +# define _unord_f2 __unorddf2 +# define usi_to_float __floatunsidf +# define si_to_float __floatsidf +# define float_to_si __fixdfsi +# define float_to_usi __fixunsdfsi +# define negate __negdf2 +# define df_to_sf __truncdfsf2 +# define df_to_tf __extenddftf2 +#endif /* FLOAT */ + +#ifndef INLINE +#define INLINE __inline__ +#endif + +/* Preserve the sticky-bit when shifting fractions to the right. */ +#define LSHIFT(a, s) { a = (a >> s) | !!(a & (((fractype) 1 << s) - 1)); } + +/* numeric parameters */ +/* F_D_BITOFF is the number of bits offset between the MSB of the mantissa + of a float and of a double. Assumes there are only two float types. + (double::FRAC_BITS+double::NGARDS-(float::FRAC_BITS+float::NGARDS)) + */ +#define F_D_BITOFF (52+8-(23+7)) + +#ifdef TMODES +# define F_T_BITOFF (__LDBL_MANT_DIG__-1+10-(23+7)) +# define D_T_BITOFF (__LDBL_MANT_DIG__-1+10-(52+8)) +#endif + + +#define NORMAL_EXPMIN (-(EXPBIAS)+1) +#define IMPLICIT_1 ((fractype)1<<(FRACBITS+NGARDS)) +#define IMPLICIT_2 ((fractype)1<<(FRACBITS+1+NGARDS)) + +/* common types */ + +typedef enum +{ + CLASS_SNAN, + CLASS_QNAN, + CLASS_ZERO, + CLASS_NUMBER, + CLASS_INFINITY +} fp_class_type; + +typedef struct +{ +#ifdef SMALL_MACHINE + char class; + unsigned char sign; + short normal_exp; +#else + fp_class_type class; + unsigned int sign; + int normal_exp; +#endif + + union + { + fractype ll; + halffractype l[2]; + } fraction; +} fp_number_type; + +typedef union +{ + FLO_type value; + fractype value_raw; + +#ifndef FLOAT +# ifdef qrtrfractype + qrtrfractype qwords[4]; +# else + halffractype words[2]; +# endif +#endif + +#ifdef FLOAT_BIT_ORDER_MISMATCH + struct + { + fractype fraction:FRACBITS __attribute__ ((packed)); + unsigned int exp:EXPBITS __attribute__ ((packed)); + unsigned int sign:1 __attribute__ ((packed)); + } + bits; +#endif + +#ifdef _DEBUG_BITFLOAT + struct + { + unsigned int sign:1 __attribute__ ((packed)); + unsigned int exp:EXPBITS __attribute__ ((packed)); + fractype fraction:FRACBITS __attribute__ ((packed)); + } + bits_big_endian; + + struct + { + fractype fraction:FRACBITS __attribute__ ((packed)); + unsigned int exp:EXPBITS __attribute__ ((packed)); + unsigned int sign:1 __attribute__ ((packed)); + } + bits_little_endian; +#endif +} +FLO_union_type; + +/* Prototypes. */ + +#if defined(L_pack_df) || defined(L_pack_sf) || defined(L_pack_tf) +extern FLO_type pack_d (const fp_number_type *); +#endif + +extern void unpack_d (FLO_union_type *, fp_number_type *); + +#if defined(L_addsub_sf) || defined(L_addsub_df) || defined(L_addsub_tf) +extern FLO_type add (FLO_type, FLO_type); +extern FLO_type sub (FLO_type, FLO_type); +#endif + +#if defined(L_mul_sf) || defined(L_mul_df) || defined(L_mul_tf) +extern FLO_type multiply (FLO_type, FLO_type); +#endif + +#if defined(L_div_sf) || defined(L_div_df) || defined(L_div_tf) +extern FLO_type divide (FLO_type, FLO_type); +#endif + +extern int __fpcmp_parts (fp_number_type *, fp_number_type *); + +#if defined(L_compare_sf) || defined(L_compare_df) || defined(L_compare_tf) +extern CMPtype compare (FLO_type, FLO_type); +#endif + +#if defined(L_eq_sf) || defined(L_eq_df) || defined(L_eq_tf) +extern CMPtype _eq_f2 (FLO_type, FLO_type); +#endif + +#if defined(L_ne_sf) || defined(L_ne_df) || defined(L_ne_tf) +extern CMPtype _ne_f2 (FLO_type, FLO_type); +#endif + +#if defined(L_gt_sf) || defined(L_gt_df) || defined(L_gt_tf) +extern CMPtype _gt_f2 (FLO_type, FLO_type); +#endif + +#if defined(L_ge_sf) || defined(L_ge_df) || defined(L_ge_tf) +extern CMPtype _ge_f2 (FLO_type, FLO_type); +#endif + +#if defined(L_lt_sf) || defined(L_lt_df) || defined(L_lt_tf) +extern CMPtype _lt_f2 (FLO_type, FLO_type); +#endif + +#if defined(L_le_sf) || defined(L_le_df) || defined(L_le_tf) +extern CMPtype _le_f2 (FLO_type, FLO_type); +#endif + +#if defined(L_unord_sf) || defined(L_unord_df) || defined(L_unord_tf) +extern CMPtype _unord_f2 (FLO_type, FLO_type); +#endif + +#if defined(L_si_to_sf) || defined(L_si_to_df) || defined(L_si_to_tf) +extern FLO_type si_to_float (SItype); +#endif + +#if defined(L_sf_to_si) || defined(L_df_to_si) || defined(L_tf_to_si) +extern SItype float_to_si (FLO_type); +#endif + +#if defined(L_tf_to_usi) +extern USItype float_to_usi (FLO_type); +#endif + +#if defined(L_usi_to_sf) || defined(L_usi_to_df) || defined(L_usi_to_tf) +extern FLO_type usi_to_float (USItype); +#endif + +#if defined(L_negate_sf) || defined(L_negate_df) || defined(L_negate_tf) +extern FLO_type negate (FLO_type); +#endif + +#ifdef FLOAT +#if defined(L_make_sf) +extern SFtype __make_fp (fp_class_type, unsigned int, int, USItype); +#endif +#ifndef FLOAT_ONLY +extern DFtype __make_dp (fp_class_type, unsigned int, int, UDItype); +#if defined(L_sf_to_df) +extern DFtype sf_to_df (SFtype); +#endif +#if defined(L_sf_to_tf) && defined(TMODES) +extern TFtype sf_to_tf (SFtype); +#endif +#endif /* ! FLOAT_ONLY */ +#endif /* FLOAT */ + +#ifndef FLOAT +extern SFtype __make_fp (fp_class_type, unsigned int, int, USItype); +#if defined(L_make_df) +extern DFtype __make_dp (fp_class_type, unsigned int, int, UDItype); +#endif +#if defined(L_df_to_sf) +extern SFtype df_to_sf (DFtype); +#endif +#if defined(L_df_to_tf) && defined(TMODES) +extern TFtype df_to_tf (DFtype); +#endif +#endif /* ! FLOAT */ + +#ifdef TMODES +extern DFtype __make_dp (fp_class_type, unsigned int, int, UDItype); +extern TFtype __make_tp (fp_class_type, unsigned int, int, UTItype); +#ifdef TFLOAT +#if defined(L_tf_to_sf) +extern SFtype tf_to_sf (TFtype); +#endif +#if defined(L_tf_to_df) +extern DFtype tf_to_df (TFtype); +#endif +#if defined(L_di_to_tf) +extern TFtype di_to_df (DItype); +#endif +#endif /* TFLOAT */ +#endif /* TMODES */ + +#endif /* ! GCC_FP_BIT_H */ diff --git a/contrib/toolchain/gcc/5x/libgcc/gbl-ctors.h b/contrib/toolchain/gcc/5x/libgcc/gbl-ctors.h new file mode 100644 index 0000000000..bd081611d7 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/gbl-ctors.h @@ -0,0 +1,86 @@ +/* Definitions relating to the special __do_global_init function used + for getting g++ file-scope static objects constructed. This file + will get included either by libgcc2.c (for systems that don't support + a .init section) or by crtstuff.c (for those that do). + Copyright (C) 1991-2015 Free Software Foundation, Inc. + Contributed by Ron Guilmette (rfg@segfault.us.com) + +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 file contains definitions and declarations of things + relating to the normal start-up-time invocation of C++ + file-scope static object constructors. These declarations + and definitions are used by *both* libgcc2.c and by crtstuff.c. + + Note that this file should only be compiled with GCC. +*/ + +#ifndef GCC_GBL_CTORS_H +#define GCC_GBL_CTORS_H + +/* Declare a pointer to void function type. */ + +typedef void (*func_ptr) (void); + +/* Declare the set of symbols use as begin and end markers for the lists + of global object constructors and global object destructors. */ + +extern func_ptr __CTOR_LIST__[]; +extern func_ptr __DTOR_LIST__[]; + +/* Declare the routine which needs to get invoked at program start time. */ + +extern void __do_global_ctors (void); + +/* Declare the routine which needs to get invoked at program exit time. */ + +extern void __do_global_dtors (void); + +/* Define a macro with the code which needs to be executed at program + start-up time. This macro is used in two places in crtstuff.c (for + systems which support a .init section) and in one place in libgcc2.c + (for those system which do *not* support a .init section). For all + three places where this code might appear, it must be identical, so + we define it once here as a macro to avoid various instances getting + out-of-sync with one another. */ + +/* Some systems place the number of pointers + in the first word of the table. + On other systems, that word is -1. + In all cases, the table is null-terminated. + If the length is not recorded, count up to the null. */ + +/* Some systems use a different strategy for finding the ctors. + For example, svr3. */ +#ifndef DO_GLOBAL_CTORS_BODY +#define DO_GLOBAL_CTORS_BODY \ +do { \ + __SIZE_TYPE__ nptrs = (__SIZE_TYPE__) __CTOR_LIST__[0]; \ + unsigned i; \ + if (nptrs == (__SIZE_TYPE__)-1) \ + for (nptrs = 0; __CTOR_LIST__[nptrs + 1] != 0; nptrs++); \ + for (i = nptrs; i >= 1; i--) \ + __CTOR_LIST__[i] (); \ +} while (0) +#endif + +#endif /* GCC_GBL_CTORS_H */ diff --git a/contrib/toolchain/gcc/5x/libgcc/generic-morestack-thread.c b/contrib/toolchain/gcc/5x/libgcc/generic-morestack-thread.c new file mode 100644 index 0000000000..327d06ff03 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/generic-morestack-thread.c @@ -0,0 +1,164 @@ +/* Thread library support for -fsplit-stack. */ +/* Copyright (C) 2009-2015 Free Software Foundation, Inc. + Contributed by Ian Lance Taylor . + +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 "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" + +/* If inhibit_libc is defined, we can not compile this file. The + effect is that people will not be able to use -fsplit-stack. That + is much better than failing the build particularly since people + will want to define inhibit_libc while building a compiler which + can build glibc. */ + +#ifndef inhibit_libc + +#include +#include + +#include "generic-morestack.h" + +/* We declare the pthread functions we need as weak, so that + libgcc_s.so does not need to be linked against -lpthread. */ + +extern int pthread_once (pthread_once_t *, void (*) (void)) + __attribute__ ((weak)); + +extern int pthread_key_create (pthread_key_t *, void (*) (void *)) + __attribute__ ((weak)); + +extern int pthread_setspecific (pthread_key_t, const void *) + __attribute__ ((weak)); + +/* The key for the list of stack segments to free when the thread + exits. This is created by pthread_key_create. */ + +static pthread_key_t segment_list_key; + +/* Used to only run create_key once. */ + +static pthread_once_t create_key_once = PTHREAD_ONCE_INIT; + +/* Release all the segments for a thread. This is the destructor + function used by pthread_key_create, and is called when a thread + exits. */ + +static void +free_segments (void* arg) +{ + __morestack_release_segments ((struct stack_segment **) arg, 1); +} + +/* Set up the key for the list of segments. This is called via + pthread_once. */ + +static void +create_key (void) +{ + int err; + + err = pthread_key_create (&segment_list_key, free_segments); + if (err != 0) + { + static const char msg[] = "pthread_key_create failed: errno "; + __morestack_fail (msg, sizeof msg - 1, err); + } +} + +/* Pass information from the pthread_create wrapper to + stack_split_initialize_thread. */ + +struct pthread_create_args +{ + void *(*start_routine) (void *); + void *arg; +}; + +/* Initialize a thread. This is called via pthread_create. It calls + a target dependent function to set up any required stack guard. */ + +static void* stack_split_initialize_thread (void *) + __attribute__ ((no_split_stack)); + +static void * +stack_split_initialize_thread (void *varg) +{ + struct pthread_create_args *args = (struct pthread_create_args *) varg; + int err; + void *(*start_routine) (void *); + void *arg; + + __stack_split_initialize (); + + err = pthread_setspecific (segment_list_key, (void *) &__morestack_segments); + if (err != 0) + { + static const char msg[] = "pthread_setspecific failed: errno "; + __morestack_fail (msg, sizeof msg - 1, err); + } + + start_routine = args->start_routine; + arg = args->arg; + free (args); + return (*start_routine) (arg); +} + +/* This function wraps calls to pthread_create to make sure that the + stack guard is initialized for new threads. FIXME: This hack will + not be necessary if glibc supports -fsplit-stack directly. */ + +int __wrap_pthread_create (pthread_t *, const pthread_attr_t *, + void *(*start_routine) (void *), void *) + __attribute__ ((visibility ("hidden"))); + +extern int __real_pthread_create (pthread_t *, const pthread_attr_t *, + void *(*start_routine) (void *), void *) + __attribute__ ((weak)); + +int +__wrap_pthread_create (pthread_t *tid, const pthread_attr_t *attr, + void *(*start_routine) (void *), void *arg) +{ + int err; + struct pthread_create_args* args; + + err = pthread_once (&create_key_once, create_key); + if (err != 0) + { + static const char msg[] = "pthread_once failed: errno "; + __morestack_fail (msg, sizeof msg - 1, err); + } + + args = malloc (sizeof (struct pthread_create_args)); + if (args == NULL) + return EAGAIN; + args->start_routine = start_routine; + args->arg = arg; + return __real_pthread_create (tid, attr, stack_split_initialize_thread, args); +} + +#endif /* !defined (inhibit_libc) */ diff --git a/contrib/toolchain/gcc/5x/libgcc/generic-morestack.c b/contrib/toolchain/gcc/5x/libgcc/generic-morestack.c new file mode 100644 index 0000000000..76f94d2dc0 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/generic-morestack.c @@ -0,0 +1,1172 @@ +/* Library support for -fsplit-stack. */ +/* Copyright (C) 2009-2015 Free Software Foundation, Inc. + Contributed by Ian Lance Taylor . + +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 "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" + +/* If inhibit_libc is defined, we can not compile this file. The + effect is that people will not be able to use -fsplit-stack. That + is much better than failing the build particularly since people + will want to define inhibit_libc while building a compiler which + can build glibc. */ + +#ifndef inhibit_libc + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "generic-morestack.h" + +typedef unsigned uintptr_type __attribute__ ((mode (pointer))); + +/* This file contains subroutines that are used by code compiled with + -fsplit-stack. */ + +/* Declare functions to avoid warnings--there is no header file for + these internal functions. We give most of these functions the + flatten attribute in order to minimize their stack usage--here we + must minimize stack usage even at the cost of code size, and in + general inlining everything will do that. */ + +extern void +__generic_morestack_set_initial_sp (void *sp, size_t len) + __attribute__ ((no_split_stack, flatten, visibility ("hidden"))); + +extern void * +__generic_morestack (size_t *frame_size, void *old_stack, size_t param_size) + __attribute__ ((no_split_stack, flatten, visibility ("hidden"))); + +extern void * +__generic_releasestack (size_t *pavailable) + __attribute__ ((no_split_stack, flatten, visibility ("hidden"))); + +extern void +__morestack_block_signals (void) + __attribute__ ((no_split_stack, flatten, visibility ("hidden"))); + +extern void +__morestack_unblock_signals (void) + __attribute__ ((no_split_stack, flatten, visibility ("hidden"))); + +extern size_t +__generic_findstack (void *stack) + __attribute__ ((no_split_stack, flatten, visibility ("hidden"))); + +extern void +__morestack_load_mmap (void) + __attribute__ ((no_split_stack, visibility ("hidden"))); + +extern void * +__morestack_allocate_stack_space (size_t size) + __attribute__ ((visibility ("hidden"))); + +/* These are functions which -fsplit-stack code can call. These are + not called by the compiler, and are not hidden. FIXME: These + should be in some header file somewhere, somehow. */ + +extern void * +__splitstack_find (void *, void *, size_t *, void **, void **, void **) + __attribute__ ((visibility ("default"))); + +extern void +__splitstack_block_signals (int *, int *) + __attribute__ ((visibility ("default"))); + +extern void +__splitstack_getcontext (void *context[10]) + __attribute__ ((no_split_stack, visibility ("default"))); + +extern void +__splitstack_setcontext (void *context[10]) + __attribute__ ((no_split_stack, visibility ("default"))); + +extern void * +__splitstack_makecontext (size_t, void *context[10], size_t *) + __attribute__ ((visibility ("default"))); + +extern void * +__splitstack_resetcontext (void *context[10], size_t *) + __attribute__ ((visibility ("default"))); + +extern void +__splitstack_releasecontext (void *context[10]) + __attribute__ ((visibility ("default"))); + +extern void +__splitstack_block_signals_context (void *context[10], int *, int *) + __attribute__ ((visibility ("default"))); + +extern void * +__splitstack_find_context (void *context[10], size_t *, void **, void **, + void **) + __attribute__ ((visibility ("default"))); + +/* These functions must be defined by the processor specific code. */ + +extern void *__morestack_get_guard (void) + __attribute__ ((no_split_stack, visibility ("hidden"))); + +extern void __morestack_set_guard (void *) + __attribute__ ((no_split_stack, visibility ("hidden"))); + +extern void *__morestack_make_guard (void *, size_t) + __attribute__ ((no_split_stack, visibility ("hidden"))); + +/* When we allocate a stack segment we put this header at the + start. */ + +struct stack_segment +{ + /* The previous stack segment--when a function running on this stack + segment returns, it will run on the previous one. */ + struct stack_segment *prev; + /* The next stack segment, if it has been allocated--when a function + is running on this stack segment, the next one is not being + used. */ + struct stack_segment *next; + /* The total size of this stack segment. */ + size_t size; + /* The stack address when this stack was created. This is used when + popping the stack. */ + void *old_stack; + /* A list of memory blocks allocated by dynamic stack + allocation. */ + struct dynamic_allocation_blocks *dynamic_allocation; + /* A list of dynamic memory blocks no longer needed. */ + struct dynamic_allocation_blocks *free_dynamic_allocation; + /* An extra pointer in case we need some more information some + day. */ + void *extra; +}; + +/* This structure holds the (approximate) initial stack pointer and + size for the system supplied stack for a thread. This is set when + the thread is created. We also store a sigset_t here to hold the + signal mask while splitting the stack, since we don't want to store + that on the stack. */ + +struct initial_sp +{ + /* The initial stack pointer. */ + void *sp; + /* The stack length. */ + size_t len; + /* A signal mask, put here so that the thread can use it without + needing stack space. */ + sigset_t mask; + /* Non-zero if we should not block signals. This is a reversed flag + so that the default zero value is the safe value. The type is + uintptr_type because it replaced one of the void * pointers in + extra. */ + uintptr_type dont_block_signals; + /* Some extra space for later extensibility. */ + void *extra[4]; +}; + +/* A list of memory blocks allocated by dynamic stack allocation. + This is used for code that calls alloca or uses variably sized + arrays. */ + +struct dynamic_allocation_blocks +{ + /* The next block in the list. */ + struct dynamic_allocation_blocks *next; + /* The size of the allocated memory. */ + size_t size; + /* The allocated memory. */ + void *block; +}; + +/* These thread local global variables must be shared by all split + stack code across shared library boundaries. Therefore, they have + default visibility. They have extensibility fields if needed for + new versions. If more radical changes are needed, new code can be + written using new variable names, while still using the existing + variables in a backward compatible manner. Symbol versioning is + also used, although, since these variables are only referenced by + code in this file and generic-morestack-thread.c, it is likely that + simply using new names will suffice. */ + +/* The first stack segment allocated for this thread. */ + +__thread struct stack_segment *__morestack_segments + __attribute__ ((visibility ("default"))); + +/* The stack segment that we think we are currently using. This will + be correct in normal usage, but will be incorrect if an exception + unwinds into a different stack segment or if longjmp jumps to a + different stack segment. */ + +__thread struct stack_segment *__morestack_current_segment + __attribute__ ((visibility ("default"))); + +/* The initial stack pointer and size for this thread. */ + +__thread struct initial_sp __morestack_initial_sp + __attribute__ ((visibility ("default"))); + +/* A static signal mask, to avoid taking up stack space. */ + +static sigset_t __morestack_fullmask; + +/* Convert an integer to a decimal string without using much stack + space. Return a pointer to the part of the buffer to use. We this + instead of sprintf because sprintf will require too much stack + space. */ + +static char * +print_int (int val, char *buf, int buflen, size_t *print_len) +{ + int is_negative; + int i; + unsigned int uval; + + uval = (unsigned int) val; + if (val >= 0) + is_negative = 0; + else + { + is_negative = 1; + uval = - uval; + } + + i = buflen; + do + { + --i; + buf[i] = '0' + (uval % 10); + uval /= 10; + } + while (uval != 0 && i > 0); + + if (is_negative) + { + if (i > 0) + --i; + buf[i] = '-'; + } + + *print_len = buflen - i; + return buf + i; +} + +/* Print the string MSG/LEN, the errno number ERR, and a newline on + stderr. Then crash. */ + +void +__morestack_fail (const char *, size_t, int) __attribute__ ((noreturn)); + +void +__morestack_fail (const char *msg, size_t len, int err) +{ + char buf[24]; + static const char nl[] = "\n"; + struct iovec iov[3]; + union { char *p; const char *cp; } const_cast; + + const_cast.cp = msg; + iov[0].iov_base = const_cast.p; + iov[0].iov_len = len; + /* We can't call strerror, because it may try to translate the error + message, and that would use too much stack space. */ + iov[1].iov_base = print_int (err, buf, sizeof buf, &iov[1].iov_len); + const_cast.cp = &nl[0]; + iov[2].iov_base = const_cast.p; + iov[2].iov_len = sizeof nl - 1; + /* FIXME: On systems without writev we need to issue three write + calls, or punt on printing errno. For now this is irrelevant + since stack splitting only works on GNU/Linux anyhow. */ + writev (2, iov, 3); + abort (); +} + +/* Allocate a new stack segment. FRAME_SIZE is the required frame + size. */ + +static struct stack_segment * +allocate_segment (size_t frame_size) +{ + static unsigned int static_pagesize; + static int use_guard_page; + unsigned int pagesize; + unsigned int overhead; + unsigned int allocate; + void *space; + struct stack_segment *pss; + + pagesize = static_pagesize; + if (pagesize == 0) + { + unsigned int p; + + pagesize = getpagesize (); + +#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 + p = __sync_val_compare_and_swap (&static_pagesize, 0, pagesize); +#else + /* Just hope this assignment is atomic. */ + static_pagesize = pagesize; + p = 0; +#endif + + use_guard_page = getenv ("SPLIT_STACK_GUARD") != 0; + + /* FIXME: I'm not sure this assert should be in the released + code. */ + assert (p == 0 || p == pagesize); + } + + overhead = sizeof (struct stack_segment); + + allocate = pagesize; + if (allocate < MINSIGSTKSZ) + allocate = ((MINSIGSTKSZ + overhead + pagesize - 1) + & ~ (pagesize - 1)); + if (allocate < frame_size) + allocate = ((frame_size + overhead + pagesize - 1) + & ~ (pagesize - 1)); + + if (use_guard_page) + allocate += pagesize; + + /* FIXME: If this binary requires an executable stack, then we need + to set PROT_EXEC. Unfortunately figuring that out is complicated + and target dependent. We would need to use dl_iterate_phdr to + see if there is any object which does not have a PT_GNU_STACK + phdr, though only for architectures which use that mechanism. */ + space = mmap (NULL, allocate, PROT_READ | PROT_WRITE, + MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); + if (space == MAP_FAILED) + { + static const char msg[] = + "unable to allocate additional stack space: errno "; + __morestack_fail (msg, sizeof msg - 1, errno); + } + + if (use_guard_page) + { + void *guard; + +#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__ + guard = space; + space = (char *) space + pagesize; +#else + guard = space + allocate - pagesize; +#endif + + mprotect (guard, pagesize, PROT_NONE); + allocate -= pagesize; + } + + pss = (struct stack_segment *) space; + + pss->prev = NULL; + pss->next = NULL; + pss->size = allocate - overhead; + pss->dynamic_allocation = NULL; + pss->free_dynamic_allocation = NULL; + pss->extra = NULL; + + return pss; +} + +/* Free a list of dynamic blocks. */ + +static void +free_dynamic_blocks (struct dynamic_allocation_blocks *p) +{ + while (p != NULL) + { + struct dynamic_allocation_blocks *next; + + next = p->next; + free (p->block); + free (p); + p = next; + } +} + +/* Merge two lists of dynamic blocks. */ + +static struct dynamic_allocation_blocks * +merge_dynamic_blocks (struct dynamic_allocation_blocks *a, + struct dynamic_allocation_blocks *b) +{ + struct dynamic_allocation_blocks **pp; + + if (a == NULL) + return b; + if (b == NULL) + return a; + for (pp = &a->next; *pp != NULL; pp = &(*pp)->next) + ; + *pp = b; + return a; +} + +/* Release stack segments. If FREE_DYNAMIC is non-zero, we also free + any dynamic blocks. Otherwise we return them. */ + +struct dynamic_allocation_blocks * +__morestack_release_segments (struct stack_segment **pp, int free_dynamic) +{ + struct dynamic_allocation_blocks *ret; + struct stack_segment *pss; + + ret = NULL; + pss = *pp; + while (pss != NULL) + { + struct stack_segment *next; + unsigned int allocate; + + next = pss->next; + + if (pss->dynamic_allocation != NULL + || pss->free_dynamic_allocation != NULL) + { + if (free_dynamic) + { + free_dynamic_blocks (pss->dynamic_allocation); + free_dynamic_blocks (pss->free_dynamic_allocation); + } + else + { + ret = merge_dynamic_blocks (pss->dynamic_allocation, ret); + ret = merge_dynamic_blocks (pss->free_dynamic_allocation, ret); + } + } + + allocate = pss->size + sizeof (struct stack_segment); + if (munmap (pss, allocate) < 0) + { + static const char msg[] = "munmap of stack space failed: errno "; + __morestack_fail (msg, sizeof msg - 1, errno); + } + + pss = next; + } + *pp = NULL; + + return ret; +} + +/* This function is called by a processor specific function to set the + initial stack pointer for a thread. The operating system will + always create a stack for a thread. Here we record a stack pointer + near the base of that stack. The size argument lets the processor + specific code estimate how much stack space is available on this + initial stack. */ + +void +__generic_morestack_set_initial_sp (void *sp, size_t len) +{ + /* The stack pointer most likely starts on a page boundary. Adjust + to the nearest 512 byte boundary. It's not essential that we be + precise here; getting it wrong will just leave some stack space + unused. */ +#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__ + sp = (void *) ((((__UINTPTR_TYPE__) sp + 511U) / 512U) * 512U); +#else + sp = (void *) ((((__UINTPTR_TYPE__) sp - 511U) / 512U) * 512U); +#endif + + __morestack_initial_sp.sp = sp; + __morestack_initial_sp.len = len; + sigemptyset (&__morestack_initial_sp.mask); + + sigfillset (&__morestack_fullmask); +#if defined(__GLIBC__) && defined(__linux__) + /* In glibc, the first two real time signals are used by the NPTL + threading library. By taking them out of the set of signals, we + avoiding copying the signal mask in pthread_sigmask. More + importantly, pthread_sigmask uses less stack space on x86_64. */ + sigdelset (&__morestack_fullmask, __SIGRTMIN); + sigdelset (&__morestack_fullmask, __SIGRTMIN + 1); +#endif +} + +/* This function is called by a processor specific function which is + run in the prologue when more stack is needed. The processor + specific function handles the details of saving registers and + frobbing the actual stack pointer. This function is responsible + for allocating a new stack segment and for copying a parameter + block from the old stack to the new one. On function entry + *PFRAME_SIZE is the size of the required stack frame--the returned + stack must be at least this large. On function exit *PFRAME_SIZE + is the amount of space remaining on the allocated stack. OLD_STACK + points at the parameters the old stack (really the current one + while this function is running). OLD_STACK is saved so that it can + be returned by a later call to __generic_releasestack. PARAM_SIZE + is the size in bytes of parameters to copy to the new stack. This + function returns a pointer to the new stack segment, pointing to + the memory after the parameters have been copied. The returned + value minus the returned *PFRAME_SIZE (or plus if the stack grows + upward) is the first address on the stack which should not be used. + + This function is running on the old stack and has only a limited + amount of stack space available. */ + +void * +__generic_morestack (size_t *pframe_size, void *old_stack, size_t param_size) +{ + size_t frame_size = *pframe_size; + struct stack_segment *current; + struct stack_segment **pp; + struct dynamic_allocation_blocks *dynamic; + char *from; + char *to; + void *ret; + size_t i; + size_t aligned; + + current = __morestack_current_segment; + + pp = current != NULL ? ¤t->next : &__morestack_segments; + if (*pp != NULL && (*pp)->size < frame_size) + dynamic = __morestack_release_segments (pp, 0); + else + dynamic = NULL; + current = *pp; + + if (current == NULL) + { + current = allocate_segment (frame_size + param_size); + current->prev = __morestack_current_segment; + *pp = current; + } + + current->old_stack = old_stack; + + __morestack_current_segment = current; + + if (dynamic != NULL) + { + /* Move the free blocks onto our list. We don't want to call + free here, as we are short on stack space. */ + current->free_dynamic_allocation = + merge_dynamic_blocks (dynamic, current->free_dynamic_allocation); + } + + *pframe_size = current->size - param_size; + + /* Align the returned stack to a 32-byte boundary. */ + aligned = (param_size + 31) & ~ (size_t) 31; + +#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__ + { + char *bottom = (char *) (current + 1) + current->size; + to = bottom - aligned; + ret = bottom - aligned; + } +#else + to = current + 1; + to += aligned - param_size; + ret = (char *) (current + 1) + aligned; +#endif + + /* We don't call memcpy to avoid worrying about the dynamic linker + trying to resolve it. */ + from = (char *) old_stack; + for (i = 0; i < param_size; i++) + *to++ = *from++; + + return ret; +} + +/* This function is called by a processor specific function when it is + ready to release a stack segment. We don't actually release the + stack segment, we just move back to the previous one. The current + stack segment will still be available if we need it in + __generic_morestack. This returns a pointer to the new stack + segment to use, which is the one saved by a previous call to + __generic_morestack. The processor specific function is then + responsible for actually updating the stack pointer. This sets + *PAVAILABLE to the amount of stack space now available. */ + +void * +__generic_releasestack (size_t *pavailable) +{ + struct stack_segment *current; + void *old_stack; + + current = __morestack_current_segment; + old_stack = current->old_stack; + current = current->prev; + __morestack_current_segment = current; + + if (current != NULL) + { +#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__ + *pavailable = (char *) old_stack - (char *) (current + 1); +#else + *pavailable = (char *) (current + 1) + current->size - (char *) old_stack; +#endif + } + else + { + size_t used; + + /* We have popped back to the original stack. */ +#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__ + if ((char *) old_stack >= (char *) __morestack_initial_sp.sp) + used = 0; + else + used = (char *) __morestack_initial_sp.sp - (char *) old_stack; +#else + if ((char *) old_stack <= (char *) __morestack_initial_sp.sp) + used = 0; + else + used = (char *) old_stack - (char *) __morestack_initial_sp.sp; +#endif + + if (used > __morestack_initial_sp.len) + *pavailable = 0; + else + *pavailable = __morestack_initial_sp.len - used; + } + + return old_stack; +} + +/* Block signals while splitting the stack. This avoids trouble if we + try to invoke a signal handler which itself wants to split the + stack. */ + +extern int pthread_sigmask (int, const sigset_t *, sigset_t *) + __attribute__ ((weak)); + +void +__morestack_block_signals (void) +{ + if (__morestack_initial_sp.dont_block_signals) + ; + else if (pthread_sigmask) + pthread_sigmask (SIG_BLOCK, &__morestack_fullmask, + &__morestack_initial_sp.mask); + else + sigprocmask (SIG_BLOCK, &__morestack_fullmask, + &__morestack_initial_sp.mask); +} + +/* Unblock signals while splitting the stack. */ + +void +__morestack_unblock_signals (void) +{ + if (__morestack_initial_sp.dont_block_signals) + ; + else if (pthread_sigmask) + pthread_sigmask (SIG_SETMASK, &__morestack_initial_sp.mask, NULL); + else + sigprocmask (SIG_SETMASK, &__morestack_initial_sp.mask, NULL); +} + +/* This function is called to allocate dynamic stack space, for alloca + or a variably sized array. This is a regular function with + sufficient stack space, so we just use malloc to allocate the + space. We attach the allocated blocks to the current stack + segment, so that they will eventually be reused or freed. */ + +void * +__morestack_allocate_stack_space (size_t size) +{ + struct stack_segment *seg, *current; + struct dynamic_allocation_blocks *p; + + /* We have to block signals to avoid getting confused if we get + interrupted by a signal whose handler itself uses alloca or a + variably sized array. */ + __morestack_block_signals (); + + /* Since we don't want to call free while we are low on stack space, + we may have a list of already allocated blocks waiting to be + freed. Release them all, unless we find one that is large + enough. We don't look at every block to see if one is large + enough, just the first one, because we aren't trying to build a + memory allocator here, we're just trying to speed up common + cases. */ + + current = __morestack_current_segment; + p = NULL; + for (seg = __morestack_segments; seg != NULL; seg = seg->next) + { + p = seg->free_dynamic_allocation; + if (p != NULL) + { + if (p->size >= size) + { + seg->free_dynamic_allocation = p->next; + break; + } + + free_dynamic_blocks (p); + seg->free_dynamic_allocation = NULL; + p = NULL; + } + } + + if (p == NULL) + { + /* We need to allocate additional memory. */ + p = malloc (sizeof (*p)); + if (p == NULL) + abort (); + p->size = size; + p->block = malloc (size); + if (p->block == NULL) + abort (); + } + + /* If we are still on the initial stack, then we have a space leak. + FIXME. */ + if (current != NULL) + { + p->next = current->dynamic_allocation; + current->dynamic_allocation = p; + } + + __morestack_unblock_signals (); + + return p->block; +} + +/* Find the stack segment for STACK and return the amount of space + available. This is used when unwinding the stack because of an + exception, in order to reset the stack guard correctly. */ + +size_t +__generic_findstack (void *stack) +{ + struct stack_segment *pss; + size_t used; + + for (pss = __morestack_current_segment; pss != NULL; pss = pss->prev) + { + if ((char *) pss < (char *) stack + && (char *) pss + pss->size > (char *) stack) + { + __morestack_current_segment = pss; +#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__ + return (char *) stack - (char *) (pss + 1); +#else + return (char *) (pss + 1) + pss->size - (char *) stack; +#endif + } + } + + /* We have popped back to the original stack. */ + + if (__morestack_initial_sp.sp == NULL) + return 0; + +#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__ + if ((char *) stack >= (char *) __morestack_initial_sp.sp) + used = 0; + else + used = (char *) __morestack_initial_sp.sp - (char *) stack; +#else + if ((char *) stack <= (char *) __morestack_initial_sp.sp) + used = 0; + else + used = (char *) stack - (char *) __morestack_initial_sp.sp; +#endif + + if (used > __morestack_initial_sp.len) + return 0; + else + return __morestack_initial_sp.len - used; +} + +/* This function is called at program startup time to make sure that + mmap, munmap, and getpagesize are resolved if linking dynamically. + We want to resolve them while we have enough stack for them, rather + than calling into the dynamic linker while low on stack space. */ + +void +__morestack_load_mmap (void) +{ + /* Call with bogus values to run faster. We don't care if the call + fails. Pass __MORESTACK_CURRENT_SEGMENT to make sure that any + TLS accessor function is resolved. */ + mmap (__morestack_current_segment, 0, PROT_READ, MAP_ANONYMOUS, -1, 0); + mprotect (NULL, 0, 0); + munmap (0, getpagesize ()); +} + +/* This function may be used to iterate over the stack segments. + This can be called like this. + void *next_segment = NULL; + void *next_sp = NULL; + void *initial_sp = NULL; + void *stack; + size_t stack_size; + while ((stack = __splitstack_find (next_segment, next_sp, &stack_size, + &next_segment, &next_sp, + &initial_sp)) != NULL) + { + // Stack segment starts at stack and is stack_size bytes long. + } + + There is no way to iterate over the stack segments of a different + thread. However, what is permitted is for one thread to call this + with the first two values NULL, to pass next_segment, next_sp, and + initial_sp to a different thread, and then to suspend one way or + another. A different thread may run the subsequent + __morestack_find iterations. Of course, this will only work if the + first thread is suspended during the __morestack_find iterations. + If not, the second thread will be looking at the stack while it is + changing, and anything could happen. + + FIXME: This should be declared in some header file, but where? */ + +void * +__splitstack_find (void *segment_arg, void *sp, size_t *len, + void **next_segment, void **next_sp, + void **initial_sp) +{ + struct stack_segment *segment; + void *ret; + char *nsp; + + if (segment_arg == (void *) (uintptr_type) 1) + { + char *isp = (char *) *initial_sp; + + if (isp == NULL) + return NULL; + + *next_segment = (void *) (uintptr_type) 2; + *next_sp = NULL; +#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__ + if ((char *) sp >= isp) + return NULL; + *len = (char *) isp - (char *) sp; + return sp; +#else + if ((char *) sp <= (char *) isp) + return NULL; + *len = (char *) sp - (char *) isp; + return (void *) isp; +#endif + } + else if (segment_arg == (void *) (uintptr_type) 2) + return NULL; + else if (segment_arg != NULL) + segment = (struct stack_segment *) segment_arg; + else + { + *initial_sp = __morestack_initial_sp.sp; + segment = __morestack_current_segment; + sp = (void *) &segment; + while (1) + { + if (segment == NULL) + return __splitstack_find ((void *) (uintptr_type) 1, sp, len, + next_segment, next_sp, initial_sp); + if ((char *) sp >= (char *) (segment + 1) + && (char *) sp <= (char *) (segment + 1) + segment->size) + break; + segment = segment->prev; + } + } + + if (segment->prev == NULL) + *next_segment = (void *) (uintptr_type) 1; + else + *next_segment = segment->prev; + + /* The old_stack value is the address of the function parameters of + the function which called __morestack. So if f1 called f2 which + called __morestack, the stack looks like this: + + parameters <- old_stack + return in f1 + return in f2 + registers pushed by __morestack + + The registers pushed by __morestack may not be visible on any + other stack, if we are being called by a signal handler + immediately after the call to __morestack_unblock_signals. We + want to adjust our return value to include those registers. This + is target dependent. */ + + nsp = (char *) segment->old_stack; + + if (nsp == NULL) + { + /* We've reached the top of the stack. */ + *next_segment = (void *) (uintptr_type) 2; + } + else + { +#if defined (__x86_64__) + nsp -= 12 * sizeof (void *); +#elif defined (__i386__) + nsp -= 6 * sizeof (void *); +#else +#error "unrecognized target" +#endif + + *next_sp = (void *) nsp; + } + +#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__ + *len = (char *) (segment + 1) + segment->size - (char *) sp; + ret = (void *) sp; +#else + *len = (char *) sp - (char *) (segment + 1); + ret = (void *) (segment + 1); +#endif + + return ret; +} + +/* Tell the split stack code whether it has to block signals while + manipulating the stack. This is for programs in which some threads + block all signals. If a thread already blocks signals, there is no + need for the split stack code to block them as well. If NEW is not + NULL, then if *NEW is non-zero signals will be blocked while + splitting the stack, otherwise they will not. If OLD is not NULL, + *OLD will be set to the old value. */ + +void +__splitstack_block_signals (int *new, int *old) +{ + if (old != NULL) + *old = __morestack_initial_sp.dont_block_signals ? 0 : 1; + if (new != NULL) + __morestack_initial_sp.dont_block_signals = *new ? 0 : 1; +} + +/* The offsets into the arrays used by __splitstack_getcontext and + __splitstack_setcontext. */ + +enum __splitstack_context_offsets +{ + MORESTACK_SEGMENTS = 0, + CURRENT_SEGMENT = 1, + CURRENT_STACK = 2, + STACK_GUARD = 3, + INITIAL_SP = 4, + INITIAL_SP_LEN = 5, + BLOCK_SIGNALS = 6, + + NUMBER_OFFSETS = 10 +}; + +/* Get the current split stack context. This may be used for + coroutine switching, similar to getcontext. The argument should + have at least 10 void *pointers for extensibility, although we + don't currently use all of them. This would normally be called + immediately before a call to getcontext or swapcontext or + setjmp. */ + +void +__splitstack_getcontext (void *context[NUMBER_OFFSETS]) +{ + memset (context, 0, NUMBER_OFFSETS * sizeof (void *)); + context[MORESTACK_SEGMENTS] = (void *) __morestack_segments; + context[CURRENT_SEGMENT] = (void *) __morestack_current_segment; + context[CURRENT_STACK] = (void *) &context; + context[STACK_GUARD] = __morestack_get_guard (); + context[INITIAL_SP] = (void *) __morestack_initial_sp.sp; + context[INITIAL_SP_LEN] = (void *) (uintptr_type) __morestack_initial_sp.len; + context[BLOCK_SIGNALS] = (void *) __morestack_initial_sp.dont_block_signals; +} + +/* Set the current split stack context. The argument should be a + context previously passed to __splitstack_getcontext. This would + normally be called immediately after a call to getcontext or + swapcontext or setjmp if something jumped to it. */ + +void +__splitstack_setcontext (void *context[NUMBER_OFFSETS]) +{ + __morestack_segments = (struct stack_segment *) context[MORESTACK_SEGMENTS]; + __morestack_current_segment = + (struct stack_segment *) context[CURRENT_SEGMENT]; + __morestack_set_guard (context[STACK_GUARD]); + __morestack_initial_sp.sp = context[INITIAL_SP]; + __morestack_initial_sp.len = (size_t) context[INITIAL_SP_LEN]; + __morestack_initial_sp.dont_block_signals = + (uintptr_type) context[BLOCK_SIGNALS]; +} + +/* Create a new split stack context. This will allocate a new stack + segment which may be used by a coroutine. STACK_SIZE is the + minimum size of the new stack. The caller is responsible for + actually setting the stack pointer. This would normally be called + before a call to makecontext, and the returned stack pointer and + size would be used to set the uc_stack field. A function called + via makecontext on a stack created by __splitstack_makecontext may + not return. Note that the returned pointer points to the lowest + address in the stack space, and thus may not be the value to which + to set the stack pointer. */ + +void * +__splitstack_makecontext (size_t stack_size, void *context[NUMBER_OFFSETS], + size_t *size) +{ + struct stack_segment *segment; + void *initial_sp; + + memset (context, 0, NUMBER_OFFSETS * sizeof (void *)); + segment = allocate_segment (stack_size); + context[MORESTACK_SEGMENTS] = segment; + context[CURRENT_SEGMENT] = segment; +#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__ + initial_sp = (void *) ((char *) (segment + 1) + segment->size); +#else + initial_sp = (void *) (segment + 1); +#endif + context[STACK_GUARD] = __morestack_make_guard (initial_sp, segment->size); + context[INITIAL_SP] = NULL; + context[INITIAL_SP_LEN] = 0; + *size = segment->size; + return (void *) (segment + 1); +} + +/* Given an existing split stack context, reset it back to the start + of the stack. Return the stack pointer and size, appropriate for + use with makecontext. This may be used if a coroutine exits, in + order to reuse the stack segments for a new coroutine. */ + +void * +__splitstack_resetcontext (void *context[10], size_t *size) +{ + struct stack_segment *segment; + void *initial_sp; + size_t initial_size; + void *ret; + + /* Reset the context assuming that MORESTACK_SEGMENTS, INITIAL_SP + and INITIAL_SP_LEN are correct. */ + + segment = context[MORESTACK_SEGMENTS]; + context[CURRENT_SEGMENT] = segment; + context[CURRENT_STACK] = NULL; + if (segment == NULL) + { + initial_sp = context[INITIAL_SP]; + initial_size = (uintptr_type) context[INITIAL_SP_LEN]; + ret = initial_sp; +#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__ + ret = (void *) ((char *) ret - initial_size); +#endif + } + else + { +#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__ + initial_sp = (void *) ((char *) (segment + 1) + segment->size); +#else + initial_sp = (void *) (segment + 1); +#endif + initial_size = segment->size; + ret = (void *) (segment + 1); + } + context[STACK_GUARD] = __morestack_make_guard (initial_sp, initial_size); + context[BLOCK_SIGNALS] = NULL; + *size = initial_size; + return ret; +} + +/* Release all the memory associated with a splitstack context. This + may be used if a coroutine exits and the associated stack should be + freed. */ + +void +__splitstack_releasecontext (void *context[10]) +{ + __morestack_release_segments (((struct stack_segment **) + &context[MORESTACK_SEGMENTS]), + 1); +} + +/* Like __splitstack_block_signals, but operating on CONTEXT, rather + than on the current state. */ + +void +__splitstack_block_signals_context (void *context[NUMBER_OFFSETS], int *new, + int *old) +{ + if (old != NULL) + *old = ((uintptr_type) context[BLOCK_SIGNALS]) != 0 ? 0 : 1; + if (new != NULL) + context[BLOCK_SIGNALS] = (void *) (uintptr_type) (*new ? 0 : 1); +} + +/* Find the stack segments associated with a split stack context. + This will return the address of the first stack segment and set + *STACK_SIZE to its size. It will set next_segment, next_sp, and + initial_sp which may be passed to __splitstack_find to find the + remaining segments. */ + +void * +__splitstack_find_context (void *context[NUMBER_OFFSETS], size_t *stack_size, + void **next_segment, void **next_sp, + void **initial_sp) +{ + void *sp; + struct stack_segment *segment; + + *initial_sp = context[INITIAL_SP]; + + sp = context[CURRENT_STACK]; + if (sp == NULL) + { + /* Most likely this context was created but was never used. The + value 2 is a code used by __splitstack_find to mean that we + have reached the end of the list of stacks. */ + *next_segment = (void *) (uintptr_type) 2; + *next_sp = NULL; + *initial_sp = NULL; + return NULL; + } + + segment = context[CURRENT_SEGMENT]; + if (segment == NULL) + { + /* Most likely this context was saved by a thread which was not + created using __splistack_makecontext and which has never + split the stack. The value 1 is a code used by + __splitstack_find to look at the initial stack. */ + segment = (struct stack_segment *) (uintptr_type) 1; + } + + return __splitstack_find (segment, sp, stack_size, next_segment, next_sp, + initial_sp); +} + +#endif /* !defined (inhibit_libc) */ diff --git a/contrib/toolchain/gcc/5x/libgcc/generic-morestack.h b/contrib/toolchain/gcc/5x/libgcc/generic-morestack.h new file mode 100644 index 0000000000..fbcb719052 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/generic-morestack.h @@ -0,0 +1,53 @@ +/* Library support for -fsplit-stack. */ +/* Copyright (C) 2009-2015 Free Software Foundation, Inc. + Contributed by Ian Lance Taylor . + +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 is a libgcc internal header file for functions shared between + generic-morestack.c and generic-morestack-thread.c. The latter + file is only used when linking with the pthread library. */ + +/* The stack segment structure, defined in generic-morestack.c. */ + +struct stack_segment; + +/* The list of stack segments for this thread. */ + +extern __thread struct stack_segment *__morestack_segments; + +/* Print the string MSG/LEN, the errno number ERR, and a newline on + stderr, without using printf. Then crash. */ + +extern void __morestack_fail (const char *msg, size_t len, int err) + __attribute__ ((noreturn, visibility ("hidden"))); + +/* Release stack segments. */ + +extern struct dynamic_allocation_blocks * + __morestack_release_segments (struct stack_segment **, int) + __attribute__ ((visibility ("hidden"))); + +/* Store the stack information in a processor dependent manner. */ + +extern void __stack_split_initialize (void) + __attribute__ ((visibility ("hidden"))); diff --git a/contrib/toolchain/gcc/5x/libgcc/gstdint.h b/contrib/toolchain/gcc/5x/libgcc/gstdint.h new file mode 100644 index 0000000000..4d61c31844 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/gstdint.h @@ -0,0 +1,6 @@ +/* This header is only for use of libdecnumber built as part of + libgcc. The targets supported for decimal floating point have + ; libdecnumber uses GCC_HEADER_STDINT only for the sake + of the host. */ + +#include diff --git a/contrib/toolchain/gcc/5x/libgcc/gthr-posix.h b/contrib/toolchain/gcc/5x/libgcc/gthr-posix.h new file mode 100644 index 0000000000..fb5981667c --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/gthr-posix.h @@ -0,0 +1,889 @@ +/* Threads compatibility routines for libgcc2 and libobjc. */ +/* Compile this one with gcc. */ +/* Copyright (C) 1997-2015 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 GCC_GTHR_POSIX_H +#define GCC_GTHR_POSIX_H + +/* POSIX threads specific definitions. + Easy, since the interface is just one-to-one mapping. */ + +#define __GTHREADS 1 +#define __GTHREADS_CXX0X 1 + +#include + +#if ((defined(_LIBOBJC) || defined(_LIBOBJC_WEAK)) \ + || !defined(_GTHREAD_USE_MUTEX_TIMEDLOCK)) +# include +# if defined(_POSIX_TIMEOUTS) && _POSIX_TIMEOUTS >= 0 +# define _GTHREAD_USE_MUTEX_TIMEDLOCK 1 +# else +# define _GTHREAD_USE_MUTEX_TIMEDLOCK 0 +# endif +#endif + +typedef pthread_t __gthread_t; +typedef pthread_key_t __gthread_key_t; +typedef pthread_once_t __gthread_once_t; +typedef pthread_mutex_t __gthread_mutex_t; +typedef pthread_mutex_t __gthread_recursive_mutex_t; +typedef pthread_cond_t __gthread_cond_t; +typedef struct timespec __gthread_time_t; + +/* POSIX like conditional variables are supported. Please look at comments + in gthr.h for details. */ +#define __GTHREAD_HAS_COND 1 + +#define __GTHREAD_MUTEX_INIT PTHREAD_MUTEX_INITIALIZER +#define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function +#define __GTHREAD_ONCE_INIT PTHREAD_ONCE_INIT +#if defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER) +#define __GTHREAD_RECURSIVE_MUTEX_INIT PTHREAD_RECURSIVE_MUTEX_INITIALIZER +#elif defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP) +#define __GTHREAD_RECURSIVE_MUTEX_INIT PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP +#else +#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function +#endif +#define __GTHREAD_COND_INIT PTHREAD_COND_INITIALIZER +#define __GTHREAD_TIME_INIT {0,0} + +#ifdef _GTHREAD_USE_MUTEX_INIT_FUNC +# undef __GTHREAD_MUTEX_INIT +#endif +#ifdef _GTHREAD_USE_RECURSIVE_MUTEX_INIT_FUNC +# undef __GTHREAD_RECURSIVE_MUTEX_INIT +# undef __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION +# define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function +#endif +#ifdef _GTHREAD_USE_COND_INIT_FUNC +# undef __GTHREAD_COND_INIT +# define __GTHREAD_COND_INIT_FUNCTION __gthread_cond_init_function +#endif + +#if SUPPORTS_WEAK && GTHREAD_USE_WEAK +# ifndef __gthrw_pragma +# define __gthrw_pragma(pragma) +# endif +# define __gthrw2(name,name2,type) \ + static __typeof(type) name __attribute__ ((__weakref__(#name2))); \ + __gthrw_pragma(weak type) +# define __gthrw_(name) __gthrw_ ## name +#else +# define __gthrw2(name,name2,type) +# define __gthrw_(name) name +#endif + +/* Typically, __gthrw_foo is a weak reference to symbol foo. */ +#define __gthrw(name) __gthrw2(__gthrw_ ## name,name,name) + +__gthrw(pthread_once) +__gthrw(pthread_getspecific) +__gthrw(pthread_setspecific) + +__gthrw(pthread_create) +__gthrw(pthread_join) +__gthrw(pthread_equal) +__gthrw(pthread_self) +__gthrw(pthread_detach) +#ifndef __BIONIC__ +__gthrw(pthread_cancel) +#endif +__gthrw(sched_yield) + +__gthrw(pthread_mutex_lock) +__gthrw(pthread_mutex_trylock) +#if _GTHREAD_USE_MUTEX_TIMEDLOCK +__gthrw(pthread_mutex_timedlock) +#endif +__gthrw(pthread_mutex_unlock) +__gthrw(pthread_mutex_init) +__gthrw(pthread_mutex_destroy) + +__gthrw(pthread_cond_init) +__gthrw(pthread_cond_broadcast) +__gthrw(pthread_cond_signal) +__gthrw(pthread_cond_wait) +__gthrw(pthread_cond_timedwait) +__gthrw(pthread_cond_destroy) + +__gthrw(pthread_key_create) +__gthrw(pthread_key_delete) +__gthrw(pthread_mutexattr_init) +__gthrw(pthread_mutexattr_settype) +__gthrw(pthread_mutexattr_destroy) + + +#if defined(_LIBOBJC) || defined(_LIBOBJC_WEAK) +/* Objective-C. */ +__gthrw(pthread_exit) +#ifdef _POSIX_PRIORITY_SCHEDULING +#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING +__gthrw(sched_get_priority_max) +__gthrw(sched_get_priority_min) +#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ +#endif /* _POSIX_PRIORITY_SCHEDULING */ +__gthrw(pthread_attr_destroy) +__gthrw(pthread_attr_init) +__gthrw(pthread_attr_setdetachstate) +#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING +__gthrw(pthread_getschedparam) +__gthrw(pthread_setschedparam) +#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ +#endif /* _LIBOBJC || _LIBOBJC_WEAK */ + +#if SUPPORTS_WEAK && GTHREAD_USE_WEAK + +/* On Solaris 2.6 up to 9, the libc exposes a POSIX threads interface even if + -pthreads is not specified. The functions are dummies and most return an + error value. However pthread_once returns 0 without invoking the routine + it is passed so we cannot pretend that the interface is active if -pthreads + is not specified. On Solaris 2.5.1, the interface is not exposed at all so + we need to play the usual game with weak symbols. On Solaris 10 and up, a + working interface is always exposed. On FreeBSD 6 and later, libc also + exposes a dummy POSIX threads interface, similar to what Solaris 2.6 up + to 9 does. FreeBSD >= 700014 even provides a pthread_cancel stub in libc, + which means the alternate __gthread_active_p below cannot be used there. */ + +#if defined(__FreeBSD__) || (defined(__sun) && defined(__svr4__)) + +static volatile int __gthread_active = -1; + +static void +__gthread_trigger (void) +{ + __gthread_active = 1; +} + +static inline int +__gthread_active_p (void) +{ + static pthread_mutex_t __gthread_active_mutex = PTHREAD_MUTEX_INITIALIZER; + static pthread_once_t __gthread_active_once = PTHREAD_ONCE_INIT; + + /* Avoid reading __gthread_active twice on the main code path. */ + int __gthread_active_latest_value = __gthread_active; + + /* This test is not protected to avoid taking a lock on the main code + path so every update of __gthread_active in a threaded program must + be atomic with regard to the result of the test. */ + if (__builtin_expect (__gthread_active_latest_value < 0, 0)) + { + if (__gthrw_(pthread_once)) + { + /* If this really is a threaded program, then we must ensure that + __gthread_active has been set to 1 before exiting this block. */ + __gthrw_(pthread_mutex_lock) (&__gthread_active_mutex); + __gthrw_(pthread_once) (&__gthread_active_once, __gthread_trigger); + __gthrw_(pthread_mutex_unlock) (&__gthread_active_mutex); + } + + /* Make sure we'll never enter this block again. */ + if (__gthread_active < 0) + __gthread_active = 0; + + __gthread_active_latest_value = __gthread_active; + } + + return __gthread_active_latest_value != 0; +} + +#else /* neither FreeBSD nor Solaris */ + +/* For a program to be multi-threaded the only thing that it certainly must + be using is pthread_create. However, there may be other libraries that + intercept pthread_create with their own definitions to wrap pthreads + functionality for some purpose. In those cases, pthread_create being + defined might not necessarily mean that libpthread is actually linked + in. + + For the GNU C library, we can use a known internal name. This is always + available in the ABI, but no other library would define it. That is + ideal, since any public pthread function might be intercepted just as + pthread_create might be. __pthread_key_create is an "internal" + implementation symbol, but it is part of the public exported ABI. Also, + it's among the symbols that the static libpthread.a always links in + whenever pthread_create is used, so there is no danger of a false + negative result in any statically-linked, multi-threaded program. + + For others, we choose pthread_cancel as a function that seems unlikely + to be redefined by an interceptor library. The bionic (Android) C + library does not provide pthread_cancel, so we do use pthread_create + there (and interceptor libraries lose). */ + +#ifdef __GLIBC__ +__gthrw2(__gthrw_(__pthread_key_create), + __pthread_key_create, + pthread_key_create) +# define GTHR_ACTIVE_PROXY __gthrw_(__pthread_key_create) +#elif defined (__BIONIC__) +# define GTHR_ACTIVE_PROXY __gthrw_(pthread_create) +#else +# define GTHR_ACTIVE_PROXY __gthrw_(pthread_cancel) +#endif + +static inline int +__gthread_active_p (void) +{ + static void *const __gthread_active_ptr + = __extension__ (void *) >HR_ACTIVE_PROXY; + return __gthread_active_ptr != 0; +} + +#endif /* FreeBSD or Solaris */ + +#else /* not SUPPORTS_WEAK */ + +/* Similar to Solaris, HP-UX 11 for PA-RISC provides stubs for pthread + calls in shared flavors of the HP-UX C library. Most of the stubs + have no functionality. The details are described in the "libc cumulative + patch" for each subversion of HP-UX 11. There are two special interfaces + provided for checking whether an application is linked to a shared pthread + library or not. However, these interfaces aren't available in early + libpthread libraries. We also need a test that works for archive + libraries. We can't use pthread_once as some libc versions call the + init function. We also can't use pthread_create or pthread_attr_init + as these create a thread and thereby prevent changing the default stack + size. The function pthread_default_stacksize_np is available in both + the archive and shared versions of libpthread. It can be used to + determine the default pthread stack size. There is a stub in some + shared libc versions which returns a zero size if pthreads are not + active. We provide an equivalent stub to handle cases where libc + doesn't provide one. */ + +#if defined(__hppa__) && defined(__hpux__) + +static volatile int __gthread_active = -1; + +static inline int +__gthread_active_p (void) +{ + /* Avoid reading __gthread_active twice on the main code path. */ + int __gthread_active_latest_value = __gthread_active; + size_t __s; + + if (__builtin_expect (__gthread_active_latest_value < 0, 0)) + { + pthread_default_stacksize_np (0, &__s); + __gthread_active = __s ? 1 : 0; + __gthread_active_latest_value = __gthread_active; + } + + return __gthread_active_latest_value != 0; +} + +#else /* not hppa-hpux */ + +static inline int +__gthread_active_p (void) +{ + return 1; +} + +#endif /* hppa-hpux */ + +#endif /* SUPPORTS_WEAK */ + +#ifdef _LIBOBJC + +/* This is the config.h file in libobjc/ */ +#include + +#ifdef HAVE_SCHED_H +# include +#endif + +/* Key structure for maintaining thread specific storage */ +static pthread_key_t _objc_thread_storage; +static pthread_attr_t _objc_thread_attribs; + +/* Thread local storage for a single thread */ +static void *thread_local_storage = NULL; + +/* Backend initialization functions */ + +/* Initialize the threads subsystem. */ +static inline int +__gthread_objc_init_thread_system (void) +{ + if (__gthread_active_p ()) + { + /* Initialize the thread storage key. */ + if (__gthrw_(pthread_key_create) (&_objc_thread_storage, NULL) == 0) + { + /* The normal default detach state for threads is + * PTHREAD_CREATE_JOINABLE which causes threads to not die + * when you think they should. */ + if (__gthrw_(pthread_attr_init) (&_objc_thread_attribs) == 0 + && __gthrw_(pthread_attr_setdetachstate) (&_objc_thread_attribs, + PTHREAD_CREATE_DETACHED) == 0) + return 0; + } + } + + return -1; +} + +/* Close the threads subsystem. */ +static inline int +__gthread_objc_close_thread_system (void) +{ + if (__gthread_active_p () + && __gthrw_(pthread_key_delete) (_objc_thread_storage) == 0 + && __gthrw_(pthread_attr_destroy) (&_objc_thread_attribs) == 0) + return 0; + + return -1; +} + +/* Backend thread functions */ + +/* Create a new thread of execution. */ +static inline objc_thread_t +__gthread_objc_thread_detach (void (*func)(void *), void *arg) +{ + objc_thread_t thread_id; + pthread_t new_thread_handle; + + if (!__gthread_active_p ()) + return NULL; + + if (!(__gthrw_(pthread_create) (&new_thread_handle, &_objc_thread_attribs, + (void *) func, arg))) + thread_id = (objc_thread_t) new_thread_handle; + else + thread_id = NULL; + + return thread_id; +} + +/* Set the current thread's priority. */ +static inline int +__gthread_objc_thread_set_priority (int priority) +{ + if (!__gthread_active_p ()) + return -1; + else + { +#ifdef _POSIX_PRIORITY_SCHEDULING +#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING + pthread_t thread_id = __gthrw_(pthread_self) (); + int policy; + struct sched_param params; + int priority_min, priority_max; + + if (__gthrw_(pthread_getschedparam) (thread_id, &policy, ¶ms) == 0) + { + if ((priority_max = __gthrw_(sched_get_priority_max) (policy)) == -1) + return -1; + + if ((priority_min = __gthrw_(sched_get_priority_min) (policy)) == -1) + return -1; + + if (priority > priority_max) + priority = priority_max; + else if (priority < priority_min) + priority = priority_min; + params.sched_priority = priority; + + /* + * The solaris 7 and several other man pages incorrectly state that + * this should be a pointer to policy but pthread.h is universally + * at odds with this. + */ + if (__gthrw_(pthread_setschedparam) (thread_id, policy, ¶ms) == 0) + return 0; + } +#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ +#endif /* _POSIX_PRIORITY_SCHEDULING */ + return -1; + } +} + +/* Return the current thread's priority. */ +static inline int +__gthread_objc_thread_get_priority (void) +{ +#ifdef _POSIX_PRIORITY_SCHEDULING +#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING + if (__gthread_active_p ()) + { + int policy; + struct sched_param params; + + if (__gthrw_(pthread_getschedparam) (__gthrw_(pthread_self) (), &policy, ¶ms) == 0) + return params.sched_priority; + else + return -1; + } + else +#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ +#endif /* _POSIX_PRIORITY_SCHEDULING */ + return OBJC_THREAD_INTERACTIVE_PRIORITY; +} + +/* Yield our process time to another thread. */ +static inline void +__gthread_objc_thread_yield (void) +{ + if (__gthread_active_p ()) + __gthrw_(sched_yield) (); +} + +/* Terminate the current thread. */ +static inline int +__gthread_objc_thread_exit (void) +{ + if (__gthread_active_p ()) + /* exit the thread */ + __gthrw_(pthread_exit) (&__objc_thread_exit_status); + + /* Failed if we reached here */ + return -1; +} + +/* Returns an integer value which uniquely describes a thread. */ +static inline objc_thread_t +__gthread_objc_thread_id (void) +{ + if (__gthread_active_p ()) + return (objc_thread_t) __gthrw_(pthread_self) (); + else + return (objc_thread_t) 1; +} + +/* Sets the thread's local storage pointer. */ +static inline int +__gthread_objc_thread_set_data (void *value) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_setspecific) (_objc_thread_storage, value); + else + { + thread_local_storage = value; + return 0; + } +} + +/* Returns the thread's local storage pointer. */ +static inline void * +__gthread_objc_thread_get_data (void) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_getspecific) (_objc_thread_storage); + else + return thread_local_storage; +} + +/* Backend mutex functions */ + +/* Allocate a mutex. */ +static inline int +__gthread_objc_mutex_allocate (objc_mutex_t mutex) +{ + if (__gthread_active_p ()) + { + mutex->backend = objc_malloc (sizeof (pthread_mutex_t)); + + if (__gthrw_(pthread_mutex_init) ((pthread_mutex_t *) mutex->backend, NULL)) + { + objc_free (mutex->backend); + mutex->backend = NULL; + return -1; + } + } + + return 0; +} + +/* Deallocate a mutex. */ +static inline int +__gthread_objc_mutex_deallocate (objc_mutex_t mutex) +{ + if (__gthread_active_p ()) + { + int count; + + /* + * Posix Threads specifically require that the thread be unlocked + * for __gthrw_(pthread_mutex_destroy) to work. + */ + + do + { + count = __gthrw_(pthread_mutex_unlock) ((pthread_mutex_t *) mutex->backend); + if (count < 0) + return -1; + } + while (count); + + if (__gthrw_(pthread_mutex_destroy) ((pthread_mutex_t *) mutex->backend)) + return -1; + + objc_free (mutex->backend); + mutex->backend = NULL; + } + return 0; +} + +/* Grab a lock on a mutex. */ +static inline int +__gthread_objc_mutex_lock (objc_mutex_t mutex) +{ + if (__gthread_active_p () + && __gthrw_(pthread_mutex_lock) ((pthread_mutex_t *) mutex->backend) != 0) + { + return -1; + } + + return 0; +} + +/* Try to grab a lock on a mutex. */ +static inline int +__gthread_objc_mutex_trylock (objc_mutex_t mutex) +{ + if (__gthread_active_p () + && __gthrw_(pthread_mutex_trylock) ((pthread_mutex_t *) mutex->backend) != 0) + { + return -1; + } + + return 0; +} + +/* Unlock the mutex */ +static inline int +__gthread_objc_mutex_unlock (objc_mutex_t mutex) +{ + if (__gthread_active_p () + && __gthrw_(pthread_mutex_unlock) ((pthread_mutex_t *) mutex->backend) != 0) + { + return -1; + } + + return 0; +} + +/* Backend condition mutex functions */ + +/* Allocate a condition. */ +static inline int +__gthread_objc_condition_allocate (objc_condition_t condition) +{ + if (__gthread_active_p ()) + { + condition->backend = objc_malloc (sizeof (pthread_cond_t)); + + if (__gthrw_(pthread_cond_init) ((pthread_cond_t *) condition->backend, NULL)) + { + objc_free (condition->backend); + condition->backend = NULL; + return -1; + } + } + + return 0; +} + +/* Deallocate a condition. */ +static inline int +__gthread_objc_condition_deallocate (objc_condition_t condition) +{ + if (__gthread_active_p ()) + { + if (__gthrw_(pthread_cond_destroy) ((pthread_cond_t *) condition->backend)) + return -1; + + objc_free (condition->backend); + condition->backend = NULL; + } + return 0; +} + +/* Wait on the condition */ +static inline int +__gthread_objc_condition_wait (objc_condition_t condition, objc_mutex_t mutex) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_cond_wait) ((pthread_cond_t *) condition->backend, + (pthread_mutex_t *) mutex->backend); + else + return 0; +} + +/* Wake up all threads waiting on this condition. */ +static inline int +__gthread_objc_condition_broadcast (objc_condition_t condition) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_cond_broadcast) ((pthread_cond_t *) condition->backend); + else + return 0; +} + +/* Wake up one thread waiting on this condition. */ +static inline int +__gthread_objc_condition_signal (objc_condition_t condition) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_cond_signal) ((pthread_cond_t *) condition->backend); + else + return 0; +} + +#else /* _LIBOBJC */ + +static inline int +__gthread_create (__gthread_t *__threadid, void *(*__func) (void*), + void *__args) +{ + return __gthrw_(pthread_create) (__threadid, NULL, __func, __args); +} + +static inline int +__gthread_join (__gthread_t __threadid, void **__value_ptr) +{ + return __gthrw_(pthread_join) (__threadid, __value_ptr); +} + +static inline int +__gthread_detach (__gthread_t __threadid) +{ + return __gthrw_(pthread_detach) (__threadid); +} + +static inline int +__gthread_equal (__gthread_t __t1, __gthread_t __t2) +{ + return __gthrw_(pthread_equal) (__t1, __t2); +} + +static inline __gthread_t +__gthread_self (void) +{ + return __gthrw_(pthread_self) (); +} + +static inline int +__gthread_yield (void) +{ + return __gthrw_(sched_yield) (); +} + +static inline int +__gthread_once (__gthread_once_t *__once, void (*__func) (void)) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_once) (__once, __func); + else + return -1; +} + +static inline int +__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *)) +{ + return __gthrw_(pthread_key_create) (__key, __dtor); +} + +static inline int +__gthread_key_delete (__gthread_key_t __key) +{ + return __gthrw_(pthread_key_delete) (__key); +} + +static inline void * +__gthread_getspecific (__gthread_key_t __key) +{ + return __gthrw_(pthread_getspecific) (__key); +} + +static inline int +__gthread_setspecific (__gthread_key_t __key, const void *__ptr) +{ + return __gthrw_(pthread_setspecific) (__key, __ptr); +} + +static inline void +__gthread_mutex_init_function (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + __gthrw_(pthread_mutex_init) (__mutex, NULL); +} + +static inline int +__gthread_mutex_destroy (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_mutex_destroy) (__mutex); + else + return 0; +} + +static inline int +__gthread_mutex_lock (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_mutex_lock) (__mutex); + else + return 0; +} + +static inline int +__gthread_mutex_trylock (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_mutex_trylock) (__mutex); + else + return 0; +} + +#if _GTHREAD_USE_MUTEX_TIMEDLOCK +static inline int +__gthread_mutex_timedlock (__gthread_mutex_t *__mutex, + const __gthread_time_t *__abs_timeout) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_mutex_timedlock) (__mutex, __abs_timeout); + else + return 0; +} +#endif + +static inline int +__gthread_mutex_unlock (__gthread_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + return __gthrw_(pthread_mutex_unlock) (__mutex); + else + return 0; +} + +#if !defined( PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP) \ + || defined(_GTHREAD_USE_RECURSIVE_MUTEX_INIT_FUNC) +static inline int +__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex) +{ + if (__gthread_active_p ()) + { + pthread_mutexattr_t __attr; + int __r; + + __r = __gthrw_(pthread_mutexattr_init) (&__attr); + if (!__r) + __r = __gthrw_(pthread_mutexattr_settype) (&__attr, + PTHREAD_MUTEX_RECURSIVE); + if (!__r) + __r = __gthrw_(pthread_mutex_init) (__mutex, &__attr); + if (!__r) + __r = __gthrw_(pthread_mutexattr_destroy) (&__attr); + return __r; + } + return 0; +} +#endif + +static inline int +__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_lock (__mutex); +} + +static inline int +__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_trylock (__mutex); +} + +#if _GTHREAD_USE_MUTEX_TIMEDLOCK +static inline int +__gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex, + const __gthread_time_t *__abs_timeout) +{ + return __gthread_mutex_timedlock (__mutex, __abs_timeout); +} +#endif + +static inline int +__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_unlock (__mutex); +} + +static inline int +__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_destroy (__mutex); +} + +#ifdef _GTHREAD_USE_COND_INIT_FUNC +static inline void +__gthread_cond_init_function (__gthread_cond_t *__cond) +{ + if (__gthread_active_p ()) + __gthrw_(pthread_cond_init) (__cond, NULL); +} +#endif + +static inline int +__gthread_cond_broadcast (__gthread_cond_t *__cond) +{ + return __gthrw_(pthread_cond_broadcast) (__cond); +} + +static inline int +__gthread_cond_signal (__gthread_cond_t *__cond) +{ + return __gthrw_(pthread_cond_signal) (__cond); +} + +static inline int +__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex) +{ + return __gthrw_(pthread_cond_wait) (__cond, __mutex); +} + +static inline int +__gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex, + const __gthread_time_t *__abs_timeout) +{ + return __gthrw_(pthread_cond_timedwait) (__cond, __mutex, __abs_timeout); +} + +static inline int +__gthread_cond_wait_recursive (__gthread_cond_t *__cond, + __gthread_recursive_mutex_t *__mutex) +{ + return __gthread_cond_wait (__cond, __mutex); +} + +static inline int +__gthread_cond_destroy (__gthread_cond_t* __cond) +{ + return __gthrw_(pthread_cond_destroy) (__cond); +} + +#endif /* _LIBOBJC */ + +#endif /* ! GCC_GTHR_POSIX_H */ diff --git a/contrib/toolchain/gcc/5x/libgcc/gthr-single.h b/contrib/toolchain/gcc/5x/libgcc/gthr-single.h new file mode 100644 index 0000000000..bddded4f24 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/gthr-single.h @@ -0,0 +1,298 @@ +/* Threads compatibility routines for libgcc2 and libobjc. */ +/* Compile this one with gcc. */ +/* Copyright (C) 1997-2015 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 GCC_GTHR_SINGLE_H +#define GCC_GTHR_SINGLE_H + +/* Just provide compatibility for mutex handling. */ + +typedef int __gthread_key_t; +typedef int __gthread_once_t; +typedef int __gthread_mutex_t; +typedef int __gthread_recursive_mutex_t; + +#define __GTHREAD_ONCE_INIT 0 +#define __GTHREAD_MUTEX_INIT 0 +#define __GTHREAD_MUTEX_INIT_FUNCTION(mx) +#define __GTHREAD_RECURSIVE_MUTEX_INIT 0 + +#define UNUSED __attribute__((__unused__)) + +#ifdef _LIBOBJC + +/* Thread local storage for a single thread */ +static void *thread_local_storage = NULL; + +/* Backend initialization functions */ + +/* Initialize the threads subsystem. */ +static inline int +__gthread_objc_init_thread_system (void) +{ + /* No thread support available */ + return -1; +} + +/* Close the threads subsystem. */ +static inline int +__gthread_objc_close_thread_system (void) +{ + /* No thread support available */ + return -1; +} + +/* Backend thread functions */ + +/* Create a new thread of execution. */ +static inline objc_thread_t +__gthread_objc_thread_detach (void (* func)(void *), void * arg UNUSED) +{ + /* No thread support available */ + return NULL; +} + +/* Set the current thread's priority. */ +static inline int +__gthread_objc_thread_set_priority (int priority UNUSED) +{ + /* No thread support available */ + return -1; +} + +/* Return the current thread's priority. */ +static inline int +__gthread_objc_thread_get_priority (void) +{ + return OBJC_THREAD_INTERACTIVE_PRIORITY; +} + +/* Yield our process time to another thread. */ +static inline void +__gthread_objc_thread_yield (void) +{ + return; +} + +/* Terminate the current thread. */ +static inline int +__gthread_objc_thread_exit (void) +{ + /* No thread support available */ + /* Should we really exit the program */ + /* exit (&__objc_thread_exit_status); */ + return -1; +} + +/* Returns an integer value which uniquely describes a thread. */ +static inline objc_thread_t +__gthread_objc_thread_id (void) +{ + /* No thread support, use 1. */ + return (objc_thread_t) 1; +} + +/* Sets the thread's local storage pointer. */ +static inline int +__gthread_objc_thread_set_data (void *value) +{ + thread_local_storage = value; + return 0; +} + +/* Returns the thread's local storage pointer. */ +static inline void * +__gthread_objc_thread_get_data (void) +{ + return thread_local_storage; +} + +/* Backend mutex functions */ + +/* Allocate a mutex. */ +static inline int +__gthread_objc_mutex_allocate (objc_mutex_t mutex UNUSED) +{ + return 0; +} + +/* Deallocate a mutex. */ +static inline int +__gthread_objc_mutex_deallocate (objc_mutex_t mutex UNUSED) +{ + return 0; +} + +/* Grab a lock on a mutex. */ +static inline int +__gthread_objc_mutex_lock (objc_mutex_t mutex UNUSED) +{ + /* There can only be one thread, so we always get the lock */ + return 0; +} + +/* Try to grab a lock on a mutex. */ +static inline int +__gthread_objc_mutex_trylock (objc_mutex_t mutex UNUSED) +{ + /* There can only be one thread, so we always get the lock */ + return 0; +} + +/* Unlock the mutex */ +static inline int +__gthread_objc_mutex_unlock (objc_mutex_t mutex UNUSED) +{ + return 0; +} + +/* Backend condition mutex functions */ + +/* Allocate a condition. */ +static inline int +__gthread_objc_condition_allocate (objc_condition_t condition UNUSED) +{ + return 0; +} + +/* Deallocate a condition. */ +static inline int +__gthread_objc_condition_deallocate (objc_condition_t condition UNUSED) +{ + return 0; +} + +/* Wait on the condition */ +static inline int +__gthread_objc_condition_wait (objc_condition_t condition UNUSED, + objc_mutex_t mutex UNUSED) +{ + return 0; +} + +/* Wake up all threads waiting on this condition. */ +static inline int +__gthread_objc_condition_broadcast (objc_condition_t condition UNUSED) +{ + return 0; +} + +/* Wake up one thread waiting on this condition. */ +static inline int +__gthread_objc_condition_signal (objc_condition_t condition UNUSED) +{ + return 0; +} + +#else /* _LIBOBJC */ + +static inline int +__gthread_active_p (void) +{ + return 0; +} + +static inline int +__gthread_once (__gthread_once_t *__once UNUSED, void (*__func) (void) UNUSED) +{ + return 0; +} + +static inline int UNUSED +__gthread_key_create (__gthread_key_t *__key UNUSED, void (*__func) (void *) UNUSED) +{ + return 0; +} + +static int UNUSED +__gthread_key_delete (__gthread_key_t __key UNUSED) +{ + return 0; +} + +static inline void * +__gthread_getspecific (__gthread_key_t __key UNUSED) +{ + return 0; +} + +static inline int +__gthread_setspecific (__gthread_key_t __key UNUSED, const void *__v UNUSED) +{ + return 0; +} + +static inline int +__gthread_mutex_destroy (__gthread_mutex_t *__mutex UNUSED) +{ + return 0; +} + +static inline int +__gthread_mutex_lock (__gthread_mutex_t *__mutex UNUSED) +{ + return 0; +} + +static inline int +__gthread_mutex_trylock (__gthread_mutex_t *__mutex UNUSED) +{ + return 0; +} + +static inline int +__gthread_mutex_unlock (__gthread_mutex_t *__mutex UNUSED) +{ + return 0; +} + +static inline int +__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_lock (__mutex); +} + +static inline int +__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_trylock (__mutex); +} + +static inline int +__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_unlock (__mutex); +} + +static inline int +__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex) +{ + return __gthread_mutex_destroy (__mutex); +} + +#endif /* _LIBOBJC */ + +#undef UNUSED + +#endif /* ! GCC_GTHR_SINGLE_H */ diff --git a/contrib/toolchain/gcc/5x/libgcc/gthr.h b/contrib/toolchain/gcc/5x/libgcc/gthr.h new file mode 100644 index 0000000000..ba2c757b0c --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/gthr.h @@ -0,0 +1,154 @@ +/* Threads compatibility routines for libgcc2. */ +/* Compile this one with gcc. */ +/* Copyright (C) 1997-2015 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 GCC_GTHR_H +#define GCC_GTHR_H + +#ifndef HIDE_EXPORTS +#pragma GCC visibility push(default) +#endif + +/* If this file is compiled with threads support, it must + #define __GTHREADS 1 + to indicate that threads support is present. Also it has define + function + int __gthread_active_p () + that returns 1 if thread system is active, 0 if not. + + The threads interface must define the following types: + __gthread_key_t + __gthread_once_t + __gthread_mutex_t + __gthread_recursive_mutex_t + + The threads interface must define the following macros: + + __GTHREAD_ONCE_INIT + to initialize __gthread_once_t + __GTHREAD_MUTEX_INIT + to initialize __gthread_mutex_t to get a fast + non-recursive mutex. + __GTHREAD_MUTEX_INIT_FUNCTION + to initialize __gthread_mutex_t to get a fast + non-recursive mutex. + Define this to a function which looks like this: + void __GTHREAD_MUTEX_INIT_FUNCTION (__gthread_mutex_t *) + Some systems can't initialize a mutex without a + function call. Don't define __GTHREAD_MUTEX_INIT in this case. + __GTHREAD_RECURSIVE_MUTEX_INIT + __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION + as above, but for a recursive mutex. + + The threads interface must define the following static functions: + + int __gthread_once (__gthread_once_t *once, void (*func) ()) + + int __gthread_key_create (__gthread_key_t *keyp, void (*dtor) (void *)) + int __gthread_key_delete (__gthread_key_t key) + + void *__gthread_getspecific (__gthread_key_t key) + int __gthread_setspecific (__gthread_key_t key, const void *ptr) + + int __gthread_mutex_destroy (__gthread_mutex_t *mutex); + int __gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *mutex); + + int __gthread_mutex_lock (__gthread_mutex_t *mutex); + int __gthread_mutex_trylock (__gthread_mutex_t *mutex); + int __gthread_mutex_unlock (__gthread_mutex_t *mutex); + + int __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *mutex); + int __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *mutex); + int __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex); + + The following are supported in POSIX threads only. They are required to + fix a deadlock in static initialization inside libsupc++. The header file + gthr-posix.h defines a symbol __GTHREAD_HAS_COND to signify that these extra + features are supported. + + Types: + __gthread_cond_t + + Macros: + __GTHREAD_COND_INIT + __GTHREAD_COND_INIT_FUNCTION + + Interface: + int __gthread_cond_broadcast (__gthread_cond_t *cond); + int __gthread_cond_wait (__gthread_cond_t *cond, __gthread_mutex_t *mutex); + int __gthread_cond_wait_recursive (__gthread_cond_t *cond, + __gthread_recursive_mutex_t *mutex); + + All functions returning int should return zero on success or the error + number. If the operation is not supported, -1 is returned. + + If the following are also defined, you should + #define __GTHREADS_CXX0X 1 + to enable the c++0x thread library. + + Types: + __gthread_t + __gthread_time_t + + Interface: + int __gthread_create (__gthread_t *thread, void *(*func) (void*), + void *args); + int __gthread_join (__gthread_t thread, void **value_ptr); + int __gthread_detach (__gthread_t thread); + int __gthread_equal (__gthread_t t1, __gthread_t t2); + __gthread_t __gthread_self (void); + int __gthread_yield (void); + + int __gthread_mutex_timedlock (__gthread_mutex_t *m, + const __gthread_time_t *abs_timeout); + int __gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *m, + const __gthread_time_t *abs_time); + + int __gthread_cond_signal (__gthread_cond_t *cond); + int __gthread_cond_timedwait (__gthread_cond_t *cond, + __gthread_mutex_t *mutex, + const __gthread_time_t *abs_timeout); + +*/ + +#if SUPPORTS_WEAK +/* The pe-coff weak support isn't fully compatible to ELF's weak. + For static libraries it might would work, but as we need to deal + with shared versions too, we disable it for mingw-targets. */ +#ifdef __MINGW32__ +#undef GTHREAD_USE_WEAK +#define GTHREAD_USE_WEAK 0 +#endif + +#ifndef GTHREAD_USE_WEAK +#define GTHREAD_USE_WEAK 1 +#endif +#endif +#include "gthr-default.h" + +#ifndef HIDE_EXPORTS +#pragma GCC visibility pop +#endif + +#endif /* ! GCC_GTHR_H */ diff --git a/contrib/toolchain/gcc/5x/libgcc/libgcc2.c b/contrib/toolchain/gcc/5x/libgcc/libgcc2.c new file mode 100644 index 0000000000..0ef8823428 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/libgcc2.c @@ -0,0 +1,2323 @@ +/* More subroutines needed by GCC output code on some machines. */ +/* Compile this one with gcc. */ +/* Copyright (C) 1989-2015 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 "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" + +#ifdef HAVE_GAS_HIDDEN +#define ATTRIBUTE_HIDDEN __attribute__ ((__visibility__ ("hidden"))) +#else +#define ATTRIBUTE_HIDDEN +#endif + +/* Work out the largest "word" size that we can deal with on this target. */ +#if MIN_UNITS_PER_WORD > 4 +# define LIBGCC2_MAX_UNITS_PER_WORD 8 +#elif (MIN_UNITS_PER_WORD > 2 \ + || (MIN_UNITS_PER_WORD > 1 && __SIZEOF_LONG_LONG__ > 4)) +# define LIBGCC2_MAX_UNITS_PER_WORD 4 +#else +# define LIBGCC2_MAX_UNITS_PER_WORD MIN_UNITS_PER_WORD +#endif + +/* Work out what word size we are using for this compilation. + The value can be set on the command line. */ +#ifndef LIBGCC2_UNITS_PER_WORD +#define LIBGCC2_UNITS_PER_WORD LIBGCC2_MAX_UNITS_PER_WORD +#endif + +#if LIBGCC2_UNITS_PER_WORD <= LIBGCC2_MAX_UNITS_PER_WORD + +#include "libgcc2.h" + +#ifdef DECLARE_LIBRARY_RENAMES + DECLARE_LIBRARY_RENAMES +#endif + +#if defined (L_negdi2) +DWtype +__negdi2 (DWtype u) +{ + const DWunion uu = {.ll = u}; + const DWunion w = { {.low = -uu.s.low, + .high = -uu.s.high - ((UWtype) -uu.s.low > 0) } }; + + return w.ll; +} +#endif + +#ifdef L_addvsi3 +Wtype +__addvSI3 (Wtype a, Wtype b) +{ + const Wtype w = (UWtype) a + (UWtype) b; + + if (b >= 0 ? w < a : w > a) + abort (); + + return w; +} +#ifdef COMPAT_SIMODE_TRAPPING_ARITHMETIC +SItype +__addvsi3 (SItype a, SItype b) +{ + const SItype w = (USItype) a + (USItype) b; + + if (b >= 0 ? w < a : w > a) + abort (); + + return w; +} +#endif /* COMPAT_SIMODE_TRAPPING_ARITHMETIC */ +#endif + +#ifdef L_addvdi3 +DWtype +__addvDI3 (DWtype a, DWtype b) +{ + const DWtype w = (UDWtype) a + (UDWtype) b; + + if (b >= 0 ? w < a : w > a) + abort (); + + return w; +} +#endif + +#ifdef L_subvsi3 +Wtype +__subvSI3 (Wtype a, Wtype b) +{ + const Wtype w = (UWtype) a - (UWtype) b; + + if (b >= 0 ? w > a : w < a) + abort (); + + return w; +} +#ifdef COMPAT_SIMODE_TRAPPING_ARITHMETIC +SItype +__subvsi3 (SItype a, SItype b) +{ + const SItype w = (USItype) a - (USItype) b; + + if (b >= 0 ? w > a : w < a) + abort (); + + return w; +} +#endif /* COMPAT_SIMODE_TRAPPING_ARITHMETIC */ +#endif + +#ifdef L_subvdi3 +DWtype +__subvDI3 (DWtype a, DWtype b) +{ + const DWtype w = (UDWtype) a - (UDWtype) b; + + if (b >= 0 ? w > a : w < a) + abort (); + + return w; +} +#endif + +#ifdef L_mulvsi3 +Wtype +__mulvSI3 (Wtype a, Wtype b) +{ + const DWtype w = (DWtype) a * (DWtype) b; + + if ((Wtype) (w >> W_TYPE_SIZE) != (Wtype) w >> (W_TYPE_SIZE - 1)) + abort (); + + return w; +} +#ifdef COMPAT_SIMODE_TRAPPING_ARITHMETIC +#undef WORD_SIZE +#define WORD_SIZE (sizeof (SItype) * BITS_PER_UNIT) +SItype +__mulvsi3 (SItype a, SItype b) +{ + const DItype w = (DItype) a * (DItype) b; + + if ((SItype) (w >> WORD_SIZE) != (SItype) w >> (WORD_SIZE-1)) + abort (); + + return w; +} +#endif /* COMPAT_SIMODE_TRAPPING_ARITHMETIC */ +#endif + +#ifdef L_negvsi2 +Wtype +__negvSI2 (Wtype a) +{ + const Wtype w = -(UWtype) a; + + if (a >= 0 ? w > 0 : w < 0) + abort (); + + return w; +} +#ifdef COMPAT_SIMODE_TRAPPING_ARITHMETIC +SItype +__negvsi2 (SItype a) +{ + const SItype w = -(USItype) a; + + if (a >= 0 ? w > 0 : w < 0) + abort (); + + return w; +} +#endif /* COMPAT_SIMODE_TRAPPING_ARITHMETIC */ +#endif + +#ifdef L_negvdi2 +DWtype +__negvDI2 (DWtype a) +{ + const DWtype w = -(UDWtype) a; + + if (a >= 0 ? w > 0 : w < 0) + abort (); + + return w; +} +#endif + +#ifdef L_absvsi2 +Wtype +__absvSI2 (Wtype a) +{ + Wtype w = a; + + if (a < 0) +#ifdef L_negvsi2 + w = __negvSI2 (a); +#else + w = -(UWtype) a; + + if (w < 0) + abort (); +#endif + + return w; +} +#ifdef COMPAT_SIMODE_TRAPPING_ARITHMETIC +SItype +__absvsi2 (SItype a) +{ + SItype w = a; + + if (a < 0) +#ifdef L_negvsi2 + w = __negvsi2 (a); +#else + w = -(USItype) a; + + if (w < 0) + abort (); +#endif + + return w; +} +#endif /* COMPAT_SIMODE_TRAPPING_ARITHMETIC */ +#endif + +#ifdef L_absvdi2 +DWtype +__absvDI2 (DWtype a) +{ + DWtype w = a; + + if (a < 0) +#ifdef L_negvdi2 + w = __negvDI2 (a); +#else + w = -(UDWtype) a; + + if (w < 0) + abort (); +#endif + + return w; +} +#endif + +#ifdef L_mulvdi3 +DWtype +__mulvDI3 (DWtype u, DWtype v) +{ + /* The unchecked multiplication needs 3 Wtype x Wtype multiplications, + but the checked multiplication needs only two. */ + const DWunion uu = {.ll = u}; + const DWunion vv = {.ll = v}; + + if (__builtin_expect (uu.s.high == uu.s.low >> (W_TYPE_SIZE - 1), 1)) + { + /* u fits in a single Wtype. */ + if (__builtin_expect (vv.s.high == vv.s.low >> (W_TYPE_SIZE - 1), 1)) + { + /* v fits in a single Wtype as well. */ + /* A single multiplication. No overflow risk. */ + return (DWtype) uu.s.low * (DWtype) vv.s.low; + } + else + { + /* Two multiplications. */ + DWunion w0 = {.ll = (UDWtype) (UWtype) uu.s.low + * (UDWtype) (UWtype) vv.s.low}; + DWunion w1 = {.ll = (UDWtype) (UWtype) uu.s.low + * (UDWtype) (UWtype) vv.s.high}; + + if (vv.s.high < 0) + w1.s.high -= uu.s.low; + if (uu.s.low < 0) + w1.ll -= vv.ll; + w1.ll += (UWtype) w0.s.high; + if (__builtin_expect (w1.s.high == w1.s.low >> (W_TYPE_SIZE - 1), 1)) + { + w0.s.high = w1.s.low; + return w0.ll; + } + } + } + else + { + if (__builtin_expect (vv.s.high == vv.s.low >> (W_TYPE_SIZE - 1), 1)) + { + /* v fits into a single Wtype. */ + /* Two multiplications. */ + DWunion w0 = {.ll = (UDWtype) (UWtype) uu.s.low + * (UDWtype) (UWtype) vv.s.low}; + DWunion w1 = {.ll = (UDWtype) (UWtype) uu.s.high + * (UDWtype) (UWtype) vv.s.low}; + + if (uu.s.high < 0) + w1.s.high -= vv.s.low; + if (vv.s.low < 0) + w1.ll -= uu.ll; + w1.ll += (UWtype) w0.s.high; + if (__builtin_expect (w1.s.high == w1.s.low >> (W_TYPE_SIZE - 1), 1)) + { + w0.s.high = w1.s.low; + return w0.ll; + } + } + else + { + /* A few sign checks and a single multiplication. */ + if (uu.s.high >= 0) + { + if (vv.s.high >= 0) + { + if (uu.s.high == 0 && vv.s.high == 0) + { + const DWtype w = (UDWtype) (UWtype) uu.s.low + * (UDWtype) (UWtype) vv.s.low; + if (__builtin_expect (w >= 0, 1)) + return w; + } + } + else + { + if (uu.s.high == 0 && vv.s.high == (Wtype) -1) + { + DWunion ww = {.ll = (UDWtype) (UWtype) uu.s.low + * (UDWtype) (UWtype) vv.s.low}; + + ww.s.high -= uu.s.low; + if (__builtin_expect (ww.s.high < 0, 1)) + return ww.ll; + } + } + } + else + { + if (vv.s.high >= 0) + { + if (uu.s.high == (Wtype) -1 && vv.s.high == 0) + { + DWunion ww = {.ll = (UDWtype) (UWtype) uu.s.low + * (UDWtype) (UWtype) vv.s.low}; + + ww.s.high -= vv.s.low; + if (__builtin_expect (ww.s.high < 0, 1)) + return ww.ll; + } + } + else + { + if (uu.s.high == (Wtype) -1 && vv.s.high == (Wtype) - 1) + { + DWunion ww = {.ll = (UDWtype) (UWtype) uu.s.low + * (UDWtype) (UWtype) vv.s.low}; + + ww.s.high -= uu.s.low; + ww.s.high -= vv.s.low; + if (__builtin_expect (ww.s.high >= 0, 1)) + return ww.ll; + } + } + } + } + } + + /* Overflow. */ + abort (); +} +#endif + + +/* Unless shift functions are defined with full ANSI prototypes, + parameter b will be promoted to int if shift_count_type is smaller than an int. */ +#ifdef L_lshrdi3 +DWtype +__lshrdi3 (DWtype u, shift_count_type b) +{ + if (b == 0) + return u; + + const DWunion uu = {.ll = u}; + const shift_count_type bm = W_TYPE_SIZE - b; + DWunion w; + + if (bm <= 0) + { + w.s.high = 0; + w.s.low = (UWtype) uu.s.high >> -bm; + } + else + { + const UWtype carries = (UWtype) uu.s.high << bm; + + w.s.high = (UWtype) uu.s.high >> b; + w.s.low = ((UWtype) uu.s.low >> b) | carries; + } + + return w.ll; +} +#endif + +#ifdef L_ashldi3 +DWtype +__ashldi3 (DWtype u, shift_count_type b) +{ + if (b == 0) + return u; + + const DWunion uu = {.ll = u}; + const shift_count_type bm = W_TYPE_SIZE - b; + DWunion w; + + if (bm <= 0) + { + w.s.low = 0; + w.s.high = (UWtype) uu.s.low << -bm; + } + else + { + const UWtype carries = (UWtype) uu.s.low >> bm; + + w.s.low = (UWtype) uu.s.low << b; + w.s.high = ((UWtype) uu.s.high << b) | carries; + } + + return w.ll; +} +#endif + +#ifdef L_ashrdi3 +DWtype +__ashrdi3 (DWtype u, shift_count_type b) +{ + if (b == 0) + return u; + + const DWunion uu = {.ll = u}; + const shift_count_type bm = W_TYPE_SIZE - b; + DWunion w; + + if (bm <= 0) + { + /* w.s.high = 1..1 or 0..0 */ + w.s.high = uu.s.high >> (W_TYPE_SIZE - 1); + w.s.low = uu.s.high >> -bm; + } + else + { + const UWtype carries = (UWtype) uu.s.high << bm; + + w.s.high = uu.s.high >> b; + w.s.low = ((UWtype) uu.s.low >> b) | carries; + } + + return w.ll; +} +#endif + +#ifdef L_bswapsi2 +SItype +__bswapsi2 (SItype u) +{ + return ((((u) & 0xff000000) >> 24) + | (((u) & 0x00ff0000) >> 8) + | (((u) & 0x0000ff00) << 8) + | (((u) & 0x000000ff) << 24)); +} +#endif +#ifdef L_bswapdi2 +DItype +__bswapdi2 (DItype u) +{ + return ((((u) & 0xff00000000000000ull) >> 56) + | (((u) & 0x00ff000000000000ull) >> 40) + | (((u) & 0x0000ff0000000000ull) >> 24) + | (((u) & 0x000000ff00000000ull) >> 8) + | (((u) & 0x00000000ff000000ull) << 8) + | (((u) & 0x0000000000ff0000ull) << 24) + | (((u) & 0x000000000000ff00ull) << 40) + | (((u) & 0x00000000000000ffull) << 56)); +} +#endif +#ifdef L_ffssi2 +#undef int +int +__ffsSI2 (UWtype u) +{ + UWtype count; + + if (u == 0) + return 0; + + count_trailing_zeros (count, u); + return count + 1; +} +#endif + +#ifdef L_ffsdi2 +#undef int +int +__ffsDI2 (DWtype u) +{ + const DWunion uu = {.ll = u}; + UWtype word, count, add; + + if (uu.s.low != 0) + word = uu.s.low, add = 0; + else if (uu.s.high != 0) + word = uu.s.high, add = W_TYPE_SIZE; + else + return 0; + + count_trailing_zeros (count, word); + return count + add + 1; +} +#endif + +#ifdef L_muldi3 +DWtype +__muldi3 (DWtype u, DWtype v) +{ + const DWunion uu = {.ll = u}; + const DWunion vv = {.ll = v}; + DWunion w = {.ll = __umulsidi3 (uu.s.low, vv.s.low)}; + + w.s.high += ((UWtype) uu.s.low * (UWtype) vv.s.high + + (UWtype) uu.s.high * (UWtype) vv.s.low); + + return w.ll; +} +#endif + +#if (defined (L_udivdi3) || defined (L_divdi3) || \ + defined (L_umoddi3) || defined (L_moddi3)) +#if defined (sdiv_qrnnd) +#define L_udiv_w_sdiv +#endif +#endif + +#ifdef L_udiv_w_sdiv +#if defined (sdiv_qrnnd) +#if (defined (L_udivdi3) || defined (L_divdi3) || \ + defined (L_umoddi3) || defined (L_moddi3)) +static inline __attribute__ ((__always_inline__)) +#endif +UWtype +__udiv_w_sdiv (UWtype *rp, UWtype a1, UWtype a0, UWtype d) +{ + UWtype q, r; + UWtype c0, c1, b1; + + if ((Wtype) d >= 0) + { + if (a1 < d - a1 - (a0 >> (W_TYPE_SIZE - 1))) + { + /* Dividend, divisor, and quotient are nonnegative. */ + sdiv_qrnnd (q, r, a1, a0, d); + } + else + { + /* Compute c1*2^32 + c0 = a1*2^32 + a0 - 2^31*d. */ + sub_ddmmss (c1, c0, a1, a0, d >> 1, d << (W_TYPE_SIZE - 1)); + /* Divide (c1*2^32 + c0) by d. */ + sdiv_qrnnd (q, r, c1, c0, d); + /* Add 2^31 to quotient. */ + q += (UWtype) 1 << (W_TYPE_SIZE - 1); + } + } + else + { + b1 = d >> 1; /* d/2, between 2^30 and 2^31 - 1 */ + c1 = a1 >> 1; /* A/2 */ + c0 = (a1 << (W_TYPE_SIZE - 1)) + (a0 >> 1); + + if (a1 < b1) /* A < 2^32*b1, so A/2 < 2^31*b1 */ + { + sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */ + + r = 2*r + (a0 & 1); /* Remainder from A/(2*b1) */ + if ((d & 1) != 0) + { + if (r >= q) + r = r - q; + else if (q - r <= d) + { + r = r - q + d; + q--; + } + else + { + r = r - q + 2*d; + q -= 2; + } + } + } + else if (c1 < b1) /* So 2^31 <= (A/2)/b1 < 2^32 */ + { + c1 = (b1 - 1) - c1; + c0 = ~c0; /* logical NOT */ + + sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */ + + q = ~q; /* (A/2)/b1 */ + r = (b1 - 1) - r; + + r = 2*r + (a0 & 1); /* A/(2*b1) */ + + if ((d & 1) != 0) + { + if (r >= q) + r = r - q; + else if (q - r <= d) + { + r = r - q + d; + q--; + } + else + { + r = r - q + 2*d; + q -= 2; + } + } + } + else /* Implies c1 = b1 */ + { /* Hence a1 = d - 1 = 2*b1 - 1 */ + if (a0 >= -d) + { + q = -1; + r = a0 + d; + } + else + { + q = -2; + r = a0 + 2*d; + } + } + } + + *rp = r; + return q; +} +#else +/* If sdiv_qrnnd doesn't exist, define dummy __udiv_w_sdiv. */ +UWtype +__udiv_w_sdiv (UWtype *rp __attribute__ ((__unused__)), + UWtype a1 __attribute__ ((__unused__)), + UWtype a0 __attribute__ ((__unused__)), + UWtype d __attribute__ ((__unused__))) +{ + return 0; +} +#endif +#endif + +#if (defined (L_udivdi3) || defined (L_divdi3) || \ + defined (L_umoddi3) || defined (L_moddi3)) +#define L_udivmoddi4 +#endif + +#ifdef L_clz +const UQItype __clz_tab[256] = +{ + 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 +}; +#endif + +#ifdef L_clzsi2 +#undef int +int +__clzSI2 (UWtype x) +{ + Wtype ret; + + count_leading_zeros (ret, x); + + return ret; +} +#endif + +#ifdef L_clzdi2 +#undef int +int +__clzDI2 (UDWtype x) +{ + const DWunion uu = {.ll = x}; + UWtype word; + Wtype ret, add; + + if (uu.s.high) + word = uu.s.high, add = 0; + else + word = uu.s.low, add = W_TYPE_SIZE; + + count_leading_zeros (ret, word); + return ret + add; +} +#endif + +#ifdef L_ctzsi2 +#undef int +int +__ctzSI2 (UWtype x) +{ + Wtype ret; + + count_trailing_zeros (ret, x); + + return ret; +} +#endif + +#ifdef L_ctzdi2 +#undef int +int +__ctzDI2 (UDWtype x) +{ + const DWunion uu = {.ll = x}; + UWtype word; + Wtype ret, add; + + if (uu.s.low) + word = uu.s.low, add = 0; + else + word = uu.s.high, add = W_TYPE_SIZE; + + count_trailing_zeros (ret, word); + return ret + add; +} +#endif + +#ifdef L_clrsbsi2 +#undef int +int +__clrsbSI2 (Wtype x) +{ + Wtype ret; + + if (x < 0) + x = ~x; + if (x == 0) + return W_TYPE_SIZE - 1; + count_leading_zeros (ret, x); + return ret - 1; +} +#endif + +#ifdef L_clrsbdi2 +#undef int +int +__clrsbDI2 (DWtype x) +{ + const DWunion uu = {.ll = x}; + UWtype word; + Wtype ret, add; + + if (uu.s.high == 0) + word = uu.s.low, add = W_TYPE_SIZE; + else if (uu.s.high == -1) + word = ~uu.s.low, add = W_TYPE_SIZE; + else if (uu.s.high >= 0) + word = uu.s.high, add = 0; + else + word = ~uu.s.high, add = 0; + + if (word == 0) + ret = W_TYPE_SIZE; + else + count_leading_zeros (ret, word); + + return ret + add - 1; +} +#endif + +#ifdef L_popcount_tab +const UQItype __popcount_tab[256] = +{ + 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, + 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, + 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, + 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, + 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, + 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, + 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, + 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8 +}; +#endif + +#if defined(L_popcountsi2) || defined(L_popcountdi2) +#define POPCOUNTCST2(x) (((UWtype) x << BITS_PER_UNIT) | x) +#define POPCOUNTCST4(x) (((UWtype) x << (2 * BITS_PER_UNIT)) | x) +#define POPCOUNTCST8(x) (((UWtype) x << (4 * BITS_PER_UNIT)) | x) +#if W_TYPE_SIZE == BITS_PER_UNIT +#define POPCOUNTCST(x) x +#elif W_TYPE_SIZE == 2 * BITS_PER_UNIT +#define POPCOUNTCST(x) POPCOUNTCST2 (x) +#elif W_TYPE_SIZE == 4 * BITS_PER_UNIT +#define POPCOUNTCST(x) POPCOUNTCST4 (POPCOUNTCST2 (x)) +#elif W_TYPE_SIZE == 8 * BITS_PER_UNIT +#define POPCOUNTCST(x) POPCOUNTCST8 (POPCOUNTCST4 (POPCOUNTCST2 (x))) +#endif +#endif + +#ifdef L_popcountsi2 +#undef int +int +__popcountSI2 (UWtype x) +{ + /* Force table lookup on targets like AVR and RL78 which only + pretend they have LIBGCC2_UNITS_PER_WORD 4, but actually + have 1, and other small word targets. */ +#if __SIZEOF_INT__ > 2 && defined (POPCOUNTCST) && BITS_PER_UNIT == 8 + x = x - ((x >> 1) & POPCOUNTCST (0x55)); + x = (x & POPCOUNTCST (0x33)) + ((x >> 2) & POPCOUNTCST (0x33)); + x = (x + (x >> 4)) & POPCOUNTCST (0x0F); + return (x * POPCOUNTCST (0x01)) >> (W_TYPE_SIZE - BITS_PER_UNIT); +#else + int i, ret = 0; + + for (i = 0; i < W_TYPE_SIZE; i += 8) + ret += __popcount_tab[(x >> i) & 0xff]; + + return ret; +#endif +} +#endif + +#ifdef L_popcountdi2 +#undef int +int +__popcountDI2 (UDWtype x) +{ + /* Force table lookup on targets like AVR and RL78 which only + pretend they have LIBGCC2_UNITS_PER_WORD 4, but actually + have 1, and other small word targets. */ +#if __SIZEOF_INT__ > 2 && defined (POPCOUNTCST) && BITS_PER_UNIT == 8 + const DWunion uu = {.ll = x}; + UWtype x1 = uu.s.low, x2 = uu.s.high; + x1 = x1 - ((x1 >> 1) & POPCOUNTCST (0x55)); + x2 = x2 - ((x2 >> 1) & POPCOUNTCST (0x55)); + x1 = (x1 & POPCOUNTCST (0x33)) + ((x1 >> 2) & POPCOUNTCST (0x33)); + x2 = (x2 & POPCOUNTCST (0x33)) + ((x2 >> 2) & POPCOUNTCST (0x33)); + x1 = (x1 + (x1 >> 4)) & POPCOUNTCST (0x0F); + x2 = (x2 + (x2 >> 4)) & POPCOUNTCST (0x0F); + x1 += x2; + return (x1 * POPCOUNTCST (0x01)) >> (W_TYPE_SIZE - BITS_PER_UNIT); +#else + int i, ret = 0; + + for (i = 0; i < 2*W_TYPE_SIZE; i += 8) + ret += __popcount_tab[(x >> i) & 0xff]; + + return ret; +#endif +} +#endif + +#ifdef L_paritysi2 +#undef int +int +__paritySI2 (UWtype x) +{ +#if W_TYPE_SIZE > 64 +# error "fill out the table" +#endif +#if W_TYPE_SIZE > 32 + x ^= x >> 32; +#endif +#if W_TYPE_SIZE > 16 + x ^= x >> 16; +#endif + x ^= x >> 8; + x ^= x >> 4; + x &= 0xf; + return (0x6996 >> x) & 1; +} +#endif + +#ifdef L_paritydi2 +#undef int +int +__parityDI2 (UDWtype x) +{ + const DWunion uu = {.ll = x}; + UWtype nx = uu.s.low ^ uu.s.high; + +#if W_TYPE_SIZE > 64 +# error "fill out the table" +#endif +#if W_TYPE_SIZE > 32 + nx ^= nx >> 32; +#endif +#if W_TYPE_SIZE > 16 + nx ^= nx >> 16; +#endif + nx ^= nx >> 8; + nx ^= nx >> 4; + nx &= 0xf; + return (0x6996 >> nx) & 1; +} +#endif + +#ifdef L_udivmoddi4 +#ifdef TARGET_HAS_NO_HW_DIVIDE + +#if (defined (L_udivdi3) || defined (L_divdi3) || \ + defined (L_umoddi3) || defined (L_moddi3)) +static inline __attribute__ ((__always_inline__)) +#endif +UDWtype +__udivmoddi4 (UDWtype n, UDWtype d, UDWtype *rp) +{ + UDWtype q = 0, r = n, y = d; + UWtype lz1, lz2, i, k; + + /* Implements align divisor shift dividend method. This algorithm + aligns the divisor under the dividend and then perform number of + test-subtract iterations which shift the dividend left. Number of + iterations is k + 1 where k is the number of bit positions the + divisor must be shifted left to align it under the dividend. + quotient bits can be saved in the rightmost positions of the dividend + as it shifts left on each test-subtract iteration. */ + + if (y <= r) + { + lz1 = __builtin_clzll (d); + lz2 = __builtin_clzll (n); + + k = lz1 - lz2; + y = (y << k); + + /* Dividend can exceed 2 ^ (width − 1) − 1 but still be less than the + aligned divisor. Normal iteration can drops the high order bit + of the dividend. Therefore, first test-subtract iteration is a + special case, saving its quotient bit in a separate location and + not shifting the dividend. */ + if (r >= y) + { + r = r - y; + q = (1ULL << k); + } + + if (k > 0) + { + y = y >> 1; + + /* k additional iterations where k regular test subtract shift + dividend iterations are done. */ + i = k; + do + { + if (r >= y) + r = ((r - y) << 1) + 1; + else + r = (r << 1); + i = i - 1; + } while (i != 0); + + /* First quotient bit is combined with the quotient bits resulting + from the k regular iterations. */ + q = q + r; + r = r >> k; + q = q - (r << k); + } + } + + if (rp) + *rp = r; + return q; +} +#else + +#if (defined (L_udivdi3) || defined (L_divdi3) || \ + defined (L_umoddi3) || defined (L_moddi3)) +static inline __attribute__ ((__always_inline__)) +#endif +UDWtype +__udivmoddi4 (UDWtype n, UDWtype d, UDWtype *rp) +{ + const DWunion nn = {.ll = n}; + const DWunion dd = {.ll = d}; + DWunion rr; + UWtype d0, d1, n0, n1, n2; + UWtype q0, q1; + UWtype b, bm; + + d0 = dd.s.low; + d1 = dd.s.high; + n0 = nn.s.low; + n1 = nn.s.high; + +#if !UDIV_NEEDS_NORMALIZATION + if (d1 == 0) + { + if (d0 > n1) + { + /* 0q = nn / 0D */ + + udiv_qrnnd (q0, n0, n1, n0, d0); + q1 = 0; + + /* Remainder in n0. */ + } + else + { + /* qq = NN / 0d */ + + if (d0 == 0) + d0 = 1 / d0; /* Divide intentionally by zero. */ + + udiv_qrnnd (q1, n1, 0, n1, d0); + udiv_qrnnd (q0, n0, n1, n0, d0); + + /* Remainder in n0. */ + } + + if (rp != 0) + { + rr.s.low = n0; + rr.s.high = 0; + *rp = rr.ll; + } + } + +#else /* UDIV_NEEDS_NORMALIZATION */ + + if (d1 == 0) + { + if (d0 > n1) + { + /* 0q = nn / 0D */ + + count_leading_zeros (bm, d0); + + if (bm != 0) + { + /* Normalize, i.e. make the most significant bit of the + denominator set. */ + + d0 = d0 << bm; + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); + n0 = n0 << bm; + } + + udiv_qrnnd (q0, n0, n1, n0, d0); + q1 = 0; + + /* Remainder in n0 >> bm. */ + } + else + { + /* qq = NN / 0d */ + + if (d0 == 0) + d0 = 1 / d0; /* Divide intentionally by zero. */ + + count_leading_zeros (bm, d0); + + if (bm == 0) + { + /* From (n1 >= d0) /\ (the most significant bit of d0 is set), + conclude (the most significant bit of n1 is set) /\ (the + leading quotient digit q1 = 1). + + This special case is necessary, not an optimization. + (Shifts counts of W_TYPE_SIZE are undefined.) */ + + n1 -= d0; + q1 = 1; + } + else + { + /* Normalize. */ + + b = W_TYPE_SIZE - bm; + + d0 = d0 << bm; + n2 = n1 >> b; + n1 = (n1 << bm) | (n0 >> b); + n0 = n0 << bm; + + udiv_qrnnd (q1, n1, n2, n1, d0); + } + + /* n1 != d0... */ + + udiv_qrnnd (q0, n0, n1, n0, d0); + + /* Remainder in n0 >> bm. */ + } + + if (rp != 0) + { + rr.s.low = n0 >> bm; + rr.s.high = 0; + *rp = rr.ll; + } + } +#endif /* UDIV_NEEDS_NORMALIZATION */ + + else + { + if (d1 > n1) + { + /* 00 = nn / DD */ + + q0 = 0; + q1 = 0; + + /* Remainder in n1n0. */ + if (rp != 0) + { + rr.s.low = n0; + rr.s.high = n1; + *rp = rr.ll; + } + } + else + { + /* 0q = NN / dd */ + + count_leading_zeros (bm, d1); + if (bm == 0) + { + /* From (n1 >= d1) /\ (the most significant bit of d1 is set), + conclude (the most significant bit of n1 is set) /\ (the + quotient digit q0 = 0 or 1). + + This special case is necessary, not an optimization. */ + + /* The condition on the next line takes advantage of that + n1 >= d1 (true due to program flow). */ + if (n1 > d1 || n0 >= d0) + { + q0 = 1; + sub_ddmmss (n1, n0, n1, n0, d1, d0); + } + else + q0 = 0; + + q1 = 0; + + if (rp != 0) + { + rr.s.low = n0; + rr.s.high = n1; + *rp = rr.ll; + } + } + else + { + UWtype m1, m0; + /* Normalize. */ + + b = W_TYPE_SIZE - bm; + + d1 = (d1 << bm) | (d0 >> b); + d0 = d0 << bm; + n2 = n1 >> b; + n1 = (n1 << bm) | (n0 >> b); + n0 = n0 << bm; + + udiv_qrnnd (q0, n1, n2, n1, d1); + umul_ppmm (m1, m0, q0, d0); + + if (m1 > n1 || (m1 == n1 && m0 > n0)) + { + q0--; + sub_ddmmss (m1, m0, m1, m0, d1, d0); + } + + q1 = 0; + + /* Remainder in (n1n0 - m1m0) >> bm. */ + if (rp != 0) + { + sub_ddmmss (n1, n0, n1, n0, m1, m0); + rr.s.low = (n1 << b) | (n0 >> bm); + rr.s.high = n1 >> bm; + *rp = rr.ll; + } + } + } + } + + const DWunion ww = {{.low = q0, .high = q1}}; + return ww.ll; +} +#endif +#endif + +#ifdef L_divdi3 +DWtype +__divdi3 (DWtype u, DWtype v) +{ + Wtype c = 0; + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) + c = ~c, + uu.ll = -uu.ll; + if (vv.s.high < 0) + c = ~c, + vv.ll = -vv.ll; + + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) + w = -w; + + return w; +} +#endif + +#ifdef L_moddi3 +DWtype +__moddi3 (DWtype u, DWtype v) +{ + Wtype c = 0; + DWunion uu = {.ll = u}; + DWunion vv = {.ll = v}; + DWtype w; + + if (uu.s.high < 0) + c = ~c, + uu.ll = -uu.ll; + if (vv.s.high < 0) + vv.ll = -vv.ll; + + (void) __udivmoddi4 (uu.ll, vv.ll, (UDWtype*)&w); + if (c) + w = -w; + + return w; +} +#endif + +#ifdef L_umoddi3 +UDWtype +__umoddi3 (UDWtype u, UDWtype v) +{ + UDWtype w; + + (void) __udivmoddi4 (u, v, &w); + + return w; +} +#endif + +#ifdef L_udivdi3 +UDWtype +__udivdi3 (UDWtype n, UDWtype d) +{ + return __udivmoddi4 (n, d, (UDWtype *) 0); +} +#endif + +#ifdef L_cmpdi2 +cmp_return_type +__cmpdi2 (DWtype a, DWtype b) +{ + const DWunion au = {.ll = a}; + const DWunion bu = {.ll = b}; + + if (au.s.high < bu.s.high) + return 0; + else if (au.s.high > bu.s.high) + return 2; + if ((UWtype) au.s.low < (UWtype) bu.s.low) + return 0; + else if ((UWtype) au.s.low > (UWtype) bu.s.low) + return 2; + return 1; +} +#endif + +#ifdef L_ucmpdi2 +cmp_return_type +__ucmpdi2 (DWtype a, DWtype b) +{ + const DWunion au = {.ll = a}; + const DWunion bu = {.ll = b}; + + if ((UWtype) au.s.high < (UWtype) bu.s.high) + return 0; + else if ((UWtype) au.s.high > (UWtype) bu.s.high) + return 2; + if ((UWtype) au.s.low < (UWtype) bu.s.low) + return 0; + else if ((UWtype) au.s.low > (UWtype) bu.s.low) + return 2; + return 1; +} +#endif + +#if defined(L_fixunstfdi) && LIBGCC2_HAS_TF_MODE +UDWtype +__fixunstfDI (TFtype a) +{ + if (a < 0) + return 0; + + /* Compute high word of result, as a flonum. */ + const TFtype b = (a / Wtype_MAXp1_F); + /* Convert that to fixed (but not to DWtype!), + and shift it into the high word. */ + UDWtype v = (UWtype) b; + v <<= W_TYPE_SIZE; + /* Remove high part from the TFtype, leaving the low part as flonum. */ + a -= (TFtype)v; + /* Convert that to fixed (but not to DWtype!) and add it in. + Sometimes A comes out negative. This is significant, since + A has more bits than a long int does. */ + if (a < 0) + v -= (UWtype) (- a); + else + v += (UWtype) a; + return v; +} +#endif + +#if defined(L_fixtfdi) && LIBGCC2_HAS_TF_MODE +DWtype +__fixtfdi (TFtype a) +{ + if (a < 0) + return - __fixunstfDI (-a); + return __fixunstfDI (a); +} +#endif + +#if defined(L_fixunsxfdi) && LIBGCC2_HAS_XF_MODE +UDWtype +__fixunsxfDI (XFtype a) +{ + if (a < 0) + return 0; + + /* Compute high word of result, as a flonum. */ + const XFtype b = (a / Wtype_MAXp1_F); + /* Convert that to fixed (but not to DWtype!), + and shift it into the high word. */ + UDWtype v = (UWtype) b; + v <<= W_TYPE_SIZE; + /* Remove high part from the XFtype, leaving the low part as flonum. */ + a -= (XFtype)v; + /* Convert that to fixed (but not to DWtype!) and add it in. + Sometimes A comes out negative. This is significant, since + A has more bits than a long int does. */ + if (a < 0) + v -= (UWtype) (- a); + else + v += (UWtype) a; + return v; +} +#endif + +#if defined(L_fixxfdi) && LIBGCC2_HAS_XF_MODE +DWtype +__fixxfdi (XFtype a) +{ + if (a < 0) + return - __fixunsxfDI (-a); + return __fixunsxfDI (a); +} +#endif + +#if defined(L_fixunsdfdi) && LIBGCC2_HAS_DF_MODE +UDWtype +__fixunsdfDI (DFtype a) +{ + /* Get high part of result. The division here will just moves the radix + point and will not cause any rounding. Then the conversion to integral + type chops result as desired. */ + const UWtype hi = a / Wtype_MAXp1_F; + + /* Get low part of result. Convert `hi' to floating type and scale it back, + then subtract this from the number being converted. This leaves the low + part. Convert that to integral type. */ + const UWtype lo = a - (DFtype) hi * Wtype_MAXp1_F; + + /* Assemble result from the two parts. */ + return ((UDWtype) hi << W_TYPE_SIZE) | lo; +} +#endif + +#if defined(L_fixdfdi) && LIBGCC2_HAS_DF_MODE +DWtype +__fixdfdi (DFtype a) +{ + if (a < 0) + return - __fixunsdfDI (-a); + return __fixunsdfDI (a); +} +#endif + +#if defined(L_fixunssfdi) && LIBGCC2_HAS_SF_MODE +UDWtype +__fixunssfDI (SFtype a) +{ +#if LIBGCC2_HAS_DF_MODE + /* Convert the SFtype to a DFtype, because that is surely not going + to lose any bits. Some day someone else can write a faster version + that avoids converting to DFtype, and verify it really works right. */ + const DFtype dfa = a; + + /* Get high part of result. The division here will just moves the radix + point and will not cause any rounding. Then the conversion to integral + type chops result as desired. */ + const UWtype hi = dfa / Wtype_MAXp1_F; + + /* Get low part of result. Convert `hi' to floating type and scale it back, + then subtract this from the number being converted. This leaves the low + part. Convert that to integral type. */ + const UWtype lo = dfa - (DFtype) hi * Wtype_MAXp1_F; + + /* Assemble result from the two parts. */ + return ((UDWtype) hi << W_TYPE_SIZE) | lo; +#elif FLT_MANT_DIG < W_TYPE_SIZE + if (a < 1) + return 0; + if (a < Wtype_MAXp1_F) + return (UWtype)a; + if (a < Wtype_MAXp1_F * Wtype_MAXp1_F) + { + /* Since we know that there are fewer significant bits in the SFmode + quantity than in a word, we know that we can convert out all the + significant bits in one step, and thus avoid losing bits. */ + + /* ??? This following loop essentially performs frexpf. If we could + use the real libm function, or poke at the actual bits of the fp + format, it would be significantly faster. */ + + UWtype shift = 0, counter; + SFtype msb; + + a /= Wtype_MAXp1_F; + for (counter = W_TYPE_SIZE / 2; counter != 0; counter >>= 1) + { + SFtype counterf = (UWtype)1 << counter; + if (a >= counterf) + { + shift |= counter; + a /= counterf; + } + } + + /* Rescale into the range of one word, extract the bits of that + one word, and shift the result into position. */ + a *= Wtype_MAXp1_F; + counter = a; + return (DWtype)counter << shift; + } + return -1; +#else +# error +#endif +} +#endif + +#if defined(L_fixsfdi) && LIBGCC2_HAS_SF_MODE +DWtype +__fixsfdi (SFtype a) +{ + if (a < 0) + return - __fixunssfDI (-a); + return __fixunssfDI (a); +} +#endif + +#if defined(L_floatdixf) && LIBGCC2_HAS_XF_MODE +XFtype +__floatdixf (DWtype u) +{ +#if W_TYPE_SIZE > __LIBGCC_XF_MANT_DIG__ +# error +#endif + XFtype d = (Wtype) (u >> W_TYPE_SIZE); + d *= Wtype_MAXp1_F; + d += (UWtype)u; + return d; +} +#endif + +#if defined(L_floatundixf) && LIBGCC2_HAS_XF_MODE +XFtype +__floatundixf (UDWtype u) +{ +#if W_TYPE_SIZE > __LIBGCC_XF_MANT_DIG__ +# error +#endif + XFtype d = (UWtype) (u >> W_TYPE_SIZE); + d *= Wtype_MAXp1_F; + d += (UWtype)u; + return d; +} +#endif + +#if defined(L_floatditf) && LIBGCC2_HAS_TF_MODE +TFtype +__floatditf (DWtype u) +{ +#if W_TYPE_SIZE > __LIBGCC_TF_MANT_DIG__ +# error +#endif + TFtype d = (Wtype) (u >> W_TYPE_SIZE); + d *= Wtype_MAXp1_F; + d += (UWtype)u; + return d; +} +#endif + +#if defined(L_floatunditf) && LIBGCC2_HAS_TF_MODE +TFtype +__floatunditf (UDWtype u) +{ +#if W_TYPE_SIZE > __LIBGCC_TF_MANT_DIG__ +# error +#endif + TFtype d = (UWtype) (u >> W_TYPE_SIZE); + d *= Wtype_MAXp1_F; + d += (UWtype)u; + return d; +} +#endif + +#if (defined(L_floatdisf) && LIBGCC2_HAS_SF_MODE) \ + || (defined(L_floatdidf) && LIBGCC2_HAS_DF_MODE) +#define DI_SIZE (W_TYPE_SIZE * 2) +#define F_MODE_OK(SIZE) \ + (SIZE < DI_SIZE \ + && SIZE > (DI_SIZE - SIZE + FSSIZE) \ + && !AVOID_FP_TYPE_CONVERSION(SIZE)) +#if defined(L_floatdisf) +#define FUNC __floatdisf +#define FSTYPE SFtype +#define FSSIZE __LIBGCC_SF_MANT_DIG__ +#else +#define FUNC __floatdidf +#define FSTYPE DFtype +#define FSSIZE __LIBGCC_DF_MANT_DIG__ +#endif + +FSTYPE +FUNC (DWtype u) +{ +#if FSSIZE >= W_TYPE_SIZE + /* When the word size is small, we never get any rounding error. */ + FSTYPE f = (Wtype) (u >> W_TYPE_SIZE); + f *= Wtype_MAXp1_F; + f += (UWtype)u; + return f; +#elif (LIBGCC2_HAS_DF_MODE && F_MODE_OK (__LIBGCC_DF_MANT_DIG__)) \ + || (LIBGCC2_HAS_XF_MODE && F_MODE_OK (__LIBGCC_XF_MANT_DIG__)) \ + || (LIBGCC2_HAS_TF_MODE && F_MODE_OK (__LIBGCC_TF_MANT_DIG__)) + +#if (LIBGCC2_HAS_DF_MODE && F_MODE_OK (__LIBGCC_DF_MANT_DIG__)) +# define FSIZE __LIBGCC_DF_MANT_DIG__ +# define FTYPE DFtype +#elif (LIBGCC2_HAS_XF_MODE && F_MODE_OK (__LIBGCC_XF_MANT_DIG__)) +# define FSIZE __LIBGCC_XF_MANT_DIG__ +# define FTYPE XFtype +#elif (LIBGCC2_HAS_TF_MODE && F_MODE_OK (__LIBGCC_TF_MANT_DIG__)) +# define FSIZE __LIBGCC_TF_MANT_DIG__ +# define FTYPE TFtype +#else +# error +#endif + +#define REP_BIT ((UDWtype) 1 << (DI_SIZE - FSIZE)) + + /* Protect against double-rounding error. + Represent any low-order bits, that might be truncated by a bit that + won't be lost. The bit can go in anywhere below the rounding position + of the FSTYPE. A fixed mask and bit position handles all usual + configurations. */ + if (! (- ((DWtype) 1 << FSIZE) < u + && u < ((DWtype) 1 << FSIZE))) + { + if ((UDWtype) u & (REP_BIT - 1)) + { + u &= ~ (REP_BIT - 1); + u |= REP_BIT; + } + } + + /* Do the calculation in a wider type so that we don't lose any of + the precision of the high word while multiplying it. */ + FTYPE f = (Wtype) (u >> W_TYPE_SIZE); + f *= Wtype_MAXp1_F; + f += (UWtype)u; + return (FSTYPE) f; +#else +#if FSSIZE >= W_TYPE_SIZE - 2 +# error +#endif + /* Finally, the word size is larger than the number of bits in the + required FSTYPE, and we've got no suitable wider type. The only + way to avoid double rounding is to special case the + extraction. */ + + /* If there are no high bits set, fall back to one conversion. */ + if ((Wtype)u == u) + return (FSTYPE)(Wtype)u; + + /* Otherwise, find the power of two. */ + Wtype hi = u >> W_TYPE_SIZE; + if (hi < 0) + hi = -(UWtype) hi; + + UWtype count, shift; + count_leading_zeros (count, hi); + + /* No leading bits means u == minimum. */ + if (count == 0) + return -(Wtype_MAXp1_F * (Wtype_MAXp1_F / 2)); + + shift = 1 + W_TYPE_SIZE - count; + + /* Shift down the most significant bits. */ + hi = u >> shift; + + /* If we lost any nonzero bits, set the lsb to ensure correct rounding. */ + if ((UWtype)u << (W_TYPE_SIZE - shift)) + hi |= 1; + + /* Convert the one word of data, and rescale. */ + FSTYPE f = hi, e; + if (shift == W_TYPE_SIZE) + e = Wtype_MAXp1_F; + /* The following two cases could be merged if we knew that the target + supported a native unsigned->float conversion. More often, we only + have a signed conversion, and have to add extra fixup code. */ + else if (shift == W_TYPE_SIZE - 1) + e = Wtype_MAXp1_F / 2; + else + e = (Wtype)1 << shift; + return f * e; +#endif +} +#endif + +#if (defined(L_floatundisf) && LIBGCC2_HAS_SF_MODE) \ + || (defined(L_floatundidf) && LIBGCC2_HAS_DF_MODE) +#define DI_SIZE (W_TYPE_SIZE * 2) +#define F_MODE_OK(SIZE) \ + (SIZE < DI_SIZE \ + && SIZE > (DI_SIZE - SIZE + FSSIZE) \ + && !AVOID_FP_TYPE_CONVERSION(SIZE)) +#if defined(L_floatundisf) +#define FUNC __floatundisf +#define FSTYPE SFtype +#define FSSIZE __LIBGCC_SF_MANT_DIG__ +#else +#define FUNC __floatundidf +#define FSTYPE DFtype +#define FSSIZE __LIBGCC_DF_MANT_DIG__ +#endif + +FSTYPE +FUNC (UDWtype u) +{ +#if FSSIZE >= W_TYPE_SIZE + /* When the word size is small, we never get any rounding error. */ + FSTYPE f = (UWtype) (u >> W_TYPE_SIZE); + f *= Wtype_MAXp1_F; + f += (UWtype)u; + return f; +#elif (LIBGCC2_HAS_DF_MODE && F_MODE_OK (__LIBGCC_DF_MANT_DIG__)) \ + || (LIBGCC2_HAS_XF_MODE && F_MODE_OK (__LIBGCC_XF_MANT_DIG__)) \ + || (LIBGCC2_HAS_TF_MODE && F_MODE_OK (__LIBGCC_TF_MANT_DIG__)) + +#if (LIBGCC2_HAS_DF_MODE && F_MODE_OK (__LIBGCC_DF_MANT_DIG__)) +# define FSIZE __LIBGCC_DF_MANT_DIG__ +# define FTYPE DFtype +#elif (LIBGCC2_HAS_XF_MODE && F_MODE_OK (__LIBGCC_XF_MANT_DIG__)) +# define FSIZE __LIBGCC_XF_MANT_DIG__ +# define FTYPE XFtype +#elif (LIBGCC2_HAS_TF_MODE && F_MODE_OK (__LIBGCC_TF_MANT_DIG__)) +# define FSIZE __LIBGCC_TF_MANT_DIG__ +# define FTYPE TFtype +#else +# error +#endif + +#define REP_BIT ((UDWtype) 1 << (DI_SIZE - FSIZE)) + + /* Protect against double-rounding error. + Represent any low-order bits, that might be truncated by a bit that + won't be lost. The bit can go in anywhere below the rounding position + of the FSTYPE. A fixed mask and bit position handles all usual + configurations. */ + if (u >= ((UDWtype) 1 << FSIZE)) + { + if ((UDWtype) u & (REP_BIT - 1)) + { + u &= ~ (REP_BIT - 1); + u |= REP_BIT; + } + } + + /* Do the calculation in a wider type so that we don't lose any of + the precision of the high word while multiplying it. */ + FTYPE f = (UWtype) (u >> W_TYPE_SIZE); + f *= Wtype_MAXp1_F; + f += (UWtype)u; + return (FSTYPE) f; +#else +#if FSSIZE == W_TYPE_SIZE - 1 +# error +#endif + /* Finally, the word size is larger than the number of bits in the + required FSTYPE, and we've got no suitable wider type. The only + way to avoid double rounding is to special case the + extraction. */ + + /* If there are no high bits set, fall back to one conversion. */ + if ((UWtype)u == u) + return (FSTYPE)(UWtype)u; + + /* Otherwise, find the power of two. */ + UWtype hi = u >> W_TYPE_SIZE; + + UWtype count, shift; + count_leading_zeros (count, hi); + + shift = W_TYPE_SIZE - count; + + /* Shift down the most significant bits. */ + hi = u >> shift; + + /* If we lost any nonzero bits, set the lsb to ensure correct rounding. */ + if ((UWtype)u << (W_TYPE_SIZE - shift)) + hi |= 1; + + /* Convert the one word of data, and rescale. */ + FSTYPE f = hi, e; + if (shift == W_TYPE_SIZE) + e = Wtype_MAXp1_F; + /* The following two cases could be merged if we knew that the target + supported a native unsigned->float conversion. More often, we only + have a signed conversion, and have to add extra fixup code. */ + else if (shift == W_TYPE_SIZE - 1) + e = Wtype_MAXp1_F / 2; + else + e = (Wtype)1 << shift; + return f * e; +#endif +} +#endif + +#if defined(L_fixunsxfsi) && LIBGCC2_HAS_XF_MODE +UWtype +__fixunsxfSI (XFtype a) +{ + if (a >= - (DFtype) Wtype_MIN) + return (Wtype) (a + Wtype_MIN) - Wtype_MIN; + return (Wtype) a; +} +#endif + +#if defined(L_fixunsdfsi) && LIBGCC2_HAS_DF_MODE +UWtype +__fixunsdfSI (DFtype a) +{ + if (a >= - (DFtype) Wtype_MIN) + return (Wtype) (a + Wtype_MIN) - Wtype_MIN; + return (Wtype) a; +} +#endif + +#if defined(L_fixunssfsi) && LIBGCC2_HAS_SF_MODE +UWtype +__fixunssfSI (SFtype a) +{ + if (a >= - (SFtype) Wtype_MIN) + return (Wtype) (a + Wtype_MIN) - Wtype_MIN; + return (Wtype) a; +} +#endif + +/* Integer power helper used from __builtin_powi for non-constant + exponents. */ + +#if (defined(L_powisf2) && LIBGCC2_HAS_SF_MODE) \ + || (defined(L_powidf2) && LIBGCC2_HAS_DF_MODE) \ + || (defined(L_powixf2) && LIBGCC2_HAS_XF_MODE) \ + || (defined(L_powitf2) && LIBGCC2_HAS_TF_MODE) +# if defined(L_powisf2) +# define TYPE SFtype +# define NAME __powisf2 +# elif defined(L_powidf2) +# define TYPE DFtype +# define NAME __powidf2 +# elif defined(L_powixf2) +# define TYPE XFtype +# define NAME __powixf2 +# elif defined(L_powitf2) +# define TYPE TFtype +# define NAME __powitf2 +# endif + +#undef int +#undef unsigned +TYPE +NAME (TYPE x, int m) +{ + unsigned int n = m < 0 ? -m : m; + TYPE y = n % 2 ? x : 1; + while (n >>= 1) + { + x = x * x; + if (n % 2) + y = y * x; + } + return m < 0 ? 1/y : y; +} + +#endif + +#if ((defined(L_mulsc3) || defined(L_divsc3)) && LIBGCC2_HAS_SF_MODE) \ + || ((defined(L_muldc3) || defined(L_divdc3)) && LIBGCC2_HAS_DF_MODE) \ + || ((defined(L_mulxc3) || defined(L_divxc3)) && LIBGCC2_HAS_XF_MODE) \ + || ((defined(L_multc3) || defined(L_divtc3)) && LIBGCC2_HAS_TF_MODE) + +#undef float +#undef double +#undef long + +#if defined(L_mulsc3) || defined(L_divsc3) +# define MTYPE SFtype +# define CTYPE SCtype +# define MODE sc +# define CEXT __LIBGCC_SF_FUNC_EXT__ +# define NOTRUNC __LIBGCC_SF_EXCESS_PRECISION__ +#elif defined(L_muldc3) || defined(L_divdc3) +# define MTYPE DFtype +# define CTYPE DCtype +# define MODE dc +# define CEXT __LIBGCC_DF_FUNC_EXT__ +# define NOTRUNC __LIBGCC_DF_EXCESS_PRECISION__ +#elif defined(L_mulxc3) || defined(L_divxc3) +# define MTYPE XFtype +# define CTYPE XCtype +# define MODE xc +# define CEXT __LIBGCC_XF_FUNC_EXT__ +# define NOTRUNC __LIBGCC_XF_EXCESS_PRECISION__ +#elif defined(L_multc3) || defined(L_divtc3) +# define MTYPE TFtype +# define CTYPE TCtype +# define MODE tc +# define CEXT __LIBGCC_TF_FUNC_EXT__ +# define NOTRUNC __LIBGCC_TF_EXCESS_PRECISION__ +#else +# error +#endif + +#define CONCAT3(A,B,C) _CONCAT3(A,B,C) +#define _CONCAT3(A,B,C) A##B##C + +#define CONCAT2(A,B) _CONCAT2(A,B) +#define _CONCAT2(A,B) A##B + +/* All of these would be present in a full C99 implementation of + and . Our problem is that only a few systems have such full + implementations. Further, libgcc_s.so isn't currently linked against + libm.so, and even for systems that do provide full C99, the extra overhead + of all programs using libgcc having to link against libm. So avoid it. */ + +#define isnan(x) __builtin_expect ((x) != (x), 0) +#define isfinite(x) __builtin_expect (!isnan((x) - (x)), 1) +#define isinf(x) __builtin_expect (!isnan(x) & !isfinite(x), 0) + +#define INFINITY CONCAT2(__builtin_huge_val, CEXT) () +#define I 1i + +/* Helpers to make the following code slightly less gross. */ +#define COPYSIGN CONCAT2(__builtin_copysign, CEXT) +#define FABS CONCAT2(__builtin_fabs, CEXT) + +/* Verify that MTYPE matches up with CEXT. */ +extern void *compile_type_assert[sizeof(INFINITY) == sizeof(MTYPE) ? 1 : -1]; + +/* Ensure that we've lost any extra precision. */ +#if NOTRUNC +# define TRUNC(x) +#else +# define TRUNC(x) __asm__ ("" : "=m"(x) : "m"(x)) +#endif + +#if defined(L_mulsc3) || defined(L_muldc3) \ + || defined(L_mulxc3) || defined(L_multc3) + +CTYPE +CONCAT3(__mul,MODE,3) (MTYPE a, MTYPE b, MTYPE c, MTYPE d) +{ + MTYPE ac, bd, ad, bc, x, y; + CTYPE res; + + ac = a * c; + bd = b * d; + ad = a * d; + bc = b * c; + + TRUNC (ac); + TRUNC (bd); + TRUNC (ad); + TRUNC (bc); + + x = ac - bd; + y = ad + bc; + + if (isnan (x) && isnan (y)) + { + /* Recover infinities that computed as NaN + iNaN. */ + _Bool recalc = 0; + if (isinf (a) || isinf (b)) + { + /* z is infinite. "Box" the infinity and change NaNs in + the other factor to 0. */ + a = COPYSIGN (isinf (a) ? 1 : 0, a); + b = COPYSIGN (isinf (b) ? 1 : 0, b); + if (isnan (c)) c = COPYSIGN (0, c); + if (isnan (d)) d = COPYSIGN (0, d); + recalc = 1; + } + if (isinf (c) || isinf (d)) + { + /* w is infinite. "Box" the infinity and change NaNs in + the other factor to 0. */ + c = COPYSIGN (isinf (c) ? 1 : 0, c); + d = COPYSIGN (isinf (d) ? 1 : 0, d); + if (isnan (a)) a = COPYSIGN (0, a); + if (isnan (b)) b = COPYSIGN (0, b); + recalc = 1; + } + if (!recalc + && (isinf (ac) || isinf (bd) + || isinf (ad) || isinf (bc))) + { + /* Recover infinities from overflow by changing NaNs to 0. */ + if (isnan (a)) a = COPYSIGN (0, a); + if (isnan (b)) b = COPYSIGN (0, b); + if (isnan (c)) c = COPYSIGN (0, c); + if (isnan (d)) d = COPYSIGN (0, d); + recalc = 1; + } + if (recalc) + { + x = INFINITY * (a * c - b * d); + y = INFINITY * (a * d + b * c); + } + } + + __real__ res = x; + __imag__ res = y; + return res; +} +#endif /* complex multiply */ + +#if defined(L_divsc3) || defined(L_divdc3) \ + || defined(L_divxc3) || defined(L_divtc3) + +CTYPE +CONCAT3(__div,MODE,3) (MTYPE a, MTYPE b, MTYPE c, MTYPE d) +{ + MTYPE denom, ratio, x, y; + CTYPE res; + + /* ??? We can get better behavior from logarithmic scaling instead of + the division. But that would mean starting to link libgcc against + libm. We could implement something akin to ldexp/frexp as gcc builtins + fairly easily... */ + if (FABS (c) < FABS (d)) + { + ratio = c / d; + denom = (c * ratio) + d; + x = ((a * ratio) + b) / denom; + y = ((b * ratio) - a) / denom; + } + else + { + ratio = d / c; + denom = (d * ratio) + c; + x = ((b * ratio) + a) / denom; + y = (b - (a * ratio)) / denom; + } + + /* Recover infinities and zeros that computed as NaN+iNaN; the only cases + are nonzero/zero, infinite/finite, and finite/infinite. */ + if (isnan (x) && isnan (y)) + { + if (c == 0.0 && d == 0.0 && (!isnan (a) || !isnan (b))) + { + x = COPYSIGN (INFINITY, c) * a; + y = COPYSIGN (INFINITY, c) * b; + } + else if ((isinf (a) || isinf (b)) && isfinite (c) && isfinite (d)) + { + a = COPYSIGN (isinf (a) ? 1 : 0, a); + b = COPYSIGN (isinf (b) ? 1 : 0, b); + x = INFINITY * (a * c + b * d); + y = INFINITY * (b * c - a * d); + } + else if ((isinf (c) || isinf (d)) && isfinite (a) && isfinite (b)) + { + c = COPYSIGN (isinf (c) ? 1 : 0, c); + d = COPYSIGN (isinf (d) ? 1 : 0, d); + x = 0.0 * (a * c + b * d); + y = 0.0 * (b * c - a * d); + } + } + + __real__ res = x; + __imag__ res = y; + return res; +} +#endif /* complex divide */ + +#endif /* all complex float routines */ + +/* From here on down, the routines use normal data types. */ + +#define SItype bogus_type +#define USItype bogus_type +#define DItype bogus_type +#define UDItype bogus_type +#define SFtype bogus_type +#define DFtype bogus_type +#undef Wtype +#undef UWtype +#undef HWtype +#undef UHWtype +#undef DWtype +#undef UDWtype + +#undef char +#undef short +#undef int +#undef long +#undef unsigned +#undef float +#undef double + +#ifdef L__gcc_bcmp + +/* Like bcmp except the sign is meaningful. + Result is negative if S1 is less than S2, + positive if S1 is greater, 0 if S1 and S2 are equal. */ + +int +__gcc_bcmp (const unsigned char *s1, const unsigned char *s2, size_t size) +{ + while (size > 0) + { + const unsigned char c1 = *s1++, c2 = *s2++; + if (c1 != c2) + return c1 - c2; + size--; + } + return 0; +} + +#endif + +/* __eprintf used to be used by GCC's private version of . + We no longer provide that header, but this routine remains in libgcc.a + for binary backward compatibility. Note that it is not included in + the shared version of libgcc. */ +#ifdef L_eprintf +#ifndef inhibit_libc + +#undef NULL /* Avoid errors if stdio.h and our stddef.h mismatch. */ +#include + +void +__eprintf (const char *string, const char *expression, + unsigned int line, const char *filename) +{ + fprintf (stderr, string, expression, line, filename); + fflush (stderr); + abort (); +} + +#endif +#endif + + +#ifdef L_clear_cache +/* Clear part of an instruction cache. */ + +void +__clear_cache (char *beg __attribute__((__unused__)), + char *end __attribute__((__unused__))) +{ +#ifdef CLEAR_INSN_CACHE + CLEAR_INSN_CACHE (beg, end); +#endif /* CLEAR_INSN_CACHE */ +} + +#endif /* L_clear_cache */ + +#ifdef L_trampoline + +/* Jump to a trampoline, loading the static chain address. */ + +#if defined(WINNT) && ! defined(__CYGWIN__) +#include +int getpagesize (void); +int mprotect (char *,int, int); + +int +getpagesize (void) +{ +#ifdef _ALPHA_ + return 8192; +#else + return 4096; +#endif +} + +int +mprotect (char *addr, int len, int prot) +{ + DWORD np, op; + + if (prot == 7) + np = 0x40; + else if (prot == 5) + np = 0x20; + else if (prot == 4) + np = 0x10; + else if (prot == 3) + np = 0x04; + else if (prot == 1) + np = 0x02; + else if (prot == 0) + np = 0x01; + else + return -1; + + if (VirtualProtect (addr, len, np, &op)) + return 0; + else + return -1; +} + +#endif /* WINNT && ! __CYGWIN__ */ + +#ifdef TRANSFER_FROM_TRAMPOLINE +TRANSFER_FROM_TRAMPOLINE +#endif +#endif /* L_trampoline */ + +#ifndef __CYGWIN__ +#ifdef L__main + +#include "gbl-ctors.h" + +/* Some systems use __main in a way incompatible with its use in gcc, in these + cases use the macros NAME__MAIN to give a quoted symbol and SYMBOL__MAIN to + give the same symbol without quotes for an alternative entry point. You + must define both, or neither. */ +#ifndef NAME__MAIN +#define NAME__MAIN "__main" +#define SYMBOL__MAIN __main +#endif + +#if defined (__LIBGCC_INIT_SECTION_ASM_OP__) \ + || defined (__LIBGCC_INIT_ARRAY_SECTION_ASM_OP__) +#undef HAS_INIT_SECTION +#define HAS_INIT_SECTION +#endif + +#if !defined (HAS_INIT_SECTION) || !defined (OBJECT_FORMAT_ELF) + +/* Some ELF crosses use crtstuff.c to provide __CTOR_LIST__, but use this + code to run constructors. In that case, we need to handle EH here, too. + But MINGW32 is special because it handles CRTSTUFF and EH on its own. */ + +#ifdef __MINGW32__ +#undef __LIBGCC_EH_FRAME_SECTION_NAME__ +#endif + +#ifdef __LIBGCC_EH_FRAME_SECTION_NAME__ +#include "unwind-dw2-fde.h" +extern unsigned char __EH_FRAME_BEGIN__[]; +#endif + +/* Run all the global destructors on exit from the program. */ + +void +__do_global_dtors (void) +{ +#ifdef DO_GLOBAL_DTORS_BODY + DO_GLOBAL_DTORS_BODY; +#else + static func_ptr *p = __DTOR_LIST__ + 1; + while (*p) + { + p++; + (*(p-1)) (); + } +#endif +#if defined (__LIBGCC_EH_FRAME_SECTION_NAME__) && !defined (HAS_INIT_SECTION) + { + static int completed = 0; + if (! completed) + { + completed = 1; + __deregister_frame_info (__EH_FRAME_BEGIN__); + } + } +#endif +} +#endif + +#ifndef HAS_INIT_SECTION +/* Run all the global constructors on entry to the program. */ + +void +__do_global_ctors (void) +{ +#ifdef __LIBGCC_EH_FRAME_SECTION_NAME__ + { + static struct object object; + __register_frame_info (__EH_FRAME_BEGIN__, &object); + } +#endif + DO_GLOBAL_CTORS_BODY; + atexit (__do_global_dtors); +} +#endif /* no HAS_INIT_SECTION */ + +#if !defined (HAS_INIT_SECTION) || defined (INVOKE__main) +/* Subroutine called automatically by `main'. + Compiling a global function named `main' + produces an automatic call to this function at the beginning. + + For many systems, this routine calls __do_global_ctors. + For systems which support a .init section we use the .init section + to run __do_global_ctors, so we need not do anything here. */ + +extern void SYMBOL__MAIN (void); +void +SYMBOL__MAIN (void) +{ + /* Support recursive calls to `main': run initializers just once. */ + static int initialized; + if (! initialized) + { + initialized = 1; + __do_global_ctors (); + } +} +#endif /* no HAS_INIT_SECTION or INVOKE__main */ + +#endif /* L__main */ +#endif /* __CYGWIN__ */ + +#ifdef L_ctors + +#include "gbl-ctors.h" + +/* Provide default definitions for the lists of constructors and + destructors, so that we don't get linker errors. These symbols are + intentionally bss symbols, so that gld and/or collect will provide + the right values. */ + +/* We declare the lists here with two elements each, + so that they are valid empty lists if no other definition is loaded. + + If we are using the old "set" extensions to have the gnu linker + collect ctors and dtors, then we __CTOR_LIST__ and __DTOR_LIST__ + must be in the bss/common section. + + Long term no port should use those extensions. But many still do. */ +#if !defined(__LIBGCC_INIT_SECTION_ASM_OP__) \ + && !defined(CTOR_LISTS_DEFINED_EXTERNALLY) +#if defined (TARGET_ASM_CONSTRUCTOR) || defined (USE_COLLECT2) +func_ptr __CTOR_LIST__[2] = {0, 0}; +func_ptr __DTOR_LIST__[2] = {0, 0}; +#else +func_ptr __CTOR_LIST__[2]; +func_ptr __DTOR_LIST__[2]; +#endif +#endif /* no __LIBGCC_INIT_SECTION_ASM_OP__ and not CTOR_LISTS_DEFINED_EXTERNALLY */ +#endif /* L_ctors */ +#endif /* LIBGCC2_UNITS_PER_WORD <= MIN_UNITS_PER_WORD */ diff --git a/contrib/toolchain/gcc/5x/libgcc/libgcc2.h b/contrib/toolchain/gcc/5x/libgcc/libgcc2.h new file mode 100644 index 0000000000..98bb274258 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/libgcc2.h @@ -0,0 +1,522 @@ +/* Header file for libgcc2.c. */ +/* Copyright (C) 2000-2015 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 GCC_LIBGCC2_H +#define GCC_LIBGCC2_H + +#ifndef HIDE_EXPORTS +#pragma GCC visibility push(default) +#endif + +extern int __gcc_bcmp (const unsigned char *, const unsigned char *, size_t); +extern void __clear_cache (char *, char *); +extern void __eprintf (const char *, const char *, unsigned int, const char *) + __attribute__ ((__noreturn__)); + +#ifdef __LIBGCC_HAS_SF_MODE__ +#define LIBGCC2_HAS_SF_MODE 1 +#else +#define LIBGCC2_HAS_SF_MODE 0 +#endif + +#ifdef __LIBGCC_HAS_DF_MODE__ +#define LIBGCC2_HAS_DF_MODE 1 +#else +#define LIBGCC2_HAS_DF_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 __LIBGCC_SF_MANT_DIG__ +#if LIBGCC2_HAS_SF_MODE +#error __LIBGCC_SF_MANT_DIG__ not defined +#else +#define __LIBGCC_SF_MANT_DIG__ 0 +#endif +#endif + +#ifndef __LIBGCC_DF_MANT_DIG__ +#if LIBGCC2_HAS_DF_MODE +#error __LIBGCC_DF_MANT_DIG__ not defined +#else +#define __LIBGCC_DF_MANT_DIG__ 0 +#endif +#endif + +#ifndef __LIBGCC_XF_MANT_DIG__ +#if LIBGCC2_HAS_XF_MODE +#error __LIBGCC_XF_MANT_DIG__ not defined +#else +#define __LIBGCC_XF_MANT_DIG__ 0 +#endif +#endif + +#ifndef __LIBGCC_TF_MANT_DIG__ +#if LIBGCC2_HAS_TF_MODE +#error __LIBGCC_TF_MANT_DIG__ not defined +#else +#define __LIBGCC_TF_MANT_DIG__ 0 +#endif +#endif + +/* FIXME: This #ifdef probably should be removed, ie. enable the test + for mips too. */ +/* Don't use IBM Extended Double TFmode for TI->SF calculations. + The conversion from long double to float suffers from double + rounding, because we convert via double. In other cases, going + through the software fp routines is much slower than the fallback. */ +#ifdef __powerpc__ +#define AVOID_FP_TYPE_CONVERSION(SIZE) (SIZE == 106) +#elif defined(WIDEST_HARDWARE_FP_SIZE) +#define AVOID_FP_TYPE_CONVERSION(SIZE) (SIZE > WIDEST_HARDWARE_FP_SIZE) +#else +#define AVOID_FP_TYPE_CONVERSION(SIZE) 0 +#endif + +/* In the first part of this file, we are interfacing to calls generated + by the compiler itself. These calls pass values into these routines + which have very specific modes (rather than very specific types), and + these compiler-generated calls also expect any return values to have + very specific modes (rather than very specific types). Thus, we need + to avoid using regular C language type names in this part of the file + because the sizes for those types can be configured to be anything. + Instead we use the following special type names. */ + +typedef int QItype __attribute__ ((mode (QI))); +typedef unsigned int UQItype __attribute__ ((mode (QI))); +typedef int HItype __attribute__ ((mode (HI))); +typedef unsigned int UHItype __attribute__ ((mode (HI))); +#if MIN_UNITS_PER_WORD > 1 +/* These typedefs are usually forbidden on dsp's with UNITS_PER_WORD 1. */ +typedef int SItype __attribute__ ((mode (SI))); +typedef unsigned int USItype __attribute__ ((mode (SI))); +#if __SIZEOF_LONG_LONG__ > 4 +/* These typedefs are usually forbidden on archs with UNITS_PER_WORD 2. */ +typedef int DItype __attribute__ ((mode (DI))); +typedef unsigned int UDItype __attribute__ ((mode (DI))); +#if MIN_UNITS_PER_WORD > 4 +/* These typedefs are usually forbidden on archs with UNITS_PER_WORD 4. */ +typedef int TItype __attribute__ ((mode (TI))); +typedef unsigned int UTItype __attribute__ ((mode (TI))); +#endif +#endif +#endif + +#if LIBGCC2_HAS_SF_MODE +typedef float SFtype __attribute__ ((mode (SF))); +typedef _Complex float SCtype __attribute__ ((mode (SC))); +#endif +#if LIBGCC2_HAS_DF_MODE +typedef float DFtype __attribute__ ((mode (DF))); +typedef _Complex float DCtype __attribute__ ((mode (DC))); +#endif +#if LIBGCC2_HAS_XF_MODE +typedef float XFtype __attribute__ ((mode (XF))); +typedef _Complex float XCtype __attribute__ ((mode (XC))); +#endif +#if LIBGCC2_HAS_TF_MODE +typedef float TFtype __attribute__ ((mode (TF))); +typedef _Complex float TCtype __attribute__ ((mode (TC))); +#endif + +typedef int cmp_return_type __attribute__((mode (__libgcc_cmp_return__))); +typedef int shift_count_type __attribute__((mode (__libgcc_shift_count__))); + +/* Make sure that we don't accidentally use any normal C language built-in + type names in the first part of this file. Instead we want to use *only* + the type names defined above. The following macro definitions insure + that if we *do* accidentally use some normal C language built-in type name, + we will get a syntax error. */ + +#define char bogus_type +#define short bogus_type +#define int bogus_type +#define long bogus_type +#define unsigned bogus_type +#define float bogus_type +#define double bogus_type + +/* Versions prior to 3.4.4 were not taking into account the word size for + the 5 trapping arithmetic functions absv, addv, subv, mulv and negv. As + a consequence, the si and di variants were always and the only ones emitted. + To maintain backward compatibility, COMPAT_SIMODE_TRAPPING_ARITHMETIC is + defined on platforms where it makes sense to still have the si variants + emitted. As a bonus, their implementation is now correct. Note that the + same mechanism should have been implemented for the di variants, but it + turns out that no platform would define COMPAT_DIMODE_TRAPPING_ARITHMETIC + if it existed. */ + +#if LIBGCC2_UNITS_PER_WORD == 8 +#define W_TYPE_SIZE (8 * BITS_PER_UNIT) +#define Wtype DItype +#define UWtype UDItype +#define HWtype DItype +#define UHWtype UDItype +#define DWtype TItype +#define UDWtype UTItype +#ifdef LIBGCC2_GNU_PREFIX +#define __NW(a,b) __gnu_ ## a ## di ## b +#define __NDW(a,b) __gnu_ ## a ## ti ## b +#else +#define __NW(a,b) __ ## a ## di ## b +#define __NDW(a,b) __ ## a ## ti ## b +#endif +#define COMPAT_SIMODE_TRAPPING_ARITHMETIC +#elif LIBGCC2_UNITS_PER_WORD == 4 +#define W_TYPE_SIZE (4 * BITS_PER_UNIT) +#define Wtype SItype +#define UWtype USItype +#define HWtype SItype +#define UHWtype USItype +#define DWtype DItype +#define UDWtype UDItype +#ifdef LIBGCC2_GNU_PREFIX +#define __NW(a,b) __gnu_ ## a ## si ## b +#define __NDW(a,b) __gnu_ ## a ## di ## b +#else +#define __NW(a,b) __ ## a ## si ## b +#define __NDW(a,b) __ ## a ## di ## b +#endif +#elif LIBGCC2_UNITS_PER_WORD == 2 +#define W_TYPE_SIZE (2 * BITS_PER_UNIT) +#define Wtype HItype +#define UWtype UHItype +#define HWtype HItype +#define UHWtype UHItype +#define DWtype SItype +#define UDWtype USItype +#ifdef LIBGCC2_GNU_PREFIX +#define __NW(a,b) __gnu_ ## a ## hi ## b +#define __NDW(a,b) __gnu_ ## a ## si ## b +#else +#define __NW(a,b) __ ## a ## hi ## b +#define __NDW(a,b) __ ## a ## si ## b +#endif +#else +#define W_TYPE_SIZE BITS_PER_UNIT +#define Wtype QItype +#define UWtype UQItype +#define HWtype QItype +#define UHWtype UQItype +#define DWtype HItype +#define UDWtype UHItype +#ifdef LIBGCC2_GNU_PREFIX +#define __NW(a,b) __gnu_ ## a ## qi ## b +#define __NDW(a,b) __gnu_ ## a ## hi ## b +#else +#define __NW(a,b) __ ## a ## qi ## b +#define __NDW(a,b) __ ## a ## hi ## b +#endif +#endif + +#ifdef LIBGCC2_GNU_PREFIX +#define __N(a) __gnu_ ## a +#else +#define __N(a) __ ## a +#endif +#define Wtype_MAX ((Wtype)(((UWtype)1 << (W_TYPE_SIZE - 1)) - 1)) +#define Wtype_MIN (- Wtype_MAX - 1) + +#if W_TYPE_SIZE == 8 +# define Wtype_MAXp1_F 0x1p8f +#elif W_TYPE_SIZE == 16 +# define Wtype_MAXp1_F 0x1p16f +#elif W_TYPE_SIZE == 32 +# define Wtype_MAXp1_F 0x1p32f +#elif W_TYPE_SIZE == 64 +# define Wtype_MAXp1_F 0x1p64f +#else +# error "expand the table" +#endif + +#define __muldi3 __NDW(mul,3) +#define __divdi3 __NDW(div,3) +#define __udivdi3 __NDW(udiv,3) +#define __moddi3 __NDW(mod,3) +#define __umoddi3 __NDW(umod,3) +#define __negdi2 __NDW(neg,2) +#define __lshrdi3 __NDW(lshr,3) +#define __ashldi3 __NDW(ashl,3) +#define __ashrdi3 __NDW(ashr,3) +#define __cmpdi2 __NDW(cmp,2) +#define __ucmpdi2 __NDW(ucmp,2) +#define __udivmoddi4 __NDW(udivmod,4) +#define __fixunstfDI __NDW(fixunstf,) +#define __fixtfdi __NDW(fixtf,) +#define __fixunsxfDI __NDW(fixunsxf,) +#define __fixxfdi __NDW(fixxf,) +#define __fixunsdfDI __NDW(fixunsdf,) +#define __fixdfdi __NDW(fixdf,) +#define __fixunssfDI __NDW(fixunssf,) +#define __fixsfdi __NDW(fixsf,) +#define __floatdixf __NDW(float,xf) +#define __floatditf __NDW(float,tf) +#define __floatdidf __NDW(float,df) +#define __floatdisf __NDW(float,sf) +#define __floatundixf __NDW(floatun,xf) +#define __floatunditf __NDW(floatun,tf) +#define __floatundidf __NDW(floatun,df) +#define __floatundisf __NDW(floatun,sf) +#define __fixunsxfSI __NW(fixunsxf,) +#define __fixunstfSI __NW(fixunstf,) +#define __fixunsdfSI __NW(fixunsdf,) +#define __fixunssfSI __NW(fixunssf,) + +#define __absvSI2 __NW(absv,2) +#define __addvSI3 __NW(addv,3) +#define __subvSI3 __NW(subv,3) +#define __mulvSI3 __NW(mulv,3) +#define __negvSI2 __NW(negv,2) +#define __absvDI2 __NDW(absv,2) +#define __addvDI3 __NDW(addv,3) +#define __subvDI3 __NDW(subv,3) +#define __mulvDI3 __NDW(mulv,3) +#define __negvDI2 __NDW(negv,2) + +#define __ffsSI2 __NW(ffs,2) +#define __clzSI2 __NW(clz,2) +#define __ctzSI2 __NW(ctz,2) +#define __clrsbSI2 __NW(clrsb,2) +#define __popcountSI2 __NW(popcount,2) +#define __paritySI2 __NW(parity,2) +#define __ffsDI2 __NDW(ffs,2) +#define __clzDI2 __NDW(clz,2) +#define __ctzDI2 __NDW(ctz,2) +#define __clrsbDI2 __NDW(clrsb,2) +#define __popcountDI2 __NDW(popcount,2) +#define __parityDI2 __NDW(parity,2) + +#define __clz_tab __N(clz_tab) +#define __bswapsi2 __N(bswapsi2) +#define __bswapdi2 __N(bswapdi2) +#define __udiv_w_sdiv __N(udiv_w_sdiv) +#define __clear_cache __N(clear_cache) +#define __enable_execute_stack __N(enable_execute_stack) + +#ifndef __powisf2 +#define __powisf2 __N(powisf2) +#endif +#ifndef __powidf2 +#define __powidf2 __N(powidf2) +#endif +#ifndef __powitf2 +#define __powitf2 __N(powitf2) +#endif +#ifndef __powixf2 +#define __powixf2 __N(powixf2) +#endif +#ifndef __mulsc3 +#define __mulsc3 __N(mulsc3) +#endif +#ifndef __muldc3 +#define __muldc3 __N(muldc3) +#endif +#ifndef __mulxc3 +#define __mulxc3 __N(mulxc3) +#endif +#ifndef __multc3 +#define __multc3 __N(multc3) +#endif +#ifndef __divsc3 +#define __divsc3 __N(divsc3) +#endif +#ifndef __divdc3 +#define __divdc3 __N(divdc3) +#endif +#ifndef __divxc3 +#define __divxc3 __N(divxc3) +#endif +#ifndef __divtc3 +#define __divtc3 __N(divtc3) +#endif + +extern DWtype __muldi3 (DWtype, DWtype); +extern DWtype __divdi3 (DWtype, DWtype); +extern UDWtype __udivdi3 (UDWtype, UDWtype); +extern UDWtype __umoddi3 (UDWtype, UDWtype); +extern DWtype __moddi3 (DWtype, DWtype); + +/* __udivmoddi4 is static inline when building other libgcc2 portions. */ +#if (!defined (L_udivdi3) && !defined (L_divdi3) && \ + !defined (L_umoddi3) && !defined (L_moddi3)) +extern UDWtype __udivmoddi4 (UDWtype, UDWtype, UDWtype *); +#endif + +/* __negdi2 is static inline when building other libgcc2 portions. */ +#if !defined(L_divdi3) && !defined(L_moddi3) +extern DWtype __negdi2 (DWtype); +#endif + +extern DWtype __lshrdi3 (DWtype, shift_count_type); +extern DWtype __ashldi3 (DWtype, shift_count_type); +extern DWtype __ashrdi3 (DWtype, shift_count_type); + +/* __udiv_w_sdiv is static inline when building other libgcc2 portions. */ +#if (!defined(L_udivdi3) && !defined(L_divdi3) && \ + !defined(L_umoddi3) && !defined(L_moddi3)) +extern UWtype __udiv_w_sdiv (UWtype *, UWtype, UWtype, UWtype); +#endif + +extern cmp_return_type __cmpdi2 (DWtype, DWtype); +extern cmp_return_type __ucmpdi2 (DWtype, DWtype); + +#if MIN_UNITS_PER_WORD > 1 +extern SItype __bswapsi2 (SItype); +#endif +#if __SIZEOF_LONG_LONG__ > 4 +extern DItype __bswapdi2 (DItype); +#endif + +extern Wtype __absvSI2 (Wtype); +extern Wtype __addvSI3 (Wtype, Wtype); +extern Wtype __subvSI3 (Wtype, Wtype); +extern Wtype __mulvSI3 (Wtype, Wtype); +extern Wtype __negvSI2 (Wtype); +extern DWtype __absvDI2 (DWtype); +extern DWtype __addvDI3 (DWtype, DWtype); +extern DWtype __subvDI3 (DWtype, DWtype); +extern DWtype __mulvDI3 (DWtype, DWtype); +extern DWtype __negvDI2 (DWtype); + +#ifdef COMPAT_SIMODE_TRAPPING_ARITHMETIC +#define __absvsi2 __N(absvsi2) +#define __negvsi2 __N(negvsi2) +#define __addvsi3 __N(addvsi3) +#define __subvsi3 __N(subvsi3) +#define __mulvsi3 __N(mulvsi3) + +extern SItype __absvsi2 (SItype); +extern SItype __addvsi3 (SItype, SItype); +extern SItype __subvsi3 (SItype, SItype); +extern SItype __mulvsi3 (SItype, SItype); +extern SItype __negvsi2 (SItype); +#endif /* COMPAT_SIMODE_TRAPPING_ARITHMETIC */ + +#undef int +#if LIBGCC2_HAS_SF_MODE +extern DWtype __fixsfdi (SFtype); +extern SFtype __floatdisf (DWtype); +extern SFtype __floatundisf (UDWtype); +extern UWtype __fixunssfSI (SFtype); +extern UDWtype __fixunssfDI (SFtype); +extern SFtype __powisf2 (SFtype, int); +extern SCtype __divsc3 (SFtype, SFtype, SFtype, SFtype); +extern SCtype __mulsc3 (SFtype, SFtype, SFtype, SFtype); +#endif +#if LIBGCC2_HAS_DF_MODE +extern DWtype __fixdfdi (DFtype); +extern DFtype __floatdidf (DWtype); +extern DFtype __floatundidf (UDWtype); +extern UWtype __fixunsdfSI (DFtype); +extern UDWtype __fixunsdfDI (DFtype); +extern DFtype __powidf2 (DFtype, int); +extern DCtype __divdc3 (DFtype, DFtype, DFtype, DFtype); +extern DCtype __muldc3 (DFtype, DFtype, DFtype, DFtype); +#endif + +#if LIBGCC2_HAS_XF_MODE +extern DWtype __fixxfdi (XFtype); +extern UDWtype __fixunsxfDI (XFtype); +extern XFtype __floatdixf (DWtype); +extern XFtype __floatundixf (UDWtype); +extern UWtype __fixunsxfSI (XFtype); +extern XFtype __powixf2 (XFtype, int); +extern XCtype __divxc3 (XFtype, XFtype, XFtype, XFtype); +extern XCtype __mulxc3 (XFtype, XFtype, XFtype, XFtype); +#endif + +#if LIBGCC2_HAS_TF_MODE +extern UDWtype __fixunstfDI (TFtype); +extern DWtype __fixtfdi (TFtype); +extern TFtype __floatditf (DWtype); +extern TFtype __floatunditf (UDWtype); +extern TFtype __powitf2 (TFtype, int); +extern TCtype __divtc3 (TFtype, TFtype, TFtype, TFtype); +extern TCtype __multc3 (TFtype, TFtype, TFtype, TFtype); +#endif +#define int bogus_type + +/* DWstructs are pairs of Wtype values in the order determined by + __BYTE_ORDER__. */ + +#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__ + struct DWstruct {Wtype high, low;}; +#else + struct DWstruct {Wtype low, high;}; +#endif + +/* We need this union to unpack/pack DImode values, since we don't have + any arithmetic yet. Incoming DImode parameters are stored into the + `ll' field, and the unpacked result is read from the struct `s'. */ + +typedef union +{ + struct DWstruct s; + DWtype ll; +} DWunion; + +/* Defined for L_popcount_tab. Exported here because some targets may + want to use it for their own versions of the __popcount builtins. */ +extern const UQItype __popcount_tab[256]; + +/* Defined for L_clz. Exported here because some targets may want to use + it for their own versions of the __clz builtins. It contains the bit + position of the first set bit for the numbers 0 - 255. This avoids the + need for a separate table for the __ctz builtins. */ +extern const UQItype __clz_tab[256]; + +#include "longlong.h" + +#undef int +extern int __clzDI2 (UDWtype); +extern int __clzSI2 (UWtype); +extern int __ctzSI2 (UWtype); +extern int __ctzDI2 (UDWtype); +extern int __clrsbSI2 (Wtype); +extern int __clrsbDI2 (DWtype); +extern int __ffsSI2 (UWtype); +extern int __ffsDI2 (DWtype); +extern int __popcountSI2 (UWtype); +extern int __popcountDI2 (UDWtype); +extern int __paritySI2 (UWtype); +extern int __parityDI2 (UDWtype); +#define int bogus_type + +extern void __enable_execute_stack (void *); + +#ifndef HIDE_EXPORTS +#pragma GCC visibility pop +#endif + +#endif /* ! GCC_LIBGCC2_H */ diff --git a/contrib/toolchain/gcc/5x/libgcc/libgcc_tm.h b/contrib/toolchain/gcc/5x/libgcc/libgcc_tm.h new file mode 100644 index 0000000000..2b491b86ea --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/libgcc_tm.h @@ -0,0 +1,4 @@ +#ifndef LIBGCC_TM_H +#define LIBGCC_TM_H +/* Automatically generated by mkheader.sh. */ +#endif /* LIBGCC_TM_H */ diff --git a/contrib/toolchain/gcc/5x/libgcc/libgcov-driver-system.c b/contrib/toolchain/gcc/5x/libgcc/libgcov-driver-system.c new file mode 100644 index 0000000000..94f198dcef --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/libgcov-driver-system.c @@ -0,0 +1,193 @@ +/* Routines required for instrumenting a program. */ +/* Compile this one with gcc. */ +/* Copyright (C) 1989-2015 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 +. */ + +/* A utility function for outputing errors. */ + +static int __attribute__((format(printf, 1, 2))) +gcov_error (const char *fmt, ...) +{ + int ret; + va_list argp; + va_start (argp, fmt); + ret = vfprintf (stderr, fmt, argp); + va_end (argp); + return ret; +} + +/* Make sure path component of the given FILENAME exists, create + missing directories. FILENAME must be writable. + Returns zero on success, or -1 if an error occurred. */ + +static int +create_file_directory (char *filename) +{ +#if !defined(TARGET_POSIX_IO) && !defined(_WIN32) + (void) filename; + return -1; +#else + char *s; + + s = filename; + + if (HAS_DRIVE_SPEC(s)) + s += 2; + if (IS_DIR_SEPARATOR(*s)) + ++s; + for (; *s != '\0'; s++) + if (IS_DIR_SEPARATOR(*s)) + { + char sep = *s; + *s = '\0'; + + /* Try to make directory if it doesn't already exist. */ + if (access (filename, F_OK) == -1 +#ifdef TARGET_POSIX_IO + && mkdir (filename, 0755) == -1 +#else +#ifdef mkdir +#undef mkdir +#endif + && mkdir (filename) == -1 +#endif + /* The directory might have been made by another process. */ + && errno != EEXIST) + { + gcov_error ("profiling:%s:Cannot create directory\n", filename); + *s = sep; + return -1; + }; + + *s = sep; + }; + return 0; +#endif +} + +static void +allocate_filename_struct (struct gcov_filename *gf) +{ + const char *gcov_prefix; + size_t prefix_length; + int strip = 0; + + { + /* Check if the level of dirs to strip off specified. */ + char *tmp = getenv("GCOV_PREFIX_STRIP"); + if (tmp) + { + strip = atoi (tmp); + /* Do not consider negative values. */ + if (strip < 0) + strip = 0; + } + } + gf->strip = strip; + + /* Get file name relocation prefix. Non-absolute values are ignored. */ + gcov_prefix = getenv("GCOV_PREFIX"); + prefix_length = gcov_prefix ? strlen (gcov_prefix) : 0; + + /* Remove an unnecessary trailing '/' */ + if (prefix_length && IS_DIR_SEPARATOR (gcov_prefix[prefix_length - 1])) + prefix_length--; + + /* If no prefix was specified and a prefix stip, then we assume + relative. */ + if (!prefix_length && gf->strip) + { + gcov_prefix = "."; + prefix_length = 1; + } + gf->prefix = prefix_length; + + /* Allocate and initialize the filename scratch space. */ + gf->filename = (char *) xmalloc (gf->max_length + prefix_length + 2); + if (prefix_length) + memcpy (gf->filename, gcov_prefix, prefix_length); +} + +/* Open a gcda file specified by GI_FILENAME. + Return -1 on error. Return 0 on success. */ + +static int +gcov_exit_open_gcda_file (struct gcov_info *gi_ptr, + struct gcov_filename *gf) +{ + const char *fname = gi_ptr->filename; + char *dst = gf->filename + gf->prefix; + + fname = gi_ptr->filename; + + /* Build relocated filename, stripping off leading + directories from the initial filename if requested. */ + if (gf->strip > 0) + { + const char *probe = fname; + int level; + + /* Remove a leading separator, without counting it. */ + if (IS_DIR_SEPARATOR (*probe)) + probe++; + + /* Skip selected directory levels. If we fall off the end, we + keep the final part. */ + for (level = gf->strip; *probe && level; probe++) + if (IS_DIR_SEPARATOR (*probe)) + { + fname = probe; + level--; + } + } + + /* Update complete filename with stripped original. */ + if (gf->prefix) + { + /* Avoid to add multiple drive letters into combined path. */ + if (HAS_DRIVE_SPEC(fname)) + fname += 2; + + if (!IS_DIR_SEPARATOR (*fname)) + *dst++ = '/'; + } + strcpy (dst, fname); + + if (!gcov_open (gf->filename)) + { + /* Open failed likely due to missed directory. + Create directory and retry to open file. */ + if (create_file_directory (gf->filename)) + { + fprintf (stderr, "profiling:%s:Skip\n", gf->filename); + return -1; + } + if (!gcov_open (gf->filename)) + { + fprintf (stderr, "profiling:%s:Cannot open\n", gf->filename); + return -1; + } + } + + return 0; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/libgcov-driver.c b/contrib/toolchain/gcc/5x/libgcc/libgcov-driver.c new file mode 100644 index 0000000000..221ac0c00d --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/libgcov-driver.c @@ -0,0 +1,912 @@ +/* Routines required for instrumenting a program. */ +/* Compile this one with gcc. */ +/* Copyright (C) 1989-2015 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 "libgcov.h" + +#if defined(inhibit_libc) +/* If libc and its header files are not available, provide dummy functions. */ + +#if defined(L_gcov) +void __gcov_init (struct gcov_info *p __attribute__ ((unused))) {} +#endif + +#else /* inhibit_libc */ + +#include +#if GCOV_LOCKED +#include +#include +#include +#endif + +#ifdef L_gcov + +/* A utility function for outputing errors. */ +static int gcov_error (const char *, ...); + +#include "gcov-io.c" + +struct gcov_fn_buffer +{ + struct gcov_fn_buffer *next; + unsigned fn_ix; + struct gcov_fn_info info; + /* note gcov_fn_info ends in a trailing array. */ +}; + +struct gcov_summary_buffer +{ + struct gcov_summary_buffer *next; + struct gcov_summary summary; +}; + +/* A struct that bundles all the related information about the + gcda filename. */ + +struct gcov_filename +{ + char *filename; /* filename buffer */ + size_t max_length; /* maximum filename length */ + int strip; /* leading chars to strip from filename */ + size_t prefix; /* chars to prepend to filename */ +}; + +static struct gcov_fn_buffer * +free_fn_data (const struct gcov_info *gi_ptr, struct gcov_fn_buffer *buffer, + unsigned limit) +{ + struct gcov_fn_buffer *next; + unsigned ix, n_ctr = 0; + + if (!buffer) + return 0; + next = buffer->next; + + for (ix = 0; ix != limit; ix++) + if (gi_ptr->merge[ix]) + free (buffer->info.ctrs[n_ctr++].values); + free (buffer); + return next; +} + +static struct gcov_fn_buffer ** +buffer_fn_data (const char *filename, const struct gcov_info *gi_ptr, + struct gcov_fn_buffer **end_ptr, unsigned fn_ix) +{ + unsigned n_ctrs = 0, ix = 0; + struct gcov_fn_buffer *fn_buffer; + unsigned len; + + for (ix = GCOV_COUNTERS; ix--;) + if (gi_ptr->merge[ix]) + n_ctrs++; + + len = sizeof (*fn_buffer) + sizeof (fn_buffer->info.ctrs[0]) * n_ctrs; + fn_buffer = (struct gcov_fn_buffer *) xmalloc (len); + + if (!fn_buffer) + goto fail; + + fn_buffer->next = 0; + fn_buffer->fn_ix = fn_ix; + fn_buffer->info.ident = gcov_read_unsigned (); + fn_buffer->info.lineno_checksum = gcov_read_unsigned (); + fn_buffer->info.cfg_checksum = gcov_read_unsigned (); + + for (n_ctrs = ix = 0; ix != GCOV_COUNTERS; ix++) + { + gcov_unsigned_t length; + gcov_type *values; + + if (!gi_ptr->merge[ix]) + continue; + + if (gcov_read_unsigned () != GCOV_TAG_FOR_COUNTER (ix)) + { + len = 0; + goto fail; + } + + length = GCOV_TAG_COUNTER_NUM (gcov_read_unsigned ()); + len = length * sizeof (gcov_type); + values = (gcov_type *) xmalloc (len); + if (!values) + goto fail; + + fn_buffer->info.ctrs[n_ctrs].num = length; + fn_buffer->info.ctrs[n_ctrs].values = values; + + while (length--) + *values++ = gcov_read_counter (); + n_ctrs++; + } + + *end_ptr = fn_buffer; + return &fn_buffer->next; + +fail: + gcov_error ("profiling:%s:Function %u %s %u \n", filename, fn_ix, + len ? "cannot allocate" : "counter mismatch", len ? len : ix); + + return (struct gcov_fn_buffer **)free_fn_data (gi_ptr, fn_buffer, ix); +} + +/* Add an unsigned value to the current crc */ + +static gcov_unsigned_t +crc32_unsigned (gcov_unsigned_t crc32, gcov_unsigned_t value) +{ + unsigned ix; + + for (ix = 32; ix--; value <<= 1) + { + unsigned feedback; + + feedback = (value ^ crc32) & 0x80000000 ? 0x04c11db7 : 0; + crc32 <<= 1; + crc32 ^= feedback; + } + + return crc32; +} + +/* Check if VERSION of the info block PTR matches libgcov one. + Return 1 on success, or zero in case of versions mismatch. + If FILENAME is not NULL, its value used for reporting purposes + instead of value from the info block. */ + +static int +gcov_version (struct gcov_info *ptr, gcov_unsigned_t version, + const char *filename) +{ + if (version != GCOV_VERSION) + { + char v[4], e[4]; + + GCOV_UNSIGNED2STRING (v, version); + GCOV_UNSIGNED2STRING (e, GCOV_VERSION); + + gcov_error ("profiling:%s:Version mismatch - expected %.4s got %.4s\n", + filename? filename : ptr->filename, e, v); + return 0; + } + return 1; +} + +/* Insert counter VALUE into HISTOGRAM. */ + +static void +gcov_histogram_insert(gcov_bucket_type *histogram, gcov_type value) +{ + unsigned i; + + i = gcov_histo_index(value); + histogram[i].num_counters++; + histogram[i].cum_value += value; + if (value < histogram[i].min_value) + histogram[i].min_value = value; +} + +/* Computes a histogram of the arc counters to place in the summary SUM. */ + +static void +gcov_compute_histogram (struct gcov_info *list, struct gcov_summary *sum) +{ + struct gcov_info *gi_ptr; + const struct gcov_fn_info *gfi_ptr; + const struct gcov_ctr_info *ci_ptr; + struct gcov_ctr_summary *cs_ptr; + unsigned t_ix, f_ix, ctr_info_ix, ix; + int h_ix; + + /* This currently only applies to arc counters. */ + t_ix = GCOV_COUNTER_ARCS; + + /* First check if there are any counts recorded for this counter. */ + cs_ptr = &(sum->ctrs[t_ix]); + if (!cs_ptr->num) + return; + + for (h_ix = 0; h_ix < GCOV_HISTOGRAM_SIZE; h_ix++) + { + cs_ptr->histogram[h_ix].num_counters = 0; + cs_ptr->histogram[h_ix].min_value = cs_ptr->run_max; + cs_ptr->histogram[h_ix].cum_value = 0; + } + + /* Walk through all the per-object structures and record each of + the count values in histogram. */ + for (gi_ptr = list; gi_ptr; gi_ptr = gi_ptr->next) + { + if (!gi_ptr->merge[t_ix]) + continue; + + /* Find the appropriate index into the gcov_ctr_info array + for the counter we are currently working on based on the + existence of the merge function pointer for this object. */ + for (ix = 0, ctr_info_ix = 0; ix < t_ix; ix++) + { + if (gi_ptr->merge[ix]) + ctr_info_ix++; + } + for (f_ix = 0; f_ix != gi_ptr->n_functions; f_ix++) + { + gfi_ptr = gi_ptr->functions[f_ix]; + + if (!gfi_ptr || gfi_ptr->key != gi_ptr) + continue; + + ci_ptr = &gfi_ptr->ctrs[ctr_info_ix]; + for (ix = 0; ix < ci_ptr->num; ix++) + gcov_histogram_insert (cs_ptr->histogram, ci_ptr->values[ix]); + } + } +} + +/* buffer for the fn_data from another program. */ +static struct gcov_fn_buffer *fn_buffer; +/* buffer for summary from other programs to be written out. */ +static struct gcov_summary_buffer *sum_buffer; + +/* This function computes the program level summary and the histo-gram. + It computes and returns CRC32 and stored summary in THIS_PRG. + Also determines the longest filename length of the info files. */ + +#if !IN_GCOV_TOOL +static +#endif +gcov_unsigned_t +compute_summary (struct gcov_info *list, struct gcov_summary *this_prg, + size_t *max_length) +{ + struct gcov_info *gi_ptr; + const struct gcov_fn_info *gfi_ptr; + struct gcov_ctr_summary *cs_ptr; + const struct gcov_ctr_info *ci_ptr; + int f_ix; + unsigned t_ix; + gcov_unsigned_t c_num; + gcov_unsigned_t crc32 = 0; + + /* Find the totals for this execution. */ + memset (this_prg, 0, sizeof (*this_prg)); + *max_length = 0; + for (gi_ptr = list; gi_ptr; gi_ptr = gi_ptr->next) + { + size_t len = strlen (gi_ptr->filename); + if (len > *max_length) + *max_length = len; + + crc32 = crc32_unsigned (crc32, gi_ptr->stamp); + crc32 = crc32_unsigned (crc32, gi_ptr->n_functions); + + for (f_ix = 0; (unsigned)f_ix != gi_ptr->n_functions; f_ix++) + { + gfi_ptr = gi_ptr->functions[f_ix]; + + if (gfi_ptr && gfi_ptr->key != gi_ptr) + gfi_ptr = 0; + + crc32 = crc32_unsigned (crc32, gfi_ptr ? gfi_ptr->cfg_checksum : 0); + crc32 = crc32_unsigned (crc32, + gfi_ptr ? gfi_ptr->lineno_checksum : 0); + if (!gfi_ptr) + continue; + + ci_ptr = gfi_ptr->ctrs; + for (t_ix = 0; t_ix != GCOV_COUNTERS_SUMMABLE; t_ix++) + { + if (!gi_ptr->merge[t_ix]) + continue; + + cs_ptr = &(this_prg->ctrs[t_ix]); + cs_ptr->num += ci_ptr->num; + crc32 = crc32_unsigned (crc32, ci_ptr->num); + + for (c_num = 0; c_num < ci_ptr->num; c_num++) + { + cs_ptr->sum_all += ci_ptr->values[c_num]; + if (cs_ptr->run_max < ci_ptr->values[c_num]) + cs_ptr->run_max = ci_ptr->values[c_num]; + } + ci_ptr++; + } + } + } + gcov_compute_histogram (list, this_prg); + return crc32; +} + +/* Including system dependent components. */ +#include "libgcov-driver-system.c" + +/* This function merges counters in GI_PTR to an existing gcda file. + Return 0 on success. + Return -1 on error. In this case, caller will goto read_fatal. */ + +static int +merge_one_data (const char *filename, + struct gcov_info *gi_ptr, + struct gcov_summary *prg_p, + struct gcov_summary *this_prg, + gcov_position_t *summary_pos_p, + gcov_position_t *eof_pos_p, + gcov_unsigned_t crc32) +{ + gcov_unsigned_t tag, length; + unsigned t_ix; + int f_ix; + int error = 0; + struct gcov_fn_buffer **fn_tail = &fn_buffer; + struct gcov_summary_buffer **sum_tail = &sum_buffer; + + length = gcov_read_unsigned (); + if (!gcov_version (gi_ptr, length, filename)) + return -1; + + length = gcov_read_unsigned (); + if (length != gi_ptr->stamp) + /* Read from a different compilation. Overwrite the file. */ + return 0; + + /* Look for program summary. */ + for (f_ix = 0;;) + { + struct gcov_summary tmp; + + *eof_pos_p = gcov_position (); + tag = gcov_read_unsigned (); + if (tag != GCOV_TAG_PROGRAM_SUMMARY) + break; + + f_ix--; + length = gcov_read_unsigned (); + gcov_read_summary (&tmp); + if ((error = gcov_is_error ())) + goto read_error; + if (*summary_pos_p) + { + /* Save all summaries after the one that will be + merged into below. These will need to be rewritten + as histogram merging may change the number of non-zero + histogram entries that will be emitted, and thus the + size of the merged summary. */ + (*sum_tail) = (struct gcov_summary_buffer *) + xmalloc (sizeof(struct gcov_summary_buffer)); + (*sum_tail)->summary = tmp; + (*sum_tail)->next = 0; + sum_tail = &((*sum_tail)->next); + goto next_summary; + } + if (tmp.checksum != crc32) + goto next_summary; + + for (t_ix = 0; t_ix != GCOV_COUNTERS_SUMMABLE; t_ix++) + if (tmp.ctrs[t_ix].num != this_prg->ctrs[t_ix].num) + goto next_summary; + *prg_p = tmp; + *summary_pos_p = *eof_pos_p; + + next_summary:; + } + + /* Merge execution counts for each function. */ + for (f_ix = 0; (unsigned)f_ix != gi_ptr->n_functions; + f_ix++, tag = gcov_read_unsigned ()) + { + const struct gcov_ctr_info *ci_ptr; + const struct gcov_fn_info *gfi_ptr = gi_ptr->functions[f_ix]; + + if (tag != GCOV_TAG_FUNCTION) + goto read_mismatch; + + length = gcov_read_unsigned (); + if (!length) + /* This function did not appear in the other program. + We have nothing to merge. */ + continue; + + if (length != GCOV_TAG_FUNCTION_LENGTH) + goto read_mismatch; + + if (!gfi_ptr || gfi_ptr->key != gi_ptr) + { + /* This function appears in the other program. We + need to buffer the information in order to write + it back out -- we'll be inserting data before + this point, so cannot simply keep the data in the + file. */ + fn_tail = buffer_fn_data (filename, gi_ptr, fn_tail, f_ix); + if (!fn_tail) + goto read_mismatch; + continue; + } + + length = gcov_read_unsigned (); + if (length != gfi_ptr->ident) + goto read_mismatch; + + length = gcov_read_unsigned (); + if (length != gfi_ptr->lineno_checksum) + goto read_mismatch; + + length = gcov_read_unsigned (); + if (length != gfi_ptr->cfg_checksum) + goto read_mismatch; + + ci_ptr = gfi_ptr->ctrs; + for (t_ix = 0; t_ix < GCOV_COUNTERS; t_ix++) + { + gcov_merge_fn merge = gi_ptr->merge[t_ix]; + + if (!merge) + continue; + + tag = gcov_read_unsigned (); + length = gcov_read_unsigned (); + if (tag != GCOV_TAG_FOR_COUNTER (t_ix) + || length != GCOV_TAG_COUNTER_LENGTH (ci_ptr->num)) + goto read_mismatch; + (*merge) (ci_ptr->values, ci_ptr->num); + ci_ptr++; + } + if ((error = gcov_is_error ())) + goto read_error; + } + + if (tag) + { + read_mismatch:; + gcov_error ("profiling:%s:Merge mismatch for %s %u\n", + filename, f_ix >= 0 ? "function" : "summary", + f_ix < 0 ? -1 - f_ix : f_ix); + return -1; + } + return 0; + +read_error: + gcov_error ("profiling:%s:%s merging\n", filename, + error < 0 ? "Overflow": "Error"); + return -1; +} + +/* Write counters in GI_PTR and the summary in PRG to a gcda file. In + the case of appending to an existing file, SUMMARY_POS will be non-zero. + We will write the file starting from SUMMAY_POS. */ + +static void +write_one_data (const struct gcov_info *gi_ptr, + const struct gcov_summary *prg_p, + const gcov_position_t eof_pos, + const gcov_position_t summary_pos) +{ + unsigned f_ix; + struct gcov_summary_buffer *next_sum_buffer; + + /* Write out the data. */ + if (!eof_pos) + { + gcov_write_tag_length (GCOV_DATA_MAGIC, GCOV_VERSION); + gcov_write_unsigned (gi_ptr->stamp); + } + + if (summary_pos) + gcov_seek (summary_pos); + + /* Generate whole program statistics. */ + gcov_write_summary (GCOV_TAG_PROGRAM_SUMMARY, prg_p); + + /* Rewrite all the summaries that were after the summary we merged + into. This is necessary as the merged summary may have a different + size due to the number of non-zero histogram entries changing after + merging. */ + + while (sum_buffer) + { + gcov_write_summary (GCOV_TAG_PROGRAM_SUMMARY, &sum_buffer->summary); + next_sum_buffer = sum_buffer->next; + free (sum_buffer); + sum_buffer = next_sum_buffer; + } + + /* Write execution counts for each function. */ + for (f_ix = 0; f_ix != gi_ptr->n_functions; f_ix++) + { + unsigned buffered = 0; + const struct gcov_fn_info *gfi_ptr; + const struct gcov_ctr_info *ci_ptr; + gcov_unsigned_t length; + unsigned t_ix; + + if (fn_buffer && fn_buffer->fn_ix == f_ix) + { + /* Buffered data from another program. */ + buffered = 1; + gfi_ptr = &fn_buffer->info; + length = GCOV_TAG_FUNCTION_LENGTH; + } + else + { + gfi_ptr = gi_ptr->functions[f_ix]; + if (gfi_ptr && gfi_ptr->key == gi_ptr) + length = GCOV_TAG_FUNCTION_LENGTH; + else + length = 0; + } + + gcov_write_tag_length (GCOV_TAG_FUNCTION, length); + if (!length) + continue; + + gcov_write_unsigned (gfi_ptr->ident); + gcov_write_unsigned (gfi_ptr->lineno_checksum); + gcov_write_unsigned (gfi_ptr->cfg_checksum); + + ci_ptr = gfi_ptr->ctrs; + for (t_ix = 0; t_ix < GCOV_COUNTERS; t_ix++) + { + gcov_unsigned_t n_counts; + gcov_type *c_ptr; + + if (!gi_ptr->merge[t_ix]) + continue; + + n_counts = ci_ptr->num; + gcov_write_tag_length (GCOV_TAG_FOR_COUNTER (t_ix), + GCOV_TAG_COUNTER_LENGTH (n_counts)); + c_ptr = ci_ptr->values; + while (n_counts--) + gcov_write_counter (*c_ptr++); + ci_ptr++; + } + if (buffered) + fn_buffer = free_fn_data (gi_ptr, fn_buffer, GCOV_COUNTERS); + } + + gcov_write_unsigned (0); +} + +/* Helper function for merging summary. + Return -1 on error. Return 0 on success. */ + +static int +merge_summary (const char *filename, int run_counted, + const struct gcov_info *gi_ptr, struct gcov_summary *prg, + struct gcov_summary *this_prg, gcov_unsigned_t crc32, + struct gcov_summary *all_prg __attribute__ ((unused))) +{ + struct gcov_ctr_summary *cs_prg, *cs_tprg; + unsigned t_ix; +#if !GCOV_LOCKED + /* summary for all instances of program. */ + struct gcov_ctr_summary *cs_all; +#endif + + /* Merge the summaries. */ + for (t_ix = 0; t_ix < GCOV_COUNTERS_SUMMABLE; t_ix++) + { + cs_prg = &(prg->ctrs[t_ix]); + cs_tprg = &(this_prg->ctrs[t_ix]); + + if (gi_ptr->merge[t_ix]) + { + int first = !cs_prg->runs; + + if (!run_counted) + cs_prg->runs++; + if (first) + cs_prg->num = cs_tprg->num; + cs_prg->sum_all += cs_tprg->sum_all; + if (cs_prg->run_max < cs_tprg->run_max) + cs_prg->run_max = cs_tprg->run_max; + cs_prg->sum_max += cs_tprg->run_max; + if (first) + memcpy (cs_prg->histogram, cs_tprg->histogram, + sizeof (gcov_bucket_type) * GCOV_HISTOGRAM_SIZE); + else + gcov_histogram_merge (cs_prg->histogram, cs_tprg->histogram); + } + else if (cs_prg->runs) + { + gcov_error ("profiling:%s:Merge mismatch for summary.\n", + filename); + return -1; + } +#if !GCOV_LOCKED + cs_all = &all_prg->ctrs[t_ix]; + if (!cs_all->runs && cs_prg->runs) + { + cs_all->num = cs_prg->num; + cs_all->runs = cs_prg->runs; + cs_all->sum_all = cs_prg->sum_all; + cs_all->run_max = cs_prg->run_max; + cs_all->sum_max = cs_prg->sum_max; + } + else if (!all_prg->checksum + /* Don't compare the histograms, which may have slight + variations depending on the order they were updated + due to the truncating integer divides used in the + merge. */ + && (cs_all->num != cs_prg->num + || cs_all->runs != cs_prg->runs + || cs_all->sum_all != cs_prg->sum_all + || cs_all->run_max != cs_prg->run_max + || cs_all->sum_max != cs_prg->sum_max)) + { + gcov_error ("profiling:%s:Data file mismatch - some " + "data files may have been concurrently " + "updated without locking support\n", filename); + all_prg->checksum = ~0u; + } +#endif + } + + prg->checksum = crc32; + + return 0; +} + + +/* Sort N entries in VALUE_ARRAY in descending order. + Each entry in VALUE_ARRAY has two values. The sorting + is based on the second value. */ + +GCOV_LINKAGE void +gcov_sort_n_vals (gcov_type *value_array, int n) +{ + int j, k; + + for (j = 2; j < n; j += 2) + { + gcov_type cur_ent[2]; + + cur_ent[0] = value_array[j]; + cur_ent[1] = value_array[j + 1]; + k = j - 2; + while (k >= 0 && value_array[k + 1] < cur_ent[1]) + { + value_array[k + 2] = value_array[k]; + value_array[k + 3] = value_array[k+1]; + k -= 2; + } + value_array[k + 2] = cur_ent[0]; + value_array[k + 3] = cur_ent[1]; + } +} + +/* Sort the profile counters for all indirect call sites. Counters + for each call site are allocated in array COUNTERS. */ + +static void +gcov_sort_icall_topn_counter (const struct gcov_ctr_info *counters) +{ + int i; + gcov_type *values; + int n = counters->num; + + gcc_assert (!(n % GCOV_ICALL_TOPN_NCOUNTS)); + values = counters->values; + + for (i = 0; i < n; i += GCOV_ICALL_TOPN_NCOUNTS) + { + gcov_type *value_array = &values[i + 1]; + gcov_sort_n_vals (value_array, GCOV_ICALL_TOPN_NCOUNTS - 1); + } +} + +/* Sort topn indirect_call profile counters in GI_PTR. */ + +static void +gcov_sort_topn_counter_arrays (const struct gcov_info *gi_ptr) +{ + unsigned int i; + int f_ix; + const struct gcov_fn_info *gfi_ptr; + const struct gcov_ctr_info *ci_ptr; + + if (!gi_ptr->merge[GCOV_COUNTER_ICALL_TOPNV]) + return; + + for (f_ix = 0; (unsigned)f_ix != gi_ptr->n_functions; f_ix++) + { + gfi_ptr = gi_ptr->functions[f_ix]; + ci_ptr = gfi_ptr->ctrs; + for (i = 0; i < GCOV_COUNTERS; i++) + { + if (!gi_ptr->merge[i]) + continue; + if (i == GCOV_COUNTER_ICALL_TOPNV) + { + gcov_sort_icall_topn_counter (ci_ptr); + break; + } + ci_ptr++; + } + } +} + +/* Dump the coverage counts for one gcov_info object. We merge with existing + counts when possible, to avoid growing the .da files ad infinitum. We use + this program's checksum to make sure we only accumulate whole program + statistics to the correct summary. An object file might be embedded + in two separate programs, and we must keep the two program + summaries separate. */ + +static void +dump_one_gcov (struct gcov_info *gi_ptr, struct gcov_filename *gf, + unsigned run_counted, + gcov_unsigned_t crc32, struct gcov_summary *all_prg, + struct gcov_summary *this_prg) +{ + struct gcov_summary prg; /* summary for this object over all program. */ + int error; + gcov_unsigned_t tag; + gcov_position_t summary_pos = 0; + gcov_position_t eof_pos = 0; + + fn_buffer = 0; + sum_buffer = 0; + + gcov_sort_topn_counter_arrays (gi_ptr); + + error = gcov_exit_open_gcda_file (gi_ptr, gf); + if (error == -1) + return; + + tag = gcov_read_unsigned (); + if (tag) + { + /* Merge data from file. */ + if (tag != GCOV_DATA_MAGIC) + { + gcov_error ("profiling:%s:Not a gcov data file\n", gf->filename); + goto read_fatal; + } + error = merge_one_data (gf->filename, gi_ptr, &prg, this_prg, + &summary_pos, &eof_pos, crc32); + if (error == -1) + goto read_fatal; + } + + gcov_rewrite (); + + if (!summary_pos) + { + memset (&prg, 0, sizeof (prg)); + summary_pos = eof_pos; + } + + error = merge_summary (gf->filename, run_counted, gi_ptr, &prg, this_prg, + crc32, all_prg); + if (error == -1) + goto read_fatal; + + write_one_data (gi_ptr, &prg, eof_pos, summary_pos); + /* fall through */ + +read_fatal:; + while (fn_buffer) + fn_buffer = free_fn_data (gi_ptr, fn_buffer, GCOV_COUNTERS); + + if ((error = gcov_close ())) + gcov_error (error < 0 ? + "profiling:%s:Overflow writing\n" : + "profiling:%s:Error writing\n", + gf->filename); +} + + +/* Dump all the coverage counts for the program. It first computes program + summary and then traverses gcov_list list and dumps the gcov_info + objects one by one. */ + +#if !IN_GCOV_TOOL +static +#endif +void +gcov_do_dump (struct gcov_info *list, int run_counted) +{ + struct gcov_info *gi_ptr; + struct gcov_filename gf; + gcov_unsigned_t crc32; + struct gcov_summary all_prg; + struct gcov_summary this_prg; + + crc32 = compute_summary (list, &this_prg, &gf.max_length); + + allocate_filename_struct (&gf); +#if !GCOV_LOCKED + memset (&all_prg, 0, sizeof (all_prg)); +#endif + + /* Now merge each file. */ + for (gi_ptr = list; gi_ptr; gi_ptr = gi_ptr->next) + dump_one_gcov (gi_ptr, &gf, run_counted, crc32, &all_prg, &this_prg); + + free (gf.filename); +} + +#if !IN_GCOV_TOOL +void +__gcov_dump_one (struct gcov_root *root) +{ + if (root->dumped) + return; + + gcov_do_dump (root->list, root->run_counted); + + root->dumped = 1; + root->run_counted = 1; +} + +/* Per-dynamic-object gcov state. */ +struct gcov_root __gcov_root; + +/* Exactly one of these will be live in the process image. */ +struct gcov_master __gcov_master = + {GCOV_VERSION, 0}; + +static void +gcov_exit (void) +{ + __gcov_dump_one (&__gcov_root); + if (__gcov_root.next) + __gcov_root.next->prev = __gcov_root.prev; + if (__gcov_root.prev) + __gcov_root.prev->next = __gcov_root.next; + else + __gcov_master.root = __gcov_root.next; +} + +/* Add a new object file onto the bb chain. Invoked automatically + when running an object file's global ctors. */ + +void +__gcov_init (struct gcov_info *info) +{ + if (!info->version || !info->n_functions) + return; + if (gcov_version (info, info->version, 0)) + { + if (!__gcov_root.list) + { + /* Add to master list and at exit function. */ + if (gcov_version (NULL, __gcov_master.version, "")) + { + __gcov_root.next = __gcov_master.root; + if (__gcov_master.root) + __gcov_master.root->prev = &__gcov_root; + __gcov_master.root = &__gcov_root; + } + atexit (gcov_exit); + } + + info->next = __gcov_root.list; + __gcov_root.list = info; + } +} +#endif /* !IN_GCOV_TOOL */ +#endif /* L_gcov */ +#endif /* inhibit_libc */ diff --git a/contrib/toolchain/gcc/5x/libgcc/libgcov-interface.c b/contrib/toolchain/gcc/5x/libgcc/libgcov-interface.c new file mode 100644 index 0000000000..3db237a6f8 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/libgcov-interface.c @@ -0,0 +1,317 @@ +/* Routines required for instrumenting a program. */ +/* Compile this one with gcc. */ +/* Copyright (C) 1989-2015 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 "libgcov.h" +#include "gthr.h" + +#if defined(inhibit_libc) + +#ifdef L_gcov_flush +void __gcov_flush (void) {} +#endif + +#ifdef L_gcov_reset +void __gcov_reset (void) {} +#endif + +#ifdef L_gcov_dump +void __gcov_dump (void) {} +#endif + +#else + +/* Some functions we want to bind in this dynamic object, but have an + overridable global alias. Unfortunately not all targets support + aliases, so we just have a forwarding function. That'll be tail + called, so the cost is a single jump instruction.*/ + +#define ALIAS_void_fn(src,dst) \ + void dst (void) \ + { src (); } + +extern __gthread_mutex_t __gcov_flush_mx ATTRIBUTE_HIDDEN; +extern __gthread_mutex_t __gcov_flush_mx ATTRIBUTE_HIDDEN; + +#ifdef L_gcov_flush +#ifdef __GTHREAD_MUTEX_INIT +__gthread_mutex_t __gcov_flush_mx = __GTHREAD_MUTEX_INIT; +#define init_mx_once() +#else +__gthread_mutex_t __gcov_flush_mx; + +static void +init_mx (void) +{ + __GTHREAD_MUTEX_INIT_FUNCTION (&__gcov_flush_mx); +} + +static void +init_mx_once (void) +{ + static __gthread_once_t once = __GTHREAD_ONCE_INIT; + __gthread_once (&once, init_mx); +} +#endif + +/* Called before fork or exec - write out profile information gathered so + far and reset it to zero. This avoids duplication or loss of the + profile information gathered so far. */ + +void +__gcov_flush (void) +{ + init_mx_once (); + __gthread_mutex_lock (&__gcov_flush_mx); + + __gcov_dump_int (); + __gcov_reset_int (); + + __gthread_mutex_unlock (&__gcov_flush_mx); +} + +#endif /* L_gcov_flush */ + +#ifdef L_gcov_reset + +/* Reset all counters to zero. */ + +static void +gcov_clear (const struct gcov_info *list) +{ + const struct gcov_info *gi_ptr; + + for (gi_ptr = list; gi_ptr; gi_ptr = gi_ptr->next) + { + unsigned f_ix; + + for (f_ix = 0; f_ix < gi_ptr->n_functions; f_ix++) + { + unsigned t_ix; + const struct gcov_fn_info *gfi_ptr = gi_ptr->functions[f_ix]; + + if (!gfi_ptr || gfi_ptr->key != gi_ptr) + continue; + const struct gcov_ctr_info *ci_ptr = gfi_ptr->ctrs; + for (t_ix = 0; t_ix != GCOV_COUNTERS; t_ix++) + { + if (!gi_ptr->merge[t_ix]) + continue; + + memset (ci_ptr->values, 0, sizeof (gcov_type) * ci_ptr->num); + ci_ptr++; + } + } + } +} + +/* Function that can be called from application to reset counters to zero, + in order to collect profile in region of interest. */ + +void +__gcov_reset_int (void) +{ + struct gcov_root *root; + + /* If we're compatible with the master, iterate over everything, + otherise just do us. */ + for (root = __gcov_master.version == GCOV_VERSION + ? __gcov_master.root : &__gcov_root; root; root = root->next) + { + gcov_clear (root->list); + root->dumped = 0; + } +} + +ALIAS_void_fn (__gcov_reset_int, __gcov_reset); + +#endif /* L_gcov_reset */ + +#ifdef L_gcov_dump +/* Function that can be called from application to write profile collected + so far, in order to collect profile in region of interest. */ + +void +__gcov_dump_int (void) +{ + struct gcov_root *root; + + /* If we're compatible with the master, iterate over everything, + otherise just do us. */ + for (root = __gcov_master.version == GCOV_VERSION + ? __gcov_master.root : &__gcov_root; root; root = root->next) + __gcov_dump_one (root); +} + +ALIAS_void_fn (__gcov_dump_int, __gcov_dump); + +#endif /* L_gcov_dump */ + +#ifdef L_gcov_fork +/* A wrapper for the fork function. Flushes the accumulated profiling data, so + that they are not counted twice. */ + +pid_t +__gcov_fork (void) +{ + pid_t pid; + __gcov_flush (); + pid = fork (); + if (pid == 0) + __GTHREAD_MUTEX_INIT_FUNCTION (&__gcov_flush_mx); + return pid; +} +#endif + +#ifdef L_gcov_execl +/* A wrapper for the execl function. Flushes the accumulated + profiling data, so that they are not lost. */ + +int +__gcov_execl (const char *path, char *arg, ...) +{ + va_list ap, aq; + unsigned i, length; + char **args; + + __gcov_flush (); + + va_start (ap, arg); + va_copy (aq, ap); + + length = 2; + while (va_arg (ap, char *)) + length++; + va_end (ap); + + args = (char **) alloca (length * sizeof (void *)); + args[0] = arg; + for (i = 1; i < length; i++) + args[i] = va_arg (aq, char *); + va_end (aq); + + return execv (path, args); +} +#endif + +#ifdef L_gcov_execlp +/* A wrapper for the execlp function. Flushes the accumulated + profiling data, so that they are not lost. */ + +int +__gcov_execlp (const char *path, char *arg, ...) +{ + va_list ap, aq; + unsigned i, length; + char **args; + + __gcov_flush (); + + va_start (ap, arg); + va_copy (aq, ap); + + length = 2; + while (va_arg (ap, char *)) + length++; + va_end (ap); + + args = (char **) alloca (length * sizeof (void *)); + args[0] = arg; + for (i = 1; i < length; i++) + args[i] = va_arg (aq, char *); + va_end (aq); + + return execvp (path, args); +} +#endif + +#ifdef L_gcov_execle +/* A wrapper for the execle function. Flushes the accumulated + profiling data, so that they are not lost. */ + +int +__gcov_execle (const char *path, char *arg, ...) +{ + va_list ap, aq; + unsigned i, length; + char **args; + char **envp; + + __gcov_flush (); + + va_start (ap, arg); + va_copy (aq, ap); + + length = 2; + while (va_arg (ap, char *)) + length++; + va_end (ap); + + args = (char **) alloca (length * sizeof (void *)); + args[0] = arg; + for (i = 1; i < length; i++) + args[i] = va_arg (aq, char *); + envp = va_arg (aq, char **); + va_end (aq); + + return execve (path, args, envp); +} +#endif + +#ifdef L_gcov_execv +/* A wrapper for the execv function. Flushes the accumulated + profiling data, so that they are not lost. */ + +int +__gcov_execv (const char *path, char *const argv[]) +{ + __gcov_flush (); + return execv (path, argv); +} +#endif + +#ifdef L_gcov_execvp +/* A wrapper for the execvp function. Flushes the accumulated + profiling data, so that they are not lost. */ + +int +__gcov_execvp (const char *path, char *const argv[]) +{ + __gcov_flush (); + return execvp (path, argv); +} +#endif + +#ifdef L_gcov_execve +/* A wrapper for the execve function. Flushes the accumulated + profiling data, so that they are not lost. */ + +int +__gcov_execve (const char *path, char *const argv[], char *const envp[]) +{ + __gcov_flush (); + return execve (path, argv, envp); +} +#endif +#endif /* inhibit_libc */ diff --git a/contrib/toolchain/gcc/5x/libgcc/libgcov-merge.c b/contrib/toolchain/gcc/5x/libgcc/libgcov-merge.c new file mode 100644 index 0000000000..bf6920cfd0 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/libgcov-merge.c @@ -0,0 +1,232 @@ +/* Routines required for instrumenting a program. */ +/* Compile this one with gcc. */ +/* Copyright (C) 1989-2015 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 "libgcov.h" + +#if defined(inhibit_libc) +/* If libc and its header files are not available, provide dummy functions. */ + +#ifdef L_gcov_merge_add +void __gcov_merge_add (gcov_type *counters __attribute__ ((unused)), + unsigned n_counters __attribute__ ((unused))) {} +#endif + +#ifdef L_gcov_merge_single +void __gcov_merge_single (gcov_type *counters __attribute__ ((unused)), + unsigned n_counters __attribute__ ((unused))) {} +#endif + +#ifdef L_gcov_merge_delta +void __gcov_merge_delta (gcov_type *counters __attribute__ ((unused)), + unsigned n_counters __attribute__ ((unused))) {} +#endif + +#else + +#ifdef L_gcov_merge_add +/* The profile merging function that just adds the counters. It is given + an array COUNTERS of N_COUNTERS old counters and it reads the same number + of counters from the gcov file. */ +void +__gcov_merge_add (gcov_type *counters, unsigned n_counters) +{ + for (; n_counters; counters++, n_counters--) + *counters += gcov_get_counter (); +} +#endif /* L_gcov_merge_add */ + +#ifdef L_gcov_merge_ior +/* The profile merging function that just adds the counters. It is given + an array COUNTERS of N_COUNTERS old counters and it reads the same number + of counters from the gcov file. */ +void +__gcov_merge_ior (gcov_type *counters, unsigned n_counters) +{ + for (; n_counters; counters++, n_counters--) + *counters |= gcov_get_counter_target (); +} +#endif + +#ifdef L_gcov_merge_time_profile +/* Time profiles are merged so that minimum from all valid (greater than zero) + is stored. There could be a fork that creates new counters. To have + the profile stable, we chosen to pick the smallest function visit time. */ +void +__gcov_merge_time_profile (gcov_type *counters, unsigned n_counters) +{ + unsigned int i; + gcov_type value; + + for (i = 0; i < n_counters; i++) + { + value = gcov_get_counter_target (); + + if (value && (!counters[i] || value < counters[i])) + counters[i] = value; + } +} +#endif /* L_gcov_merge_time_profile */ + +#ifdef L_gcov_merge_single +/* The profile merging function for choosing the most common value. + It is given an array COUNTERS of N_COUNTERS old counters and it + reads the same number of counters from the gcov file. The counters + are split into 3-tuples where the members of the tuple have + meanings: + + -- the stored candidate on the most common value of the measured entity + -- counter + -- total number of evaluations of the value */ +void +__gcov_merge_single (gcov_type *counters, unsigned n_counters) +{ + unsigned i, n_measures; + gcov_type value, counter, all; + + gcc_assert (!(n_counters % 3)); + n_measures = n_counters / 3; + for (i = 0; i < n_measures; i++, counters += 3) + { + value = gcov_get_counter_target (); + counter = gcov_get_counter (); + all = gcov_get_counter (); + + if (counters[0] == value) + counters[1] += counter; + else if (counter > counters[1]) + { + counters[0] = value; + counters[1] = counter - counters[1]; + } + else + counters[1] -= counter; + counters[2] += all; + } +} +#endif /* L_gcov_merge_single */ + +#ifdef L_gcov_merge_delta +/* The profile merging function for choosing the most common + difference between two consecutive evaluations of the value. It is + given an array COUNTERS of N_COUNTERS old counters and it reads the + same number of counters from the gcov file. The counters are split + into 4-tuples where the members of the tuple have meanings: + + -- the last value of the measured entity + -- the stored candidate on the most common difference + -- counter + -- total number of evaluations of the value */ +void +__gcov_merge_delta (gcov_type *counters, unsigned n_counters) +{ + unsigned i, n_measures; + gcov_type value, counter, all; + + gcc_assert (!(n_counters % 4)); + n_measures = n_counters / 4; + for (i = 0; i < n_measures; i++, counters += 4) + { + /* last = */ gcov_get_counter (); + value = gcov_get_counter_target (); + counter = gcov_get_counter (); + all = gcov_get_counter (); + + if (counters[1] == value) + counters[2] += counter; + else if (counter > counters[2]) + { + counters[1] = value; + counters[2] = counter - counters[2]; + } + else + counters[2] -= counter; + counters[3] += all; + } +} +#endif /* L_gcov_merge_delta */ + +#ifdef L_gcov_merge_icall_topn +/* The profile merging function used for merging indirect call counts + This function is given array COUNTERS of N_COUNTERS old counters and it + reads the same number of counters from the gcov file. */ + +void +__gcov_merge_icall_topn (gcov_type *counters, unsigned n_counters) +{ + unsigned i, j, k, m; + + gcc_assert (!(n_counters % GCOV_ICALL_TOPN_NCOUNTS)); + for (i = 0; i < n_counters; i += GCOV_ICALL_TOPN_NCOUNTS) + { + gcov_type *value_array = &counters[i + 1]; + unsigned tmp_size = 2 * (GCOV_ICALL_TOPN_NCOUNTS - 1); + gcov_type *tmp_array + = (gcov_type *) alloca (tmp_size * sizeof (gcov_type)); + + for (j = 0; j < tmp_size; j++) + tmp_array[j] = 0; + + for (j = 0; j < GCOV_ICALL_TOPN_NCOUNTS - 1; j += 2) + { + tmp_array[j] = value_array[j]; + tmp_array[j + 1] = value_array [j + 1]; + } + + /* Skip the number_of_eviction entry. */ + gcov_get_counter (); + for (k = 0; k < GCOV_ICALL_TOPN_NCOUNTS - 1; k += 2) + { + int found = 0; + gcov_type global_id = gcov_get_counter_target (); + gcov_type call_count = gcov_get_counter (); + for (m = 0; m < j; m += 2) + { + if (tmp_array[m] == global_id) + { + found = 1; + tmp_array[m + 1] += call_count; + break; + } + } + if (!found) + { + tmp_array[j] = global_id; + tmp_array[j + 1] = call_count; + j += 2; + } + } + /* Now sort the temp array */ + gcov_sort_n_vals (tmp_array, j); + + /* Now copy back the top half of the temp array */ + for (k = 0; k < GCOV_ICALL_TOPN_NCOUNTS - 1; k += 2) + { + value_array[k] = tmp_array[k]; + value_array[k + 1] = tmp_array[k + 1]; + } + } +} +#endif /* L_gcov_merge_icall_topn */ +#endif /* inhibit_libc */ diff --git a/contrib/toolchain/gcc/5x/libgcc/libgcov-profiler.c b/contrib/toolchain/gcc/5x/libgcc/libgcov-profiler.c new file mode 100644 index 0000000000..b69c5243e6 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/libgcov-profiler.c @@ -0,0 +1,336 @@ +/* Routines required for instrumenting a program. */ +/* Compile this one with gcc. */ +/* Copyright (C) 1989-2015 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 "libgcov.h" +#if !defined(inhibit_libc) + +#ifdef L_gcov_interval_profiler +/* If VALUE is in interval , then increases the + corresponding counter in COUNTERS. If the VALUE is above or below + the interval, COUNTERS[STEPS] or COUNTERS[STEPS + 1] is increased + instead. */ + +void +__gcov_interval_profiler (gcov_type *counters, gcov_type value, + int start, unsigned steps) +{ + gcov_type delta = value - start; + if (delta < 0) + counters[steps + 1]++; + else if (delta >= steps) + counters[steps]++; + else + counters[delta]++; +} +#endif + +#ifdef L_gcov_pow2_profiler +/* If VALUE is a power of two, COUNTERS[1] is incremented. Otherwise + COUNTERS[0] is incremented. */ + +void +__gcov_pow2_profiler (gcov_type *counters, gcov_type value) +{ + if (value & (value - 1)) + counters[0]++; + else + counters[1]++; +} +#endif + +/* Tries to determine the most common value among its inputs. Checks if the + value stored in COUNTERS[0] matches VALUE. If this is the case, COUNTERS[1] + is incremented. If this is not the case and COUNTERS[1] is not zero, + COUNTERS[1] is decremented. Otherwise COUNTERS[1] is set to one and + VALUE is stored to COUNTERS[0]. This algorithm guarantees that if this + function is called more than 50% of the time with one value, this value + will be in COUNTERS[0] in the end. + + In any case, COUNTERS[2] is incremented. */ + +static inline void +__gcov_one_value_profiler_body (gcov_type *counters, gcov_type value) +{ + if (value == counters[0]) + counters[1]++; + else if (counters[1] == 0) + { + counters[1] = 1; + counters[0] = value; + } + else + counters[1]--; + counters[2]++; +} + +#ifdef L_gcov_one_value_profiler +void +__gcov_one_value_profiler (gcov_type *counters, gcov_type value) +{ + __gcov_one_value_profiler_body (counters, value); +} +#endif + +#ifdef L_gcov_indirect_call_topn_profiler +/* Tries to keep track the most frequent N values in the counters where + N is specified by parameter TOPN_VAL. To track top N values, 2*N counter + entries are used. + counter[0] --- the accumative count of the number of times one entry in + in the counters gets evicted/replaced due to limited capacity. + When this value reaches a threshold, the bottom N values are + cleared. + counter[1] through counter[2*N] records the top 2*N values collected so far. + Each value is represented by two entries: count[2*i+1] is the ith value, and + count[2*i+2] is the number of times the value is seen. */ + +static void +__gcov_topn_value_profiler_body (gcov_type *counters, gcov_type value) +{ + unsigned i, found = 0, have_zero_count = 0; + gcov_type *entry; + gcov_type *lfu_entry = &counters[1]; + gcov_type *value_array = &counters[1]; + gcov_type *num_eviction = &counters[0]; + gcov_unsigned_t topn_val = GCOV_ICALL_TOPN_VAL; + + /* There are 2*topn_val values tracked, each value takes two slots in the + counter array. */ + for (i = 0; i < (topn_val << 2); i += 2) + { + entry = &value_array[i]; + if (entry[0] == value) + { + entry[1]++ ; + found = 1; + break; + } + else if (entry[1] == 0) + { + lfu_entry = entry; + have_zero_count = 1; + } + else if (entry[1] < lfu_entry[1]) + lfu_entry = entry; + } + + if (found) + return; + + /* lfu_entry is either an empty entry or an entry + with lowest count, which will be evicted. */ + lfu_entry[0] = value; + lfu_entry[1] = 1; + +#define GCOV_ICALL_COUNTER_CLEAR_THRESHOLD 3000 + + /* Too many evictions -- time to clear bottom entries to + avoid hot values bumping each other out. */ + if (!have_zero_count + && ++*num_eviction >= GCOV_ICALL_COUNTER_CLEAR_THRESHOLD) + { + unsigned i, j; + gcov_type *p, minv; + gcov_type* tmp_cnts + = (gcov_type *)alloca (topn_val * sizeof (gcov_type)); + + *num_eviction = 0; + + for (i = 0; i < topn_val; i++) + tmp_cnts[i] = 0; + + /* Find the largest topn_val values from the group of + 2*topn_val values and put them into tmp_cnts. */ + + for (i = 0; i < 2 * topn_val; i += 2) + { + p = 0; + for (j = 0; j < topn_val; j++) + { + if (!p || tmp_cnts[j] < *p) + p = &tmp_cnts[j]; + } + if (value_array[i + 1] > *p) + *p = value_array[i + 1]; + } + + minv = tmp_cnts[0]; + for (j = 1; j < topn_val; j++) + { + if (tmp_cnts[j] < minv) + minv = tmp_cnts[j]; + } + /* Zero out low value entries. */ + for (i = 0; i < 2 * topn_val; i += 2) + { + if (value_array[i + 1] < minv) + { + value_array[i] = 0; + value_array[i + 1] = 0; + } + } + } +} + +/* These two variables are used to actually track caller and callee. Keep + them in TLS memory so races are not common (they are written to often). + The variables are set directly by GCC instrumented code, so declaration + here must match one in tree-profile.c. */ + +#if defined(HAVE_CC_TLS) && !defined (USE_EMUTLS) +__thread +#endif +gcov_type *__gcov_indirect_call_topn_counters ATTRIBUTE_HIDDEN; + +#if defined(HAVE_CC_TLS) && !defined (USE_EMUTLS) +__thread +#endif +void *__gcov_indirect_call_topn_callee ATTRIBUTE_HIDDEN; + +#ifdef TARGET_VTABLE_USES_DESCRIPTORS +#define VTABLE_USES_DESCRIPTORS 1 +#else +#define VTABLE_USES_DESCRIPTORS 0 +#endif + +/* This fucntion is instrumented at function entry to track topn indirect + calls to CUR_FUNC. */ + +void +__gcov_indirect_call_topn_profiler (gcov_type value, void* cur_func) +{ + void *callee_func = __gcov_indirect_call_topn_callee; + /* If the C++ virtual tables contain function descriptors then one + function may have multiple descriptors and we need to dereference + the descriptors to see if they point to the same function. */ + if (cur_func == callee_func + || (VTABLE_USES_DESCRIPTORS && callee_func + && *(void **) cur_func == *(void **) callee_func)) + __gcov_topn_value_profiler_body (__gcov_indirect_call_topn_counters, value); +} +#endif + +#ifdef L_gcov_indirect_call_profiler +/* This function exist only for workaround of binutils bug 14342. + Once this compatibility hack is obsolette, it can be removed. */ + +/* By default, the C++ compiler will use function addresses in the + vtable entries. Setting TARGET_VTABLE_USES_DESCRIPTORS to nonzero + tells the compiler to use function descriptors instead. The value + of this macro says how many words wide the descriptor is (normally 2). + + It is assumed that the address of a function descriptor may be treated + as a pointer to a function. */ + +/* Tries to determine the most common value among its inputs. */ +void +__gcov_indirect_call_profiler (gcov_type* counter, gcov_type value, + void* cur_func, void* callee_func) +{ + /* If the C++ virtual tables contain function descriptors then one + function may have multiple descriptors and we need to dereference + the descriptors to see if they point to the same function. */ + if (cur_func == callee_func + || (__LIBGCC_VTABLE_USES_DESCRIPTORS__ && callee_func + && *(void **) cur_func == *(void **) callee_func)) + __gcov_one_value_profiler_body (counter, value); +} +#endif + +#ifdef L_gcov_indirect_call_profiler_v2 + +/* These two variables are used to actually track caller and callee. Keep + them in TLS memory so races are not common (they are written to often). + The variables are set directly by GCC instrumented code, so declaration + here must match one in tree-profile.c */ + +#if defined(HAVE_CC_TLS) && !defined (USE_EMUTLS) +__thread +#endif +void * __gcov_indirect_call_callee; +#if defined(HAVE_CC_TLS) && !defined (USE_EMUTLS) +__thread +#endif +gcov_type * __gcov_indirect_call_counters; + +/* By default, the C++ compiler will use function addresses in the + vtable entries. Setting TARGET_VTABLE_USES_DESCRIPTORS to nonzero + tells the compiler to use function descriptors instead. The value + of this macro says how many words wide the descriptor is (normally 2). + + It is assumed that the address of a function descriptor may be treated + as a pointer to a function. */ + +/* Tries to determine the most common value among its inputs. */ +void +__gcov_indirect_call_profiler_v2 (gcov_type value, void* cur_func) +{ + /* If the C++ virtual tables contain function descriptors then one + function may have multiple descriptors and we need to dereference + the descriptors to see if they point to the same function. */ + if (cur_func == __gcov_indirect_call_callee + || (__LIBGCC_VTABLE_USES_DESCRIPTORS__ && __gcov_indirect_call_callee + && *(void **) cur_func == *(void **) __gcov_indirect_call_callee)) + __gcov_one_value_profiler_body (__gcov_indirect_call_counters, value); +} +#endif + +#ifdef L_gcov_time_profiler + +/* Counter for first visit of each function. */ +static gcov_type function_counter; + +/* Sets corresponding COUNTERS if there is no value. */ + +void +__gcov_time_profiler (gcov_type* counters) +{ + if (!counters[0]) + counters[0] = ++function_counter; +} +#endif + +#ifdef L_gcov_average_profiler +/* Increase corresponding COUNTER by VALUE. FIXME: Perhaps we want + to saturate up. */ + +void +__gcov_average_profiler (gcov_type *counters, gcov_type value) +{ + counters[0] += value; + counters[1] ++; +} +#endif + +#ifdef L_gcov_ior_profiler +/* Bitwise-OR VALUE into COUNTER. */ + +void +__gcov_ior_profiler (gcov_type *counters, gcov_type value) +{ + *counters |= value; +} +#endif + +#endif /* inhibit_libc */ diff --git a/contrib/toolchain/gcc/5x/libgcc/libgcov-util.c b/contrib/toolchain/gcc/5x/libgcc/libgcov-util.c new file mode 100644 index 0000000000..d76c2eb485 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/libgcov-util.c @@ -0,0 +1,1408 @@ +/* Utility functions for reading gcda files into in-memory + gcov_info structures and offline profile processing. */ +/* Copyright (C) 2014-2015 Free Software Foundation, Inc. + Contributed by Rong Xu . + +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 IN_GCOV_TOOL 1 + +#include "libgcov.h" +#include "intl.h" +#include "diagnostic.h" +#include "version.h" +#include "demangle.h" + +/* Borrowed from basic-block.h. */ +#define RDIV(X,Y) (((X) + (Y) / 2) / (Y)) + +extern gcov_position_t gcov_position(); +extern int gcov_is_error(); + +/* Verbose mode for debug. */ +static int verbose; + +/* Set verbose flag. */ +void gcov_set_verbose (void) +{ + verbose = 1; +} + +/* The following part is to read Gcda and reconstruct GCOV_INFO. */ + +#include "obstack.h" +#include +#ifdef HAVE_FTW_H +#include +#endif + +static void tag_function (unsigned, unsigned); +static void tag_blocks (unsigned, unsigned); +static void tag_arcs (unsigned, unsigned); +static void tag_lines (unsigned, unsigned); +static void tag_counters (unsigned, unsigned); +static void tag_summary (unsigned, unsigned); + +/* The gcov_info for the first module. */ +static struct gcov_info *curr_gcov_info; +/* The gcov_info being processed. */ +static struct gcov_info *gcov_info_head; +/* This variable contains all the functions in current module. */ +static struct obstack fn_info; +/* The function being processed. */ +static struct gcov_fn_info *curr_fn_info; +/* The number of functions seen so far. */ +static unsigned num_fn_info; +/* This variable contains all the counters for current module. */ +static int k_ctrs_mask[GCOV_COUNTERS]; +/* The kind of counters that have been seen. */ +static struct gcov_ctr_info k_ctrs[GCOV_COUNTERS]; +/* Number of kind of counters that have been seen. */ +static int k_ctrs_types; + +/* Merge functions for counters. */ +#define DEF_GCOV_COUNTER(COUNTER, NAME, FN_TYPE) __gcov_merge ## FN_TYPE, +static gcov_merge_fn ctr_merge_functions[GCOV_COUNTERS] = { +#include "gcov-counter.def" +}; +#undef DEF_GCOV_COUNTER + +/* Set the ctrs field in gcov_fn_info object FN_INFO. */ + +static void +set_fn_ctrs (struct gcov_fn_info *fn_info) +{ + int j = 0, i; + + for (i = 0; i < GCOV_COUNTERS; i++) + { + if (k_ctrs_mask[i] == 0) + continue; + fn_info->ctrs[j].num = k_ctrs[i].num; + fn_info->ctrs[j].values = k_ctrs[i].values; + j++; + } + if (k_ctrs_types == 0) + k_ctrs_types = j; + else + gcc_assert (j == k_ctrs_types); +} + +/* For each tag in gcda file, we have an entry here. + TAG is the tag value; NAME is the tag name; and + PROC is the handler function. */ + +typedef struct tag_format +{ + unsigned tag; + char const *name; + void (*proc) (unsigned, unsigned); +} tag_format_t; + +/* Handler table for various Tags. */ + +static const tag_format_t tag_table[] = +{ + {0, "NOP", NULL}, + {0, "UNKNOWN", NULL}, + {0, "COUNTERS", tag_counters}, + {GCOV_TAG_FUNCTION, "FUNCTION", tag_function}, + {GCOV_TAG_BLOCKS, "BLOCKS", tag_blocks}, + {GCOV_TAG_ARCS, "ARCS", tag_arcs}, + {GCOV_TAG_LINES, "LINES", tag_lines}, + {GCOV_TAG_OBJECT_SUMMARY, "OBJECT_SUMMARY", tag_summary}, + {GCOV_TAG_PROGRAM_SUMMARY, "PROGRAM_SUMMARY", tag_summary}, + {0, NULL, NULL} +}; + +/* Handler for reading function tag. */ + +static void +tag_function (unsigned tag ATTRIBUTE_UNUSED, unsigned length ATTRIBUTE_UNUSED) +{ + int i; + + /* write out previous fn_info. */ + if (num_fn_info) + { + set_fn_ctrs (curr_fn_info); + obstack_ptr_grow (&fn_info, curr_fn_info); + } + + /* Here we over allocate a bit, using GCOV_COUNTERS instead of the actual active + counter types. */ + curr_fn_info = (struct gcov_fn_info *) xcalloc (sizeof (struct gcov_fn_info) + + GCOV_COUNTERS * sizeof (struct gcov_ctr_info), 1); + + for (i = 0; i < GCOV_COUNTERS; i++) + k_ctrs[i].num = 0; + k_ctrs_types = 0; + + curr_fn_info->key = curr_gcov_info; + curr_fn_info->ident = gcov_read_unsigned (); + curr_fn_info->lineno_checksum = gcov_read_unsigned (); + curr_fn_info->cfg_checksum = gcov_read_unsigned (); + num_fn_info++; + + if (verbose) + fnotice (stdout, "tag one function id=%d\n", curr_fn_info->ident); +} + +/* Handler for reading block tag. */ + +static void +tag_blocks (unsigned tag ATTRIBUTE_UNUSED, unsigned length ATTRIBUTE_UNUSED) +{ + /* TBD: gcov-tool currently does not handle gcno files. Assert here. */ + gcc_unreachable (); +} + +/* Handler for reading flow arc tag. */ + +static void +tag_arcs (unsigned tag ATTRIBUTE_UNUSED, unsigned length ATTRIBUTE_UNUSED) +{ + /* TBD: gcov-tool currently does not handle gcno files. Assert here. */ + gcc_unreachable (); +} + +/* Handler for reading line tag. */ + +static void +tag_lines (unsigned tag ATTRIBUTE_UNUSED, unsigned length ATTRIBUTE_UNUSED) +{ + /* TBD: gcov-tool currently does not handle gcno files. Assert here. */ + gcc_unreachable (); +} + +/* Handler for reading counters array tag with value as TAG and length of LENGTH. */ + +static void +tag_counters (unsigned tag, unsigned length) +{ + unsigned n_counts = GCOV_TAG_COUNTER_NUM (length); + gcov_type *values; + unsigned ix; + unsigned tag_ix; + + tag_ix = GCOV_COUNTER_FOR_TAG (tag); + gcc_assert (tag_ix < GCOV_COUNTERS); + k_ctrs_mask [tag_ix] = 1; + gcc_assert (k_ctrs[tag_ix].num == 0); + k_ctrs[tag_ix].num = n_counts; + + k_ctrs[tag_ix].values = values = (gcov_type *) xmalloc (n_counts * sizeof (gcov_type)); + gcc_assert (values); + + for (ix = 0; ix != n_counts; ix++) + values[ix] = gcov_read_counter (); +} + +/* Handler for reading summary tag. */ + +static void +tag_summary (unsigned tag ATTRIBUTE_UNUSED, unsigned length ATTRIBUTE_UNUSED) +{ + struct gcov_summary summary; + + gcov_read_summary (&summary); +} + +/* This function is called at the end of reading a gcda file. + It flushes the contents in curr_fn_info to gcov_info object OBJ_INFO. */ + +static void +read_gcda_finalize (struct gcov_info *obj_info) +{ + int i; + + set_fn_ctrs (curr_fn_info); + obstack_ptr_grow (&fn_info, curr_fn_info); + + /* We set the following fields: merge, n_functions, and functions. */ + obj_info->n_functions = num_fn_info; + obj_info->functions = (const struct gcov_fn_info**) obstack_finish (&fn_info); + + /* wrap all the counter array. */ + for (i=0; i< GCOV_COUNTERS; i++) + { + if (k_ctrs_mask[i]) + obj_info->merge[i] = ctr_merge_functions[i]; + } +} + +/* Read the content of a gcda file FILENAME, and return a gcov_info data structure. + Program level summary CURRENT_SUMMARY will also be updated. */ + +static struct gcov_info * +read_gcda_file (const char *filename) +{ + unsigned tags[4]; + unsigned depth = 0; + unsigned magic, version; + struct gcov_info *obj_info; + int i; + + for (i=0; i< GCOV_COUNTERS; i++) + k_ctrs_mask[i] = 0; + k_ctrs_types = 0; + + if (!gcov_open (filename)) + { + fnotice (stderr, "%s:cannot open\n", filename); + return NULL; + } + + /* Read magic. */ + magic = gcov_read_unsigned (); + if (magic != GCOV_DATA_MAGIC) + { + fnotice (stderr, "%s:not a gcov data file\n", filename); + gcov_close (); + return NULL; + } + + /* Read version. */ + version = gcov_read_unsigned (); + if (version != GCOV_VERSION) + { + fnotice (stderr, "%s:incorrect gcov version %d vs %d \n", filename, version, GCOV_VERSION); + gcov_close (); + return NULL; + } + + /* Instantiate a gcov_info object. */ + curr_gcov_info = obj_info = (struct gcov_info *) xcalloc (sizeof (struct gcov_info) + + sizeof (struct gcov_ctr_info) * GCOV_COUNTERS, 1); + + obj_info->version = version; + obstack_init (&fn_info); + num_fn_info = 0; + curr_fn_info = 0; + { + size_t len = strlen (filename) + 1; + char *str_dup = (char*) xmalloc (len); + + memcpy (str_dup, filename, len); + obj_info->filename = str_dup; + } + + /* Read stamp. */ + obj_info->stamp = gcov_read_unsigned (); + + while (1) + { + gcov_position_t base; + unsigned tag, length; + tag_format_t const *format; + unsigned tag_depth; + int error; + unsigned mask; + + tag = gcov_read_unsigned (); + if (!tag) + break; + length = gcov_read_unsigned (); + base = gcov_position (); + mask = GCOV_TAG_MASK (tag) >> 1; + for (tag_depth = 4; mask; mask >>= 8) + { + if (((mask & 0xff) != 0xff)) + { + warning (0, "%s:tag `%x' is invalid\n", filename, tag); + break; + } + tag_depth--; + } + for (format = tag_table; format->name; format++) + if (format->tag == tag) + goto found; + format = &tag_table[GCOV_TAG_IS_COUNTER (tag) ? 2 : 1]; + found:; + if (tag) + { + if (depth && depth < tag_depth) + { + if (!GCOV_TAG_IS_SUBTAG (tags[depth - 1], tag)) + warning (0, "%s:tag `%x' is incorrectly nested\n", + filename, tag); + } + depth = tag_depth; + tags[depth - 1] = tag; + } + + if (format->proc) + { + unsigned long actual_length; + + (*format->proc) (tag, length); + + actual_length = gcov_position () - base; + if (actual_length > length) + warning (0, "%s:record size mismatch %lu bytes overread\n", + filename, actual_length - length); + else if (length > actual_length) + warning (0, "%s:record size mismatch %lu bytes unread\n", + filename, length - actual_length); + } + + gcov_sync (base, length); + if ((error = gcov_is_error ())) + { + warning (0, error < 0 ? "%s:counter overflow at %lu\n" : + "%s:read error at %lu\n", filename, + (long unsigned) gcov_position ()); + break; + } + } + + read_gcda_finalize (obj_info); + gcov_close (); + + return obj_info; +} + +#ifdef HAVE_FTW_H +/* This will be called by ftw(). It opens and read a gcda file FILENAME. + Return a non-zero value to stop the tree walk. */ + +static int +ftw_read_file (const char *filename, + const struct stat *status ATTRIBUTE_UNUSED, + int type) +{ + int filename_len; + int suffix_len; + struct gcov_info *obj_info; + + /* Only read regular files. */ + if (type != FTW_F) + return 0; + + filename_len = strlen (filename); + suffix_len = strlen (GCOV_DATA_SUFFIX); + + if (filename_len <= suffix_len) + return 0; + + if (strcmp(filename + filename_len - suffix_len, GCOV_DATA_SUFFIX)) + return 0; + + if (verbose) + fnotice (stderr, "reading file: %s\n", filename); + + obj_info = read_gcda_file (filename); + if (!obj_info) + return 0; + + obj_info->next = gcov_info_head; + gcov_info_head = obj_info; + + return 0; +} +#endif + +/* Initializer for reading a profile dir. */ + +static inline void +read_profile_dir_init (void) +{ + gcov_info_head = 0; +} + +/* Driver for read a profile directory and convert into gcov_info list in memory. + Return NULL on error, + Return the head of gcov_info list on success. */ + +struct gcov_info * +gcov_read_profile_dir (const char* dir_name, int recompute_summary ATTRIBUTE_UNUSED) +{ + char *pwd; + int ret; + + read_profile_dir_init (); + + if (access (dir_name, R_OK) != 0) + { + fnotice (stderr, "cannot access directory %s\n", dir_name); + return NULL; + } + pwd = getcwd (NULL, 0); + gcc_assert (pwd); + ret = chdir (dir_name); + if (ret !=0) + { + fnotice (stderr, "%s is not a directory\n", dir_name); + return NULL; + } +#ifdef HAVE_FTW_H + ftw (".", ftw_read_file, 50); +#endif + ret = chdir (pwd); + free (pwd); + + + return gcov_info_head;; +} + +/* This part of the code is to merge profile counters. These + variables are set in merge_wrapper and to be used by + global function gcov_read_counter_mem() and gcov_get_merge_weight. */ + +/* We save the counter value address to this variable. */ +static gcov_type *gcov_value_buf; + +/* The number of counter values to be read by current merging. */ +static gcov_unsigned_t gcov_value_buf_size; + +/* The index of counter values being read. */ +static gcov_unsigned_t gcov_value_buf_pos; + +/* The weight of current merging. */ +static unsigned gcov_merge_weight; + +/* Read a counter value from gcov_value_buf array. */ + +gcov_type +gcov_read_counter_mem (void) +{ + gcov_type ret; + gcc_assert (gcov_value_buf_pos < gcov_value_buf_size); + ret = *(gcov_value_buf + gcov_value_buf_pos); + ++gcov_value_buf_pos; + return ret; +} + +/* Return the recorded merge weight. */ + +unsigned +gcov_get_merge_weight (void) +{ + return gcov_merge_weight; +} + +/* A wrapper function for merge functions. It sets up the + value buffer and weights and then calls the merge function. */ + +static void +merge_wrapper (gcov_merge_fn f, gcov_type *v1, gcov_unsigned_t n, + gcov_type *v2, unsigned w) +{ + gcov_value_buf = v2; + gcov_value_buf_pos = 0; + gcov_value_buf_size = n; + gcov_merge_weight = w; + (*f) (v1, n); +} + +/* Offline tool to manipulate profile data. + This tool targets on matched profiles. But it has some tolerance on + unmatched profiles. + When merging p1 to p2 (p2 is the dst), + * m.gcda in p1 but not in p2: append m.gcda to p2 with specified weight; + emit warning + * m.gcda in p2 but not in p1: keep m.gcda in p2 and multiply by + specified weight; emit warning. + * m.gcda in both p1 and p2: + ** p1->m.gcda->f checksum matches p2->m.gcda->f: simple merge. + ** p1->m.gcda->f checksum does not matches p2->m.gcda->f: keep + p2->m.gcda->f and + drop p1->m.gcda->f. A warning is emitted. */ + +/* Add INFO2's counter to INFO1, multiplying by weight W. */ + +static int +gcov_merge (struct gcov_info *info1, struct gcov_info *info2, int w) +{ + unsigned f_ix; + unsigned n_functions = info1->n_functions; + int has_mismatch = 0; + + gcc_assert (info2->n_functions == n_functions); + for (f_ix = 0; f_ix < n_functions; f_ix++) + { + unsigned t_ix; + const struct gcov_fn_info *gfi_ptr1 = info1->functions[f_ix]; + const struct gcov_fn_info *gfi_ptr2 = info2->functions[f_ix]; + const struct gcov_ctr_info *ci_ptr1, *ci_ptr2; + + if (!gfi_ptr1 || gfi_ptr1->key != info1) + continue; + if (!gfi_ptr2 || gfi_ptr2->key != info2) + continue; + + if (gfi_ptr1->cfg_checksum != gfi_ptr2->cfg_checksum) + { + fnotice (stderr, "in %s, cfg_checksum mismatch, skipping\n", + info1->filename); + has_mismatch = 1; + continue; + } + ci_ptr1 = gfi_ptr1->ctrs; + ci_ptr2 = gfi_ptr2->ctrs; + for (t_ix = 0; t_ix != GCOV_COUNTERS; t_ix++) + { + gcov_merge_fn merge1 = info1->merge[t_ix]; + gcov_merge_fn merge2 = info2->merge[t_ix]; + + gcc_assert (merge1 == merge2); + if (!merge1) + continue; + gcc_assert (ci_ptr1->num == ci_ptr2->num); + merge_wrapper (merge1, ci_ptr1->values, ci_ptr1->num, ci_ptr2->values, w); + ci_ptr1++; + ci_ptr2++; + } + } + + return has_mismatch; +} + +/* Find and return the match gcov_info object for INFO from ARRAY. + SIZE is the length of ARRAY. + Return NULL if there is no match. */ + +static struct gcov_info * +find_match_gcov_info (struct gcov_info **array, int size, + struct gcov_info *info) +{ + struct gcov_info *gi_ptr; + struct gcov_info *ret = NULL; + int i; + + for (i = 0; i < size; i++) + { + gi_ptr = array[i]; + if (gi_ptr == 0) + continue; + if (!strcmp (gi_ptr->filename, info->filename)) + { + ret = gi_ptr; + array[i] = 0; + break; + } + } + + if (ret && ret->n_functions != info->n_functions) + { + fnotice (stderr, "mismatched profiles in %s (%d functions" + " vs %d functions)\n", + ret->filename, + ret->n_functions, + info->n_functions); + ret = NULL; + } + return ret; +} + +/* Merge the list of gcov_info objects from SRC_PROFILE to TGT_PROFILE. + Return 0 on success: without mismatch. + Reutrn 1 on error. */ + +int +gcov_profile_merge (struct gcov_info *tgt_profile, struct gcov_info *src_profile, + int w1, int w2) +{ + struct gcov_info *gi_ptr; + struct gcov_info **tgt_infos; + struct gcov_info *tgt_tail; + struct gcov_info **in_src_not_tgt; + unsigned tgt_cnt = 0, src_cnt = 0; + unsigned unmatch_info_cnt = 0; + unsigned int i; + + for (gi_ptr = tgt_profile; gi_ptr; gi_ptr = gi_ptr->next) + tgt_cnt++; + for (gi_ptr = src_profile; gi_ptr; gi_ptr = gi_ptr->next) + src_cnt++; + tgt_infos = (struct gcov_info **) xmalloc (sizeof (struct gcov_info *) + * tgt_cnt); + gcc_assert (tgt_infos); + in_src_not_tgt = (struct gcov_info **) xmalloc (sizeof (struct gcov_info *) + * src_cnt); + gcc_assert (in_src_not_tgt); + + for (gi_ptr = tgt_profile, i = 0; gi_ptr; gi_ptr = gi_ptr->next, i++) + tgt_infos[i] = gi_ptr; + + tgt_tail = tgt_infos[tgt_cnt - 1]; + + /* First pass on tgt_profile, we multiply w1 to all counters. */ + if (w1 > 1) + { + for (i = 0; i < tgt_cnt; i++) + gcov_merge (tgt_infos[i], tgt_infos[i], w1-1); + } + + /* Second pass, add src_profile to the tgt_profile. */ + for (gi_ptr = src_profile; gi_ptr; gi_ptr = gi_ptr->next) + { + struct gcov_info *gi_ptr1; + + gi_ptr1 = find_match_gcov_info (tgt_infos, tgt_cnt, gi_ptr); + if (gi_ptr1 == NULL) + { + in_src_not_tgt[unmatch_info_cnt++] = gi_ptr; + continue; + } + gcov_merge (gi_ptr1, gi_ptr, w2); + } + + /* For modules in src but not in tgt. We adjust the counter and append. */ + for (i = 0; i < unmatch_info_cnt; i++) + { + gi_ptr = in_src_not_tgt[i]; + gcov_merge (gi_ptr, gi_ptr, w2 - 1); + tgt_tail->next = gi_ptr; + tgt_tail = gi_ptr; + } + + return 0; +} + +typedef gcov_type (*counter_op_fn) (gcov_type, void*, void*); + +/* Performing FN upon arc counters. */ + +static void +__gcov_add_counter_op (gcov_type *counters, unsigned n_counters, + counter_op_fn fn, void *data1, void *data2) +{ + for (; n_counters; counters++, n_counters--) + { + gcov_type val = *counters; + *counters = fn(val, data1, data2); + } +} + +/* Performing FN upon ior counters. */ + +static void +__gcov_ior_counter_op (gcov_type *counters ATTRIBUTE_UNUSED, + unsigned n_counters ATTRIBUTE_UNUSED, + counter_op_fn fn ATTRIBUTE_UNUSED, + void *data1 ATTRIBUTE_UNUSED, + void *data2 ATTRIBUTE_UNUSED) +{ + /* Do nothing. */ +} + +/* Performing FN upon time-profile counters. */ + +static void +__gcov_time_profile_counter_op (gcov_type *counters ATTRIBUTE_UNUSED, + unsigned n_counters ATTRIBUTE_UNUSED, + counter_op_fn fn ATTRIBUTE_UNUSED, + void *data1 ATTRIBUTE_UNUSED, + void *data2 ATTRIBUTE_UNUSED) +{ + /* Do nothing. */ +} + +/* Performaing FN upon delta counters. */ + +static void +__gcov_delta_counter_op (gcov_type *counters, unsigned n_counters, + counter_op_fn fn, void *data1, void *data2) +{ + unsigned i, n_measures; + + gcc_assert (!(n_counters % 4)); + n_measures = n_counters / 4; + for (i = 0; i < n_measures; i++, counters += 4) + { + counters[2] = fn (counters[2], data1, data2); + counters[3] = fn (counters[3], data1, data2); + } +} + +/* Performing FN upon single counters. */ + +static void +__gcov_single_counter_op (gcov_type *counters, unsigned n_counters, + counter_op_fn fn, void *data1, void *data2) +{ + unsigned i, n_measures; + + gcc_assert (!(n_counters % 3)); + n_measures = n_counters / 3; + for (i = 0; i < n_measures; i++, counters += 3) + { + counters[1] = fn (counters[1], data1, data2); + counters[2] = fn (counters[2], data1, data2); + } +} + +/* Performing FN upon indirect-call profile counters. */ + +static void +__gcov_icall_topn_counter_op (gcov_type *counters, unsigned n_counters, + counter_op_fn fn, void *data1, void *data2) +{ + unsigned i; + + gcc_assert (!(n_counters % GCOV_ICALL_TOPN_NCOUNTS)); + for (i = 0; i < n_counters; i += GCOV_ICALL_TOPN_NCOUNTS) + { + unsigned j; + gcov_type *value_array = &counters[i + 1]; + + for (j = 0; j < GCOV_ICALL_TOPN_NCOUNTS - 1; j += 2) + value_array[j + 1] = fn (value_array[j + 1], data1, data2); + } +} + +/* Scaling the counter value V by multiplying *(float*) DATA1. */ + +static gcov_type +fp_scale (gcov_type v, void *data1, void *data2 ATTRIBUTE_UNUSED) +{ + float f = *(float *) data1; + return (gcov_type) (v * f); +} + +/* Scaling the counter value V by multiplying DATA2/DATA1. */ + +static gcov_type +int_scale (gcov_type v, void *data1, void *data2) +{ + int n = *(int *) data1; + int d = *(int *) data2; + return (gcov_type) ( RDIV (v,d) * n); +} + +/* Type of function used to process counters. */ +typedef void (*gcov_counter_fn) (gcov_type *, gcov_unsigned_t, + counter_op_fn, void *, void *); + +/* Function array to process profile counters. */ +#define DEF_GCOV_COUNTER(COUNTER, NAME, FN_TYPE) \ + __gcov ## FN_TYPE ## _counter_op, +static gcov_counter_fn ctr_functions[GCOV_COUNTERS] = { +#include "gcov-counter.def" +}; +#undef DEF_GCOV_COUNTER + +/* Driver for scaling profile counters. */ + +int +gcov_profile_scale (struct gcov_info *profile, float scale_factor, int n, int d) +{ + struct gcov_info *gi_ptr; + unsigned f_ix; + + if (verbose) + fnotice (stdout, "scale_factor is %f or %d/%d\n", scale_factor, n, d); + + /* Scaling the counters. */ + for (gi_ptr = profile; gi_ptr; gi_ptr = gi_ptr->next) + for (f_ix = 0; f_ix < gi_ptr->n_functions; f_ix++) + { + unsigned t_ix; + const struct gcov_fn_info *gfi_ptr = gi_ptr->functions[f_ix]; + const struct gcov_ctr_info *ci_ptr; + + if (!gfi_ptr || gfi_ptr->key != gi_ptr) + continue; + + ci_ptr = gfi_ptr->ctrs; + for (t_ix = 0; t_ix != GCOV_COUNTERS; t_ix++) + { + gcov_merge_fn merge = gi_ptr->merge[t_ix]; + + if (!merge) + continue; + if (d == 0) + (*ctr_functions[t_ix]) (ci_ptr->values, ci_ptr->num, + fp_scale, &scale_factor, NULL); + else + (*ctr_functions[t_ix]) (ci_ptr->values, ci_ptr->num, + int_scale, &n, &d); + ci_ptr++; + } + } + + return 0; +} + +/* Driver to normalize profile counters. */ + +int +gcov_profile_normalize (struct gcov_info *profile, gcov_type max_val) +{ + struct gcov_info *gi_ptr; + gcov_type curr_max_val = 0; + unsigned f_ix; + unsigned int i; + float scale_factor; + + /* Find the largest count value. */ + for (gi_ptr = profile; gi_ptr; gi_ptr = gi_ptr->next) + for (f_ix = 0; f_ix < gi_ptr->n_functions; f_ix++) + { + unsigned t_ix; + const struct gcov_fn_info *gfi_ptr = gi_ptr->functions[f_ix]; + const struct gcov_ctr_info *ci_ptr; + + if (!gfi_ptr || gfi_ptr->key != gi_ptr) + continue; + + ci_ptr = gfi_ptr->ctrs; + for (t_ix = 0; t_ix < 1; t_ix++) + { + for (i = 0; i < ci_ptr->num; i++) + if (ci_ptr->values[i] > curr_max_val) + curr_max_val = ci_ptr->values[i]; + ci_ptr++; + } + } + + scale_factor = (float)max_val / curr_max_val; + if (verbose) + fnotice (stdout, "max_val is %"PRId64"\n", curr_max_val); + + return gcov_profile_scale (profile, scale_factor, 0, 0); +} + +/* The following variables are defined in gcc/gcov-tool.c. */ +extern int overlap_func_level; +extern int overlap_obj_level; +extern int overlap_hot_only; +extern int overlap_use_fullname; +extern double overlap_hot_threshold; + +/* Compute the overlap score of two values. The score is defined as: + min (V1/SUM_1, V2/SUM_2) */ + +static double +calculate_2_entries (const unsigned long v1, const unsigned long v2, + const double sum_1, const double sum_2) +{ + double val1 = (sum_1 == 0.0 ? 0.0 : v1/sum_1); + double val2 = (sum_2 == 0.0 ? 0.0 : v2/sum_2); + + if (val2 < val1) + val1 = val2; + + return val1; +} + +/* Compute the overlap score between GCOV_INFO1 and GCOV_INFO2. + SUM_1 is the sum_all for profile1 where GCOV_INFO1 belongs. + SUM_2 is the sum_all for profile2 where GCOV_INFO2 belongs. + This function also updates cumulative score CUM_1_RESULT and + CUM_2_RESULT. */ + +static double +compute_one_gcov (const struct gcov_info *gcov_info1, + const struct gcov_info *gcov_info2, + const double sum_1, const double sum_2, + double *cum_1_result, double *cum_2_result) +{ + unsigned f_ix; + double ret = 0; + double cum_1 = 0, cum_2 = 0; + const struct gcov_info *gcov_info = 0; + double *cum_p; + double sum; + + gcc_assert (gcov_info1 || gcov_info2); + if (!gcov_info1) + { + gcov_info = gcov_info2; + cum_p = cum_2_result; + sum = sum_2; + *cum_1_result = 0; + } else + if (!gcov_info2) + { + gcov_info = gcov_info1; + cum_p = cum_1_result; + sum = sum_1; + *cum_2_result = 0; + } + + if (gcov_info) + { + for (f_ix = 0; f_ix < gcov_info->n_functions; f_ix++) + { + unsigned t_ix; + const struct gcov_fn_info *gfi_ptr = gcov_info->functions[f_ix]; + if (!gfi_ptr || gfi_ptr->key != gcov_info) + continue; + const struct gcov_ctr_info *ci_ptr = gfi_ptr->ctrs; + for (t_ix = 0; t_ix < GCOV_COUNTERS_SUMMABLE; t_ix++) + { + unsigned c_num; + + if (!gcov_info->merge[t_ix]) + continue; + + for (c_num = 0; c_num < ci_ptr->num; c_num++) + { + cum_1 += ci_ptr->values[c_num] / sum; + } + ci_ptr++; + } + } + *cum_p = cum_1; + return 0.0; + } + + for (f_ix = 0; f_ix < gcov_info1->n_functions; f_ix++) + { + unsigned t_ix; + double func_cum_1 = 0.0; + double func_cum_2 = 0.0; + double func_val = 0.0; + int nonzero = 0; + int hot = 0; + const struct gcov_fn_info *gfi_ptr1 = gcov_info1->functions[f_ix]; + const struct gcov_fn_info *gfi_ptr2 = gcov_info2->functions[f_ix]; + + if (!gfi_ptr1 || gfi_ptr1->key != gcov_info1) + continue; + if (!gfi_ptr2 || gfi_ptr2->key != gcov_info2) + continue; + + const struct gcov_ctr_info *ci_ptr1 = gfi_ptr1->ctrs; + const struct gcov_ctr_info *ci_ptr2 = gfi_ptr2->ctrs; + for (t_ix = 0; t_ix < GCOV_COUNTERS_SUMMABLE; t_ix++) + { + unsigned c_num; + + if (!gcov_info1->merge[t_ix]) + continue; + + for (c_num = 0; c_num < ci_ptr1->num; c_num++) + { + if (ci_ptr1->values[c_num] | ci_ptr2->values[c_num]) + { + func_val += calculate_2_entries (ci_ptr1->values[c_num], + ci_ptr2->values[c_num], + sum_1, sum_2); + + func_cum_1 += ci_ptr1->values[c_num] / sum_1; + func_cum_2 += ci_ptr2->values[c_num] / sum_2; + nonzero = 1; + if (ci_ptr1->values[c_num] / sum_1 >= overlap_hot_threshold || + ci_ptr2->values[c_num] / sum_2 >= overlap_hot_threshold) + hot = 1; + } + } + ci_ptr1++; + ci_ptr2++; + } + ret += func_val; + cum_1 += func_cum_1; + cum_2 += func_cum_2; + if (overlap_func_level && nonzero && (!overlap_hot_only || hot)) + { + printf(" \tfunc_id=%10d \toverlap =%6.5f%% (%5.5f%% %5.5f%%)\n", + gfi_ptr1->ident, func_val*100, func_cum_1*100, func_cum_2*100); + } + } + *cum_1_result = cum_1; + *cum_2_result = cum_2; + return ret; +} + +/* Test if all counter values in this GCOV_INFO are cold. + "Cold" is defined as the counter value being less than + or equal to THRESHOLD. */ + +static bool +gcov_info_count_all_cold (const struct gcov_info *gcov_info, + gcov_type threshold) +{ + unsigned f_ix; + + for (f_ix = 0; f_ix < gcov_info->n_functions; f_ix++) + { + unsigned t_ix; + const struct gcov_fn_info *gfi_ptr = gcov_info->functions[f_ix]; + + if (!gfi_ptr || gfi_ptr->key != gcov_info) + continue; + const struct gcov_ctr_info *ci_ptr = gfi_ptr->ctrs; + for (t_ix = 0; t_ix < GCOV_COUNTERS_SUMMABLE; t_ix++) + { + unsigned c_num; + + if (!gcov_info->merge[t_ix]) + continue; + + for (c_num = 0; c_num < ci_ptr->num; c_num++) + { + if (ci_ptr->values[c_num] > threshold) + return false; + } + ci_ptr++; + } + } + + return true; +} + +/* Test if all counter values in this GCOV_INFO are 0. */ + +static bool +gcov_info_count_all_zero (const struct gcov_info *gcov_info) +{ + return gcov_info_count_all_cold (gcov_info, 0); +} + +/* A pair of matched GCOV_INFO. + The flag is a bitvector: + b0: obj1's all counts are 0; + b1: obj1's all counts are cold (but no 0); + b2: obj1 is hot; + b3: no obj1 to match obj2; + b4: obj2's all counts are 0; + b5: obj2's all counts are cold (but no 0); + b6: obj2 is hot; + b7: no obj2 to match obj1; + */ +struct overlap_t { + const struct gcov_info *obj1; + const struct gcov_info *obj2; + char flag; +}; + +#define FLAG_BOTH_ZERO(flag) ((flag & 0x1) && (flag & 0x10)) +#define FLAG_BOTH_COLD(flag) ((flag & 0x2) && (flag & 0x20)) +#define FLAG_ONE_HOT(flag) ((flag & 0x4) || (flag & 0x40)) + +/* Cumlative overlap dscore for profile1 and profile2. */ +static double overlap_sum_1, overlap_sum_2; + +/* sum_all for profile1 and profile2. */ +static gcov_type p1_sum_all, p2_sum_all; + +/* run_max for profile1 and profile2. */ +static gcov_type p1_run_max, p2_run_max; + +/* The number of gcda files in the profiles. */ +static unsigned gcda_files[2]; + +/* The number of unique gcda files in the profiles + (not existing in the other profile). */ +static unsigned unique_gcda_files[2]; + +/* The number of gcda files that all counter values are 0. */ +static unsigned zero_gcda_files[2]; + +/* The number of gcda files that all counter values are cold (but not 0). */ +static unsigned cold_gcda_files[2]; + +/* The number of gcda files that includes hot counter values. */ +static unsigned hot_gcda_files[2]; + +/* The number of gcda files with hot count value in either profiles. */ +static unsigned both_hot_cnt; + +/* The number of gcda files with all counts cold (but not 0) in + both profiles. */ +static unsigned both_cold_cnt; + +/* The number of gcda files with all counts 0 in both profiles. */ +static unsigned both_zero_cnt; + +/* Extract the basename of the filename NAME. */ + +static char * +extract_file_basename (const char *name) +{ + char *str; + int len = 0; + char *path = xstrdup (name); + char sep_str[2]; + + sep_str[0] = DIR_SEPARATOR; + sep_str[1] = 0; + str = strstr(path, sep_str); + do{ + len = strlen(str) + 1; + path = &path[strlen(path) - len + 2]; + str = strstr(path, sep_str); + } while(str); + + return path; +} + +/* Utility function to get the filename. */ + +static const char * +get_file_basename (const char *name) +{ + if (overlap_use_fullname) + return name; + return extract_file_basename (name); +} + +/* A utility function to set the flag for the gcda files. */ + +static void +set_flag (struct overlap_t *e) +{ + char flag = 0; + + if (!e->obj1) + { + unique_gcda_files[1]++; + flag = 0x8; + } + else + { + gcda_files[0]++; + if (gcov_info_count_all_zero (e->obj1)) + { + zero_gcda_files[0]++; + flag = 0x1; + } + else + if (gcov_info_count_all_cold (e->obj1, overlap_sum_1 + * overlap_hot_threshold)) + { + cold_gcda_files[0]++; + flag = 0x2; + } + else + { + hot_gcda_files[0]++; + flag = 0x4; + } + } + + if (!e->obj2) + { + unique_gcda_files[0]++; + flag |= (0x8 << 4); + } + else + { + gcda_files[1]++; + if (gcov_info_count_all_zero (e->obj2)) + { + zero_gcda_files[1]++; + flag |= (0x1 << 4); + } + else + if (gcov_info_count_all_cold (e->obj2, overlap_sum_2 + * overlap_hot_threshold)) + { + cold_gcda_files[1]++; + flag |= (0x2 << 4); + } + else + { + hot_gcda_files[1]++; + flag |= (0x4 << 4); + } + } + + gcc_assert (flag); + e->flag = flag; +} + +/* Test if INFO1 and INFO2 are from the matched source file. + Return 1 if they match; return 0 otherwise. */ + +static int +matched_gcov_info (const struct gcov_info *info1, const struct gcov_info *info2) +{ + /* For FDO, we have to match the name. This can be expensive. + Maybe we should use hash here. */ + if (strcmp (info1->filename, info2->filename)) + return 0; + + if (info1->n_functions != info2->n_functions) + { + fnotice (stderr, "mismatched profiles in %s (%d functions" + " vs %d functions)\n", + info1->filename, + info1->n_functions, + info2->n_functions); + return 0; + } + return 1; +} + +/* Defined in libgcov-driver.c. */ +extern gcov_unsigned_t compute_summary (struct gcov_info *, + struct gcov_summary *, size_t *); + +/* Compute the overlap score of two profiles with the head of GCOV_LIST1 and + GCOV_LIST1. Return a number ranging from [0.0, 1.0], with 0.0 meaning no + match and 1.0 meaning a perfect match. */ + +static double +calculate_overlap (struct gcov_info *gcov_list1, + struct gcov_info *gcov_list2) +{ + struct gcov_summary this_prg; + unsigned list1_cnt = 0, list2_cnt= 0, all_cnt; + unsigned int i, j; + size_t max_length; + const struct gcov_info *gi_ptr; + struct overlap_t *all_infos; + + compute_summary (gcov_list1, &this_prg, &max_length); + overlap_sum_1 = (double) (this_prg.ctrs[0].sum_all); + p1_sum_all = this_prg.ctrs[0].sum_all; + p1_run_max = this_prg.ctrs[0].run_max; + compute_summary (gcov_list2, &this_prg, &max_length); + overlap_sum_2 = (double) (this_prg.ctrs[0].sum_all); + p2_sum_all = this_prg.ctrs[0].sum_all; + p2_run_max = this_prg.ctrs[0].run_max; + + for (gi_ptr = gcov_list1; gi_ptr; gi_ptr = gi_ptr->next) + list1_cnt++; + for (gi_ptr = gcov_list2; gi_ptr; gi_ptr = gi_ptr->next) + list2_cnt++; + all_cnt = list1_cnt + list2_cnt; + all_infos = (struct overlap_t *) xmalloc (sizeof (struct overlap_t) + * all_cnt * 2); + gcc_assert (all_infos); + + i = 0; + for (gi_ptr = gcov_list1; gi_ptr; gi_ptr = gi_ptr->next, i++) + { + all_infos[i].obj1 = gi_ptr; + all_infos[i].obj2 = 0; + } + + for (gi_ptr = gcov_list2; gi_ptr; gi_ptr = gi_ptr->next, i++) + { + all_infos[i].obj1 = 0; + all_infos[i].obj2 = gi_ptr; + } + + for (i = list1_cnt; i < all_cnt; i++) + { + if (all_infos[i].obj2 == 0) + continue; + for (j = 0; j < list1_cnt; j++) + { + if (all_infos[j].obj2 != 0) + continue; + if (matched_gcov_info (all_infos[i].obj2, all_infos[j].obj1)) + { + all_infos[j].obj2 = all_infos[i].obj2; + all_infos[i].obj2 = 0; + break; + } + } + } + + for (i = 0; i < all_cnt; i++) + if (all_infos[i].obj1 || all_infos[i].obj2) + { + set_flag (all_infos + i); + if (FLAG_ONE_HOT (all_infos[i].flag)) + both_hot_cnt++; + if (FLAG_BOTH_COLD(all_infos[i].flag)) + both_cold_cnt++; + if (FLAG_BOTH_ZERO(all_infos[i].flag)) + both_zero_cnt++; + } + + double prg_val = 0; + double sum_val = 0; + double sum_cum_1 = 0; + double sum_cum_2 = 0; + + for (i = 0; i < all_cnt; i++) + { + double val; + double cum_1, cum_2; + const char *filename; + + if (all_infos[i].obj1 == 0 && all_infos[i].obj2 == 0) + continue; + if (FLAG_BOTH_ZERO (all_infos[i].flag)) + continue; + + if (all_infos[i].obj1) + filename = get_file_basename (all_infos[i].obj1->filename); + else + filename = get_file_basename (all_infos[i].obj2->filename); + + if (overlap_func_level) + printf("\n processing %36s:\n", filename); + + val = compute_one_gcov (all_infos[i].obj1, all_infos[i].obj2, + overlap_sum_1, overlap_sum_2, &cum_1, &cum_2); + + if (overlap_obj_level && (!overlap_hot_only || FLAG_ONE_HOT (all_infos[i].flag))) + { + printf(" obj=%36s overlap = %6.2f%% (%5.2f%% %5.2f%%)\n", + filename, val*100, cum_1*100, cum_2*100); + sum_val += val; + sum_cum_1 += cum_1; + sum_cum_2 += cum_2; + } + + prg_val += val; + + } + + if (overlap_obj_level) + printf(" SUM:%36s overlap = %6.2f%% (%5.2f%% %5.2f%%)\n", + "", sum_val*100, sum_cum_1*100, sum_cum_2*100); + + printf (" Statistics:\n" + " profile1_# profile2_# overlap_#\n"); + printf (" gcda files: %12u\t%12u\t%12u\n", gcda_files[0], gcda_files[1], + gcda_files[0]-unique_gcda_files[0]); + printf (" unique files: %12u\t%12u\n", unique_gcda_files[0], + unique_gcda_files[1]); + printf (" hot files: %12u\t%12u\t%12u\n", hot_gcda_files[0], + hot_gcda_files[1], both_hot_cnt); + printf (" cold files: %12u\t%12u\t%12u\n", cold_gcda_files[0], + cold_gcda_files[1], both_cold_cnt); + printf (" zero files: %12u\t%12u\t%12u\n", zero_gcda_files[0], + zero_gcda_files[1], both_zero_cnt); + printf (" sum_all: %12"PRId64"\t%12"PRId64"\n", p1_sum_all, p2_sum_all); + printf (" run_max: %12"PRId64"\t%12"PRId64"\n", p1_run_max, p2_run_max); + + return prg_val; +} + +/* Computer the overlap score of two lists of gcov_info objects PROFILE1 and PROFILE2. + Return 0 on success: without mismatch. Reutrn 1 on error. */ + +int +gcov_profile_overlap (struct gcov_info *profile1, struct gcov_info *profile2) +{ + double result; + + result = calculate_overlap (profile1, profile2); + + if (result > 0) + { + printf("\nProgram level overlap result is %3.2f%%\n\n", result*100); + return 0; + } + return 1; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/libgcov.h b/contrib/toolchain/gcc/5x/libgcc/libgcov.h new file mode 100644 index 0000000000..5f54907029 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/libgcov.h @@ -0,0 +1,346 @@ +/* Header file for libgcov-*.c. + Copyright (C) 1996-2015 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 GCC_LIBGCOV_H +#define GCC_LIBGCOV_H + +/* work around the poisoned malloc/calloc in system.h. */ +#ifndef xmalloc +#define xmalloc malloc +#endif +#ifndef xcalloc +#define xcalloc calloc +#endif + +#ifndef IN_GCOV_TOOL +/* About the target. */ +/* This path will be used by libgcov runtime. */ + +#include "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" + +#if BITS_PER_UNIT == 8 +typedef unsigned gcov_unsigned_t __attribute__ ((mode (SI))); +typedef unsigned gcov_position_t __attribute__ ((mode (SI))); +#if LONG_LONG_TYPE_SIZE > 32 +typedef signed gcov_type __attribute__ ((mode (DI))); +typedef unsigned gcov_type_unsigned __attribute__ ((mode (DI))); +#else +typedef signed gcov_type __attribute__ ((mode (SI))); +typedef unsigned gcov_type_unsigned __attribute__ ((mode (SI))); +#endif +#else +#if BITS_PER_UNIT == 16 +typedef unsigned gcov_unsigned_t __attribute__ ((mode (HI))); +typedef unsigned gcov_position_t __attribute__ ((mode (HI))); +#if LONG_LONG_TYPE_SIZE > 32 +typedef signed gcov_type __attribute__ ((mode (SI))); +typedef unsigned gcov_type_unsigned __attribute__ ((mode (SI))); +#else +typedef signed gcov_type __attribute__ ((mode (HI))); +typedef unsigned gcov_type_unsigned __attribute__ ((mode (HI))); +#endif +#else +typedef unsigned gcov_unsigned_t __attribute__ ((mode (QI))); +typedef unsigned gcov_position_t __attribute__ ((mode (QI))); +#if LONG_LONG_TYPE_SIZE > 32 +typedef signed gcov_type __attribute__ ((mode (HI))); +typedef unsigned gcov_type_unsigned __attribute__ ((mode (HI))); +#else +typedef signed gcov_type __attribute__ ((mode (QI))); +typedef unsigned gcov_type_unsigned __attribute__ ((mode (QI))); +#endif +#endif +#endif + +#if defined (TARGET_POSIX_IO) +#define GCOV_LOCKED 1 +#else +#define GCOV_LOCKED 0 +#endif + +/* In libgcov we need these functions to be extern, so prefix them with + __gcov. In libgcov they must also be hidden so that the instance in + the executable is not also used in a DSO. */ +#define gcov_var __gcov_var +#define gcov_open __gcov_open +#define gcov_close __gcov_close +#define gcov_write_tag_length __gcov_write_tag_length +#define gcov_position __gcov_position +#define gcov_seek __gcov_seek +#define gcov_rewrite __gcov_rewrite +#define gcov_is_error __gcov_is_error +#define gcov_write_unsigned __gcov_write_unsigned +#define gcov_write_counter __gcov_write_counter +#define gcov_write_summary __gcov_write_summary +#define gcov_read_unsigned __gcov_read_unsigned +#define gcov_read_counter __gcov_read_counter +#define gcov_read_summary __gcov_read_summary +#define gcov_sort_n_vals __gcov_sort_n_vals + +#else /* IN_GCOV_TOOL */ +/* About the host. */ +/* This path will be compiled for the host and linked into + gcov-tool binary. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tm.h" + +typedef unsigned gcov_unsigned_t; +typedef unsigned gcov_position_t; +/* gcov_type is typedef'd elsewhere for the compiler */ +#if defined (HOST_HAS_F_SETLKW) +#define GCOV_LOCKED 1 +#else +#define GCOV_LOCKED 0 +#endif + +/* Some Macros specific to gcov-tool. */ + +#define L_gcov 1 +#define L_gcov_merge_add 1 +#define L_gcov_merge_single 1 +#define L_gcov_merge_delta 1 +#define L_gcov_merge_ior 1 +#define L_gcov_merge_time_profile 1 +#define L_gcov_merge_icall_topn 1 + +extern gcov_type gcov_read_counter_mem (); +extern unsigned gcov_get_merge_weight (); +extern struct gcov_info *gcov_list; + +#endif /* !IN_GCOV_TOOL */ + +#if defined(inhibit_libc) +#define IN_LIBGCOV (-1) +#else +#define IN_LIBGCOV 1 +#if defined(L_gcov) +#define GCOV_LINKAGE /* nothing */ +#endif +#endif + +/* Poison these, so they don't accidentally slip in. */ +#pragma GCC poison gcov_write_string gcov_write_tag gcov_write_length +#pragma GCC poison gcov_time gcov_magic + +#ifdef HAVE_GAS_HIDDEN +#define ATTRIBUTE_HIDDEN __attribute__ ((__visibility__ ("hidden"))) +#else +#define ATTRIBUTE_HIDDEN +#endif + +#include "gcov-io.h" + +/* Structures embedded in coveraged program. The structures generated + by write_profile must match these. */ + +/* Information about counters for a single function. */ +struct gcov_ctr_info +{ + gcov_unsigned_t num; /* number of counters. */ + gcov_type *values; /* their values. */ +}; + +/* Information about a single function. This uses the trailing array + idiom. The number of counters is determined from the merge pointer + array in gcov_info. The key is used to detect which of a set of + comdat functions was selected -- it points to the gcov_info object + of the object file containing the selected comdat function. */ + +struct gcov_fn_info +{ + const struct gcov_info *key; /* comdat key */ + gcov_unsigned_t ident; /* unique ident of function */ + gcov_unsigned_t lineno_checksum; /* function lineo_checksum */ + gcov_unsigned_t cfg_checksum; /* function cfg checksum */ + struct gcov_ctr_info ctrs[1]; /* instrumented counters */ +}; + +/* Type of function used to merge counters. */ +typedef void (*gcov_merge_fn) (gcov_type *, gcov_unsigned_t); + +/* Information about a single object file. */ +struct gcov_info +{ + gcov_unsigned_t version; /* expected version number */ + struct gcov_info *next; /* link to next, used by libgcov */ + + gcov_unsigned_t stamp; /* uniquifying time stamp */ + const char *filename; /* output file name */ + + gcov_merge_fn merge[GCOV_COUNTERS]; /* merge functions (null for + unused) */ + + unsigned n_functions; /* number of functions */ + +#ifndef IN_GCOV_TOOL + const struct gcov_fn_info *const *functions; /* pointer to pointers + to function information */ +#else + const struct gcov_fn_info **functions; +#endif /* !IN_GCOV_TOOL */ +}; + +/* Root of a program/shared-object state */ +struct gcov_root +{ + struct gcov_info *list; + unsigned dumped : 1; /* counts have been dumped. */ + unsigned run_counted : 1; /* run has been accounted for. */ + struct gcov_root *next; + struct gcov_root *prev; +}; + +extern struct gcov_root __gcov_root ATTRIBUTE_HIDDEN; + +struct gcov_master +{ + gcov_unsigned_t version; + struct gcov_root *root; +}; + +/* Exactly one of these will be active in the process. */ +extern struct gcov_master __gcov_master; + +/* Dump a set of gcov objects. */ +extern void __gcov_dump_one (struct gcov_root *) ATTRIBUTE_HIDDEN; + +/* Register a new object file module. */ +extern void __gcov_init (struct gcov_info *) ATTRIBUTE_HIDDEN; + +/* Called before fork, to avoid double counting. */ +extern void __gcov_flush (void) ATTRIBUTE_HIDDEN; + +/* Function to reset all counters to 0. Both externally visible (and + overridable) and internal version. */ +extern void __gcov_reset (void); +extern void __gcov_reset_int (void) ATTRIBUTE_HIDDEN; + +/* User function to enable early write of profile information so far. */ +extern void __gcov_dump (void); +extern void __gcov_dump_int (void) ATTRIBUTE_HIDDEN; + +/* The merge function that just sums the counters. */ +extern void __gcov_merge_add (gcov_type *, unsigned) ATTRIBUTE_HIDDEN; + +/* The merge function to select the minimum valid counter value. */ +extern void __gcov_merge_time_profile (gcov_type *, unsigned) ATTRIBUTE_HIDDEN; + +/* The merge function to choose the most common value. */ +extern void __gcov_merge_single (gcov_type *, unsigned) ATTRIBUTE_HIDDEN; + +/* The merge function to choose the most common difference between + consecutive values. */ +extern void __gcov_merge_delta (gcov_type *, unsigned) ATTRIBUTE_HIDDEN; + +/* The merge function that just ors the counters together. */ +extern void __gcov_merge_ior (gcov_type *, unsigned) ATTRIBUTE_HIDDEN; + +/* The merge function is used for topn indirect call counters. */ +extern void __gcov_merge_icall_topn (gcov_type *, unsigned) ATTRIBUTE_HIDDEN; + +/* The profiler functions. */ +extern void __gcov_interval_profiler (gcov_type *, gcov_type, int, unsigned); +extern void __gcov_pow2_profiler (gcov_type *, gcov_type); +extern void __gcov_one_value_profiler (gcov_type *, gcov_type); +extern void __gcov_indirect_call_profiler (gcov_type*, gcov_type, + void*, void*); +extern void __gcov_indirect_call_profiler_v2 (gcov_type, void *); +extern void __gcov_time_profiler (gcov_type *); +extern void __gcov_average_profiler (gcov_type *, gcov_type); +extern void __gcov_ior_profiler (gcov_type *, gcov_type); +extern void __gcov_indirect_call_topn_profiler (gcov_type, void *); +extern void gcov_sort_n_vals (gcov_type *, int); + +#ifndef inhibit_libc +/* The wrappers around some library functions.. */ +extern pid_t __gcov_fork (void) ATTRIBUTE_HIDDEN; +extern int __gcov_execl (const char *, char *, ...) ATTRIBUTE_HIDDEN; +extern int __gcov_execlp (const char *, char *, ...) ATTRIBUTE_HIDDEN; +extern int __gcov_execle (const char *, char *, ...) ATTRIBUTE_HIDDEN; +extern int __gcov_execv (const char *, char *const []) ATTRIBUTE_HIDDEN; +extern int __gcov_execvp (const char *, char *const []) ATTRIBUTE_HIDDEN; +extern int __gcov_execve (const char *, char *const [], char *const []) + ATTRIBUTE_HIDDEN; + +/* Functions that only available in libgcov. */ +GCOV_LINKAGE int gcov_open (const char */*name*/) ATTRIBUTE_HIDDEN; +GCOV_LINKAGE void gcov_write_counter (gcov_type) ATTRIBUTE_HIDDEN; +GCOV_LINKAGE void gcov_write_tag_length (gcov_unsigned_t, gcov_unsigned_t) + ATTRIBUTE_HIDDEN; +GCOV_LINKAGE void gcov_write_summary (gcov_unsigned_t /*tag*/, + const struct gcov_summary *) + ATTRIBUTE_HIDDEN; +GCOV_LINKAGE void gcov_seek (gcov_position_t /*position*/) ATTRIBUTE_HIDDEN; +GCOV_LINKAGE void gcov_rewrite (void) ATTRIBUTE_HIDDEN; + +/* "Counts" stored in gcda files can be a real counter value, or + an target address. When differentiate these two types because + when manipulating counts, we should only change real counter values, + rather target addresses. */ + +static inline gcov_type +gcov_get_counter (void) +{ +#ifndef IN_GCOV_TOOL + /* This version is for reading count values in libgcov runtime: + we read from gcda files. */ + + return gcov_read_counter (); +#else + /* This version is for gcov-tool. We read the value from memory and + multiply it by the merge weight. */ + + return gcov_read_counter_mem () * gcov_get_merge_weight (); +#endif +} + +/* Similar function as gcov_get_counter(), but handles target address + counters. */ + +static inline gcov_type +gcov_get_counter_target (void) +{ +#ifndef IN_GCOV_TOOL + /* This version is for reading count target values in libgcov runtime: + we read from gcda files. */ + + return gcov_read_counter (); +#else + /* This version is for gcov-tool. We read the value from memory and we do NOT + multiply it by the merge weight. */ + + return gcov_read_counter_mem (); +#endif +} + +#endif /* !inhibit_libc */ + +#endif /* GCC_LIBGCOV_H */ diff --git a/contrib/toolchain/gcc/5x/libgcc/memcmp.c b/contrib/toolchain/gcc/5x/libgcc/memcmp.c new file mode 100644 index 0000000000..2348afe1d2 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/memcmp.c @@ -0,0 +1,16 @@ +/* Public domain. */ +#include + +int +memcmp (const void *str1, const void *str2, size_t count) +{ + const unsigned char *s1 = str1; + const unsigned char *s2 = str2; + + while (count-- > 0) + { + if (*s1++ != *s2++) + return s1[-1] < s2[-1] ? -1 : 1; + } + return 0; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/memcpy.c b/contrib/toolchain/gcc/5x/libgcc/memcpy.c new file mode 100644 index 0000000000..58b1e40562 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/memcpy.c @@ -0,0 +1,12 @@ +/* Public domain. */ +#include + +void * +memcpy (void *dest, const void *src, size_t len) +{ + char *d = dest; + const char *s = src; + while (len--) + *d++ = *s++; + return dest; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/memmove.c b/contrib/toolchain/gcc/5x/libgcc/memmove.c new file mode 100644 index 0000000000..13b340af6a --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/memmove.c @@ -0,0 +1,20 @@ +/* Public domain. */ +#include + +void * +memmove (void *dest, const void *src, size_t len) +{ + char *d = dest; + const char *s = src; + if (d < s) + while (len--) + *d++ = *s++; + else + { + char *lasts = s + (len-1); + char *lastd = d + (len-1); + while (len--) + *lastd-- = *lasts--; + } + return dest; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/memset.c b/contrib/toolchain/gcc/5x/libgcc/memset.c new file mode 100644 index 0000000000..3e7025ee39 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/memset.c @@ -0,0 +1,11 @@ +/* Public domain. */ +#include + +void * +memset (void *dest, int val, size_t len) +{ + unsigned char *ptr = dest; + while (len-- > 0) + *ptr++ = val; + return dest; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/offloadstuff.c b/contrib/toolchain/gcc/5x/libgcc/offloadstuff.c new file mode 100644 index 0000000000..0d6ef2336b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/offloadstuff.c @@ -0,0 +1,80 @@ +/* Specialized bits of code needed for the offloading tables. + Copyright (C) 2014-2015 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 +. */ + +/* Target machine header files require this define. */ +#define IN_LIBGCC2 + +/* FIXME: Including auto-host is incorrect, but until we have + identified the set of defines that need to go into auto-target.h, + this will have to do. */ +#include "auto-host.h" +#undef caddr_t +#undef pid_t +#undef rlim_t +#undef ssize_t +#undef vfork +#include "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" + +#define OFFLOAD_FUNC_TABLE_SECTION_NAME ".gnu.offload_funcs" +#define OFFLOAD_VAR_TABLE_SECTION_NAME ".gnu.offload_vars" + +#ifdef CRT_BEGIN + +#if defined(HAVE_GAS_HIDDEN) && defined(ENABLE_OFFLOADING) +void *__offload_func_table[0] + __attribute__ ((__used__, visibility ("hidden"), + section (OFFLOAD_FUNC_TABLE_SECTION_NAME))) = { }; +void *__offload_var_table[0] + __attribute__ ((__used__, visibility ("hidden"), + section (OFFLOAD_VAR_TABLE_SECTION_NAME))) = { }; +#endif + +#elif defined CRT_END + +#if defined(HAVE_GAS_HIDDEN) && defined(ENABLE_OFFLOADING) +void *__offload_funcs_end[0] + __attribute__ ((__used__, visibility ("hidden"), + section (OFFLOAD_FUNC_TABLE_SECTION_NAME))) = { }; +void *__offload_vars_end[0] + __attribute__ ((__used__, visibility ("hidden"), + section (OFFLOAD_VAR_TABLE_SECTION_NAME))) = { }; + +extern void *__offload_func_table[]; +extern void *__offload_var_table[]; + +void *__OFFLOAD_TABLE__[] + __attribute__ ((__visibility__ ("hidden"))) = +{ + &__offload_func_table, &__offload_funcs_end, + &__offload_var_table, &__offload_vars_end +}; +#endif + +#else /* ! CRT_BEGIN && ! CRT_END */ +#error "One of CRT_BEGIN or CRT_END must be defined." +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/README b/contrib/toolchain/gcc/5x/libgcc/soft-fp/README new file mode 100644 index 0000000000..d60e88b7fe --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/README @@ -0,0 +1,4 @@ +The files in this directory are part of the GNU C Library, not part of +GCC. As described at , +changes should be made to the GNU C Library and the changed files then +imported into GCC. diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/adddf3.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/adddf3.c new file mode 100644 index 0000000000..95bc8e56b0 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/adddf3.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return a + b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +DFtype +__adddf3 (DFtype a, DFtype b) +{ + FP_DECL_EX; + FP_DECL_D (A); + FP_DECL_D (B); + FP_DECL_D (R); + DFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_SEMIRAW_D (A, a); + FP_UNPACK_SEMIRAW_D (B, b); + FP_ADD_D (R, A, B); + FP_PACK_SEMIRAW_D (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/addsf3.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/addsf3.c new file mode 100644 index 0000000000..b332589d08 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/addsf3.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return a + b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +SFtype +__addsf3 (SFtype a, SFtype b) +{ + FP_DECL_EX; + FP_DECL_S (A); + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_SEMIRAW_S (A, a); + FP_UNPACK_SEMIRAW_S (B, b); + FP_ADD_S (R, A, B); + FP_PACK_SEMIRAW_S (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/addtf3.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/addtf3.c new file mode 100644 index 0000000000..ac0d9481fe --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/addtf3.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return a + b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +TFtype +__addtf3 (TFtype a, TFtype b) +{ + FP_DECL_EX; + FP_DECL_Q (A); + FP_DECL_Q (B); + FP_DECL_Q (R); + TFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_SEMIRAW_Q (A, a); + FP_UNPACK_SEMIRAW_Q (B, b); + FP_ADD_Q (R, A, B); + FP_PACK_SEMIRAW_Q (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/divdf3.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/divdf3.c new file mode 100644 index 0000000000..f59da8216b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/divdf3.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return a / b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +DFtype +__divdf3 (DFtype a, DFtype b) +{ + FP_DECL_EX; + FP_DECL_D (A); + FP_DECL_D (B); + FP_DECL_D (R); + DFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_D (A, a); + FP_UNPACK_D (B, b); + FP_DIV_D (R, A, B); + FP_PACK_D (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/divsf3.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/divsf3.c new file mode 100644 index 0000000000..794192825b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/divsf3.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return a / b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +SFtype +__divsf3 (SFtype a, SFtype b) +{ + FP_DECL_EX; + FP_DECL_S (A); + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); + FP_UNPACK_S (B, b); + FP_DIV_S (R, A, B); + FP_PACK_S (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/divtf3.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/divtf3.c new file mode 100644 index 0000000000..621f70d99f --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/divtf3.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return a / b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +TFtype +__divtf3 (TFtype a, TFtype b) +{ + FP_DECL_EX; + FP_DECL_Q (A); + FP_DECL_Q (B); + FP_DECL_Q (R); + TFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_Q (A, a); + FP_UNPACK_Q (B, b); + FP_DIV_Q (R, A, B); + FP_PACK_Q (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/double.h b/contrib/toolchain/gcc/5x/libgcc/soft-fp/double.h new file mode 100644 index 0000000000..36a11a5452 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/double.h @@ -0,0 +1,314 @@ +/* Software floating-point emulation. + Definitions for IEEE Double Precision + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com), + Jakub Jelinek (jj@ultra.linux.cz), + David S. Miller (davem@redhat.com) and + Peter Maydell (pmaydell@chiark.greenend.org.uk). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#if _FP_W_TYPE_SIZE < 32 +# error "Here's a nickel kid. Go buy yourself a real computer." +#endif + +#if _FP_W_TYPE_SIZE < 64 +# define _FP_FRACTBITS_D (2 * _FP_W_TYPE_SIZE) +# define _FP_FRACTBITS_DW_D (4 * _FP_W_TYPE_SIZE) +#else +# define _FP_FRACTBITS_D _FP_W_TYPE_SIZE +# define _FP_FRACTBITS_DW_D (2 * _FP_W_TYPE_SIZE) +#endif + +#define _FP_FRACBITS_D 53 +#define _FP_FRACXBITS_D (_FP_FRACTBITS_D - _FP_FRACBITS_D) +#define _FP_WFRACBITS_D (_FP_WORKBITS + _FP_FRACBITS_D) +#define _FP_WFRACXBITS_D (_FP_FRACTBITS_D - _FP_WFRACBITS_D) +#define _FP_EXPBITS_D 11 +#define _FP_EXPBIAS_D 1023 +#define _FP_EXPMAX_D 2047 + +#define _FP_QNANBIT_D \ + ((_FP_W_TYPE) 1 << (_FP_FRACBITS_D-2) % _FP_W_TYPE_SIZE) +#define _FP_QNANBIT_SH_D \ + ((_FP_W_TYPE) 1 << (_FP_FRACBITS_D-2+_FP_WORKBITS) % _FP_W_TYPE_SIZE) +#define _FP_IMPLBIT_D \ + ((_FP_W_TYPE) 1 << (_FP_FRACBITS_D-1) % _FP_W_TYPE_SIZE) +#define _FP_IMPLBIT_SH_D \ + ((_FP_W_TYPE) 1 << (_FP_FRACBITS_D-1+_FP_WORKBITS) % _FP_W_TYPE_SIZE) +#define _FP_OVERFLOW_D \ + ((_FP_W_TYPE) 1 << _FP_WFRACBITS_D % _FP_W_TYPE_SIZE) + +#define _FP_WFRACBITS_DW_D (2 * _FP_WFRACBITS_D) +#define _FP_WFRACXBITS_DW_D (_FP_FRACTBITS_DW_D - _FP_WFRACBITS_DW_D) +#define _FP_HIGHBIT_DW_D \ + ((_FP_W_TYPE) 1 << (_FP_WFRACBITS_DW_D - 1) % _FP_W_TYPE_SIZE) + +typedef float DFtype __attribute__ ((mode (DF))); + +#if _FP_W_TYPE_SIZE < 64 + +union _FP_UNION_D +{ + DFtype flt; + struct _FP_STRUCT_LAYOUT + { +# if __BYTE_ORDER == __BIG_ENDIAN + unsigned sign : 1; + unsigned exp : _FP_EXPBITS_D; + unsigned frac1 : _FP_FRACBITS_D - (_FP_IMPLBIT_D != 0) - _FP_W_TYPE_SIZE; + unsigned frac0 : _FP_W_TYPE_SIZE; +# else + unsigned frac0 : _FP_W_TYPE_SIZE; + unsigned frac1 : _FP_FRACBITS_D - (_FP_IMPLBIT_D != 0) - _FP_W_TYPE_SIZE; + unsigned exp : _FP_EXPBITS_D; + unsigned sign : 1; +# endif + } bits __attribute__ ((packed)); +}; + +# define FP_DECL_D(X) _FP_DECL (2, X) +# define FP_UNPACK_RAW_D(X, val) _FP_UNPACK_RAW_2 (D, X, (val)) +# define FP_UNPACK_RAW_DP(X, val) _FP_UNPACK_RAW_2_P (D, X, (val)) +# define FP_PACK_RAW_D(val, X) _FP_PACK_RAW_2 (D, (val), X) +# define FP_PACK_RAW_DP(val, X) \ + do \ + { \ + if (!FP_INHIBIT_RESULTS) \ + _FP_PACK_RAW_2_P (D, (val), X); \ + } \ + while (0) + +# define FP_UNPACK_D(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_2 (D, X, (val)); \ + _FP_UNPACK_CANONICAL (D, 2, X); \ + } \ + while (0) + +# define FP_UNPACK_DP(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_2_P (D, X, (val)); \ + _FP_UNPACK_CANONICAL (D, 2, X); \ + } \ + while (0) + +# define FP_UNPACK_SEMIRAW_D(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_2 (D, X, (val)); \ + _FP_UNPACK_SEMIRAW (D, 2, X); \ + } \ + while (0) + +# define FP_UNPACK_SEMIRAW_DP(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_2_P (D, X, (val)); \ + _FP_UNPACK_SEMIRAW (D, 2, X); \ + } \ + while (0) + +# define FP_PACK_D(val, X) \ + do \ + { \ + _FP_PACK_CANONICAL (D, 2, X); \ + _FP_PACK_RAW_2 (D, (val), X); \ + } \ + while (0) + +# define FP_PACK_DP(val, X) \ + do \ + { \ + _FP_PACK_CANONICAL (D, 2, X); \ + if (!FP_INHIBIT_RESULTS) \ + _FP_PACK_RAW_2_P (D, (val), X); \ + } \ + while (0) + +# define FP_PACK_SEMIRAW_D(val, X) \ + do \ + { \ + _FP_PACK_SEMIRAW (D, 2, X); \ + _FP_PACK_RAW_2 (D, (val), X); \ + } \ + while (0) + +# define FP_PACK_SEMIRAW_DP(val, X) \ + do \ + { \ + _FP_PACK_SEMIRAW (D, 2, X); \ + if (!FP_INHIBIT_RESULTS) \ + _FP_PACK_RAW_2_P (D, (val), X); \ + } \ + while (0) + +# define FP_ISSIGNAN_D(X) _FP_ISSIGNAN (D, 2, X) +# define FP_NEG_D(R, X) _FP_NEG (D, 2, R, X) +# define FP_ADD_D(R, X, Y) _FP_ADD (D, 2, R, X, Y) +# define FP_SUB_D(R, X, Y) _FP_SUB (D, 2, R, X, Y) +# define FP_MUL_D(R, X, Y) _FP_MUL (D, 2, R, X, Y) +# define FP_DIV_D(R, X, Y) _FP_DIV (D, 2, R, X, Y) +# define FP_SQRT_D(R, X) _FP_SQRT (D, 2, R, X) +# define _FP_SQRT_MEAT_D(R, S, T, X, Q) _FP_SQRT_MEAT_2 (R, S, T, X, (Q)) +# define FP_FMA_D(R, X, Y, Z) _FP_FMA (D, 2, 4, R, X, Y, Z) + +# define FP_CMP_D(r, X, Y, un, ex) _FP_CMP (D, 2, (r), X, Y, (un), (ex)) +# define FP_CMP_EQ_D(r, X, Y, ex) _FP_CMP_EQ (D, 2, (r), X, Y, (ex)) +# define FP_CMP_UNORD_D(r, X, Y, ex) _FP_CMP_UNORD (D, 2, (r), X, Y, (ex)) + +# define FP_TO_INT_D(r, X, rsz, rsg) _FP_TO_INT (D, 2, (r), X, (rsz), (rsg)) +# define FP_FROM_INT_D(X, r, rs, rt) _FP_FROM_INT (D, 2, X, (r), (rs), rt) + +# define _FP_FRAC_HIGH_D(X) _FP_FRAC_HIGH_2 (X) +# define _FP_FRAC_HIGH_RAW_D(X) _FP_FRAC_HIGH_2 (X) + +# define _FP_FRAC_HIGH_DW_D(X) _FP_FRAC_HIGH_4 (X) + +#else + +union _FP_UNION_D +{ + DFtype flt; + struct _FP_STRUCT_LAYOUT + { +# if __BYTE_ORDER == __BIG_ENDIAN + unsigned sign : 1; + unsigned exp : _FP_EXPBITS_D; + _FP_W_TYPE frac : _FP_FRACBITS_D - (_FP_IMPLBIT_D != 0); +# else + _FP_W_TYPE frac : _FP_FRACBITS_D - (_FP_IMPLBIT_D != 0); + unsigned exp : _FP_EXPBITS_D; + unsigned sign : 1; +# endif + } bits __attribute__ ((packed)); +}; + +# define FP_DECL_D(X) _FP_DECL (1, X) +# define FP_UNPACK_RAW_D(X, val) _FP_UNPACK_RAW_1 (D, X, (val)) +# define FP_UNPACK_RAW_DP(X, val) _FP_UNPACK_RAW_1_P (D, X, (val)) +# define FP_PACK_RAW_D(val, X) _FP_PACK_RAW_1 (D, (val), X) +# define FP_PACK_RAW_DP(val, X) \ + do \ + { \ + if (!FP_INHIBIT_RESULTS) \ + _FP_PACK_RAW_1_P (D, (val), X); \ + } \ + while (0) + +# define FP_UNPACK_D(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_1 (D, X, (val)); \ + _FP_UNPACK_CANONICAL (D, 1, X); \ + } \ + while (0) + +# define FP_UNPACK_DP(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_1_P (D, X, (val)); \ + _FP_UNPACK_CANONICAL (D, 1, X); \ + } \ + while (0) + +# define FP_UNPACK_SEMIRAW_D(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_1 (D, X, (val)); \ + _FP_UNPACK_SEMIRAW (D, 1, X); \ + } \ + while (0) + +# define FP_UNPACK_SEMIRAW_DP(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_1_P (D, X, (val)); \ + _FP_UNPACK_SEMIRAW (D, 1, X); \ + } \ + while (0) + +# define FP_PACK_D(val, X) \ + do \ + { \ + _FP_PACK_CANONICAL (D, 1, X); \ + _FP_PACK_RAW_1 (D, (val), X); \ + } \ + while (0) + +# define FP_PACK_DP(val, X) \ + do \ + { \ + _FP_PACK_CANONICAL (D, 1, X); \ + if (!FP_INHIBIT_RESULTS) \ + _FP_PACK_RAW_1_P (D, (val), X); \ + } \ + while (0) + +# define FP_PACK_SEMIRAW_D(val, X) \ + do \ + { \ + _FP_PACK_SEMIRAW (D, 1, X); \ + _FP_PACK_RAW_1 (D, (val), X); \ + } \ + while (0) + +# define FP_PACK_SEMIRAW_DP(val, X) \ + do \ + { \ + _FP_PACK_SEMIRAW (D, 1, X); \ + if (!FP_INHIBIT_RESULTS) \ + _FP_PACK_RAW_1_P (D, (val), X); \ + } \ + while (0) + +# define FP_ISSIGNAN_D(X) _FP_ISSIGNAN (D, 1, X) +# define FP_NEG_D(R, X) _FP_NEG (D, 1, R, X) +# define FP_ADD_D(R, X, Y) _FP_ADD (D, 1, R, X, Y) +# define FP_SUB_D(R, X, Y) _FP_SUB (D, 1, R, X, Y) +# define FP_MUL_D(R, X, Y) _FP_MUL (D, 1, R, X, Y) +# define FP_DIV_D(R, X, Y) _FP_DIV (D, 1, R, X, Y) +# define FP_SQRT_D(R, X) _FP_SQRT (D, 1, R, X) +# define _FP_SQRT_MEAT_D(R, S, T, X, Q) _FP_SQRT_MEAT_1 (R, S, T, X, (Q)) +# define FP_FMA_D(R, X, Y, Z) _FP_FMA (D, 1, 2, R, X, Y, Z) + +/* The implementation of _FP_MUL_D and _FP_DIV_D should be chosen by + the target machine. */ + +# define FP_CMP_D(r, X, Y, un, ex) _FP_CMP (D, 1, (r), X, Y, (un), (ex)) +# define FP_CMP_EQ_D(r, X, Y, ex) _FP_CMP_EQ (D, 1, (r), X, Y, (ex)) +# define FP_CMP_UNORD_D(r, X, Y, ex) _FP_CMP_UNORD (D, 1, (r), X, Y, (ex)) + +# define FP_TO_INT_D(r, X, rsz, rsg) _FP_TO_INT (D, 1, (r), X, (rsz), (rsg)) +# define FP_FROM_INT_D(X, r, rs, rt) _FP_FROM_INT (D, 1, X, (r), (rs), rt) + +# define _FP_FRAC_HIGH_D(X) _FP_FRAC_HIGH_1 (X) +# define _FP_FRAC_HIGH_RAW_D(X) _FP_FRAC_HIGH_1 (X) + +# define _FP_FRAC_HIGH_DW_D(X) _FP_FRAC_HIGH_2 (X) + +#endif /* W_TYPE_SIZE < 64 */ diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/eqdf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/eqdf2.c new file mode 100644 index 0000000000..e8ce12d0aa --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/eqdf2.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return 0 iff a == b, 1 otherwise + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +CMPtype +__eqdf2 (DFtype a, DFtype b) +{ + FP_DECL_EX; + FP_DECL_D (A); + FP_DECL_D (B); + CMPtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_D (A, a); + FP_UNPACK_RAW_D (B, b); + FP_CMP_EQ_D (r, A, B, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} + +strong_alias (__eqdf2, __nedf2); diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/eqsf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/eqsf2.c new file mode 100644 index 0000000000..2ee837d847 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/eqsf2.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return 0 iff a == b, 1 otherwise + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +CMPtype +__eqsf2 (SFtype a, SFtype b) +{ + FP_DECL_EX; + FP_DECL_S (A); + FP_DECL_S (B); + CMPtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); + FP_UNPACK_RAW_S (B, b); + FP_CMP_EQ_S (r, A, B, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} + +strong_alias (__eqsf2, __nesf2); diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/eqtf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/eqtf2.c new file mode 100644 index 0000000000..17b9d40a05 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/eqtf2.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return 0 iff a == b, 1 otherwise + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +CMPtype +__eqtf2 (TFtype a, TFtype b) +{ + FP_DECL_EX; + FP_DECL_Q (A); + FP_DECL_Q (B); + CMPtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_Q (A, a); + FP_UNPACK_RAW_Q (B, b); + FP_CMP_EQ_Q (r, A, B, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} + +strong_alias (__eqtf2, __netf2); diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/extenddftf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/extenddftf2.c new file mode 100644 index 0000000000..17655326d8 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/extenddftf2.c @@ -0,0 +1,55 @@ +/* Software floating-point emulation. + Return a converted to IEEE quad + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#define FP_NO_EXACT_UNDERFLOW +#include "soft-fp.h" +#include "double.h" +#include "quad.h" + +TFtype +__extenddftf2 (DFtype a) +{ + FP_DECL_EX; + FP_DECL_D (A); + FP_DECL_Q (R); + TFtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_D (A, a); +#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q + FP_EXTEND (Q, D, 4, 2, R, A); +#else + FP_EXTEND (Q, D, 2, 1, R, A); +#endif + FP_PACK_RAW_Q (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/extended.h b/contrib/toolchain/gcc/5x/libgcc/soft-fp/extended.h new file mode 100644 index 0000000000..d16fa66174 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/extended.h @@ -0,0 +1,504 @@ +/* Software floating-point emulation. + Definitions for IEEE Extended Precision. + Copyright (C) 1999-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#if _FP_W_TYPE_SIZE < 32 +# error "Here's a nickel, kid. Go buy yourself a real computer." +#endif + +#if _FP_W_TYPE_SIZE < 64 +# define _FP_FRACTBITS_E (4*_FP_W_TYPE_SIZE) +# define _FP_FRACTBITS_DW_E (8*_FP_W_TYPE_SIZE) +#else +# define _FP_FRACTBITS_E (2*_FP_W_TYPE_SIZE) +# define _FP_FRACTBITS_DW_E (4*_FP_W_TYPE_SIZE) +#endif + +#define _FP_FRACBITS_E 64 +#define _FP_FRACXBITS_E (_FP_FRACTBITS_E - _FP_FRACBITS_E) +#define _FP_WFRACBITS_E (_FP_WORKBITS + _FP_FRACBITS_E) +#define _FP_WFRACXBITS_E (_FP_FRACTBITS_E - _FP_WFRACBITS_E) +#define _FP_EXPBITS_E 15 +#define _FP_EXPBIAS_E 16383 +#define _FP_EXPMAX_E 32767 + +#define _FP_QNANBIT_E \ + ((_FP_W_TYPE) 1 << (_FP_FRACBITS_E-2) % _FP_W_TYPE_SIZE) +#define _FP_QNANBIT_SH_E \ + ((_FP_W_TYPE) 1 << (_FP_FRACBITS_E-2+_FP_WORKBITS) % _FP_W_TYPE_SIZE) +#define _FP_IMPLBIT_E \ + ((_FP_W_TYPE) 1 << (_FP_FRACBITS_E-1) % _FP_W_TYPE_SIZE) +#define _FP_IMPLBIT_SH_E \ + ((_FP_W_TYPE) 1 << (_FP_FRACBITS_E-1+_FP_WORKBITS) % _FP_W_TYPE_SIZE) +#define _FP_OVERFLOW_E \ + ((_FP_W_TYPE) 1 << (_FP_WFRACBITS_E % _FP_W_TYPE_SIZE)) + +#define _FP_WFRACBITS_DW_E (2 * _FP_WFRACBITS_E) +#define _FP_WFRACXBITS_DW_E (_FP_FRACTBITS_DW_E - _FP_WFRACBITS_DW_E) +#define _FP_HIGHBIT_DW_E \ + ((_FP_W_TYPE) 1 << (_FP_WFRACBITS_DW_E - 1) % _FP_W_TYPE_SIZE) + +typedef float XFtype __attribute__ ((mode (XF))); + +#if _FP_W_TYPE_SIZE < 64 + +union _FP_UNION_E +{ + XFtype flt; + struct _FP_STRUCT_LAYOUT + { +# if __BYTE_ORDER == __BIG_ENDIAN + unsigned long pad1 : _FP_W_TYPE_SIZE; + unsigned long pad2 : (_FP_W_TYPE_SIZE - 1 - _FP_EXPBITS_E); + unsigned long sign : 1; + unsigned long exp : _FP_EXPBITS_E; + unsigned long frac1 : _FP_W_TYPE_SIZE; + unsigned long frac0 : _FP_W_TYPE_SIZE; +# else + unsigned long frac0 : _FP_W_TYPE_SIZE; + unsigned long frac1 : _FP_W_TYPE_SIZE; + unsigned exp : _FP_EXPBITS_E; + unsigned sign : 1; +# endif /* not bigendian */ + } bits __attribute__ ((packed)); +}; + + +# define FP_DECL_E(X) _FP_DECL (4, X) + +# define FP_UNPACK_RAW_E(X, val) \ + do \ + { \ + union _FP_UNION_E FP_UNPACK_RAW_E_flo; \ + FP_UNPACK_RAW_E_flo.flt = (val); \ + \ + X##_f[2] = 0; \ + X##_f[3] = 0; \ + X##_f[0] = FP_UNPACK_RAW_E_flo.bits.frac0; \ + X##_f[1] = FP_UNPACK_RAW_E_flo.bits.frac1; \ + X##_e = FP_UNPACK_RAW_E_flo.bits.exp; \ + X##_s = FP_UNPACK_RAW_E_flo.bits.sign; \ + } \ + while (0) + +# define FP_UNPACK_RAW_EP(X, val) \ + do \ + { \ + union _FP_UNION_E *FP_UNPACK_RAW_EP_flo \ + = (union _FP_UNION_E *) (val); \ + \ + X##_f[2] = 0; \ + X##_f[3] = 0; \ + X##_f[0] = FP_UNPACK_RAW_EP_flo->bits.frac0; \ + X##_f[1] = FP_UNPACK_RAW_EP_flo->bits.frac1; \ + X##_e = FP_UNPACK_RAW_EP_flo->bits.exp; \ + X##_s = FP_UNPACK_RAW_EP_flo->bits.sign; \ + } \ + while (0) + +# define FP_PACK_RAW_E(val, X) \ + do \ + { \ + union _FP_UNION_E FP_PACK_RAW_E_flo; \ + \ + if (X##_e) \ + X##_f[1] |= _FP_IMPLBIT_E; \ + else \ + X##_f[1] &= ~(_FP_IMPLBIT_E); \ + FP_PACK_RAW_E_flo.bits.frac0 = X##_f[0]; \ + FP_PACK_RAW_E_flo.bits.frac1 = X##_f[1]; \ + FP_PACK_RAW_E_flo.bits.exp = X##_e; \ + FP_PACK_RAW_E_flo.bits.sign = X##_s; \ + \ + (val) = FP_PACK_RAW_E_flo.flt; \ + } \ + while (0) + +# define FP_PACK_RAW_EP(val, X) \ + do \ + { \ + if (!FP_INHIBIT_RESULTS) \ + { \ + union _FP_UNION_E *FP_PACK_RAW_EP_flo \ + = (union _FP_UNION_E *) (val); \ + \ + if (X##_e) \ + X##_f[1] |= _FP_IMPLBIT_E; \ + else \ + X##_f[1] &= ~(_FP_IMPLBIT_E); \ + FP_PACK_RAW_EP_flo->bits.frac0 = X##_f[0]; \ + FP_PACK_RAW_EP_flo->bits.frac1 = X##_f[1]; \ + FP_PACK_RAW_EP_flo->bits.exp = X##_e; \ + FP_PACK_RAW_EP_flo->bits.sign = X##_s; \ + } \ + } \ + while (0) + +# define FP_UNPACK_E(X, val) \ + do \ + { \ + FP_UNPACK_RAW_E (X, (val)); \ + _FP_UNPACK_CANONICAL (E, 4, X); \ + } \ + while (0) + +# define FP_UNPACK_EP(X, val) \ + do \ + { \ + FP_UNPACK_RAW_EP (X, (val)); \ + _FP_UNPACK_CANONICAL (E, 4, X); \ + } \ + while (0) + +# define FP_UNPACK_SEMIRAW_E(X, val) \ + do \ + { \ + FP_UNPACK_RAW_E (X, (val)); \ + _FP_UNPACK_SEMIRAW (E, 4, X); \ + } \ + while (0) + +# define FP_UNPACK_SEMIRAW_EP(X, val) \ + do \ + { \ + FP_UNPACK_RAW_EP (X, (val)); \ + _FP_UNPACK_SEMIRAW (E, 4, X); \ + } \ + while (0) + +# define FP_PACK_E(val, X) \ + do \ + { \ + _FP_PACK_CANONICAL (E, 4, X); \ + FP_PACK_RAW_E ((val), X); \ + } \ + while (0) + +# define FP_PACK_EP(val, X) \ + do \ + { \ + _FP_PACK_CANONICAL (E, 4, X); \ + FP_PACK_RAW_EP ((val), X); \ + } \ + while (0) + +# define FP_PACK_SEMIRAW_E(val, X) \ + do \ + { \ + _FP_PACK_SEMIRAW (E, 4, X); \ + FP_PACK_RAW_E ((val), X); \ + } \ + while (0) + +# define FP_PACK_SEMIRAW_EP(val, X) \ + do \ + { \ + _FP_PACK_SEMIRAW (E, 4, X); \ + FP_PACK_RAW_EP ((val), X); \ + } \ + while (0) + +# define FP_ISSIGNAN_E(X) _FP_ISSIGNAN (E, 4, X) +# define FP_NEG_E(R, X) _FP_NEG (E, 4, R, X) +# define FP_ADD_E(R, X, Y) _FP_ADD (E, 4, R, X, Y) +# define FP_SUB_E(R, X, Y) _FP_SUB (E, 4, R, X, Y) +# define FP_MUL_E(R, X, Y) _FP_MUL (E, 4, R, X, Y) +# define FP_DIV_E(R, X, Y) _FP_DIV (E, 4, R, X, Y) +# define FP_SQRT_E(R, X) _FP_SQRT (E, 4, R, X) +# define FP_FMA_E(R, X, Y, Z) _FP_FMA (E, 4, 8, R, X, Y, Z) + +/* Square root algorithms: + We have just one right now, maybe Newton approximation + should be added for those machines where division is fast. + This has special _E version because standard _4 square + root would not work (it has to start normally with the + second word and not the first), but as we have to do it + anyway, we optimize it by doing most of the calculations + in two UWtype registers instead of four. */ + +# define _FP_SQRT_MEAT_E(R, S, T, X, q) \ + do \ + { \ + (q) = (_FP_W_TYPE) 1 << (_FP_W_TYPE_SIZE - 1); \ + _FP_FRAC_SRL_4 (X, (_FP_WORKBITS)); \ + while (q) \ + { \ + T##_f[1] = S##_f[1] + (q); \ + if (T##_f[1] <= X##_f[1]) \ + { \ + S##_f[1] = T##_f[1] + (q); \ + X##_f[1] -= T##_f[1]; \ + R##_f[1] += (q); \ + } \ + _FP_FRAC_SLL_2 (X, 1); \ + (q) >>= 1; \ + } \ + (q) = (_FP_W_TYPE) 1 << (_FP_W_TYPE_SIZE - 1); \ + while (q) \ + { \ + T##_f[0] = S##_f[0] + (q); \ + T##_f[1] = S##_f[1]; \ + if (T##_f[1] < X##_f[1] \ + || (T##_f[1] == X##_f[1] \ + && T##_f[0] <= X##_f[0])) \ + { \ + S##_f[0] = T##_f[0] + (q); \ + S##_f[1] += (T##_f[0] > S##_f[0]); \ + _FP_FRAC_DEC_2 (X, T); \ + R##_f[0] += (q); \ + } \ + _FP_FRAC_SLL_2 (X, 1); \ + (q) >>= 1; \ + } \ + _FP_FRAC_SLL_4 (R, (_FP_WORKBITS)); \ + if (X##_f[0] | X##_f[1]) \ + { \ + if (S##_f[1] < X##_f[1] \ + || (S##_f[1] == X##_f[1] \ + && S##_f[0] < X##_f[0])) \ + R##_f[0] |= _FP_WORK_ROUND; \ + R##_f[0] |= _FP_WORK_STICKY; \ + } \ + } \ + while (0) + +# define FP_CMP_E(r, X, Y, un, ex) _FP_CMP (E, 4, (r), X, Y, (un), (ex)) +# define FP_CMP_EQ_E(r, X, Y, ex) _FP_CMP_EQ (E, 4, (r), X, Y, (ex)) +# define FP_CMP_UNORD_E(r, X, Y, ex) _FP_CMP_UNORD (E, 4, (r), X, Y, (ex)) + +# define FP_TO_INT_E(r, X, rsz, rsg) _FP_TO_INT (E, 4, (r), X, (rsz), (rsg)) +# define FP_FROM_INT_E(X, r, rs, rt) _FP_FROM_INT (E, 4, X, (r), (rs), rt) + +# define _FP_FRAC_HIGH_E(X) (X##_f[2]) +# define _FP_FRAC_HIGH_RAW_E(X) (X##_f[1]) + +# define _FP_FRAC_HIGH_DW_E(X) (X##_f[4]) + +#else /* not _FP_W_TYPE_SIZE < 64 */ +union _FP_UNION_E +{ + XFtype flt; + struct _FP_STRUCT_LAYOUT + { +# if __BYTE_ORDER == __BIG_ENDIAN + _FP_W_TYPE pad : (_FP_W_TYPE_SIZE - 1 - _FP_EXPBITS_E); + unsigned sign : 1; + unsigned exp : _FP_EXPBITS_E; + _FP_W_TYPE frac : _FP_W_TYPE_SIZE; +# else + _FP_W_TYPE frac : _FP_W_TYPE_SIZE; + unsigned exp : _FP_EXPBITS_E; + unsigned sign : 1; +# endif + } bits; +}; + +# define FP_DECL_E(X) _FP_DECL (2, X) + +# define FP_UNPACK_RAW_E(X, val) \ + do \ + { \ + union _FP_UNION_E FP_UNPACK_RAW_E_flo; \ + FP_UNPACK_RAW_E_flo.flt = (val); \ + \ + X##_f0 = FP_UNPACK_RAW_E_flo.bits.frac; \ + X##_f1 = 0; \ + X##_e = FP_UNPACK_RAW_E_flo.bits.exp; \ + X##_s = FP_UNPACK_RAW_E_flo.bits.sign; \ + } \ + while (0) + +# define FP_UNPACK_RAW_EP(X, val) \ + do \ + { \ + union _FP_UNION_E *FP_UNPACK_RAW_EP_flo \ + = (union _FP_UNION_E *) (val); \ + \ + X##_f0 = FP_UNPACK_RAW_EP_flo->bits.frac; \ + X##_f1 = 0; \ + X##_e = FP_UNPACK_RAW_EP_flo->bits.exp; \ + X##_s = FP_UNPACK_RAW_EP_flo->bits.sign; \ + } \ + while (0) + +# define FP_PACK_RAW_E(val, X) \ + do \ + { \ + union _FP_UNION_E FP_PACK_RAW_E_flo; \ + \ + if (X##_e) \ + X##_f0 |= _FP_IMPLBIT_E; \ + else \ + X##_f0 &= ~(_FP_IMPLBIT_E); \ + FP_PACK_RAW_E_flo.bits.frac = X##_f0; \ + FP_PACK_RAW_E_flo.bits.exp = X##_e; \ + FP_PACK_RAW_E_flo.bits.sign = X##_s; \ + \ + (val) = FP_PACK_RAW_E_flo.flt; \ + } \ + while (0) + +# define FP_PACK_RAW_EP(fs, val, X) \ + do \ + { \ + if (!FP_INHIBIT_RESULTS) \ + { \ + union _FP_UNION_E *FP_PACK_RAW_EP_flo \ + = (union _FP_UNION_E *) (val); \ + \ + if (X##_e) \ + X##_f0 |= _FP_IMPLBIT_E; \ + else \ + X##_f0 &= ~(_FP_IMPLBIT_E); \ + FP_PACK_RAW_EP_flo->bits.frac = X##_f0; \ + FP_PACK_RAW_EP_flo->bits.exp = X##_e; \ + FP_PACK_RAW_EP_flo->bits.sign = X##_s; \ + } \ + } \ + while (0) + + +# define FP_UNPACK_E(X, val) \ + do \ + { \ + FP_UNPACK_RAW_E (X, (val)); \ + _FP_UNPACK_CANONICAL (E, 2, X); \ + } \ + while (0) + +# define FP_UNPACK_EP(X, val) \ + do \ + { \ + FP_UNPACK_RAW_EP (X, (val)); \ + _FP_UNPACK_CANONICAL (E, 2, X); \ + } \ + while (0) + +# define FP_UNPACK_SEMIRAW_E(X, val) \ + do \ + { \ + FP_UNPACK_RAW_E (X, (val)); \ + _FP_UNPACK_SEMIRAW (E, 2, X); \ + } \ + while (0) + +# define FP_UNPACK_SEMIRAW_EP(X, val) \ + do \ + { \ + FP_UNPACK_RAW_EP (X, (val)); \ + _FP_UNPACK_SEMIRAW (E, 2, X); \ + } \ + while (0) + +# define FP_PACK_E(val, X) \ + do \ + { \ + _FP_PACK_CANONICAL (E, 2, X); \ + FP_PACK_RAW_E ((val), X); \ + } \ + while (0) + +# define FP_PACK_EP(val, X) \ + do \ + { \ + _FP_PACK_CANONICAL (E, 2, X); \ + FP_PACK_RAW_EP ((val), X); \ + } \ + while (0) + +# define FP_PACK_SEMIRAW_E(val, X) \ + do \ + { \ + _FP_PACK_SEMIRAW (E, 2, X); \ + FP_PACK_RAW_E ((val), X); \ + } \ + while (0) + +# define FP_PACK_SEMIRAW_EP(val, X) \ + do \ + { \ + _FP_PACK_SEMIRAW (E, 2, X); \ + FP_PACK_RAW_EP ((val), X); \ + } \ + while (0) + +# define FP_ISSIGNAN_E(X) _FP_ISSIGNAN (E, 2, X) +# define FP_NEG_E(R, X) _FP_NEG (E, 2, R, X) +# define FP_ADD_E(R, X, Y) _FP_ADD (E, 2, R, X, Y) +# define FP_SUB_E(R, X, Y) _FP_SUB (E, 2, R, X, Y) +# define FP_MUL_E(R, X, Y) _FP_MUL (E, 2, R, X, Y) +# define FP_DIV_E(R, X, Y) _FP_DIV (E, 2, R, X, Y) +# define FP_SQRT_E(R, X) _FP_SQRT (E, 2, R, X) +# define FP_FMA_E(R, X, Y, Z) _FP_FMA (E, 2, 4, R, X, Y, Z) + +/* Square root algorithms: + We have just one right now, maybe Newton approximation + should be added for those machines where division is fast. + We optimize it by doing most of the calculations + in one UWtype registers instead of two, although we don't + have to. */ +# define _FP_SQRT_MEAT_E(R, S, T, X, q) \ + do \ + { \ + (q) = (_FP_W_TYPE) 1 << (_FP_W_TYPE_SIZE - 1); \ + _FP_FRAC_SRL_2 (X, (_FP_WORKBITS)); \ + while (q) \ + { \ + T##_f0 = S##_f0 + (q); \ + if (T##_f0 <= X##_f0) \ + { \ + S##_f0 = T##_f0 + (q); \ + X##_f0 -= T##_f0; \ + R##_f0 += (q); \ + } \ + _FP_FRAC_SLL_1 (X, 1); \ + (q) >>= 1; \ + } \ + _FP_FRAC_SLL_2 (R, (_FP_WORKBITS)); \ + if (X##_f0) \ + { \ + if (S##_f0 < X##_f0) \ + R##_f0 |= _FP_WORK_ROUND; \ + R##_f0 |= _FP_WORK_STICKY; \ + } \ + } \ + while (0) + +# define FP_CMP_E(r, X, Y, un, ex) _FP_CMP (E, 2, (r), X, Y, (un), (ex)) +# define FP_CMP_EQ_E(r, X, Y, ex) _FP_CMP_EQ (E, 2, (r), X, Y, (ex)) +# define FP_CMP_UNORD_E(r, X, Y, ex) _FP_CMP_UNORD (E, 2, (r), X, Y, (ex)) + +# define FP_TO_INT_E(r, X, rsz, rsg) _FP_TO_INT (E, 2, (r), X, (rsz), (rsg)) +# define FP_FROM_INT_E(X, r, rs, rt) _FP_FROM_INT (E, 2, X, (r), (rs), rt) + +# define _FP_FRAC_HIGH_E(X) (X##_f1) +# define _FP_FRAC_HIGH_RAW_E(X) (X##_f0) + +# define _FP_FRAC_HIGH_DW_E(X) (X##_f[2]) + +#endif /* not _FP_W_TYPE_SIZE < 64 */ diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/extendsfdf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/extendsfdf2.c new file mode 100644 index 0000000000..6224195ce9 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/extendsfdf2.c @@ -0,0 +1,55 @@ +/* Software floating-point emulation. + Return a converted to IEEE double + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#define FP_NO_EXACT_UNDERFLOW +#include "soft-fp.h" +#include "single.h" +#include "double.h" + +DFtype +__extendsfdf2 (SFtype a) +{ + FP_DECL_EX; + FP_DECL_S (A); + FP_DECL_D (R); + DFtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +#if _FP_W_TYPE_SIZE < _FP_FRACBITS_D + FP_EXTEND (D, S, 2, 1, R, A); +#else + FP_EXTEND (D, S, 1, 1, R, A); +#endif + FP_PACK_RAW_D (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/extendsftf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/extendsftf2.c new file mode 100644 index 0000000000..f67d614d7c --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/extendsftf2.c @@ -0,0 +1,55 @@ +/* Software floating-point emulation. + Return a converted to IEEE quad + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#define FP_NO_EXACT_UNDERFLOW +#include "soft-fp.h" +#include "single.h" +#include "quad.h" + +TFtype +__extendsftf2 (SFtype a) +{ + FP_DECL_EX; + FP_DECL_S (A); + FP_DECL_Q (R); + TFtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); +#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q + FP_EXTEND (Q, S, 4, 1, R, A); +#else + FP_EXTEND (Q, S, 2, 1, R, A); +#endif + FP_PACK_RAW_Q (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/extendxftf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/extendxftf2.c new file mode 100644 index 0000000000..a1386a68e6 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/extendxftf2.c @@ -0,0 +1,53 @@ +/* Software floating-point emulation. + Return a converted to IEEE quad + Copyright (C) 2007-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "extended.h" +#include "quad.h" + +TFtype +__extendxftf2 (XFtype a) +{ + FP_DECL_EX; + FP_DECL_E (A); + FP_DECL_Q (R); + TFtype r; + + FP_INIT_TRAPPING_EXCEPTIONS; + FP_UNPACK_RAW_E (A, a); +#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q + FP_EXTEND (Q, E, 4, 4, R, A); +#else + FP_EXTEND (Q, E, 2, 2, R, A); +#endif + FP_PACK_RAW_Q (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixdfdi.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixdfdi.c new file mode 100644 index 0000000000..4b7659a467 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixdfdi.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a to 64bit signed integer + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +DItype +__fixdfdi (DFtype a) +{ + FP_DECL_EX; + FP_DECL_D (A); + UDItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_D (A, a); + FP_TO_INT_D (r, A, DI_BITS, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixdfsi.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixdfsi.c new file mode 100644 index 0000000000..1545454a0b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixdfsi.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a to 32bit signed integer + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +SItype +__fixdfsi (DFtype a) +{ + FP_DECL_EX; + FP_DECL_D (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_D (A, a); + FP_TO_INT_D (r, A, SI_BITS, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixdfti.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixdfti.c new file mode 100644 index 0000000000..b47b7c22cb --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixdfti.c @@ -0,0 +1,46 @@ +/* Software floating-point emulation. + Convert IEEE double to 128bit signed integer + Copyright (C) 2007-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +TItype +__fixdfti (DFtype a) +{ + FP_DECL_EX; + FP_DECL_D (A); + UTItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_D (A, a); + FP_TO_INT_D (r, A, TI_BITS, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixsfdi.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixsfdi.c new file mode 100644 index 0000000000..5353839b93 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixsfdi.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a to 64bit signed integer + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +DItype +__fixsfdi (SFtype a) +{ + FP_DECL_EX; + FP_DECL_S (A); + UDItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); + FP_TO_INT_S (r, A, DI_BITS, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixsfsi.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixsfsi.c new file mode 100644 index 0000000000..8fbebaac61 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixsfsi.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a to 32bit signed integer + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +SItype +__fixsfsi (SFtype a) +{ + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); + FP_TO_INT_S (r, A, SI_BITS, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixsfti.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixsfti.c new file mode 100644 index 0000000000..cf7d284a07 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixsfti.c @@ -0,0 +1,46 @@ +/* Software floating-point emulation. + Convert IEEE single to 128bit signed integer + Copyright (C) 2007-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +TItype +__fixsfti (SFtype a) +{ + FP_DECL_EX; + FP_DECL_S (A); + UTItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); + FP_TO_INT_S (r, A, TI_BITS, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixtfdi.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixtfdi.c new file mode 100644 index 0000000000..3697d0f070 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixtfdi.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a to 64bit signed integer + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +DItype +__fixtfdi (TFtype a) +{ + FP_DECL_EX; + FP_DECL_Q (A); + UDItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_Q (A, a); + FP_TO_INT_Q (r, A, DI_BITS, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixtfsi.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixtfsi.c new file mode 100644 index 0000000000..220a11ac66 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixtfsi.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a to 32bit signed integer + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +SItype +__fixtfsi (TFtype a) +{ + FP_DECL_EX; + FP_DECL_Q (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_Q (A, a); + FP_TO_INT_Q (r, A, SI_BITS, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixtfti.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixtfti.c new file mode 100644 index 0000000000..47b062d15c --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixtfti.c @@ -0,0 +1,46 @@ +/* Software floating-point emulation. + Convert IEEE quad to 128bit signed integer + Copyright (C) 2007-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +TItype +__fixtfti (TFtype a) +{ + FP_DECL_EX; + FP_DECL_Q (A); + UTItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_Q (A, a); + FP_TO_INT_Q (r, A, TI_BITS, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunsdfdi.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunsdfdi.c new file mode 100644 index 0000000000..a0a8be94f6 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunsdfdi.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a to 64bit unsigned integer + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +UDItype +__fixunsdfdi (DFtype a) +{ + FP_DECL_EX; + FP_DECL_D (A); + UDItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_D (A, a); + FP_TO_INT_D (r, A, DI_BITS, 0); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunsdfsi.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunsdfsi.c new file mode 100644 index 0000000000..8905d825ef --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunsdfsi.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a to 32bit unsigned integer + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +USItype +__fixunsdfsi (DFtype a) +{ + FP_DECL_EX; + FP_DECL_D (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_D (A, a); + FP_TO_INT_D (r, A, SI_BITS, 0); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunsdfti.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunsdfti.c new file mode 100644 index 0000000000..de8189e1a1 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunsdfti.c @@ -0,0 +1,46 @@ +/* Software floating-point emulation. + Convert IEEE double to 128bit unsigned integer + Copyright (C) 2007-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +UTItype +__fixunsdfti (DFtype a) +{ + FP_DECL_EX; + FP_DECL_D (A); + UTItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_D (A, a); + FP_TO_INT_D (r, A, TI_BITS, 0); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunssfdi.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunssfdi.c new file mode 100644 index 0000000000..68e413d870 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunssfdi.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a to 64bit unsigned integer + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +UDItype +__fixunssfdi (SFtype a) +{ + FP_DECL_EX; + FP_DECL_S (A); + UDItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); + FP_TO_INT_S (r, A, DI_BITS, 0); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunssfsi.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunssfsi.c new file mode 100644 index 0000000000..7e0bc6bbb8 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunssfsi.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a to 32bit unsigned integer + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +USItype +__fixunssfsi (SFtype a) +{ + FP_DECL_EX; + FP_DECL_S (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); + FP_TO_INT_S (r, A, SI_BITS, 0); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunssfti.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunssfti.c new file mode 100644 index 0000000000..264ba13a6d --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunssfti.c @@ -0,0 +1,46 @@ +/* Software floating-point emulation. + Convert IEEE single to 128bit unsigned integer + Copyright (C) 2007-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +UTItype +__fixunssfti (SFtype a) +{ + FP_DECL_EX; + FP_DECL_S (A); + UTItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); + FP_TO_INT_S (r, A, TI_BITS, 0); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunstfdi.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunstfdi.c new file mode 100644 index 0000000000..7e866e4218 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunstfdi.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a to 64bit unsigned integer + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +UDItype +__fixunstfdi (TFtype a) +{ + FP_DECL_EX; + FP_DECL_Q (A); + UDItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_Q (A, a); + FP_TO_INT_Q (r, A, DI_BITS, 0); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunstfsi.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunstfsi.c new file mode 100644 index 0000000000..9665721f3b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunstfsi.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a to 32bit unsigned integer + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +USItype +__fixunstfsi (TFtype a) +{ + FP_DECL_EX; + FP_DECL_Q (A); + USItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_Q (A, a); + FP_TO_INT_Q (r, A, SI_BITS, 0); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunstfti.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunstfti.c new file mode 100644 index 0000000000..fcdf122d24 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/fixunstfti.c @@ -0,0 +1,46 @@ +/* Software floating-point emulation. + Convert IEEE quad to 128bit unsigned integer + Copyright (C) 2007-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +UTItype +__fixunstfti (TFtype a) +{ + FP_DECL_EX; + FP_DECL_Q (A); + UTItype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_Q (A, a); + FP_TO_INT_Q (r, A, TI_BITS, 0); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatdidf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatdidf.c new file mode 100644 index 0000000000..f290e248f8 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatdidf.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a 64bit signed integer to IEEE double + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +DFtype +__floatdidf (DItype i) +{ + FP_DECL_EX; + FP_DECL_D (A); + DFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_D (A, i, DI_BITS, UDItype); + FP_PACK_RAW_D (a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatdisf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatdisf.c new file mode 100644 index 0000000000..b54cef8ae0 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatdisf.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a 64bit signed integer to IEEE single + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatdisf (DItype i) +{ + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, DI_BITS, UDItype); + FP_PACK_RAW_S (a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatditf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatditf.c new file mode 100644 index 0000000000..33c3b197db --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatditf.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a 64bit signed integer to IEEE quad + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#define FP_NO_EXCEPTIONS +#include "soft-fp.h" +#include "quad.h" + +TFtype +__floatditf (DItype i) +{ + FP_DECL_Q (A); + TFtype a; + + FP_FROM_INT_Q (A, i, DI_BITS, UDItype); + FP_PACK_RAW_Q (a, A); + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatsidf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatsidf.c new file mode 100644 index 0000000000..fdd9d752f0 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatsidf.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a 32bit signed integer to IEEE double + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#define FP_NO_EXCEPTIONS +#include "soft-fp.h" +#include "double.h" + +DFtype +__floatsidf (SItype i) +{ + FP_DECL_D (A); + DFtype a; + + FP_FROM_INT_D (A, i, SI_BITS, USItype); + FP_PACK_RAW_D (a, A); + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatsisf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatsisf.c new file mode 100644 index 0000000000..3b2f8047bd --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatsisf.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a 32bit signed integer to IEEE single + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatsisf (SItype i) +{ + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); + FP_PACK_RAW_S (a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatsitf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatsitf.c new file mode 100644 index 0000000000..d92e4bdd25 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatsitf.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a 32bit signed integer to IEEE quad + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#define FP_NO_EXCEPTIONS +#include "soft-fp.h" +#include "quad.h" + +TFtype +__floatsitf (SItype i) +{ + FP_DECL_Q (A); + TFtype a; + + FP_FROM_INT_Q (A, i, SI_BITS, USItype); + FP_PACK_RAW_Q (a, A); + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floattidf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floattidf.c new file mode 100644 index 0000000000..74c3599f04 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floattidf.c @@ -0,0 +1,46 @@ +/* Software floating-point emulation. + Convert a 128bit signed integer to IEEE double + Copyright (C) 2007-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +DFtype +__floattidf (TItype i) +{ + FP_DECL_EX; + FP_DECL_D (A); + DFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_D (A, i, TI_BITS, UTItype); + FP_PACK_RAW_D (a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floattisf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floattisf.c new file mode 100644 index 0000000000..1dc76438a0 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floattisf.c @@ -0,0 +1,46 @@ +/* Software floating-point emulation. + Convert a 128bit signed integer to IEEE single + Copyright (C) 2007-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +SFtype +__floattisf (TItype i) +{ + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, TI_BITS, UTItype); + FP_PACK_RAW_S (a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floattitf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floattitf.c new file mode 100644 index 0000000000..8c439260b7 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floattitf.c @@ -0,0 +1,46 @@ +/* Software floating-point emulation. + Convert a 128bit signed integer to IEEE quad + Copyright (C) 2007-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +TFtype +__floattitf (TItype i) +{ + FP_DECL_EX; + FP_DECL_Q (A); + TFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_Q (A, i, TI_BITS, UTItype); + FP_PACK_RAW_Q (a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatundidf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatundidf.c new file mode 100644 index 0000000000..43d59c19b2 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatundidf.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a 64bit unsigned integer to IEEE double + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +DFtype +__floatundidf (UDItype i) +{ + FP_DECL_EX; + FP_DECL_D (A); + DFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_D (A, i, DI_BITS, UDItype); + FP_PACK_RAW_D (a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatundisf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatundisf.c new file mode 100644 index 0000000000..bf32a214fd --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatundisf.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a 64bit unsigned integer to IEEE single + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatundisf (UDItype i) +{ + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, DI_BITS, UDItype); + FP_PACK_RAW_S (a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatunditf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatunditf.c new file mode 100644 index 0000000000..4eff13671a --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatunditf.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a 64bit unsigned integer to IEEE quad + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#define FP_NO_EXCEPTIONS +#include "soft-fp.h" +#include "quad.h" + +TFtype +__floatunditf (UDItype i) +{ + FP_DECL_Q (A); + TFtype a; + + FP_FROM_INT_Q (A, i, DI_BITS, UDItype); + FP_PACK_RAW_Q (a, A); + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatunsidf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatunsidf.c new file mode 100644 index 0000000000..e995bf4e6a --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatunsidf.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a 32bit unsigned integer to IEEE double + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#define FP_NO_EXCEPTIONS +#include "soft-fp.h" +#include "double.h" + +DFtype +__floatunsidf (USItype i) +{ + FP_DECL_D (A); + DFtype a; + + FP_FROM_INT_D (A, i, SI_BITS, USItype); + FP_PACK_RAW_D (a, A); + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatunsisf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatunsisf.c new file mode 100644 index 0000000000..803e0db77f --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatunsisf.c @@ -0,0 +1,47 @@ +/* Software floating-point emulation. + Convert a 32bit unsigned integer to IEEE single + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatunsisf (USItype i) +{ + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, SI_BITS, USItype); + FP_PACK_RAW_S (a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatunsitf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatunsitf.c new file mode 100644 index 0000000000..956cb62ef2 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatunsitf.c @@ -0,0 +1,45 @@ +/* Software floating-point emulation. + Convert a 32bit unsigned integer to IEEE quad + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#define FP_NO_EXCEPTIONS +#include "soft-fp.h" +#include "quad.h" + +TFtype +__floatunsitf (USItype i) +{ + FP_DECL_Q (A); + TFtype a; + + FP_FROM_INT_Q (A, i, SI_BITS, USItype); + FP_PACK_RAW_Q (a, A); + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatuntidf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatuntidf.c new file mode 100644 index 0000000000..1b543d4a96 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatuntidf.c @@ -0,0 +1,46 @@ +/* Software floating-point emulation. + Convert a 128bit unsigned integer to IEEE double + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +DFtype +__floatuntidf (UTItype i) +{ + FP_DECL_EX; + FP_DECL_D (A); + DFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_D (A, i, TI_BITS, UTItype); + FP_PACK_RAW_D (a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatuntisf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatuntisf.c new file mode 100644 index 0000000000..09a610d309 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatuntisf.c @@ -0,0 +1,46 @@ +/* Software floating-point emulation. + Convert a 128bit unsigned integer to IEEE single + Copyright (C) 2007-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +SFtype +__floatuntisf (UTItype i) +{ + FP_DECL_EX; + FP_DECL_S (A); + SFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_S (A, i, TI_BITS, UTItype); + FP_PACK_RAW_S (a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatuntitf.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatuntitf.c new file mode 100644 index 0000000000..d6e57fdae8 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/floatuntitf.c @@ -0,0 +1,46 @@ +/* Software floating-point emulation. + Convert a 128bit unsigned integer to IEEE quad + Copyright (C) 2007-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +TFtype +__floatuntitf (UTItype i) +{ + FP_DECL_EX; + FP_DECL_Q (A); + TFtype a; + + FP_INIT_ROUNDMODE; + FP_FROM_INT_Q (A, i, TI_BITS, UTItype); + FP_PACK_RAW_Q (a, A); + FP_HANDLE_EXCEPTIONS; + + return a; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/gedf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/gedf2.c new file mode 100644 index 0000000000..a8cc94941f --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/gedf2.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return 0 iff a == b, 1 iff a > b, -2 iff a ? b, -1 iff a < b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +CMPtype +__gedf2 (DFtype a, DFtype b) +{ + FP_DECL_EX; + FP_DECL_D (A); + FP_DECL_D (B); + CMPtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_D (A, a); + FP_UNPACK_RAW_D (B, b); + FP_CMP_D (r, A, B, -2, 2); + FP_HANDLE_EXCEPTIONS; + + return r; +} + +strong_alias (__gedf2, __gtdf2); diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/gesf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/gesf2.c new file mode 100644 index 0000000000..aa84b2614d --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/gesf2.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return 0 iff a == b, 1 iff a > b, -2 iff a ? b, -1 iff a < b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +CMPtype +__gesf2 (SFtype a, SFtype b) +{ + FP_DECL_EX; + FP_DECL_S (A); + FP_DECL_S (B); + CMPtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); + FP_UNPACK_RAW_S (B, b); + FP_CMP_S (r, A, B, -2, 2); + FP_HANDLE_EXCEPTIONS; + + return r; +} + +strong_alias (__gesf2, __gtsf2); diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/getf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/getf2.c new file mode 100644 index 0000000000..c852228ddc --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/getf2.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return 0 iff a == b, 1 iff a > b, -2 iff a ? b, -1 iff a < b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +CMPtype +__getf2 (TFtype a, TFtype b) +{ + FP_DECL_EX; + FP_DECL_Q (A); + FP_DECL_Q (B); + CMPtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_Q (A, a); + FP_UNPACK_RAW_Q (B, b); + FP_CMP_Q (r, A, B, -2, 2); + FP_HANDLE_EXCEPTIONS; + + return r; +} + +strong_alias (__getf2, __gttf2); diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/ledf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/ledf2.c new file mode 100644 index 0000000000..fb5bbb29de --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/ledf2.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return 0 iff a == b, 1 iff a > b, 2 iff a ? b, -1 iff a < b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +CMPtype +__ledf2 (DFtype a, DFtype b) +{ + FP_DECL_EX; + FP_DECL_D (A); + FP_DECL_D (B); + CMPtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_D (A, a); + FP_UNPACK_RAW_D (B, b); + FP_CMP_D (r, A, B, 2, 2); + FP_HANDLE_EXCEPTIONS; + + return r; +} + +strong_alias (__ledf2, __ltdf2); diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/lesf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/lesf2.c new file mode 100644 index 0000000000..1b672042a2 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/lesf2.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return 0 iff a == b, 1 iff a > b, 2 iff a ? b, -1 iff a < b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +CMPtype +__lesf2 (SFtype a, SFtype b) +{ + FP_DECL_EX; + FP_DECL_S (A); + FP_DECL_S (B); + CMPtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); + FP_UNPACK_RAW_S (B, b); + FP_CMP_S (r, A, B, 2, 2); + FP_HANDLE_EXCEPTIONS; + + return r; +} + +strong_alias (__lesf2, __ltsf2); diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/letf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/letf2.c new file mode 100644 index 0000000000..1293519d21 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/letf2.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return 0 iff a == b, 1 iff a > b, 2 iff a ? b, -1 iff a < b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +CMPtype +__letf2 (TFtype a, TFtype b) +{ + FP_DECL_EX; + FP_DECL_Q (A); + FP_DECL_Q (B); + CMPtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_Q (A, a); + FP_UNPACK_RAW_Q (B, b); + FP_CMP_Q (r, A, B, 2, 2); + FP_HANDLE_EXCEPTIONS; + + return r; +} + +strong_alias (__letf2, __lttf2); diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/muldf3.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/muldf3.c new file mode 100644 index 0000000000..96bf65f554 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/muldf3.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return a * b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +DFtype +__muldf3 (DFtype a, DFtype b) +{ + FP_DECL_EX; + FP_DECL_D (A); + FP_DECL_D (B); + FP_DECL_D (R); + DFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_D (A, a); + FP_UNPACK_D (B, b); + FP_MUL_D (R, A, B); + FP_PACK_D (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/mulsf3.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/mulsf3.c new file mode 100644 index 0000000000..d8160a1a1b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/mulsf3.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return a * b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +SFtype +__mulsf3 (SFtype a, SFtype b) +{ + FP_DECL_EX; + FP_DECL_S (A); + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_S (A, a); + FP_UNPACK_S (B, b); + FP_MUL_S (R, A, B); + FP_PACK_S (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/multf3.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/multf3.c new file mode 100644 index 0000000000..d67a12b7bb --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/multf3.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return a * b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +TFtype +__multf3 (TFtype a, TFtype b) +{ + FP_DECL_EX; + FP_DECL_Q (A); + FP_DECL_Q (B); + FP_DECL_Q (R); + TFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_Q (A, a); + FP_UNPACK_Q (B, b); + FP_MUL_Q (R, A, B); + FP_PACK_Q (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/negdf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/negdf2.c new file mode 100644 index 0000000000..5d3c6114e5 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/negdf2.c @@ -0,0 +1,46 @@ +/* Software floating-point emulation. + Return -a + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +DFtype +__negdf2 (DFtype a) +{ + FP_DECL_D (A); + FP_DECL_D (R); + DFtype r; + + FP_UNPACK_RAW_D (A, a); + FP_NEG_D (R, A); + FP_PACK_RAW_D (r, R); + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/negsf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/negsf2.c new file mode 100644 index 0000000000..c4a06089ee --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/negsf2.c @@ -0,0 +1,46 @@ +/* Software floating-point emulation. + Return -a + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +SFtype +__negsf2 (SFtype a) +{ + FP_DECL_S (A); + FP_DECL_S (R); + SFtype r; + + FP_UNPACK_RAW_S (A, a); + FP_NEG_S (R, A); + FP_PACK_RAW_S (r, R); + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/negtf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/negtf2.c new file mode 100644 index 0000000000..5306005b8b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/negtf2.c @@ -0,0 +1,46 @@ +/* Software floating-point emulation. + Return -a + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +TFtype +__negtf2 (TFtype a) +{ + FP_DECL_Q (A); + FP_DECL_Q (R); + TFtype r; + + FP_UNPACK_RAW_Q (A, a); + FP_NEG_Q (R, A); + FP_PACK_RAW_Q (r, R); + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/op-1.h b/contrib/toolchain/gcc/5x/libgcc/soft-fp/op-1.h new file mode 100644 index 0000000000..177705caa3 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/op-1.h @@ -0,0 +1,364 @@ +/* Software floating-point emulation. + Basic one-word fraction declaration and manipulation. + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com), + Jakub Jelinek (jj@ultra.linux.cz), + David S. Miller (davem@redhat.com) and + Peter Maydell (pmaydell@chiark.greenend.org.uk). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#define _FP_FRAC_DECL_1(X) _FP_W_TYPE X##_f +#define _FP_FRAC_COPY_1(D, S) (D##_f = S##_f) +#define _FP_FRAC_SET_1(X, I) (X##_f = I) +#define _FP_FRAC_HIGH_1(X) (X##_f) +#define _FP_FRAC_LOW_1(X) (X##_f) +#define _FP_FRAC_WORD_1(X, w) (X##_f) + +#define _FP_FRAC_ADDI_1(X, I) (X##_f += I) +#define _FP_FRAC_SLL_1(X, N) \ + do \ + { \ + if (__builtin_constant_p (N) && (N) == 1) \ + X##_f += X##_f; \ + else \ + X##_f <<= (N); \ + } \ + while (0) +#define _FP_FRAC_SRL_1(X, N) (X##_f >>= N) + +/* Right shift with sticky-lsb. */ +#define _FP_FRAC_SRST_1(X, S, N, sz) __FP_FRAC_SRST_1 (X##_f, S, (N), (sz)) +#define _FP_FRAC_SRS_1(X, N, sz) __FP_FRAC_SRS_1 (X##_f, (N), (sz)) + +#define __FP_FRAC_SRST_1(X, S, N, sz) \ + do \ + { \ + S = (__builtin_constant_p (N) && (N) == 1 \ + ? X & 1 \ + : (X << (_FP_W_TYPE_SIZE - (N))) != 0); \ + X = X >> (N); \ + } \ + while (0) + +#define __FP_FRAC_SRS_1(X, N, sz) \ + (X = (X >> (N) | (__builtin_constant_p (N) && (N) == 1 \ + ? X & 1 \ + : (X << (_FP_W_TYPE_SIZE - (N))) != 0))) + +#define _FP_FRAC_ADD_1(R, X, Y) (R##_f = X##_f + Y##_f) +#define _FP_FRAC_SUB_1(R, X, Y) (R##_f = X##_f - Y##_f) +#define _FP_FRAC_DEC_1(X, Y) (X##_f -= Y##_f) +#define _FP_FRAC_CLZ_1(z, X) __FP_CLZ ((z), X##_f) + +/* Predicates. */ +#define _FP_FRAC_NEGP_1(X) ((_FP_WS_TYPE) X##_f < 0) +#define _FP_FRAC_ZEROP_1(X) (X##_f == 0) +#define _FP_FRAC_OVERP_1(fs, X) (X##_f & _FP_OVERFLOW_##fs) +#define _FP_FRAC_CLEAR_OVERP_1(fs, X) (X##_f &= ~_FP_OVERFLOW_##fs) +#define _FP_FRAC_HIGHBIT_DW_1(fs, X) (X##_f & _FP_HIGHBIT_DW_##fs) +#define _FP_FRAC_EQ_1(X, Y) (X##_f == Y##_f) +#define _FP_FRAC_GE_1(X, Y) (X##_f >= Y##_f) +#define _FP_FRAC_GT_1(X, Y) (X##_f > Y##_f) + +#define _FP_ZEROFRAC_1 0 +#define _FP_MINFRAC_1 1 +#define _FP_MAXFRAC_1 (~(_FP_WS_TYPE) 0) + +/* Unpack the raw bits of a native fp value. Do not classify or + normalize the data. */ + +#define _FP_UNPACK_RAW_1(fs, X, val) \ + do \ + { \ + union _FP_UNION_##fs _FP_UNPACK_RAW_1_flo; \ + _FP_UNPACK_RAW_1_flo.flt = (val); \ + \ + X##_f = _FP_UNPACK_RAW_1_flo.bits.frac; \ + X##_e = _FP_UNPACK_RAW_1_flo.bits.exp; \ + X##_s = _FP_UNPACK_RAW_1_flo.bits.sign; \ + } \ + while (0) + +#define _FP_UNPACK_RAW_1_P(fs, X, val) \ + do \ + { \ + union _FP_UNION_##fs *_FP_UNPACK_RAW_1_P_flo \ + = (union _FP_UNION_##fs *) (val); \ + \ + X##_f = _FP_UNPACK_RAW_1_P_flo->bits.frac; \ + X##_e = _FP_UNPACK_RAW_1_P_flo->bits.exp; \ + X##_s = _FP_UNPACK_RAW_1_P_flo->bits.sign; \ + } \ + while (0) + +/* Repack the raw bits of a native fp value. */ + +#define _FP_PACK_RAW_1(fs, val, X) \ + do \ + { \ + union _FP_UNION_##fs _FP_PACK_RAW_1_flo; \ + \ + _FP_PACK_RAW_1_flo.bits.frac = X##_f; \ + _FP_PACK_RAW_1_flo.bits.exp = X##_e; \ + _FP_PACK_RAW_1_flo.bits.sign = X##_s; \ + \ + (val) = _FP_PACK_RAW_1_flo.flt; \ + } \ + while (0) + +#define _FP_PACK_RAW_1_P(fs, val, X) \ + do \ + { \ + union _FP_UNION_##fs *_FP_PACK_RAW_1_P_flo \ + = (union _FP_UNION_##fs *) (val); \ + \ + _FP_PACK_RAW_1_P_flo->bits.frac = X##_f; \ + _FP_PACK_RAW_1_P_flo->bits.exp = X##_e; \ + _FP_PACK_RAW_1_P_flo->bits.sign = X##_s; \ + } \ + while (0) + + +/* Multiplication algorithms: */ + +/* Basic. Assuming the host word size is >= 2*FRACBITS, we can do the + multiplication immediately. */ + +#define _FP_MUL_MEAT_DW_1_imm(wfracbits, R, X, Y) \ + do \ + { \ + R##_f = X##_f * Y##_f; \ + } \ + while (0) + +#define _FP_MUL_MEAT_1_imm(wfracbits, R, X, Y) \ + do \ + { \ + _FP_MUL_MEAT_DW_1_imm ((wfracbits), R, X, Y); \ + /* Normalize since we know where the msb of the multiplicands \ + were (bit B), we know that the msb of the of the product is \ + at either 2B or 2B-1. */ \ + _FP_FRAC_SRS_1 (R, (wfracbits)-1, 2*(wfracbits)); \ + } \ + while (0) + +/* Given a 1W * 1W => 2W primitive, do the extended multiplication. */ + +#define _FP_MUL_MEAT_DW_1_wide(wfracbits, R, X, Y, doit) \ + do \ + { \ + doit (R##_f1, R##_f0, X##_f, Y##_f); \ + } \ + while (0) + +#define _FP_MUL_MEAT_1_wide(wfracbits, R, X, Y, doit) \ + do \ + { \ + _FP_FRAC_DECL_2 (_FP_MUL_MEAT_1_wide_Z); \ + _FP_MUL_MEAT_DW_1_wide ((wfracbits), _FP_MUL_MEAT_1_wide_Z, \ + X, Y, doit); \ + /* Normalize since we know where the msb of the multiplicands \ + were (bit B), we know that the msb of the of the product is \ + at either 2B or 2B-1. */ \ + _FP_FRAC_SRS_2 (_FP_MUL_MEAT_1_wide_Z, (wfracbits)-1, \ + 2*(wfracbits)); \ + R##_f = _FP_MUL_MEAT_1_wide_Z_f0; \ + } \ + while (0) + +/* Finally, a simple widening multiply algorithm. What fun! */ + +#define _FP_MUL_MEAT_DW_1_hard(wfracbits, R, X, Y) \ + do \ + { \ + _FP_W_TYPE _FP_MUL_MEAT_DW_1_hard_xh, _FP_MUL_MEAT_DW_1_hard_xl; \ + _FP_W_TYPE _FP_MUL_MEAT_DW_1_hard_yh, _FP_MUL_MEAT_DW_1_hard_yl; \ + _FP_FRAC_DECL_2 (_FP_MUL_MEAT_DW_1_hard_a); \ + \ + /* Split the words in half. */ \ + _FP_MUL_MEAT_DW_1_hard_xh = X##_f >> (_FP_W_TYPE_SIZE/2); \ + _FP_MUL_MEAT_DW_1_hard_xl \ + = X##_f & (((_FP_W_TYPE) 1 << (_FP_W_TYPE_SIZE/2)) - 1); \ + _FP_MUL_MEAT_DW_1_hard_yh = Y##_f >> (_FP_W_TYPE_SIZE/2); \ + _FP_MUL_MEAT_DW_1_hard_yl \ + = Y##_f & (((_FP_W_TYPE) 1 << (_FP_W_TYPE_SIZE/2)) - 1); \ + \ + /* Multiply the pieces. */ \ + R##_f0 = _FP_MUL_MEAT_DW_1_hard_xl * _FP_MUL_MEAT_DW_1_hard_yl; \ + _FP_MUL_MEAT_DW_1_hard_a_f0 \ + = _FP_MUL_MEAT_DW_1_hard_xh * _FP_MUL_MEAT_DW_1_hard_yl; \ + _FP_MUL_MEAT_DW_1_hard_a_f1 \ + = _FP_MUL_MEAT_DW_1_hard_xl * _FP_MUL_MEAT_DW_1_hard_yh; \ + R##_f1 = _FP_MUL_MEAT_DW_1_hard_xh * _FP_MUL_MEAT_DW_1_hard_yh; \ + \ + /* Reassemble into two full words. */ \ + if ((_FP_MUL_MEAT_DW_1_hard_a_f0 += _FP_MUL_MEAT_DW_1_hard_a_f1) \ + < _FP_MUL_MEAT_DW_1_hard_a_f1) \ + R##_f1 += (_FP_W_TYPE) 1 << (_FP_W_TYPE_SIZE/2); \ + _FP_MUL_MEAT_DW_1_hard_a_f1 \ + = _FP_MUL_MEAT_DW_1_hard_a_f0 >> (_FP_W_TYPE_SIZE/2); \ + _FP_MUL_MEAT_DW_1_hard_a_f0 \ + = _FP_MUL_MEAT_DW_1_hard_a_f0 << (_FP_W_TYPE_SIZE/2); \ + _FP_FRAC_ADD_2 (R, R, _FP_MUL_MEAT_DW_1_hard_a); \ + } \ + while (0) + +#define _FP_MUL_MEAT_1_hard(wfracbits, R, X, Y) \ + do \ + { \ + _FP_FRAC_DECL_2 (_FP_MUL_MEAT_1_hard_z); \ + _FP_MUL_MEAT_DW_1_hard ((wfracbits), \ + _FP_MUL_MEAT_1_hard_z, X, Y); \ + \ + /* Normalize. */ \ + _FP_FRAC_SRS_2 (_FP_MUL_MEAT_1_hard_z, \ + (wfracbits) - 1, 2*(wfracbits)); \ + R##_f = _FP_MUL_MEAT_1_hard_z_f0; \ + } \ + while (0) + + +/* Division algorithms: */ + +/* Basic. Assuming the host word size is >= 2*FRACBITS, we can do the + division immediately. Give this macro either _FP_DIV_HELP_imm for + C primitives or _FP_DIV_HELP_ldiv for the ISO function. Which you + choose will depend on what the compiler does with divrem4. */ + +#define _FP_DIV_MEAT_1_imm(fs, R, X, Y, doit) \ + do \ + { \ + _FP_W_TYPE _FP_DIV_MEAT_1_imm_q, _FP_DIV_MEAT_1_imm_r; \ + X##_f <<= (X##_f < Y##_f \ + ? R##_e--, _FP_WFRACBITS_##fs \ + : _FP_WFRACBITS_##fs - 1); \ + doit (_FP_DIV_MEAT_1_imm_q, _FP_DIV_MEAT_1_imm_r, X##_f, Y##_f); \ + R##_f = _FP_DIV_MEAT_1_imm_q | (_FP_DIV_MEAT_1_imm_r != 0); \ + } \ + while (0) + +/* GCC's longlong.h defines a 2W / 1W => (1W,1W) primitive udiv_qrnnd + that may be useful in this situation. This first is for a primitive + that requires normalization, the second for one that does not. Look + for UDIV_NEEDS_NORMALIZATION to tell which your machine needs. */ + +#define _FP_DIV_MEAT_1_udiv_norm(fs, R, X, Y) \ + do \ + { \ + _FP_W_TYPE _FP_DIV_MEAT_1_udiv_norm_nh; \ + _FP_W_TYPE _FP_DIV_MEAT_1_udiv_norm_nl; \ + _FP_W_TYPE _FP_DIV_MEAT_1_udiv_norm_q; \ + _FP_W_TYPE _FP_DIV_MEAT_1_udiv_norm_r; \ + _FP_W_TYPE _FP_DIV_MEAT_1_udiv_norm_y; \ + \ + /* Normalize Y -- i.e. make the most significant bit set. */ \ + _FP_DIV_MEAT_1_udiv_norm_y = Y##_f << _FP_WFRACXBITS_##fs; \ + \ + /* Shift X op correspondingly high, that is, up one full word. */ \ + if (X##_f < Y##_f) \ + { \ + R##_e--; \ + _FP_DIV_MEAT_1_udiv_norm_nl = 0; \ + _FP_DIV_MEAT_1_udiv_norm_nh = X##_f; \ + } \ + else \ + { \ + _FP_DIV_MEAT_1_udiv_norm_nl = X##_f << (_FP_W_TYPE_SIZE - 1); \ + _FP_DIV_MEAT_1_udiv_norm_nh = X##_f >> 1; \ + } \ + \ + udiv_qrnnd (_FP_DIV_MEAT_1_udiv_norm_q, \ + _FP_DIV_MEAT_1_udiv_norm_r, \ + _FP_DIV_MEAT_1_udiv_norm_nh, \ + _FP_DIV_MEAT_1_udiv_norm_nl, \ + _FP_DIV_MEAT_1_udiv_norm_y); \ + R##_f = (_FP_DIV_MEAT_1_udiv_norm_q \ + | (_FP_DIV_MEAT_1_udiv_norm_r != 0)); \ + } \ + while (0) + +#define _FP_DIV_MEAT_1_udiv(fs, R, X, Y) \ + do \ + { \ + _FP_W_TYPE _FP_DIV_MEAT_1_udiv_nh, _FP_DIV_MEAT_1_udiv_nl; \ + _FP_W_TYPE _FP_DIV_MEAT_1_udiv_q, _FP_DIV_MEAT_1_udiv_r; \ + if (X##_f < Y##_f) \ + { \ + R##_e--; \ + _FP_DIV_MEAT_1_udiv_nl = X##_f << _FP_WFRACBITS_##fs; \ + _FP_DIV_MEAT_1_udiv_nh = X##_f >> _FP_WFRACXBITS_##fs; \ + } \ + else \ + { \ + _FP_DIV_MEAT_1_udiv_nl = X##_f << (_FP_WFRACBITS_##fs - 1); \ + _FP_DIV_MEAT_1_udiv_nh = X##_f >> (_FP_WFRACXBITS_##fs + 1); \ + } \ + udiv_qrnnd (_FP_DIV_MEAT_1_udiv_q, _FP_DIV_MEAT_1_udiv_r, \ + _FP_DIV_MEAT_1_udiv_nh, _FP_DIV_MEAT_1_udiv_nl, \ + Y##_f); \ + R##_f = _FP_DIV_MEAT_1_udiv_q | (_FP_DIV_MEAT_1_udiv_r != 0); \ + } \ + while (0) + + +/* Square root algorithms: + We have just one right now, maybe Newton approximation + should be added for those machines where division is fast. */ + +#define _FP_SQRT_MEAT_1(R, S, T, X, q) \ + do \ + { \ + while ((q) != _FP_WORK_ROUND) \ + { \ + T##_f = S##_f + (q); \ + if (T##_f <= X##_f) \ + { \ + S##_f = T##_f + (q); \ + X##_f -= T##_f; \ + R##_f += (q); \ + } \ + _FP_FRAC_SLL_1 (X, 1); \ + (q) >>= 1; \ + } \ + if (X##_f) \ + { \ + if (S##_f < X##_f) \ + R##_f |= _FP_WORK_ROUND; \ + R##_f |= _FP_WORK_STICKY; \ + } \ + } \ + while (0) + +/* Assembly/disassembly for converting to/from integral types. + No shifting or overflow handled here. */ + +#define _FP_FRAC_ASSEMBLE_1(r, X, rsize) ((r) = X##_f) +#define _FP_FRAC_DISASSEMBLE_1(X, r, rsize) (X##_f = (r)) + + +/* Convert FP values between word sizes. */ + +#define _FP_FRAC_COPY_1_1(D, S) (D##_f = S##_f) diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/op-2.h b/contrib/toolchain/gcc/5x/libgcc/soft-fp/op-2.h new file mode 100644 index 0000000000..50028f72d2 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/op-2.h @@ -0,0 +1,699 @@ +/* Software floating-point emulation. + Basic two-word fraction declaration and manipulation. + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com), + Jakub Jelinek (jj@ultra.linux.cz), + David S. Miller (davem@redhat.com) and + Peter Maydell (pmaydell@chiark.greenend.org.uk). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#define _FP_FRAC_DECL_2(X) _FP_W_TYPE X##_f0, X##_f1 +#define _FP_FRAC_COPY_2(D, S) (D##_f0 = S##_f0, D##_f1 = S##_f1) +#define _FP_FRAC_SET_2(X, I) __FP_FRAC_SET_2 (X, I) +#define _FP_FRAC_HIGH_2(X) (X##_f1) +#define _FP_FRAC_LOW_2(X) (X##_f0) +#define _FP_FRAC_WORD_2(X, w) (X##_f##w) + +#define _FP_FRAC_SLL_2(X, N) \ + (void) (((N) < _FP_W_TYPE_SIZE) \ + ? ({ \ + if (__builtin_constant_p (N) && (N) == 1) \ + { \ + X##_f1 = X##_f1 + X##_f1 + (((_FP_WS_TYPE) (X##_f0)) < 0); \ + X##_f0 += X##_f0; \ + } \ + else \ + { \ + X##_f1 = X##_f1 << (N) | X##_f0 >> (_FP_W_TYPE_SIZE - (N)); \ + X##_f0 <<= (N); \ + } \ + 0; \ + }) \ + : ({ \ + X##_f1 = X##_f0 << ((N) - _FP_W_TYPE_SIZE); \ + X##_f0 = 0; \ + })) + + +#define _FP_FRAC_SRL_2(X, N) \ + (void) (((N) < _FP_W_TYPE_SIZE) \ + ? ({ \ + X##_f0 = X##_f0 >> (N) | X##_f1 << (_FP_W_TYPE_SIZE - (N)); \ + X##_f1 >>= (N); \ + }) \ + : ({ \ + X##_f0 = X##_f1 >> ((N) - _FP_W_TYPE_SIZE); \ + X##_f1 = 0; \ + })) + +/* Right shift with sticky-lsb. */ +#define _FP_FRAC_SRST_2(X, S, N, sz) \ + (void) (((N) < _FP_W_TYPE_SIZE) \ + ? ({ \ + S = (__builtin_constant_p (N) && (N) == 1 \ + ? X##_f0 & 1 \ + : (X##_f0 << (_FP_W_TYPE_SIZE - (N))) != 0); \ + X##_f0 = (X##_f1 << (_FP_W_TYPE_SIZE - (N)) | X##_f0 >> (N)); \ + X##_f1 >>= (N); \ + }) \ + : ({ \ + S = ((((N) == _FP_W_TYPE_SIZE \ + ? 0 \ + : (X##_f1 << (2*_FP_W_TYPE_SIZE - (N)))) \ + | X##_f0) != 0); \ + X##_f0 = (X##_f1 >> ((N) - _FP_W_TYPE_SIZE)); \ + X##_f1 = 0; \ + })) + +#define _FP_FRAC_SRS_2(X, N, sz) \ + (void) (((N) < _FP_W_TYPE_SIZE) \ + ? ({ \ + X##_f0 = (X##_f1 << (_FP_W_TYPE_SIZE - (N)) | X##_f0 >> (N) \ + | (__builtin_constant_p (N) && (N) == 1 \ + ? X##_f0 & 1 \ + : (X##_f0 << (_FP_W_TYPE_SIZE - (N))) != 0)); \ + X##_f1 >>= (N); \ + }) \ + : ({ \ + X##_f0 = (X##_f1 >> ((N) - _FP_W_TYPE_SIZE) \ + | ((((N) == _FP_W_TYPE_SIZE \ + ? 0 \ + : (X##_f1 << (2*_FP_W_TYPE_SIZE - (N)))) \ + | X##_f0) != 0)); \ + X##_f1 = 0; \ + })) + +#define _FP_FRAC_ADDI_2(X, I) \ + __FP_FRAC_ADDI_2 (X##_f1, X##_f0, I) + +#define _FP_FRAC_ADD_2(R, X, Y) \ + __FP_FRAC_ADD_2 (R##_f1, R##_f0, X##_f1, X##_f0, Y##_f1, Y##_f0) + +#define _FP_FRAC_SUB_2(R, X, Y) \ + __FP_FRAC_SUB_2 (R##_f1, R##_f0, X##_f1, X##_f0, Y##_f1, Y##_f0) + +#define _FP_FRAC_DEC_2(X, Y) \ + __FP_FRAC_DEC_2 (X##_f1, X##_f0, Y##_f1, Y##_f0) + +#define _FP_FRAC_CLZ_2(R, X) \ + do \ + { \ + if (X##_f1) \ + __FP_CLZ ((R), X##_f1); \ + else \ + { \ + __FP_CLZ ((R), X##_f0); \ + (R) += _FP_W_TYPE_SIZE; \ + } \ + } \ + while (0) + +/* Predicates. */ +#define _FP_FRAC_NEGP_2(X) ((_FP_WS_TYPE) X##_f1 < 0) +#define _FP_FRAC_ZEROP_2(X) ((X##_f1 | X##_f0) == 0) +#define _FP_FRAC_OVERP_2(fs, X) (_FP_FRAC_HIGH_##fs (X) & _FP_OVERFLOW_##fs) +#define _FP_FRAC_CLEAR_OVERP_2(fs, X) (_FP_FRAC_HIGH_##fs (X) &= ~_FP_OVERFLOW_##fs) +#define _FP_FRAC_HIGHBIT_DW_2(fs, X) \ + (_FP_FRAC_HIGH_DW_##fs (X) & _FP_HIGHBIT_DW_##fs) +#define _FP_FRAC_EQ_2(X, Y) (X##_f1 == Y##_f1 && X##_f0 == Y##_f0) +#define _FP_FRAC_GT_2(X, Y) \ + (X##_f1 > Y##_f1 || (X##_f1 == Y##_f1 && X##_f0 > Y##_f0)) +#define _FP_FRAC_GE_2(X, Y) \ + (X##_f1 > Y##_f1 || (X##_f1 == Y##_f1 && X##_f0 >= Y##_f0)) + +#define _FP_ZEROFRAC_2 0, 0 +#define _FP_MINFRAC_2 0, 1 +#define _FP_MAXFRAC_2 (~(_FP_WS_TYPE) 0), (~(_FP_WS_TYPE) 0) + +/* Internals. */ + +#define __FP_FRAC_SET_2(X, I1, I0) (X##_f0 = I0, X##_f1 = I1) + +#define __FP_CLZ_2(R, xh, xl) \ + do \ + { \ + if (xh) \ + __FP_CLZ ((R), xh); \ + else \ + { \ + __FP_CLZ ((R), xl); \ + (R) += _FP_W_TYPE_SIZE; \ + } \ + } \ + while (0) + +#if 0 + +# ifndef __FP_FRAC_ADDI_2 +# define __FP_FRAC_ADDI_2(xh, xl, i) \ + (xh += ((xl += i) < i)) +# endif +# ifndef __FP_FRAC_ADD_2 +# define __FP_FRAC_ADD_2(rh, rl, xh, xl, yh, yl) \ + (rh = xh + yh + ((rl = xl + yl) < xl)) +# endif +# ifndef __FP_FRAC_SUB_2 +# define __FP_FRAC_SUB_2(rh, rl, xh, xl, yh, yl) \ + (rh = xh - yh - ((rl = xl - yl) > xl)) +# endif +# ifndef __FP_FRAC_DEC_2 +# define __FP_FRAC_DEC_2(xh, xl, yh, yl) \ + do \ + { \ + UWtype __FP_FRAC_DEC_2_t = xl; \ + xh -= yh + ((xl -= yl) > __FP_FRAC_DEC_2_t); \ + } \ + while (0) +# endif + +#else + +# undef __FP_FRAC_ADDI_2 +# define __FP_FRAC_ADDI_2(xh, xl, i) add_ssaaaa (xh, xl, xh, xl, 0, i) +# undef __FP_FRAC_ADD_2 +# define __FP_FRAC_ADD_2 add_ssaaaa +# undef __FP_FRAC_SUB_2 +# define __FP_FRAC_SUB_2 sub_ddmmss +# undef __FP_FRAC_DEC_2 +# define __FP_FRAC_DEC_2(xh, xl, yh, yl) \ + sub_ddmmss (xh, xl, xh, xl, yh, yl) + +#endif + +/* Unpack the raw bits of a native fp value. Do not classify or + normalize the data. */ + +#define _FP_UNPACK_RAW_2(fs, X, val) \ + do \ + { \ + union _FP_UNION_##fs _FP_UNPACK_RAW_2_flo; \ + _FP_UNPACK_RAW_2_flo.flt = (val); \ + \ + X##_f0 = _FP_UNPACK_RAW_2_flo.bits.frac0; \ + X##_f1 = _FP_UNPACK_RAW_2_flo.bits.frac1; \ + X##_e = _FP_UNPACK_RAW_2_flo.bits.exp; \ + X##_s = _FP_UNPACK_RAW_2_flo.bits.sign; \ + } \ + while (0) + +#define _FP_UNPACK_RAW_2_P(fs, X, val) \ + do \ + { \ + union _FP_UNION_##fs *_FP_UNPACK_RAW_2_P_flo \ + = (union _FP_UNION_##fs *) (val); \ + \ + X##_f0 = _FP_UNPACK_RAW_2_P_flo->bits.frac0; \ + X##_f1 = _FP_UNPACK_RAW_2_P_flo->bits.frac1; \ + X##_e = _FP_UNPACK_RAW_2_P_flo->bits.exp; \ + X##_s = _FP_UNPACK_RAW_2_P_flo->bits.sign; \ + } \ + while (0) + + +/* Repack the raw bits of a native fp value. */ + +#define _FP_PACK_RAW_2(fs, val, X) \ + do \ + { \ + union _FP_UNION_##fs _FP_PACK_RAW_2_flo; \ + \ + _FP_PACK_RAW_2_flo.bits.frac0 = X##_f0; \ + _FP_PACK_RAW_2_flo.bits.frac1 = X##_f1; \ + _FP_PACK_RAW_2_flo.bits.exp = X##_e; \ + _FP_PACK_RAW_2_flo.bits.sign = X##_s; \ + \ + (val) = _FP_PACK_RAW_2_flo.flt; \ + } \ + while (0) + +#define _FP_PACK_RAW_2_P(fs, val, X) \ + do \ + { \ + union _FP_UNION_##fs *_FP_PACK_RAW_2_P_flo \ + = (union _FP_UNION_##fs *) (val); \ + \ + _FP_PACK_RAW_2_P_flo->bits.frac0 = X##_f0; \ + _FP_PACK_RAW_2_P_flo->bits.frac1 = X##_f1; \ + _FP_PACK_RAW_2_P_flo->bits.exp = X##_e; \ + _FP_PACK_RAW_2_P_flo->bits.sign = X##_s; \ + } \ + while (0) + + +/* Multiplication algorithms: */ + +/* Given a 1W * 1W => 2W primitive, do the extended multiplication. */ + +#define _FP_MUL_MEAT_DW_2_wide(wfracbits, R, X, Y, doit) \ + do \ + { \ + _FP_FRAC_DECL_2 (_FP_MUL_MEAT_DW_2_wide_b); \ + _FP_FRAC_DECL_2 (_FP_MUL_MEAT_DW_2_wide_c); \ + \ + doit (_FP_FRAC_WORD_4 (R, 1), _FP_FRAC_WORD_4 (R, 0), \ + X##_f0, Y##_f0); \ + doit (_FP_MUL_MEAT_DW_2_wide_b_f1, _FP_MUL_MEAT_DW_2_wide_b_f0, \ + X##_f0, Y##_f1); \ + doit (_FP_MUL_MEAT_DW_2_wide_c_f1, _FP_MUL_MEAT_DW_2_wide_c_f0, \ + X##_f1, Y##_f0); \ + doit (_FP_FRAC_WORD_4 (R, 3), _FP_FRAC_WORD_4 (R, 2), \ + X##_f1, Y##_f1); \ + \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_4 (R, 3), _FP_FRAC_WORD_4 (R, 2), \ + _FP_FRAC_WORD_4 (R, 1), 0, \ + _FP_MUL_MEAT_DW_2_wide_b_f1, \ + _FP_MUL_MEAT_DW_2_wide_b_f0, \ + _FP_FRAC_WORD_4 (R, 3), _FP_FRAC_WORD_4 (R, 2), \ + _FP_FRAC_WORD_4 (R, 1)); \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_4 (R, 3), _FP_FRAC_WORD_4 (R, 2), \ + _FP_FRAC_WORD_4 (R, 1), 0, \ + _FP_MUL_MEAT_DW_2_wide_c_f1, \ + _FP_MUL_MEAT_DW_2_wide_c_f0, \ + _FP_FRAC_WORD_4 (R, 3), _FP_FRAC_WORD_4 (R, 2), \ + _FP_FRAC_WORD_4 (R, 1)); \ + } \ + while (0) + +#define _FP_MUL_MEAT_2_wide(wfracbits, R, X, Y, doit) \ + do \ + { \ + _FP_FRAC_DECL_4 (_FP_MUL_MEAT_2_wide_z); \ + \ + _FP_MUL_MEAT_DW_2_wide ((wfracbits), _FP_MUL_MEAT_2_wide_z, \ + X, Y, doit); \ + \ + /* Normalize since we know where the msb of the multiplicands \ + were (bit B), we know that the msb of the of the product is \ + at either 2B or 2B-1. */ \ + _FP_FRAC_SRS_4 (_FP_MUL_MEAT_2_wide_z, (wfracbits)-1, \ + 2*(wfracbits)); \ + R##_f0 = _FP_FRAC_WORD_4 (_FP_MUL_MEAT_2_wide_z, 0); \ + R##_f1 = _FP_FRAC_WORD_4 (_FP_MUL_MEAT_2_wide_z, 1); \ + } \ + while (0) + +/* Given a 1W * 1W => 2W primitive, do the extended multiplication. + Do only 3 multiplications instead of four. This one is for machines + where multiplication is much more expensive than subtraction. */ + +#define _FP_MUL_MEAT_DW_2_wide_3mul(wfracbits, R, X, Y, doit) \ + do \ + { \ + _FP_FRAC_DECL_2 (_FP_MUL_MEAT_DW_2_wide_3mul_b); \ + _FP_FRAC_DECL_2 (_FP_MUL_MEAT_DW_2_wide_3mul_c); \ + _FP_W_TYPE _FP_MUL_MEAT_DW_2_wide_3mul_d; \ + int _FP_MUL_MEAT_DW_2_wide_3mul_c1; \ + int _FP_MUL_MEAT_DW_2_wide_3mul_c2; \ + \ + _FP_MUL_MEAT_DW_2_wide_3mul_b_f0 = X##_f0 + X##_f1; \ + _FP_MUL_MEAT_DW_2_wide_3mul_c1 \ + = _FP_MUL_MEAT_DW_2_wide_3mul_b_f0 < X##_f0; \ + _FP_MUL_MEAT_DW_2_wide_3mul_b_f1 = Y##_f0 + Y##_f1; \ + _FP_MUL_MEAT_DW_2_wide_3mul_c2 \ + = _FP_MUL_MEAT_DW_2_wide_3mul_b_f1 < Y##_f0; \ + doit (_FP_MUL_MEAT_DW_2_wide_3mul_d, _FP_FRAC_WORD_4 (R, 0), \ + X##_f0, Y##_f0); \ + doit (_FP_FRAC_WORD_4 (R, 2), _FP_FRAC_WORD_4 (R, 1), \ + _FP_MUL_MEAT_DW_2_wide_3mul_b_f0, \ + _FP_MUL_MEAT_DW_2_wide_3mul_b_f1); \ + doit (_FP_MUL_MEAT_DW_2_wide_3mul_c_f1, \ + _FP_MUL_MEAT_DW_2_wide_3mul_c_f0, X##_f1, Y##_f1); \ + \ + _FP_MUL_MEAT_DW_2_wide_3mul_b_f0 \ + &= -_FP_MUL_MEAT_DW_2_wide_3mul_c2; \ + _FP_MUL_MEAT_DW_2_wide_3mul_b_f1 \ + &= -_FP_MUL_MEAT_DW_2_wide_3mul_c1; \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_4 (R, 3), _FP_FRAC_WORD_4 (R, 2), \ + _FP_FRAC_WORD_4 (R, 1), \ + (_FP_MUL_MEAT_DW_2_wide_3mul_c1 \ + & _FP_MUL_MEAT_DW_2_wide_3mul_c2), 0, \ + _FP_MUL_MEAT_DW_2_wide_3mul_d, \ + 0, _FP_FRAC_WORD_4 (R, 2), _FP_FRAC_WORD_4 (R, 1)); \ + __FP_FRAC_ADDI_2 (_FP_FRAC_WORD_4 (R, 3), _FP_FRAC_WORD_4 (R, 2), \ + _FP_MUL_MEAT_DW_2_wide_3mul_b_f0); \ + __FP_FRAC_ADDI_2 (_FP_FRAC_WORD_4 (R, 3), _FP_FRAC_WORD_4 (R, 2), \ + _FP_MUL_MEAT_DW_2_wide_3mul_b_f1); \ + __FP_FRAC_DEC_3 (_FP_FRAC_WORD_4 (R, 3), _FP_FRAC_WORD_4 (R, 2), \ + _FP_FRAC_WORD_4 (R, 1), \ + 0, _FP_MUL_MEAT_DW_2_wide_3mul_d, \ + _FP_FRAC_WORD_4 (R, 0)); \ + __FP_FRAC_DEC_3 (_FP_FRAC_WORD_4 (R, 3), _FP_FRAC_WORD_4 (R, 2), \ + _FP_FRAC_WORD_4 (R, 1), 0, \ + _FP_MUL_MEAT_DW_2_wide_3mul_c_f1, \ + _FP_MUL_MEAT_DW_2_wide_3mul_c_f0); \ + __FP_FRAC_ADD_2 (_FP_FRAC_WORD_4 (R, 3), _FP_FRAC_WORD_4 (R, 2), \ + _FP_MUL_MEAT_DW_2_wide_3mul_c_f1, \ + _FP_MUL_MEAT_DW_2_wide_3mul_c_f0, \ + _FP_FRAC_WORD_4 (R, 3), _FP_FRAC_WORD_4 (R, 2)); \ + } \ + while (0) + +#define _FP_MUL_MEAT_2_wide_3mul(wfracbits, R, X, Y, doit) \ + do \ + { \ + _FP_FRAC_DECL_4 (_FP_MUL_MEAT_2_wide_3mul_z); \ + \ + _FP_MUL_MEAT_DW_2_wide_3mul ((wfracbits), \ + _FP_MUL_MEAT_2_wide_3mul_z, \ + X, Y, doit); \ + \ + /* Normalize since we know where the msb of the multiplicands \ + were (bit B), we know that the msb of the of the product is \ + at either 2B or 2B-1. */ \ + _FP_FRAC_SRS_4 (_FP_MUL_MEAT_2_wide_3mul_z, \ + (wfracbits)-1, 2*(wfracbits)); \ + R##_f0 = _FP_FRAC_WORD_4 (_FP_MUL_MEAT_2_wide_3mul_z, 0); \ + R##_f1 = _FP_FRAC_WORD_4 (_FP_MUL_MEAT_2_wide_3mul_z, 1); \ + } \ + while (0) + +#define _FP_MUL_MEAT_DW_2_gmp(wfracbits, R, X, Y) \ + do \ + { \ + _FP_W_TYPE _FP_MUL_MEAT_DW_2_gmp_x[2]; \ + _FP_W_TYPE _FP_MUL_MEAT_DW_2_gmp_y[2]; \ + _FP_MUL_MEAT_DW_2_gmp_x[0] = X##_f0; \ + _FP_MUL_MEAT_DW_2_gmp_x[1] = X##_f1; \ + _FP_MUL_MEAT_DW_2_gmp_y[0] = Y##_f0; \ + _FP_MUL_MEAT_DW_2_gmp_y[1] = Y##_f1; \ + \ + mpn_mul_n (R##_f, _FP_MUL_MEAT_DW_2_gmp_x, \ + _FP_MUL_MEAT_DW_2_gmp_y, 2); \ + } \ + while (0) + +#define _FP_MUL_MEAT_2_gmp(wfracbits, R, X, Y) \ + do \ + { \ + _FP_FRAC_DECL_4 (_FP_MUL_MEAT_2_gmp_z); \ + \ + _FP_MUL_MEAT_DW_2_gmp ((wfracbits), _FP_MUL_MEAT_2_gmp_z, X, Y); \ + \ + /* Normalize since we know where the msb of the multiplicands \ + were (bit B), we know that the msb of the of the product is \ + at either 2B or 2B-1. */ \ + _FP_FRAC_SRS_4 (_FP_MUL_MEAT_2_gmp_z, (wfracbits)-1, \ + 2*(wfracbits)); \ + R##_f0 = _FP_MUL_MEAT_2_gmp_z_f[0]; \ + R##_f1 = _FP_MUL_MEAT_2_gmp_z_f[1]; \ + } \ + while (0) + +/* Do at most 120x120=240 bits multiplication using double floating + point multiplication. This is useful if floating point + multiplication has much bigger throughput than integer multiply. + It is supposed to work for _FP_W_TYPE_SIZE 64 and wfracbits + between 106 and 120 only. + Caller guarantees that X and Y has (1LLL << (wfracbits - 1)) set. + SETFETZ is a macro which will disable all FPU exceptions and set rounding + towards zero, RESETFE should optionally reset it back. */ + +#define _FP_MUL_MEAT_2_120_240_double(wfracbits, R, X, Y, setfetz, resetfe) \ + do \ + { \ + static const double _const[] = \ + { \ + /* 2^-24 */ 5.9604644775390625e-08, \ + /* 2^-48 */ 3.5527136788005009e-15, \ + /* 2^-72 */ 2.1175823681357508e-22, \ + /* 2^-96 */ 1.2621774483536189e-29, \ + /* 2^28 */ 2.68435456e+08, \ + /* 2^4 */ 1.600000e+01, \ + /* 2^-20 */ 9.5367431640625e-07, \ + /* 2^-44 */ 5.6843418860808015e-14, \ + /* 2^-68 */ 3.3881317890172014e-21, \ + /* 2^-92 */ 2.0194839173657902e-28, \ + /* 2^-116 */ 1.2037062152420224e-35 \ + }; \ + double _a240, _b240, _c240, _d240, _e240, _f240, \ + _g240, _h240, _i240, _j240, _k240; \ + union { double d; UDItype i; } _l240, _m240, _n240, _o240, \ + _p240, _q240, _r240, _s240; \ + UDItype _t240, _u240, _v240, _w240, _x240, _y240 = 0; \ + \ + if ((wfracbits) < 106 || (wfracbits) > 120) \ + abort (); \ + \ + setfetz; \ + \ + _e240 = (double) (long) (X##_f0 & 0xffffff); \ + _j240 = (double) (long) (Y##_f0 & 0xffffff); \ + _d240 = (double) (long) ((X##_f0 >> 24) & 0xffffff); \ + _i240 = (double) (long) ((Y##_f0 >> 24) & 0xffffff); \ + _c240 = (double) (long) (((X##_f1 << 16) & 0xffffff) | (X##_f0 >> 48)); \ + _h240 = (double) (long) (((Y##_f1 << 16) & 0xffffff) | (Y##_f0 >> 48)); \ + _b240 = (double) (long) ((X##_f1 >> 8) & 0xffffff); \ + _g240 = (double) (long) ((Y##_f1 >> 8) & 0xffffff); \ + _a240 = (double) (long) (X##_f1 >> 32); \ + _f240 = (double) (long) (Y##_f1 >> 32); \ + _e240 *= _const[3]; \ + _j240 *= _const[3]; \ + _d240 *= _const[2]; \ + _i240 *= _const[2]; \ + _c240 *= _const[1]; \ + _h240 *= _const[1]; \ + _b240 *= _const[0]; \ + _g240 *= _const[0]; \ + _s240.d = _e240*_j240; \ + _r240.d = _d240*_j240 + _e240*_i240; \ + _q240.d = _c240*_j240 + _d240*_i240 + _e240*_h240; \ + _p240.d = _b240*_j240 + _c240*_i240 + _d240*_h240 + _e240*_g240; \ + _o240.d = _a240*_j240 + _b240*_i240 + _c240*_h240 + _d240*_g240 + _e240*_f240; \ + _n240.d = _a240*_i240 + _b240*_h240 + _c240*_g240 + _d240*_f240; \ + _m240.d = _a240*_h240 + _b240*_g240 + _c240*_f240; \ + _l240.d = _a240*_g240 + _b240*_f240; \ + _k240 = _a240*_f240; \ + _r240.d += _s240.d; \ + _q240.d += _r240.d; \ + _p240.d += _q240.d; \ + _o240.d += _p240.d; \ + _n240.d += _o240.d; \ + _m240.d += _n240.d; \ + _l240.d += _m240.d; \ + _k240 += _l240.d; \ + _s240.d -= ((_const[10]+_s240.d)-_const[10]); \ + _r240.d -= ((_const[9]+_r240.d)-_const[9]); \ + _q240.d -= ((_const[8]+_q240.d)-_const[8]); \ + _p240.d -= ((_const[7]+_p240.d)-_const[7]); \ + _o240.d += _const[7]; \ + _n240.d += _const[6]; \ + _m240.d += _const[5]; \ + _l240.d += _const[4]; \ + if (_s240.d != 0.0) \ + _y240 = 1; \ + if (_r240.d != 0.0) \ + _y240 = 1; \ + if (_q240.d != 0.0) \ + _y240 = 1; \ + if (_p240.d != 0.0) \ + _y240 = 1; \ + _t240 = (DItype) _k240; \ + _u240 = _l240.i; \ + _v240 = _m240.i; \ + _w240 = _n240.i; \ + _x240 = _o240.i; \ + R##_f1 = ((_t240 << (128 - (wfracbits - 1))) \ + | ((_u240 & 0xffffff) >> ((wfracbits - 1) - 104))); \ + R##_f0 = (((_u240 & 0xffffff) << (168 - (wfracbits - 1))) \ + | ((_v240 & 0xffffff) << (144 - (wfracbits - 1))) \ + | ((_w240 & 0xffffff) << (120 - (wfracbits - 1))) \ + | ((_x240 & 0xffffff) >> ((wfracbits - 1) - 96)) \ + | _y240); \ + resetfe; \ + } \ + while (0) + +/* Division algorithms: */ + +#define _FP_DIV_MEAT_2_udiv(fs, R, X, Y) \ + do \ + { \ + _FP_W_TYPE _FP_DIV_MEAT_2_udiv_n_f2; \ + _FP_W_TYPE _FP_DIV_MEAT_2_udiv_n_f1; \ + _FP_W_TYPE _FP_DIV_MEAT_2_udiv_n_f0; \ + _FP_W_TYPE _FP_DIV_MEAT_2_udiv_r_f1; \ + _FP_W_TYPE _FP_DIV_MEAT_2_udiv_r_f0; \ + _FP_W_TYPE _FP_DIV_MEAT_2_udiv_m_f1; \ + _FP_W_TYPE _FP_DIV_MEAT_2_udiv_m_f0; \ + if (_FP_FRAC_GE_2 (X, Y)) \ + { \ + _FP_DIV_MEAT_2_udiv_n_f2 = X##_f1 >> 1; \ + _FP_DIV_MEAT_2_udiv_n_f1 \ + = X##_f1 << (_FP_W_TYPE_SIZE - 1) | X##_f0 >> 1; \ + _FP_DIV_MEAT_2_udiv_n_f0 \ + = X##_f0 << (_FP_W_TYPE_SIZE - 1); \ + } \ + else \ + { \ + R##_e--; \ + _FP_DIV_MEAT_2_udiv_n_f2 = X##_f1; \ + _FP_DIV_MEAT_2_udiv_n_f1 = X##_f0; \ + _FP_DIV_MEAT_2_udiv_n_f0 = 0; \ + } \ + \ + /* Normalize, i.e. make the most significant bit of the \ + denominator set. */ \ + _FP_FRAC_SLL_2 (Y, _FP_WFRACXBITS_##fs); \ + \ + udiv_qrnnd (R##_f1, _FP_DIV_MEAT_2_udiv_r_f1, \ + _FP_DIV_MEAT_2_udiv_n_f2, _FP_DIV_MEAT_2_udiv_n_f1, \ + Y##_f1); \ + umul_ppmm (_FP_DIV_MEAT_2_udiv_m_f1, _FP_DIV_MEAT_2_udiv_m_f0, \ + R##_f1, Y##_f0); \ + _FP_DIV_MEAT_2_udiv_r_f0 = _FP_DIV_MEAT_2_udiv_n_f0; \ + if (_FP_FRAC_GT_2 (_FP_DIV_MEAT_2_udiv_m, _FP_DIV_MEAT_2_udiv_r)) \ + { \ + R##_f1--; \ + _FP_FRAC_ADD_2 (_FP_DIV_MEAT_2_udiv_r, Y, \ + _FP_DIV_MEAT_2_udiv_r); \ + if (_FP_FRAC_GE_2 (_FP_DIV_MEAT_2_udiv_r, Y) \ + && _FP_FRAC_GT_2 (_FP_DIV_MEAT_2_udiv_m, \ + _FP_DIV_MEAT_2_udiv_r)) \ + { \ + R##_f1--; \ + _FP_FRAC_ADD_2 (_FP_DIV_MEAT_2_udiv_r, Y, \ + _FP_DIV_MEAT_2_udiv_r); \ + } \ + } \ + _FP_FRAC_DEC_2 (_FP_DIV_MEAT_2_udiv_r, _FP_DIV_MEAT_2_udiv_m); \ + \ + if (_FP_DIV_MEAT_2_udiv_r_f1 == Y##_f1) \ + { \ + /* This is a special case, not an optimization \ + (_FP_DIV_MEAT_2_udiv_r/Y##_f1 would not fit into UWtype). \ + As _FP_DIV_MEAT_2_udiv_r is guaranteed to be < Y, \ + R##_f0 can be either (UWtype)-1 or (UWtype)-2. But as we \ + know what kind of bits it is (sticky, guard, round), \ + we don't care. We also don't care what the reminder is, \ + because the guard bit will be set anyway. -jj */ \ + R##_f0 = -1; \ + } \ + else \ + { \ + udiv_qrnnd (R##_f0, _FP_DIV_MEAT_2_udiv_r_f1, \ + _FP_DIV_MEAT_2_udiv_r_f1, \ + _FP_DIV_MEAT_2_udiv_r_f0, Y##_f1); \ + umul_ppmm (_FP_DIV_MEAT_2_udiv_m_f1, \ + _FP_DIV_MEAT_2_udiv_m_f0, R##_f0, Y##_f0); \ + _FP_DIV_MEAT_2_udiv_r_f0 = 0; \ + if (_FP_FRAC_GT_2 (_FP_DIV_MEAT_2_udiv_m, \ + _FP_DIV_MEAT_2_udiv_r)) \ + { \ + R##_f0--; \ + _FP_FRAC_ADD_2 (_FP_DIV_MEAT_2_udiv_r, Y, \ + _FP_DIV_MEAT_2_udiv_r); \ + if (_FP_FRAC_GE_2 (_FP_DIV_MEAT_2_udiv_r, Y) \ + && _FP_FRAC_GT_2 (_FP_DIV_MEAT_2_udiv_m, \ + _FP_DIV_MEAT_2_udiv_r)) \ + { \ + R##_f0--; \ + _FP_FRAC_ADD_2 (_FP_DIV_MEAT_2_udiv_r, Y, \ + _FP_DIV_MEAT_2_udiv_r); \ + } \ + } \ + if (!_FP_FRAC_EQ_2 (_FP_DIV_MEAT_2_udiv_r, \ + _FP_DIV_MEAT_2_udiv_m)) \ + R##_f0 |= _FP_WORK_STICKY; \ + } \ + } \ + while (0) + + +/* Square root algorithms: + We have just one right now, maybe Newton approximation + should be added for those machines where division is fast. */ + +#define _FP_SQRT_MEAT_2(R, S, T, X, q) \ + do \ + { \ + while (q) \ + { \ + T##_f1 = S##_f1 + (q); \ + if (T##_f1 <= X##_f1) \ + { \ + S##_f1 = T##_f1 + (q); \ + X##_f1 -= T##_f1; \ + R##_f1 += (q); \ + } \ + _FP_FRAC_SLL_2 (X, 1); \ + (q) >>= 1; \ + } \ + (q) = (_FP_W_TYPE) 1 << (_FP_W_TYPE_SIZE - 1); \ + while ((q) != _FP_WORK_ROUND) \ + { \ + T##_f0 = S##_f0 + (q); \ + T##_f1 = S##_f1; \ + if (T##_f1 < X##_f1 \ + || (T##_f1 == X##_f1 && T##_f0 <= X##_f0)) \ + { \ + S##_f0 = T##_f0 + (q); \ + S##_f1 += (T##_f0 > S##_f0); \ + _FP_FRAC_DEC_2 (X, T); \ + R##_f0 += (q); \ + } \ + _FP_FRAC_SLL_2 (X, 1); \ + (q) >>= 1; \ + } \ + if (X##_f0 | X##_f1) \ + { \ + if (S##_f1 < X##_f1 \ + || (S##_f1 == X##_f1 && S##_f0 < X##_f0)) \ + R##_f0 |= _FP_WORK_ROUND; \ + R##_f0 |= _FP_WORK_STICKY; \ + } \ + } \ + while (0) + + +/* Assembly/disassembly for converting to/from integral types. + No shifting or overflow handled here. */ + +#define _FP_FRAC_ASSEMBLE_2(r, X, rsize) \ + (void) (((rsize) <= _FP_W_TYPE_SIZE) \ + ? ({ (r) = X##_f0; }) \ + : ({ \ + (r) = X##_f1; \ + (r) <<= _FP_W_TYPE_SIZE; \ + (r) += X##_f0; \ + })) + +#define _FP_FRAC_DISASSEMBLE_2(X, r, rsize) \ + do \ + { \ + X##_f0 = (r); \ + X##_f1 = ((rsize) <= _FP_W_TYPE_SIZE \ + ? 0 \ + : (r) >> _FP_W_TYPE_SIZE); \ + } \ + while (0) + +/* Convert FP values between word sizes. */ + +#define _FP_FRAC_COPY_1_2(D, S) (D##_f = S##_f0) + +#define _FP_FRAC_COPY_2_1(D, S) ((D##_f0 = S##_f), (D##_f1 = 0)) + +#define _FP_FRAC_COPY_2_2(D, S) _FP_FRAC_COPY_2 (D, S) diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/op-4.h b/contrib/toolchain/gcc/5x/libgcc/soft-fp/op-4.h new file mode 100644 index 0000000000..d65c08afcc --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/op-4.h @@ -0,0 +1,870 @@ +/* Software floating-point emulation. + Basic four-word fraction declaration and manipulation. + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com), + Jakub Jelinek (jj@ultra.linux.cz), + David S. Miller (davem@redhat.com) and + Peter Maydell (pmaydell@chiark.greenend.org.uk). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#define _FP_FRAC_DECL_4(X) _FP_W_TYPE X##_f[4] +#define _FP_FRAC_COPY_4(D, S) \ + (D##_f[0] = S##_f[0], D##_f[1] = S##_f[1], \ + D##_f[2] = S##_f[2], D##_f[3] = S##_f[3]) +#define _FP_FRAC_SET_4(X, I) __FP_FRAC_SET_4 (X, I) +#define _FP_FRAC_HIGH_4(X) (X##_f[3]) +#define _FP_FRAC_LOW_4(X) (X##_f[0]) +#define _FP_FRAC_WORD_4(X, w) (X##_f[w]) + +#define _FP_FRAC_SLL_4(X, N) \ + do \ + { \ + _FP_I_TYPE _FP_FRAC_SLL_4_up, _FP_FRAC_SLL_4_down; \ + _FP_I_TYPE _FP_FRAC_SLL_4_skip, _FP_FRAC_SLL_4_i; \ + _FP_FRAC_SLL_4_skip = (N) / _FP_W_TYPE_SIZE; \ + _FP_FRAC_SLL_4_up = (N) % _FP_W_TYPE_SIZE; \ + _FP_FRAC_SLL_4_down = _FP_W_TYPE_SIZE - _FP_FRAC_SLL_4_up; \ + if (!_FP_FRAC_SLL_4_up) \ + for (_FP_FRAC_SLL_4_i = 3; \ + _FP_FRAC_SLL_4_i >= _FP_FRAC_SLL_4_skip; \ + --_FP_FRAC_SLL_4_i) \ + X##_f[_FP_FRAC_SLL_4_i] \ + = X##_f[_FP_FRAC_SLL_4_i-_FP_FRAC_SLL_4_skip]; \ + else \ + { \ + for (_FP_FRAC_SLL_4_i = 3; \ + _FP_FRAC_SLL_4_i > _FP_FRAC_SLL_4_skip; \ + --_FP_FRAC_SLL_4_i) \ + X##_f[_FP_FRAC_SLL_4_i] \ + = ((X##_f[_FP_FRAC_SLL_4_i-_FP_FRAC_SLL_4_skip] \ + << _FP_FRAC_SLL_4_up) \ + | (X##_f[_FP_FRAC_SLL_4_i-_FP_FRAC_SLL_4_skip-1] \ + >> _FP_FRAC_SLL_4_down)); \ + X##_f[_FP_FRAC_SLL_4_i--] = X##_f[0] << _FP_FRAC_SLL_4_up; \ + } \ + for (; _FP_FRAC_SLL_4_i >= 0; --_FP_FRAC_SLL_4_i) \ + X##_f[_FP_FRAC_SLL_4_i] = 0; \ + } \ + while (0) + +/* This one was broken too. */ +#define _FP_FRAC_SRL_4(X, N) \ + do \ + { \ + _FP_I_TYPE _FP_FRAC_SRL_4_up, _FP_FRAC_SRL_4_down; \ + _FP_I_TYPE _FP_FRAC_SRL_4_skip, _FP_FRAC_SRL_4_i; \ + _FP_FRAC_SRL_4_skip = (N) / _FP_W_TYPE_SIZE; \ + _FP_FRAC_SRL_4_down = (N) % _FP_W_TYPE_SIZE; \ + _FP_FRAC_SRL_4_up = _FP_W_TYPE_SIZE - _FP_FRAC_SRL_4_down; \ + if (!_FP_FRAC_SRL_4_down) \ + for (_FP_FRAC_SRL_4_i = 0; \ + _FP_FRAC_SRL_4_i <= 3-_FP_FRAC_SRL_4_skip; \ + ++_FP_FRAC_SRL_4_i) \ + X##_f[_FP_FRAC_SRL_4_i] \ + = X##_f[_FP_FRAC_SRL_4_i+_FP_FRAC_SRL_4_skip]; \ + else \ + { \ + for (_FP_FRAC_SRL_4_i = 0; \ + _FP_FRAC_SRL_4_i < 3-_FP_FRAC_SRL_4_skip; \ + ++_FP_FRAC_SRL_4_i) \ + X##_f[_FP_FRAC_SRL_4_i] \ + = ((X##_f[_FP_FRAC_SRL_4_i+_FP_FRAC_SRL_4_skip] \ + >> _FP_FRAC_SRL_4_down) \ + | (X##_f[_FP_FRAC_SRL_4_i+_FP_FRAC_SRL_4_skip+1] \ + << _FP_FRAC_SRL_4_up)); \ + X##_f[_FP_FRAC_SRL_4_i++] = X##_f[3] >> _FP_FRAC_SRL_4_down; \ + } \ + for (; _FP_FRAC_SRL_4_i < 4; ++_FP_FRAC_SRL_4_i) \ + X##_f[_FP_FRAC_SRL_4_i] = 0; \ + } \ + while (0) + + +/* Right shift with sticky-lsb. + What this actually means is that we do a standard right-shift, + but that if any of the bits that fall off the right hand side + were one then we always set the LSbit. */ +#define _FP_FRAC_SRST_4(X, S, N, size) \ + do \ + { \ + _FP_I_TYPE _FP_FRAC_SRST_4_up, _FP_FRAC_SRST_4_down; \ + _FP_I_TYPE _FP_FRAC_SRST_4_skip, _FP_FRAC_SRST_4_i; \ + _FP_W_TYPE _FP_FRAC_SRST_4_s; \ + _FP_FRAC_SRST_4_skip = (N) / _FP_W_TYPE_SIZE; \ + _FP_FRAC_SRST_4_down = (N) % _FP_W_TYPE_SIZE; \ + _FP_FRAC_SRST_4_up = _FP_W_TYPE_SIZE - _FP_FRAC_SRST_4_down; \ + for (_FP_FRAC_SRST_4_s = _FP_FRAC_SRST_4_i = 0; \ + _FP_FRAC_SRST_4_i < _FP_FRAC_SRST_4_skip; \ + ++_FP_FRAC_SRST_4_i) \ + _FP_FRAC_SRST_4_s |= X##_f[_FP_FRAC_SRST_4_i]; \ + if (!_FP_FRAC_SRST_4_down) \ + for (_FP_FRAC_SRST_4_i = 0; \ + _FP_FRAC_SRST_4_i <= 3-_FP_FRAC_SRST_4_skip; \ + ++_FP_FRAC_SRST_4_i) \ + X##_f[_FP_FRAC_SRST_4_i] \ + = X##_f[_FP_FRAC_SRST_4_i+_FP_FRAC_SRST_4_skip]; \ + else \ + { \ + _FP_FRAC_SRST_4_s \ + |= X##_f[_FP_FRAC_SRST_4_i] << _FP_FRAC_SRST_4_up; \ + for (_FP_FRAC_SRST_4_i = 0; \ + _FP_FRAC_SRST_4_i < 3-_FP_FRAC_SRST_4_skip; \ + ++_FP_FRAC_SRST_4_i) \ + X##_f[_FP_FRAC_SRST_4_i] \ + = ((X##_f[_FP_FRAC_SRST_4_i+_FP_FRAC_SRST_4_skip] \ + >> _FP_FRAC_SRST_4_down) \ + | (X##_f[_FP_FRAC_SRST_4_i+_FP_FRAC_SRST_4_skip+1] \ + << _FP_FRAC_SRST_4_up)); \ + X##_f[_FP_FRAC_SRST_4_i++] \ + = X##_f[3] >> _FP_FRAC_SRST_4_down; \ + } \ + for (; _FP_FRAC_SRST_4_i < 4; ++_FP_FRAC_SRST_4_i) \ + X##_f[_FP_FRAC_SRST_4_i] = 0; \ + S = (_FP_FRAC_SRST_4_s != 0); \ + } \ + while (0) + +#define _FP_FRAC_SRS_4(X, N, size) \ + do \ + { \ + int _FP_FRAC_SRS_4_sticky; \ + _FP_FRAC_SRST_4 (X, _FP_FRAC_SRS_4_sticky, (N), (size)); \ + X##_f[0] |= _FP_FRAC_SRS_4_sticky; \ + } \ + while (0) + +#define _FP_FRAC_ADD_4(R, X, Y) \ + __FP_FRAC_ADD_4 (R##_f[3], R##_f[2], R##_f[1], R##_f[0], \ + X##_f[3], X##_f[2], X##_f[1], X##_f[0], \ + Y##_f[3], Y##_f[2], Y##_f[1], Y##_f[0]) + +#define _FP_FRAC_SUB_4(R, X, Y) \ + __FP_FRAC_SUB_4 (R##_f[3], R##_f[2], R##_f[1], R##_f[0], \ + X##_f[3], X##_f[2], X##_f[1], X##_f[0], \ + Y##_f[3], Y##_f[2], Y##_f[1], Y##_f[0]) + +#define _FP_FRAC_DEC_4(X, Y) \ + __FP_FRAC_DEC_4 (X##_f[3], X##_f[2], X##_f[1], X##_f[0], \ + Y##_f[3], Y##_f[2], Y##_f[1], Y##_f[0]) + +#define _FP_FRAC_ADDI_4(X, I) \ + __FP_FRAC_ADDI_4 (X##_f[3], X##_f[2], X##_f[1], X##_f[0], I) + +#define _FP_ZEROFRAC_4 0, 0, 0, 0 +#define _FP_MINFRAC_4 0, 0, 0, 1 +#define _FP_MAXFRAC_4 (~(_FP_WS_TYPE) 0), (~(_FP_WS_TYPE) 0), (~(_FP_WS_TYPE) 0), (~(_FP_WS_TYPE) 0) + +#define _FP_FRAC_ZEROP_4(X) ((X##_f[0] | X##_f[1] | X##_f[2] | X##_f[3]) == 0) +#define _FP_FRAC_NEGP_4(X) ((_FP_WS_TYPE) X##_f[3] < 0) +#define _FP_FRAC_OVERP_4(fs, X) (_FP_FRAC_HIGH_##fs (X) & _FP_OVERFLOW_##fs) +#define _FP_FRAC_HIGHBIT_DW_4(fs, X) \ + (_FP_FRAC_HIGH_DW_##fs (X) & _FP_HIGHBIT_DW_##fs) +#define _FP_FRAC_CLEAR_OVERP_4(fs, X) (_FP_FRAC_HIGH_##fs (X) &= ~_FP_OVERFLOW_##fs) + +#define _FP_FRAC_EQ_4(X, Y) \ + (X##_f[0] == Y##_f[0] && X##_f[1] == Y##_f[1] \ + && X##_f[2] == Y##_f[2] && X##_f[3] == Y##_f[3]) + +#define _FP_FRAC_GT_4(X, Y) \ + (X##_f[3] > Y##_f[3] \ + || (X##_f[3] == Y##_f[3] \ + && (X##_f[2] > Y##_f[2] \ + || (X##_f[2] == Y##_f[2] \ + && (X##_f[1] > Y##_f[1] \ + || (X##_f[1] == Y##_f[1] \ + && X##_f[0] > Y##_f[0])))))) + +#define _FP_FRAC_GE_4(X, Y) \ + (X##_f[3] > Y##_f[3] \ + || (X##_f[3] == Y##_f[3] \ + && (X##_f[2] > Y##_f[2] \ + || (X##_f[2] == Y##_f[2] \ + && (X##_f[1] > Y##_f[1] \ + || (X##_f[1] == Y##_f[1] \ + && X##_f[0] >= Y##_f[0])))))) + + +#define _FP_FRAC_CLZ_4(R, X) \ + do \ + { \ + if (X##_f[3]) \ + __FP_CLZ ((R), X##_f[3]); \ + else if (X##_f[2]) \ + { \ + __FP_CLZ ((R), X##_f[2]); \ + (R) += _FP_W_TYPE_SIZE; \ + } \ + else if (X##_f[1]) \ + { \ + __FP_CLZ ((R), X##_f[1]); \ + (R) += _FP_W_TYPE_SIZE*2; \ + } \ + else \ + { \ + __FP_CLZ ((R), X##_f[0]); \ + (R) += _FP_W_TYPE_SIZE*3; \ + } \ + } \ + while (0) + + +#define _FP_UNPACK_RAW_4(fs, X, val) \ + do \ + { \ + union _FP_UNION_##fs _FP_UNPACK_RAW_4_flo; \ + _FP_UNPACK_RAW_4_flo.flt = (val); \ + X##_f[0] = _FP_UNPACK_RAW_4_flo.bits.frac0; \ + X##_f[1] = _FP_UNPACK_RAW_4_flo.bits.frac1; \ + X##_f[2] = _FP_UNPACK_RAW_4_flo.bits.frac2; \ + X##_f[3] = _FP_UNPACK_RAW_4_flo.bits.frac3; \ + X##_e = _FP_UNPACK_RAW_4_flo.bits.exp; \ + X##_s = _FP_UNPACK_RAW_4_flo.bits.sign; \ + } \ + while (0) + +#define _FP_UNPACK_RAW_4_P(fs, X, val) \ + do \ + { \ + union _FP_UNION_##fs *_FP_UNPACK_RAW_4_P_flo \ + = (union _FP_UNION_##fs *) (val); \ + \ + X##_f[0] = _FP_UNPACK_RAW_4_P_flo->bits.frac0; \ + X##_f[1] = _FP_UNPACK_RAW_4_P_flo->bits.frac1; \ + X##_f[2] = _FP_UNPACK_RAW_4_P_flo->bits.frac2; \ + X##_f[3] = _FP_UNPACK_RAW_4_P_flo->bits.frac3; \ + X##_e = _FP_UNPACK_RAW_4_P_flo->bits.exp; \ + X##_s = _FP_UNPACK_RAW_4_P_flo->bits.sign; \ + } \ + while (0) + +#define _FP_PACK_RAW_4(fs, val, X) \ + do \ + { \ + union _FP_UNION_##fs _FP_PACK_RAW_4_flo; \ + _FP_PACK_RAW_4_flo.bits.frac0 = X##_f[0]; \ + _FP_PACK_RAW_4_flo.bits.frac1 = X##_f[1]; \ + _FP_PACK_RAW_4_flo.bits.frac2 = X##_f[2]; \ + _FP_PACK_RAW_4_flo.bits.frac3 = X##_f[3]; \ + _FP_PACK_RAW_4_flo.bits.exp = X##_e; \ + _FP_PACK_RAW_4_flo.bits.sign = X##_s; \ + (val) = _FP_PACK_RAW_4_flo.flt; \ + } \ + while (0) + +#define _FP_PACK_RAW_4_P(fs, val, X) \ + do \ + { \ + union _FP_UNION_##fs *_FP_PACK_RAW_4_P_flo \ + = (union _FP_UNION_##fs *) (val); \ + \ + _FP_PACK_RAW_4_P_flo->bits.frac0 = X##_f[0]; \ + _FP_PACK_RAW_4_P_flo->bits.frac1 = X##_f[1]; \ + _FP_PACK_RAW_4_P_flo->bits.frac2 = X##_f[2]; \ + _FP_PACK_RAW_4_P_flo->bits.frac3 = X##_f[3]; \ + _FP_PACK_RAW_4_P_flo->bits.exp = X##_e; \ + _FP_PACK_RAW_4_P_flo->bits.sign = X##_s; \ + } \ + while (0) + +/* Multiplication algorithms: */ + +/* Given a 1W * 1W => 2W primitive, do the extended multiplication. */ + +#define _FP_MUL_MEAT_DW_4_wide(wfracbits, R, X, Y, doit) \ + do \ + { \ + _FP_FRAC_DECL_2 (_FP_MUL_MEAT_DW_4_wide_b); \ + _FP_FRAC_DECL_2 (_FP_MUL_MEAT_DW_4_wide_c); \ + _FP_FRAC_DECL_2 (_FP_MUL_MEAT_DW_4_wide_d); \ + _FP_FRAC_DECL_2 (_FP_MUL_MEAT_DW_4_wide_e); \ + _FP_FRAC_DECL_2 (_FP_MUL_MEAT_DW_4_wide_f); \ + \ + doit (_FP_FRAC_WORD_8 (R, 1), _FP_FRAC_WORD_8 (R, 0), \ + X##_f[0], Y##_f[0]); \ + doit (_FP_MUL_MEAT_DW_4_wide_b_f1, _FP_MUL_MEAT_DW_4_wide_b_f0, \ + X##_f[0], Y##_f[1]); \ + doit (_FP_MUL_MEAT_DW_4_wide_c_f1, _FP_MUL_MEAT_DW_4_wide_c_f0, \ + X##_f[1], Y##_f[0]); \ + doit (_FP_MUL_MEAT_DW_4_wide_d_f1, _FP_MUL_MEAT_DW_4_wide_d_f0, \ + X##_f[1], Y##_f[1]); \ + doit (_FP_MUL_MEAT_DW_4_wide_e_f1, _FP_MUL_MEAT_DW_4_wide_e_f0, \ + X##_f[0], Y##_f[2]); \ + doit (_FP_MUL_MEAT_DW_4_wide_f_f1, _FP_MUL_MEAT_DW_4_wide_f_f0, \ + X##_f[2], Y##_f[0]); \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_8 (R, 3), _FP_FRAC_WORD_8 (R, 2), \ + _FP_FRAC_WORD_8 (R, 1), 0, \ + _FP_MUL_MEAT_DW_4_wide_b_f1, \ + _FP_MUL_MEAT_DW_4_wide_b_f0, \ + 0, 0, _FP_FRAC_WORD_8 (R, 1)); \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_8 (R, 3), _FP_FRAC_WORD_8 (R, 2), \ + _FP_FRAC_WORD_8 (R, 1), 0, \ + _FP_MUL_MEAT_DW_4_wide_c_f1, \ + _FP_MUL_MEAT_DW_4_wide_c_f0, \ + _FP_FRAC_WORD_8 (R, 3), _FP_FRAC_WORD_8 (R, 2), \ + _FP_FRAC_WORD_8 (R, 1)); \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_8 (R, 4), _FP_FRAC_WORD_8 (R, 3), \ + _FP_FRAC_WORD_8 (R, 2), 0, \ + _FP_MUL_MEAT_DW_4_wide_d_f1, \ + _FP_MUL_MEAT_DW_4_wide_d_f0, \ + 0, _FP_FRAC_WORD_8 (R, 3), _FP_FRAC_WORD_8 (R, 2)); \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_8 (R, 4), _FP_FRAC_WORD_8 (R, 3), \ + _FP_FRAC_WORD_8 (R, 2), 0, \ + _FP_MUL_MEAT_DW_4_wide_e_f1, \ + _FP_MUL_MEAT_DW_4_wide_e_f0, \ + _FP_FRAC_WORD_8 (R, 4), _FP_FRAC_WORD_8 (R, 3), \ + _FP_FRAC_WORD_8 (R, 2)); \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_8 (R, 4), _FP_FRAC_WORD_8 (R, 3), \ + _FP_FRAC_WORD_8 (R, 2), 0, \ + _FP_MUL_MEAT_DW_4_wide_f_f1, \ + _FP_MUL_MEAT_DW_4_wide_f_f0, \ + _FP_FRAC_WORD_8 (R, 4), _FP_FRAC_WORD_8 (R, 3), \ + _FP_FRAC_WORD_8 (R, 2)); \ + doit (_FP_MUL_MEAT_DW_4_wide_b_f1, \ + _FP_MUL_MEAT_DW_4_wide_b_f0, X##_f[0], Y##_f[3]); \ + doit (_FP_MUL_MEAT_DW_4_wide_c_f1, \ + _FP_MUL_MEAT_DW_4_wide_c_f0, X##_f[3], Y##_f[0]); \ + doit (_FP_MUL_MEAT_DW_4_wide_d_f1, _FP_MUL_MEAT_DW_4_wide_d_f0, \ + X##_f[1], Y##_f[2]); \ + doit (_FP_MUL_MEAT_DW_4_wide_e_f1, _FP_MUL_MEAT_DW_4_wide_e_f0, \ + X##_f[2], Y##_f[1]); \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_8 (R, 5), _FP_FRAC_WORD_8 (R, 4), \ + _FP_FRAC_WORD_8 (R, 3), 0, \ + _FP_MUL_MEAT_DW_4_wide_b_f1, \ + _FP_MUL_MEAT_DW_4_wide_b_f0, \ + 0, _FP_FRAC_WORD_8 (R, 4), _FP_FRAC_WORD_8 (R, 3)); \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_8 (R, 5), _FP_FRAC_WORD_8 (R, 4), \ + _FP_FRAC_WORD_8 (R, 3), 0, \ + _FP_MUL_MEAT_DW_4_wide_c_f1, \ + _FP_MUL_MEAT_DW_4_wide_c_f0, \ + _FP_FRAC_WORD_8 (R, 5), _FP_FRAC_WORD_8 (R, 4), \ + _FP_FRAC_WORD_8 (R, 3)); \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_8 (R, 5), _FP_FRAC_WORD_8 (R, 4), \ + _FP_FRAC_WORD_8 (R, 3), 0, \ + _FP_MUL_MEAT_DW_4_wide_d_f1, \ + _FP_MUL_MEAT_DW_4_wide_d_f0, \ + _FP_FRAC_WORD_8 (R, 5), _FP_FRAC_WORD_8 (R, 4), \ + _FP_FRAC_WORD_8 (R, 3)); \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_8 (R, 5), _FP_FRAC_WORD_8 (R, 4), \ + _FP_FRAC_WORD_8 (R, 3), 0, \ + _FP_MUL_MEAT_DW_4_wide_e_f1, \ + _FP_MUL_MEAT_DW_4_wide_e_f0, \ + _FP_FRAC_WORD_8 (R, 5), _FP_FRAC_WORD_8 (R, 4), \ + _FP_FRAC_WORD_8 (R, 3)); \ + doit (_FP_MUL_MEAT_DW_4_wide_b_f1, _FP_MUL_MEAT_DW_4_wide_b_f0, \ + X##_f[2], Y##_f[2]); \ + doit (_FP_MUL_MEAT_DW_4_wide_c_f1, _FP_MUL_MEAT_DW_4_wide_c_f0, \ + X##_f[1], Y##_f[3]); \ + doit (_FP_MUL_MEAT_DW_4_wide_d_f1, _FP_MUL_MEAT_DW_4_wide_d_f0, \ + X##_f[3], Y##_f[1]); \ + doit (_FP_MUL_MEAT_DW_4_wide_e_f1, _FP_MUL_MEAT_DW_4_wide_e_f0, \ + X##_f[2], Y##_f[3]); \ + doit (_FP_MUL_MEAT_DW_4_wide_f_f1, _FP_MUL_MEAT_DW_4_wide_f_f0, \ + X##_f[3], Y##_f[2]); \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_8 (R, 6), _FP_FRAC_WORD_8 (R, 5), \ + _FP_FRAC_WORD_8 (R, 4), 0, \ + _FP_MUL_MEAT_DW_4_wide_b_f1, \ + _FP_MUL_MEAT_DW_4_wide_b_f0, \ + 0, _FP_FRAC_WORD_8 (R, 5), _FP_FRAC_WORD_8 (R, 4)); \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_8 (R, 6), _FP_FRAC_WORD_8 (R, 5), \ + _FP_FRAC_WORD_8 (R, 4), 0, \ + _FP_MUL_MEAT_DW_4_wide_c_f1, \ + _FP_MUL_MEAT_DW_4_wide_c_f0, \ + _FP_FRAC_WORD_8 (R, 6), _FP_FRAC_WORD_8 (R, 5), \ + _FP_FRAC_WORD_8 (R, 4)); \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_8 (R, 6), _FP_FRAC_WORD_8 (R, 5), \ + _FP_FRAC_WORD_8 (R, 4), 0, \ + _FP_MUL_MEAT_DW_4_wide_d_f1, \ + _FP_MUL_MEAT_DW_4_wide_d_f0, \ + _FP_FRAC_WORD_8 (R, 6), _FP_FRAC_WORD_8 (R, 5), \ + _FP_FRAC_WORD_8 (R, 4)); \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_8 (R, 7), _FP_FRAC_WORD_8 (R, 6), \ + _FP_FRAC_WORD_8 (R, 5), 0, \ + _FP_MUL_MEAT_DW_4_wide_e_f1, \ + _FP_MUL_MEAT_DW_4_wide_e_f0, \ + 0, _FP_FRAC_WORD_8 (R, 6), _FP_FRAC_WORD_8 (R, 5)); \ + __FP_FRAC_ADD_3 (_FP_FRAC_WORD_8 (R, 7), _FP_FRAC_WORD_8 (R, 6), \ + _FP_FRAC_WORD_8 (R, 5), 0, \ + _FP_MUL_MEAT_DW_4_wide_f_f1, \ + _FP_MUL_MEAT_DW_4_wide_f_f0, \ + _FP_FRAC_WORD_8 (R, 7), _FP_FRAC_WORD_8 (R, 6), \ + _FP_FRAC_WORD_8 (R, 5)); \ + doit (_FP_MUL_MEAT_DW_4_wide_b_f1, _FP_MUL_MEAT_DW_4_wide_b_f0, \ + X##_f[3], Y##_f[3]); \ + __FP_FRAC_ADD_2 (_FP_FRAC_WORD_8 (R, 7), _FP_FRAC_WORD_8 (R, 6), \ + _FP_MUL_MEAT_DW_4_wide_b_f1, \ + _FP_MUL_MEAT_DW_4_wide_b_f0, \ + _FP_FRAC_WORD_8 (R, 7), _FP_FRAC_WORD_8 (R, 6)); \ + } \ + while (0) + +#define _FP_MUL_MEAT_4_wide(wfracbits, R, X, Y, doit) \ + do \ + { \ + _FP_FRAC_DECL_8 (_FP_MUL_MEAT_4_wide_z); \ + \ + _FP_MUL_MEAT_DW_4_wide ((wfracbits), _FP_MUL_MEAT_4_wide_z, \ + X, Y, doit); \ + \ + /* Normalize since we know where the msb of the multiplicands \ + were (bit B), we know that the msb of the of the product is \ + at either 2B or 2B-1. */ \ + _FP_FRAC_SRS_8 (_FP_MUL_MEAT_4_wide_z, (wfracbits)-1, \ + 2*(wfracbits)); \ + __FP_FRAC_SET_4 (R, _FP_FRAC_WORD_8 (_FP_MUL_MEAT_4_wide_z, 3), \ + _FP_FRAC_WORD_8 (_FP_MUL_MEAT_4_wide_z, 2), \ + _FP_FRAC_WORD_8 (_FP_MUL_MEAT_4_wide_z, 1), \ + _FP_FRAC_WORD_8 (_FP_MUL_MEAT_4_wide_z, 0)); \ + } \ + while (0) + +#define _FP_MUL_MEAT_DW_4_gmp(wfracbits, R, X, Y) \ + do \ + { \ + mpn_mul_n (R##_f, _x_f, _y_f, 4); \ + } \ + while (0) + +#define _FP_MUL_MEAT_4_gmp(wfracbits, R, X, Y) \ + do \ + { \ + _FP_FRAC_DECL_8 (_FP_MUL_MEAT_4_gmp_z); \ + \ + _FP_MUL_MEAT_DW_4_gmp ((wfracbits), _FP_MUL_MEAT_4_gmp_z, X, Y); \ + \ + /* Normalize since we know where the msb of the multiplicands \ + were (bit B), we know that the msb of the of the product is \ + at either 2B or 2B-1. */ \ + _FP_FRAC_SRS_8 (_FP_MUL_MEAT_4_gmp_z, (wfracbits)-1, \ + 2*(wfracbits)); \ + __FP_FRAC_SET_4 (R, _FP_FRAC_WORD_8 (_FP_MUL_MEAT_4_gmp_z, 3), \ + _FP_FRAC_WORD_8 (_FP_MUL_MEAT_4_gmp_z, 2), \ + _FP_FRAC_WORD_8 (_FP_MUL_MEAT_4_gmp_z, 1), \ + _FP_FRAC_WORD_8 (_FP_MUL_MEAT_4_gmp_z, 0)); \ + } \ + while (0) + +/* Helper utility for _FP_DIV_MEAT_4_udiv: + * pppp = m * nnn. */ +#define umul_ppppmnnn(p3, p2, p1, p0, m, n2, n1, n0) \ + do \ + { \ + UWtype umul_ppppmnnn_t; \ + umul_ppmm (p1, p0, m, n0); \ + umul_ppmm (p2, umul_ppppmnnn_t, m, n1); \ + __FP_FRAC_ADDI_2 (p2, p1, umul_ppppmnnn_t); \ + umul_ppmm (p3, umul_ppppmnnn_t, m, n2); \ + __FP_FRAC_ADDI_2 (p3, p2, umul_ppppmnnn_t); \ + } \ + while (0) + +/* Division algorithms: */ + +#define _FP_DIV_MEAT_4_udiv(fs, R, X, Y) \ + do \ + { \ + int _FP_DIV_MEAT_4_udiv_i; \ + _FP_FRAC_DECL_4 (_FP_DIV_MEAT_4_udiv_n); \ + _FP_FRAC_DECL_4 (_FP_DIV_MEAT_4_udiv_m); \ + _FP_FRAC_SET_4 (_FP_DIV_MEAT_4_udiv_n, _FP_ZEROFRAC_4); \ + if (_FP_FRAC_GE_4 (X, Y)) \ + { \ + _FP_DIV_MEAT_4_udiv_n_f[3] \ + = X##_f[0] << (_FP_W_TYPE_SIZE - 1); \ + _FP_FRAC_SRL_4 (X, 1); \ + } \ + else \ + R##_e--; \ + \ + /* Normalize, i.e. make the most significant bit of the \ + denominator set. */ \ + _FP_FRAC_SLL_4 (Y, _FP_WFRACXBITS_##fs); \ + \ + for (_FP_DIV_MEAT_4_udiv_i = 3; ; _FP_DIV_MEAT_4_udiv_i--) \ + { \ + if (X##_f[3] == Y##_f[3]) \ + { \ + /* This is a special case, not an optimization \ + (X##_f[3]/Y##_f[3] would not fit into UWtype). \ + As X## is guaranteed to be < Y, \ + R##_f[_FP_DIV_MEAT_4_udiv_i] can be either \ + (UWtype)-1 or (UWtype)-2. */ \ + R##_f[_FP_DIV_MEAT_4_udiv_i] = -1; \ + if (!_FP_DIV_MEAT_4_udiv_i) \ + break; \ + __FP_FRAC_SUB_4 (X##_f[3], X##_f[2], X##_f[1], X##_f[0], \ + Y##_f[2], Y##_f[1], Y##_f[0], 0, \ + X##_f[2], X##_f[1], X##_f[0], \ + _FP_DIV_MEAT_4_udiv_n_f[_FP_DIV_MEAT_4_udiv_i]); \ + _FP_FRAC_SUB_4 (X, Y, X); \ + if (X##_f[3] > Y##_f[3]) \ + { \ + R##_f[_FP_DIV_MEAT_4_udiv_i] = -2; \ + _FP_FRAC_ADD_4 (X, Y, X); \ + } \ + } \ + else \ + { \ + udiv_qrnnd (R##_f[_FP_DIV_MEAT_4_udiv_i], \ + X##_f[3], X##_f[3], X##_f[2], Y##_f[3]); \ + umul_ppppmnnn (_FP_DIV_MEAT_4_udiv_m_f[3], \ + _FP_DIV_MEAT_4_udiv_m_f[2], \ + _FP_DIV_MEAT_4_udiv_m_f[1], \ + _FP_DIV_MEAT_4_udiv_m_f[0], \ + R##_f[_FP_DIV_MEAT_4_udiv_i], \ + Y##_f[2], Y##_f[1], Y##_f[0]); \ + X##_f[2] = X##_f[1]; \ + X##_f[1] = X##_f[0]; \ + X##_f[0] \ + = _FP_DIV_MEAT_4_udiv_n_f[_FP_DIV_MEAT_4_udiv_i]; \ + if (_FP_FRAC_GT_4 (_FP_DIV_MEAT_4_udiv_m, X)) \ + { \ + R##_f[_FP_DIV_MEAT_4_udiv_i]--; \ + _FP_FRAC_ADD_4 (X, Y, X); \ + if (_FP_FRAC_GE_4 (X, Y) \ + && _FP_FRAC_GT_4 (_FP_DIV_MEAT_4_udiv_m, X)) \ + { \ + R##_f[_FP_DIV_MEAT_4_udiv_i]--; \ + _FP_FRAC_ADD_4 (X, Y, X); \ + } \ + } \ + _FP_FRAC_DEC_4 (X, _FP_DIV_MEAT_4_udiv_m); \ + if (!_FP_DIV_MEAT_4_udiv_i) \ + { \ + if (!_FP_FRAC_EQ_4 (X, _FP_DIV_MEAT_4_udiv_m)) \ + R##_f[0] |= _FP_WORK_STICKY; \ + break; \ + } \ + } \ + } \ + } \ + while (0) + + +/* Square root algorithms: + We have just one right now, maybe Newton approximation + should be added for those machines where division is fast. */ + +#define _FP_SQRT_MEAT_4(R, S, T, X, q) \ + do \ + { \ + while (q) \ + { \ + T##_f[3] = S##_f[3] + (q); \ + if (T##_f[3] <= X##_f[3]) \ + { \ + S##_f[3] = T##_f[3] + (q); \ + X##_f[3] -= T##_f[3]; \ + R##_f[3] += (q); \ + } \ + _FP_FRAC_SLL_4 (X, 1); \ + (q) >>= 1; \ + } \ + (q) = (_FP_W_TYPE) 1 << (_FP_W_TYPE_SIZE - 1); \ + while (q) \ + { \ + T##_f[2] = S##_f[2] + (q); \ + T##_f[3] = S##_f[3]; \ + if (T##_f[3] < X##_f[3] \ + || (T##_f[3] == X##_f[3] && T##_f[2] <= X##_f[2])) \ + { \ + S##_f[2] = T##_f[2] + (q); \ + S##_f[3] += (T##_f[2] > S##_f[2]); \ + __FP_FRAC_DEC_2 (X##_f[3], X##_f[2], \ + T##_f[3], T##_f[2]); \ + R##_f[2] += (q); \ + } \ + _FP_FRAC_SLL_4 (X, 1); \ + (q) >>= 1; \ + } \ + (q) = (_FP_W_TYPE) 1 << (_FP_W_TYPE_SIZE - 1); \ + while (q) \ + { \ + T##_f[1] = S##_f[1] + (q); \ + T##_f[2] = S##_f[2]; \ + T##_f[3] = S##_f[3]; \ + if (T##_f[3] < X##_f[3] \ + || (T##_f[3] == X##_f[3] \ + && (T##_f[2] < X##_f[2] \ + || (T##_f[2] == X##_f[2] \ + && T##_f[1] <= X##_f[1])))) \ + { \ + S##_f[1] = T##_f[1] + (q); \ + S##_f[2] += (T##_f[1] > S##_f[1]); \ + S##_f[3] += (T##_f[2] > S##_f[2]); \ + __FP_FRAC_DEC_3 (X##_f[3], X##_f[2], X##_f[1], \ + T##_f[3], T##_f[2], T##_f[1]); \ + R##_f[1] += (q); \ + } \ + _FP_FRAC_SLL_4 (X, 1); \ + (q) >>= 1; \ + } \ + (q) = (_FP_W_TYPE) 1 << (_FP_W_TYPE_SIZE - 1); \ + while ((q) != _FP_WORK_ROUND) \ + { \ + T##_f[0] = S##_f[0] + (q); \ + T##_f[1] = S##_f[1]; \ + T##_f[2] = S##_f[2]; \ + T##_f[3] = S##_f[3]; \ + if (_FP_FRAC_GE_4 (X, T)) \ + { \ + S##_f[0] = T##_f[0] + (q); \ + S##_f[1] += (T##_f[0] > S##_f[0]); \ + S##_f[2] += (T##_f[1] > S##_f[1]); \ + S##_f[3] += (T##_f[2] > S##_f[2]); \ + _FP_FRAC_DEC_4 (X, T); \ + R##_f[0] += (q); \ + } \ + _FP_FRAC_SLL_4 (X, 1); \ + (q) >>= 1; \ + } \ + if (!_FP_FRAC_ZEROP_4 (X)) \ + { \ + if (_FP_FRAC_GT_4 (X, S)) \ + R##_f[0] |= _FP_WORK_ROUND; \ + R##_f[0] |= _FP_WORK_STICKY; \ + } \ + } \ + while (0) + + +/* Internals. */ + +#define __FP_FRAC_SET_4(X, I3, I2, I1, I0) \ + (X##_f[3] = I3, X##_f[2] = I2, X##_f[1] = I1, X##_f[0] = I0) + +#ifndef __FP_FRAC_ADD_3 +# define __FP_FRAC_ADD_3(r2, r1, r0, x2, x1, x0, y2, y1, y0) \ + do \ + { \ + _FP_W_TYPE __FP_FRAC_ADD_3_c1, __FP_FRAC_ADD_3_c2; \ + r0 = x0 + y0; \ + __FP_FRAC_ADD_3_c1 = r0 < x0; \ + r1 = x1 + y1; \ + __FP_FRAC_ADD_3_c2 = r1 < x1; \ + r1 += __FP_FRAC_ADD_3_c1; \ + __FP_FRAC_ADD_3_c2 |= r1 < __FP_FRAC_ADD_3_c1; \ + r2 = x2 + y2 + __FP_FRAC_ADD_3_c2; \ + } \ + while (0) +#endif + +#ifndef __FP_FRAC_ADD_4 +# define __FP_FRAC_ADD_4(r3, r2, r1, r0, x3, x2, x1, x0, y3, y2, y1, y0) \ + do \ + { \ + _FP_W_TYPE __FP_FRAC_ADD_4_c1, __FP_FRAC_ADD_4_c2; \ + _FP_W_TYPE __FP_FRAC_ADD_4_c3; \ + r0 = x0 + y0; \ + __FP_FRAC_ADD_4_c1 = r0 < x0; \ + r1 = x1 + y1; \ + __FP_FRAC_ADD_4_c2 = r1 < x1; \ + r1 += __FP_FRAC_ADD_4_c1; \ + __FP_FRAC_ADD_4_c2 |= r1 < __FP_FRAC_ADD_4_c1; \ + r2 = x2 + y2; \ + __FP_FRAC_ADD_4_c3 = r2 < x2; \ + r2 += __FP_FRAC_ADD_4_c2; \ + __FP_FRAC_ADD_4_c3 |= r2 < __FP_FRAC_ADD_4_c2; \ + r3 = x3 + y3 + __FP_FRAC_ADD_4_c3; \ + } \ + while (0) +#endif + +#ifndef __FP_FRAC_SUB_3 +# define __FP_FRAC_SUB_3(r2, r1, r0, x2, x1, x0, y2, y1, y0) \ + do \ + { \ + _FP_W_TYPE __FP_FRAC_SUB_3_c1, __FP_FRAC_SUB_3_c2; \ + r0 = x0 - y0; \ + __FP_FRAC_SUB_3_c1 = r0 > x0; \ + r1 = x1 - y1; \ + __FP_FRAC_SUB_3_c2 = r1 > x1; \ + r1 -= __FP_FRAC_SUB_3_c1; \ + __FP_FRAC_SUB_3_c2 |= __FP_FRAC_SUB_3_c1 && (y1 == x1); \ + r2 = x2 - y2 - __FP_FRAC_SUB_3_c2; \ + } \ + while (0) +#endif + +#ifndef __FP_FRAC_SUB_4 +# define __FP_FRAC_SUB_4(r3, r2, r1, r0, x3, x2, x1, x0, y3, y2, y1, y0) \ + do \ + { \ + _FP_W_TYPE __FP_FRAC_SUB_4_c1, __FP_FRAC_SUB_4_c2; \ + _FP_W_TYPE __FP_FRAC_SUB_4_c3; \ + r0 = x0 - y0; \ + __FP_FRAC_SUB_4_c1 = r0 > x0; \ + r1 = x1 - y1; \ + __FP_FRAC_SUB_4_c2 = r1 > x1; \ + r1 -= __FP_FRAC_SUB_4_c1; \ + __FP_FRAC_SUB_4_c2 |= __FP_FRAC_SUB_4_c1 && (y1 == x1); \ + r2 = x2 - y2; \ + __FP_FRAC_SUB_4_c3 = r2 > x2; \ + r2 -= __FP_FRAC_SUB_4_c2; \ + __FP_FRAC_SUB_4_c3 |= __FP_FRAC_SUB_4_c2 && (y2 == x2); \ + r3 = x3 - y3 - __FP_FRAC_SUB_4_c3; \ + } \ + while (0) +#endif + +#ifndef __FP_FRAC_DEC_3 +# define __FP_FRAC_DEC_3(x2, x1, x0, y2, y1, y0) \ + do \ + { \ + UWtype __FP_FRAC_DEC_3_t0, __FP_FRAC_DEC_3_t1; \ + UWtype __FP_FRAC_DEC_3_t2; \ + __FP_FRAC_DEC_3_t0 = x0; \ + __FP_FRAC_DEC_3_t1 = x1; \ + __FP_FRAC_DEC_3_t2 = x2; \ + __FP_FRAC_SUB_3 (x2, x1, x0, __FP_FRAC_DEC_3_t2, \ + __FP_FRAC_DEC_3_t1, __FP_FRAC_DEC_3_t0, \ + y2, y1, y0); \ + } \ + while (0) +#endif + +#ifndef __FP_FRAC_DEC_4 +# define __FP_FRAC_DEC_4(x3, x2, x1, x0, y3, y2, y1, y0) \ + do \ + { \ + UWtype __FP_FRAC_DEC_4_t0, __FP_FRAC_DEC_4_t1; \ + UWtype __FP_FRAC_DEC_4_t2, __FP_FRAC_DEC_4_t3; \ + __FP_FRAC_DEC_4_t0 = x0; \ + __FP_FRAC_DEC_4_t1 = x1; \ + __FP_FRAC_DEC_4_t2 = x2; \ + __FP_FRAC_DEC_4_t3 = x3; \ + __FP_FRAC_SUB_4 (x3, x2, x1, x0, __FP_FRAC_DEC_4_t3, \ + __FP_FRAC_DEC_4_t2, __FP_FRAC_DEC_4_t1, \ + __FP_FRAC_DEC_4_t0, y3, y2, y1, y0); \ + } \ + while (0) +#endif + +#ifndef __FP_FRAC_ADDI_4 +# define __FP_FRAC_ADDI_4(x3, x2, x1, x0, i) \ + do \ + { \ + UWtype __FP_FRAC_ADDI_4_t; \ + __FP_FRAC_ADDI_4_t = ((x0 += i) < i); \ + x1 += __FP_FRAC_ADDI_4_t; \ + __FP_FRAC_ADDI_4_t = (x1 < __FP_FRAC_ADDI_4_t); \ + x2 += __FP_FRAC_ADDI_4_t; \ + __FP_FRAC_ADDI_4_t = (x2 < __FP_FRAC_ADDI_4_t); \ + x3 += __FP_FRAC_ADDI_4_t; \ + } \ + while (0) +#endif + +/* Convert FP values between word sizes. This appears to be more + complicated than I'd have expected it to be, so these might be + wrong... These macros are in any case somewhat bogus because they + use information about what various FRAC_n variables look like + internally [eg, that 2 word vars are X_f0 and x_f1]. But so do + the ones in op-2.h and op-1.h. */ +#define _FP_FRAC_COPY_1_4(D, S) (D##_f = S##_f[0]) + +#define _FP_FRAC_COPY_2_4(D, S) \ + do \ + { \ + D##_f0 = S##_f[0]; \ + D##_f1 = S##_f[1]; \ + } \ + while (0) + +/* Assembly/disassembly for converting to/from integral types. + No shifting or overflow handled here. */ +/* Put the FP value X into r, which is an integer of size rsize. */ +#define _FP_FRAC_ASSEMBLE_4(r, X, rsize) \ + do \ + { \ + if ((rsize) <= _FP_W_TYPE_SIZE) \ + (r) = X##_f[0]; \ + else if ((rsize) <= 2*_FP_W_TYPE_SIZE) \ + { \ + (r) = X##_f[1]; \ + (r) = ((rsize) <= _FP_W_TYPE_SIZE \ + ? 0 \ + : (r) << _FP_W_TYPE_SIZE); \ + (r) += X##_f[0]; \ + } \ + else \ + { \ + /* I'm feeling lazy so we deal with int == 3words \ + (implausible) and int == 4words as a single case. */ \ + (r) = X##_f[3]; \ + (r) = ((rsize) <= _FP_W_TYPE_SIZE \ + ? 0 \ + : (r) << _FP_W_TYPE_SIZE); \ + (r) += X##_f[2]; \ + (r) = ((rsize) <= _FP_W_TYPE_SIZE \ + ? 0 \ + : (r) << _FP_W_TYPE_SIZE); \ + (r) += X##_f[1]; \ + (r) = ((rsize) <= _FP_W_TYPE_SIZE \ + ? 0 \ + : (r) << _FP_W_TYPE_SIZE); \ + (r) += X##_f[0]; \ + } \ + } \ + while (0) + +/* "No disassemble Number Five!" */ +/* Move an integer of size rsize into X's fractional part. We rely on + the _f[] array consisting of words of size _FP_W_TYPE_SIZE to avoid + having to mask the values we store into it. */ +#define _FP_FRAC_DISASSEMBLE_4(X, r, rsize) \ + do \ + { \ + X##_f[0] = (r); \ + X##_f[1] = ((rsize) <= _FP_W_TYPE_SIZE \ + ? 0 \ + : (r) >> _FP_W_TYPE_SIZE); \ + X##_f[2] = ((rsize) <= 2*_FP_W_TYPE_SIZE \ + ? 0 \ + : (r) >> 2*_FP_W_TYPE_SIZE); \ + X##_f[3] = ((rsize) <= 3*_FP_W_TYPE_SIZE \ + ? 0 \ + : (r) >> 3*_FP_W_TYPE_SIZE); \ + } \ + while (0) + +#define _FP_FRAC_COPY_4_1(D, S) \ + do \ + { \ + D##_f[0] = S##_f; \ + D##_f[1] = D##_f[2] = D##_f[3] = 0; \ + } \ + while (0) + +#define _FP_FRAC_COPY_4_2(D, S) \ + do \ + { \ + D##_f[0] = S##_f0; \ + D##_f[1] = S##_f1; \ + D##_f[2] = D##_f[3] = 0; \ + } \ + while (0) + +#define _FP_FRAC_COPY_4_4(D, S) _FP_FRAC_COPY_4 (D, S) diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/op-8.h b/contrib/toolchain/gcc/5x/libgcc/soft-fp/op-8.h new file mode 100644 index 0000000000..a47799f114 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/op-8.h @@ -0,0 +1,145 @@ +/* Software floating-point emulation. + Basic eight-word fraction declaration and manipulation. + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com), + Jakub Jelinek (jj@ultra.linux.cz) and + Peter Maydell (pmaydell@chiark.greenend.org.uk). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +/* We need just a few things from here for op-4, if we ever need some + other macros, they can be added. */ +#define _FP_FRAC_DECL_8(X) _FP_W_TYPE X##_f[8] +#define _FP_FRAC_HIGH_8(X) (X##_f[7]) +#define _FP_FRAC_LOW_8(X) (X##_f[0]) +#define _FP_FRAC_WORD_8(X, w) (X##_f[w]) + +#define _FP_FRAC_SLL_8(X, N) \ + do \ + { \ + _FP_I_TYPE _FP_FRAC_SLL_8_up, _FP_FRAC_SLL_8_down; \ + _FP_I_TYPE _FP_FRAC_SLL_8_skip, _FP_FRAC_SLL_8_i; \ + _FP_FRAC_SLL_8_skip = (N) / _FP_W_TYPE_SIZE; \ + _FP_FRAC_SLL_8_up = (N) % _FP_W_TYPE_SIZE; \ + _FP_FRAC_SLL_8_down = _FP_W_TYPE_SIZE - _FP_FRAC_SLL_8_up; \ + if (!_FP_FRAC_SLL_8_up) \ + for (_FP_FRAC_SLL_8_i = 7; \ + _FP_FRAC_SLL_8_i >= _FP_FRAC_SLL_8_skip; \ + --_FP_FRAC_SLL_8_i) \ + X##_f[_FP_FRAC_SLL_8_i] \ + = X##_f[_FP_FRAC_SLL_8_i-_FP_FRAC_SLL_8_skip]; \ + else \ + { \ + for (_FP_FRAC_SLL_8_i = 7; \ + _FP_FRAC_SLL_8_i > _FP_FRAC_SLL_8_skip; \ + --_FP_FRAC_SLL_8_i) \ + X##_f[_FP_FRAC_SLL_8_i] \ + = ((X##_f[_FP_FRAC_SLL_8_i-_FP_FRAC_SLL_8_skip] \ + << _FP_FRAC_SLL_8_up) \ + | (X##_f[_FP_FRAC_SLL_8_i-_FP_FRAC_SLL_8_skip-1] \ + >> _FP_FRAC_SLL_8_down)); \ + X##_f[_FP_FRAC_SLL_8_i--] = X##_f[0] << _FP_FRAC_SLL_8_up; \ + } \ + for (; _FP_FRAC_SLL_8_i >= 0; --_FP_FRAC_SLL_8_i) \ + X##_f[_FP_FRAC_SLL_8_i] = 0; \ + } \ + while (0) + +#define _FP_FRAC_SRL_8(X, N) \ + do \ + { \ + _FP_I_TYPE _FP_FRAC_SRL_8_up, _FP_FRAC_SRL_8_down; \ + _FP_I_TYPE _FP_FRAC_SRL_8_skip, _FP_FRAC_SRL_8_i; \ + _FP_FRAC_SRL_8_skip = (N) / _FP_W_TYPE_SIZE; \ + _FP_FRAC_SRL_8_down = (N) % _FP_W_TYPE_SIZE; \ + _FP_FRAC_SRL_8_up = _FP_W_TYPE_SIZE - _FP_FRAC_SRL_8_down; \ + if (!_FP_FRAC_SRL_8_down) \ + for (_FP_FRAC_SRL_8_i = 0; \ + _FP_FRAC_SRL_8_i <= 7-_FP_FRAC_SRL_8_skip; \ + ++_FP_FRAC_SRL_8_i) \ + X##_f[_FP_FRAC_SRL_8_i] \ + = X##_f[_FP_FRAC_SRL_8_i+_FP_FRAC_SRL_8_skip]; \ + else \ + { \ + for (_FP_FRAC_SRL_8_i = 0; \ + _FP_FRAC_SRL_8_i < 7-_FP_FRAC_SRL_8_skip; \ + ++_FP_FRAC_SRL_8_i) \ + X##_f[_FP_FRAC_SRL_8_i] \ + = ((X##_f[_FP_FRAC_SRL_8_i+_FP_FRAC_SRL_8_skip] \ + >> _FP_FRAC_SRL_8_down) \ + | (X##_f[_FP_FRAC_SRL_8_i+_FP_FRAC_SRL_8_skip+1] \ + << _FP_FRAC_SRL_8_up)); \ + X##_f[_FP_FRAC_SRL_8_i++] = X##_f[7] >> _FP_FRAC_SRL_8_down; \ + } \ + for (; _FP_FRAC_SRL_8_i < 8; ++_FP_FRAC_SRL_8_i) \ + X##_f[_FP_FRAC_SRL_8_i] = 0; \ + } \ + while (0) + + +/* Right shift with sticky-lsb. + What this actually means is that we do a standard right-shift, + but that if any of the bits that fall off the right hand side + were one then we always set the LSbit. */ +#define _FP_FRAC_SRS_8(X, N, size) \ + do \ + { \ + _FP_I_TYPE _FP_FRAC_SRS_8_up, _FP_FRAC_SRS_8_down; \ + _FP_I_TYPE _FP_FRAC_SRS_8_skip, _FP_FRAC_SRS_8_i; \ + _FP_W_TYPE _FP_FRAC_SRS_8_s; \ + _FP_FRAC_SRS_8_skip = (N) / _FP_W_TYPE_SIZE; \ + _FP_FRAC_SRS_8_down = (N) % _FP_W_TYPE_SIZE; \ + _FP_FRAC_SRS_8_up = _FP_W_TYPE_SIZE - _FP_FRAC_SRS_8_down; \ + for (_FP_FRAC_SRS_8_s = _FP_FRAC_SRS_8_i = 0; \ + _FP_FRAC_SRS_8_i < _FP_FRAC_SRS_8_skip; \ + ++_FP_FRAC_SRS_8_i) \ + _FP_FRAC_SRS_8_s |= X##_f[_FP_FRAC_SRS_8_i]; \ + if (!_FP_FRAC_SRS_8_down) \ + for (_FP_FRAC_SRS_8_i = 0; \ + _FP_FRAC_SRS_8_i <= 7-_FP_FRAC_SRS_8_skip; \ + ++_FP_FRAC_SRS_8_i) \ + X##_f[_FP_FRAC_SRS_8_i] \ + = X##_f[_FP_FRAC_SRS_8_i+_FP_FRAC_SRS_8_skip]; \ + else \ + { \ + _FP_FRAC_SRS_8_s \ + |= X##_f[_FP_FRAC_SRS_8_i] << _FP_FRAC_SRS_8_up; \ + for (_FP_FRAC_SRS_8_i = 0; \ + _FP_FRAC_SRS_8_i < 7-_FP_FRAC_SRS_8_skip; \ + ++_FP_FRAC_SRS_8_i) \ + X##_f[_FP_FRAC_SRS_8_i] \ + = ((X##_f[_FP_FRAC_SRS_8_i+_FP_FRAC_SRS_8_skip] \ + >> _FP_FRAC_SRS_8_down) \ + | (X##_f[_FP_FRAC_SRS_8_i+_FP_FRAC_SRS_8_skip+1] \ + << _FP_FRAC_SRS_8_up)); \ + X##_f[_FP_FRAC_SRS_8_i++] = X##_f[7] >> _FP_FRAC_SRS_8_down; \ + } \ + for (; _FP_FRAC_SRS_8_i < 8; ++_FP_FRAC_SRS_8_i) \ + X##_f[_FP_FRAC_SRS_8_i] = 0; \ + /* Don't fix the LSB until the very end when we're sure f[0] is \ + stable. */ \ + X##_f[0] |= (_FP_FRAC_SRS_8_s != 0); \ + } \ + while (0) diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/op-common.h b/contrib/toolchain/gcc/5x/libgcc/soft-fp/op-common.h new file mode 100644 index 0000000000..73fbe7af25 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/op-common.h @@ -0,0 +1,1846 @@ +/* Software floating-point emulation. Common operations. + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com), + Jakub Jelinek (jj@ultra.linux.cz), + David S. Miller (davem@redhat.com) and + Peter Maydell (pmaydell@chiark.greenend.org.uk). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#define _FP_DECL(wc, X) \ + _FP_I_TYPE X##_c __attribute__ ((unused)); \ + _FP_I_TYPE X##_s __attribute__ ((unused)); \ + _FP_I_TYPE X##_e __attribute__ ((unused)); \ + _FP_FRAC_DECL_##wc (X) + +/* Test whether the qNaN bit denotes a signaling NaN. */ +#define _FP_FRAC_SNANP(fs, X) \ + ((_FP_QNANNEGATEDP) \ + ? (_FP_FRAC_HIGH_RAW_##fs (X) & _FP_QNANBIT_##fs) \ + : !(_FP_FRAC_HIGH_RAW_##fs (X) & _FP_QNANBIT_##fs)) +#define _FP_FRAC_SNANP_SEMIRAW(fs, X) \ + ((_FP_QNANNEGATEDP) \ + ? (_FP_FRAC_HIGH_##fs (X) & _FP_QNANBIT_SH_##fs) \ + : !(_FP_FRAC_HIGH_##fs (X) & _FP_QNANBIT_SH_##fs)) + +/* Finish truly unpacking a native fp value by classifying the kind + of fp value and normalizing both the exponent and the fraction. */ + +#define _FP_UNPACK_CANONICAL(fs, wc, X) \ + do \ + { \ + switch (X##_e) \ + { \ + default: \ + _FP_FRAC_HIGH_RAW_##fs (X) |= _FP_IMPLBIT_##fs; \ + _FP_FRAC_SLL_##wc (X, _FP_WORKBITS); \ + X##_e -= _FP_EXPBIAS_##fs; \ + X##_c = FP_CLS_NORMAL; \ + break; \ + \ + case 0: \ + if (_FP_FRAC_ZEROP_##wc (X)) \ + X##_c = FP_CLS_ZERO; \ + else if (FP_DENORM_ZERO) \ + { \ + X##_c = FP_CLS_ZERO; \ + _FP_FRAC_SET_##wc (X, _FP_ZEROFRAC_##wc); \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + } \ + else \ + { \ + /* A denormalized number. */ \ + _FP_I_TYPE _FP_UNPACK_CANONICAL_shift; \ + _FP_FRAC_CLZ_##wc (_FP_UNPACK_CANONICAL_shift, \ + X); \ + _FP_UNPACK_CANONICAL_shift -= _FP_FRACXBITS_##fs; \ + _FP_FRAC_SLL_##wc (X, (_FP_UNPACK_CANONICAL_shift \ + + _FP_WORKBITS)); \ + X##_e -= (_FP_EXPBIAS_##fs - 1 \ + + _FP_UNPACK_CANONICAL_shift); \ + X##_c = FP_CLS_NORMAL; \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + } \ + break; \ + \ + case _FP_EXPMAX_##fs: \ + if (_FP_FRAC_ZEROP_##wc (X)) \ + X##_c = FP_CLS_INF; \ + else \ + { \ + X##_c = FP_CLS_NAN; \ + /* Check for signaling NaN. */ \ + if (_FP_FRAC_SNANP (fs, X)) \ + FP_SET_EXCEPTION (FP_EX_INVALID \ + | FP_EX_INVALID_SNAN); \ + } \ + break; \ + } \ + } \ + while (0) + +/* Finish unpacking an fp value in semi-raw mode: the mantissa is + shifted by _FP_WORKBITS but the implicit MSB is not inserted and + other classification is not done. */ +#define _FP_UNPACK_SEMIRAW(fs, wc, X) _FP_FRAC_SLL_##wc (X, _FP_WORKBITS) + +/* Check whether a raw or semi-raw input value should be flushed to + zero, and flush it to zero if so. */ +#define _FP_CHECK_FLUSH_ZERO(fs, wc, X) \ + do \ + { \ + if (FP_DENORM_ZERO \ + && X##_e == 0 \ + && !_FP_FRAC_ZEROP_##wc (X)) \ + { \ + _FP_FRAC_SET_##wc (X, _FP_ZEROFRAC_##wc); \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + } \ + } \ + while (0) + +/* A semi-raw value has overflowed to infinity. Adjust the mantissa + and exponent appropriately. */ +#define _FP_OVERFLOW_SEMIRAW(fs, wc, X) \ + do \ + { \ + if (FP_ROUNDMODE == FP_RND_NEAREST \ + || (FP_ROUNDMODE == FP_RND_PINF && !X##_s) \ + || (FP_ROUNDMODE == FP_RND_MINF && X##_s)) \ + { \ + X##_e = _FP_EXPMAX_##fs; \ + _FP_FRAC_SET_##wc (X, _FP_ZEROFRAC_##wc); \ + } \ + else \ + { \ + X##_e = _FP_EXPMAX_##fs - 1; \ + _FP_FRAC_SET_##wc (X, _FP_MAXFRAC_##wc); \ + } \ + FP_SET_EXCEPTION (FP_EX_INEXACT); \ + FP_SET_EXCEPTION (FP_EX_OVERFLOW); \ + } \ + while (0) + +/* Check for a semi-raw value being a signaling NaN and raise the + invalid exception if so. */ +#define _FP_CHECK_SIGNAN_SEMIRAW(fs, wc, X) \ + do \ + { \ + if (X##_e == _FP_EXPMAX_##fs \ + && !_FP_FRAC_ZEROP_##wc (X) \ + && _FP_FRAC_SNANP_SEMIRAW (fs, X)) \ + FP_SET_EXCEPTION (FP_EX_INVALID | FP_EX_INVALID_SNAN); \ + } \ + while (0) + +/* Choose a NaN result from an operation on two semi-raw NaN + values. */ +#define _FP_CHOOSENAN_SEMIRAW(fs, wc, R, X, Y, OP) \ + do \ + { \ + /* _FP_CHOOSENAN expects raw values, so shift as required. */ \ + _FP_FRAC_SRL_##wc (X, _FP_WORKBITS); \ + _FP_FRAC_SRL_##wc (Y, _FP_WORKBITS); \ + _FP_CHOOSENAN (fs, wc, R, X, Y, OP); \ + _FP_FRAC_SLL_##wc (R, _FP_WORKBITS); \ + } \ + while (0) + +/* Make the fractional part a quiet NaN, preserving the payload + if possible, otherwise make it the canonical quiet NaN and set + the sign bit accordingly. */ +#define _FP_SETQNAN(fs, wc, X) \ + do \ + { \ + if (_FP_QNANNEGATEDP) \ + { \ + _FP_FRAC_HIGH_RAW_##fs (X) &= _FP_QNANBIT_##fs - 1; \ + if (_FP_FRAC_ZEROP_##wc (X)) \ + { \ + X##_s = _FP_NANSIGN_##fs; \ + _FP_FRAC_SET_##wc (X, _FP_NANFRAC_##fs); \ + } \ + } \ + else \ + _FP_FRAC_HIGH_RAW_##fs (X) |= _FP_QNANBIT_##fs; \ + } \ + while (0) +#define _FP_SETQNAN_SEMIRAW(fs, wc, X) \ + do \ + { \ + if (_FP_QNANNEGATEDP) \ + { \ + _FP_FRAC_HIGH_##fs (X) &= _FP_QNANBIT_SH_##fs - 1; \ + if (_FP_FRAC_ZEROP_##wc (X)) \ + { \ + X##_s = _FP_NANSIGN_##fs; \ + _FP_FRAC_SET_##wc (X, _FP_NANFRAC_##fs); \ + _FP_FRAC_SLL_##wc (X, _FP_WORKBITS); \ + } \ + } \ + else \ + _FP_FRAC_HIGH_##fs (X) |= _FP_QNANBIT_SH_##fs; \ + } \ + while (0) + +/* Test whether a biased exponent is normal (not zero or maximum). */ +#define _FP_EXP_NORMAL(fs, wc, X) (((X##_e + 1) & _FP_EXPMAX_##fs) > 1) + +/* Prepare to pack an fp value in semi-raw mode: the mantissa is + rounded and shifted right, with the rounding possibly increasing + the exponent (including changing a finite value to infinity). */ +#define _FP_PACK_SEMIRAW(fs, wc, X) \ + do \ + { \ + int _FP_PACK_SEMIRAW_is_tiny \ + = X##_e == 0 && !_FP_FRAC_ZEROP_##wc (X); \ + if (_FP_TININESS_AFTER_ROUNDING \ + && _FP_PACK_SEMIRAW_is_tiny) \ + { \ + FP_DECL_##fs (_FP_PACK_SEMIRAW_T); \ + _FP_FRAC_COPY_##wc (_FP_PACK_SEMIRAW_T, X); \ + _FP_PACK_SEMIRAW_T##_s = X##_s; \ + _FP_PACK_SEMIRAW_T##_e = X##_e; \ + _FP_FRAC_SLL_##wc (_FP_PACK_SEMIRAW_T, 1); \ + _FP_ROUND (wc, _FP_PACK_SEMIRAW_T); \ + if (_FP_FRAC_OVERP_##wc (fs, _FP_PACK_SEMIRAW_T)) \ + _FP_PACK_SEMIRAW_is_tiny = 0; \ + } \ + _FP_ROUND (wc, X); \ + if (_FP_PACK_SEMIRAW_is_tiny) \ + { \ + if ((FP_CUR_EXCEPTIONS & FP_EX_INEXACT) \ + || (FP_TRAPPING_EXCEPTIONS & FP_EX_UNDERFLOW)) \ + FP_SET_EXCEPTION (FP_EX_UNDERFLOW); \ + } \ + if (_FP_FRAC_HIGH_##fs (X) \ + & (_FP_OVERFLOW_##fs >> 1)) \ + { \ + _FP_FRAC_HIGH_##fs (X) &= ~(_FP_OVERFLOW_##fs >> 1); \ + X##_e++; \ + if (X##_e == _FP_EXPMAX_##fs) \ + _FP_OVERFLOW_SEMIRAW (fs, wc, X); \ + } \ + _FP_FRAC_SRL_##wc (X, _FP_WORKBITS); \ + if (X##_e == _FP_EXPMAX_##fs && !_FP_FRAC_ZEROP_##wc (X)) \ + { \ + if (!_FP_KEEPNANFRACP) \ + { \ + _FP_FRAC_SET_##wc (X, _FP_NANFRAC_##fs); \ + X##_s = _FP_NANSIGN_##fs; \ + } \ + else \ + _FP_SETQNAN (fs, wc, X); \ + } \ + } \ + while (0) + +/* Before packing the bits back into the native fp result, take care + of such mundane things as rounding and overflow. Also, for some + kinds of fp values, the original parts may not have been fully + extracted -- but that is ok, we can regenerate them now. */ + +#define _FP_PACK_CANONICAL(fs, wc, X) \ + do \ + { \ + switch (X##_c) \ + { \ + case FP_CLS_NORMAL: \ + X##_e += _FP_EXPBIAS_##fs; \ + if (X##_e > 0) \ + { \ + _FP_ROUND (wc, X); \ + if (_FP_FRAC_OVERP_##wc (fs, X)) \ + { \ + _FP_FRAC_CLEAR_OVERP_##wc (fs, X); \ + X##_e++; \ + } \ + _FP_FRAC_SRL_##wc (X, _FP_WORKBITS); \ + if (X##_e >= _FP_EXPMAX_##fs) \ + { \ + /* Overflow. */ \ + switch (FP_ROUNDMODE) \ + { \ + case FP_RND_NEAREST: \ + X##_c = FP_CLS_INF; \ + break; \ + case FP_RND_PINF: \ + if (!X##_s) \ + X##_c = FP_CLS_INF; \ + break; \ + case FP_RND_MINF: \ + if (X##_s) \ + X##_c = FP_CLS_INF; \ + break; \ + } \ + if (X##_c == FP_CLS_INF) \ + { \ + /* Overflow to infinity. */ \ + X##_e = _FP_EXPMAX_##fs; \ + _FP_FRAC_SET_##wc (X, _FP_ZEROFRAC_##wc); \ + } \ + else \ + { \ + /* Overflow to maximum normal. */ \ + X##_e = _FP_EXPMAX_##fs - 1; \ + _FP_FRAC_SET_##wc (X, _FP_MAXFRAC_##wc); \ + } \ + FP_SET_EXCEPTION (FP_EX_OVERFLOW); \ + FP_SET_EXCEPTION (FP_EX_INEXACT); \ + } \ + } \ + else \ + { \ + /* We've got a denormalized number. */ \ + int _FP_PACK_CANONICAL_is_tiny = 1; \ + if (_FP_TININESS_AFTER_ROUNDING && X##_e == 0) \ + { \ + FP_DECL_##fs (_FP_PACK_CANONICAL_T); \ + _FP_FRAC_COPY_##wc (_FP_PACK_CANONICAL_T, X); \ + _FP_PACK_CANONICAL_T##_s = X##_s; \ + _FP_PACK_CANONICAL_T##_e = X##_e; \ + _FP_ROUND (wc, _FP_PACK_CANONICAL_T); \ + if (_FP_FRAC_OVERP_##wc (fs, _FP_PACK_CANONICAL_T)) \ + _FP_PACK_CANONICAL_is_tiny = 0; \ + } \ + X##_e = -X##_e + 1; \ + if (X##_e <= _FP_WFRACBITS_##fs) \ + { \ + _FP_FRAC_SRS_##wc (X, X##_e, _FP_WFRACBITS_##fs); \ + _FP_ROUND (wc, X); \ + if (_FP_FRAC_HIGH_##fs (X) \ + & (_FP_OVERFLOW_##fs >> 1)) \ + { \ + X##_e = 1; \ + _FP_FRAC_SET_##wc (X, _FP_ZEROFRAC_##wc); \ + FP_SET_EXCEPTION (FP_EX_INEXACT); \ + } \ + else \ + { \ + X##_e = 0; \ + _FP_FRAC_SRL_##wc (X, _FP_WORKBITS); \ + } \ + if (_FP_PACK_CANONICAL_is_tiny \ + && ((FP_CUR_EXCEPTIONS & FP_EX_INEXACT) \ + || (FP_TRAPPING_EXCEPTIONS \ + & FP_EX_UNDERFLOW))) \ + FP_SET_EXCEPTION (FP_EX_UNDERFLOW); \ + } \ + else \ + { \ + /* Underflow to zero. */ \ + X##_e = 0; \ + if (!_FP_FRAC_ZEROP_##wc (X)) \ + { \ + _FP_FRAC_SET_##wc (X, _FP_MINFRAC_##wc); \ + _FP_ROUND (wc, X); \ + _FP_FRAC_LOW_##wc (X) >>= (_FP_WORKBITS); \ + } \ + FP_SET_EXCEPTION (FP_EX_UNDERFLOW); \ + } \ + } \ + break; \ + \ + case FP_CLS_ZERO: \ + X##_e = 0; \ + _FP_FRAC_SET_##wc (X, _FP_ZEROFRAC_##wc); \ + break; \ + \ + case FP_CLS_INF: \ + X##_e = _FP_EXPMAX_##fs; \ + _FP_FRAC_SET_##wc (X, _FP_ZEROFRAC_##wc); \ + break; \ + \ + case FP_CLS_NAN: \ + X##_e = _FP_EXPMAX_##fs; \ + if (!_FP_KEEPNANFRACP) \ + { \ + _FP_FRAC_SET_##wc (X, _FP_NANFRAC_##fs); \ + X##_s = _FP_NANSIGN_##fs; \ + } \ + else \ + _FP_SETQNAN (fs, wc, X); \ + break; \ + } \ + } \ + while (0) + +/* This one accepts raw argument and not cooked, returns + 1 if X is a signaling NaN. */ +#define _FP_ISSIGNAN(fs, wc, X) \ + ({ \ + int _FP_ISSIGNAN_ret = 0; \ + if (X##_e == _FP_EXPMAX_##fs) \ + { \ + if (!_FP_FRAC_ZEROP_##wc (X) \ + && _FP_FRAC_SNANP (fs, X)) \ + _FP_ISSIGNAN_ret = 1; \ + } \ + _FP_ISSIGNAN_ret; \ + }) + + + + + +/* Addition on semi-raw values. */ +#define _FP_ADD_INTERNAL(fs, wc, R, X, Y, OP) \ + do \ + { \ + _FP_CHECK_FLUSH_ZERO (fs, wc, X); \ + _FP_CHECK_FLUSH_ZERO (fs, wc, Y); \ + if (X##_s == Y##_s) \ + { \ + /* Addition. */ \ + R##_s = X##_s; \ + int _FP_ADD_INTERNAL_ediff = X##_e - Y##_e; \ + if (_FP_ADD_INTERNAL_ediff > 0) \ + { \ + R##_e = X##_e; \ + if (Y##_e == 0) \ + { \ + /* Y is zero or denormalized. */ \ + if (_FP_FRAC_ZEROP_##wc (Y)) \ + { \ + _FP_CHECK_SIGNAN_SEMIRAW (fs, wc, X); \ + _FP_FRAC_COPY_##wc (R, X); \ + goto add_done; \ + } \ + else \ + { \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + _FP_ADD_INTERNAL_ediff--; \ + if (_FP_ADD_INTERNAL_ediff == 0) \ + { \ + _FP_FRAC_ADD_##wc (R, X, Y); \ + goto add3; \ + } \ + if (X##_e == _FP_EXPMAX_##fs) \ + { \ + _FP_CHECK_SIGNAN_SEMIRAW (fs, wc, X); \ + _FP_FRAC_COPY_##wc (R, X); \ + goto add_done; \ + } \ + goto add1; \ + } \ + } \ + else if (X##_e == _FP_EXPMAX_##fs) \ + { \ + /* X is NaN or Inf, Y is normal. */ \ + _FP_CHECK_SIGNAN_SEMIRAW (fs, wc, X); \ + _FP_FRAC_COPY_##wc (R, X); \ + goto add_done; \ + } \ + \ + /* Insert implicit MSB of Y. */ \ + _FP_FRAC_HIGH_##fs (Y) |= _FP_IMPLBIT_SH_##fs; \ + \ + add1: \ + /* Shift the mantissa of Y to the right \ + _FP_ADD_INTERNAL_EDIFF steps; remember to account \ + later for the implicit MSB of X. */ \ + if (_FP_ADD_INTERNAL_ediff <= _FP_WFRACBITS_##fs) \ + _FP_FRAC_SRS_##wc (Y, _FP_ADD_INTERNAL_ediff, \ + _FP_WFRACBITS_##fs); \ + else if (!_FP_FRAC_ZEROP_##wc (Y)) \ + _FP_FRAC_SET_##wc (Y, _FP_MINFRAC_##wc); \ + _FP_FRAC_ADD_##wc (R, X, Y); \ + } \ + else if (_FP_ADD_INTERNAL_ediff < 0) \ + { \ + _FP_ADD_INTERNAL_ediff = -_FP_ADD_INTERNAL_ediff; \ + R##_e = Y##_e; \ + if (X##_e == 0) \ + { \ + /* X is zero or denormalized. */ \ + if (_FP_FRAC_ZEROP_##wc (X)) \ + { \ + _FP_CHECK_SIGNAN_SEMIRAW (fs, wc, Y); \ + _FP_FRAC_COPY_##wc (R, Y); \ + goto add_done; \ + } \ + else \ + { \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + _FP_ADD_INTERNAL_ediff--; \ + if (_FP_ADD_INTERNAL_ediff == 0) \ + { \ + _FP_FRAC_ADD_##wc (R, Y, X); \ + goto add3; \ + } \ + if (Y##_e == _FP_EXPMAX_##fs) \ + { \ + _FP_CHECK_SIGNAN_SEMIRAW (fs, wc, Y); \ + _FP_FRAC_COPY_##wc (R, Y); \ + goto add_done; \ + } \ + goto add2; \ + } \ + } \ + else if (Y##_e == _FP_EXPMAX_##fs) \ + { \ + /* Y is NaN or Inf, X is normal. */ \ + _FP_CHECK_SIGNAN_SEMIRAW (fs, wc, Y); \ + _FP_FRAC_COPY_##wc (R, Y); \ + goto add_done; \ + } \ + \ + /* Insert implicit MSB of X. */ \ + _FP_FRAC_HIGH_##fs (X) |= _FP_IMPLBIT_SH_##fs; \ + \ + add2: \ + /* Shift the mantissa of X to the right \ + _FP_ADD_INTERNAL_EDIFF steps; remember to account \ + later for the implicit MSB of Y. */ \ + if (_FP_ADD_INTERNAL_ediff <= _FP_WFRACBITS_##fs) \ + _FP_FRAC_SRS_##wc (X, _FP_ADD_INTERNAL_ediff, \ + _FP_WFRACBITS_##fs); \ + else if (!_FP_FRAC_ZEROP_##wc (X)) \ + _FP_FRAC_SET_##wc (X, _FP_MINFRAC_##wc); \ + _FP_FRAC_ADD_##wc (R, Y, X); \ + } \ + else \ + { \ + /* _FP_ADD_INTERNAL_ediff == 0. */ \ + if (!_FP_EXP_NORMAL (fs, wc, X)) \ + { \ + if (X##_e == 0) \ + { \ + /* X and Y are zero or denormalized. */ \ + R##_e = 0; \ + if (_FP_FRAC_ZEROP_##wc (X)) \ + { \ + if (!_FP_FRAC_ZEROP_##wc (Y)) \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + _FP_FRAC_COPY_##wc (R, Y); \ + goto add_done; \ + } \ + else if (_FP_FRAC_ZEROP_##wc (Y)) \ + { \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + _FP_FRAC_COPY_##wc (R, X); \ + goto add_done; \ + } \ + else \ + { \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + _FP_FRAC_ADD_##wc (R, X, Y); \ + if (_FP_FRAC_HIGH_##fs (R) & _FP_IMPLBIT_SH_##fs) \ + { \ + /* Normalized result. */ \ + _FP_FRAC_HIGH_##fs (R) \ + &= ~(_FP_W_TYPE) _FP_IMPLBIT_SH_##fs; \ + R##_e = 1; \ + } \ + goto add_done; \ + } \ + } \ + else \ + { \ + /* X and Y are NaN or Inf. */ \ + _FP_CHECK_SIGNAN_SEMIRAW (fs, wc, X); \ + _FP_CHECK_SIGNAN_SEMIRAW (fs, wc, Y); \ + R##_e = _FP_EXPMAX_##fs; \ + if (_FP_FRAC_ZEROP_##wc (X)) \ + _FP_FRAC_COPY_##wc (R, Y); \ + else if (_FP_FRAC_ZEROP_##wc (Y)) \ + _FP_FRAC_COPY_##wc (R, X); \ + else \ + _FP_CHOOSENAN_SEMIRAW (fs, wc, R, X, Y, OP); \ + goto add_done; \ + } \ + } \ + /* The exponents of X and Y, both normal, are equal. The \ + implicit MSBs will always add to increase the \ + exponent. */ \ + _FP_FRAC_ADD_##wc (R, X, Y); \ + R##_e = X##_e + 1; \ + _FP_FRAC_SRS_##wc (R, 1, _FP_WFRACBITS_##fs); \ + if (R##_e == _FP_EXPMAX_##fs) \ + /* Overflow to infinity (depending on rounding mode). */ \ + _FP_OVERFLOW_SEMIRAW (fs, wc, R); \ + goto add_done; \ + } \ + add3: \ + if (_FP_FRAC_HIGH_##fs (R) & _FP_IMPLBIT_SH_##fs) \ + { \ + /* Overflow. */ \ + _FP_FRAC_HIGH_##fs (R) &= ~(_FP_W_TYPE) _FP_IMPLBIT_SH_##fs; \ + R##_e++; \ + _FP_FRAC_SRS_##wc (R, 1, _FP_WFRACBITS_##fs); \ + if (R##_e == _FP_EXPMAX_##fs) \ + /* Overflow to infinity (depending on rounding mode). */ \ + _FP_OVERFLOW_SEMIRAW (fs, wc, R); \ + } \ + add_done: ; \ + } \ + else \ + { \ + /* Subtraction. */ \ + int _FP_ADD_INTERNAL_ediff = X##_e - Y##_e; \ + if (_FP_ADD_INTERNAL_ediff > 0) \ + { \ + R##_e = X##_e; \ + R##_s = X##_s; \ + if (Y##_e == 0) \ + { \ + /* Y is zero or denormalized. */ \ + if (_FP_FRAC_ZEROP_##wc (Y)) \ + { \ + _FP_CHECK_SIGNAN_SEMIRAW (fs, wc, X); \ + _FP_FRAC_COPY_##wc (R, X); \ + goto sub_done; \ + } \ + else \ + { \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + _FP_ADD_INTERNAL_ediff--; \ + if (_FP_ADD_INTERNAL_ediff == 0) \ + { \ + _FP_FRAC_SUB_##wc (R, X, Y); \ + goto sub3; \ + } \ + if (X##_e == _FP_EXPMAX_##fs) \ + { \ + _FP_CHECK_SIGNAN_SEMIRAW (fs, wc, X); \ + _FP_FRAC_COPY_##wc (R, X); \ + goto sub_done; \ + } \ + goto sub1; \ + } \ + } \ + else if (X##_e == _FP_EXPMAX_##fs) \ + { \ + /* X is NaN or Inf, Y is normal. */ \ + _FP_CHECK_SIGNAN_SEMIRAW (fs, wc, X); \ + _FP_FRAC_COPY_##wc (R, X); \ + goto sub_done; \ + } \ + \ + /* Insert implicit MSB of Y. */ \ + _FP_FRAC_HIGH_##fs (Y) |= _FP_IMPLBIT_SH_##fs; \ + \ + sub1: \ + /* Shift the mantissa of Y to the right \ + _FP_ADD_INTERNAL_EDIFF steps; remember to account \ + later for the implicit MSB of X. */ \ + if (_FP_ADD_INTERNAL_ediff <= _FP_WFRACBITS_##fs) \ + _FP_FRAC_SRS_##wc (Y, _FP_ADD_INTERNAL_ediff, \ + _FP_WFRACBITS_##fs); \ + else if (!_FP_FRAC_ZEROP_##wc (Y)) \ + _FP_FRAC_SET_##wc (Y, _FP_MINFRAC_##wc); \ + _FP_FRAC_SUB_##wc (R, X, Y); \ + } \ + else if (_FP_ADD_INTERNAL_ediff < 0) \ + { \ + _FP_ADD_INTERNAL_ediff = -_FP_ADD_INTERNAL_ediff; \ + R##_e = Y##_e; \ + R##_s = Y##_s; \ + if (X##_e == 0) \ + { \ + /* X is zero or denormalized. */ \ + if (_FP_FRAC_ZEROP_##wc (X)) \ + { \ + _FP_CHECK_SIGNAN_SEMIRAW (fs, wc, Y); \ + _FP_FRAC_COPY_##wc (R, Y); \ + goto sub_done; \ + } \ + else \ + { \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + _FP_ADD_INTERNAL_ediff--; \ + if (_FP_ADD_INTERNAL_ediff == 0) \ + { \ + _FP_FRAC_SUB_##wc (R, Y, X); \ + goto sub3; \ + } \ + if (Y##_e == _FP_EXPMAX_##fs) \ + { \ + _FP_CHECK_SIGNAN_SEMIRAW (fs, wc, Y); \ + _FP_FRAC_COPY_##wc (R, Y); \ + goto sub_done; \ + } \ + goto sub2; \ + } \ + } \ + else if (Y##_e == _FP_EXPMAX_##fs) \ + { \ + /* Y is NaN or Inf, X is normal. */ \ + _FP_CHECK_SIGNAN_SEMIRAW (fs, wc, Y); \ + _FP_FRAC_COPY_##wc (R, Y); \ + goto sub_done; \ + } \ + \ + /* Insert implicit MSB of X. */ \ + _FP_FRAC_HIGH_##fs (X) |= _FP_IMPLBIT_SH_##fs; \ + \ + sub2: \ + /* Shift the mantissa of X to the right \ + _FP_ADD_INTERNAL_EDIFF steps; remember to account \ + later for the implicit MSB of Y. */ \ + if (_FP_ADD_INTERNAL_ediff <= _FP_WFRACBITS_##fs) \ + _FP_FRAC_SRS_##wc (X, _FP_ADD_INTERNAL_ediff, \ + _FP_WFRACBITS_##fs); \ + else if (!_FP_FRAC_ZEROP_##wc (X)) \ + _FP_FRAC_SET_##wc (X, _FP_MINFRAC_##wc); \ + _FP_FRAC_SUB_##wc (R, Y, X); \ + } \ + else \ + { \ + /* ediff == 0. */ \ + if (!_FP_EXP_NORMAL (fs, wc, X)) \ + { \ + if (X##_e == 0) \ + { \ + /* X and Y are zero or denormalized. */ \ + R##_e = 0; \ + if (_FP_FRAC_ZEROP_##wc (X)) \ + { \ + _FP_FRAC_COPY_##wc (R, Y); \ + if (_FP_FRAC_ZEROP_##wc (Y)) \ + R##_s = (FP_ROUNDMODE == FP_RND_MINF); \ + else \ + { \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + R##_s = Y##_s; \ + } \ + goto sub_done; \ + } \ + else if (_FP_FRAC_ZEROP_##wc (Y)) \ + { \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + _FP_FRAC_COPY_##wc (R, X); \ + R##_s = X##_s; \ + goto sub_done; \ + } \ + else \ + { \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + _FP_FRAC_SUB_##wc (R, X, Y); \ + R##_s = X##_s; \ + if (_FP_FRAC_HIGH_##fs (R) & _FP_IMPLBIT_SH_##fs) \ + { \ + /* |X| < |Y|, negate result. */ \ + _FP_FRAC_SUB_##wc (R, Y, X); \ + R##_s = Y##_s; \ + } \ + else if (_FP_FRAC_ZEROP_##wc (R)) \ + R##_s = (FP_ROUNDMODE == FP_RND_MINF); \ + goto sub_done; \ + } \ + } \ + else \ + { \ + /* X and Y are NaN or Inf, of opposite signs. */ \ + _FP_CHECK_SIGNAN_SEMIRAW (fs, wc, X); \ + _FP_CHECK_SIGNAN_SEMIRAW (fs, wc, Y); \ + R##_e = _FP_EXPMAX_##fs; \ + if (_FP_FRAC_ZEROP_##wc (X)) \ + { \ + if (_FP_FRAC_ZEROP_##wc (Y)) \ + { \ + /* Inf - Inf. */ \ + R##_s = _FP_NANSIGN_##fs; \ + _FP_FRAC_SET_##wc (R, _FP_NANFRAC_##fs); \ + _FP_FRAC_SLL_##wc (R, _FP_WORKBITS); \ + FP_SET_EXCEPTION (FP_EX_INVALID \ + | FP_EX_INVALID_ISI); \ + } \ + else \ + { \ + /* Inf - NaN. */ \ + R##_s = Y##_s; \ + _FP_FRAC_COPY_##wc (R, Y); \ + } \ + } \ + else \ + { \ + if (_FP_FRAC_ZEROP_##wc (Y)) \ + { \ + /* NaN - Inf. */ \ + R##_s = X##_s; \ + _FP_FRAC_COPY_##wc (R, X); \ + } \ + else \ + { \ + /* NaN - NaN. */ \ + _FP_CHOOSENAN_SEMIRAW (fs, wc, R, X, Y, OP); \ + } \ + } \ + goto sub_done; \ + } \ + } \ + /* The exponents of X and Y, both normal, are equal. The \ + implicit MSBs cancel. */ \ + R##_e = X##_e; \ + _FP_FRAC_SUB_##wc (R, X, Y); \ + R##_s = X##_s; \ + if (_FP_FRAC_HIGH_##fs (R) & _FP_IMPLBIT_SH_##fs) \ + { \ + /* |X| < |Y|, negate result. */ \ + _FP_FRAC_SUB_##wc (R, Y, X); \ + R##_s = Y##_s; \ + } \ + else if (_FP_FRAC_ZEROP_##wc (R)) \ + { \ + R##_e = 0; \ + R##_s = (FP_ROUNDMODE == FP_RND_MINF); \ + goto sub_done; \ + } \ + goto norm; \ + } \ + sub3: \ + if (_FP_FRAC_HIGH_##fs (R) & _FP_IMPLBIT_SH_##fs) \ + { \ + int _FP_ADD_INTERNAL_diff; \ + /* Carry into most significant bit of larger one of X and Y, \ + canceling it; renormalize. */ \ + _FP_FRAC_HIGH_##fs (R) &= _FP_IMPLBIT_SH_##fs - 1; \ + norm: \ + _FP_FRAC_CLZ_##wc (_FP_ADD_INTERNAL_diff, R); \ + _FP_ADD_INTERNAL_diff -= _FP_WFRACXBITS_##fs; \ + _FP_FRAC_SLL_##wc (R, _FP_ADD_INTERNAL_diff); \ + if (R##_e <= _FP_ADD_INTERNAL_diff) \ + { \ + /* R is denormalized. */ \ + _FP_ADD_INTERNAL_diff \ + = _FP_ADD_INTERNAL_diff - R##_e + 1; \ + _FP_FRAC_SRS_##wc (R, _FP_ADD_INTERNAL_diff, \ + _FP_WFRACBITS_##fs); \ + R##_e = 0; \ + } \ + else \ + { \ + R##_e -= _FP_ADD_INTERNAL_diff; \ + _FP_FRAC_HIGH_##fs (R) &= ~(_FP_W_TYPE) _FP_IMPLBIT_SH_##fs; \ + } \ + } \ + sub_done: ; \ + } \ + } \ + while (0) + +#define _FP_ADD(fs, wc, R, X, Y) _FP_ADD_INTERNAL (fs, wc, R, X, Y, '+') +#define _FP_SUB(fs, wc, R, X, Y) \ + do \ + { \ + if (!(Y##_e == _FP_EXPMAX_##fs && !_FP_FRAC_ZEROP_##wc (Y))) \ + Y##_s ^= 1; \ + _FP_ADD_INTERNAL (fs, wc, R, X, Y, '-'); \ + } \ + while (0) + + +/* Main negation routine. The input value is raw. */ + +#define _FP_NEG(fs, wc, R, X) \ + do \ + { \ + _FP_FRAC_COPY_##wc (R, X); \ + R##_e = X##_e; \ + R##_s = 1 ^ X##_s; \ + } \ + while (0) + + +/* Main multiplication routine. The input values should be cooked. */ + +#define _FP_MUL(fs, wc, R, X, Y) \ + do \ + { \ + R##_s = X##_s ^ Y##_s; \ + R##_e = X##_e + Y##_e + 1; \ + switch (_FP_CLS_COMBINE (X##_c, Y##_c)) \ + { \ + case _FP_CLS_COMBINE (FP_CLS_NORMAL, FP_CLS_NORMAL): \ + R##_c = FP_CLS_NORMAL; \ + \ + _FP_MUL_MEAT_##fs (R, X, Y); \ + \ + if (_FP_FRAC_OVERP_##wc (fs, R)) \ + _FP_FRAC_SRS_##wc (R, 1, _FP_WFRACBITS_##fs); \ + else \ + R##_e--; \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_NAN, FP_CLS_NAN): \ + _FP_CHOOSENAN (fs, wc, R, X, Y, '*'); \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_NAN, FP_CLS_NORMAL): \ + case _FP_CLS_COMBINE (FP_CLS_NAN, FP_CLS_INF): \ + case _FP_CLS_COMBINE (FP_CLS_NAN, FP_CLS_ZERO): \ + R##_s = X##_s; \ + \ + case _FP_CLS_COMBINE (FP_CLS_INF, FP_CLS_INF): \ + case _FP_CLS_COMBINE (FP_CLS_INF, FP_CLS_NORMAL): \ + case _FP_CLS_COMBINE (FP_CLS_ZERO, FP_CLS_NORMAL): \ + case _FP_CLS_COMBINE (FP_CLS_ZERO, FP_CLS_ZERO): \ + _FP_FRAC_COPY_##wc (R, X); \ + R##_c = X##_c; \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_NORMAL, FP_CLS_NAN): \ + case _FP_CLS_COMBINE (FP_CLS_INF, FP_CLS_NAN): \ + case _FP_CLS_COMBINE (FP_CLS_ZERO, FP_CLS_NAN): \ + R##_s = Y##_s; \ + \ + case _FP_CLS_COMBINE (FP_CLS_NORMAL, FP_CLS_INF): \ + case _FP_CLS_COMBINE (FP_CLS_NORMAL, FP_CLS_ZERO): \ + _FP_FRAC_COPY_##wc (R, Y); \ + R##_c = Y##_c; \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_INF, FP_CLS_ZERO): \ + case _FP_CLS_COMBINE (FP_CLS_ZERO, FP_CLS_INF): \ + R##_s = _FP_NANSIGN_##fs; \ + R##_c = FP_CLS_NAN; \ + _FP_FRAC_SET_##wc (R, _FP_NANFRAC_##fs); \ + FP_SET_EXCEPTION (FP_EX_INVALID | FP_EX_INVALID_IMZ); \ + break; \ + \ + default: \ + abort (); \ + } \ + } \ + while (0) + + +/* Fused multiply-add. The input values should be cooked. */ + +#define _FP_FMA(fs, wc, dwc, R, X, Y, Z) \ + do \ + { \ + FP_DECL_##fs (_FP_FMA_T); \ + _FP_FMA_T##_s = X##_s ^ Y##_s; \ + _FP_FMA_T##_e = X##_e + Y##_e + 1; \ + switch (_FP_CLS_COMBINE (X##_c, Y##_c)) \ + { \ + case _FP_CLS_COMBINE (FP_CLS_NORMAL, FP_CLS_NORMAL): \ + switch (Z##_c) \ + { \ + case FP_CLS_INF: \ + case FP_CLS_NAN: \ + R##_s = Z##_s; \ + _FP_FRAC_COPY_##wc (R, Z); \ + R##_c = Z##_c; \ + break; \ + \ + case FP_CLS_ZERO: \ + R##_c = FP_CLS_NORMAL; \ + R##_s = _FP_FMA_T##_s; \ + R##_e = _FP_FMA_T##_e; \ + \ + _FP_MUL_MEAT_##fs (R, X, Y); \ + \ + if (_FP_FRAC_OVERP_##wc (fs, R)) \ + _FP_FRAC_SRS_##wc (R, 1, _FP_WFRACBITS_##fs); \ + else \ + R##_e--; \ + break; \ + \ + case FP_CLS_NORMAL:; \ + _FP_FRAC_DECL_##dwc (_FP_FMA_TD); \ + _FP_FRAC_DECL_##dwc (_FP_FMA_ZD); \ + _FP_FRAC_DECL_##dwc (_FP_FMA_RD); \ + _FP_MUL_MEAT_DW_##fs (_FP_FMA_TD, X, Y); \ + R##_e = _FP_FMA_T##_e; \ + int _FP_FMA_tsh \ + = _FP_FRAC_HIGHBIT_DW_##dwc (fs, _FP_FMA_TD) == 0; \ + _FP_FMA_T##_e -= _FP_FMA_tsh; \ + int _FP_FMA_ediff = _FP_FMA_T##_e - Z##_e; \ + if (_FP_FMA_ediff >= 0) \ + { \ + int _FP_FMA_shift \ + = _FP_WFRACBITS_##fs - _FP_FMA_tsh - _FP_FMA_ediff; \ + if (_FP_FMA_shift <= -_FP_WFRACBITS_##fs) \ + _FP_FRAC_SET_##dwc (_FP_FMA_ZD, _FP_MINFRAC_##dwc); \ + else \ + { \ + _FP_FRAC_COPY_##dwc##_##wc (_FP_FMA_ZD, Z); \ + if (_FP_FMA_shift < 0) \ + _FP_FRAC_SRS_##dwc (_FP_FMA_ZD, -_FP_FMA_shift, \ + _FP_WFRACBITS_DW_##fs); \ + else if (_FP_FMA_shift > 0) \ + _FP_FRAC_SLL_##dwc (_FP_FMA_ZD, _FP_FMA_shift); \ + } \ + R##_s = _FP_FMA_T##_s; \ + if (_FP_FMA_T##_s == Z##_s) \ + _FP_FRAC_ADD_##dwc (_FP_FMA_RD, _FP_FMA_TD, \ + _FP_FMA_ZD); \ + else \ + { \ + _FP_FRAC_SUB_##dwc (_FP_FMA_RD, _FP_FMA_TD, \ + _FP_FMA_ZD); \ + if (_FP_FRAC_NEGP_##dwc (_FP_FMA_RD)) \ + { \ + R##_s = Z##_s; \ + _FP_FRAC_SUB_##dwc (_FP_FMA_RD, _FP_FMA_ZD, \ + _FP_FMA_TD); \ + } \ + } \ + } \ + else \ + { \ + R##_e = Z##_e; \ + R##_s = Z##_s; \ + _FP_FRAC_COPY_##dwc##_##wc (_FP_FMA_ZD, Z); \ + _FP_FRAC_SLL_##dwc (_FP_FMA_ZD, _FP_WFRACBITS_##fs); \ + int _FP_FMA_shift = -_FP_FMA_ediff - _FP_FMA_tsh; \ + if (_FP_FMA_shift >= _FP_WFRACBITS_DW_##fs) \ + _FP_FRAC_SET_##dwc (_FP_FMA_TD, _FP_MINFRAC_##dwc); \ + else if (_FP_FMA_shift > 0) \ + _FP_FRAC_SRS_##dwc (_FP_FMA_TD, _FP_FMA_shift, \ + _FP_WFRACBITS_DW_##fs); \ + if (Z##_s == _FP_FMA_T##_s) \ + _FP_FRAC_ADD_##dwc (_FP_FMA_RD, _FP_FMA_ZD, \ + _FP_FMA_TD); \ + else \ + _FP_FRAC_SUB_##dwc (_FP_FMA_RD, _FP_FMA_ZD, \ + _FP_FMA_TD); \ + } \ + if (_FP_FRAC_ZEROP_##dwc (_FP_FMA_RD)) \ + { \ + if (_FP_FMA_T##_s == Z##_s) \ + R##_s = Z##_s; \ + else \ + R##_s = (FP_ROUNDMODE == FP_RND_MINF); \ + _FP_FRAC_SET_##wc (R, _FP_ZEROFRAC_##wc); \ + R##_c = FP_CLS_ZERO; \ + } \ + else \ + { \ + int _FP_FMA_rlz; \ + _FP_FRAC_CLZ_##dwc (_FP_FMA_rlz, _FP_FMA_RD); \ + _FP_FMA_rlz -= _FP_WFRACXBITS_DW_##fs; \ + R##_e -= _FP_FMA_rlz; \ + int _FP_FMA_shift = _FP_WFRACBITS_##fs - _FP_FMA_rlz; \ + if (_FP_FMA_shift > 0) \ + _FP_FRAC_SRS_##dwc (_FP_FMA_RD, _FP_FMA_shift, \ + _FP_WFRACBITS_DW_##fs); \ + else if (_FP_FMA_shift < 0) \ + _FP_FRAC_SLL_##dwc (_FP_FMA_RD, -_FP_FMA_shift); \ + _FP_FRAC_COPY_##wc##_##dwc (R, _FP_FMA_RD); \ + R##_c = FP_CLS_NORMAL; \ + } \ + break; \ + } \ + goto done_fma; \ + \ + case _FP_CLS_COMBINE (FP_CLS_NAN, FP_CLS_NAN): \ + _FP_CHOOSENAN (fs, wc, _FP_FMA_T, X, Y, '*'); \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_NAN, FP_CLS_NORMAL): \ + case _FP_CLS_COMBINE (FP_CLS_NAN, FP_CLS_INF): \ + case _FP_CLS_COMBINE (FP_CLS_NAN, FP_CLS_ZERO): \ + _FP_FMA_T##_s = X##_s; \ + \ + case _FP_CLS_COMBINE (FP_CLS_INF, FP_CLS_INF): \ + case _FP_CLS_COMBINE (FP_CLS_INF, FP_CLS_NORMAL): \ + case _FP_CLS_COMBINE (FP_CLS_ZERO, FP_CLS_NORMAL): \ + case _FP_CLS_COMBINE (FP_CLS_ZERO, FP_CLS_ZERO): \ + _FP_FRAC_COPY_##wc (_FP_FMA_T, X); \ + _FP_FMA_T##_c = X##_c; \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_NORMAL, FP_CLS_NAN): \ + case _FP_CLS_COMBINE (FP_CLS_INF, FP_CLS_NAN): \ + case _FP_CLS_COMBINE (FP_CLS_ZERO, FP_CLS_NAN): \ + _FP_FMA_T##_s = Y##_s; \ + \ + case _FP_CLS_COMBINE (FP_CLS_NORMAL, FP_CLS_INF): \ + case _FP_CLS_COMBINE (FP_CLS_NORMAL, FP_CLS_ZERO): \ + _FP_FRAC_COPY_##wc (_FP_FMA_T, Y); \ + _FP_FMA_T##_c = Y##_c; \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_INF, FP_CLS_ZERO): \ + case _FP_CLS_COMBINE (FP_CLS_ZERO, FP_CLS_INF): \ + _FP_FMA_T##_s = _FP_NANSIGN_##fs; \ + _FP_FMA_T##_c = FP_CLS_NAN; \ + _FP_FRAC_SET_##wc (_FP_FMA_T, _FP_NANFRAC_##fs); \ + FP_SET_EXCEPTION (FP_EX_INVALID | FP_EX_INVALID_IMZ_FMA); \ + break; \ + \ + default: \ + abort (); \ + } \ + \ + /* T = X * Y is zero, infinity or NaN. */ \ + switch (_FP_CLS_COMBINE (_FP_FMA_T##_c, Z##_c)) \ + { \ + case _FP_CLS_COMBINE (FP_CLS_NAN, FP_CLS_NAN): \ + _FP_CHOOSENAN (fs, wc, R, _FP_FMA_T, Z, '+'); \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_NAN, FP_CLS_NORMAL): \ + case _FP_CLS_COMBINE (FP_CLS_NAN, FP_CLS_INF): \ + case _FP_CLS_COMBINE (FP_CLS_NAN, FP_CLS_ZERO): \ + case _FP_CLS_COMBINE (FP_CLS_INF, FP_CLS_NORMAL): \ + case _FP_CLS_COMBINE (FP_CLS_INF, FP_CLS_ZERO): \ + R##_s = _FP_FMA_T##_s; \ + _FP_FRAC_COPY_##wc (R, _FP_FMA_T); \ + R##_c = _FP_FMA_T##_c; \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_INF, FP_CLS_NAN): \ + case _FP_CLS_COMBINE (FP_CLS_ZERO, FP_CLS_NAN): \ + case _FP_CLS_COMBINE (FP_CLS_ZERO, FP_CLS_NORMAL): \ + case _FP_CLS_COMBINE (FP_CLS_ZERO, FP_CLS_INF): \ + R##_s = Z##_s; \ + _FP_FRAC_COPY_##wc (R, Z); \ + R##_c = Z##_c; \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_INF, FP_CLS_INF): \ + if (_FP_FMA_T##_s == Z##_s) \ + { \ + R##_s = Z##_s; \ + _FP_FRAC_COPY_##wc (R, Z); \ + R##_c = Z##_c; \ + } \ + else \ + { \ + R##_s = _FP_NANSIGN_##fs; \ + R##_c = FP_CLS_NAN; \ + _FP_FRAC_SET_##wc (R, _FP_NANFRAC_##fs); \ + FP_SET_EXCEPTION (FP_EX_INVALID | FP_EX_INVALID_ISI); \ + } \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_ZERO, FP_CLS_ZERO): \ + if (_FP_FMA_T##_s == Z##_s) \ + R##_s = Z##_s; \ + else \ + R##_s = (FP_ROUNDMODE == FP_RND_MINF); \ + _FP_FRAC_COPY_##wc (R, Z); \ + R##_c = Z##_c; \ + break; \ + \ + default: \ + abort (); \ + } \ + done_fma: ; \ + } \ + while (0) + + +/* Main division routine. The input values should be cooked. */ + +#define _FP_DIV(fs, wc, R, X, Y) \ + do \ + { \ + R##_s = X##_s ^ Y##_s; \ + R##_e = X##_e - Y##_e; \ + switch (_FP_CLS_COMBINE (X##_c, Y##_c)) \ + { \ + case _FP_CLS_COMBINE (FP_CLS_NORMAL, FP_CLS_NORMAL): \ + R##_c = FP_CLS_NORMAL; \ + \ + _FP_DIV_MEAT_##fs (R, X, Y); \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_NAN, FP_CLS_NAN): \ + _FP_CHOOSENAN (fs, wc, R, X, Y, '/'); \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_NAN, FP_CLS_NORMAL): \ + case _FP_CLS_COMBINE (FP_CLS_NAN, FP_CLS_INF): \ + case _FP_CLS_COMBINE (FP_CLS_NAN, FP_CLS_ZERO): \ + R##_s = X##_s; \ + _FP_FRAC_COPY_##wc (R, X); \ + R##_c = X##_c; \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_NORMAL, FP_CLS_NAN): \ + case _FP_CLS_COMBINE (FP_CLS_INF, FP_CLS_NAN): \ + case _FP_CLS_COMBINE (FP_CLS_ZERO, FP_CLS_NAN): \ + R##_s = Y##_s; \ + _FP_FRAC_COPY_##wc (R, Y); \ + R##_c = Y##_c; \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_NORMAL, FP_CLS_INF): \ + case _FP_CLS_COMBINE (FP_CLS_ZERO, FP_CLS_INF): \ + case _FP_CLS_COMBINE (FP_CLS_ZERO, FP_CLS_NORMAL): \ + R##_c = FP_CLS_ZERO; \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_NORMAL, FP_CLS_ZERO): \ + FP_SET_EXCEPTION (FP_EX_DIVZERO); \ + case _FP_CLS_COMBINE (FP_CLS_INF, FP_CLS_ZERO): \ + case _FP_CLS_COMBINE (FP_CLS_INF, FP_CLS_NORMAL): \ + R##_c = FP_CLS_INF; \ + break; \ + \ + case _FP_CLS_COMBINE (FP_CLS_INF, FP_CLS_INF): \ + case _FP_CLS_COMBINE (FP_CLS_ZERO, FP_CLS_ZERO): \ + R##_s = _FP_NANSIGN_##fs; \ + R##_c = FP_CLS_NAN; \ + _FP_FRAC_SET_##wc (R, _FP_NANFRAC_##fs); \ + FP_SET_EXCEPTION (FP_EX_INVALID \ + | (X##_c == FP_CLS_INF \ + ? FP_EX_INVALID_IDI \ + : FP_EX_INVALID_ZDZ)); \ + break; \ + \ + default: \ + abort (); \ + } \ + } \ + while (0) + + +/* Helper for comparisons. EX is 0 not to raise exceptions, 1 to + raise exceptions for signaling NaN operands, 2 to raise exceptions + for all NaN operands. Conditionals are organized to allow the + compiler to optimize away code based on the value of EX. */ + +#define _FP_CMP_CHECK_NAN(fs, wc, X, Y, ex) \ + do \ + { \ + /* The arguments are unordered, which may or may not result in \ + an exception. */ \ + if (ex) \ + { \ + /* At least some cases of unordered arguments result in \ + exceptions; check whether this is one. */ \ + if (FP_EX_INVALID_SNAN || FP_EX_INVALID_VC) \ + { \ + /* Check separately for each case of "invalid" \ + exceptions. */ \ + if ((ex) == 2) \ + FP_SET_EXCEPTION (FP_EX_INVALID | FP_EX_INVALID_VC); \ + if (_FP_ISSIGNAN (fs, wc, X) \ + || _FP_ISSIGNAN (fs, wc, Y)) \ + FP_SET_EXCEPTION (FP_EX_INVALID | FP_EX_INVALID_SNAN); \ + } \ + /* Otherwise, we only need to check whether to raise an \ + exception, not which case or cases it is. */ \ + else if ((ex) == 2 \ + || _FP_ISSIGNAN (fs, wc, X) \ + || _FP_ISSIGNAN (fs, wc, Y)) \ + FP_SET_EXCEPTION (FP_EX_INVALID); \ + } \ + } \ + while (0) + +/* Main differential comparison routine. The inputs should be raw not + cooked. The return is -1, 0, 1 for normal values, UN + otherwise. */ + +#define _FP_CMP(fs, wc, ret, X, Y, un, ex) \ + do \ + { \ + /* NANs are unordered. */ \ + if ((X##_e == _FP_EXPMAX_##fs && !_FP_FRAC_ZEROP_##wc (X)) \ + || (Y##_e == _FP_EXPMAX_##fs && !_FP_FRAC_ZEROP_##wc (Y))) \ + { \ + (ret) = (un); \ + _FP_CMP_CHECK_NAN (fs, wc, X, Y, (ex)); \ + } \ + else \ + { \ + int _FP_CMP_is_zero_x; \ + int _FP_CMP_is_zero_y; \ + \ + _FP_CHECK_FLUSH_ZERO (fs, wc, X); \ + _FP_CHECK_FLUSH_ZERO (fs, wc, Y); \ + \ + _FP_CMP_is_zero_x \ + = (!X##_e && _FP_FRAC_ZEROP_##wc (X)) ? 1 : 0; \ + _FP_CMP_is_zero_y \ + = (!Y##_e && _FP_FRAC_ZEROP_##wc (Y)) ? 1 : 0; \ + \ + if (_FP_CMP_is_zero_x && _FP_CMP_is_zero_y) \ + (ret) = 0; \ + else if (_FP_CMP_is_zero_x) \ + (ret) = Y##_s ? 1 : -1; \ + else if (_FP_CMP_is_zero_y) \ + (ret) = X##_s ? -1 : 1; \ + else if (X##_s != Y##_s) \ + (ret) = X##_s ? -1 : 1; \ + else if (X##_e > Y##_e) \ + (ret) = X##_s ? -1 : 1; \ + else if (X##_e < Y##_e) \ + (ret) = X##_s ? 1 : -1; \ + else if (_FP_FRAC_GT_##wc (X, Y)) \ + (ret) = X##_s ? -1 : 1; \ + else if (_FP_FRAC_GT_##wc (Y, X)) \ + (ret) = X##_s ? 1 : -1; \ + else \ + (ret) = 0; \ + } \ + } \ + while (0) + + +/* Simplification for strict equality. */ + +#define _FP_CMP_EQ(fs, wc, ret, X, Y, ex) \ + do \ + { \ + /* NANs are unordered. */ \ + if ((X##_e == _FP_EXPMAX_##fs && !_FP_FRAC_ZEROP_##wc (X)) \ + || (Y##_e == _FP_EXPMAX_##fs && !_FP_FRAC_ZEROP_##wc (Y))) \ + { \ + (ret) = 1; \ + _FP_CMP_CHECK_NAN (fs, wc, X, Y, (ex)); \ + } \ + else \ + { \ + _FP_CHECK_FLUSH_ZERO (fs, wc, X); \ + _FP_CHECK_FLUSH_ZERO (fs, wc, Y); \ + \ + (ret) = !(X##_e == Y##_e \ + && _FP_FRAC_EQ_##wc (X, Y) \ + && (X##_s == Y##_s \ + || (!X##_e && _FP_FRAC_ZEROP_##wc (X)))); \ + } \ + } \ + while (0) + +/* Version to test unordered. */ + +#define _FP_CMP_UNORD(fs, wc, ret, X, Y, ex) \ + do \ + { \ + (ret) = ((X##_e == _FP_EXPMAX_##fs && !_FP_FRAC_ZEROP_##wc (X)) \ + || (Y##_e == _FP_EXPMAX_##fs && !_FP_FRAC_ZEROP_##wc (Y))); \ + if (ret) \ + _FP_CMP_CHECK_NAN (fs, wc, X, Y, (ex)); \ + } \ + while (0) + +/* Main square root routine. The input value should be cooked. */ + +#define _FP_SQRT(fs, wc, R, X) \ + do \ + { \ + _FP_FRAC_DECL_##wc (_FP_SQRT_T); \ + _FP_FRAC_DECL_##wc (_FP_SQRT_S); \ + _FP_W_TYPE _FP_SQRT_q; \ + switch (X##_c) \ + { \ + case FP_CLS_NAN: \ + _FP_FRAC_COPY_##wc (R, X); \ + R##_s = X##_s; \ + R##_c = FP_CLS_NAN; \ + break; \ + case FP_CLS_INF: \ + if (X##_s) \ + { \ + R##_s = _FP_NANSIGN_##fs; \ + R##_c = FP_CLS_NAN; /* NAN */ \ + _FP_FRAC_SET_##wc (R, _FP_NANFRAC_##fs); \ + FP_SET_EXCEPTION (FP_EX_INVALID | FP_EX_INVALID_SQRT); \ + } \ + else \ + { \ + R##_s = 0; \ + R##_c = FP_CLS_INF; /* sqrt(+inf) = +inf */ \ + } \ + break; \ + case FP_CLS_ZERO: \ + R##_s = X##_s; \ + R##_c = FP_CLS_ZERO; /* sqrt(+-0) = +-0 */ \ + break; \ + case FP_CLS_NORMAL: \ + R##_s = 0; \ + if (X##_s) \ + { \ + R##_c = FP_CLS_NAN; /* NAN */ \ + R##_s = _FP_NANSIGN_##fs; \ + _FP_FRAC_SET_##wc (R, _FP_NANFRAC_##fs); \ + FP_SET_EXCEPTION (FP_EX_INVALID | FP_EX_INVALID_SQRT); \ + break; \ + } \ + R##_c = FP_CLS_NORMAL; \ + if (X##_e & 1) \ + _FP_FRAC_SLL_##wc (X, 1); \ + R##_e = X##_e >> 1; \ + _FP_FRAC_SET_##wc (_FP_SQRT_S, _FP_ZEROFRAC_##wc); \ + _FP_FRAC_SET_##wc (R, _FP_ZEROFRAC_##wc); \ + _FP_SQRT_q = _FP_OVERFLOW_##fs >> 1; \ + _FP_SQRT_MEAT_##wc (R, _FP_SQRT_S, _FP_SQRT_T, X, \ + _FP_SQRT_q); \ + } \ + } \ + while (0) + +/* Convert from FP to integer. Input is raw. */ + +/* RSIGNED can have following values: + 0: the number is required to be 0..(2^rsize)-1, if not, NV is set plus + the result is either 0 or (2^rsize)-1 depending on the sign in such + case. + 1: the number is required to be -(2^(rsize-1))..(2^(rsize-1))-1, if not, + NV is set plus the result is either -(2^(rsize-1)) or (2^(rsize-1))-1 + depending on the sign in such case. + 2: the number is required to be -(2^(rsize-1))..(2^(rsize-1))-1, if not, + NV is set plus the result is reduced modulo 2^rsize. + -1: the number is required to be -(2^(rsize-1))..(2^rsize)-1, if not, NV is + set plus the result is either -(2^(rsize-1)) or (2^(rsize-1))-1 + depending on the sign in such case. */ +#define _FP_TO_INT(fs, wc, r, X, rsize, rsigned) \ + do \ + { \ + if (X##_e < _FP_EXPBIAS_##fs) \ + { \ + (r) = 0; \ + if (X##_e == 0) \ + { \ + if (!_FP_FRAC_ZEROP_##wc (X)) \ + { \ + if (!FP_DENORM_ZERO) \ + FP_SET_EXCEPTION (FP_EX_INEXACT); \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + } \ + } \ + else \ + FP_SET_EXCEPTION (FP_EX_INEXACT); \ + } \ + else if ((rsigned) == 2 \ + && (X##_e \ + >= ((_FP_EXPMAX_##fs \ + < _FP_EXPBIAS_##fs + _FP_FRACBITS_##fs + (rsize) - 1) \ + ? _FP_EXPMAX_##fs \ + : _FP_EXPBIAS_##fs + _FP_FRACBITS_##fs + (rsize) - 1))) \ + { \ + /* Overflow resulting in 0. */ \ + (r) = 0; \ + FP_SET_EXCEPTION (FP_EX_INVALID \ + | FP_EX_INVALID_CVI \ + | ((FP_EX_INVALID_SNAN \ + && _FP_ISSIGNAN (fs, wc, X)) \ + ? FP_EX_INVALID_SNAN \ + : 0)); \ + } \ + else if ((rsigned) != 2 \ + && (X##_e >= (_FP_EXPMAX_##fs < _FP_EXPBIAS_##fs + (rsize) \ + ? _FP_EXPMAX_##fs \ + : (_FP_EXPBIAS_##fs + (rsize) \ + - ((rsigned) > 0 || X##_s))) \ + || (!(rsigned) && X##_s))) \ + { \ + /* Overflow or converting to the most negative integer. */ \ + if (rsigned) \ + { \ + (r) = 1; \ + (r) <<= (rsize) - 1; \ + (r) -= 1 - X##_s; \ + } \ + else \ + { \ + (r) = 0; \ + if (!X##_s) \ + (r) = ~(r); \ + } \ + \ + if (_FP_EXPBIAS_##fs + (rsize) - 1 < _FP_EXPMAX_##fs \ + && (rsigned) \ + && X##_s \ + && X##_e == _FP_EXPBIAS_##fs + (rsize) - 1) \ + { \ + /* Possibly converting to most negative integer; check the \ + mantissa. */ \ + int _FP_TO_INT_inexact = 0; \ + (void) ((_FP_FRACBITS_##fs > (rsize)) \ + ? ({ \ + _FP_FRAC_SRST_##wc (X, _FP_TO_INT_inexact, \ + _FP_FRACBITS_##fs - (rsize), \ + _FP_FRACBITS_##fs); \ + 0; \ + }) \ + : 0); \ + if (!_FP_FRAC_ZEROP_##wc (X)) \ + FP_SET_EXCEPTION (FP_EX_INVALID | FP_EX_INVALID_CVI); \ + else if (_FP_TO_INT_inexact) \ + FP_SET_EXCEPTION (FP_EX_INEXACT); \ + } \ + else \ + FP_SET_EXCEPTION (FP_EX_INVALID \ + | FP_EX_INVALID_CVI \ + | ((FP_EX_INVALID_SNAN \ + && _FP_ISSIGNAN (fs, wc, X)) \ + ? FP_EX_INVALID_SNAN \ + : 0)); \ + } \ + else \ + { \ + int _FP_TO_INT_inexact = 0; \ + _FP_FRAC_HIGH_RAW_##fs (X) |= _FP_IMPLBIT_##fs; \ + if (X##_e >= _FP_EXPBIAS_##fs + _FP_FRACBITS_##fs - 1) \ + { \ + _FP_FRAC_ASSEMBLE_##wc ((r), X, (rsize)); \ + (r) <<= X##_e - _FP_EXPBIAS_##fs - _FP_FRACBITS_##fs + 1; \ + } \ + else \ + { \ + _FP_FRAC_SRST_##wc (X, _FP_TO_INT_inexact, \ + (_FP_FRACBITS_##fs + _FP_EXPBIAS_##fs - 1 \ + - X##_e), \ + _FP_FRACBITS_##fs); \ + _FP_FRAC_ASSEMBLE_##wc ((r), X, (rsize)); \ + } \ + if ((rsigned) && X##_s) \ + (r) = -(r); \ + if ((rsigned) == 2 && X##_e >= _FP_EXPBIAS_##fs + (rsize) - 1) \ + { \ + /* Overflow or converting to the most negative integer. */ \ + if (X##_e > _FP_EXPBIAS_##fs + (rsize) - 1 \ + || !X##_s \ + || (r) != (((typeof (r)) 1) << ((rsize) - 1))) \ + { \ + _FP_TO_INT_inexact = 0; \ + FP_SET_EXCEPTION (FP_EX_INVALID | FP_EX_INVALID_CVI); \ + } \ + } \ + if (_FP_TO_INT_inexact) \ + FP_SET_EXCEPTION (FP_EX_INEXACT); \ + } \ + } \ + while (0) + +/* Convert integer to fp. Output is raw. RTYPE is unsigned even if + input is signed. */ +#define _FP_FROM_INT(fs, wc, X, r, rsize, rtype) \ + do \ + { \ + if (r) \ + { \ + rtype _FP_FROM_INT_ur; \ + \ + if ((X##_s = ((r) < 0))) \ + (r) = -(rtype) (r); \ + \ + _FP_FROM_INT_ur = (rtype) (r); \ + (void) (((rsize) <= _FP_W_TYPE_SIZE) \ + ? ({ \ + int _FP_FROM_INT_lz; \ + __FP_CLZ (_FP_FROM_INT_lz, \ + (_FP_W_TYPE) _FP_FROM_INT_ur); \ + X##_e = (_FP_EXPBIAS_##fs + _FP_W_TYPE_SIZE - 1 \ + - _FP_FROM_INT_lz); \ + }) \ + : (((rsize) <= 2 * _FP_W_TYPE_SIZE) \ + ? ({ \ + int _FP_FROM_INT_lz; \ + __FP_CLZ_2 (_FP_FROM_INT_lz, \ + (_FP_W_TYPE) (_FP_FROM_INT_ur \ + >> _FP_W_TYPE_SIZE), \ + (_FP_W_TYPE) _FP_FROM_INT_ur); \ + X##_e = (_FP_EXPBIAS_##fs + 2 * _FP_W_TYPE_SIZE - 1 \ + - _FP_FROM_INT_lz); \ + }) \ + : (abort (), 0))); \ + \ + if ((rsize) - 1 + _FP_EXPBIAS_##fs >= _FP_EXPMAX_##fs \ + && X##_e >= _FP_EXPMAX_##fs) \ + { \ + /* Exponent too big; overflow to infinity. (May also \ + happen after rounding below.) */ \ + _FP_OVERFLOW_SEMIRAW (fs, wc, X); \ + goto pack_semiraw; \ + } \ + \ + if ((rsize) <= _FP_FRACBITS_##fs \ + || X##_e < _FP_EXPBIAS_##fs + _FP_FRACBITS_##fs) \ + { \ + /* Exactly representable; shift left. */ \ + _FP_FRAC_DISASSEMBLE_##wc (X, _FP_FROM_INT_ur, (rsize)); \ + if (_FP_EXPBIAS_##fs + _FP_FRACBITS_##fs - 1 - X##_e > 0) \ + _FP_FRAC_SLL_##wc (X, (_FP_EXPBIAS_##fs \ + + _FP_FRACBITS_##fs - 1 - X##_e)); \ + } \ + else \ + { \ + /* More bits in integer than in floating type; need to \ + round. */ \ + if (_FP_EXPBIAS_##fs + _FP_WFRACBITS_##fs - 1 < X##_e) \ + _FP_FROM_INT_ur \ + = ((_FP_FROM_INT_ur >> (X##_e - _FP_EXPBIAS_##fs \ + - _FP_WFRACBITS_##fs + 1)) \ + | ((_FP_FROM_INT_ur \ + << ((rsize) - (X##_e - _FP_EXPBIAS_##fs \ + - _FP_WFRACBITS_##fs + 1))) \ + != 0)); \ + _FP_FRAC_DISASSEMBLE_##wc (X, _FP_FROM_INT_ur, (rsize)); \ + if ((_FP_EXPBIAS_##fs + _FP_WFRACBITS_##fs - 1 - X##_e) > 0) \ + _FP_FRAC_SLL_##wc (X, (_FP_EXPBIAS_##fs \ + + _FP_WFRACBITS_##fs - 1 - X##_e)); \ + _FP_FRAC_HIGH_##fs (X) &= ~(_FP_W_TYPE) _FP_IMPLBIT_SH_##fs; \ + pack_semiraw: \ + _FP_PACK_SEMIRAW (fs, wc, X); \ + } \ + } \ + else \ + { \ + X##_s = 0; \ + X##_e = 0; \ + _FP_FRAC_SET_##wc (X, _FP_ZEROFRAC_##wc); \ + } \ + } \ + while (0) + + +/* Extend from a narrower floating-point format to a wider one. Input + and output are raw. */ +#define FP_EXTEND(dfs, sfs, dwc, swc, D, S) \ + do \ + { \ + if (_FP_FRACBITS_##dfs < _FP_FRACBITS_##sfs \ + || (_FP_EXPMAX_##dfs - _FP_EXPBIAS_##dfs \ + < _FP_EXPMAX_##sfs - _FP_EXPBIAS_##sfs) \ + || (_FP_EXPBIAS_##dfs < _FP_EXPBIAS_##sfs + _FP_FRACBITS_##sfs - 1 \ + && _FP_EXPBIAS_##dfs != _FP_EXPBIAS_##sfs)) \ + abort (); \ + D##_s = S##_s; \ + _FP_FRAC_COPY_##dwc##_##swc (D, S); \ + if (_FP_EXP_NORMAL (sfs, swc, S)) \ + { \ + D##_e = S##_e + _FP_EXPBIAS_##dfs - _FP_EXPBIAS_##sfs; \ + _FP_FRAC_SLL_##dwc (D, (_FP_FRACBITS_##dfs - _FP_FRACBITS_##sfs)); \ + } \ + else \ + { \ + if (S##_e == 0) \ + { \ + _FP_CHECK_FLUSH_ZERO (sfs, swc, S); \ + if (_FP_FRAC_ZEROP_##swc (S)) \ + D##_e = 0; \ + else if (_FP_EXPBIAS_##dfs \ + < _FP_EXPBIAS_##sfs + _FP_FRACBITS_##sfs - 1) \ + { \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + _FP_FRAC_SLL_##dwc (D, (_FP_FRACBITS_##dfs \ + - _FP_FRACBITS_##sfs)); \ + D##_e = 0; \ + if (FP_TRAPPING_EXCEPTIONS & FP_EX_UNDERFLOW) \ + FP_SET_EXCEPTION (FP_EX_UNDERFLOW); \ + } \ + else \ + { \ + int FP_EXTEND_lz; \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + _FP_FRAC_CLZ_##swc (FP_EXTEND_lz, S); \ + _FP_FRAC_SLL_##dwc (D, \ + FP_EXTEND_lz + _FP_FRACBITS_##dfs \ + - _FP_FRACTBITS_##sfs); \ + D##_e = (_FP_EXPBIAS_##dfs - _FP_EXPBIAS_##sfs + 1 \ + + _FP_FRACXBITS_##sfs - FP_EXTEND_lz); \ + } \ + } \ + else \ + { \ + D##_e = _FP_EXPMAX_##dfs; \ + if (!_FP_FRAC_ZEROP_##swc (S)) \ + { \ + if (_FP_FRAC_SNANP (sfs, S)) \ + FP_SET_EXCEPTION (FP_EX_INVALID \ + | FP_EX_INVALID_SNAN); \ + _FP_FRAC_SLL_##dwc (D, (_FP_FRACBITS_##dfs \ + - _FP_FRACBITS_##sfs)); \ + _FP_SETQNAN (dfs, dwc, D); \ + } \ + } \ + } \ + } \ + while (0) + +/* Truncate from a wider floating-point format to a narrower one. + Input and output are semi-raw. */ +#define FP_TRUNC(dfs, sfs, dwc, swc, D, S) \ + do \ + { \ + if (_FP_FRACBITS_##sfs < _FP_FRACBITS_##dfs \ + || (_FP_EXPBIAS_##sfs < _FP_EXPBIAS_##dfs + _FP_FRACBITS_##dfs - 1 \ + && _FP_EXPBIAS_##sfs != _FP_EXPBIAS_##dfs)) \ + abort (); \ + D##_s = S##_s; \ + if (_FP_EXP_NORMAL (sfs, swc, S)) \ + { \ + D##_e = S##_e + _FP_EXPBIAS_##dfs - _FP_EXPBIAS_##sfs; \ + if (D##_e >= _FP_EXPMAX_##dfs) \ + _FP_OVERFLOW_SEMIRAW (dfs, dwc, D); \ + else \ + { \ + if (D##_e <= 0) \ + { \ + if (D##_e < 1 - _FP_FRACBITS_##dfs) \ + { \ + _FP_FRAC_SET_##swc (S, _FP_ZEROFRAC_##swc); \ + _FP_FRAC_LOW_##swc (S) |= 1; \ + } \ + else \ + { \ + _FP_FRAC_HIGH_##sfs (S) |= _FP_IMPLBIT_SH_##sfs; \ + _FP_FRAC_SRS_##swc (S, (_FP_WFRACBITS_##sfs \ + - _FP_WFRACBITS_##dfs \ + + 1 - D##_e), \ + _FP_WFRACBITS_##sfs); \ + } \ + D##_e = 0; \ + } \ + else \ + _FP_FRAC_SRS_##swc (S, (_FP_WFRACBITS_##sfs \ + - _FP_WFRACBITS_##dfs), \ + _FP_WFRACBITS_##sfs); \ + _FP_FRAC_COPY_##dwc##_##swc (D, S); \ + } \ + } \ + else \ + { \ + if (S##_e == 0) \ + { \ + _FP_CHECK_FLUSH_ZERO (sfs, swc, S); \ + D##_e = 0; \ + if (_FP_FRAC_ZEROP_##swc (S)) \ + _FP_FRAC_SET_##dwc (D, _FP_ZEROFRAC_##dwc); \ + else \ + { \ + FP_SET_EXCEPTION (FP_EX_DENORM); \ + if (_FP_EXPBIAS_##sfs \ + < _FP_EXPBIAS_##dfs + _FP_FRACBITS_##dfs - 1) \ + { \ + _FP_FRAC_SRS_##swc (S, (_FP_WFRACBITS_##sfs \ + - _FP_WFRACBITS_##dfs), \ + _FP_WFRACBITS_##sfs); \ + _FP_FRAC_COPY_##dwc##_##swc (D, S); \ + } \ + else \ + { \ + _FP_FRAC_SET_##dwc (D, _FP_ZEROFRAC_##dwc); \ + _FP_FRAC_LOW_##dwc (D) |= 1; \ + } \ + } \ + } \ + else \ + { \ + D##_e = _FP_EXPMAX_##dfs; \ + if (_FP_FRAC_ZEROP_##swc (S)) \ + _FP_FRAC_SET_##dwc (D, _FP_ZEROFRAC_##dwc); \ + else \ + { \ + _FP_CHECK_SIGNAN_SEMIRAW (sfs, swc, S); \ + _FP_FRAC_SRL_##swc (S, (_FP_WFRACBITS_##sfs \ + - _FP_WFRACBITS_##dfs)); \ + _FP_FRAC_COPY_##dwc##_##swc (D, S); \ + /* Semi-raw NaN must have all workbits cleared. */ \ + _FP_FRAC_LOW_##dwc (D) \ + &= ~(_FP_W_TYPE) ((1 << _FP_WORKBITS) - 1); \ + _FP_SETQNAN_SEMIRAW (dfs, dwc, D); \ + } \ + } \ + } \ + } \ + while (0) + +/* Helper primitives. */ + +/* Count leading zeros in a word. */ + +#ifndef __FP_CLZ +/* GCC 3.4 and later provide the builtins for us. */ +# define __FP_CLZ(r, x) \ + do \ + { \ + if (sizeof (_FP_W_TYPE) == sizeof (unsigned int)) \ + (r) = __builtin_clz (x); \ + else if (sizeof (_FP_W_TYPE) == sizeof (unsigned long)) \ + (r) = __builtin_clzl (x); \ + else if (sizeof (_FP_W_TYPE) == sizeof (unsigned long long)) \ + (r) = __builtin_clzll (x); \ + else \ + abort (); \ + } \ + while (0) +#endif /* ndef __FP_CLZ */ + +#define _FP_DIV_HELP_imm(q, r, n, d) \ + do \ + { \ + (q) = (n) / (d), (r) = (n) % (d); \ + } \ + while (0) + + +/* A restoring bit-by-bit division primitive. */ + +#define _FP_DIV_MEAT_N_loop(fs, wc, R, X, Y) \ + do \ + { \ + int _FP_DIV_MEAT_N_loop_count = _FP_WFRACBITS_##fs; \ + _FP_FRAC_DECL_##wc (_FP_DIV_MEAT_N_loop_u); \ + _FP_FRAC_DECL_##wc (_FP_DIV_MEAT_N_loop_v); \ + _FP_FRAC_COPY_##wc (_FP_DIV_MEAT_N_loop_u, X); \ + _FP_FRAC_COPY_##wc (_FP_DIV_MEAT_N_loop_v, Y); \ + _FP_FRAC_SET_##wc (R, _FP_ZEROFRAC_##wc); \ + /* Normalize _FP_DIV_MEAT_N_LOOP_U and _FP_DIV_MEAT_N_LOOP_V. */ \ + _FP_FRAC_SLL_##wc (_FP_DIV_MEAT_N_loop_u, _FP_WFRACXBITS_##fs); \ + _FP_FRAC_SLL_##wc (_FP_DIV_MEAT_N_loop_v, _FP_WFRACXBITS_##fs); \ + /* First round. Since the operands are normalized, either the \ + first or second bit will be set in the fraction. Produce a \ + normalized result by checking which and adjusting the loop \ + count and exponent accordingly. */ \ + if (_FP_FRAC_GE_1 (_FP_DIV_MEAT_N_loop_u, _FP_DIV_MEAT_N_loop_v)) \ + { \ + _FP_FRAC_SUB_##wc (_FP_DIV_MEAT_N_loop_u, \ + _FP_DIV_MEAT_N_loop_u, \ + _FP_DIV_MEAT_N_loop_v); \ + _FP_FRAC_LOW_##wc (R) |= 1; \ + _FP_DIV_MEAT_N_loop_count--; \ + } \ + else \ + R##_e--; \ + /* Subsequent rounds. */ \ + do \ + { \ + int _FP_DIV_MEAT_N_loop_msb \ + = (_FP_WS_TYPE) _FP_FRAC_HIGH_##wc (_FP_DIV_MEAT_N_loop_u) < 0; \ + _FP_FRAC_SLL_##wc (_FP_DIV_MEAT_N_loop_u, 1); \ + _FP_FRAC_SLL_##wc (R, 1); \ + if (_FP_DIV_MEAT_N_loop_msb \ + || _FP_FRAC_GE_1 (_FP_DIV_MEAT_N_loop_u, \ + _FP_DIV_MEAT_N_loop_v)) \ + { \ + _FP_FRAC_SUB_##wc (_FP_DIV_MEAT_N_loop_u, \ + _FP_DIV_MEAT_N_loop_u, \ + _FP_DIV_MEAT_N_loop_v); \ + _FP_FRAC_LOW_##wc (R) |= 1; \ + } \ + } \ + while (--_FP_DIV_MEAT_N_loop_count > 0); \ + /* If there's anything left in _FP_DIV_MEAT_N_LOOP_U, the result \ + is inexact. */ \ + _FP_FRAC_LOW_##wc (R) \ + |= !_FP_FRAC_ZEROP_##wc (_FP_DIV_MEAT_N_loop_u); \ + } \ + while (0) + +#define _FP_DIV_MEAT_1_loop(fs, R, X, Y) _FP_DIV_MEAT_N_loop (fs, 1, R, X, Y) +#define _FP_DIV_MEAT_2_loop(fs, R, X, Y) _FP_DIV_MEAT_N_loop (fs, 2, R, X, Y) +#define _FP_DIV_MEAT_4_loop(fs, R, X, Y) _FP_DIV_MEAT_N_loop (fs, 4, R, X, Y) diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/quad.h b/contrib/toolchain/gcc/5x/libgcc/soft-fp/quad.h new file mode 100644 index 0000000000..b8cd3108a3 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/quad.h @@ -0,0 +1,321 @@ +/* Software floating-point emulation. + Definitions for IEEE Quad Precision. + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com), + Jakub Jelinek (jj@ultra.linux.cz), + David S. Miller (davem@redhat.com) and + Peter Maydell (pmaydell@chiark.greenend.org.uk). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#if _FP_W_TYPE_SIZE < 32 +# error "Here's a nickel, kid. Go buy yourself a real computer." +#endif + +#if _FP_W_TYPE_SIZE < 64 +# define _FP_FRACTBITS_Q (4*_FP_W_TYPE_SIZE) +# define _FP_FRACTBITS_DW_Q (8*_FP_W_TYPE_SIZE) +#else +# define _FP_FRACTBITS_Q (2*_FP_W_TYPE_SIZE) +# define _FP_FRACTBITS_DW_Q (4*_FP_W_TYPE_SIZE) +#endif + +#define _FP_FRACBITS_Q 113 +#define _FP_FRACXBITS_Q (_FP_FRACTBITS_Q - _FP_FRACBITS_Q) +#define _FP_WFRACBITS_Q (_FP_WORKBITS + _FP_FRACBITS_Q) +#define _FP_WFRACXBITS_Q (_FP_FRACTBITS_Q - _FP_WFRACBITS_Q) +#define _FP_EXPBITS_Q 15 +#define _FP_EXPBIAS_Q 16383 +#define _FP_EXPMAX_Q 32767 + +#define _FP_QNANBIT_Q \ + ((_FP_W_TYPE) 1 << (_FP_FRACBITS_Q-2) % _FP_W_TYPE_SIZE) +#define _FP_QNANBIT_SH_Q \ + ((_FP_W_TYPE) 1 << (_FP_FRACBITS_Q-2+_FP_WORKBITS) % _FP_W_TYPE_SIZE) +#define _FP_IMPLBIT_Q \ + ((_FP_W_TYPE) 1 << (_FP_FRACBITS_Q-1) % _FP_W_TYPE_SIZE) +#define _FP_IMPLBIT_SH_Q \ + ((_FP_W_TYPE) 1 << (_FP_FRACBITS_Q-1+_FP_WORKBITS) % _FP_W_TYPE_SIZE) +#define _FP_OVERFLOW_Q \ + ((_FP_W_TYPE) 1 << (_FP_WFRACBITS_Q % _FP_W_TYPE_SIZE)) + +#define _FP_WFRACBITS_DW_Q (2 * _FP_WFRACBITS_Q) +#define _FP_WFRACXBITS_DW_Q (_FP_FRACTBITS_DW_Q - _FP_WFRACBITS_DW_Q) +#define _FP_HIGHBIT_DW_Q \ + ((_FP_W_TYPE) 1 << (_FP_WFRACBITS_DW_Q - 1) % _FP_W_TYPE_SIZE) + +typedef float TFtype __attribute__ ((mode (TF))); + +#if _FP_W_TYPE_SIZE < 64 + +union _FP_UNION_Q +{ + TFtype flt; + struct _FP_STRUCT_LAYOUT + { +# if __BYTE_ORDER == __BIG_ENDIAN + unsigned sign : 1; + unsigned exp : _FP_EXPBITS_Q; + unsigned long frac3 : _FP_FRACBITS_Q - (_FP_IMPLBIT_Q != 0)-(_FP_W_TYPE_SIZE * 3); + unsigned long frac2 : _FP_W_TYPE_SIZE; + unsigned long frac1 : _FP_W_TYPE_SIZE; + unsigned long frac0 : _FP_W_TYPE_SIZE; +# else + unsigned long frac0 : _FP_W_TYPE_SIZE; + unsigned long frac1 : _FP_W_TYPE_SIZE; + unsigned long frac2 : _FP_W_TYPE_SIZE; + unsigned long frac3 : _FP_FRACBITS_Q - (_FP_IMPLBIT_Q != 0)-(_FP_W_TYPE_SIZE * 3); + unsigned exp : _FP_EXPBITS_Q; + unsigned sign : 1; +# endif /* not bigendian */ + } bits __attribute__ ((packed)); +}; + + +# define FP_DECL_Q(X) _FP_DECL (4, X) +# define FP_UNPACK_RAW_Q(X, val) _FP_UNPACK_RAW_4 (Q, X, (val)) +# define FP_UNPACK_RAW_QP(X, val) _FP_UNPACK_RAW_4_P (Q, X, (val)) +# define FP_PACK_RAW_Q(val, X) _FP_PACK_RAW_4 (Q, (val), X) +# define FP_PACK_RAW_QP(val, X) \ + do \ + { \ + if (!FP_INHIBIT_RESULTS) \ + _FP_PACK_RAW_4_P (Q, (val), X); \ + } \ + while (0) + +# define FP_UNPACK_Q(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_4 (Q, X, (val)); \ + _FP_UNPACK_CANONICAL (Q, 4, X); \ + } \ + while (0) + +# define FP_UNPACK_QP(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_4_P (Q, X, (val)); \ + _FP_UNPACK_CANONICAL (Q, 4, X); \ + } \ + while (0) + +# define FP_UNPACK_SEMIRAW_Q(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_4 (Q, X, (val)); \ + _FP_UNPACK_SEMIRAW (Q, 4, X); \ + } \ + while (0) + +# define FP_UNPACK_SEMIRAW_QP(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_4_P (Q, X, (val)); \ + _FP_UNPACK_SEMIRAW (Q, 4, X); \ + } \ + while (0) + +# define FP_PACK_Q(val, X) \ + do \ + { \ + _FP_PACK_CANONICAL (Q, 4, X); \ + _FP_PACK_RAW_4 (Q, (val), X); \ + } \ + while (0) + +# define FP_PACK_QP(val, X) \ + do \ + { \ + _FP_PACK_CANONICAL (Q, 4, X); \ + if (!FP_INHIBIT_RESULTS) \ + _FP_PACK_RAW_4_P (Q, (val), X); \ + } \ + while (0) + +# define FP_PACK_SEMIRAW_Q(val, X) \ + do \ + { \ + _FP_PACK_SEMIRAW (Q, 4, X); \ + _FP_PACK_RAW_4 (Q, (val), X); \ + } \ + while (0) + +# define FP_PACK_SEMIRAW_QP(val, X) \ + do \ + { \ + _FP_PACK_SEMIRAW (Q, 4, X); \ + if (!FP_INHIBIT_RESULTS) \ + _FP_PACK_RAW_4_P (Q, (val), X); \ + } \ + while (0) + +# define FP_ISSIGNAN_Q(X) _FP_ISSIGNAN (Q, 4, X) +# define FP_NEG_Q(R, X) _FP_NEG (Q, 4, R, X) +# define FP_ADD_Q(R, X, Y) _FP_ADD (Q, 4, R, X, Y) +# define FP_SUB_Q(R, X, Y) _FP_SUB (Q, 4, R, X, Y) +# define FP_MUL_Q(R, X, Y) _FP_MUL (Q, 4, R, X, Y) +# define FP_DIV_Q(R, X, Y) _FP_DIV (Q, 4, R, X, Y) +# define FP_SQRT_Q(R, X) _FP_SQRT (Q, 4, R, X) +# define _FP_SQRT_MEAT_Q(R, S, T, X, Q) _FP_SQRT_MEAT_4 (R, S, T, X, (Q)) +# define FP_FMA_Q(R, X, Y, Z) _FP_FMA (Q, 4, 8, R, X, Y, Z) + +# define FP_CMP_Q(r, X, Y, un, ex) _FP_CMP (Q, 4, (r), X, Y, (un), (ex)) +# define FP_CMP_EQ_Q(r, X, Y, ex) _FP_CMP_EQ (Q, 4, (r), X, Y, (ex)) +# define FP_CMP_UNORD_Q(r, X, Y, ex) _FP_CMP_UNORD (Q, 4, (r), X, Y, (ex)) + +# define FP_TO_INT_Q(r, X, rsz, rsg) _FP_TO_INT (Q, 4, (r), X, (rsz), (rsg)) +# define FP_FROM_INT_Q(X, r, rs, rt) _FP_FROM_INT (Q, 4, X, (r), (rs), rt) + +# define _FP_FRAC_HIGH_Q(X) _FP_FRAC_HIGH_4 (X) +# define _FP_FRAC_HIGH_RAW_Q(X) _FP_FRAC_HIGH_4 (X) + +# define _FP_FRAC_HIGH_DW_Q(X) _FP_FRAC_HIGH_8 (X) + +#else /* not _FP_W_TYPE_SIZE < 64 */ +union _FP_UNION_Q +{ + TFtype flt /* __attribute__ ((mode (TF))) */ ; + struct _FP_STRUCT_LAYOUT + { + _FP_W_TYPE a, b; + } longs; + struct _FP_STRUCT_LAYOUT + { +# if __BYTE_ORDER == __BIG_ENDIAN + unsigned sign : 1; + unsigned exp : _FP_EXPBITS_Q; + _FP_W_TYPE frac1 : _FP_FRACBITS_Q - (_FP_IMPLBIT_Q != 0) - _FP_W_TYPE_SIZE; + _FP_W_TYPE frac0 : _FP_W_TYPE_SIZE; +# else + _FP_W_TYPE frac0 : _FP_W_TYPE_SIZE; + _FP_W_TYPE frac1 : _FP_FRACBITS_Q - (_FP_IMPLBIT_Q != 0) - _FP_W_TYPE_SIZE; + unsigned exp : _FP_EXPBITS_Q; + unsigned sign : 1; +# endif + } bits; +}; + +# define FP_DECL_Q(X) _FP_DECL (2, X) +# define FP_UNPACK_RAW_Q(X, val) _FP_UNPACK_RAW_2 (Q, X, (val)) +# define FP_UNPACK_RAW_QP(X, val) _FP_UNPACK_RAW_2_P (Q, X, (val)) +# define FP_PACK_RAW_Q(val, X) _FP_PACK_RAW_2 (Q, (val), X) +# define FP_PACK_RAW_QP(val, X) \ + do \ + { \ + if (!FP_INHIBIT_RESULTS) \ + _FP_PACK_RAW_2_P (Q, (val), X); \ + } \ + while (0) + +# define FP_UNPACK_Q(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_2 (Q, X, (val)); \ + _FP_UNPACK_CANONICAL (Q, 2, X); \ + } \ + while (0) + +# define FP_UNPACK_QP(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_2_P (Q, X, (val)); \ + _FP_UNPACK_CANONICAL (Q, 2, X); \ + } \ + while (0) + +# define FP_UNPACK_SEMIRAW_Q(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_2 (Q, X, (val)); \ + _FP_UNPACK_SEMIRAW (Q, 2, X); \ + } \ + while (0) + +# define FP_UNPACK_SEMIRAW_QP(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_2_P (Q, X, (val)); \ + _FP_UNPACK_SEMIRAW (Q, 2, X); \ + } \ + while (0) + +# define FP_PACK_Q(val, X) \ + do \ + { \ + _FP_PACK_CANONICAL (Q, 2, X); \ + _FP_PACK_RAW_2 (Q, (val), X); \ + } \ + while (0) + +# define FP_PACK_QP(val, X) \ + do \ + { \ + _FP_PACK_CANONICAL (Q, 2, X); \ + if (!FP_INHIBIT_RESULTS) \ + _FP_PACK_RAW_2_P (Q, (val), X); \ + } \ + while (0) + +# define FP_PACK_SEMIRAW_Q(val, X) \ + do \ + { \ + _FP_PACK_SEMIRAW (Q, 2, X); \ + _FP_PACK_RAW_2 (Q, (val), X); \ + } \ + while (0) + +# define FP_PACK_SEMIRAW_QP(val, X) \ + do \ + { \ + _FP_PACK_SEMIRAW (Q, 2, X); \ + if (!FP_INHIBIT_RESULTS) \ + _FP_PACK_RAW_2_P (Q, (val), X); \ + } \ + while (0) + +# define FP_ISSIGNAN_Q(X) _FP_ISSIGNAN (Q, 2, X) +# define FP_NEG_Q(R, X) _FP_NEG (Q, 2, R, X) +# define FP_ADD_Q(R, X, Y) _FP_ADD (Q, 2, R, X, Y) +# define FP_SUB_Q(R, X, Y) _FP_SUB (Q, 2, R, X, Y) +# define FP_MUL_Q(R, X, Y) _FP_MUL (Q, 2, R, X, Y) +# define FP_DIV_Q(R, X, Y) _FP_DIV (Q, 2, R, X, Y) +# define FP_SQRT_Q(R, X) _FP_SQRT (Q, 2, R, X) +# define _FP_SQRT_MEAT_Q(R, S, T, X, Q) _FP_SQRT_MEAT_2 (R, S, T, X, (Q)) +# define FP_FMA_Q(R, X, Y, Z) _FP_FMA (Q, 2, 4, R, X, Y, Z) + +# define FP_CMP_Q(r, X, Y, un, ex) _FP_CMP (Q, 2, (r), X, Y, (un), (ex)) +# define FP_CMP_EQ_Q(r, X, Y, ex) _FP_CMP_EQ (Q, 2, (r), X, Y, (ex)) +# define FP_CMP_UNORD_Q(r, X, Y, ex) _FP_CMP_UNORD (Q, 2, (r), X, Y, (ex)) + +# define FP_TO_INT_Q(r, X, rsz, rsg) _FP_TO_INT (Q, 2, (r), X, (rsz), (rsg)) +# define FP_FROM_INT_Q(X, r, rs, rt) _FP_FROM_INT (Q, 2, X, (r), (rs), rt) + +# define _FP_FRAC_HIGH_Q(X) _FP_FRAC_HIGH_2 (X) +# define _FP_FRAC_HIGH_RAW_Q(X) _FP_FRAC_HIGH_2 (X) + +# define _FP_FRAC_HIGH_DW_Q(X) _FP_FRAC_HIGH_4 (X) + +#endif /* not _FP_W_TYPE_SIZE < 64 */ diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/single.h b/contrib/toolchain/gcc/5x/libgcc/soft-fp/single.h new file mode 100644 index 0000000000..086a558b9e --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/single.h @@ -0,0 +1,192 @@ +/* Software floating-point emulation. + Definitions for IEEE Single Precision. + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com), + Jakub Jelinek (jj@ultra.linux.cz), + David S. Miller (davem@redhat.com) and + Peter Maydell (pmaydell@chiark.greenend.org.uk). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#if _FP_W_TYPE_SIZE < 32 +# error "Here's a nickel kid. Go buy yourself a real computer." +#endif + +#define _FP_FRACTBITS_S _FP_W_TYPE_SIZE + +#if _FP_W_TYPE_SIZE < 64 +# define _FP_FRACTBITS_DW_S (2 * _FP_W_TYPE_SIZE) +#else +# define _FP_FRACTBITS_DW_S _FP_W_TYPE_SIZE +#endif + +#define _FP_FRACBITS_S 24 +#define _FP_FRACXBITS_S (_FP_FRACTBITS_S - _FP_FRACBITS_S) +#define _FP_WFRACBITS_S (_FP_WORKBITS + _FP_FRACBITS_S) +#define _FP_WFRACXBITS_S (_FP_FRACTBITS_S - _FP_WFRACBITS_S) +#define _FP_EXPBITS_S 8 +#define _FP_EXPBIAS_S 127 +#define _FP_EXPMAX_S 255 +#define _FP_QNANBIT_S ((_FP_W_TYPE) 1 << (_FP_FRACBITS_S-2)) +#define _FP_QNANBIT_SH_S ((_FP_W_TYPE) 1 << (_FP_FRACBITS_S-2+_FP_WORKBITS)) +#define _FP_IMPLBIT_S ((_FP_W_TYPE) 1 << (_FP_FRACBITS_S-1)) +#define _FP_IMPLBIT_SH_S ((_FP_W_TYPE) 1 << (_FP_FRACBITS_S-1+_FP_WORKBITS)) +#define _FP_OVERFLOW_S ((_FP_W_TYPE) 1 << (_FP_WFRACBITS_S)) + +#define _FP_WFRACBITS_DW_S (2 * _FP_WFRACBITS_S) +#define _FP_WFRACXBITS_DW_S (_FP_FRACTBITS_DW_S - _FP_WFRACBITS_DW_S) +#define _FP_HIGHBIT_DW_S \ + ((_FP_W_TYPE) 1 << (_FP_WFRACBITS_DW_S - 1) % _FP_W_TYPE_SIZE) + +/* The implementation of _FP_MUL_MEAT_S and _FP_DIV_MEAT_S should be + chosen by the target machine. */ + +typedef float SFtype __attribute__ ((mode (SF))); + +union _FP_UNION_S +{ + SFtype flt; + struct _FP_STRUCT_LAYOUT + { +#if __BYTE_ORDER == __BIG_ENDIAN + unsigned sign : 1; + unsigned exp : _FP_EXPBITS_S; + unsigned frac : _FP_FRACBITS_S - (_FP_IMPLBIT_S != 0); +#else + unsigned frac : _FP_FRACBITS_S - (_FP_IMPLBIT_S != 0); + unsigned exp : _FP_EXPBITS_S; + unsigned sign : 1; +#endif + } bits __attribute__ ((packed)); +}; + +#define FP_DECL_S(X) _FP_DECL (1, X) +#define FP_UNPACK_RAW_S(X, val) _FP_UNPACK_RAW_1 (S, X, (val)) +#define FP_UNPACK_RAW_SP(X, val) _FP_UNPACK_RAW_1_P (S, X, (val)) +#define FP_PACK_RAW_S(val, X) _FP_PACK_RAW_1 (S, (val), X) +#define FP_PACK_RAW_SP(val, X) \ + do \ + { \ + if (!FP_INHIBIT_RESULTS) \ + _FP_PACK_RAW_1_P (S, (val), X); \ + } \ + while (0) + +#define FP_UNPACK_S(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_1 (S, X, (val)); \ + _FP_UNPACK_CANONICAL (S, 1, X); \ + } \ + while (0) + +#define FP_UNPACK_SP(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_1_P (S, X, (val)); \ + _FP_UNPACK_CANONICAL (S, 1, X); \ + } \ + while (0) + +#define FP_UNPACK_SEMIRAW_S(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_1 (S, X, (val)); \ + _FP_UNPACK_SEMIRAW (S, 1, X); \ + } \ + while (0) + +#define FP_UNPACK_SEMIRAW_SP(X, val) \ + do \ + { \ + _FP_UNPACK_RAW_1_P (S, X, (val)); \ + _FP_UNPACK_SEMIRAW (S, 1, X); \ + } \ + while (0) + +#define FP_PACK_S(val, X) \ + do \ + { \ + _FP_PACK_CANONICAL (S, 1, X); \ + _FP_PACK_RAW_1 (S, (val), X); \ + } \ + while (0) + +#define FP_PACK_SP(val, X) \ + do \ + { \ + _FP_PACK_CANONICAL (S, 1, X); \ + if (!FP_INHIBIT_RESULTS) \ + _FP_PACK_RAW_1_P (S, (val), X); \ + } \ + while (0) + +#define FP_PACK_SEMIRAW_S(val, X) \ + do \ + { \ + _FP_PACK_SEMIRAW (S, 1, X); \ + _FP_PACK_RAW_1 (S, (val), X); \ + } \ + while (0) + +#define FP_PACK_SEMIRAW_SP(val, X) \ + do \ + { \ + _FP_PACK_SEMIRAW (S, 1, X); \ + if (!FP_INHIBIT_RESULTS) \ + _FP_PACK_RAW_1_P (S, (val), X); \ + } \ + while (0) + +#define FP_ISSIGNAN_S(X) _FP_ISSIGNAN (S, 1, X) +#define FP_NEG_S(R, X) _FP_NEG (S, 1, R, X) +#define FP_ADD_S(R, X, Y) _FP_ADD (S, 1, R, X, Y) +#define FP_SUB_S(R, X, Y) _FP_SUB (S, 1, R, X, Y) +#define FP_MUL_S(R, X, Y) _FP_MUL (S, 1, R, X, Y) +#define FP_DIV_S(R, X, Y) _FP_DIV (S, 1, R, X, Y) +#define FP_SQRT_S(R, X) _FP_SQRT (S, 1, R, X) +#define _FP_SQRT_MEAT_S(R, S, T, X, Q) _FP_SQRT_MEAT_1 (R, S, T, X, (Q)) + +#if _FP_W_TYPE_SIZE < 64 +# define FP_FMA_S(R, X, Y, Z) _FP_FMA (S, 1, 2, R, X, Y, Z) +#else +# define FP_FMA_S(R, X, Y, Z) _FP_FMA (S, 1, 1, R, X, Y, Z) +#endif + +#define FP_CMP_S(r, X, Y, un, ex) _FP_CMP (S, 1, (r), X, Y, (un), (ex)) +#define FP_CMP_EQ_S(r, X, Y, ex) _FP_CMP_EQ (S, 1, (r), X, Y, (ex)) +#define FP_CMP_UNORD_S(r, X, Y, ex) _FP_CMP_UNORD (S, 1, (r), X, Y, (ex)) + +#define FP_TO_INT_S(r, X, rsz, rsg) _FP_TO_INT (S, 1, (r), X, (rsz), (rsg)) +#define FP_FROM_INT_S(X, r, rs, rt) _FP_FROM_INT (S, 1, X, (r), (rs), rt) + +#define _FP_FRAC_HIGH_S(X) _FP_FRAC_HIGH_1 (X) +#define _FP_FRAC_HIGH_RAW_S(X) _FP_FRAC_HIGH_1 (X) + +#if _FP_W_TYPE_SIZE < 64 +# define _FP_FRAC_HIGH_DW_S(X) _FP_FRAC_HIGH_2 (X) +#else +# define _FP_FRAC_HIGH_DW_S(X) _FP_FRAC_HIGH_1 (X) +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/soft-fp.h b/contrib/toolchain/gcc/5x/libgcc/soft-fp/soft-fp.h new file mode 100644 index 0000000000..05fcca0aba --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/soft-fp.h @@ -0,0 +1,325 @@ +/* Software floating-point emulation. + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com), + Jakub Jelinek (jj@ultra.linux.cz), + David S. Miller (davem@redhat.com) and + Peter Maydell (pmaydell@chiark.greenend.org.uk). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#ifndef SOFT_FP_H +#define SOFT_FP_H + +#ifdef _LIBC +# include +#else +# include "sfp-machine.h" +#endif + +/* Allow sfp-machine to have its own byte order definitions. */ +#ifndef __BYTE_ORDER +# ifdef _LIBC +# include +# else +# error "endianness not defined by sfp-machine.h" +# endif +#endif + +#define _FP_WORKBITS 3 +#define _FP_WORK_LSB ((_FP_W_TYPE) 1 << 3) +#define _FP_WORK_ROUND ((_FP_W_TYPE) 1 << 2) +#define _FP_WORK_GUARD ((_FP_W_TYPE) 1 << 1) +#define _FP_WORK_STICKY ((_FP_W_TYPE) 1 << 0) + +#ifndef FP_RND_NEAREST +# define FP_RND_NEAREST 0 +# define FP_RND_ZERO 1 +# define FP_RND_PINF 2 +# define FP_RND_MINF 3 +#endif +#ifndef FP_ROUNDMODE +# define FP_ROUNDMODE FP_RND_NEAREST +#endif + +/* By default don't care about exceptions. */ +#ifndef FP_EX_INVALID +# define FP_EX_INVALID 0 +#endif +#ifndef FP_EX_OVERFLOW +# define FP_EX_OVERFLOW 0 +#endif +#ifndef FP_EX_UNDERFLOW +# define FP_EX_UNDERFLOW 0 +#endif +#ifndef FP_EX_DIVZERO +# define FP_EX_DIVZERO 0 +#endif +#ifndef FP_EX_INEXACT +# define FP_EX_INEXACT 0 +#endif +#ifndef FP_EX_DENORM +# define FP_EX_DENORM 0 +#endif + +/* Sub-exceptions of "invalid". */ +/* Signaling NaN operand. */ +#ifndef FP_EX_INVALID_SNAN +# define FP_EX_INVALID_SNAN 0 +#endif +/* Inf * 0. */ +#ifndef FP_EX_INVALID_IMZ +# define FP_EX_INVALID_IMZ 0 +#endif +/* fma (Inf, 0, c). */ +#ifndef FP_EX_INVALID_IMZ_FMA +# define FP_EX_INVALID_IMZ_FMA 0 +#endif +/* Inf - Inf. */ +#ifndef FP_EX_INVALID_ISI +# define FP_EX_INVALID_ISI 0 +#endif +/* 0 / 0. */ +#ifndef FP_EX_INVALID_ZDZ +# define FP_EX_INVALID_ZDZ 0 +#endif +/* Inf / Inf. */ +#ifndef FP_EX_INVALID_IDI +# define FP_EX_INVALID_IDI 0 +#endif +/* sqrt (negative). */ +#ifndef FP_EX_INVALID_SQRT +# define FP_EX_INVALID_SQRT 0 +#endif +/* Invalid conversion to integer. */ +#ifndef FP_EX_INVALID_CVI +# define FP_EX_INVALID_CVI 0 +#endif +/* Invalid comparison. */ +#ifndef FP_EX_INVALID_VC +# define FP_EX_INVALID_VC 0 +#endif + +/* _FP_STRUCT_LAYOUT may be defined as an attribute to determine the + struct layout variant used for structures where bit-fields are used + to access specific parts of binary floating-point numbers. This is + required for systems where the default ABI uses struct layout with + differences in how consecutive bit-fields are laid out from the + default expected by soft-fp. */ +#ifndef _FP_STRUCT_LAYOUT +# define _FP_STRUCT_LAYOUT +#endif + +#ifdef _FP_DECL_EX +# define FP_DECL_EX \ + int _fex = 0; \ + _FP_DECL_EX +#else +# define FP_DECL_EX int _fex = 0 +#endif + +/* Initialize any machine-specific state used in FP_ROUNDMODE, + FP_TRAPPING_EXCEPTIONS or FP_HANDLE_EXCEPTIONS. */ +#ifndef FP_INIT_ROUNDMODE +# define FP_INIT_ROUNDMODE do {} while (0) +#endif + +/* Initialize any machine-specific state used in + FP_TRAPPING_EXCEPTIONS or FP_HANDLE_EXCEPTIONS. */ +#ifndef FP_INIT_TRAPPING_EXCEPTIONS +# define FP_INIT_TRAPPING_EXCEPTIONS FP_INIT_ROUNDMODE +#endif + +/* Initialize any machine-specific state used in + FP_HANDLE_EXCEPTIONS. */ +#ifndef FP_INIT_EXCEPTIONS +# define FP_INIT_EXCEPTIONS FP_INIT_TRAPPING_EXCEPTIONS +#endif + +#ifndef FP_HANDLE_EXCEPTIONS +# define FP_HANDLE_EXCEPTIONS do {} while (0) +#endif + +/* Whether to flush subnormal inputs to zero with the same sign. */ +#ifndef FP_DENORM_ZERO +# define FP_DENORM_ZERO 0 +#endif + +#ifndef FP_INHIBIT_RESULTS +/* By default we write the results always. + sfp-machine may override this and e.g. + check if some exceptions are unmasked + and inhibit it in such a case. */ +# define FP_INHIBIT_RESULTS 0 +#endif + +#define FP_SET_EXCEPTION(ex) \ + _fex |= (ex) + +#define FP_CUR_EXCEPTIONS \ + (_fex) + +#ifndef FP_TRAPPING_EXCEPTIONS +# define FP_TRAPPING_EXCEPTIONS 0 +#endif + +/* A file using soft-fp may define FP_NO_EXCEPTIONS before including + soft-fp.h to indicate that, although a macro used there could raise + exceptions, or do rounding and potentially thereby raise + exceptions, for some arguments, for the particular arguments used + in that file no exceptions or rounding can occur. Such a file + should not itself use macros relating to handling exceptions and + rounding modes; this is only for indirect uses (in particular, in + _FP_FROM_INT and the macros it calls). */ +#ifdef FP_NO_EXCEPTIONS + +# undef FP_SET_EXCEPTION +# define FP_SET_EXCEPTION(ex) do {} while (0) + +# undef FP_CUR_EXCEPTIONS +# define FP_CUR_EXCEPTIONS 0 + +# undef FP_TRAPPING_EXCEPTIONS +# define FP_TRAPPING_EXCEPTIONS 0 + +# undef FP_ROUNDMODE +# define FP_ROUNDMODE FP_RND_ZERO + +# undef _FP_TININESS_AFTER_ROUNDING +# define _FP_TININESS_AFTER_ROUNDING 0 + +#endif + +/* A file using soft-fp may define FP_NO_EXACT_UNDERFLOW before + including soft-fp.h to indicate that, although a macro used there + could allow for the case of exact underflow requiring the underflow + exception to be raised if traps are enabled, for the particular + arguments used in that file no exact underflow can occur. */ +#ifdef FP_NO_EXACT_UNDERFLOW +# undef FP_TRAPPING_EXCEPTIONS +# define FP_TRAPPING_EXCEPTIONS 0 +#endif + +#define _FP_ROUND_NEAREST(wc, X) \ + do \ + { \ + if ((_FP_FRAC_LOW_##wc (X) & 15) != _FP_WORK_ROUND) \ + _FP_FRAC_ADDI_##wc (X, _FP_WORK_ROUND); \ + } \ + while (0) + +#define _FP_ROUND_ZERO(wc, X) (void) 0 + +#define _FP_ROUND_PINF(wc, X) \ + do \ + { \ + if (!X##_s && (_FP_FRAC_LOW_##wc (X) & 7)) \ + _FP_FRAC_ADDI_##wc (X, _FP_WORK_LSB); \ + } \ + while (0) + +#define _FP_ROUND_MINF(wc, X) \ + do \ + { \ + if (X##_s && (_FP_FRAC_LOW_##wc (X) & 7)) \ + _FP_FRAC_ADDI_##wc (X, _FP_WORK_LSB); \ + } \ + while (0) + +#define _FP_ROUND(wc, X) \ + do \ + { \ + if (_FP_FRAC_LOW_##wc (X) & 7) \ + { \ + FP_SET_EXCEPTION (FP_EX_INEXACT); \ + switch (FP_ROUNDMODE) \ + { \ + case FP_RND_NEAREST: \ + _FP_ROUND_NEAREST (wc, X); \ + break; \ + case FP_RND_ZERO: \ + _FP_ROUND_ZERO (wc, X); \ + break; \ + case FP_RND_PINF: \ + _FP_ROUND_PINF (wc, X); \ + break; \ + case FP_RND_MINF: \ + _FP_ROUND_MINF (wc, X); \ + break; \ + } \ + } \ + } \ + while (0) + +#define FP_CLS_NORMAL 0 +#define FP_CLS_ZERO 1 +#define FP_CLS_INF 2 +#define FP_CLS_NAN 3 + +#define _FP_CLS_COMBINE(x, y) (((x) << 2) | (y)) + +#include "op-1.h" +#include "op-2.h" +#include "op-4.h" +#include "op-8.h" +#include "op-common.h" + +/* Sigh. Silly things longlong.h needs. */ +#define UWtype _FP_W_TYPE +#define W_TYPE_SIZE _FP_W_TYPE_SIZE + +typedef int QItype __attribute__ ((mode (QI))); +typedef int SItype __attribute__ ((mode (SI))); +typedef int DItype __attribute__ ((mode (DI))); +typedef unsigned int UQItype __attribute__ ((mode (QI))); +typedef unsigned int USItype __attribute__ ((mode (SI))); +typedef unsigned int UDItype __attribute__ ((mode (DI))); +#if _FP_W_TYPE_SIZE == 32 +typedef unsigned int UHWtype __attribute__ ((mode (HI))); +#elif _FP_W_TYPE_SIZE == 64 +typedef USItype UHWtype; +#endif + +#ifndef CMPtype +# define CMPtype int +#endif + +#define SI_BITS (__CHAR_BIT__ * (int) sizeof (SItype)) +#define DI_BITS (__CHAR_BIT__ * (int) sizeof (DItype)) + +#ifndef umul_ppmm +# ifdef _LIBC +# include +# else +# include "longlong.h" +# endif +#endif + +#ifdef _LIBC +# include +#else +extern void abort (void); +#endif + +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/subdf3.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/subdf3.c new file mode 100644 index 0000000000..ef82c86285 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/subdf3.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return a - b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +DFtype +__subdf3 (DFtype a, DFtype b) +{ + FP_DECL_EX; + FP_DECL_D (A); + FP_DECL_D (B); + FP_DECL_D (R); + DFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_SEMIRAW_D (A, a); + FP_UNPACK_SEMIRAW_D (B, b); + FP_SUB_D (R, A, B); + FP_PACK_SEMIRAW_D (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/subsf3.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/subsf3.c new file mode 100644 index 0000000000..8d36e284c7 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/subsf3.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return a - b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +SFtype +__subsf3 (SFtype a, SFtype b) +{ + FP_DECL_EX; + FP_DECL_S (A); + FP_DECL_S (B); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_SEMIRAW_S (A, a); + FP_UNPACK_SEMIRAW_S (B, b); + FP_SUB_S (R, A, B); + FP_PACK_SEMIRAW_S (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/subtf3.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/subtf3.c new file mode 100644 index 0000000000..490ff9cefb --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/subtf3.c @@ -0,0 +1,51 @@ +/* Software floating-point emulation. + Return a - b + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +TFtype +__subtf3 (TFtype a, TFtype b) +{ + FP_DECL_EX; + FP_DECL_Q (A); + FP_DECL_Q (B); + FP_DECL_Q (R); + TFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_SEMIRAW_Q (A, a); + FP_UNPACK_SEMIRAW_Q (B, b); + FP_SUB_Q (R, A, B); + FP_PACK_SEMIRAW_Q (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/truncdfsf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/truncdfsf2.c new file mode 100644 index 0000000000..e6ccb59079 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/truncdfsf2.c @@ -0,0 +1,54 @@ +/* Software floating-point emulation. + Truncate IEEE double into IEEE single + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" +#include "double.h" + +SFtype +__truncdfsf2 (DFtype a) +{ + FP_DECL_EX; + FP_DECL_D (A); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_SEMIRAW_D (A, a); +#if _FP_W_TYPE_SIZE < _FP_FRACBITS_D + FP_TRUNC (S, D, 1, 2, R, A); +#else + FP_TRUNC (S, D, 1, 1, R, A); +#endif + FP_PACK_SEMIRAW_S (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/trunctfdf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/trunctfdf2.c new file mode 100644 index 0000000000..781b5b90b0 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/trunctfdf2.c @@ -0,0 +1,54 @@ +/* Software floating-point emulation. + Truncate IEEE quad into IEEE double + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" +#include "quad.h" + +DFtype +__trunctfdf2 (TFtype a) +{ + FP_DECL_EX; + FP_DECL_Q (A); + FP_DECL_D (R); + DFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_SEMIRAW_Q (A, a); +#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q + FP_TRUNC (D, Q, 2, 4, R, A); +#else + FP_TRUNC (D, Q, 1, 2, R, A); +#endif + FP_PACK_SEMIRAW_D (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/trunctfsf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/trunctfsf2.c new file mode 100644 index 0000000000..76437c4d34 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/trunctfsf2.c @@ -0,0 +1,54 @@ +/* Software floating-point emulation. + Truncate IEEE quad into IEEE single + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" +#include "quad.h" + +SFtype +__trunctfsf2 (TFtype a) +{ + FP_DECL_EX; + FP_DECL_Q (A); + FP_DECL_S (R); + SFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_SEMIRAW_Q (A, a); +#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q + FP_TRUNC (S, Q, 1, 4, R, A); +#else + FP_TRUNC (S, Q, 1, 2, R, A); +#endif + FP_PACK_SEMIRAW_S (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/trunctfxf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/trunctfxf2.c new file mode 100644 index 0000000000..1782aaa7d8 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/trunctfxf2.c @@ -0,0 +1,53 @@ +/* Software floating-point emulation. + Truncate IEEE quad into IEEE extended + Copyright (C) 2007-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Uros Bizjak (ubizjak@gmail.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "extended.h" +#include "quad.h" + +XFtype +__trunctfxf2 (TFtype a) +{ + FP_DECL_EX; + FP_DECL_Q (A); + FP_DECL_E (R); + XFtype r; + + FP_INIT_ROUNDMODE; + FP_UNPACK_SEMIRAW_Q (A, a); +#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q + FP_TRUNC (E, Q, 4, 4, R, A); +#else + FP_TRUNC (E, Q, 2, 2, R, A); +#endif + FP_PACK_SEMIRAW_E (r, R); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/unorddf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/unorddf2.c new file mode 100644 index 0000000000..e09a1ece65 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/unorddf2.c @@ -0,0 +1,48 @@ +/* Software floating-point emulation. + Return 1 iff a or b is a NaN, 0 otherwise. + Copyright (C) 2006-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Joseph Myers (joseph@codesourcery.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "double.h" + +CMPtype +__unorddf2 (DFtype a, DFtype b) +{ + FP_DECL_EX; + FP_DECL_D (A); + FP_DECL_D (B); + CMPtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_D (A, a); + FP_UNPACK_RAW_D (B, b); + FP_CMP_UNORD_D (r, A, B, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/unordsf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/unordsf2.c new file mode 100644 index 0000000000..4d6be98a75 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/unordsf2.c @@ -0,0 +1,48 @@ +/* Software floating-point emulation. + Return 1 iff a or b is a NaN, 0 otherwise. + Copyright (C) 2006-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Joseph Myers (joseph@codesourcery.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "single.h" + +CMPtype +__unordsf2 (SFtype a, SFtype b) +{ + FP_DECL_EX; + FP_DECL_S (A); + FP_DECL_S (B); + CMPtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_S (A, a); + FP_UNPACK_RAW_S (B, b); + FP_CMP_UNORD_S (r, A, B, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/soft-fp/unordtf2.c b/contrib/toolchain/gcc/5x/libgcc/soft-fp/unordtf2.c new file mode 100644 index 0000000000..79d34211cf --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/soft-fp/unordtf2.c @@ -0,0 +1,48 @@ +/* Software floating-point emulation. + Return 1 iff a or b is a NaN, 0 otherwise. + Copyright (C) 2006-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Joseph Myers (joseph@codesourcery.com). + + 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Lesser General Public License restrictions do apply in + other respects; for example, they cover modification of the file, + and distribution when not linked into a combine executable.) + + 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 + . */ + +#include "soft-fp.h" +#include "quad.h" + +CMPtype +__unordtf2 (TFtype a, TFtype b) +{ + FP_DECL_EX; + FP_DECL_Q (A); + FP_DECL_Q (B); + CMPtype r; + + FP_INIT_EXCEPTIONS; + FP_UNPACK_RAW_Q (A, a); + FP_UNPACK_RAW_Q (B, b); + FP_CMP_UNORD_Q (r, A, B, 1); + FP_HANDLE_EXCEPTIONS; + + return r; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/sync.c b/contrib/toolchain/gcc/5x/libgcc/sync.c new file mode 100644 index 0000000000..7ee85cba51 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/sync.c @@ -0,0 +1,175 @@ +/* Out-of-line libgcc versions of __sync_* builtins. */ +/* Copyright (C) 2008-2015 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 file is used by targets whose makefiles define SYNC + to "yes". It is compiled with SYNC_CFLAGS and provides + out-of-line versions of all relevant __sync_* primitives. + + These routines are intended for targets like MIPS that have two + ISA encodings (the "normal" ISA and the MIPS16 ISA). The normal + ISA provides full synchronization capabilities but the MIPS16 ISA + has no encoding for them. MIPS16 code must therefore call external + non-MIPS16 implementations of the __sync_* routines. + + The file is compiled once for each routine. The following __foo + routines are selected by defining a macro called L: + + __sync_synchronize + + The following __foo_N routines are selected by defining FN=foo + and SIZE=N: + + __sync_fetch_and_add_N + __sync_fetch_and_sub_N + __sync_fetch_and_or_N + __sync_fetch_and_and_N + __sync_fetch_and_xor_N + __sync_fetch_and_nand_N + __sync_add_and_fetch_N + __sync_sub_and_fetch_N + __sync_or_and_fetch_N + __sync_and_and_fetch_N + __sync_xor_and_fetch_N + __sync_nand_and_fetch_N + __sync_bool_compare_and_swap_N + __sync_val_compare_and_swap_N + __sync_lock_test_and_set_N + + SIZE can be 1, 2, 4, 8 or 16. __foo_N is omitted if the target does + not provide __sync_compare_and_swap_N. + + Note that __sync_lock_release does not fall back on external + __sync_lock_release_N functions. The default implementation + of __sync_lock_release is a call to __sync_synchronize followed + by a store of zero, so we don't need separate library functions + for it. */ + +#if defined FN + +/* Define functions called __sync__, with one macro per + signature. TYPE is a type that has UNITS bytes. */ + +#define DEFINE_V_PV(NAME, UNITS, TYPE) \ + TYPE \ + __##NAME##_##UNITS (TYPE *ptr, TYPE value) \ + { \ + return __##NAME (ptr, value); \ + } + +#define DEFINE_V_PVV(NAME, UNITS, TYPE) \ + TYPE \ + __##NAME##_##UNITS (TYPE *ptr, TYPE value1, TYPE value2) \ + { \ + return __##NAME (ptr, value1, value2); \ + } + +#define DEFINE_BOOL_PVV(NAME, UNITS, TYPE) \ + _Bool \ + __##NAME##_##UNITS (TYPE *ptr, TYPE value1, TYPE value2) \ + { \ + return __##NAME (ptr, value1, value2); \ + } + +/* Map function names to the appropriate DEFINE_* macro. */ + +#define local_sync_fetch_and_add DEFINE_V_PV +#define local_sync_fetch_and_sub DEFINE_V_PV +#define local_sync_fetch_and_or DEFINE_V_PV +#define local_sync_fetch_and_and DEFINE_V_PV +#define local_sync_fetch_and_xor DEFINE_V_PV +#define local_sync_fetch_and_nand DEFINE_V_PV + +#define local_sync_add_and_fetch DEFINE_V_PV +#define local_sync_sub_and_fetch DEFINE_V_PV +#define local_sync_or_and_fetch DEFINE_V_PV +#define local_sync_and_and_fetch DEFINE_V_PV +#define local_sync_xor_and_fetch DEFINE_V_PV +#define local_sync_nand_and_fetch DEFINE_V_PV + +#define local_sync_bool_compare_and_swap DEFINE_BOOL_PVV +#define local_sync_val_compare_and_swap DEFINE_V_PVV + +#define local_sync_lock_test_and_set DEFINE_V_PV + +/* Define the function ___, given that TYPE is a type with + UNITS bytes. */ +#define DEFINE1(NAME, UNITS, TYPE) \ + static int unused[sizeof (TYPE) == UNITS ? 1 : -1] \ + __attribute__((unused)); \ + local_##NAME (NAME, UNITS, TYPE); + +/* As above, but performing macro expansion on the arguments. */ +#define DEFINE(NAME, UNITS, TYPE) DEFINE1 (NAME, UNITS, TYPE) + +/* Find an appropriate type TYPE for SIZE and invoke DEFINE (FN, SIZE, TYPE). + + The types chosen here may be incorrect for some targets. + For example, targets with 16-byte atomicity support might not + support OImode. We would need some kind of target-specific + override if that becomes a problem. */ + +#if SIZE == 1 && __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 + +typedef unsigned int UQItype __attribute__((mode (QI))); +DEFINE (FN, 1, UQItype) + +#elif SIZE == 2 && __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 + +typedef unsigned int UHItype __attribute__((mode (HI))); +DEFINE (FN, 2, UHItype) + +#elif SIZE == 4 && __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 + +typedef unsigned int USItype __attribute__((mode (SI))); +DEFINE (FN, 4, USItype) + +#elif SIZE == 8 && __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 + +typedef unsigned int UDItype __attribute__((mode (DI))); +DEFINE (FN, 8, UDItype) + +#elif SIZE == 16 && __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 + +typedef unsigned int UOItype __attribute__((mode (OI))); +DEFINE (FN, 8, UOItype) + +#endif + +#elif __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 \ + || __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 \ + || __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 \ + || __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 \ + || __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 + +#if defined Lsync_synchronize + +void +__sync_synchronize (void) +{ + __sync_synchronize (); +} + +#endif + +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/udivmod.c b/contrib/toolchain/gcc/5x/libgcc/udivmod.c new file mode 100644 index 0000000000..59fc9c8166 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/udivmod.c @@ -0,0 +1,37 @@ +/* Copyright (C) 2000-2015 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 +. */ + +long udivmodsi4 (); + +long +__udivsi3 (long a, long b) +{ + return udivmodsi4 (a, b, 0); +} + +long +__umodsi3 (long a, long b) +{ + return udivmodsi4 (a, b, 1); +} + diff --git a/contrib/toolchain/gcc/5x/libgcc/udivmodsi4.c b/contrib/toolchain/gcc/5x/libgcc/udivmodsi4.c new file mode 100644 index 0000000000..d57b37fb8b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/udivmodsi4.c @@ -0,0 +1,47 @@ +/* Copyright (C) 2000-2015 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 +. */ + +unsigned long +udivmodsi4(unsigned long num, unsigned long den, int modwanted) +{ + unsigned long bit = 1; + unsigned long res = 0; + + while (den < num && bit && !(den & (1L<<31))) + { + den <<=1; + bit <<=1; + } + while (bit) + { + if (num >= den) + { + num -= den; + res |= bit; + } + bit >>=1; + den >>=1; + } + if (modwanted) return num; + return res; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/unwind-c.c b/contrib/toolchain/gcc/5x/libgcc/unwind-c.c new file mode 100644 index 0000000000..d62afbb17f --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/unwind-c.c @@ -0,0 +1,244 @@ +/* Supporting functions for C exception handling. + Copyright (C) 2002-2015 Free Software Foundation, Inc. + Contributed by Aldy Hernandez . + Shamelessly stolen from the Java front end. + +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 "tconfig.h" +#include "tsystem.h" +#include "unwind.h" +#define NO_SIZE_OF_ENCODED_VALUE +#include "unwind-pe.h" + +typedef struct +{ + _Unwind_Ptr Start; + _Unwind_Ptr LPStart; + _Unwind_Ptr ttype_base; + const unsigned char *TType; + const unsigned char *action_table; + unsigned char ttype_encoding; + unsigned char call_site_encoding; +} lsda_header_info; + +static const unsigned char * +parse_lsda_header (struct _Unwind_Context *context, const unsigned char *p, + lsda_header_info *info) +{ + _uleb128_t tmp; + unsigned char lpstart_encoding; + + info->Start = (context ? _Unwind_GetRegionStart (context) : 0); + + /* Find @LPStart, the base to which landing pad offsets are relative. */ + lpstart_encoding = *p++; + if (lpstart_encoding != DW_EH_PE_omit) + p = read_encoded_value (context, lpstart_encoding, p, &info->LPStart); + else + info->LPStart = info->Start; + + /* Find @TType, the base of the handler and exception spec type data. */ + info->ttype_encoding = *p++; + if (info->ttype_encoding != DW_EH_PE_omit) + { + p = read_uleb128 (p, &tmp); + info->TType = p + tmp; + } + else + info->TType = 0; + + /* The encoding and length of the call-site table; the action table + immediately follows. */ + info->call_site_encoding = *p++; + p = read_uleb128 (p, &tmp); + info->action_table = p + tmp; + + return p; +} + +#ifdef __ARM_EABI_UNWINDER__ +/* ARM EABI personality routines must also unwind the stack. */ +#define CONTINUE_UNWINDING \ + do \ + { \ + if (__gnu_unwind_frame (ue_header, context) != _URC_OK) \ + return _URC_FAILURE; \ + return _URC_CONTINUE_UNWIND; \ + } \ + while (0) +#else +#define CONTINUE_UNWINDING return _URC_CONTINUE_UNWIND +#endif + +#ifdef __USING_SJLJ_EXCEPTIONS__ +#define PERSONALITY_FUNCTION __gcc_personality_sj0 +#define __builtin_eh_return_data_regno(x) x +#elif defined(__SEH__) +#define PERSONALITY_FUNCTION __gcc_personality_imp +#else +#define PERSONALITY_FUNCTION __gcc_personality_v0 +#endif + +#ifdef __ARM_EABI_UNWINDER__ +_Unwind_Reason_Code +PERSONALITY_FUNCTION (_Unwind_State, struct _Unwind_Exception *, + struct _Unwind_Context *); + +_Unwind_Reason_Code +PERSONALITY_FUNCTION (_Unwind_State state, + struct _Unwind_Exception * ue_header, + struct _Unwind_Context * context) +#else +#if defined (__SEH__) && !defined (__USING_SJLJ_EXCEPTIONS__) +static +#endif +_Unwind_Reason_Code +PERSONALITY_FUNCTION (int, _Unwind_Action, _Unwind_Exception_Class, + struct _Unwind_Exception *, struct _Unwind_Context *); + +_Unwind_Reason_Code +PERSONALITY_FUNCTION (int version, + _Unwind_Action actions, + _Unwind_Exception_Class exception_class ATTRIBUTE_UNUSED, + struct _Unwind_Exception *ue_header, + struct _Unwind_Context *context) +#endif +{ + lsda_header_info info; + const unsigned char *language_specific_data, *p; + _Unwind_Ptr landing_pad, ip; + int ip_before_insn = 0; + +#ifdef __ARM_EABI_UNWINDER__ + if ((state & _US_ACTION_MASK) != _US_UNWIND_FRAME_STARTING) + CONTINUE_UNWINDING; + + /* The dwarf unwinder assumes the context structure holds things like the + function and LSDA pointers. The ARM implementation caches these in + the exception header (UCB). To avoid rewriting everything we make a + virtual scratch register point at the UCB. */ + ip = (_Unwind_Ptr) ue_header; + _Unwind_SetGR (context, UNWIND_POINTER_REG, ip); +#else + if (version != 1) + return _URC_FATAL_PHASE1_ERROR; + + /* Currently we only support cleanups for C. */ + if ((actions & _UA_CLEANUP_PHASE) == 0) + CONTINUE_UNWINDING; +#endif + + language_specific_data = (const unsigned char *) + _Unwind_GetLanguageSpecificData (context); + + /* If no LSDA, then there are no handlers or cleanups. */ + if (! language_specific_data) + CONTINUE_UNWINDING; + + /* Parse the LSDA header. */ + p = parse_lsda_header (context, language_specific_data, &info); +#ifdef HAVE_GETIPINFO + ip = _Unwind_GetIPInfo (context, &ip_before_insn); +#else + ip = _Unwind_GetIP (context); +#endif + if (! ip_before_insn) + --ip; + landing_pad = 0; + +#ifdef __USING_SJLJ_EXCEPTIONS__ + /* The given "IP" is an index into the call-site table, with two + exceptions -- -1 means no-action, and 0 means terminate. But + since we're using uleb128 values, we've not got random access + to the array. */ + if ((int) ip <= 0) + return _URC_CONTINUE_UNWIND; + else + { + _uleb128_t cs_lp, cs_action; + do + { + p = read_uleb128 (p, &cs_lp); + p = read_uleb128 (p, &cs_action); + } + while (--ip); + + /* Can never have null landing pad for sjlj -- that would have + been indicated by a -1 call site index. */ + landing_pad = (_Unwind_Ptr)cs_lp + 1; + goto found_something; + } +#else + /* Search the call-site table for the action associated with this IP. */ + while (p < info.action_table) + { + _Unwind_Ptr cs_start, cs_len, cs_lp; + _uleb128_t cs_action; + + /* Note that all call-site encodings are "absolute" displacements. */ + p = read_encoded_value (0, info.call_site_encoding, p, &cs_start); + p = read_encoded_value (0, info.call_site_encoding, p, &cs_len); + p = read_encoded_value (0, info.call_site_encoding, p, &cs_lp); + p = read_uleb128 (p, &cs_action); + + /* The table is sorted, so if we've passed the ip, stop. */ + if (ip < info.Start + cs_start) + p = info.action_table; + else if (ip < info.Start + cs_start + cs_len) + { + if (cs_lp) + landing_pad = info.LPStart + cs_lp; + goto found_something; + } + } +#endif + + /* IP is not in table. No associated cleanups. */ + /* ??? This is where C++ calls std::terminate to catch throw + from a destructor. */ + CONTINUE_UNWINDING; + + found_something: + if (landing_pad == 0) + { + /* IP is present, but has a null landing pad. + No handler to be run. */ + CONTINUE_UNWINDING; + } + + _Unwind_SetGR (context, __builtin_eh_return_data_regno (0), + (_Unwind_Ptr) ue_header); + _Unwind_SetGR (context, __builtin_eh_return_data_regno (1), 0); + _Unwind_SetIP (context, landing_pad); + return _URC_INSTALL_CONTEXT; +} + +#if defined (__SEH__) && !defined (__USING_SJLJ_EXCEPTIONS__) +EXCEPTION_DISPOSITION +__gcc_personality_seh0 (PEXCEPTION_RECORD ms_exc, void *this_frame, + PCONTEXT ms_orig_context, PDISPATCHER_CONTEXT ms_disp) +{ + return _GCC_specific_handler (ms_exc, this_frame, ms_orig_context, + ms_disp, __gcc_personality_imp); +} +#endif /* SEH */ diff --git a/contrib/toolchain/gcc/5x/libgcc/unwind-compat.c b/contrib/toolchain/gcc/5x/libgcc/unwind-compat.c new file mode 100644 index 0000000000..61dba0c41b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/unwind-compat.c @@ -0,0 +1,209 @@ +/* Backward compatibility unwind routines. + Copyright (C) 2004-2015 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 (USE_GAS_SYMVER) && defined (USE_LIBUNWIND_EXCEPTIONS) +#include "tconfig.h" +#include "tsystem.h" +#include "unwind.h" +#include "unwind-dw2-fde.h" +#include "unwind-compat.h" + +extern _Unwind_Reason_Code __libunwind_Unwind_Backtrace + (_Unwind_Trace_Fn, void *); + +_Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE +_Unwind_Backtrace (_Unwind_Trace_Fn trace, void *trace_argument) +{ + return __libunwind_Unwind_Backtrace (trace, trace_argument); +} +symver (_Unwind_Backtrace, GCC_3.3); + +extern void __libunwind_Unwind_DeleteException + (struct _Unwind_Exception *); + +void +_Unwind_DeleteException (struct _Unwind_Exception *exc) +{ + return __libunwind_Unwind_DeleteException (exc); +} +symver (_Unwind_DeleteException, GCC_3.0); + +extern void * __libunwind_Unwind_FindEnclosingFunction (void *); + +void * +_Unwind_FindEnclosingFunction (void *pc) +{ + return __libunwind_Unwind_FindEnclosingFunction (pc); +} +symver (_Unwind_FindEnclosingFunction, GCC_3.3); + +extern _Unwind_Reason_Code __libunwind_Unwind_ForcedUnwind + (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *); + +_Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE +_Unwind_ForcedUnwind (struct _Unwind_Exception *exc, + _Unwind_Stop_Fn stop, void * stop_argument) +{ + return __libunwind_Unwind_ForcedUnwind (exc, stop, stop_argument); +} +symver (_Unwind_ForcedUnwind, GCC_3.0); + +extern _Unwind_Word __libunwind_Unwind_GetCFA + (struct _Unwind_Context *); + +_Unwind_Word +_Unwind_GetCFA (struct _Unwind_Context *context) +{ + return __libunwind_Unwind_GetCFA (context); +} +symver (_Unwind_GetCFA, GCC_3.3); + +#ifdef __ia64__ +extern _Unwind_Word __libunwind_Unwind_GetBSP + (struct _Unwind_Context *); + +_Unwind_Word +_Unwind_GetBSP (struct _Unwind_Context * context) +{ + return __libunwind_Unwind_GetBSP (context); +} +symver (_Unwind_GetBSP, GCC_3.3.2); +#else +extern _Unwind_Ptr __libunwind_Unwind_GetDataRelBase + (struct _Unwind_Context *); + +_Unwind_Ptr +_Unwind_GetDataRelBase (struct _Unwind_Context *context) +{ + return __libunwind_Unwind_GetDataRelBase (context); +} +symver (_Unwind_GetDataRelBase, GCC_3.0); + +extern _Unwind_Ptr __libunwind_Unwind_GetTextRelBase + (struct _Unwind_Context *); + +_Unwind_Ptr +_Unwind_GetTextRelBase (struct _Unwind_Context *context) +{ + return __libunwind_Unwind_GetTextRelBase (context); +} +symver (_Unwind_GetTextRelBase, GCC_3.0); +#endif + +extern _Unwind_Word __libunwind_Unwind_GetGR + (struct _Unwind_Context *, int ); + +_Unwind_Word +_Unwind_GetGR (struct _Unwind_Context *context, int index) +{ + return __libunwind_Unwind_GetGR (context, index); +} +symver (_Unwind_GetGR, GCC_3.0); + +extern _Unwind_Ptr __libunwind_Unwind_GetIP (struct _Unwind_Context *); + +_Unwind_Ptr +_Unwind_GetIP (struct _Unwind_Context *context) +{ + return __libunwind_Unwind_GetIP (context); +} +symver (_Unwind_GetIP, GCC_3.0); + +_Unwind_Ptr +_Unwind_GetIPInfo (struct _Unwind_Context *context, int *ip_before_insn) +{ + *ip_before_insn = 0; + return __libunwind_Unwind_GetIP (context); +} + +extern void *__libunwind_Unwind_GetLanguageSpecificData + (struct _Unwind_Context *); + +void * +_Unwind_GetLanguageSpecificData (struct _Unwind_Context *context) +{ + return __libunwind_Unwind_GetLanguageSpecificData (context); +} +symver (_Unwind_GetLanguageSpecificData, GCC_3.0); + +extern _Unwind_Ptr __libunwind_Unwind_GetRegionStart + (struct _Unwind_Context *); + +_Unwind_Ptr +_Unwind_GetRegionStart (struct _Unwind_Context *context) +{ + return __libunwind_Unwind_GetRegionStart (context); +} +symver (_Unwind_GetRegionStart, GCC_3.0); + +extern _Unwind_Reason_Code __libunwind_Unwind_RaiseException + (struct _Unwind_Exception *); + +_Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE +_Unwind_RaiseException(struct _Unwind_Exception *exc) +{ + return __libunwind_Unwind_RaiseException (exc); +} +symver (_Unwind_RaiseException, GCC_3.0); + +extern void __libunwind_Unwind_Resume (struct _Unwind_Exception *); + +void LIBGCC2_UNWIND_ATTRIBUTE +_Unwind_Resume (struct _Unwind_Exception *exc) +{ + __libunwind_Unwind_Resume (exc); +} +symver (_Unwind_Resume, GCC_3.0); + +extern _Unwind_Reason_Code __libunwind_Unwind_Resume_or_Rethrow + (struct _Unwind_Exception *); + +_Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE +_Unwind_Resume_or_Rethrow (struct _Unwind_Exception *exc) +{ + return __libunwind_Unwind_Resume_or_Rethrow (exc); +} +symver (_Unwind_Resume_or_Rethrow, GCC_3.3); + +extern void __libunwind_Unwind_SetGR + (struct _Unwind_Context *, int, _Unwind_Word); + +void +_Unwind_SetGR (struct _Unwind_Context *context, int index, + _Unwind_Word val) +{ + __libunwind_Unwind_SetGR (context, index, val); +} +symver (_Unwind_SetGR, GCC_3.0); + +extern void __libunwind_Unwind_SetIP + (struct _Unwind_Context *, _Unwind_Ptr); + +void +_Unwind_SetIP (struct _Unwind_Context *context, _Unwind_Ptr val) +{ + return __libunwind_Unwind_SetIP (context, val); +} +symver (_Unwind_SetIP, GCC_3.0); +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/unwind-compat.h b/contrib/toolchain/gcc/5x/libgcc/unwind-compat.h new file mode 100644 index 0000000000..3050de09a3 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/unwind-compat.h @@ -0,0 +1,29 @@ +/* Backward compatibility unwind routines. + Copyright (C) 2004-2015 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 symver(name, version) \ + __asm__ (".symver " #name"," #name "@" #version) + +#define alias(name) \ + __typeof(name) __libunwind##name __attribute__ ((alias (#name))) diff --git a/contrib/toolchain/gcc/5x/libgcc/unwind-dw2-fde-compat.c b/contrib/toolchain/gcc/5x/libgcc/unwind-dw2-fde-compat.c new file mode 100644 index 0000000000..baaf1f3fc7 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/unwind-dw2-fde-compat.c @@ -0,0 +1,42 @@ +/* Backward compatibility unwind routines. + Copyright (C) 2004-2015 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 (USE_GAS_SYMVER) && defined (USE_LIBUNWIND_EXCEPTIONS) +#include "tconfig.h" +#include "tsystem.h" +#include "unwind.h" +#include "unwind-dw2-fde.h" +#include "unwind-compat.h" + +extern const fde * __libunwind__Unwind_Find_FDE + (void *, struct dwarf_eh_bases *); + +const fde * +_Unwind_Find_FDE (void *pc, struct dwarf_eh_bases *bases) +{ + __libunwind__Unwind_Find_FDE (pc, bases); +} + +symver (_Unwind_Find_FDE, GCC_3.0); +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/unwind-dw2-fde-dip.c b/contrib/toolchain/gcc/5x/libgcc/unwind-dw2-fde-dip.c new file mode 100644 index 0000000000..e1e566b5d5 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/unwind-dw2-fde-dip.c @@ -0,0 +1,479 @@ +/* Copyright (C) 2001-2015 Free Software Foundation, Inc. + Contributed by Jakub Jelinek . + + 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 + . */ + +/* Locate the FDE entry for a given address, using PT_GNU_EH_FRAME ELF + segment and dl_iterate_phdr to avoid register/deregister calls at + DSO load/unload. */ + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE 1 +#endif + +#include "tconfig.h" +#include "tsystem.h" +#if !defined(inhibit_libc) && !defined(__OpenBSD__) +#include /* Get DT_CONFIG. */ +#endif +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" +#include "dwarf2.h" +#include "unwind.h" +#define NO_BASE_OF_ENCODED_VALUE +#include "unwind-pe.h" +#include "unwind-dw2-fde.h" +#include "unwind-compat.h" +#include "gthr.h" + +#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ + && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \ + || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG))) +# define USE_PT_GNU_EH_FRAME +#endif + +#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ + && defined(__BIONIC__) +# define USE_PT_GNU_EH_FRAME +#endif + +#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ + && defined(TARGET_DL_ITERATE_PHDR) \ + && (defined(__DragonFly__) || defined(__FreeBSD__)) +# define ElfW __ElfN +# define USE_PT_GNU_EH_FRAME +#endif + +#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ + && defined(__OpenBSD__) +# define ElfW(type) Elf_##type +# define USE_PT_GNU_EH_FRAME +#endif + +#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ + && defined(TARGET_DL_ITERATE_PHDR) \ + && defined(__sun__) && defined(__svr4__) +# define USE_PT_GNU_EH_FRAME +#endif + +#if defined(USE_PT_GNU_EH_FRAME) + +#include + +#ifndef __RELOC_POINTER +# define __RELOC_POINTER(ptr, base) ((ptr) + (base)) +#endif + +static const fde * _Unwind_Find_registered_FDE (void *pc, struct dwarf_eh_bases *bases); + +#define _Unwind_Find_FDE _Unwind_Find_registered_FDE +#include "unwind-dw2-fde.c" +#undef _Unwind_Find_FDE + +#ifndef PT_GNU_EH_FRAME +#define PT_GNU_EH_FRAME (PT_LOOS + 0x474e550) +#endif + +struct unw_eh_callback_data +{ + _Unwind_Ptr pc; + void *tbase; + void *dbase; + void *func; + const fde *ret; + int check_cache; +}; + +struct unw_eh_frame_hdr +{ + unsigned char version; + unsigned char eh_frame_ptr_enc; + unsigned char fde_count_enc; + unsigned char table_enc; +}; + +#define FRAME_HDR_CACHE_SIZE 8 + +static struct frame_hdr_cache_element +{ + _Unwind_Ptr pc_low; + _Unwind_Ptr pc_high; + _Unwind_Ptr load_base; + const ElfW(Phdr) *p_eh_frame_hdr; + const ElfW(Phdr) *p_dynamic; + struct frame_hdr_cache_element *link; +} frame_hdr_cache[FRAME_HDR_CACHE_SIZE]; + +static struct frame_hdr_cache_element *frame_hdr_cache_head; + +/* Like base_of_encoded_value, but take the base from a struct + unw_eh_callback_data instead of an _Unwind_Context. */ + +static _Unwind_Ptr +base_from_cb_data (unsigned char encoding, struct unw_eh_callback_data *data) +{ + if (encoding == DW_EH_PE_omit) + return 0; + + switch (encoding & 0x70) + { + case DW_EH_PE_absptr: + case DW_EH_PE_pcrel: + case DW_EH_PE_aligned: + return 0; + + case DW_EH_PE_textrel: + return (_Unwind_Ptr) data->tbase; + case DW_EH_PE_datarel: + return (_Unwind_Ptr) data->dbase; + default: + gcc_unreachable (); + } +} + +static int +_Unwind_IteratePhdrCallback (struct dl_phdr_info *info, size_t size, void *ptr) +{ + struct unw_eh_callback_data *data = (struct unw_eh_callback_data *) ptr; + const ElfW(Phdr) *phdr, *p_eh_frame_hdr, *p_dynamic; + long n, match; +#ifdef __FRV_FDPIC__ + struct elf32_fdpic_loadaddr load_base; +#else + _Unwind_Ptr load_base; +#endif + const unsigned char *p; + const struct unw_eh_frame_hdr *hdr; + _Unwind_Ptr eh_frame; + struct object ob; + _Unwind_Ptr pc_low = 0, pc_high = 0; + + struct ext_dl_phdr_info + { + ElfW(Addr) dlpi_addr; + const char *dlpi_name; + const ElfW(Phdr) *dlpi_phdr; + ElfW(Half) dlpi_phnum; + unsigned long long int dlpi_adds; + unsigned long long int dlpi_subs; + }; + + match = 0; + phdr = info->dlpi_phdr; + load_base = info->dlpi_addr; + p_eh_frame_hdr = NULL; + p_dynamic = NULL; + + struct frame_hdr_cache_element *prev_cache_entry = NULL, + *last_cache_entry = NULL; + + if (data->check_cache && size >= sizeof (struct ext_dl_phdr_info)) + { + static unsigned long long adds = -1ULL, subs; + struct ext_dl_phdr_info *einfo = (struct ext_dl_phdr_info *) info; + + /* We use a least recently used cache replacement policy. Also, + the most recently used cache entries are placed at the head + of the search chain. */ + + if (einfo->dlpi_adds == adds && einfo->dlpi_subs == subs) + { + /* Find data->pc in shared library cache. + Set load_base, p_eh_frame_hdr and p_dynamic + plus match from the cache and goto + "Read .eh_frame_hdr header." below. */ + + struct frame_hdr_cache_element *cache_entry; + + for (cache_entry = frame_hdr_cache_head; + cache_entry; + cache_entry = cache_entry->link) + { + if (data->pc >= cache_entry->pc_low + && data->pc < cache_entry->pc_high) + { + load_base = cache_entry->load_base; + p_eh_frame_hdr = cache_entry->p_eh_frame_hdr; + p_dynamic = cache_entry->p_dynamic; + + /* And move the entry we're using to the head. */ + if (cache_entry != frame_hdr_cache_head) + { + prev_cache_entry->link = cache_entry->link; + cache_entry->link = frame_hdr_cache_head; + frame_hdr_cache_head = cache_entry; + } + goto found; + } + + last_cache_entry = cache_entry; + /* Exit early if we found an unused entry. */ + if ((cache_entry->pc_low | cache_entry->pc_high) == 0) + break; + if (cache_entry->link != NULL) + prev_cache_entry = cache_entry; + } + } + else + { + adds = einfo->dlpi_adds; + subs = einfo->dlpi_subs; + /* Initialize the cache. Create a chain of cache entries, + with the final one terminated by a NULL link. */ + int i; + for (i = 0; i < FRAME_HDR_CACHE_SIZE; i++) + { + frame_hdr_cache[i].pc_low = 0; + frame_hdr_cache[i].pc_high = 0; + frame_hdr_cache[i].link = &frame_hdr_cache[i+1]; + } + frame_hdr_cache[i-1].link = NULL; + frame_hdr_cache_head = &frame_hdr_cache[0]; + data->check_cache = 0; + } + } + + /* Make sure struct dl_phdr_info is at least as big as we need. */ + if (size < offsetof (struct dl_phdr_info, dlpi_phnum) + + sizeof (info->dlpi_phnum)) + return -1; + + /* See if PC falls into one of the loaded segments. Find the eh_frame + segment at the same time. */ + for (n = info->dlpi_phnum; --n >= 0; phdr++) + { + if (phdr->p_type == PT_LOAD) + { + _Unwind_Ptr vaddr = (_Unwind_Ptr) + __RELOC_POINTER (phdr->p_vaddr, load_base); + if (data->pc >= vaddr && data->pc < vaddr + phdr->p_memsz) + { + match = 1; + pc_low = vaddr; + pc_high = vaddr + phdr->p_memsz; + } + } + else if (phdr->p_type == PT_GNU_EH_FRAME) + p_eh_frame_hdr = phdr; +#ifdef PT_SUNW_UNWIND + /* Sun ld emits PT_SUNW_UNWIND .eh_frame_hdr sections instead of + PT_SUNW_EH_FRAME/PT_GNU_EH_FRAME, so accept them as well. */ + else if (phdr->p_type == PT_SUNW_UNWIND) + p_eh_frame_hdr = phdr; +#endif + else if (phdr->p_type == PT_DYNAMIC) + p_dynamic = phdr; + } + + if (!match) + return 0; + + if (size >= sizeof (struct ext_dl_phdr_info)) + { + /* Move the cache entry we're about to overwrite to the head of + the list. If either last_cache_entry or prev_cache_entry are + NULL, that cache entry is already at the head. */ + if (last_cache_entry != NULL && prev_cache_entry != NULL) + { + prev_cache_entry->link = last_cache_entry->link; + last_cache_entry->link = frame_hdr_cache_head; + frame_hdr_cache_head = last_cache_entry; + } + + frame_hdr_cache_head->load_base = load_base; + frame_hdr_cache_head->p_eh_frame_hdr = p_eh_frame_hdr; + frame_hdr_cache_head->p_dynamic = p_dynamic; + frame_hdr_cache_head->pc_low = pc_low; + frame_hdr_cache_head->pc_high = pc_high; + } + + found: + + if (!p_eh_frame_hdr) + return 0; + + /* Read .eh_frame_hdr header. */ + hdr = (const struct unw_eh_frame_hdr *) + __RELOC_POINTER (p_eh_frame_hdr->p_vaddr, load_base); + if (hdr->version != 1) + return 1; + +#ifdef CRT_GET_RFIB_DATA +# ifdef __i386__ + data->dbase = NULL; + if (p_dynamic) + { + /* For dynamically linked executables and shared libraries, + DT_PLTGOT is the gp value for that object. */ + ElfW(Dyn) *dyn = (ElfW(Dyn) *) + __RELOC_POINTER (p_dynamic->p_vaddr, load_base); + for (; dyn->d_tag != DT_NULL ; dyn++) + if (dyn->d_tag == DT_PLTGOT) + { + data->dbase = (void *) dyn->d_un.d_ptr; +#if defined __linux__ + /* On IA-32 Linux, _DYNAMIC is writable and GLIBC has + relocated it. */ +#elif defined __sun__ && defined __svr4__ + /* On Solaris 2/x86, we need to do this ourselves. */ + data->dbase += load_base; +#endif + break; + } + } +# elif defined __FRV_FDPIC__ && defined __linux__ + data->dbase = load_base.got_value; +# else +# error What is DW_EH_PE_datarel base on this platform? +# endif +#endif + + p = read_encoded_value_with_base (hdr->eh_frame_ptr_enc, + base_from_cb_data (hdr->eh_frame_ptr_enc, + data), + (const unsigned char *) (hdr + 1), + &eh_frame); + + /* We require here specific table encoding to speed things up. + Also, DW_EH_PE_datarel here means using PT_GNU_EH_FRAME start + as base, not the processor specific DW_EH_PE_datarel. */ + if (hdr->fde_count_enc != DW_EH_PE_omit + && hdr->table_enc == (DW_EH_PE_datarel | DW_EH_PE_sdata4)) + { + _Unwind_Ptr fde_count; + + p = read_encoded_value_with_base (hdr->fde_count_enc, + base_from_cb_data (hdr->fde_count_enc, + data), + p, &fde_count); + /* Shouldn't happen. */ + if (fde_count == 0) + return 1; + if ((((_Unwind_Ptr) p) & 3) == 0) + { + struct fde_table { + signed initial_loc __attribute__ ((mode (SI))); + signed fde __attribute__ ((mode (SI))); + }; + const struct fde_table *table = (const struct fde_table *) p; + size_t lo, hi, mid; + _Unwind_Ptr data_base = (_Unwind_Ptr) hdr; + fde *f; + unsigned int f_enc, f_enc_size; + _Unwind_Ptr range; + + mid = fde_count - 1; + if (data->pc < table[0].initial_loc + data_base) + return 1; + else if (data->pc < table[mid].initial_loc + data_base) + { + lo = 0; + hi = mid; + + while (lo < hi) + { + mid = (lo + hi) / 2; + if (data->pc < table[mid].initial_loc + data_base) + hi = mid; + else if (data->pc >= table[mid + 1].initial_loc + data_base) + lo = mid + 1; + else + break; + } + + gcc_assert (lo < hi); + } + + f = (fde *) (table[mid].fde + data_base); + f_enc = get_fde_encoding (f); + f_enc_size = size_of_encoded_value (f_enc); + read_encoded_value_with_base (f_enc & 0x0f, 0, + &f->pc_begin[f_enc_size], &range); + if (data->pc < table[mid].initial_loc + data_base + range) + data->ret = f; + data->func = (void *) (table[mid].initial_loc + data_base); + return 1; + } + } + + /* We have no sorted search table, so need to go the slow way. + As soon as GLIBC will provide API so to notify that a library has been + removed, we could cache this (and thus use search_object). */ + ob.pc_begin = NULL; + ob.tbase = data->tbase; + ob.dbase = data->dbase; + ob.u.single = (fde *) eh_frame; + ob.s.i = 0; + ob.s.b.mixed_encoding = 1; /* Need to assume worst case. */ + data->ret = linear_search_fdes (&ob, (fde *) eh_frame, (void *) data->pc); + if (data->ret != NULL) + { + _Unwind_Ptr func; + unsigned int encoding = get_fde_encoding (data->ret); + + read_encoded_value_with_base (encoding, + base_from_cb_data (encoding, data), + data->ret->pc_begin, &func); + data->func = (void *) func; + } + return 1; +} + +const fde * +_Unwind_Find_FDE (void *pc, struct dwarf_eh_bases *bases) +{ + struct unw_eh_callback_data data; + const fde *ret; + + ret = _Unwind_Find_registered_FDE (pc, bases); + if (ret != NULL) + return ret; + + data.pc = (_Unwind_Ptr) pc; + data.tbase = NULL; + data.dbase = NULL; + data.func = NULL; + data.ret = NULL; + data.check_cache = 1; + + if (dl_iterate_phdr (_Unwind_IteratePhdrCallback, &data) < 0) + return NULL; + + if (data.ret) + { + bases->tbase = data.tbase; + bases->dbase = data.dbase; + bases->func = data.func; + } + return data.ret; +} + +#else +/* Prevent multiple include of header files. */ +#define _Unwind_Find_FDE _Unwind_Find_FDE +#include "unwind-dw2-fde.c" +#endif + +#if defined (USE_GAS_SYMVER) && defined (SHARED) && defined (USE_LIBUNWIND_EXCEPTIONS) +alias (_Unwind_Find_FDE); +#endif diff --git a/contrib/toolchain/gcc/5x/libgcc/unwind-dw2-fde.c b/contrib/toolchain/gcc/5x/libgcc/unwind-dw2-fde.c new file mode 100644 index 0000000000..0bcf51661b --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/unwind-dw2-fde.c @@ -0,0 +1,1058 @@ +/* Subroutines needed for unwinding stack frames for exception handling. */ +/* Copyright (C) 1997-2015 Free Software Foundation, Inc. + Contributed by Jason Merrill . + +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 _Unwind_Find_FDE +#include "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" +#include "dwarf2.h" +#include "unwind.h" +#define NO_BASE_OF_ENCODED_VALUE +#include "unwind-pe.h" +#include "unwind-dw2-fde.h" +#include "gthr.h" +#endif + +/* The unseen_objects list contains objects that have been registered + but not yet categorized in any way. The seen_objects list has had + its pc_begin and count fields initialized at minimum, and is sorted + by decreasing value of pc_begin. */ +static struct object *unseen_objects; +static struct object *seen_objects; + +#ifdef __GTHREAD_MUTEX_INIT +static __gthread_mutex_t object_mutex = __GTHREAD_MUTEX_INIT; +#define init_object_mutex_once() +#else +#ifdef __GTHREAD_MUTEX_INIT_FUNCTION +static __gthread_mutex_t object_mutex; + +static void +init_object_mutex (void) +{ + __GTHREAD_MUTEX_INIT_FUNCTION (&object_mutex); +} + +static void +init_object_mutex_once (void) +{ + static __gthread_once_t once = __GTHREAD_ONCE_INIT; + __gthread_once (&once, init_object_mutex); +} +#else +/* ??? Several targets include this file with stubbing parts of gthr.h + and expect no locking to be done. */ +#define init_object_mutex_once() +static __gthread_mutex_t object_mutex; +#endif +#endif + +/* Called from crtbegin.o to register the unwind info for an object. */ + +void +__register_frame_info_bases (const void *begin, struct object *ob, + void *tbase, void *dbase) +{ + /* If .eh_frame is empty, don't register at all. */ + if ((const uword *) begin == 0 || *(const uword *) begin == 0) + return; + + ob->pc_begin = (void *)-1; + ob->tbase = tbase; + ob->dbase = dbase; + ob->u.single = begin; + ob->s.i = 0; + ob->s.b.encoding = DW_EH_PE_omit; +#ifdef DWARF2_OBJECT_END_PTR_EXTENSION + ob->fde_end = NULL; +#endif + + init_object_mutex_once (); + __gthread_mutex_lock (&object_mutex); + + ob->next = unseen_objects; + unseen_objects = ob; + + __gthread_mutex_unlock (&object_mutex); +} + +void +__register_frame_info (const void *begin, struct object *ob) +{ + __register_frame_info_bases (begin, ob, 0, 0); +} + +void +__register_frame (void *begin) +{ + struct object *ob; + + /* If .eh_frame is empty, don't register at all. */ + if (*(uword *) begin == 0) + return; + + ob = malloc (sizeof (struct object)); + __register_frame_info (begin, ob); +} + +/* Similar, but BEGIN is actually a pointer to a table of unwind entries + for different translation units. Called from the file generated by + collect2. */ + +void +__register_frame_info_table_bases (void *begin, struct object *ob, + void *tbase, void *dbase) +{ + ob->pc_begin = (void *)-1; + ob->tbase = tbase; + ob->dbase = dbase; + ob->u.array = begin; + ob->s.i = 0; + ob->s.b.from_array = 1; + ob->s.b.encoding = DW_EH_PE_omit; + + init_object_mutex_once (); + __gthread_mutex_lock (&object_mutex); + + ob->next = unseen_objects; + unseen_objects = ob; + + __gthread_mutex_unlock (&object_mutex); +} + +void +__register_frame_info_table (void *begin, struct object *ob) +{ + __register_frame_info_table_bases (begin, ob, 0, 0); +} + +void +__register_frame_table (void *begin) +{ + struct object *ob = malloc (sizeof (struct object)); + __register_frame_info_table (begin, ob); +} + +/* Called from crtbegin.o to deregister the unwind info for an object. */ +/* ??? Glibc has for a while now exported __register_frame_info and + __deregister_frame_info. If we call __register_frame_info_bases + from crtbegin (wherein it is declared weak), and this object does + not get pulled from libgcc.a for other reasons, then the + invocation of __deregister_frame_info will be resolved from glibc. + Since the registration did not happen there, we'll die. + + Therefore, declare a new deregistration entry point that does the + exact same thing, but will resolve to the same library as + implements __register_frame_info_bases. */ + +void * +__deregister_frame_info_bases (const void *begin) +{ + struct object **p; + struct object *ob = 0; + + /* If .eh_frame is empty, we haven't registered. */ + if ((const uword *) begin == 0 || *(const uword *) begin == 0) + return ob; + + init_object_mutex_once (); + __gthread_mutex_lock (&object_mutex); + + for (p = &unseen_objects; *p ; p = &(*p)->next) + if ((*p)->u.single == begin) + { + ob = *p; + *p = ob->next; + goto out; + } + + for (p = &seen_objects; *p ; p = &(*p)->next) + if ((*p)->s.b.sorted) + { + if ((*p)->u.sort->orig_data == begin) + { + ob = *p; + *p = ob->next; + free (ob->u.sort); + goto out; + } + } + else + { + if ((*p)->u.single == begin) + { + ob = *p; + *p = ob->next; + goto out; + } + } + + out: + __gthread_mutex_unlock (&object_mutex); + gcc_assert (ob); + return (void *) ob; +} + +void * +__deregister_frame_info (const void *begin) +{ + return __deregister_frame_info_bases (begin); +} + +void +__deregister_frame (void *begin) +{ + /* If .eh_frame is empty, we haven't registered. */ + if (*(uword *) begin != 0) + free (__deregister_frame_info (begin)); +} + + +/* Like base_of_encoded_value, but take the base from a struct object + instead of an _Unwind_Context. */ + +static _Unwind_Ptr +base_from_object (unsigned char encoding, struct object *ob) +{ + if (encoding == DW_EH_PE_omit) + return 0; + + switch (encoding & 0x70) + { + case DW_EH_PE_absptr: + case DW_EH_PE_pcrel: + case DW_EH_PE_aligned: + return 0; + + case DW_EH_PE_textrel: + return (_Unwind_Ptr) ob->tbase; + case DW_EH_PE_datarel: + return (_Unwind_Ptr) ob->dbase; + default: + gcc_unreachable (); + } +} + +/* Return the FDE pointer encoding from the CIE. */ +/* ??? This is a subset of extract_cie_info from unwind-dw2.c. */ + +static int +get_cie_encoding (const struct dwarf_cie *cie) +{ + const unsigned char *aug, *p; + _Unwind_Ptr dummy; + _uleb128_t utmp; + _sleb128_t stmp; + + aug = cie->augmentation; + p = aug + strlen ((const char *)aug) + 1; /* Skip the augmentation string. */ + if (__builtin_expect (cie->version >= 4, 0)) + { + if (p[0] != sizeof (void *) || p[1] != 0) + return DW_EH_PE_omit; /* We are not prepared to handle unexpected + address sizes or segment selectors. */ + p += 2; /* Skip address size and segment size. */ + } + + if (aug[0] != 'z') + return DW_EH_PE_absptr; + + p = read_uleb128 (p, &utmp); /* Skip code alignment. */ + p = read_sleb128 (p, &stmp); /* Skip data alignment. */ + if (cie->version == 1) /* Skip return address column. */ + p++; + else + p = read_uleb128 (p, &utmp); + + aug++; /* Skip 'z' */ + p = read_uleb128 (p, &utmp); /* Skip augmentation length. */ + while (1) + { + /* This is what we're looking for. */ + if (*aug == 'R') + return *p; + /* Personality encoding and pointer. */ + else if (*aug == 'P') + { + /* ??? Avoid dereferencing indirect pointers, since we're + faking the base address. Gotta keep DW_EH_PE_aligned + intact, however. */ + p = read_encoded_value_with_base (*p & 0x7F, 0, p + 1, &dummy); + } + /* LSDA encoding. */ + else if (*aug == 'L') + p++; + /* Otherwise end of string, or unknown augmentation. */ + else + return DW_EH_PE_absptr; + aug++; + } +} + +static inline int +get_fde_encoding (const struct dwarf_fde *f) +{ + return get_cie_encoding (get_cie (f)); +} + + +/* Sorting an array of FDEs by address. + (Ideally we would have the linker sort the FDEs so we don't have to do + it at run time. But the linkers are not yet prepared for this.) */ + +/* Comparison routines. Three variants of increasing complexity. */ + +static int +fde_unencoded_compare (struct object *ob __attribute__((unused)), + const fde *x, const fde *y) +{ + _Unwind_Ptr x_ptr, y_ptr; + memcpy (&x_ptr, x->pc_begin, sizeof (_Unwind_Ptr)); + memcpy (&y_ptr, y->pc_begin, sizeof (_Unwind_Ptr)); + + if (x_ptr > y_ptr) + return 1; + if (x_ptr < y_ptr) + return -1; + return 0; +} + +static int +fde_single_encoding_compare (struct object *ob, const fde *x, const fde *y) +{ + _Unwind_Ptr base, x_ptr, y_ptr; + + base = base_from_object (ob->s.b.encoding, ob); + read_encoded_value_with_base (ob->s.b.encoding, base, x->pc_begin, &x_ptr); + read_encoded_value_with_base (ob->s.b.encoding, base, y->pc_begin, &y_ptr); + + if (x_ptr > y_ptr) + return 1; + if (x_ptr < y_ptr) + return -1; + return 0; +} + +static int +fde_mixed_encoding_compare (struct object *ob, const fde *x, const fde *y) +{ + int x_encoding, y_encoding; + _Unwind_Ptr x_ptr, y_ptr; + + x_encoding = get_fde_encoding (x); + read_encoded_value_with_base (x_encoding, base_from_object (x_encoding, ob), + x->pc_begin, &x_ptr); + + y_encoding = get_fde_encoding (y); + read_encoded_value_with_base (y_encoding, base_from_object (y_encoding, ob), + y->pc_begin, &y_ptr); + + if (x_ptr > y_ptr) + return 1; + if (x_ptr < y_ptr) + return -1; + return 0; +} + +typedef int (*fde_compare_t) (struct object *, const fde *, const fde *); + + +/* This is a special mix of insertion sort and heap sort, optimized for + the data sets that actually occur. They look like + 101 102 103 127 128 105 108 110 190 111 115 119 125 160 126 129 130. + I.e. a linearly increasing sequence (coming from functions in the text + section), with additionally a few unordered elements (coming from functions + in gnu_linkonce sections) whose values are higher than the values in the + surrounding linear sequence (but not necessarily higher than the values + at the end of the linear sequence!). + The worst-case total run time is O(N) + O(n log (n)), where N is the + total number of FDEs and n is the number of erratic ones. */ + +struct fde_accumulator +{ + struct fde_vector *linear; + struct fde_vector *erratic; +}; + +static inline int +start_fde_sort (struct fde_accumulator *accu, size_t count) +{ + size_t size; + if (! count) + return 0; + + size = sizeof (struct fde_vector) + sizeof (const fde *) * count; + if ((accu->linear = malloc (size))) + { + accu->linear->count = 0; + if ((accu->erratic = malloc (size))) + accu->erratic->count = 0; + return 1; + } + else + return 0; +} + +static inline void +fde_insert (struct fde_accumulator *accu, const fde *this_fde) +{ + if (accu->linear) + accu->linear->array[accu->linear->count++] = this_fde; +} + +/* Split LINEAR into a linear sequence with low values and an erratic + sequence with high values, put the linear one (of longest possible + length) into LINEAR and the erratic one into ERRATIC. This is O(N). + + Because the longest linear sequence we are trying to locate within the + incoming LINEAR array can be interspersed with (high valued) erratic + entries. We construct a chain indicating the sequenced entries. + To avoid having to allocate this chain, we overlay it onto the space of + the ERRATIC array during construction. A final pass iterates over the + chain to determine what should be placed in the ERRATIC array, and + what is the linear sequence. This overlay is safe from aliasing. */ + +static inline void +fde_split (struct object *ob, fde_compare_t fde_compare, + struct fde_vector *linear, struct fde_vector *erratic) +{ + static const fde *marker; + size_t count = linear->count; + const fde *const *chain_end = ▮ + size_t i, j, k; + + /* This should optimize out, but it is wise to make sure this assumption + is correct. Should these have different sizes, we cannot cast between + them and the overlaying onto ERRATIC will not work. */ + gcc_assert (sizeof (const fde *) == sizeof (const fde **)); + + for (i = 0; i < count; i++) + { + const fde *const *probe; + + for (probe = chain_end; + probe != &marker && fde_compare (ob, linear->array[i], *probe) < 0; + probe = chain_end) + { + chain_end = (const fde *const*) erratic->array[probe - linear->array]; + erratic->array[probe - linear->array] = NULL; + } + erratic->array[i] = (const fde *) chain_end; + chain_end = &linear->array[i]; + } + + /* Each entry in LINEAR which is part of the linear sequence we have + discovered will correspond to a non-NULL entry in the chain we built in + the ERRATIC array. */ + for (i = j = k = 0; i < count; i++) + if (erratic->array[i]) + linear->array[j++] = linear->array[i]; + else + erratic->array[k++] = linear->array[i]; + linear->count = j; + erratic->count = k; +} + +#define SWAP(x,y) do { const fde * tmp = x; x = y; y = tmp; } while (0) + +/* Convert a semi-heap to a heap. A semi-heap is a heap except possibly + for the first (root) node; push it down to its rightful place. */ + +static void +frame_downheap (struct object *ob, fde_compare_t fde_compare, const fde **a, + int lo, int hi) +{ + int i, j; + + for (i = lo, j = 2*i+1; + j < hi; + j = 2*i+1) + { + if (j+1 < hi && fde_compare (ob, a[j], a[j+1]) < 0) + ++j; + + if (fde_compare (ob, a[i], a[j]) < 0) + { + SWAP (a[i], a[j]); + i = j; + } + else + break; + } +} + +/* This is O(n log(n)). BSD/OS defines heapsort in stdlib.h, so we must + use a name that does not conflict. */ + +static void +frame_heapsort (struct object *ob, fde_compare_t fde_compare, + struct fde_vector *erratic) +{ + /* For a description of this algorithm, see: + Samuel P. Harbison, Guy L. Steele Jr.: C, a reference manual, 2nd ed., + p. 60-61. */ + const fde ** a = erratic->array; + /* A portion of the array is called a "heap" if for all i>=0: + If i and 2i+1 are valid indices, then a[i] >= a[2i+1]. + If i and 2i+2 are valid indices, then a[i] >= a[2i+2]. */ + size_t n = erratic->count; + int m; + + /* Expand our heap incrementally from the end of the array, heapifying + each resulting semi-heap as we go. After each step, a[m] is the top + of a heap. */ + for (m = n/2-1; m >= 0; --m) + frame_downheap (ob, fde_compare, a, m, n); + + /* Shrink our heap incrementally from the end of the array, first + swapping out the largest element a[0] and then re-heapifying the + resulting semi-heap. After each step, a[0..m) is a heap. */ + for (m = n-1; m >= 1; --m) + { + SWAP (a[0], a[m]); + frame_downheap (ob, fde_compare, a, 0, m); + } +#undef SWAP +} + +/* Merge V1 and V2, both sorted, and put the result into V1. */ +static inline void +fde_merge (struct object *ob, fde_compare_t fde_compare, + struct fde_vector *v1, struct fde_vector *v2) +{ + size_t i1, i2; + const fde * fde2; + + i2 = v2->count; + if (i2 > 0) + { + i1 = v1->count; + do + { + i2--; + fde2 = v2->array[i2]; + while (i1 > 0 && fde_compare (ob, v1->array[i1-1], fde2) > 0) + { + v1->array[i1+i2] = v1->array[i1-1]; + i1--; + } + v1->array[i1+i2] = fde2; + } + while (i2 > 0); + v1->count += v2->count; + } +} + +static inline void +end_fde_sort (struct object *ob, struct fde_accumulator *accu, size_t count) +{ + fde_compare_t fde_compare; + + gcc_assert (!accu->linear || accu->linear->count == count); + + if (ob->s.b.mixed_encoding) + fde_compare = fde_mixed_encoding_compare; + else if (ob->s.b.encoding == DW_EH_PE_absptr) + fde_compare = fde_unencoded_compare; + else + fde_compare = fde_single_encoding_compare; + + if (accu->erratic) + { + fde_split (ob, fde_compare, accu->linear, accu->erratic); + gcc_assert (accu->linear->count + accu->erratic->count == count); + frame_heapsort (ob, fde_compare, accu->erratic); + fde_merge (ob, fde_compare, accu->linear, accu->erratic); + free (accu->erratic); + } + else + { + /* We've not managed to malloc an erratic array, + so heap sort in the linear one. */ + frame_heapsort (ob, fde_compare, accu->linear); + } +} + + +/* Update encoding, mixed_encoding, and pc_begin for OB for the + fde array beginning at THIS_FDE. Return the number of fdes + encountered along the way. */ + +static size_t +classify_object_over_fdes (struct object *ob, const fde *this_fde) +{ + const struct dwarf_cie *last_cie = 0; + size_t count = 0; + int encoding = DW_EH_PE_absptr; + _Unwind_Ptr base = 0; + + for (; ! last_fde (ob, this_fde); this_fde = next_fde (this_fde)) + { + const struct dwarf_cie *this_cie; + _Unwind_Ptr mask, pc_begin; + + /* Skip CIEs. */ + if (this_fde->CIE_delta == 0) + continue; + + /* Determine the encoding for this FDE. Note mixed encoded + objects for later. */ + this_cie = get_cie (this_fde); + if (this_cie != last_cie) + { + last_cie = this_cie; + encoding = get_cie_encoding (this_cie); + if (encoding == DW_EH_PE_omit) + return -1; + base = base_from_object (encoding, ob); + if (ob->s.b.encoding == DW_EH_PE_omit) + ob->s.b.encoding = encoding; + else if (ob->s.b.encoding != encoding) + ob->s.b.mixed_encoding = 1; + } + + read_encoded_value_with_base (encoding, base, this_fde->pc_begin, + &pc_begin); + + /* Take care to ignore link-once functions that were removed. + In these cases, the function address will be NULL, but if + the encoding is smaller than a pointer a true NULL may not + be representable. Assume 0 in the representable bits is NULL. */ + mask = size_of_encoded_value (encoding); + if (mask < sizeof (void *)) + mask = (((_Unwind_Ptr) 1) << (mask << 3)) - 1; + else + mask = -1; + + if ((pc_begin & mask) == 0) + continue; + + count += 1; + if ((void *) pc_begin < ob->pc_begin) + ob->pc_begin = (void *) pc_begin; + } + + return count; +} + +static void +add_fdes (struct object *ob, struct fde_accumulator *accu, const fde *this_fde) +{ + const struct dwarf_cie *last_cie = 0; + int encoding = ob->s.b.encoding; + _Unwind_Ptr base = base_from_object (ob->s.b.encoding, ob); + + for (; ! last_fde (ob, this_fde); this_fde = next_fde (this_fde)) + { + const struct dwarf_cie *this_cie; + + /* Skip CIEs. */ + if (this_fde->CIE_delta == 0) + continue; + + if (ob->s.b.mixed_encoding) + { + /* Determine the encoding for this FDE. Note mixed encoded + objects for later. */ + this_cie = get_cie (this_fde); + if (this_cie != last_cie) + { + last_cie = this_cie; + encoding = get_cie_encoding (this_cie); + base = base_from_object (encoding, ob); + } + } + + if (encoding == DW_EH_PE_absptr) + { + _Unwind_Ptr ptr; + memcpy (&ptr, this_fde->pc_begin, sizeof (_Unwind_Ptr)); + if (ptr == 0) + continue; + } + else + { + _Unwind_Ptr pc_begin, mask; + + read_encoded_value_with_base (encoding, base, this_fde->pc_begin, + &pc_begin); + + /* Take care to ignore link-once functions that were removed. + In these cases, the function address will be NULL, but if + the encoding is smaller than a pointer a true NULL may not + be representable. Assume 0 in the representable bits is NULL. */ + mask = size_of_encoded_value (encoding); + if (mask < sizeof (void *)) + mask = (((_Unwind_Ptr) 1) << (mask << 3)) - 1; + else + mask = -1; + + if ((pc_begin & mask) == 0) + continue; + } + + fde_insert (accu, this_fde); + } +} + +/* Set up a sorted array of pointers to FDEs for a loaded object. We + count up the entries before allocating the array because it's likely to + be faster. We can be called multiple times, should we have failed to + allocate a sorted fde array on a previous occasion. */ + +static inline void +init_object (struct object* ob) +{ + struct fde_accumulator accu; + size_t count; + + count = ob->s.b.count; + if (count == 0) + { + if (ob->s.b.from_array) + { + fde **p = ob->u.array; + for (count = 0; *p; ++p) + { + size_t cur_count = classify_object_over_fdes (ob, *p); + if (cur_count == (size_t) -1) + goto unhandled_fdes; + count += cur_count; + } + } + else + { + count = classify_object_over_fdes (ob, ob->u.single); + if (count == (size_t) -1) + { + static const fde terminator; + unhandled_fdes: + ob->s.i = 0; + ob->s.b.encoding = DW_EH_PE_omit; + ob->u.single = &terminator; + return; + } + } + + /* The count field we have in the main struct object is somewhat + limited, but should suffice for virtually all cases. If the + counted value doesn't fit, re-write a zero. The worst that + happens is that we re-count next time -- admittedly non-trivial + in that this implies some 2M fdes, but at least we function. */ + ob->s.b.count = count; + if (ob->s.b.count != count) + ob->s.b.count = 0; + } + + if (!start_fde_sort (&accu, count)) + return; + + if (ob->s.b.from_array) + { + fde **p; + for (p = ob->u.array; *p; ++p) + add_fdes (ob, &accu, *p); + } + else + add_fdes (ob, &accu, ob->u.single); + + end_fde_sort (ob, &accu, count); + + /* Save the original fde pointer, since this is the key by which the + DSO will deregister the object. */ + accu.linear->orig_data = ob->u.single; + ob->u.sort = accu.linear; + + ob->s.b.sorted = 1; +} + +/* A linear search through a set of FDEs for the given PC. This is + used when there was insufficient memory to allocate and sort an + array. */ + +static const fde * +linear_search_fdes (struct object *ob, const fde *this_fde, void *pc) +{ + const struct dwarf_cie *last_cie = 0; + int encoding = ob->s.b.encoding; + _Unwind_Ptr base = base_from_object (ob->s.b.encoding, ob); + + for (; ! last_fde (ob, this_fde); this_fde = next_fde (this_fde)) + { + const struct dwarf_cie *this_cie; + _Unwind_Ptr pc_begin, pc_range; + + /* Skip CIEs. */ + if (this_fde->CIE_delta == 0) + continue; + + if (ob->s.b.mixed_encoding) + { + /* Determine the encoding for this FDE. Note mixed encoded + objects for later. */ + this_cie = get_cie (this_fde); + if (this_cie != last_cie) + { + last_cie = this_cie; + encoding = get_cie_encoding (this_cie); + base = base_from_object (encoding, ob); + } + } + + if (encoding == DW_EH_PE_absptr) + { + const _Unwind_Ptr *pc_array = (const _Unwind_Ptr *) this_fde->pc_begin; + pc_begin = pc_array[0]; + pc_range = pc_array[1]; + if (pc_begin == 0) + continue; + } + else + { + _Unwind_Ptr mask; + const unsigned char *p; + + p = read_encoded_value_with_base (encoding, base, + this_fde->pc_begin, &pc_begin); + read_encoded_value_with_base (encoding & 0x0F, 0, p, &pc_range); + + /* Take care to ignore link-once functions that were removed. + In these cases, the function address will be NULL, but if + the encoding is smaller than a pointer a true NULL may not + be representable. Assume 0 in the representable bits is NULL. */ + mask = size_of_encoded_value (encoding); + if (mask < sizeof (void *)) + mask = (((_Unwind_Ptr) 1) << (mask << 3)) - 1; + else + mask = -1; + + if ((pc_begin & mask) == 0) + continue; + } + + if ((_Unwind_Ptr) pc - pc_begin < pc_range) + return this_fde; + } + + return NULL; +} + +/* Binary search for an FDE containing the given PC. Here are three + implementations of increasing complexity. */ + +static inline const fde * +binary_search_unencoded_fdes (struct object *ob, void *pc) +{ + struct fde_vector *vec = ob->u.sort; + size_t lo, hi; + + for (lo = 0, hi = vec->count; lo < hi; ) + { + size_t i = (lo + hi) / 2; + const fde *const f = vec->array[i]; + void *pc_begin; + uaddr pc_range; + memcpy (&pc_begin, (const void * const *) f->pc_begin, sizeof (void *)); + memcpy (&pc_range, (const uaddr *) f->pc_begin + 1, sizeof (uaddr)); + + if (pc < pc_begin) + hi = i; + else if (pc >= pc_begin + pc_range) + lo = i + 1; + else + return f; + } + + return NULL; +} + +static inline const fde * +binary_search_single_encoding_fdes (struct object *ob, void *pc) +{ + struct fde_vector *vec = ob->u.sort; + int encoding = ob->s.b.encoding; + _Unwind_Ptr base = base_from_object (encoding, ob); + size_t lo, hi; + + for (lo = 0, hi = vec->count; lo < hi; ) + { + size_t i = (lo + hi) / 2; + const fde *f = vec->array[i]; + _Unwind_Ptr pc_begin, pc_range; + const unsigned char *p; + + p = read_encoded_value_with_base (encoding, base, f->pc_begin, + &pc_begin); + read_encoded_value_with_base (encoding & 0x0F, 0, p, &pc_range); + + if ((_Unwind_Ptr) pc < pc_begin) + hi = i; + else if ((_Unwind_Ptr) pc >= pc_begin + pc_range) + lo = i + 1; + else + return f; + } + + return NULL; +} + +static inline const fde * +binary_search_mixed_encoding_fdes (struct object *ob, void *pc) +{ + struct fde_vector *vec = ob->u.sort; + size_t lo, hi; + + for (lo = 0, hi = vec->count; lo < hi; ) + { + size_t i = (lo + hi) / 2; + const fde *f = vec->array[i]; + _Unwind_Ptr pc_begin, pc_range; + const unsigned char *p; + int encoding; + + encoding = get_fde_encoding (f); + p = read_encoded_value_with_base (encoding, + base_from_object (encoding, ob), + f->pc_begin, &pc_begin); + read_encoded_value_with_base (encoding & 0x0F, 0, p, &pc_range); + + if ((_Unwind_Ptr) pc < pc_begin) + hi = i; + else if ((_Unwind_Ptr) pc >= pc_begin + pc_range) + lo = i + 1; + else + return f; + } + + return NULL; +} + +static const fde * +search_object (struct object* ob, void *pc) +{ + /* If the data hasn't been sorted, try to do this now. We may have + more memory available than last time we tried. */ + if (! ob->s.b.sorted) + { + init_object (ob); + + /* Despite the above comment, the normal reason to get here is + that we've not processed this object before. A quick range + check is in order. */ + if (pc < ob->pc_begin) + return NULL; + } + + if (ob->s.b.sorted) + { + if (ob->s.b.mixed_encoding) + return binary_search_mixed_encoding_fdes (ob, pc); + else if (ob->s.b.encoding == DW_EH_PE_absptr) + return binary_search_unencoded_fdes (ob, pc); + else + return binary_search_single_encoding_fdes (ob, pc); + } + else + { + /* Long slow laborious linear search, cos we've no memory. */ + if (ob->s.b.from_array) + { + fde **p; + for (p = ob->u.array; *p ; p++) + { + const fde *f = linear_search_fdes (ob, *p, pc); + if (f) + return f; + } + return NULL; + } + else + return linear_search_fdes (ob, ob->u.single, pc); + } +} + +const fde * +_Unwind_Find_FDE (void *pc, struct dwarf_eh_bases *bases) +{ + struct object *ob; + const fde *f = NULL; + + init_object_mutex_once (); + __gthread_mutex_lock (&object_mutex); + + /* Linear search through the classified objects, to find the one + containing the pc. Note that pc_begin is sorted descending, and + we expect objects to be non-overlapping. */ + for (ob = seen_objects; ob; ob = ob->next) + if (pc >= ob->pc_begin) + { + f = search_object (ob, pc); + if (f) + goto fini; + break; + } + + /* Classify and search the objects we've not yet processed. */ + while ((ob = unseen_objects)) + { + struct object **p; + + unseen_objects = ob->next; + f = search_object (ob, pc); + + /* Insert the object into the classified list. */ + for (p = &seen_objects; *p ; p = &(*p)->next) + if ((*p)->pc_begin < ob->pc_begin) + break; + ob->next = *p; + *p = ob; + + if (f) + goto fini; + } + + fini: + __gthread_mutex_unlock (&object_mutex); + + if (f) + { + int encoding; + _Unwind_Ptr func; + + bases->tbase = ob->tbase; + bases->dbase = ob->dbase; + + encoding = ob->s.b.encoding; + if (ob->s.b.mixed_encoding) + encoding = get_fde_encoding (f); + read_encoded_value_with_base (encoding, base_from_object (encoding, ob), + f->pc_begin, &func); + bases->func = (void *) func; + } + + return f; +} diff --git a/contrib/toolchain/gcc/5x/libgcc/unwind-dw2-fde.h b/contrib/toolchain/gcc/5x/libgcc/unwind-dw2-fde.h new file mode 100644 index 0000000000..9d01f572a2 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/unwind-dw2-fde.h @@ -0,0 +1,182 @@ +/* Subroutines needed for unwinding stack frames for exception handling. */ +/* Copyright (C) 1997-2015 Free Software Foundation, Inc. + Contributed by Jason Merrill . + +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 GCC_UNWIND_DW2_FDE_H +#define GCC_UNWIND_DW2_FDE_H + +#ifndef HIDE_EXPORTS +#pragma GCC visibility push(default) +#endif + +struct fde_vector +{ + const void *orig_data; + size_t count; + const struct dwarf_fde *array[]; +}; + +struct object +{ + void *pc_begin; + void *tbase; + void *dbase; + union { + const struct dwarf_fde *single; + struct dwarf_fde **array; + struct fde_vector *sort; + } u; + + union { + struct { + unsigned long sorted : 1; + unsigned long from_array : 1; + unsigned long mixed_encoding : 1; + unsigned long encoding : 8; + /* ??? Wish there was an easy way to detect a 64-bit host here; + we've got 32 bits left to play with... */ + unsigned long count : 21; + } b; + size_t i; + } s; + +#ifdef DWARF2_OBJECT_END_PTR_EXTENSION + char *fde_end; +#endif + + struct object *next; +}; + +/* This is the original definition of struct object. While the struct + itself was opaque to users, they did know how large it was, and + allocate one statically in crtbegin for each DSO. Keep this around + so that we're aware of the static size limitations for the new struct. */ +struct old_object +{ + void *pc_begin; + void *pc_end; + struct dwarf_fde *fde_begin; + struct dwarf_fde **fde_array; + size_t count; + struct old_object *next; +}; + +struct dwarf_eh_bases +{ + void *tbase; + void *dbase; + void *func; +}; + + +extern void __register_frame_info_bases (const void *, struct object *, + void *, void *); +extern void __register_frame_info (const void *, struct object *); +extern void __register_frame (void *); +extern void __register_frame_info_table_bases (void *, struct object *, + void *, void *); +extern void __register_frame_info_table (void *, struct object *); +extern void __register_frame_table (void *); +extern void *__deregister_frame_info (const void *); +extern void *__deregister_frame_info_bases (const void *); +extern void __deregister_frame (void *); + + +typedef int sword __attribute__ ((mode (SI))); +typedef unsigned int uword __attribute__ ((mode (SI))); +typedef unsigned int uaddr __attribute__ ((mode (pointer))); +typedef int saddr __attribute__ ((mode (pointer))); +typedef unsigned char ubyte; + +/* Terminology: + CIE - Common Information Element + FDE - Frame Descriptor Element + + There is one per function, and it describes where the function code + is located, and what the register lifetimes and stack layout are + within the function. + + The data structures are defined in the DWARF specification, although + not in a very readable way (see LITERATURE). + + Every time an exception is thrown, the code needs to locate the FDE + for the current function, and starts to look for exception regions + from that FDE. This works in a two-level search: + a) in a linear search, find the shared image (i.e. DLL) containing + the PC + b) using the FDE table for that shared object, locate the FDE using + binary search (which requires the sorting). */ + +/* The first few fields of a CIE. The CIE_id field is 0 for a CIE, + to distinguish it from a valid FDE. FDEs are aligned to an addressing + unit boundary, but the fields within are unaligned. */ +struct dwarf_cie +{ + uword length; + sword CIE_id; + ubyte version; + unsigned char augmentation[]; +} __attribute__ ((packed, aligned (__alignof__ (void *)))); + +/* The first few fields of an FDE. */ +struct dwarf_fde +{ + uword length; + sword CIE_delta; + unsigned char pc_begin[]; +} __attribute__ ((packed, aligned (__alignof__ (void *)))); + +typedef struct dwarf_fde fde; + +/* Locate the CIE for a given FDE. */ + +static inline const struct dwarf_cie * +get_cie (const struct dwarf_fde *f) +{ + return (const void *)&f->CIE_delta - f->CIE_delta; +} + +static inline const fde * +next_fde (const fde *f) +{ + return (const fde *) ((const char *) f + f->length + sizeof (f->length)); +} + +extern const fde * _Unwind_Find_FDE (void *, struct dwarf_eh_bases *); + +static inline int +last_fde (struct object *obj __attribute__ ((__unused__)), const fde *f) +{ +#ifdef DWARF2_OBJECT_END_PTR_EXTENSION + return f == (const fde *) obj->fde_end || f->length == 0; +#else + return f->length == 0; +#endif +} + +#ifndef HIDE_EXPORTS +#pragma GCC visibility pop +#endif + +#endif /* unwind-dw2-fde.h */ diff --git a/contrib/toolchain/gcc/5x/libgcc/unwind-dw2.c b/contrib/toolchain/gcc/5x/libgcc/unwind-dw2.c new file mode 100644 index 0000000000..6483c2bd6a --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/unwind-dw2.c @@ -0,0 +1,1715 @@ +/* DWARF2 exception handling and frame unwind runtime interface routines. + Copyright (C) 1997-2015 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 "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" +#include "dwarf2.h" +#include "unwind.h" +#ifdef __USING_SJLJ_EXCEPTIONS__ +# define NO_SIZE_OF_ENCODED_VALUE +#endif +#include "unwind-pe.h" +#include "unwind-dw2-fde.h" +#include "gthr.h" +#include "unwind-dw2.h" + +#ifdef HAVE_SYS_SDT_H +#include +#endif + +#ifndef __USING_SJLJ_EXCEPTIONS__ + +#ifndef __LIBGCC_STACK_GROWS_DOWNWARD__ +#define __LIBGCC_STACK_GROWS_DOWNWARD__ 0 +#else +#undef __LIBGCC_STACK_GROWS_DOWNWARD__ +#define __LIBGCC_STACK_GROWS_DOWNWARD__ 1 +#endif + +/* Dwarf frame registers used for pre gcc 3.0 compiled glibc. */ +#ifndef PRE_GCC3_DWARF_FRAME_REGISTERS +#define PRE_GCC3_DWARF_FRAME_REGISTERS __LIBGCC_DWARF_FRAME_REGISTERS__ +#endif + +/* ??? For the public function interfaces, we tend to gcc_assert that the + column numbers are in range. For the dwarf2 unwind info this does happen, + although so far in a case that doesn't actually matter. + + See PR49146, in which a call from x86_64 ms abi to x86_64 unix abi stores + the call-saved xmm registers and annotates them. We havn't bothered + providing support for the xmm registers for the x86_64 port primarily + because the 64-bit windows targets don't use dwarf2 unwind, using sjlj or + SEH instead. Adding the support for unix targets would generally be a + waste. However, some runtime libraries supplied with ICC do contain such + an unorthodox transition, as well as the unwind info to match. This loss + of register restoration doesn't matter in practice, because the exception + is caught in the native unix abi, where all of the xmm registers are + call clobbered. + + Ideally, we'd record some bit to notice when we're failing to restore some + register recorded in the unwind info, but to do that we need annotation on + the unix->ms abi edge, so that we know when the register data may be + discarded. And since this edge is also within the ICC library, we're + unlikely to be able to get the new annotation. + + Barring a magic solution to restore the ms abi defined 128-bit xmm registers + (as distictly opposed to the full runtime width) without causing extra + overhead for normal unix abis, the best solution seems to be to simply + ignore unwind data for unknown columns. */ + +#define UNWIND_COLUMN_IN_RANGE(x) \ + __builtin_expect((x) <= __LIBGCC_DWARF_FRAME_REGISTERS__, 1) + +#ifdef REG_VALUE_IN_UNWIND_CONTEXT +typedef _Unwind_Word _Unwind_Context_Reg_Val; + +#ifndef ASSUME_EXTENDED_UNWIND_CONTEXT +#define ASSUME_EXTENDED_UNWIND_CONTEXT 1 +#endif + +static inline _Unwind_Word +_Unwind_Get_Unwind_Word (_Unwind_Context_Reg_Val val) +{ + return val; +} + +static inline _Unwind_Context_Reg_Val +_Unwind_Get_Unwind_Context_Reg_Val (_Unwind_Word val) +{ + return val; +} +#else +typedef void *_Unwind_Context_Reg_Val; + +static inline _Unwind_Word +_Unwind_Get_Unwind_Word (_Unwind_Context_Reg_Val val) +{ + return (_Unwind_Word) (_Unwind_Internal_Ptr) val; +} + +static inline _Unwind_Context_Reg_Val +_Unwind_Get_Unwind_Context_Reg_Val (_Unwind_Word val) +{ + return (_Unwind_Context_Reg_Val) (_Unwind_Internal_Ptr) val; +} +#endif + +#ifndef ASSUME_EXTENDED_UNWIND_CONTEXT +#define ASSUME_EXTENDED_UNWIND_CONTEXT 0 +#endif + +/* This is the register and unwind state for a particular frame. This + provides the information necessary to unwind up past a frame and return + to its caller. */ +struct _Unwind_Context +{ + _Unwind_Context_Reg_Val reg[__LIBGCC_DWARF_FRAME_REGISTERS__+1]; + void *cfa; + void *ra; + void *lsda; + struct dwarf_eh_bases bases; + /* Signal frame context. */ +#define SIGNAL_FRAME_BIT ((~(_Unwind_Word) 0 >> 1) + 1) + /* Context which has version/args_size/by_value fields. */ +#define EXTENDED_CONTEXT_BIT ((~(_Unwind_Word) 0 >> 2) + 1) + _Unwind_Word flags; + /* 0 for now, can be increased when further fields are added to + struct _Unwind_Context. */ + _Unwind_Word version; + _Unwind_Word args_size; + char by_value[__LIBGCC_DWARF_FRAME_REGISTERS__+1]; +}; + +/* Byte size of every register managed by these routines. */ +static unsigned char dwarf_reg_size_table[__LIBGCC_DWARF_FRAME_REGISTERS__+1]; + + +/* Read unaligned data from the instruction buffer. */ + +union unaligned +{ + void *p; + unsigned u2 __attribute__ ((mode (HI))); + unsigned u4 __attribute__ ((mode (SI))); + unsigned u8 __attribute__ ((mode (DI))); + signed s2 __attribute__ ((mode (HI))); + signed s4 __attribute__ ((mode (SI))); + signed s8 __attribute__ ((mode (DI))); +} __attribute__ ((packed)); + +static void uw_update_context (struct _Unwind_Context *, _Unwind_FrameState *); +static _Unwind_Reason_Code uw_frame_state_for (struct _Unwind_Context *, + _Unwind_FrameState *); + +static inline void * +read_pointer (const void *p) { const union unaligned *up = p; return up->p; } + +static inline int +read_1u (const void *p) { return *(const unsigned char *) p; } + +static inline int +read_1s (const void *p) { return *(const signed char *) p; } + +static inline int +read_2u (const void *p) { const union unaligned *up = p; return up->u2; } + +static inline int +read_2s (const void *p) { const union unaligned *up = p; return up->s2; } + +static inline unsigned int +read_4u (const void *p) { const union unaligned *up = p; return up->u4; } + +static inline int +read_4s (const void *p) { const union unaligned *up = p; return up->s4; } + +static inline unsigned long +read_8u (const void *p) { const union unaligned *up = p; return up->u8; } + +static inline unsigned long +read_8s (const void *p) { const union unaligned *up = p; return up->s8; } + +static inline _Unwind_Word +_Unwind_IsSignalFrame (struct _Unwind_Context *context) +{ + return (context->flags & SIGNAL_FRAME_BIT) ? 1 : 0; +} + +static inline void +_Unwind_SetSignalFrame (struct _Unwind_Context *context, int val) +{ + if (val) + context->flags |= SIGNAL_FRAME_BIT; + else + context->flags &= ~SIGNAL_FRAME_BIT; +} + +static inline _Unwind_Word +_Unwind_IsExtendedContext (struct _Unwind_Context *context) +{ + return (ASSUME_EXTENDED_UNWIND_CONTEXT + || (context->flags & EXTENDED_CONTEXT_BIT)); +} + +/* Get the value of register INDEX as saved in CONTEXT. */ + +inline _Unwind_Word +_Unwind_GetGR (struct _Unwind_Context *context, int index) +{ + int size; + _Unwind_Context_Reg_Val val; + +#ifdef DWARF_ZERO_REG + if (index == DWARF_ZERO_REG) + return 0; +#endif + + index = DWARF_REG_TO_UNWIND_COLUMN (index); + gcc_assert (index < (int) sizeof(dwarf_reg_size_table)); + size = dwarf_reg_size_table[index]; + val = context->reg[index]; + + if (_Unwind_IsExtendedContext (context) && context->by_value[index]) + return _Unwind_Get_Unwind_Word (val); + + /* This will segfault if the register hasn't been saved. */ + if (size == sizeof(_Unwind_Ptr)) + return * (_Unwind_Ptr *) (_Unwind_Internal_Ptr) val; + else + { + gcc_assert (size == sizeof(_Unwind_Word)); + return * (_Unwind_Word *) (_Unwind_Internal_Ptr) val; + } +} + +static inline void * +_Unwind_GetPtr (struct _Unwind_Context *context, int index) +{ + return (void *)(_Unwind_Ptr) _Unwind_GetGR (context, index); +} + +/* Get the value of the CFA as saved in CONTEXT. */ + +_Unwind_Word +_Unwind_GetCFA (struct _Unwind_Context *context) +{ + return (_Unwind_Ptr) context->cfa; +} + +/* Overwrite the saved value for register INDEX in CONTEXT with VAL. */ + +inline void +_Unwind_SetGR (struct _Unwind_Context *context, int index, _Unwind_Word val) +{ + int size; + void *ptr; + + index = DWARF_REG_TO_UNWIND_COLUMN (index); + gcc_assert (index < (int) sizeof(dwarf_reg_size_table)); + size = dwarf_reg_size_table[index]; + + if (_Unwind_IsExtendedContext (context) && context->by_value[index]) + { + context->reg[index] = _Unwind_Get_Unwind_Context_Reg_Val (val); + return; + } + + ptr = (void *) (_Unwind_Internal_Ptr) context->reg[index]; + + if (size == sizeof(_Unwind_Ptr)) + * (_Unwind_Ptr *) ptr = val; + else + { + gcc_assert (size == sizeof(_Unwind_Word)); + * (_Unwind_Word *) ptr = val; + } +} + +/* Get the pointer to a register INDEX as saved in CONTEXT. */ + +static inline void * +_Unwind_GetGRPtr (struct _Unwind_Context *context, int index) +{ + index = DWARF_REG_TO_UNWIND_COLUMN (index); + if (_Unwind_IsExtendedContext (context) && context->by_value[index]) + return &context->reg[index]; + return (void *) (_Unwind_Internal_Ptr) context->reg[index]; +} + +/* Set the pointer to a register INDEX as saved in CONTEXT. */ + +static inline void +_Unwind_SetGRPtr (struct _Unwind_Context *context, int index, void *p) +{ + index = DWARF_REG_TO_UNWIND_COLUMN (index); + if (_Unwind_IsExtendedContext (context)) + context->by_value[index] = 0; + context->reg[index] = (_Unwind_Context_Reg_Val) (_Unwind_Internal_Ptr) p; +} + +/* Overwrite the saved value for register INDEX in CONTEXT with VAL. */ + +static inline void +_Unwind_SetGRValue (struct _Unwind_Context *context, int index, + _Unwind_Word val) +{ + index = DWARF_REG_TO_UNWIND_COLUMN (index); + gcc_assert (index < (int) sizeof(dwarf_reg_size_table)); + /* Return column size may be smaller than _Unwind_Context_Reg_Val. */ + gcc_assert (dwarf_reg_size_table[index] <= sizeof (_Unwind_Context_Reg_Val)); + + context->by_value[index] = 1; + context->reg[index] = _Unwind_Get_Unwind_Context_Reg_Val (val); +} + +/* Return nonzero if register INDEX is stored by value rather than + by reference. */ + +static inline int +_Unwind_GRByValue (struct _Unwind_Context *context, int index) +{ + index = DWARF_REG_TO_UNWIND_COLUMN (index); + return context->by_value[index]; +} + +/* Retrieve the return address for CONTEXT. */ + +inline _Unwind_Ptr +_Unwind_GetIP (struct _Unwind_Context *context) +{ + return (_Unwind_Ptr) context->ra; +} + +/* Retrieve the return address and flag whether that IP is before + or after first not yet fully executed instruction. */ + +inline _Unwind_Ptr +_Unwind_GetIPInfo (struct _Unwind_Context *context, int *ip_before_insn) +{ + *ip_before_insn = _Unwind_IsSignalFrame (context); + return (_Unwind_Ptr) context->ra; +} + +/* Overwrite the return address for CONTEXT with VAL. */ + +inline void +_Unwind_SetIP (struct _Unwind_Context *context, _Unwind_Ptr val) +{ + context->ra = (void *) val; +} + +void * +_Unwind_GetLanguageSpecificData (struct _Unwind_Context *context) +{ + return context->lsda; +} + +_Unwind_Ptr +_Unwind_GetRegionStart (struct _Unwind_Context *context) +{ + return (_Unwind_Ptr) context->bases.func; +} + +void * +_Unwind_FindEnclosingFunction (void *pc) +{ + struct dwarf_eh_bases bases; + const struct dwarf_fde *fde = _Unwind_Find_FDE (pc-1, &bases); + if (fde) + return bases.func; + else + return NULL; +} + +#ifndef __ia64__ +_Unwind_Ptr +_Unwind_GetDataRelBase (struct _Unwind_Context *context) +{ + return (_Unwind_Ptr) context->bases.dbase; +} + +_Unwind_Ptr +_Unwind_GetTextRelBase (struct _Unwind_Context *context) +{ + return (_Unwind_Ptr) context->bases.tbase; +} +#endif + +#include "md-unwind-support.h" + +/* Extract any interesting information from the CIE for the translation + unit F belongs to. Return a pointer to the byte after the augmentation, + or NULL if we encountered an undecipherable augmentation. */ + +static const unsigned char * +extract_cie_info (const struct dwarf_cie *cie, struct _Unwind_Context *context, + _Unwind_FrameState *fs) +{ + const unsigned char *aug = cie->augmentation; + const unsigned char *p = aug + strlen ((const char *)aug) + 1; + const unsigned char *ret = NULL; + _uleb128_t utmp; + _sleb128_t stmp; + + /* g++ v2 "eh" has pointer immediately following augmentation string, + so it must be handled first. */ + if (aug[0] == 'e' && aug[1] == 'h') + { + fs->eh_ptr = read_pointer (p); + p += sizeof (void *); + aug += 2; + } + + /* After the augmentation resp. pointer for "eh" augmentation + follows for CIE version >= 4 address size byte and + segment size byte. */ + if (__builtin_expect (cie->version >= 4, 0)) + { + if (p[0] != sizeof (void *) || p[1] != 0) + return NULL; + p += 2; + } + /* Immediately following this are the code and + data alignment and return address column. */ + p = read_uleb128 (p, &utmp); + fs->code_align = (_Unwind_Word)utmp; + p = read_sleb128 (p, &stmp); + fs->data_align = (_Unwind_Sword)stmp; + if (cie->version == 1) + fs->retaddr_column = *p++; + else + { + p = read_uleb128 (p, &utmp); + fs->retaddr_column = (_Unwind_Word)utmp; + } + fs->lsda_encoding = DW_EH_PE_omit; + + /* If the augmentation starts with 'z', then a uleb128 immediately + follows containing the length of the augmentation field following + the size. */ + if (*aug == 'z') + { + p = read_uleb128 (p, &utmp); + ret = p + utmp; + + fs->saw_z = 1; + ++aug; + } + + /* Iterate over recognized augmentation subsequences. */ + while (*aug != '\0') + { + /* "L" indicates a byte showing how the LSDA pointer is encoded. */ + if (aug[0] == 'L') + { + fs->lsda_encoding = *p++; + aug += 1; + } + + /* "R" indicates a byte indicating how FDE addresses are encoded. */ + else if (aug[0] == 'R') + { + fs->fde_encoding = *p++; + aug += 1; + } + + /* "P" indicates a personality routine in the CIE augmentation. */ + else if (aug[0] == 'P') + { + _Unwind_Ptr personality; + + p = read_encoded_value (context, *p, p + 1, &personality); + fs->personality = (_Unwind_Personality_Fn) personality; + aug += 1; + } + + /* "S" indicates a signal frame. */ + else if (aug[0] == 'S') + { + fs->signal_frame = 1; + aug += 1; + } + + /* Otherwise we have an unknown augmentation string. + Bail unless we saw a 'z' prefix. */ + else + return ret; + } + + return ret ? ret : p; +} + + +/* Decode a DW_OP stack program. Return the top of stack. Push INITIAL + onto the stack to start. */ + +static _Unwind_Word +execute_stack_op (const unsigned char *op_ptr, const unsigned char *op_end, + struct _Unwind_Context *context, _Unwind_Word initial) +{ + _Unwind_Word stack[64]; /* ??? Assume this is enough. */ + int stack_elt; + + stack[0] = initial; + stack_elt = 1; + + while (op_ptr < op_end) + { + enum dwarf_location_atom op = *op_ptr++; + _Unwind_Word result; + _uleb128_t reg, utmp; + _sleb128_t offset, stmp; + + switch (op) + { + case DW_OP_lit0: + case DW_OP_lit1: + case DW_OP_lit2: + case DW_OP_lit3: + case DW_OP_lit4: + case DW_OP_lit5: + case DW_OP_lit6: + case DW_OP_lit7: + case DW_OP_lit8: + case DW_OP_lit9: + case DW_OP_lit10: + case DW_OP_lit11: + case DW_OP_lit12: + case DW_OP_lit13: + case DW_OP_lit14: + case DW_OP_lit15: + case DW_OP_lit16: + case DW_OP_lit17: + case DW_OP_lit18: + case DW_OP_lit19: + case DW_OP_lit20: + case DW_OP_lit21: + case DW_OP_lit22: + case DW_OP_lit23: + case DW_OP_lit24: + case DW_OP_lit25: + case DW_OP_lit26: + case DW_OP_lit27: + case DW_OP_lit28: + case DW_OP_lit29: + case DW_OP_lit30: + case DW_OP_lit31: + result = op - DW_OP_lit0; + break; + + case DW_OP_addr: + result = (_Unwind_Word) (_Unwind_Ptr) read_pointer (op_ptr); + op_ptr += sizeof (void *); + break; + + case DW_OP_GNU_encoded_addr: + { + _Unwind_Ptr presult; + op_ptr = read_encoded_value (context, *op_ptr, op_ptr+1, &presult); + result = presult; + } + break; + + case DW_OP_const1u: + result = read_1u (op_ptr); + op_ptr += 1; + break; + case DW_OP_const1s: + result = read_1s (op_ptr); + op_ptr += 1; + break; + case DW_OP_const2u: + result = read_2u (op_ptr); + op_ptr += 2; + break; + case DW_OP_const2s: + result = read_2s (op_ptr); + op_ptr += 2; + break; + case DW_OP_const4u: + result = read_4u (op_ptr); + op_ptr += 4; + break; + case DW_OP_const4s: + result = read_4s (op_ptr); + op_ptr += 4; + break; + case DW_OP_const8u: + result = read_8u (op_ptr); + op_ptr += 8; + break; + case DW_OP_const8s: + result = read_8s (op_ptr); + op_ptr += 8; + break; + case DW_OP_constu: + op_ptr = read_uleb128 (op_ptr, &utmp); + result = (_Unwind_Word)utmp; + break; + case DW_OP_consts: + op_ptr = read_sleb128 (op_ptr, &stmp); + result = (_Unwind_Sword)stmp; + break; + + case DW_OP_reg0: + case DW_OP_reg1: + case DW_OP_reg2: + case DW_OP_reg3: + case DW_OP_reg4: + case DW_OP_reg5: + case DW_OP_reg6: + case DW_OP_reg7: + case DW_OP_reg8: + case DW_OP_reg9: + case DW_OP_reg10: + case DW_OP_reg11: + case DW_OP_reg12: + case DW_OP_reg13: + case DW_OP_reg14: + case DW_OP_reg15: + case DW_OP_reg16: + case DW_OP_reg17: + case DW_OP_reg18: + case DW_OP_reg19: + case DW_OP_reg20: + case DW_OP_reg21: + case DW_OP_reg22: + case DW_OP_reg23: + case DW_OP_reg24: + case DW_OP_reg25: + case DW_OP_reg26: + case DW_OP_reg27: + case DW_OP_reg28: + case DW_OP_reg29: + case DW_OP_reg30: + case DW_OP_reg31: + result = _Unwind_GetGR (context, op - DW_OP_reg0); + break; + case DW_OP_regx: + op_ptr = read_uleb128 (op_ptr, ®); + result = _Unwind_GetGR (context, reg); + break; + + case DW_OP_breg0: + case DW_OP_breg1: + case DW_OP_breg2: + case DW_OP_breg3: + case DW_OP_breg4: + case DW_OP_breg5: + case DW_OP_breg6: + case DW_OP_breg7: + case DW_OP_breg8: + case DW_OP_breg9: + case DW_OP_breg10: + case DW_OP_breg11: + case DW_OP_breg12: + case DW_OP_breg13: + case DW_OP_breg14: + case DW_OP_breg15: + case DW_OP_breg16: + case DW_OP_breg17: + case DW_OP_breg18: + case DW_OP_breg19: + case DW_OP_breg20: + case DW_OP_breg21: + case DW_OP_breg22: + case DW_OP_breg23: + case DW_OP_breg24: + case DW_OP_breg25: + case DW_OP_breg26: + case DW_OP_breg27: + case DW_OP_breg28: + case DW_OP_breg29: + case DW_OP_breg30: + case DW_OP_breg31: + op_ptr = read_sleb128 (op_ptr, &offset); + result = _Unwind_GetGR (context, op - DW_OP_breg0) + offset; + break; + case DW_OP_bregx: + op_ptr = read_uleb128 (op_ptr, ®); + op_ptr = read_sleb128 (op_ptr, &offset); + result = _Unwind_GetGR (context, reg) + (_Unwind_Word)offset; + break; + + case DW_OP_dup: + gcc_assert (stack_elt); + result = stack[stack_elt - 1]; + break; + + case DW_OP_drop: + gcc_assert (stack_elt); + stack_elt -= 1; + goto no_push; + + case DW_OP_pick: + offset = *op_ptr++; + gcc_assert (offset < stack_elt - 1); + result = stack[stack_elt - 1 - offset]; + break; + + case DW_OP_over: + gcc_assert (stack_elt >= 2); + result = stack[stack_elt - 2]; + break; + + case DW_OP_swap: + { + _Unwind_Word t; + gcc_assert (stack_elt >= 2); + t = stack[stack_elt - 1]; + stack[stack_elt - 1] = stack[stack_elt - 2]; + stack[stack_elt - 2] = t; + goto no_push; + } + + case DW_OP_rot: + { + _Unwind_Word t1, t2, t3; + + gcc_assert (stack_elt >= 3); + t1 = stack[stack_elt - 1]; + t2 = stack[stack_elt - 2]; + t3 = stack[stack_elt - 3]; + stack[stack_elt - 1] = t2; + stack[stack_elt - 2] = t3; + stack[stack_elt - 3] = t1; + goto no_push; + } + + case DW_OP_deref: + case DW_OP_deref_size: + case DW_OP_abs: + case DW_OP_neg: + case DW_OP_not: + case DW_OP_plus_uconst: + /* Unary operations. */ + gcc_assert (stack_elt); + stack_elt -= 1; + + result = stack[stack_elt]; + + switch (op) + { + case DW_OP_deref: + { + void *ptr = (void *) (_Unwind_Ptr) result; + result = (_Unwind_Ptr) read_pointer (ptr); + } + break; + + case DW_OP_deref_size: + { + void *ptr = (void *) (_Unwind_Ptr) result; + switch (*op_ptr++) + { + case 1: + result = read_1u (ptr); + break; + case 2: + result = read_2u (ptr); + break; + case 4: + result = read_4u (ptr); + break; + case 8: + result = read_8u (ptr); + break; + default: + gcc_unreachable (); + } + } + break; + + case DW_OP_abs: + if ((_Unwind_Sword) result < 0) + result = -result; + break; + case DW_OP_neg: + result = -result; + break; + case DW_OP_not: + result = ~result; + break; + case DW_OP_plus_uconst: + op_ptr = read_uleb128 (op_ptr, &utmp); + result += (_Unwind_Word)utmp; + break; + + default: + gcc_unreachable (); + } + break; + + case DW_OP_and: + case DW_OP_div: + case DW_OP_minus: + case DW_OP_mod: + case DW_OP_mul: + case DW_OP_or: + case DW_OP_plus: + case DW_OP_shl: + case DW_OP_shr: + case DW_OP_shra: + case DW_OP_xor: + case DW_OP_le: + case DW_OP_ge: + case DW_OP_eq: + case DW_OP_lt: + case DW_OP_gt: + case DW_OP_ne: + { + /* Binary operations. */ + _Unwind_Word first, second; + gcc_assert (stack_elt >= 2); + stack_elt -= 2; + + second = stack[stack_elt]; + first = stack[stack_elt + 1]; + + switch (op) + { + case DW_OP_and: + result = second & first; + break; + case DW_OP_div: + result = (_Unwind_Sword) second / (_Unwind_Sword) first; + break; + case DW_OP_minus: + result = second - first; + break; + case DW_OP_mod: + result = second % first; + break; + case DW_OP_mul: + result = second * first; + break; + case DW_OP_or: + result = second | first; + break; + case DW_OP_plus: + result = second + first; + break; + case DW_OP_shl: + result = second << first; + break; + case DW_OP_shr: + result = second >> first; + break; + case DW_OP_shra: + result = (_Unwind_Sword) second >> first; + break; + case DW_OP_xor: + result = second ^ first; + break; + case DW_OP_le: + result = (_Unwind_Sword) second <= (_Unwind_Sword) first; + break; + case DW_OP_ge: + result = (_Unwind_Sword) second >= (_Unwind_Sword) first; + break; + case DW_OP_eq: + result = (_Unwind_Sword) second == (_Unwind_Sword) first; + break; + case DW_OP_lt: + result = (_Unwind_Sword) second < (_Unwind_Sword) first; + break; + case DW_OP_gt: + result = (_Unwind_Sword) second > (_Unwind_Sword) first; + break; + case DW_OP_ne: + result = (_Unwind_Sword) second != (_Unwind_Sword) first; + break; + + default: + gcc_unreachable (); + } + } + break; + + case DW_OP_skip: + offset = read_2s (op_ptr); + op_ptr += 2; + op_ptr += offset; + goto no_push; + + case DW_OP_bra: + gcc_assert (stack_elt); + stack_elt -= 1; + + offset = read_2s (op_ptr); + op_ptr += 2; + if (stack[stack_elt] != 0) + op_ptr += offset; + goto no_push; + + case DW_OP_nop: + goto no_push; + + default: + gcc_unreachable (); + } + + /* Most things push a result value. */ + gcc_assert ((size_t) stack_elt < sizeof(stack)/sizeof(*stack)); + stack[stack_elt++] = result; + no_push:; + } + + /* We were executing this program to get a value. It should be + at top of stack. */ + gcc_assert (stack_elt); + stack_elt -= 1; + return stack[stack_elt]; +} + + +/* Decode DWARF 2 call frame information. Takes pointers the + instruction sequence to decode, current register information and + CIE info, and the PC range to evaluate. */ + +static void +execute_cfa_program (const unsigned char *insn_ptr, + const unsigned char *insn_end, + struct _Unwind_Context *context, + _Unwind_FrameState *fs) +{ + struct frame_state_reg_info *unused_rs = NULL; + + /* Don't allow remember/restore between CIE and FDE programs. */ + fs->regs.prev = NULL; + + /* The comparison with the return address uses < rather than <= because + we are only interested in the effects of code before the call; for a + noreturn function, the return address may point to unrelated code with + a different stack configuration that we are not interested in. We + assume that the call itself is unwind info-neutral; if not, or if + there are delay instructions that adjust the stack, these must be + reflected at the point immediately before the call insn. + In signal frames, return address is after last completed instruction, + so we add 1 to return address to make the comparison <=. */ + while (insn_ptr < insn_end + && fs->pc < context->ra + _Unwind_IsSignalFrame (context)) + { + unsigned char insn = *insn_ptr++; + _uleb128_t reg, utmp; + _sleb128_t offset, stmp; + + if ((insn & 0xc0) == DW_CFA_advance_loc) + fs->pc += (insn & 0x3f) * fs->code_align; + else if ((insn & 0xc0) == DW_CFA_offset) + { + reg = insn & 0x3f; + insn_ptr = read_uleb128 (insn_ptr, &utmp); + offset = (_Unwind_Sword) utmp * fs->data_align; + reg = DWARF_REG_TO_UNWIND_COLUMN (reg); + if (UNWIND_COLUMN_IN_RANGE (reg)) + { + fs->regs.reg[reg].how = REG_SAVED_OFFSET; + fs->regs.reg[reg].loc.offset = offset; + } + } + else if ((insn & 0xc0) == DW_CFA_restore) + { + reg = insn & 0x3f; + reg = DWARF_REG_TO_UNWIND_COLUMN (reg); + if (UNWIND_COLUMN_IN_RANGE (reg)) + fs->regs.reg[reg].how = REG_UNSAVED; + } + else switch (insn) + { + case DW_CFA_set_loc: + { + _Unwind_Ptr pc; + + insn_ptr = read_encoded_value (context, fs->fde_encoding, + insn_ptr, &pc); + fs->pc = (void *) pc; + } + break; + + case DW_CFA_advance_loc1: + fs->pc += read_1u (insn_ptr) * fs->code_align; + insn_ptr += 1; + break; + case DW_CFA_advance_loc2: + fs->pc += read_2u (insn_ptr) * fs->code_align; + insn_ptr += 2; + break; + case DW_CFA_advance_loc4: + fs->pc += read_4u (insn_ptr) * fs->code_align; + insn_ptr += 4; + break; + + case DW_CFA_offset_extended: + insn_ptr = read_uleb128 (insn_ptr, ®); + insn_ptr = read_uleb128 (insn_ptr, &utmp); + offset = (_Unwind_Sword) utmp * fs->data_align; + reg = DWARF_REG_TO_UNWIND_COLUMN (reg); + if (UNWIND_COLUMN_IN_RANGE (reg)) + { + fs->regs.reg[reg].how = REG_SAVED_OFFSET; + fs->regs.reg[reg].loc.offset = offset; + } + break; + + case DW_CFA_restore_extended: + insn_ptr = read_uleb128 (insn_ptr, ®); + /* FIXME, this is wrong; the CIE might have said that the + register was saved somewhere. */ + reg = DWARF_REG_TO_UNWIND_COLUMN (reg); + if (UNWIND_COLUMN_IN_RANGE (reg)) + fs->regs.reg[reg].how = REG_UNSAVED; + break; + + case DW_CFA_same_value: + insn_ptr = read_uleb128 (insn_ptr, ®); + reg = DWARF_REG_TO_UNWIND_COLUMN (reg); + if (UNWIND_COLUMN_IN_RANGE (reg)) + fs->regs.reg[reg].how = REG_UNSAVED; + break; + + case DW_CFA_undefined: + insn_ptr = read_uleb128 (insn_ptr, ®); + reg = DWARF_REG_TO_UNWIND_COLUMN (reg); + if (UNWIND_COLUMN_IN_RANGE (reg)) + fs->regs.reg[reg].how = REG_UNDEFINED; + break; + + case DW_CFA_nop: + break; + + case DW_CFA_register: + { + _uleb128_t reg2; + insn_ptr = read_uleb128 (insn_ptr, ®); + insn_ptr = read_uleb128 (insn_ptr, ®2); + reg = DWARF_REG_TO_UNWIND_COLUMN (reg); + if (UNWIND_COLUMN_IN_RANGE (reg)) + { + fs->regs.reg[reg].how = REG_SAVED_REG; + fs->regs.reg[reg].loc.reg = (_Unwind_Word)reg2; + } + } + break; + + case DW_CFA_remember_state: + { + struct frame_state_reg_info *new_rs; + if (unused_rs) + { + new_rs = unused_rs; + unused_rs = unused_rs->prev; + } + else + new_rs = alloca (sizeof (struct frame_state_reg_info)); + + *new_rs = fs->regs; + fs->regs.prev = new_rs; + } + break; + + case DW_CFA_restore_state: + { + struct frame_state_reg_info *old_rs = fs->regs.prev; + fs->regs = *old_rs; + old_rs->prev = unused_rs; + unused_rs = old_rs; + } + break; + + case DW_CFA_def_cfa: + insn_ptr = read_uleb128 (insn_ptr, &utmp); + fs->regs.cfa_reg = (_Unwind_Word)utmp; + insn_ptr = read_uleb128 (insn_ptr, &utmp); + fs->regs.cfa_offset = (_Unwind_Word)utmp; + fs->regs.cfa_how = CFA_REG_OFFSET; + break; + + case DW_CFA_def_cfa_register: + insn_ptr = read_uleb128 (insn_ptr, &utmp); + fs->regs.cfa_reg = (_Unwind_Word)utmp; + fs->regs.cfa_how = CFA_REG_OFFSET; + break; + + case DW_CFA_def_cfa_offset: + insn_ptr = read_uleb128 (insn_ptr, &utmp); + fs->regs.cfa_offset = utmp; + /* cfa_how deliberately not set. */ + break; + + case DW_CFA_def_cfa_expression: + fs->regs.cfa_exp = insn_ptr; + fs->regs.cfa_how = CFA_EXP; + insn_ptr = read_uleb128 (insn_ptr, &utmp); + insn_ptr += utmp; + break; + + case DW_CFA_expression: + insn_ptr = read_uleb128 (insn_ptr, ®); + reg = DWARF_REG_TO_UNWIND_COLUMN (reg); + if (UNWIND_COLUMN_IN_RANGE (reg)) + { + fs->regs.reg[reg].how = REG_SAVED_EXP; + fs->regs.reg[reg].loc.exp = insn_ptr; + } + insn_ptr = read_uleb128 (insn_ptr, &utmp); + insn_ptr += utmp; + break; + + /* Dwarf3. */ + case DW_CFA_offset_extended_sf: + insn_ptr = read_uleb128 (insn_ptr, ®); + insn_ptr = read_sleb128 (insn_ptr, &stmp); + offset = stmp * fs->data_align; + reg = DWARF_REG_TO_UNWIND_COLUMN (reg); + if (UNWIND_COLUMN_IN_RANGE (reg)) + { + fs->regs.reg[reg].how = REG_SAVED_OFFSET; + fs->regs.reg[reg].loc.offset = offset; + } + break; + + case DW_CFA_def_cfa_sf: + insn_ptr = read_uleb128 (insn_ptr, &utmp); + fs->regs.cfa_reg = (_Unwind_Word)utmp; + insn_ptr = read_sleb128 (insn_ptr, &stmp); + fs->regs.cfa_offset = (_Unwind_Sword)stmp; + fs->regs.cfa_how = CFA_REG_OFFSET; + fs->regs.cfa_offset *= fs->data_align; + break; + + case DW_CFA_def_cfa_offset_sf: + insn_ptr = read_sleb128 (insn_ptr, &stmp); + fs->regs.cfa_offset = (_Unwind_Sword)stmp; + fs->regs.cfa_offset *= fs->data_align; + /* cfa_how deliberately not set. */ + break; + + case DW_CFA_val_offset: + insn_ptr = read_uleb128 (insn_ptr, ®); + insn_ptr = read_uleb128 (insn_ptr, &utmp); + offset = (_Unwind_Sword) utmp * fs->data_align; + reg = DWARF_REG_TO_UNWIND_COLUMN (reg); + if (UNWIND_COLUMN_IN_RANGE (reg)) + { + fs->regs.reg[reg].how = REG_SAVED_VAL_OFFSET; + fs->regs.reg[reg].loc.offset = offset; + } + break; + + case DW_CFA_val_offset_sf: + insn_ptr = read_uleb128 (insn_ptr, ®); + insn_ptr = read_sleb128 (insn_ptr, &stmp); + offset = stmp * fs->data_align; + reg = DWARF_REG_TO_UNWIND_COLUMN (reg); + if (UNWIND_COLUMN_IN_RANGE (reg)) + { + fs->regs.reg[reg].how = REG_SAVED_VAL_OFFSET; + fs->regs.reg[reg].loc.offset = offset; + } + break; + + case DW_CFA_val_expression: + insn_ptr = read_uleb128 (insn_ptr, ®); + reg = DWARF_REG_TO_UNWIND_COLUMN (reg); + if (UNWIND_COLUMN_IN_RANGE (reg)) + { + fs->regs.reg[reg].how = REG_SAVED_VAL_EXP; + fs->regs.reg[reg].loc.exp = insn_ptr; + } + insn_ptr = read_uleb128 (insn_ptr, &utmp); + insn_ptr += utmp; + break; + + case DW_CFA_GNU_window_save: + /* ??? Hardcoded for SPARC register window configuration. */ + if (__LIBGCC_DWARF_FRAME_REGISTERS__ >= 32) + for (reg = 16; reg < 32; ++reg) + { + fs->regs.reg[reg].how = REG_SAVED_OFFSET; + fs->regs.reg[reg].loc.offset = (reg - 16) * sizeof (void *); + } + break; + + case DW_CFA_GNU_args_size: + insn_ptr = read_uleb128 (insn_ptr, &utmp); + context->args_size = (_Unwind_Word)utmp; + break; + + case DW_CFA_GNU_negative_offset_extended: + /* Obsoleted by DW_CFA_offset_extended_sf, but used by + older PowerPC code. */ + insn_ptr = read_uleb128 (insn_ptr, ®); + insn_ptr = read_uleb128 (insn_ptr, &utmp); + offset = (_Unwind_Word) utmp * fs->data_align; + reg = DWARF_REG_TO_UNWIND_COLUMN (reg); + if (UNWIND_COLUMN_IN_RANGE (reg)) + { + fs->regs.reg[reg].how = REG_SAVED_OFFSET; + fs->regs.reg[reg].loc.offset = -offset; + } + break; + + default: + gcc_unreachable (); + } + } +} + +/* Given the _Unwind_Context CONTEXT for a stack frame, look up the FDE for + its caller and decode it into FS. This function also sets the + args_size and lsda members of CONTEXT, as they are really information + about the caller's frame. */ + +static _Unwind_Reason_Code +uw_frame_state_for (struct _Unwind_Context *context, _Unwind_FrameState *fs) +{ + const struct dwarf_fde *fde; + const struct dwarf_cie *cie; + const unsigned char *aug, *insn, *end; + + memset (fs, 0, sizeof (*fs)); + context->args_size = 0; + context->lsda = 0; + + if (context->ra == 0) + return _URC_END_OF_STACK; + + fde = _Unwind_Find_FDE (context->ra + _Unwind_IsSignalFrame (context) - 1, + &context->bases); + if (fde == NULL) + { +#ifdef MD_FALLBACK_FRAME_STATE_FOR + /* Couldn't find frame unwind info for this function. Try a + target-specific fallback mechanism. This will necessarily + not provide a personality routine or LSDA. */ + return MD_FALLBACK_FRAME_STATE_FOR (context, fs); +#else + return _URC_END_OF_STACK; +#endif + } + + fs->pc = context->bases.func; + + cie = get_cie (fde); + insn = extract_cie_info (cie, context, fs); + if (insn == NULL) + /* CIE contained unknown augmentation. */ + return _URC_FATAL_PHASE1_ERROR; + + /* First decode all the insns in the CIE. */ + end = (const unsigned char *) next_fde ((const struct dwarf_fde *) cie); + execute_cfa_program (insn, end, context, fs); + + /* Locate augmentation for the fde. */ + aug = (const unsigned char *) fde + sizeof (*fde); + aug += 2 * size_of_encoded_value (fs->fde_encoding); + insn = NULL; + if (fs->saw_z) + { + _uleb128_t i; + aug = read_uleb128 (aug, &i); + insn = aug + i; + } + if (fs->lsda_encoding != DW_EH_PE_omit) + { + _Unwind_Ptr lsda; + + aug = read_encoded_value (context, fs->lsda_encoding, aug, &lsda); + context->lsda = (void *) lsda; + } + + /* Then the insns in the FDE up to our target PC. */ + if (insn == NULL) + insn = aug; + end = (const unsigned char *) next_fde (fde); + execute_cfa_program (insn, end, context, fs); + + return _URC_NO_REASON; +} + +typedef struct frame_state +{ + void *cfa; + void *eh_ptr; + long cfa_offset; + long args_size; + long reg_or_offset[PRE_GCC3_DWARF_FRAME_REGISTERS+1]; + unsigned short cfa_reg; + unsigned short retaddr_column; + char saved[PRE_GCC3_DWARF_FRAME_REGISTERS+1]; +} frame_state; + +struct frame_state * __frame_state_for (void *, struct frame_state *); + +/* Called from pre-G++ 3.0 __throw to find the registers to restore for + a given PC_TARGET. The caller should allocate a local variable of + `struct frame_state' and pass its address to STATE_IN. */ + +struct frame_state * +__frame_state_for (void *pc_target, struct frame_state *state_in) +{ + struct _Unwind_Context context; + _Unwind_FrameState fs; + int reg; + + memset (&context, 0, sizeof (struct _Unwind_Context)); + if (!ASSUME_EXTENDED_UNWIND_CONTEXT) + context.flags = EXTENDED_CONTEXT_BIT; + context.ra = pc_target + 1; + + if (uw_frame_state_for (&context, &fs) != _URC_NO_REASON) + return 0; + + /* We have no way to pass a location expression for the CFA to our + caller. It wouldn't understand it anyway. */ + if (fs.regs.cfa_how == CFA_EXP) + return 0; + + for (reg = 0; reg < PRE_GCC3_DWARF_FRAME_REGISTERS + 1; reg++) + { + state_in->saved[reg] = fs.regs.reg[reg].how; + switch (state_in->saved[reg]) + { + case REG_SAVED_REG: + state_in->reg_or_offset[reg] = fs.regs.reg[reg].loc.reg; + break; + case REG_SAVED_OFFSET: + state_in->reg_or_offset[reg] = fs.regs.reg[reg].loc.offset; + break; + default: + state_in->reg_or_offset[reg] = 0; + break; + } + } + + state_in->cfa_offset = fs.regs.cfa_offset; + state_in->cfa_reg = fs.regs.cfa_reg; + state_in->retaddr_column = fs.retaddr_column; + state_in->args_size = context.args_size; + state_in->eh_ptr = fs.eh_ptr; + + return state_in; +} + +typedef union { _Unwind_Ptr ptr; _Unwind_Word word; } _Unwind_SpTmp; + +static inline void +_Unwind_SetSpColumn (struct _Unwind_Context *context, void *cfa, + _Unwind_SpTmp *tmp_sp) +{ + int size = dwarf_reg_size_table[__builtin_dwarf_sp_column ()]; + + if (size == sizeof(_Unwind_Ptr)) + tmp_sp->ptr = (_Unwind_Ptr) cfa; + else + { + gcc_assert (size == sizeof(_Unwind_Word)); + tmp_sp->word = (_Unwind_Ptr) cfa; + } + _Unwind_SetGRPtr (context, __builtin_dwarf_sp_column (), tmp_sp); +} + +static void +uw_update_context_1 (struct _Unwind_Context *context, _Unwind_FrameState *fs) +{ + struct _Unwind_Context orig_context = *context; + void *cfa; + long i; + +#ifdef __LIBGCC_EH_RETURN_STACKADJ_RTX__ + /* Special handling here: Many machines do not use a frame pointer, + and track the CFA only through offsets from the stack pointer from + one frame to the next. In this case, the stack pointer is never + stored, so it has no saved address in the context. What we do + have is the CFA from the previous stack frame. + + In very special situations (such as unwind info for signal return), + there may be location expressions that use the stack pointer as well. + + Do this conditionally for one frame. This allows the unwind info + for one frame to save a copy of the stack pointer from the previous + frame, and be able to use much easier CFA mechanisms to do it. + Always zap the saved stack pointer value for the next frame; carrying + the value over from one frame to another doesn't make sense. */ + + _Unwind_SpTmp tmp_sp; + + if (!_Unwind_GetGRPtr (&orig_context, __builtin_dwarf_sp_column ())) + _Unwind_SetSpColumn (&orig_context, context->cfa, &tmp_sp); + _Unwind_SetGRPtr (context, __builtin_dwarf_sp_column (), NULL); +#endif + + /* Compute this frame's CFA. */ + switch (fs->regs.cfa_how) + { + case CFA_REG_OFFSET: + cfa = _Unwind_GetPtr (&orig_context, fs->regs.cfa_reg); + cfa += fs->regs.cfa_offset; + break; + + case CFA_EXP: + { + const unsigned char *exp = fs->regs.cfa_exp; + _uleb128_t len; + + exp = read_uleb128 (exp, &len); + cfa = (void *) (_Unwind_Ptr) + execute_stack_op (exp, exp + len, &orig_context, 0); + break; + } + + default: + gcc_unreachable (); + } + context->cfa = cfa; + + /* Compute the addresses of all registers saved in this frame. */ + for (i = 0; i < __LIBGCC_DWARF_FRAME_REGISTERS__ + 1; ++i) + switch (fs->regs.reg[i].how) + { + case REG_UNSAVED: + case REG_UNDEFINED: + break; + + case REG_SAVED_OFFSET: + _Unwind_SetGRPtr (context, i, + (void *) (cfa + fs->regs.reg[i].loc.offset)); + break; + + case REG_SAVED_REG: + if (_Unwind_GRByValue (&orig_context, fs->regs.reg[i].loc.reg)) + _Unwind_SetGRValue (context, i, + _Unwind_GetGR (&orig_context, + fs->regs.reg[i].loc.reg)); + else + _Unwind_SetGRPtr (context, i, + _Unwind_GetGRPtr (&orig_context, + fs->regs.reg[i].loc.reg)); + break; + + case REG_SAVED_EXP: + { + const unsigned char *exp = fs->regs.reg[i].loc.exp; + _uleb128_t len; + _Unwind_Ptr val; + + exp = read_uleb128 (exp, &len); + val = execute_stack_op (exp, exp + len, &orig_context, + (_Unwind_Ptr) cfa); + _Unwind_SetGRPtr (context, i, (void *) val); + } + break; + + case REG_SAVED_VAL_OFFSET: + _Unwind_SetGRValue (context, i, + (_Unwind_Internal_Ptr) + (cfa + fs->regs.reg[i].loc.offset)); + break; + + case REG_SAVED_VAL_EXP: + { + const unsigned char *exp = fs->regs.reg[i].loc.exp; + _uleb128_t len; + _Unwind_Ptr val; + + exp = read_uleb128 (exp, &len); + val = execute_stack_op (exp, exp + len, &orig_context, + (_Unwind_Ptr) cfa); + _Unwind_SetGRValue (context, i, val); + } + break; + } + + _Unwind_SetSignalFrame (context, fs->signal_frame); + +#ifdef MD_FROB_UPDATE_CONTEXT + MD_FROB_UPDATE_CONTEXT (context, fs); +#endif +} + +/* CONTEXT describes the unwind state for a frame, and FS describes the FDE + of its caller. Update CONTEXT to refer to the caller as well. Note + that the args_size and lsda members are not updated here, but later in + uw_frame_state_for. */ + +static void +uw_update_context (struct _Unwind_Context *context, _Unwind_FrameState *fs) +{ + uw_update_context_1 (context, fs); + + /* In general this unwinder doesn't make any distinction between + undefined and same_value rule. Call-saved registers are assumed + to have same_value rule by default and explicit undefined + rule is handled like same_value. The only exception is + DW_CFA_undefined on retaddr_column which is supposed to + mark outermost frame in DWARF 3. */ + if (fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (fs->retaddr_column)].how + == REG_UNDEFINED) + /* uw_frame_state_for uses context->ra == 0 check to find outermost + stack frame. */ + context->ra = 0; + else + /* Compute the return address now, since the return address column + can change from frame to frame. */ + context->ra = __builtin_extract_return_addr + (_Unwind_GetPtr (context, fs->retaddr_column)); +} + +static void +uw_advance_context (struct _Unwind_Context *context, _Unwind_FrameState *fs) +{ + uw_update_context (context, fs); +} + +/* Fill in CONTEXT for top-of-stack. The only valid registers at this + level will be the return address and the CFA. */ + +#define uw_init_context(CONTEXT) \ + do \ + { \ + /* Do any necessary initialization to access arbitrary stack frames. \ + On the SPARC, this means flushing the register windows. */ \ + __builtin_unwind_init (); \ + uw_init_context_1 (CONTEXT, __builtin_dwarf_cfa (), \ + __builtin_return_address (0)); \ + } \ + while (0) + +static inline void +init_dwarf_reg_size_table (void) +{ + __builtin_init_dwarf_reg_size_table (dwarf_reg_size_table); +} + +static void __attribute__((noinline)) +uw_init_context_1 (struct _Unwind_Context *context, + void *outer_cfa, void *outer_ra) +{ + void *ra = __builtin_extract_return_addr (__builtin_return_address (0)); + _Unwind_FrameState fs; + _Unwind_SpTmp sp_slot; + _Unwind_Reason_Code code; + + memset (context, 0, sizeof (struct _Unwind_Context)); + context->ra = ra; + if (!ASSUME_EXTENDED_UNWIND_CONTEXT) + context->flags = EXTENDED_CONTEXT_BIT; + + code = uw_frame_state_for (context, &fs); + gcc_assert (code == _URC_NO_REASON); + +#if __GTHREADS + { + static __gthread_once_t once_regsizes = __GTHREAD_ONCE_INIT; + if (__gthread_once (&once_regsizes, init_dwarf_reg_size_table) != 0 + && dwarf_reg_size_table[0] == 0) + init_dwarf_reg_size_table (); + } +#else + if (dwarf_reg_size_table[0] == 0) + init_dwarf_reg_size_table (); +#endif + + /* Force the frame state to use the known cfa value. */ + _Unwind_SetSpColumn (context, outer_cfa, &sp_slot); + fs.regs.cfa_how = CFA_REG_OFFSET; + fs.regs.cfa_reg = __builtin_dwarf_sp_column (); + fs.regs.cfa_offset = 0; + + uw_update_context_1 (context, &fs); + + /* If the return address column was saved in a register in the + initialization context, then we can't see it in the given + call frame data. So have the initialization context tell us. */ + context->ra = __builtin_extract_return_addr (outer_ra); +} + +static void _Unwind_DebugHook (void *, void *) + __attribute__ ((__noinline__, __used__, __noclone__)); + +/* This function is called during unwinding. It is intended as a hook + for a debugger to intercept exceptions. CFA is the CFA of the + target frame. HANDLER is the PC to which control will be + transferred. */ +static void +_Unwind_DebugHook (void *cfa __attribute__ ((__unused__)), + void *handler __attribute__ ((__unused__))) +{ + /* We only want to use stap probes starting with v3. Earlier + versions added too much startup cost. */ +#if defined (HAVE_SYS_SDT_H) && defined (STAP_PROBE2) && _SDT_NOTE_TYPE >= 3 + STAP_PROBE2 (libgcc, unwind, cfa, handler); +#else + asm (""); +#endif +} + +/* Install TARGET into CURRENT so that we can return to it. This is a + macro because __builtin_eh_return must be invoked in the context of + our caller. */ + +#define uw_install_context(CURRENT, TARGET) \ + do \ + { \ + long offset = uw_install_context_1 ((CURRENT), (TARGET)); \ + void *handler = __builtin_frob_return_addr ((TARGET)->ra); \ + _Unwind_DebugHook ((TARGET)->cfa, handler); \ + __builtin_eh_return (offset, handler); \ + } \ + while (0) + +static long +uw_install_context_1 (struct _Unwind_Context *current, + struct _Unwind_Context *target) +{ + long i; + _Unwind_SpTmp sp_slot; + + /* If the target frame does not have a saved stack pointer, + then set up the target's CFA. */ + if (!_Unwind_GetGRPtr (target, __builtin_dwarf_sp_column ())) + _Unwind_SetSpColumn (target, target->cfa, &sp_slot); + + for (i = 0; i < __LIBGCC_DWARF_FRAME_REGISTERS__; ++i) + { + void *c = (void *) (_Unwind_Internal_Ptr) current->reg[i]; + void *t = (void *) (_Unwind_Internal_Ptr)target->reg[i]; + + gcc_assert (current->by_value[i] == 0); + if (target->by_value[i] && c) + { + _Unwind_Word w; + _Unwind_Ptr p; + if (dwarf_reg_size_table[i] == sizeof (_Unwind_Word)) + { + w = (_Unwind_Internal_Ptr) t; + memcpy (c, &w, sizeof (_Unwind_Word)); + } + else + { + gcc_assert (dwarf_reg_size_table[i] == sizeof (_Unwind_Ptr)); + p = (_Unwind_Internal_Ptr) t; + memcpy (c, &p, sizeof (_Unwind_Ptr)); + } + } + else if (t && c && t != c) + memcpy (c, t, dwarf_reg_size_table[i]); + } + + /* If the current frame doesn't have a saved stack pointer, then we + need to rely on EH_RETURN_STACKADJ_RTX to get our target stack + pointer value reloaded. */ + if (!_Unwind_GetGRPtr (current, __builtin_dwarf_sp_column ())) + { + void *target_cfa; + + target_cfa = _Unwind_GetPtr (target, __builtin_dwarf_sp_column ()); + + /* We adjust SP by the difference between CURRENT and TARGET's CFA. */ + if (__LIBGCC_STACK_GROWS_DOWNWARD__) + return target_cfa - current->cfa + target->args_size; + else + return current->cfa - target_cfa - target->args_size; + } + return 0; +} + +static inline _Unwind_Ptr +uw_identify_context (struct _Unwind_Context *context) +{ + /* The CFA is not sufficient to disambiguate the context of a function + interrupted by a signal before establishing its frame and the context + of the signal itself. */ + if (__LIBGCC_STACK_GROWS_DOWNWARD__) + return _Unwind_GetCFA (context) - _Unwind_IsSignalFrame (context); + else + return _Unwind_GetCFA (context) + _Unwind_IsSignalFrame (context); +} + + +#include "unwind.inc" + +#if defined (USE_GAS_SYMVER) && defined (SHARED) && defined (USE_LIBUNWIND_EXCEPTIONS) +alias (_Unwind_Backtrace); +alias (_Unwind_DeleteException); +alias (_Unwind_FindEnclosingFunction); +alias (_Unwind_ForcedUnwind); +alias (_Unwind_GetDataRelBase); +alias (_Unwind_GetTextRelBase); +alias (_Unwind_GetCFA); +alias (_Unwind_GetGR); +alias (_Unwind_GetIP); +alias (_Unwind_GetLanguageSpecificData); +alias (_Unwind_GetRegionStart); +alias (_Unwind_RaiseException); +alias (_Unwind_Resume); +alias (_Unwind_Resume_or_Rethrow); +alias (_Unwind_SetGR); +alias (_Unwind_SetIP); +#endif + +#endif /* !USING_SJLJ_EXCEPTIONS */ diff --git a/contrib/toolchain/gcc/5x/libgcc/unwind-dw2.h b/contrib/toolchain/gcc/5x/libgcc/unwind-dw2.h new file mode 100644 index 0000000000..cbc251ff37 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/unwind-dw2.h @@ -0,0 +1,80 @@ +/* DWARF2 frame unwind data structure. + Copyright (C) 1997-2015 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 + . */ + +/* The result of interpreting the frame unwind info for a frame. + This is all symbolic at this point, as none of the values can + be resolved until the target pc is located. */ +typedef struct +{ + /* Each register save state can be described in terms of a CFA slot, + another register, or a location expression. */ + struct frame_state_reg_info + { + struct { + union { + _Unwind_Word reg; + _Unwind_Sword offset; + const unsigned char *exp; + } loc; + enum { + REG_UNSAVED, + REG_SAVED_OFFSET, + REG_SAVED_REG, + REG_SAVED_EXP, + REG_SAVED_VAL_OFFSET, + REG_SAVED_VAL_EXP, + REG_UNDEFINED + } how; + } reg[__LIBGCC_DWARF_FRAME_REGISTERS__+1]; + + /* Used to implement DW_CFA_remember_state. */ + struct frame_state_reg_info *prev; + + /* The CFA can be described in terms of a reg+offset or a + location expression. */ + _Unwind_Sword cfa_offset; + _Unwind_Word cfa_reg; + const unsigned char *cfa_exp; + enum { + CFA_UNSET, + CFA_REG_OFFSET, + CFA_EXP + } cfa_how; + } regs; + + /* The PC described by the current frame state. */ + void *pc; + + /* The information we care about from the CIE/FDE. */ + _Unwind_Personality_Fn personality; + _Unwind_Sword data_align; + _Unwind_Word code_align; + _Unwind_Word retaddr_column; + unsigned char fde_encoding; + unsigned char lsda_encoding; + unsigned char saw_z; + unsigned char signal_frame; + void *eh_ptr; +} _Unwind_FrameState; + diff --git a/contrib/toolchain/gcc/5x/libgcc/unwind-generic.h b/contrib/toolchain/gcc/5x/libgcc/unwind-generic.h new file mode 100644 index 0000000000..a51ffd6b6c --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/unwind-generic.h @@ -0,0 +1,293 @@ +/* Exception handling and frame unwind runtime interface routines. + Copyright (C) 2001-2015 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 is derived from the C++ ABI for IA-64. Where we diverge + for cross-architecture compatibility are noted with "@@@". */ + +#ifndef _UNWIND_H +#define _UNWIND_H + +#if defined (__SEH__) && !defined (__USING_SJLJ_EXCEPTIONS__) +/* Only for _GCC_specific_handler. */ +#include +#endif + +#ifndef HIDE_EXPORTS +#pragma GCC visibility push(default) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Level 1: Base ABI */ + +/* @@@ The IA-64 ABI uses uint64 throughout. Most places this is + inefficient for 32-bit and smaller machines. */ +typedef unsigned _Unwind_Word __attribute__((__mode__(__unwind_word__))); +typedef signed _Unwind_Sword __attribute__((__mode__(__unwind_word__))); +#if defined(__ia64__) && defined(__hpux__) +typedef unsigned _Unwind_Ptr __attribute__((__mode__(__word__))); +#else +typedef unsigned _Unwind_Ptr __attribute__((__mode__(__pointer__))); +#endif +typedef unsigned _Unwind_Internal_Ptr __attribute__((__mode__(__pointer__))); + +/* @@@ The IA-64 ABI uses a 64-bit word to identify the producer and + consumer of an exception. We'll go along with this for now even on + 32-bit machines. We'll need to provide some other option for + 16-bit machines and for machines with > 8 bits per byte. */ +typedef unsigned _Unwind_Exception_Class __attribute__((__mode__(__DI__))); + +/* The unwind interface uses reason codes in several contexts to + identify the reasons for failures or other actions. */ +typedef enum +{ + _URC_NO_REASON = 0, + _URC_FOREIGN_EXCEPTION_CAUGHT = 1, + _URC_FATAL_PHASE2_ERROR = 2, + _URC_FATAL_PHASE1_ERROR = 3, + _URC_NORMAL_STOP = 4, + _URC_END_OF_STACK = 5, + _URC_HANDLER_FOUND = 6, + _URC_INSTALL_CONTEXT = 7, + _URC_CONTINUE_UNWIND = 8 +} _Unwind_Reason_Code; + + +/* The unwind interface uses a pointer to an exception header object + as its representation of an exception being thrown. In general, the + full representation of an exception object is language- and + implementation-specific, but it will be prefixed by a header + understood by the unwind interface. */ + +struct _Unwind_Exception; + +typedef void (*_Unwind_Exception_Cleanup_Fn) (_Unwind_Reason_Code, + struct _Unwind_Exception *); + +struct _Unwind_Exception +{ + _Unwind_Exception_Class exception_class; + _Unwind_Exception_Cleanup_Fn exception_cleanup; + +#if !defined (__USING_SJLJ_EXCEPTIONS__) && defined (__SEH__) + _Unwind_Word private_[6]; +#else + _Unwind_Word private_1; + _Unwind_Word private_2; +#endif + + /* @@@ The IA-64 ABI says that this structure must be double-word aligned. + Taking that literally does not make much sense generically. Instead we + provide the maximum alignment required by any type for the machine. */ +} __attribute__((__aligned__)); + + +/* The ACTIONS argument to the personality routine is a bitwise OR of one + or more of the following constants. */ +typedef int _Unwind_Action; + +#define _UA_SEARCH_PHASE 1 +#define _UA_CLEANUP_PHASE 2 +#define _UA_HANDLER_FRAME 4 +#define _UA_FORCE_UNWIND 8 +#define _UA_END_OF_STACK 16 + +/* The target can override this macro to define any back-end-specific + attributes required for the lowest-level stack frame. */ +#ifndef LIBGCC2_UNWIND_ATTRIBUTE +#define LIBGCC2_UNWIND_ATTRIBUTE +#endif + +/* This is an opaque type used to refer to a system-specific data + structure used by the system unwinder. This context is created and + destroyed by the system, and passed to the personality routine + during unwinding. */ +struct _Unwind_Context; + +/* Raise an exception, passing along the given exception object. */ +extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE +_Unwind_RaiseException (struct _Unwind_Exception *); + +/* Raise an exception for forced unwinding. */ + +typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn) + (int, _Unwind_Action, _Unwind_Exception_Class, + struct _Unwind_Exception *, struct _Unwind_Context *, void *); + +extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE +_Unwind_ForcedUnwind (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *); + +/* Helper to invoke the exception_cleanup routine. */ +extern void _Unwind_DeleteException (struct _Unwind_Exception *); + +/* Resume propagation of an existing exception. This is used after + e.g. executing cleanup code, and not to implement rethrowing. */ +extern void LIBGCC2_UNWIND_ATTRIBUTE +_Unwind_Resume (struct _Unwind_Exception *); + +/* @@@ Resume propagation of a FORCE_UNWIND exception, or to rethrow + a normal exception that was handled. */ +extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE +_Unwind_Resume_or_Rethrow (struct _Unwind_Exception *); + +/* @@@ Use unwind data to perform a stack backtrace. The trace callback + is called for every stack frame in the call chain, but no cleanup + actions are performed. */ +typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn) + (struct _Unwind_Context *, void *); + +extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE +_Unwind_Backtrace (_Unwind_Trace_Fn, void *); + +/* These functions are used for communicating information about the unwind + context (i.e. the unwind descriptors and the user register state) between + the unwind library and the personality routine and landing pad. Only + selected registers may be manipulated. */ + +extern _Unwind_Word _Unwind_GetGR (struct _Unwind_Context *, int); +extern void _Unwind_SetGR (struct _Unwind_Context *, int, _Unwind_Word); + +extern _Unwind_Ptr _Unwind_GetIP (struct _Unwind_Context *); +extern _Unwind_Ptr _Unwind_GetIPInfo (struct _Unwind_Context *, int *); +extern void _Unwind_SetIP (struct _Unwind_Context *, _Unwind_Ptr); + +/* @@@ Retrieve the CFA of the given context. */ +extern _Unwind_Word _Unwind_GetCFA (struct _Unwind_Context *); + +extern void *_Unwind_GetLanguageSpecificData (struct _Unwind_Context *); + +extern _Unwind_Ptr _Unwind_GetRegionStart (struct _Unwind_Context *); + + +/* The personality routine is the function in the C++ (or other language) + runtime library which serves as an interface between the system unwind + library and language-specific exception handling semantics. It is + specific to the code fragment described by an unwind info block, and + it is always referenced via the pointer in the unwind info block, and + hence it has no ABI-specified name. + + Note that this implies that two different C++ implementations can + use different names, and have different contents in the language + specific data area. Moreover, that the language specific data + area contains no version info because name of the function invoked + provides more effective versioning by detecting at link time the + lack of code to handle the different data format. */ + +typedef _Unwind_Reason_Code (*_Unwind_Personality_Fn) + (int, _Unwind_Action, _Unwind_Exception_Class, + struct _Unwind_Exception *, struct _Unwind_Context *); + +/* @@@ The following alternate entry points are for setjmp/longjmp + based unwinding. */ + +struct SjLj_Function_Context; +extern void _Unwind_SjLj_Register (struct SjLj_Function_Context *); +extern void _Unwind_SjLj_Unregister (struct SjLj_Function_Context *); + +extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE +_Unwind_SjLj_RaiseException (struct _Unwind_Exception *); +extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE +_Unwind_SjLj_ForcedUnwind (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *); +extern void LIBGCC2_UNWIND_ATTRIBUTE +_Unwind_SjLj_Resume (struct _Unwind_Exception *); +extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE +_Unwind_SjLj_Resume_or_Rethrow (struct _Unwind_Exception *); + +/* @@@ The following provide access to the base addresses for text + and data-relative addressing in the LDSA. In order to stay link + compatible with the standard ABI for IA-64, we inline these. */ + +#ifdef __ia64__ +#include + +static inline _Unwind_Ptr +_Unwind_GetDataRelBase (struct _Unwind_Context *_C) +{ + /* The GP is stored in R1. */ + return _Unwind_GetGR (_C, 1); +} + +static inline _Unwind_Ptr +_Unwind_GetTextRelBase (struct _Unwind_Context *_C __attribute__ ((__unused__))) +{ + abort (); + return 0; +} + +/* @@@ Retrieve the Backing Store Pointer of the given context. */ +extern _Unwind_Word _Unwind_GetBSP (struct _Unwind_Context *); +#else +extern _Unwind_Ptr _Unwind_GetDataRelBase (struct _Unwind_Context *); +extern _Unwind_Ptr _Unwind_GetTextRelBase (struct _Unwind_Context *); +#endif + +/* @@@ Given an address, return the entry point of the function that + contains it. */ +extern void * _Unwind_FindEnclosingFunction (void *pc); + +#ifndef __SIZEOF_LONG__ + #error "__SIZEOF_LONG__ macro not defined" +#endif + +#ifndef __SIZEOF_POINTER__ + #error "__SIZEOF_POINTER__ macro not defined" +#endif + + +/* leb128 type numbers have a potentially unlimited size. + The target of the following definitions of _sleb128_t and _uleb128_t + is to have efficient data types large enough to hold the leb128 type + numbers used in the unwind code. + Mostly these types will simply be defined to long and unsigned long + except when a unsigned long data type on the target machine is not + capable of storing a pointer. */ + +#if __SIZEOF_LONG__ >= __SIZEOF_POINTER__ + typedef long _sleb128_t; + typedef unsigned long _uleb128_t; +#elif __SIZEOF_LONG_LONG__ >= __SIZEOF_POINTER__ + typedef long long _sleb128_t; + typedef unsigned long long _uleb128_t; +#else +# error "What type shall we use for _sleb128_t?" +#endif + +#if defined (__SEH__) && !defined (__USING_SJLJ_EXCEPTIONS__) +/* Handles the mapping from SEH to GCC interfaces. */ +EXCEPTION_DISPOSITION _GCC_specific_handler (PEXCEPTION_RECORD, void *, + PCONTEXT, PDISPATCHER_CONTEXT, + _Unwind_Personality_Fn); +#endif + +#ifdef __cplusplus +} +#endif + +#ifndef HIDE_EXPORTS +#pragma GCC visibility pop +#endif + +#endif /* unwind.h */ diff --git a/contrib/toolchain/gcc/5x/libgcc/unwind-pe.h b/contrib/toolchain/gcc/5x/libgcc/unwind-pe.h new file mode 100644 index 0000000000..325c7bdeaa --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/unwind-pe.h @@ -0,0 +1,289 @@ +/* Exception handling and frame unwind runtime interface routines. + Copyright (C) 2001-2015 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 + . */ + +/* @@@ Really this should be out of line, but this also causes link + compatibility problems with the base ABI. This is slightly better + than duplicating code, however. */ + +#ifndef GCC_UNWIND_PE_H +#define GCC_UNWIND_PE_H + +/* If using C++, references to abort have to be qualified with std::. */ +#if __cplusplus +#define __gxx_abort std::abort +#else +#define __gxx_abort abort +#endif + +/* Pointer encodings, from dwarf2.h. */ +#define DW_EH_PE_absptr 0x00 +#define DW_EH_PE_omit 0xff + +#define DW_EH_PE_uleb128 0x01 +#define DW_EH_PE_udata2 0x02 +#define DW_EH_PE_udata4 0x03 +#define DW_EH_PE_udata8 0x04 +#define DW_EH_PE_sleb128 0x09 +#define DW_EH_PE_sdata2 0x0A +#define DW_EH_PE_sdata4 0x0B +#define DW_EH_PE_sdata8 0x0C +#define DW_EH_PE_signed 0x08 + +#define DW_EH_PE_pcrel 0x10 +#define DW_EH_PE_textrel 0x20 +#define DW_EH_PE_datarel 0x30 +#define DW_EH_PE_funcrel 0x40 +#define DW_EH_PE_aligned 0x50 + +#define DW_EH_PE_indirect 0x80 + + +#ifndef NO_SIZE_OF_ENCODED_VALUE + +/* Given an encoding, return the number of bytes the format occupies. + This is only defined for fixed-size encodings, and so does not + include leb128. */ + +static unsigned int +size_of_encoded_value (unsigned char encoding) __attribute__ ((unused)); + +static unsigned int +size_of_encoded_value (unsigned char encoding) +{ + if (encoding == DW_EH_PE_omit) + return 0; + + switch (encoding & 0x07) + { + case DW_EH_PE_absptr: + return sizeof (void *); + case DW_EH_PE_udata2: + return 2; + case DW_EH_PE_udata4: + return 4; + case DW_EH_PE_udata8: + return 8; + } + __gxx_abort (); +} + +#endif + +#ifndef NO_BASE_OF_ENCODED_VALUE + +/* Given an encoding and an _Unwind_Context, return the base to which + the encoding is relative. This base may then be passed to + read_encoded_value_with_base for use when the _Unwind_Context is + not available. */ + +static _Unwind_Ptr +base_of_encoded_value (unsigned char encoding, struct _Unwind_Context *context) +{ + if (encoding == DW_EH_PE_omit) + return 0; + + switch (encoding & 0x70) + { + case DW_EH_PE_absptr: + case DW_EH_PE_pcrel: + case DW_EH_PE_aligned: + return 0; + + case DW_EH_PE_textrel: + return _Unwind_GetTextRelBase (context); + case DW_EH_PE_datarel: + return _Unwind_GetDataRelBase (context); + case DW_EH_PE_funcrel: + return _Unwind_GetRegionStart (context); + } + __gxx_abort (); +} + +#endif + +/* Read an unsigned leb128 value from P, store the value in VAL, return + P incremented past the value. We assume that a word is large enough to + hold any value so encoded; if it is smaller than a pointer on some target, + pointers should not be leb128 encoded on that target. */ + +static const unsigned char * +read_uleb128 (const unsigned char *p, _uleb128_t *val) +{ + unsigned int shift = 0; + unsigned char byte; + _uleb128_t result; + + result = 0; + do + { + byte = *p++; + result |= ((_uleb128_t)byte & 0x7f) << shift; + shift += 7; + } + while (byte & 0x80); + + *val = result; + return p; +} + +/* Similar, but read a signed leb128 value. */ + +static const unsigned char * +read_sleb128 (const unsigned char *p, _sleb128_t *val) +{ + unsigned int shift = 0; + unsigned char byte; + _uleb128_t result; + + result = 0; + do + { + byte = *p++; + result |= ((_uleb128_t)byte & 0x7f) << shift; + shift += 7; + } + while (byte & 0x80); + + /* Sign-extend a negative value. */ + if (shift < 8 * sizeof(result) && (byte & 0x40) != 0) + result |= -(((_uleb128_t)1L) << shift); + + *val = (_sleb128_t) result; + return p; +} + +/* Load an encoded value from memory at P. The value is returned in VAL; + The function returns P incremented past the value. BASE is as given + by base_of_encoded_value for this encoding in the appropriate context. */ + +static const unsigned char * +read_encoded_value_with_base (unsigned char encoding, _Unwind_Ptr base, + const unsigned char *p, _Unwind_Ptr *val) +{ + union unaligned + { + void *ptr; + unsigned u2 __attribute__ ((mode (HI))); + unsigned u4 __attribute__ ((mode (SI))); + unsigned u8 __attribute__ ((mode (DI))); + signed s2 __attribute__ ((mode (HI))); + signed s4 __attribute__ ((mode (SI))); + signed s8 __attribute__ ((mode (DI))); + } __attribute__((__packed__)); + + const union unaligned *u = (const union unaligned *) p; + _Unwind_Internal_Ptr result; + + if (encoding == DW_EH_PE_aligned) + { + _Unwind_Internal_Ptr a = (_Unwind_Internal_Ptr) p; + a = (a + sizeof (void *) - 1) & - sizeof(void *); + result = *(_Unwind_Internal_Ptr *) a; + p = (const unsigned char *) (_Unwind_Internal_Ptr) (a + sizeof (void *)); + } + else + { + switch (encoding & 0x0f) + { + case DW_EH_PE_absptr: + result = (_Unwind_Internal_Ptr) u->ptr; + p += sizeof (void *); + break; + + case DW_EH_PE_uleb128: + { + _uleb128_t tmp; + p = read_uleb128 (p, &tmp); + result = (_Unwind_Internal_Ptr) tmp; + } + break; + + case DW_EH_PE_sleb128: + { + _sleb128_t tmp; + p = read_sleb128 (p, &tmp); + result = (_Unwind_Internal_Ptr) tmp; + } + break; + + case DW_EH_PE_udata2: + result = u->u2; + p += 2; + break; + case DW_EH_PE_udata4: + result = u->u4; + p += 4; + break; + case DW_EH_PE_udata8: + result = u->u8; + p += 8; + break; + + case DW_EH_PE_sdata2: + result = u->s2; + p += 2; + break; + case DW_EH_PE_sdata4: + result = u->s4; + p += 4; + break; + case DW_EH_PE_sdata8: + result = u->s8; + p += 8; + break; + + default: + __gxx_abort (); + } + + if (result != 0) + { + result += ((encoding & 0x70) == DW_EH_PE_pcrel + ? (_Unwind_Internal_Ptr) u : base); + if (encoding & DW_EH_PE_indirect) + result = *(_Unwind_Internal_Ptr *) result; + } + } + + *val = result; + return p; +} + +#ifndef NO_BASE_OF_ENCODED_VALUE + +/* Like read_encoded_value_with_base, but get the base from the context + rather than providing it directly. */ + +static inline const unsigned char * +read_encoded_value (struct _Unwind_Context *context, unsigned char encoding, + const unsigned char *p, _Unwind_Ptr *val) +{ + return read_encoded_value_with_base (encoding, + base_of_encoded_value (encoding, context), + p, val); +} + +#endif + +#endif /* unwind-pe.h */ diff --git a/contrib/toolchain/gcc/5x/libgcc/unwind-seh.c b/contrib/toolchain/gcc/5x/libgcc/unwind-seh.c new file mode 100644 index 0000000000..ba12ecf9ea --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/unwind-seh.c @@ -0,0 +1,478 @@ +/* Structured Exception Handling (SEH) runtime interface routines. + Copyright (C) 2010-2015 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 "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#include "tm.h" +#include "unwind.h" + +#if defined (__SEH__) && !defined (__USING_SJLJ_EXCEPTIONS__) + +/* At the moment everything is written for x64, but in theory this could + also be used for i386, arm, mips and other extant embedded Windows. */ +#ifndef __x86_64__ +#error "Unsupported architecture." +#endif + +/* Define GCC's exception codes. See + http://msdn.microsoft.com/en-us/library/het71c37(v=VS.80).aspx + In particular, MS defines bits: + [31:30] = 3 (error), 2 (warning), 1 (info), 0 (success) + [29] = 1 (user-defined) + [28] = 0 (reserved) + We define bits: + [24:27] = type + [0:23] = magic + We set "magic" to "GCC", which is similar to MVC++ which uses "msc" + as the low 3 bytes of its user-defined codes for C++ exceptions. + + We define the ExceptionInformation entries as follows: + [0] = _Unwind_Exception pointer + [1] = target frame + [2] = target ip + [3] = target rdx +*/ + +#define STATUS_USER_DEFINED (1U << 29) + +#define GCC_MAGIC (('G' << 16) | ('C' << 8) | 'C') +#define GCC_EXCEPTION(TYPE) \ + (STATUS_USER_DEFINED | ((TYPE) << 24) | GCC_MAGIC) + +#define STATUS_GCC_THROW GCC_EXCEPTION (0) +#define STATUS_GCC_UNWIND GCC_EXCEPTION (1) +#define STATUS_GCC_FORCED GCC_EXCEPTION (2) + + +struct _Unwind_Context +{ + _Unwind_Word cfa; + _Unwind_Word ra; + _Unwind_Word reg[2]; + PDISPATCHER_CONTEXT disp; +}; + +/* Get the value of register INDEX as saved in CONTEXT. */ + +_Unwind_Word +_Unwind_GetGR (struct _Unwind_Context *c, int index) +{ + if (index < 0 || index >= 2) + abort (); + return c->reg[index]; +} + +/* Overwrite the saved value for register INDEX in CONTEXT with VAL. */ + +void +_Unwind_SetGR (struct _Unwind_Context *c, int index, _Unwind_Word val) +{ + if (index < 0 || index >= 2) + abort (); + c->reg[index] = val; +} + +/* Get the value of the CFA as saved in CONTEXT. */ + +_Unwind_Word +_Unwind_GetCFA (struct _Unwind_Context *c) +{ + return c->cfa; +} + +/* Retrieve the return address for CONTEXT. */ + +_Unwind_Ptr +_Unwind_GetIP (struct _Unwind_Context *c) +{ + return c->ra; +} + +/* Retrieve the return address and flag whether that IP is before + or after first not yet fully executed instruction. */ + +_Unwind_Ptr +_Unwind_GetIPInfo (struct _Unwind_Context *c, int *ip_before_insn) +{ + /* ??? Is there a concept of a signal context properly? There's + obviously an UNWP_PUSH_MACHFRAME opcode, but the runtime might + have arranged for that not to matter, really. */ + *ip_before_insn = 0; + return c->ra; +} + +/* Overwrite the return address for CONTEXT with VAL. */ + +void +_Unwind_SetIP (struct _Unwind_Context *c, _Unwind_Ptr val) +{ + c->ra = val; +} + +void * +_Unwind_GetLanguageSpecificData (struct _Unwind_Context *c) +{ + return c->disp->HandlerData; +} + +_Unwind_Ptr +_Unwind_GetRegionStart (struct _Unwind_Context *c) +{ + return c->disp->FunctionEntry->BeginAddress + c->disp->ImageBase; +} + +void * +_Unwind_FindEnclosingFunction (void *pc) +{ + PRUNTIME_FUNCTION entry; + ULONG64 ImageBase; + + entry = RtlLookupFunctionEntry ((ULONG64)pc, &ImageBase, NULL); + + return (entry ? (void *)(entry->BeginAddress + ImageBase) : NULL); +} + +_Unwind_Ptr +_Unwind_GetDataRelBase (struct _Unwind_Context *c ATTRIBUTE_UNUSED) +{ + return 0; +} + +_Unwind_Ptr +_Unwind_GetTextRelBase (struct _Unwind_Context *c) +{ + return c->disp->ImageBase; +} + + +/* The two-phase unwind process that GCC uses is ordered differently + from the two-phase unwind process that SEH uses. The mechansism + that GCC uses is to have the filter return _URC_HANDER_FOUND; the + mechanism that SEH uses is for the filter function call back into + the unwinder. + + An Ideal port to SEH would have GCC emit handler functions that + can be called, given a pointer to the "EstablisherFrame" (i.e. + the frame pointer base of the user-level function) can manipulate + the user-level variables within the user-level function's stack + frame. Once done manipulating the variables, it would return + a ExceptionContinueSearch, and the unwind process would continue. + + GCC has always done things a bit differently. We continue to + transfer control back into the user-level function which, once + done manipulating the user-level variables, re-throws the exception. */ + +/* The "real" language-specific personality handler forwards to here + where we handle the MS SEH state and transforms it into the GCC + unwind state as per GCC's , at which point we defer to + the regular language-specfic exception handler, which is passed in. */ + +EXCEPTION_DISPOSITION +_GCC_specific_handler (PEXCEPTION_RECORD ms_exc, void *this_frame, + PCONTEXT ms_orig_context, PDISPATCHER_CONTEXT ms_disp, + _Unwind_Personality_Fn gcc_per) +{ + DWORD ms_flags = ms_exc->ExceptionFlags; + DWORD ms_code = ms_exc->ExceptionCode; + + struct _Unwind_Exception *gcc_exc + = (struct _Unwind_Exception *) ms_exc->ExceptionInformation[0]; + struct _Unwind_Context gcc_context; + _Unwind_Action gcc_action; + _Unwind_Reason_Code gcc_reason; + + if (ms_flags & EXCEPTION_TARGET_UNWIND) + { + /* This frame is known to be the target frame. We've already + "installed" the target_ip and RAX value via the arguments + to RtlUnwindEx. All that's left is to set the RDX value + and "continue" to have the context installed. */ + ms_disp->ContextRecord->Rdx = ms_exc->ExceptionInformation[3]; + return ExceptionContinueSearch; + } + + if (ms_code == STATUS_GCC_UNWIND) + { + /* This is a colliding exception that we threw so that we could + cancel the already in-flight exception and stop in a frame + that wanted to perform some unwind action. The only relevant + test is that we're the target frame. */ + if (ms_exc->ExceptionInformation[1] == (_Unwind_Ptr) this_frame) + { + RtlUnwindEx (this_frame, ms_exc->ExceptionInformation[2], + ms_exc, gcc_exc, ms_orig_context, + ms_disp->HistoryTable); + abort (); + } + return ExceptionContinueSearch; + } + + gcc_context.cfa = ms_disp->ContextRecord->Rsp; + gcc_context.ra = ms_disp->ControlPc; + gcc_context.reg[0] = 0xdeadbeef; /* These are write-only. */ + gcc_context.reg[1] = 0xdeadbeef; + gcc_context.disp = ms_disp; + + if (ms_code == STATUS_GCC_FORCED) + { + _Unwind_Stop_Fn stop = (_Unwind_Stop_Fn) gcc_exc->private_[0]; + void *stop_argument = (void *) gcc_exc->private_[4]; + + gcc_action = _UA_FORCE_UNWIND | _UA_CLEANUP_PHASE; + + stop (1, gcc_action, gcc_exc->exception_class, gcc_exc, + &gcc_context, stop_argument); + + goto phase2; + } + + /* ??? TODO: handling non-gcc user-defined exceptions as foreign. */ + if (ms_code != STATUS_GCC_THROW) + return ExceptionContinueSearch; + + if (ms_flags & (EXCEPTION_UNWINDING | EXCEPTION_EXIT_UNWIND)) + { + /* This is Phase 2. */ + /* We know this isn't the target frame because we've already tested + EXCEPTION_TARGET_UNWIND. The remaining possibility is that the + gcc personality has unwind code to run. */ + + gcc_action = _UA_CLEANUP_PHASE; + phase2: + gcc_reason = gcc_per (1, gcc_action, gcc_exc->exception_class, + gcc_exc, &gcc_context); + + if (gcc_reason == _URC_CONTINUE_UNWIND) + return ExceptionContinueSearch; + + if (gcc_reason == _URC_INSTALL_CONTEXT) + { + /* Scratch space for the bits for the unwind catch. */ + ms_exc->ExceptionInformation[1] = (_Unwind_Ptr) this_frame; + ms_exc->ExceptionInformation[2] = gcc_context.ra; + ms_exc->ExceptionInformation[3] = gcc_context.reg[1]; + + /* Cancel the current exception by raising another. */ + RaiseException (STATUS_GCC_UNWIND, EXCEPTION_NONCONTINUABLE, + 4, ms_exc->ExceptionInformation); + + /* Is RaiseException declared noreturn? */ + } + + /* In _Unwind_RaiseException_Phase2 we return _URC_FATAL_PHASE2_ERROR. */ + } + else + { + /* This is Phase 1. */ + gcc_reason = gcc_per (1, _UA_SEARCH_PHASE, gcc_exc->exception_class, + gcc_exc, &gcc_context); + + if (gcc_reason == _URC_CONTINUE_UNWIND) + return ExceptionContinueSearch; + + if (gcc_reason == _URC_HANDLER_FOUND) + { + /* We really need some of the information that GCC's personality + routines compute during phase 2 right now, like the target IP. + Go ahead and ask for it now, and cache it. */ + gcc_reason = gcc_per (1, _UA_CLEANUP_PHASE | _UA_HANDLER_FRAME, + gcc_exc->exception_class, gcc_exc, + &gcc_context); + if (gcc_reason != _URC_INSTALL_CONTEXT) + abort (); + + gcc_exc->private_[1] = (_Unwind_Ptr) this_frame; + gcc_exc->private_[2] = gcc_context.ra; + gcc_exc->private_[3] = gcc_context.reg[1]; + + ms_exc->NumberParameters = 4; + ms_exc->ExceptionInformation[1] = (_Unwind_Ptr) this_frame; + ms_exc->ExceptionInformation[2] = gcc_context.ra; + ms_exc->ExceptionInformation[3] = gcc_context.reg[1]; + + /* Begin phase 2. Perform the unwinding. */ + RtlUnwindEx (this_frame, gcc_context.ra, ms_exc, + (PVOID)gcc_context.reg[0], ms_orig_context, + ms_disp->HistoryTable); + } + + /* In _Unwind_RaiseException we return _URC_FATAL_PHASE1_ERROR. */ + } + abort (); +} + +/* Raise an exception, passing along the given exception object. */ + +_Unwind_Reason_Code +_Unwind_RaiseException (struct _Unwind_Exception *exc) +{ + memset (exc->private_, 0, sizeof (exc->private_)); + + /* The ExceptionInformation array will have only 1 element, EXC. */ + RaiseException (STATUS_GCC_THROW, 0, 1, (ULONG_PTR *)&exc); + + /* The exception handler installed in crt0 will continue any GCC + exception that reaches there (and isn't marked non-continuable). + Returning allows the C++ runtime to call std::terminate. */ + return _URC_END_OF_STACK; +} + +/* Resume propagation of an existing exception. This is used after + e.g. executing cleanup code, and not to implement rethrowing. */ + +void +_Unwind_Resume (struct _Unwind_Exception *gcc_exc) +{ + UNWIND_HISTORY_TABLE ms_history; + EXCEPTION_RECORD ms_exc; + CONTEXT ms_context; + + memset (&ms_exc, 0, sizeof(ms_exc)); + memset (&ms_history, 0, sizeof(ms_history)); + + /* ??? Not 100% perfect, since we aren't passing on the *original* + exception context, but should be good enough. */ + ms_exc.ExceptionCode = STATUS_GCC_THROW; + ms_exc.ExceptionFlags = EXCEPTION_NONCONTINUABLE; + ms_exc.NumberParameters = 4; + ms_exc.ExceptionInformation[0] = (ULONG_PTR) gcc_exc; + ms_exc.ExceptionInformation[1] = gcc_exc->private_[1]; + ms_exc.ExceptionInformation[2] = gcc_exc->private_[2]; + ms_exc.ExceptionInformation[3] = gcc_exc->private_[3]; + + ms_context.ContextFlags = CONTEXT_ALL; + RtlCaptureContext (&ms_context); + + RtlUnwindEx ((void *) gcc_exc->private_[1], gcc_exc->private_[2], + &ms_exc, gcc_exc, &ms_context, &ms_history); + + /* Is RtlUnwindEx declared noreturn? */ + abort (); +} + +static _Unwind_Reason_Code +_Unwind_ForcedUnwind_Phase2 (struct _Unwind_Exception *exc) +{ + _Unwind_Stop_Fn stop; + void * stop_argument; + + RaiseException (STATUS_GCC_FORCED, 0, 1, (ULONG_PTR *)&exc); + + /* If we get here, we got to top-of-stack. */ + /* ??? We no longer have a context pointer to pass in. */ + + stop = (_Unwind_Stop_Fn) exc->private_[0]; + stop_argument = (void *) exc->private_[4]; + stop (1, _UA_FORCE_UNWIND | _UA_CLEANUP_PHASE | _UA_END_OF_STACK, + exc->exception_class, exc, NULL, stop_argument); + + return _UA_END_OF_STACK; +} + +_Unwind_Reason_Code +_Unwind_Resume_or_Rethrow (struct _Unwind_Exception *exc) +{ + if (exc->private_[0] == 0) + _Unwind_RaiseException (exc); + else + _Unwind_ForcedUnwind_Phase2 (exc); + abort (); +} + +/* Raise an exception for forced unwinding. */ + +_Unwind_Reason_Code +_Unwind_ForcedUnwind (struct _Unwind_Exception *exc, + _Unwind_Stop_Fn stop, void * stop_argument) +{ + /* ??? This is a hack that only works with _GCC_specific_handler. + There's no way to invoke STOP within frames that use a different + exception handler. This is essentially just good enough to run + the code within the gcc testsuite. */ + + memset (exc->private_, 0, sizeof (exc->private_)); + exc->private_[0] = (_Unwind_Ptr) stop; + exc->private_[4] = (_Unwind_Ptr) stop_argument; + + return _Unwind_ForcedUnwind_Phase2 (exc); +} + +/* A convenience function that calls the exception_cleanup field. */ + +void +_Unwind_DeleteException (struct _Unwind_Exception *exc) +{ + if (exc->exception_cleanup) + (*exc->exception_cleanup) (_URC_FOREIGN_EXCEPTION_CAUGHT, exc); +} + +/* Perform stack backtrace through unwind data. */ + +_Unwind_Reason_Code +_Unwind_Backtrace(_Unwind_Trace_Fn trace, + void *trace_argument) +{ + UNWIND_HISTORY_TABLE ms_history; + CONTEXT ms_context; + struct _Unwind_Context gcc_context; + DISPATCHER_CONTEXT disp_context; + + memset (&ms_history, 0, sizeof(ms_history)); + memset (&gcc_context, 0, sizeof(gcc_context)); + memset (&disp_context, 0, sizeof(disp_context)); + + ms_context.ContextFlags = CONTEXT_ALL; + RtlCaptureContext (&ms_context); + + gcc_context.disp = &disp_context; + gcc_context.disp->ContextRecord = &ms_context; + gcc_context.disp->HistoryTable = &ms_history; + + while (1) + { + gcc_context.disp->ControlPc = ms_context.Rip; + gcc_context.disp->FunctionEntry + = RtlLookupFunctionEntry (ms_context.Rip, &gcc_context.disp->ImageBase, + &ms_history); + + if (!gcc_context.disp->FunctionEntry) + return _URC_END_OF_STACK; + + gcc_context.disp->LanguageHandler + = RtlVirtualUnwind (0, gcc_context.disp->ImageBase, ms_context.Rip, + gcc_context.disp->FunctionEntry, &ms_context, + &gcc_context.disp->HandlerData, + &gcc_context.disp->EstablisherFrame, NULL); + + /* Call trace function. */ + if (trace (&gcc_context, trace_argument) != _URC_NO_REASON) + return _URC_FATAL_PHASE1_ERROR; + + /* ??? Check for invalid stack pointer. */ + if (ms_context.Rip == 0) + return _URC_END_OF_STACK; + } +} +#endif /* __SEH__ && !defined (__USING_SJLJ_EXCEPTIONS__) */ diff --git a/contrib/toolchain/gcc/5x/libgcc/unwind-sjlj.c b/contrib/toolchain/gcc/5x/libgcc/unwind-sjlj.c new file mode 100644 index 0000000000..533eea4b15 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/unwind-sjlj.c @@ -0,0 +1,326 @@ +/* SJLJ exception handling and frame unwind runtime interface routines. + Copyright (C) 1997-2015 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 "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" +#include "unwind.h" +#include "gthr.h" + +#ifdef __USING_SJLJ_EXCEPTIONS__ + +#ifdef __LIBGCC_DONT_USE_BUILTIN_SETJMP__ +#ifndef inhibit_libc +#include +#else +typedef void *jmp_buf[__LIBGCC_JMP_BUF_SIZE__]; +extern void longjmp(jmp_buf, int) __attribute__((noreturn)); +#endif +#else +#define longjmp __builtin_longjmp +#endif + +/* The setjmp side is dealt with in the except.c file. */ +#undef setjmp +#define setjmp setjmp_should_not_be_used_in_this_file + + +/* This structure is allocated on the stack of the target function. + This must match the definition created in except.c:init_eh. */ +struct SjLj_Function_Context +{ + /* This is the chain through all registered contexts. It is + filled in by _Unwind_SjLj_Register. */ + struct SjLj_Function_Context *prev; + + /* This is assigned in by the target function before every call + to the index of the call site in the lsda. It is assigned by + the personality routine to the landing pad index. */ + int call_site; + + /* This is how data is returned from the personality routine to + the target function's handler. */ + _Unwind_Word data[4]; + + /* These are filled in once by the target function before any + exceptions are expected to be handled. */ + _Unwind_Personality_Fn personality; + void *lsda; + +#ifdef __LIBGCC_DONT_USE_BUILTIN_SETJMP__ + /* We don't know what sort of alignment requirements the system + jmp_buf has. We over estimated in except.c, and now we have + to match that here just in case the system *didn't* have more + restrictive requirements. */ + jmp_buf jbuf __attribute__((aligned)); +#else + void *jbuf[]; +#endif +}; + +struct _Unwind_Context +{ + struct SjLj_Function_Context *fc; +}; + +typedef struct +{ + _Unwind_Personality_Fn personality; +} _Unwind_FrameState; + + +/* Manage the chain of registered function contexts. */ + +/* Single threaded fallback chain. */ +static struct SjLj_Function_Context *fc_static; + +#if __GTHREADS +static __gthread_key_t fc_key; +static int use_fc_key = -1; + +static void +fc_key_init (void) +{ + use_fc_key = __gthread_key_create (&fc_key, 0) == 0; +} + +static void +fc_key_init_once (void) +{ + static __gthread_once_t once = __GTHREAD_ONCE_INIT; + if (__gthread_once (&once, fc_key_init) != 0 || use_fc_key < 0) + use_fc_key = 0; +} +#endif + +void +_Unwind_SjLj_Register (struct SjLj_Function_Context *fc) +{ +#if __GTHREADS + if (use_fc_key < 0) + fc_key_init_once (); + + if (use_fc_key) + { + fc->prev = __gthread_getspecific (fc_key); + __gthread_setspecific (fc_key, fc); + } + else +#endif + { + fc->prev = fc_static; + fc_static = fc; + } +} + +static inline struct SjLj_Function_Context * +_Unwind_SjLj_GetContext (void) +{ +#if __GTHREADS + if (use_fc_key < 0) + fc_key_init_once (); + + if (use_fc_key) + return __gthread_getspecific (fc_key); +#endif + return fc_static; +} + +static inline void +_Unwind_SjLj_SetContext (struct SjLj_Function_Context *fc) +{ +#if __GTHREADS + if (use_fc_key < 0) + fc_key_init_once (); + + if (use_fc_key) + __gthread_setspecific (fc_key, fc); + else +#endif + fc_static = fc; +} + +void +_Unwind_SjLj_Unregister (struct SjLj_Function_Context *fc) +{ + _Unwind_SjLj_SetContext (fc->prev); +} + + +/* Get/set the return data value at INDEX in CONTEXT. */ + +_Unwind_Word +_Unwind_GetGR (struct _Unwind_Context *context, int index) +{ + return context->fc->data[index]; +} + +/* Get the value of the CFA as saved in CONTEXT. */ + +_Unwind_Word +_Unwind_GetCFA (struct _Unwind_Context *context __attribute__((unused))) +{ + /* ??? Ideally __builtin_setjmp places the CFA in the jmpbuf. */ + +#ifndef __LIBGCC_DONT_USE_BUILTIN_SETJMP__ + /* This is a crude imitation of the CFA: the saved stack pointer. + This is roughly the CFA of the frame before CONTEXT. When using the + DWARF-2 unwinder _Unwind_GetCFA returns the CFA of the frame described + by CONTEXT instead; but for DWARF-2 the cleanups associated with + CONTEXT have already been run, and for SJLJ they have not yet been. */ + if (context->fc != NULL) + return (_Unwind_Word) context->fc->jbuf[2]; +#endif + + /* Otherwise we're out of luck for now. */ + return (_Unwind_Word) 0; +} + +void +_Unwind_SetGR (struct _Unwind_Context *context, int index, _Unwind_Word val) +{ + context->fc->data[index] = val; +} + +/* Get the call-site index as saved in CONTEXT. */ + +_Unwind_Ptr +_Unwind_GetIP (struct _Unwind_Context *context) +{ + return context->fc->call_site + 1; +} + +_Unwind_Ptr +_Unwind_GetIPInfo (struct _Unwind_Context *context, int *ip_before_insn) +{ + *ip_before_insn = 0; + if (context->fc != NULL) + return context->fc->call_site + 1; + else + return 0; +} + +/* Set the return landing pad index in CONTEXT. */ + +void +_Unwind_SetIP (struct _Unwind_Context *context, _Unwind_Ptr val) +{ + context->fc->call_site = val - 1; +} + +void * +_Unwind_GetLanguageSpecificData (struct _Unwind_Context *context) +{ + return context->fc->lsda; +} + +_Unwind_Ptr +_Unwind_GetRegionStart (struct _Unwind_Context *context __attribute__((unused)) ) +{ + return 0; +} + +void * +_Unwind_FindEnclosingFunction (void *pc __attribute__((unused))) +{ + return NULL; +} + +#ifndef __ia64__ +_Unwind_Ptr +_Unwind_GetDataRelBase (struct _Unwind_Context *context __attribute__((unused)) ) +{ + return 0; +} + +_Unwind_Ptr +_Unwind_GetTextRelBase (struct _Unwind_Context *context __attribute__((unused)) ) +{ + return 0; +} +#endif + +static inline _Unwind_Reason_Code +uw_frame_state_for (struct _Unwind_Context *context, _Unwind_FrameState *fs) +{ + if (context->fc == NULL) + { + fs->personality = NULL; + return _URC_END_OF_STACK; + } + else + { + fs->personality = context->fc->personality; + return _URC_NO_REASON; + } +} + +static inline void +uw_update_context (struct _Unwind_Context *context, + _Unwind_FrameState *fs __attribute__((unused)) ) +{ + context->fc = context->fc->prev; +} + +static void +uw_advance_context (struct _Unwind_Context *context, _Unwind_FrameState *fs) +{ + _Unwind_SjLj_Unregister (context->fc); + uw_update_context (context, fs); +} + +static inline void +uw_init_context (struct _Unwind_Context *context) +{ + context->fc = _Unwind_SjLj_GetContext (); +} + +static void __attribute__((noreturn)) +uw_install_context (struct _Unwind_Context *current __attribute__((unused)), + struct _Unwind_Context *target) +{ + _Unwind_SjLj_SetContext (target->fc); + longjmp (target->fc->jbuf, 1); +} + +static inline _Unwind_Ptr +uw_identify_context (struct _Unwind_Context *context) +{ + return (_Unwind_Ptr) context->fc; +} + + +/* Play games with unwind symbols so that we can have call frame + and sjlj symbols in the same shared library. Not that you can + use them simultaneously... */ +#define _Unwind_RaiseException _Unwind_SjLj_RaiseException +#define _Unwind_ForcedUnwind _Unwind_SjLj_ForcedUnwind +#define _Unwind_Resume _Unwind_SjLj_Resume +#define _Unwind_Resume_or_Rethrow _Unwind_SjLj_Resume_or_Rethrow + +#include "unwind.inc" + +#endif /* USING_SJLJ_EXCEPTIONS */ diff --git a/contrib/toolchain/gcc/5x/libgcc/vtv_end.c b/contrib/toolchain/gcc/5x/libgcc/vtv_end.c new file mode 100644 index 0000000000..fecaf12fe9 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/vtv_end.c @@ -0,0 +1,65 @@ +/* Copyright (C) 2012-2015 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 file is part of the vtable verification feature (for a + detailed description of the feature, see comments in + vtable-verify.c). The vtable verification feature creates + certain global symbols that need to be read-write sometimes during + program execution, and read-only at others. It uses 'mprotect' to + change the memory protections of the pages on which these variables + are stored. In order to not affect the protections of other + program variables, these variables are put into a special named + section, ".vtable_map_vars", which is page-aligned at the start, + and which is padded with a page-sized amount of zeros at the end. + To make this section page aligned, we create a special symbol, + "_vtable_map_vars_start" which we make the very first thing that + goes into the section. That is defined in vtv_start.c (which + contains nothing else). vtv_start.c gest compiled into + vtv_start.o, and vtv_start.o gets inserted into the link line + immediately after crtbegin.o, if the program is compiled with + -fvtable.verify. + + In order to pad the ".vtable_map_vars" section with a page-sized + amount of zeros at the end, there is a second symbol, + _vtable_map_vars_end. This file defines that symbol (and only this + symbol). This second symbol is a page-sized array of chars, + zero-filled, and is the very last thing to go into the section. + When the GCC driver inserts vtv_start.o into the link line (just + after crtbegin.o) it also inserts vtv_end.o into the link line, + just before crtend.o. This has the desired effect of making our + section page-aligned and page-size paded, ensuring that no other + program data lands on our pages. */ + + +#include "vtv-change-permission.h" + +__attribute__ ((constructor(100))) void +__VLTprotect (void) +{ + __VLTChangePermission (__VLTP_READ_ONLY); +} + +/* Page-sized variable to mark end of .vtable_map_vars section. */ +char _vtable_map_vars_end[VTV_PAGE_SIZE] + __attribute__ ((__visibility__ ("protected"), used, + section(".vtable_map_vars"))); diff --git a/contrib/toolchain/gcc/5x/libgcc/vtv_end_preinit.c b/contrib/toolchain/gcc/5x/libgcc/vtv_end_preinit.c new file mode 100644 index 0000000000..cf6c3653c2 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/vtv_end_preinit.c @@ -0,0 +1,70 @@ +/* Copyright (C) 2012-2015 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 file is part of the vtable verification feature (for a + detailed description of the feature, see comments in + vtable-verify.c). The vtable verification feature creates + certain global symbols that need to be read-write sometimes during + program execution, and read-only at others. It uses 'mprotect' to + change the memory protections of the pages on which these variables + are stored. In order to not affect the protections of other + program variables, these variables are put into a special named + section, ".vtable_map_vars", which is page-aligned at the start, + and which is padded with a page-sized amount of zeros at the end. + To make this section page aligned, we create a special symbol, + "_vtable_map_vars_start" which we make the very first thing that + goes into the section. That is defined in vtv_start.c (which + contains nothing else). vtv_start.c gest compiled into + vtv_start.o, and vtv_start.o gets inserted into the link line + immediately after crtbegin.o, if the program is compiled with + -fvtable.verify. + + In order to pad the ".vtable_map_vars" section with a page-sized + amount of zeros at the end, there is a second symbol, + _vtable_map_vars_end. This file defines that symbol (and only this + symbol). This second symbol is a page-sized array of chars, + zero-filled, and is the very last thing to go into the section. + When the GCC driver inserts vtv_start.o into the link line (just + after crtbegin.o) it also inserts vtv_end.o into the link line, + just before crtend.o. This has the desired effect of making our + section page-aligned and page-size paded, ensuring that no other + program data lands on our pages. */ + +#include "vtv-change-permission.h" + +void +__VLTProtectPreinit (void) +{ + __VLTChangePermission (__VLTP_READ_ONLY); +} + +/* Page-sized variable to mark end of .vtable_map_vars section. */ +char _vtable_map_vars_end[VTV_PAGE_SIZE] + __attribute__ ((__visibility__ ("protected"), used, + section(".vtable_map_vars"))); + +/* Put the function __VLTProtectPreinit into the .preinit_array + section. */ + +__attribute__ ((section (".preinit_array"))) + typeof (__VLTProtectPreinit) *__preinit_end = __VLTProtectPreinit; diff --git a/contrib/toolchain/gcc/5x/libgcc/vtv_start.c b/contrib/toolchain/gcc/5x/libgcc/vtv_start.c new file mode 100644 index 0000000000..8363e8ca36 --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/vtv_start.c @@ -0,0 +1,64 @@ +/* Copyright (C) 2012-2015 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 file is part of the vtable verification feature (for a + detailed description of the feature, see comments in + vtable-verify.c). The vtable verification feature creates + certain global symbols that need to be read-write sometimes during + program execution, and read-only at others. It uses 'mprotect' to + change the memory protections of the pages on which these variables + are stored. In order to not affect the protections of other + program variables, these variables are put into a special named + section, ".vtable_map_vars", which is page-aligned at the start, + and which is padded with a page-sized amount of zeros at the end. + To make this section page aligned, we create a special symbol, + "_vtable_map_vars_start" which we make the very first thing that + goes into the section. This file defines that symbol (and only + that symbol). GCC compiles this file into vtv_start.o, and + inserts vtv_start.o into the link line immediately after + crtbegin.o, if the program is compiled with -fvtable.verify. + + In order to pad the ".vtable_map_vars" section with a page-sized + amount of zeros at the end, there is a second symbol, + _vtable_map_vars_end, which is defined in another file, vtv_end.c. + This second symbol is a page-sized array of chars, zero-filled, and + is the very last thing to go into the section. When the GCC driver + inserts vtv_start.o into the link line (just after crtbegin.o) it + also inserts vtv_end.o into the link line, just before crtend.o. + This has the desired effect of making our section page-aligned and + page-size paded, ensuring that no other program data lands on our + pages. */ + +#include "vtv-change-permission.h" + +__attribute__ ((constructor(98))) void +__VLTunprotect (void) +{ + __VLTChangePermission (__VLTP_READ_WRITE); +} + +/* Page-aligned symbol to mark beginning of .vtable_map_vars section. */ +char _vtable_map_vars_start [] +__attribute__ ((__visibility__ ("protected"), used, aligned(VTV_PAGE_SIZE), + section(".vtable_map_vars"))) + = { }; diff --git a/contrib/toolchain/gcc/5x/libgcc/vtv_start_preinit.c b/contrib/toolchain/gcc/5x/libgcc/vtv_start_preinit.c new file mode 100644 index 0000000000..fad69680ca --- /dev/null +++ b/contrib/toolchain/gcc/5x/libgcc/vtv_start_preinit.c @@ -0,0 +1,72 @@ +/* Copyright (C) 2012-2015 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 file is part of the vtable verification feature (for a + detailed description of the feature, see comments in + vtable-verify.c). The vtable verification feature creates + certain global symbols that need to be read-write sometimes during + program execution, and read-only at others. It uses 'mprotect' to + change the memory protections of the pages on which these variables + are stored. In order to not affect the protections of other + program variables, these variables are put into a special named + section, ".vtable_map_vars", which is page-aligned at the start, + and which is padded with a page-sized amount of zeros at the end. + To make this section page aligned, we create a special symbol, + "_vtable_map_vars_start" which we make the very first thing that + goes into the section. This file defines that symbol (and only + that symbol). GCC compiles this file into vtv_start.o, and + inserts vtv_start.o into the link line immediately after + crtbegin.o, if the program is compiled with -fvtable.verify. + + In order to pad the ".vtable_map_vars" section with a page-sized + amount of zeros at the end, there is a second symbol, + _vtable_map_vars_end, which is defined in another file, vtv_end.c. + This second symbol is a page-sized array of chars, zero-filled, and + is the very last thing to go into the section. When the GCC driver + inserts vtv_start.o into the link line (just after crtbegin.o) it + also inserts vtv_end.o into the link line, just before crtend.o. + This has the desired effect of making our section page-aligned and + page-size paded, ensuring that no other program data lands on our + pages. */ + +#include "vtv-change-permission.h" + +void +__VLTUnprotectPreinit (void) +{ + __VLTChangePermission (__VLTP_READ_WRITE); +} + +/* Page-aligned symbol to mark beginning of .vtable_map_vars section. */ +char _vtable_map_vars_start [] +__attribute__ ((__visibility__ ("protected"), used, aligned(VTV_PAGE_SIZE), + section(".vtable_map_vars"))) + = { }; + + +/* Put the function __VLTUnprotectPreinit into the .preinit_array + section. */ + +__attribute__ ((section (".preinit_array"))) + typeof (__VLTUnprotectPreinit) *__preinit = __VLTUnprotectPreinit; +