aboutsummaryrefslogtreecommitdiff
path: root/REORG.TODO/stdlib
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2017-06-08 15:39:03 -0400
committerZack Weinberg <zackw@panix.com>2017-06-08 15:39:03 -0400
commit5046dbb4a7eba5eccfd258f92f4735c9ffc8d069 (patch)
tree4470480d904b65cf14ca524f96f79eca818c3eaf /REORG.TODO/stdlib
parent199fc19d3aaaf57944ef036e15904febe877fc93 (diff)
downloadglibc-zack/build-layout-experiment.tar
glibc-zack/build-layout-experiment.tar.gz
glibc-zack/build-layout-experiment.tar.bz2
glibc-zack/build-layout-experiment.zip
Prepare for radical source tree reorganization.zack/build-layout-experiment
All top-level files and directories are moved into a temporary storage directory, REORG.TODO, except for files that will certainly still exist in their current form at top level when we're done (COPYING, COPYING.LIB, LICENSES, NEWS, README), all old ChangeLog files (which are moved to the new directory OldChangeLogs, instead), and the generated file INSTALL (which is just deleted; in the new order, there will be no generated files checked into version control).
Diffstat (limited to 'REORG.TODO/stdlib')
-rw-r--r--REORG.TODO/stdlib/Depend1
-rw-r--r--REORG.TODO/stdlib/Makefile221
-rw-r--r--REORG.TODO/stdlib/Versions135
-rw-r--r--REORG.TODO/stdlib/a64l.c64
-rw-r--r--REORG.TODO/stdlib/abort.c142
-rw-r--r--REORG.TODO/stdlib/abs.c27
-rw-r--r--REORG.TODO/stdlib/add_n.c53
-rw-r--r--REORG.TODO/stdlib/addmul_1.c61
-rw-r--r--REORG.TODO/stdlib/alloca.h40
-rw-r--r--REORG.TODO/stdlib/at_quick_exit.c50
-rw-r--r--REORG.TODO/stdlib/atexit.c52
-rw-r--r--REORG.TODO/stdlib/atof.c28
-rw-r--r--REORG.TODO/stdlib/atoi.c28
-rw-r--r--REORG.TODO/stdlib/atol.c28
-rw-r--r--REORG.TODO/stdlib/atoll.c28
-rw-r--r--REORG.TODO/stdlib/bits/monetary-ldbl.h27
-rw-r--r--REORG.TODO/stdlib/bits/stdlib-float.h29
-rw-r--r--REORG.TODO/stdlib/bits/stdlib-ldbl.h41
-rw-r--r--REORG.TODO/stdlib/bits/stdlib.h155
-rw-r--r--REORG.TODO/stdlib/bsearch.c23
-rw-r--r--REORG.TODO/stdlib/bug-fmtmsg1.c28
-rw-r--r--REORG.TODO/stdlib/bug-getcontext.c76
-rw-r--r--REORG.TODO/stdlib/bug-strtod.c67
-rw-r--r--REORG.TODO/stdlib/bug-strtod2.c57
-rw-r--r--REORG.TODO/stdlib/canonicalize.c246
-rw-r--r--REORG.TODO/stdlib/cmp.c48
-rw-r--r--REORG.TODO/stdlib/cxa_at_quick_exit.c30
-rw-r--r--REORG.TODO/stdlib/cxa_atexit.c133
-rw-r--r--REORG.TODO/stdlib/cxa_finalize.c82
-rw-r--r--REORG.TODO/stdlib/cxa_thread_atexit_impl.c165
-rw-r--r--REORG.TODO/stdlib/dbl2mpn.c31
-rw-r--r--REORG.TODO/stdlib/div.c62
-rw-r--r--REORG.TODO/stdlib/divmod_1.c199
-rw-r--r--REORG.TODO/stdlib/divrem.c234
-rw-r--r--REORG.TODO/stdlib/drand48-iter.c56
-rw-r--r--REORG.TODO/stdlib/drand48.c30
-rw-r--r--REORG.TODO/stdlib/drand48_r.c27
-rw-r--r--REORG.TODO/stdlib/erand48.c30
-rw-r--r--REORG.TODO/stdlib/erand48_r.c47
-rw-r--r--REORG.TODO/stdlib/errno.h72
-rw-r--r--REORG.TODO/stdlib/exit.c107
-rw-r--r--REORG.TODO/stdlib/exit.h77
-rw-r--r--REORG.TODO/stdlib/fmtmsg.c386
-rw-r--r--REORG.TODO/stdlib/fmtmsg.h105
-rw-r--r--REORG.TODO/stdlib/fpioconst.c1329
-rw-r--r--REORG.TODO/stdlib/fpioconst.h88
-rw-r--r--REORG.TODO/stdlib/gen-fpioconst.c108
-rw-r--r--REORG.TODO/stdlib/gen-tst-strtod-round.c191
-rw-r--r--REORG.TODO/stdlib/getcontext.c29
-rw-r--r--REORG.TODO/stdlib/getentropy.c31
-rw-r--r--REORG.TODO/stdlib/getenv.c92
-rw-r--r--REORG.TODO/stdlib/getrandom.c31
-rw-r--r--REORG.TODO/stdlib/getsubopt.c79
-rw-r--r--REORG.TODO/stdlib/gmp-impl.h367
-rw-r--r--REORG.TODO/stdlib/gmp.h623
-rw-r--r--REORG.TODO/stdlib/grouping.c201
-rw-r--r--REORG.TODO/stdlib/grouping.h33
-rw-r--r--REORG.TODO/stdlib/groupingwc.c2
-rw-r--r--REORG.TODO/stdlib/inlines.c3
-rw-r--r--REORG.TODO/stdlib/isomac.c447
-rw-r--r--REORG.TODO/stdlib/jrand48.c30
-rw-r--r--REORG.TODO/stdlib/jrand48_r.c34
-rw-r--r--REORG.TODO/stdlib/l64a.c56
-rw-r--r--REORG.TODO/stdlib/labs.c28
-rw-r--r--REORG.TODO/stdlib/lcong48.c26
-rw-r--r--REORG.TODO/stdlib/lcong48_r.c36
-rw-r--r--REORG.TODO/stdlib/ldbl2mpn.c1
-rw-r--r--REORG.TODO/stdlib/ldiv.c31
-rw-r--r--REORG.TODO/stdlib/llabs.c29
-rw-r--r--REORG.TODO/stdlib/lldiv.c32
-rw-r--r--REORG.TODO/stdlib/longlong.h1773
-rw-r--r--REORG.TODO/stdlib/lrand48.c30
-rw-r--r--REORG.TODO/stdlib/lrand48_r.c30
-rw-r--r--REORG.TODO/stdlib/lshift.c78
-rw-r--r--REORG.TODO/stdlib/makecontext.c28
-rw-r--r--REORG.TODO/stdlib/mblen.c68
-rw-r--r--REORG.TODO/stdlib/mbstowcs.c39
-rw-r--r--REORG.TODO/stdlib/mbtowc.c72
-rw-r--r--REORG.TODO/stdlib/mod_1.c189
-rw-r--r--REORG.TODO/stdlib/monetary.h58
-rw-r--r--REORG.TODO/stdlib/mp_clz_tab.c36
-rw-r--r--REORG.TODO/stdlib/mpn2dbl.c29
-rw-r--r--REORG.TODO/stdlib/mpn2flt.c29
-rw-r--r--REORG.TODO/stdlib/mpn2ldbl.c1
-rw-r--r--REORG.TODO/stdlib/mrand48.c30
-rw-r--r--REORG.TODO/stdlib/mrand48_r.c29
-rw-r--r--REORG.TODO/stdlib/msort.c310
-rw-r--r--REORG.TODO/stdlib/mul.c142
-rw-r--r--REORG.TODO/stdlib/mul_1.c55
-rw-r--r--REORG.TODO/stdlib/mul_n.c360
-rw-r--r--REORG.TODO/stdlib/nrand48.c30
-rw-r--r--REORG.TODO/stdlib/nrand48_r.c37
-rw-r--r--REORG.TODO/stdlib/old_atexit.c8
-rw-r--r--REORG.TODO/stdlib/on_exit.c41
-rw-r--r--REORG.TODO/stdlib/putenv.c87
-rw-r--r--REORG.TODO/stdlib/qsort.c249
-rw-r--r--REORG.TODO/stdlib/quick_exit.c48
-rw-r--r--REORG.TODO/stdlib/rand.c28
-rw-r--r--REORG.TODO/stdlib/rand_r.c48
-rw-r--r--REORG.TODO/stdlib/random.c300
-rw-r--r--REORG.TODO/stdlib/random_r.c401
-rw-r--r--REORG.TODO/stdlib/rpmatch.c61
-rw-r--r--REORG.TODO/stdlib/rshift.c78
-rw-r--r--REORG.TODO/stdlib/secure-getenv.c36
-rw-r--r--REORG.TODO/stdlib/seed48.c28
-rw-r--r--REORG.TODO/stdlib/seed48_r.c39
-rw-r--r--REORG.TODO/stdlib/setcontext.c29
-rw-r--r--REORG.TODO/stdlib/setenv.c340
-rw-r--r--REORG.TODO/stdlib/srand48.c26
-rw-r--r--REORG.TODO/stdlib/srand48_r.c39
-rw-r--r--REORG.TODO/stdlib/stdlib.h911
-rw-r--r--REORG.TODO/stdlib/strfmon.c39
-rw-r--r--REORG.TODO/stdlib/strfmon_l.c625
-rw-r--r--REORG.TODO/stdlib/strfrom-skeleton.c155
-rw-r--r--REORG.TODO/stdlib/strfromd.c22
-rw-r--r--REORG.TODO/stdlib/strfromf.c22
-rw-r--r--REORG.TODO/stdlib/strfroml.c22
-rw-r--r--REORG.TODO/stdlib/strtod.c80
-rw-r--r--REORG.TODO/stdlib/strtod_l.c1787
-rw-r--r--REORG.TODO/stdlib/strtod_nan.c24
-rw-r--r--REORG.TODO/stdlib/strtod_nan_double.h30
-rw-r--r--REORG.TODO/stdlib/strtod_nan_float.h29
-rw-r--r--REORG.TODO/stdlib/strtod_nan_main.c63
-rw-r--r--REORG.TODO/stdlib/strtod_nan_narrow.h22
-rw-r--r--REORG.TODO/stdlib/strtod_nan_wide.h22
-rw-r--r--REORG.TODO/stdlib/strtof.c34
-rw-r--r--REORG.TODO/stdlib/strtof_l.c38
-rw-r--r--REORG.TODO/stdlib/strtof_nan.c24
-rw-r--r--REORG.TODO/stdlib/strtoimax.c1
-rw-r--r--REORG.TODO/stdlib/strtol.c109
-rw-r--r--REORG.TODO/stdlib/strtol_l.c551
-rw-r--r--REORG.TODO/stdlib/strtold.c64
-rw-r--r--REORG.TODO/stdlib/strtold_l.c65
-rw-r--r--REORG.TODO/stdlib/strtold_nan.c30
-rw-r--r--REORG.TODO/stdlib/strtoll.c33
-rw-r--r--REORG.TODO/stdlib/strtoll_l.c27
-rw-r--r--REORG.TODO/stdlib/strtoul.c20
-rw-r--r--REORG.TODO/stdlib/strtoul_l.c27
-rw-r--r--REORG.TODO/stdlib/strtoull.c33
-rw-r--r--REORG.TODO/stdlib/strtoull_l.c28
-rw-r--r--REORG.TODO/stdlib/strtoumax.c1
-rw-r--r--REORG.TODO/stdlib/sub_n.c53
-rw-r--r--REORG.TODO/stdlib/submul_1.c61
-rw-r--r--REORG.TODO/stdlib/swapcontext.c29
-rw-r--r--REORG.TODO/stdlib/sys/errno.h1
-rw-r--r--REORG.TODO/stdlib/sys/random.h42
-rw-r--r--REORG.TODO/stdlib/system.c35
-rw-r--r--REORG.TODO/stdlib/tens_in_limb.c31
-rw-r--r--REORG.TODO/stdlib/test-a64l.c80
-rw-r--r--REORG.TODO/stdlib/test-canon.c235
-rw-r--r--REORG.TODO/stdlib/test-canon2.c74
-rw-r--r--REORG.TODO/stdlib/testdiv.c39
-rw-r--r--REORG.TODO/stdlib/testdiv.input2
-rw-r--r--REORG.TODO/stdlib/testmb.c65
-rw-r--r--REORG.TODO/stdlib/testmb2.c31
-rw-r--r--REORG.TODO/stdlib/testrand.c52
-rw-r--r--REORG.TODO/stdlib/testsort.c36
-rw-r--r--REORG.TODO/stdlib/tst-atof1.c19
-rw-r--r--REORG.TODO/stdlib/tst-atof2.c55
-rw-r--r--REORG.TODO/stdlib/tst-bsearch.c153
-rw-r--r--REORG.TODO/stdlib/tst-empty-env.c58
-rw-r--r--REORG.TODO/stdlib/tst-environ.c229
-rw-r--r--REORG.TODO/stdlib/tst-fmtmsg.c85
-rwxr-xr-xREORG.TODO/stdlib/tst-fmtmsg.sh337
-rw-r--r--REORG.TODO/stdlib/tst-getrandom.c245
-rw-r--r--REORG.TODO/stdlib/tst-limits.c72
-rw-r--r--REORG.TODO/stdlib/tst-makecontext.c110
-rw-r--r--REORG.TODO/stdlib/tst-makecontext2.c79
-rw-r--r--REORG.TODO/stdlib/tst-makecontext3.c220
-rw-r--r--REORG.TODO/stdlib/tst-putenv.c18
-rw-r--r--REORG.TODO/stdlib/tst-putenvmod.c17
-rw-r--r--REORG.TODO/stdlib/tst-qsort.c55
-rw-r--r--REORG.TODO/stdlib/tst-qsort2.c89
-rw-r--r--REORG.TODO/stdlib/tst-quick_exit.cc47
-rw-r--r--REORG.TODO/stdlib/tst-rand48-2.c116
-rw-r--r--REORG.TODO/stdlib/tst-rand48.c393
-rw-r--r--REORG.TODO/stdlib/tst-random.c122
-rw-r--r--REORG.TODO/stdlib/tst-random2.c61
-rw-r--r--REORG.TODO/stdlib/tst-secure-getenv.c242
-rw-r--r--REORG.TODO/stdlib/tst-setcontext.c244
-rw-r--r--REORG.TODO/stdlib/tst-setcontext2.c230
-rw-r--r--REORG.TODO/stdlib/tst-setcontext3.c138
-rw-r--r--REORG.TODO/stdlib/tst-setcontext3.sh52
-rw-r--r--REORG.TODO/stdlib/tst-strfmon_l.c220
-rw-r--r--REORG.TODO/stdlib/tst-strfrom-locale.c91
-rw-r--r--REORG.TODO/stdlib/tst-strfrom.c91
-rw-r--r--REORG.TODO/stdlib/tst-strfrom.h120
-rw-r--r--REORG.TODO/stdlib/tst-strtod-nan-locale-main.c89
-rw-r--r--REORG.TODO/stdlib/tst-strtod-nan-locale.c25
-rw-r--r--REORG.TODO/stdlib/tst-strtod-overflow.c49
-rw-r--r--REORG.TODO/stdlib/tst-strtod-round-data150
-rw-r--r--REORG.TODO/stdlib/tst-strtod-round-data.h11584
-rw-r--r--REORG.TODO/stdlib/tst-strtod-round-skeleton.c252
-rw-r--r--REORG.TODO/stdlib/tst-strtod-round.c24
-rw-r--r--REORG.TODO/stdlib/tst-strtod-underflow.c225
-rw-r--r--REORG.TODO/stdlib/tst-strtod.c218
-rw-r--r--REORG.TODO/stdlib/tst-strtod.h49
-rw-r--r--REORG.TODO/stdlib/tst-strtod1i.c84
-rw-r--r--REORG.TODO/stdlib/tst-strtod2.c44
-rw-r--r--REORG.TODO/stdlib/tst-strtod3.c55
-rw-r--r--REORG.TODO/stdlib/tst-strtod4.c56
-rw-r--r--REORG.TODO/stdlib/tst-strtod5.c89
-rw-r--r--REORG.TODO/stdlib/tst-strtod5i.c100
-rw-r--r--REORG.TODO/stdlib/tst-strtod6.c57
-rw-r--r--REORG.TODO/stdlib/tst-strtol-locale-main.c87
-rw-r--r--REORG.TODO/stdlib/tst-strtol-locale.c25
-rw-r--r--REORG.TODO/stdlib/tst-strtol.c626
-rw-r--r--REORG.TODO/stdlib/tst-strtoll.c401
-rw-r--r--REORG.TODO/stdlib/tst-system.c30
-rw-r--r--REORG.TODO/stdlib/tst-thread-quick_exit.cc66
-rw-r--r--REORG.TODO/stdlib/tst-tininess.c69
-rw-r--r--REORG.TODO/stdlib/tst-tls-atexit-lib.c38
-rw-r--r--REORG.TODO/stdlib/tst-tls-atexit-nodelete.c24
-rw-r--r--REORG.TODO/stdlib/tst-tls-atexit.c156
-rw-r--r--REORG.TODO/stdlib/tst-unsetenv1.c12
-rw-r--r--REORG.TODO/stdlib/tst-width-stdint.c185
-rw-r--r--REORG.TODO/stdlib/tst-width.c87
-rw-r--r--REORG.TODO/stdlib/tst-xpg-basename.c69
-rw-r--r--REORG.TODO/stdlib/ucontext.h52
-rw-r--r--REORG.TODO/stdlib/udiv_qrnnd.c10
-rw-r--r--REORG.TODO/stdlib/wcstoimax.c1
-rw-r--r--REORG.TODO/stdlib/wcstombs.c35
-rw-r--r--REORG.TODO/stdlib/wcstoumax.c1
-rw-r--r--REORG.TODO/stdlib/wctomb.c57
-rw-r--r--REORG.TODO/stdlib/xpg_basename.c71
225 files changed, 37988 insertions, 0 deletions
diff --git a/REORG.TODO/stdlib/Depend b/REORG.TODO/stdlib/Depend
new file mode 100644
index 0000000000..f3e1156a4e
--- /dev/null
+++ b/REORG.TODO/stdlib/Depend
@@ -0,0 +1 @@
+localedata
diff --git a/REORG.TODO/stdlib/Makefile b/REORG.TODO/stdlib/Makefile
new file mode 100644
index 0000000000..9b0acce8cc
--- /dev/null
+++ b/REORG.TODO/stdlib/Makefile
@@ -0,0 +1,221 @@
+# Copyright (C) 1991-2017 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+
+# The GNU C Library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <http://www.gnu.org/licenses/>.
+
+#
+# Makefile for stdlib routines
+#
+subdir := stdlib
+
+include ../Makeconfig
+
+headers := stdlib.h bits/stdlib.h bits/stdlib-ldbl.h bits/stdlib-float.h \
+ monetary.h bits/monetary-ldbl.h \
+ inttypes.h stdint.h bits/wordsize.h \
+ errno.h sys/errno.h bits/errno.h \
+ ucontext.h sys/ucontext.h \
+ alloca.h fmtmsg.h \
+ bits/stdlib-bsearch.h sys/random.h bits/stdint-intn.h \
+ bits/stdint-uintn.h
+
+routines := \
+ atof atoi atol atoll \
+ abort \
+ bsearch qsort msort \
+ getenv putenv setenv secure-getenv \
+ exit on_exit atexit cxa_atexit cxa_finalize old_atexit \
+ quick_exit at_quick_exit cxa_at_quick_exit cxa_thread_atexit_impl \
+ abs labs llabs \
+ div ldiv lldiv \
+ mblen mbstowcs mbtowc wcstombs wctomb \
+ random random_r rand rand_r \
+ drand48 erand48 lrand48 nrand48 mrand48 jrand48 \
+ srand48 seed48 lcong48 \
+ drand48_r erand48_r lrand48_r nrand48_r mrand48_r jrand48_r \
+ srand48_r seed48_r lcong48_r \
+ drand48-iter getrandom getentropy \
+ strfromf strfromd strfroml \
+ strtol strtoul strtoll strtoull \
+ strtol_l strtoul_l strtoll_l strtoull_l \
+ strtof strtod strtold \
+ strtof_l strtod_l strtold_l \
+ strtof_nan strtod_nan strtold_nan \
+ system canonicalize \
+ a64l l64a \
+ rpmatch strfmon strfmon_l getsubopt xpg_basename fmtmsg \
+ strtoimax strtoumax wcstoimax wcstoumax \
+ getcontext setcontext makecontext swapcontext
+aux = grouping groupingwc tens_in_limb
+
+# These routines will be omitted from the libc shared object.
+# Instead the static object files will be included in a special archive
+# linked against when the shared library will be used.
+static-only-routines = atexit at_quick_exit
+
+test-srcs := tst-fmtmsg
+tests := tst-strtol tst-strtod testmb testrand testsort testdiv \
+ test-canon test-canon2 tst-strtoll tst-environ \
+ tst-xpg-basename tst-random tst-random2 tst-bsearch \
+ tst-limits tst-rand48 bug-strtod tst-setcontext \
+ tst-setcontext2 test-a64l tst-qsort tst-system testmb2 \
+ bug-strtod2 tst-atof1 tst-atof2 tst-strtod2 \
+ tst-rand48-2 tst-makecontext tst-strtod5 \
+ tst-qsort2 tst-makecontext2 tst-strtod6 tst-unsetenv1 \
+ tst-makecontext3 bug-getcontext bug-fmtmsg1 \
+ tst-secure-getenv tst-strtod-overflow tst-strtod-round \
+ tst-tininess tst-strtod-underflow tst-setcontext3 \
+ tst-strtol-locale tst-strtod-nan-locale tst-strfmon_l \
+ tst-quick_exit tst-thread-quick_exit tst-width \
+ tst-width-stdint tst-strfrom tst-strfrom-locale \
+ tst-getrandom
+tests-internal := tst-strtod1i tst-strtod3 tst-strtod4 tst-strtod5i \
+ tst-tls-atexit tst-tls-atexit-nodelete
+tests-static := tst-secure-getenv
+
+ifeq ($(build-hardcoded-path-in-tests),yes)
+tests += tst-empty-env
+endif
+
+ifeq ($(have-cxx-thread_local),yes)
+CFLAGS-tst-quick_exit.o = -std=c++11
+LDLIBS-tst-quick_exit = -lstdc++
+CFLAGS-tst-thread-quick_exit.o = -std=c++11
+LDLIBS-tst-thread-quick_exit = -lstdc++
+$(objpfx)tst-thread-quick_exit: $(shared-thread-library)
+else
+tests-unsupported += tst-quick_exit tst-thread-quick_exit
+endif
+
+modules-names = tst-tls-atexit-lib
+extra-test-objs += $(addsuffix .os, $(modules-names))
+
+ifeq ($(build-shared),yes)
+tests += tst-putenv
+endif
+
+# Several mpn functions from GNU MP are used by the strtod function.
+mpn-routines := inlines add_n addmul_1 cmp divmod_1 divrem udiv_qrnnd \
+ lshift rshift mod_1 mul mul_1 mul_n sub_n submul_1
+mpn-headers = longlong.h gmp.h gmp-impl.h gmp-mparam.h asm-syntax.h
+
+routines := $(strip $(routines) $(mpn-routines)) \
+ dbl2mpn ldbl2mpn \
+ mpn2flt mpn2dbl mpn2ldbl
+aux += fpioconst mp_clz_tab
+
+tests-extras += tst-putenvmod
+extra-test-objs += tst-putenvmod.os
+
+generated += isomac isomac.out tst-putenvmod.so
+
+CFLAGS-bsearch.c = $(uses-callbacks)
+CFLAGS-msort.c = $(uses-callbacks)
+CFLAGS-qsort.c = $(uses-callbacks)
+CFLAGS-system.c = -fexceptions
+CFLAGS-system.os = -fomit-frame-pointer
+CFLAGS-fmtmsg.c = -fexceptions
+
+CFLAGS-strfmon.c = $(libio-mtsafe)
+CFLAGS-strfmon_l.c = $(libio-mtsafe)
+
+# The strfrom class of functions call __printf_fp in order to convert the
+# floating-point value to characters. This requires the value of IO_MTSAFE_IO.
+CFLAGS-strfromd.c = $(libio-mtsafe)
+CFLAGS-strfromf.c = $(libio-mtsafe)
+CFLAGS-strfroml.c = $(libio-mtsafe)
+
+CFLAGS-tst-bsearch.c = $(stack-align-test-flags)
+CFLAGS-tst-qsort.c = $(stack-align-test-flags)
+CFLAGS-tst-makecontext.c += -funwind-tables
+CFLAGS-tst-makecontext2.c = $(stack-align-test-flags)
+
+# Run a test on the header files we use.
+tests-special += $(objpfx)isomac.out
+
+ifeq ($(run-built-tests),yes)
+tests-special += $(objpfx)tst-fmtmsg.out
+endif
+
+include ../Rules
+
+ifeq ($(run-built-tests),yes)
+LOCALES := cs_CZ.UTF-8 de_DE.UTF-8 en_US.ISO-8859-1 tr_TR.UTF-8 \
+ tr_TR.ISO-8859-9 tg_TJ.UTF-8 te_IN.UTF-8 bn_IN.UTF-8 \
+ el_GR.UTF-8
+include ../gen-locales.mk
+
+$(objpfx)bug-strtod2.out: $(gen-locales)
+$(objpfx)testmb2.out: $(gen-locales)
+$(objpfx)tst-strtod.out: $(gen-locales)
+$(objpfx)tst-strtod3.out: $(gen-locales)
+$(objpfx)tst-strtod4.out: $(gen-locales)
+$(objpfx)tst-strtod5.out: $(gen-locales)
+$(objpfx)tst-strtol-locale.out: $(gen-locales)
+$(objpfx)tst-strtod-nan-locale.out: $(gen-locales)
+$(objpfx)tst-strfmon_l.out: $(gen-locales)
+$(objpfx)tst-strfrom.out: $(gen-locales)
+$(objpfx)tst-strfrom-locale.out: $(gen-locales)
+endif
+
+# Testdir has to be named stdlib and needs to be writable
+test-canon-ARGS = --test-dir=${common-objpfx}stdlib
+
+bug-fmtmsg1-ENV = SEV_LEVEL=foo,11,newsev
+
+$(objpfx)isomac.out: $(objpfx)isomac
+ $(dir $<)$(notdir $<) '$(CC)' \
+ '-I../include $(+sysdep-includes) $(sysincludes) -I..' > $<.out; \
+ $(evaluate-test)
+
+isomac-CFLAGS = -O
+$(objpfx)isomac: isomac.c
+ $(native-compile)
+
+$(objpfx)tst-fmtmsg.out: tst-fmtmsg.sh $(objpfx)tst-fmtmsg
+ $(SHELL) $< $(common-objpfx) '$(test-program-prefix-before-env)' \
+ '$(run-program-env)' '$(test-program-prefix-after-env)' \
+ $(common-objpfx)stdlib/; \
+ $(evaluate-test)
+
+$(objpfx)tst-putenv: $(objpfx)tst-putenvmod.so
+LDFLAGS-tst-putenv = $(no-as-needed)
+
+$(objpfx)tst-putenvmod.so: $(objpfx)tst-putenvmod.os $(link-libc-deps)
+ $(build-module)
+libof-tst-putenvmod = extramodules
+
+$(objpfx)bug-getcontext: $(libm)
+$(objpfx)tst-strtod-round: $(libm)
+$(objpfx)tst-tininess: $(libm)
+$(objpfx)tst-strtod-underflow: $(libm)
+$(objpfx)tst-strtod6: $(libm)
+$(objpfx)tst-strtod-nan-locale: $(libm)
+
+tst-tls-atexit-lib.so-no-z-defs = yes
+
+$(objpfx)tst-tls-atexit: $(shared-thread-library) $(libdl)
+$(objpfx)tst-tls-atexit.out: $(objpfx)tst-tls-atexit-lib.so
+
+$(objpfx)tst-tls-atexit-nodelete: $(shared-thread-library) $(libdl)
+$(objpfx)tst-tls-atexit-nodelete.out: $(objpfx)tst-tls-atexit-lib.so
+
+$(objpfx)tst-setcontext3.out: tst-setcontext3.sh $(objpfx)tst-setcontext3
+ $(SHELL) $< $(common-objpfx) '$(test-program-prefix-before-env)' \
+ '$(run-program-env)' '$(test-program-prefix-after-env)' \
+ $(common-objpfx)stdlib/; \
+ $(evaluate-test)
+
+$(objpfx)tst-makecontext: $(libdl)
diff --git a/REORG.TODO/stdlib/Versions b/REORG.TODO/stdlib/Versions
new file mode 100644
index 0000000000..9cade20a06
--- /dev/null
+++ b/REORG.TODO/stdlib/Versions
@@ -0,0 +1,135 @@
+libc {
+ GLIBC_2.0 {
+ # functions with required interface outside normal name space
+ __xpg_basename;
+
+ # functions used in inline functions or macros
+ __strtod_internal; __strtof_internal; __strtold_internal;
+ __strtol_internal; __strtoll_internal;
+ __strtoul_internal; __strtoull_internal;
+ # functions formerly so used (compatibility symbols)
+ __strtoq_internal; __strtouq_internal;
+
+ # compatibility symbol
+ __secure_getenv;
+
+ # a*
+ a64l; abort; abs; atexit; atof; atoi; atol; atoll;
+
+ # b*
+ bsearch;
+
+ # c*
+ canonicalize_file_name; clearenv;
+
+ # d*
+ div; drand48; drand48_r;
+
+ # e*
+ erand48; erand48_r; exit;
+
+ # g*
+ getenv; getsubopt;
+
+ # i*
+ initstate; initstate_r;
+
+ # l*
+ l64a; labs; lcong48; lcong48_r; ldiv; llabs; lldiv; lrand48; lrand48_r;
+
+ # m*
+ mblen; mbrlen; mbrtowc; mbsinit; mbsnrtowcs; mbsrtowcs; mbstowcs;
+ mbtowc; mcheck; mcount; mrand48; mrand48_r;
+
+ # n*
+ nrand48; nrand48_r;
+
+ # o*
+ on_exit;
+
+ # p*
+ putenv;
+
+ # q*
+ qsort;
+
+ # r*
+ rand; rand_r; random; random_r; realpath; rpmatch;
+
+ # s*
+ seed48; seed48_r; setcontext; setenv; setstate; setstate_r; srand; srand48;
+ srand48_r; srandom; srandom_r; step; strfmon; strtod; strtof; strtol;
+ strtold; strtoll; strtoq; strtoul; strtoull; strtouq; system;
+
+ # u*
+ unsetenv;
+
+ # w*
+ wcstombs; wctomb;
+ }
+ GLIBC_2.1 {
+ # a*
+ addseverity;
+
+ # f*
+ fmtmsg;
+
+ # g*
+ getcontext;
+
+ # m*
+ makecontext;
+
+ # s*
+ strtoimax; strtoumax; swapcontext;
+ }
+ GLIBC_2.1.1 {
+ # _*
+ _Exit;
+
+ # i*
+ imaxabs; imaxdiv;
+ }
+ GLIBC_2.1.3 {
+ # used by new G++ ABI
+ __cxa_atexit; __cxa_finalize;
+ }
+ GLIBC_2.3 {
+ # Silent change in SUS.
+ realpath;
+ }
+ GLIBC_2.8 {
+ qsort_r;
+ }
+ GLIBC_2.10 {
+ quick_exit; __cxa_at_quick_exit;
+ }
+ GLIBC_2.13 {
+ __fentry__;
+ }
+ GLIBC_2.17 {
+ secure_getenv;
+ }
+ GLIBC_2.18 {
+ __cxa_thread_atexit_impl;
+ }
+ GLIBC_2.24 {
+ quick_exit;
+ }
+ GLIBC_2.25 {
+ # s*
+ strfromd; strfromf; strfroml;
+ getrandom; getentropy;
+ }
+ GLIBC_PRIVATE {
+ # functions which have an additional interface since they are
+ # are cancelable.
+ __libc_system;
+ # Variable which needs a dynamic symbol table entry.
+ __abort_msg;
+ # Used from other libraries
+ __libc_secure_getenv;
+ __call_tls_dtors;
+ __strtof_nan; __strtod_nan; __strtold_nan;
+ }
+}
diff --git a/REORG.TODO/stdlib/a64l.c b/REORG.TODO/stdlib/a64l.c
new file mode 100644
index 0000000000..55de3129d3
--- /dev/null
+++ b/REORG.TODO/stdlib/a64l.c
@@ -0,0 +1,64 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.org>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#define TABLE_BASE 0x2e
+#define TABLE_SIZE 0x4d
+
+#define XX ((char)0x40)
+
+
+static const char a64l_table[TABLE_SIZE] =
+{
+ /* 0x2e */ 0, 1,
+ /* 0x30 */ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, XX, XX, XX, XX, XX, XX,
+ /* 0x40 */ XX, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ /* 0x50 */ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, XX, XX, XX, XX, XX,
+ /* 0x60 */ XX, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ /* 0x70 */ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63
+};
+
+
+long int
+a64l (const char *string)
+{
+ const char *ptr = string;
+ unsigned long int result = 0ul;
+ const char *end = ptr + 6;
+ int shift = 0;
+
+ do
+ {
+ unsigned index;
+ unsigned value;
+
+ index = *ptr - TABLE_BASE;
+ if ((unsigned int) index >= TABLE_SIZE)
+ break;
+ value = (int) a64l_table[index];
+ if (value == (int) XX)
+ break;
+ ++ptr;
+ result |= value << shift;
+ shift += 6;
+ }
+ while (ptr != end);
+
+ return (long int) result;
+}
diff --git a/REORG.TODO/stdlib/abort.c b/REORG.TODO/stdlib/abort.c
new file mode 100644
index 0000000000..19882f3e3d
--- /dev/null
+++ b/REORG.TODO/stdlib/abort.c
@@ -0,0 +1,142 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <libc-lock.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sigsetops.h>
+
+/* Try to get a machine dependent instruction which will make the
+ program crash. This is used in case everything else fails. */
+#include <abort-instr.h>
+#ifndef ABORT_INSTRUCTION
+/* No such instruction is available. */
+# define ABORT_INSTRUCTION
+#endif
+
+#include <libio/libioP.h>
+#define fflush(s) _IO_flush_all_lockp (0)
+
+/* Exported variable to locate abort message in core files etc. */
+struct abort_msg_s *__abort_msg __attribute__ ((nocommon));
+libc_hidden_def (__abort_msg)
+
+/* We must avoid to run in circles. Therefore we remember how far we
+ already got. */
+static int stage;
+
+/* We should be prepared for multiple threads trying to run abort. */
+__libc_lock_define_initialized_recursive (static, lock);
+
+
+/* Cause an abnormal program termination with core-dump. */
+void
+abort (void)
+{
+ struct sigaction act;
+ sigset_t sigs;
+
+ /* First acquire the lock. */
+ __libc_lock_lock_recursive (lock);
+
+ /* Now it's for sure we are alone. But recursive calls are possible. */
+
+ /* Unblock SIGABRT. */
+ if (stage == 0)
+ {
+ ++stage;
+ __sigemptyset (&sigs);
+ __sigaddset (&sigs, SIGABRT);
+ __sigprocmask (SIG_UNBLOCK, &sigs, 0);
+ }
+
+ /* Flush all streams. We cannot close them now because the user
+ might have registered a handler for SIGABRT. */
+ if (stage == 1)
+ {
+ ++stage;
+ fflush (NULL);
+ }
+
+ /* Send signal which possibly calls a user handler. */
+ if (stage == 2)
+ {
+ /* This stage is special: we must allow repeated calls of
+ `abort' when a user defined handler for SIGABRT is installed.
+ This is risky since the `raise' implementation might also
+ fail but I don't see another possibility. */
+ int save_stage = stage;
+
+ stage = 0;
+ __libc_lock_unlock_recursive (lock);
+
+ raise (SIGABRT);
+
+ __libc_lock_lock_recursive (lock);
+ stage = save_stage + 1;
+ }
+
+ /* There was a handler installed. Now remove it. */
+ if (stage == 3)
+ {
+ ++stage;
+ memset (&act, '\0', sizeof (struct sigaction));
+ act.sa_handler = SIG_DFL;
+ __sigfillset (&act.sa_mask);
+ act.sa_flags = 0;
+ __sigaction (SIGABRT, &act, NULL);
+ }
+
+ /* Now close the streams which also flushes the output the user
+ defined handler might has produced. */
+ if (stage == 4)
+ {
+ ++stage;
+ __fcloseall ();
+ }
+
+ /* Try again. */
+ if (stage == 5)
+ {
+ ++stage;
+ raise (SIGABRT);
+ }
+
+ /* Now try to abort using the system specific command. */
+ if (stage == 6)
+ {
+ ++stage;
+ ABORT_INSTRUCTION;
+ }
+
+ /* If we can't signal ourselves and the abort instruction failed, exit. */
+ if (stage == 7)
+ {
+ ++stage;
+ _exit (127);
+ }
+
+ /* If even this fails try to use the provided instruction to crash
+ or otherwise make sure we never return. */
+ while (1)
+ /* Try for ever and ever. */
+ ABORT_INSTRUCTION;
+}
+libc_hidden_def (abort)
diff --git a/REORG.TODO/stdlib/abs.c b/REORG.TODO/stdlib/abs.c
new file mode 100644
index 0000000000..dad7403658
--- /dev/null
+++ b/REORG.TODO/stdlib/abs.c
@@ -0,0 +1,27 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef abs
+
+/* Return the absolute value of I. */
+int
+abs (int i)
+{
+ return i < 0 ? -i : i;
+}
diff --git a/REORG.TODO/stdlib/add_n.c b/REORG.TODO/stdlib/add_n.c
new file mode 100644
index 0000000000..12ded53c58
--- /dev/null
+++ b/REORG.TODO/stdlib/add_n.c
@@ -0,0 +1,53 @@
+/* mpn_add_n -- Add two limb vectors of equal, non-zero length.
+
+Copyright (C) 1992-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+mp_limb_t
+mpn_add_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr, mp_size_t size)
+{
+ register mp_limb_t x, y, cy;
+ register mp_size_t j;
+
+ /* The loop counter and index J goes from -SIZE to -1. This way
+ the loop becomes faster. */
+ j = -size;
+
+ /* Offset the base pointers to compensate for the negative indices. */
+ s1_ptr -= j;
+ s2_ptr -= j;
+ res_ptr -= j;
+
+ cy = 0;
+ do
+ {
+ y = s2_ptr[j];
+ x = s1_ptr[j];
+ y += cy; /* add previous carry to one addend */
+ cy = (y < cy); /* get out carry from that addition */
+ y = x + y; /* add other addend */
+ cy = (y < x) + cy; /* get out carry from that add, combine */
+ res_ptr[j] = y;
+ }
+ while (++j != 0);
+
+ return cy;
+}
diff --git a/REORG.TODO/stdlib/addmul_1.c b/REORG.TODO/stdlib/addmul_1.c
new file mode 100644
index 0000000000..9eaea8ba33
--- /dev/null
+++ b/REORG.TODO/stdlib/addmul_1.c
@@ -0,0 +1,61 @@
+/* mpn_addmul_1 -- multiply the S1_SIZE long limb vector pointed to by S1_PTR
+ by S2_LIMB, add the S1_SIZE least significant limbs of the product to the
+ limb vector pointed to by RES_PTR. Return the most significant limb of
+ the product, adjusted for carry-out from the addition.
+
+Copyright (C) 1992-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+mp_limb_t
+mpn_addmul_1 (register mp_ptr res_ptr, register mp_srcptr s1_ptr,
+ mp_size_t s1_size, register mp_limb_t s2_limb)
+{
+ register mp_limb_t cy_limb;
+ register mp_size_t j;
+ register mp_limb_t prod_high, prod_low;
+ register mp_limb_t x;
+
+ /* The loop counter and index J goes from -SIZE to -1. This way
+ the loop becomes faster. */
+ j = -s1_size;
+
+ /* Offset the base pointers to compensate for the negative indices. */
+ res_ptr -= j;
+ s1_ptr -= j;
+
+ cy_limb = 0;
+ do
+ {
+ umul_ppmm (prod_high, prod_low, s1_ptr[j], s2_limb);
+
+ prod_low += cy_limb;
+ cy_limb = (prod_low < cy_limb) + prod_high;
+
+ x = res_ptr[j];
+ prod_low = x + prod_low;
+ cy_limb += (prod_low < x);
+ res_ptr[j] = prod_low;
+ }
+ while (++j != 0);
+
+ return cy_limb;
+}
diff --git a/REORG.TODO/stdlib/alloca.h b/REORG.TODO/stdlib/alloca.h
new file mode 100644
index 0000000000..89a1a90a4f
--- /dev/null
+++ b/REORG.TODO/stdlib/alloca.h
@@ -0,0 +1,40 @@
+/* Copyright (C) 1992-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _ALLOCA_H
+#define _ALLOCA_H 1
+
+#include <features.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+/* Remove any previous definitions. */
+#undef alloca
+
+/* Allocate a block that will be freed when the calling function exits. */
+extern void *alloca (size_t __size) __THROW;
+
+#ifdef __GNUC__
+# define alloca(size) __builtin_alloca (size)
+#endif /* GCC. */
+
+__END_DECLS
+
+#endif /* alloca.h */
diff --git a/REORG.TODO/stdlib/at_quick_exit.c b/REORG.TODO/stdlib/at_quick_exit.c
new file mode 100644
index 0000000000..3b74d0a688
--- /dev/null
+++ b/REORG.TODO/stdlib/at_quick_exit.c
@@ -0,0 +1,50 @@
+/* Copyright (C) 1991-2017 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 with other
+ programs, and to distribute those programs without any restriction
+ coming from the use of this file. (The GNU Lesser General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into another program.)
+
+ Note that people who make modified versions of this file are not
+ obligated to grant this special exception for their modified
+ versions; it is their choice whether to do so. The GNU Lesser
+ General Public License gives permission to release a modified
+ version without this exception; this exception also makes it
+ possible to release a modified version which carries forward this
+ exception.
+
+ 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
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include "exit.h"
+
+
+/* This is defined by newer gcc version unique for each module. */
+extern void *__dso_handle __attribute__ ((__weak__));
+
+
+/* Register FUNC to be executed by `quick_exit'. */
+int
+attribute_hidden
+at_quick_exit (void (*func) (void))
+{
+ return __cxa_at_quick_exit ((void (*) (void *)) func,
+ &__dso_handle == NULL ? NULL : __dso_handle);
+}
diff --git a/REORG.TODO/stdlib/atexit.c b/REORG.TODO/stdlib/atexit.c
new file mode 100644
index 0000000000..f28b6ba1b7
--- /dev/null
+++ b/REORG.TODO/stdlib/atexit.c
@@ -0,0 +1,52 @@
+/* Copyright (C) 1991-2017 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 with other
+ programs, and to distribute those programs without any restriction
+ coming from the use of this file. (The GNU Lesser General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into another program.)
+
+ Note that people who make modified versions of this file are not
+ obligated to grant this special exception for their modified
+ versions; it is their choice whether to do so. The GNU Lesser
+ General Public License gives permission to release a modified
+ version without this exception; this exception also makes it
+ possible to release a modified version which carries forward this
+ exception.
+
+ 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
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include "exit.h"
+
+
+/* This is defined by newer gcc version unique for each module. */
+extern void *__dso_handle __attribute__ ((__weak__));
+
+
+/* Register FUNC to be executed by `exit'. */
+int
+#ifndef atexit
+attribute_hidden
+#endif
+atexit (void (*func) (void))
+{
+ return __cxa_atexit ((void (*) (void *)) func, NULL,
+ &__dso_handle == NULL ? NULL : __dso_handle);
+}
diff --git a/REORG.TODO/stdlib/atof.c b/REORG.TODO/stdlib/atof.c
new file mode 100644
index 0000000000..a21ce58924
--- /dev/null
+++ b/REORG.TODO/stdlib/atof.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef atof
+
+
+/* Convert a string to a double. */
+double
+atof (const char *nptr)
+{
+ return strtod (nptr, (char **) NULL);
+}
diff --git a/REORG.TODO/stdlib/atoi.c b/REORG.TODO/stdlib/atoi.c
new file mode 100644
index 0000000000..f8593423a6
--- /dev/null
+++ b/REORG.TODO/stdlib/atoi.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef atoi
+
+
+/* Convert a string to an int. */
+int
+atoi (const char *nptr)
+{
+ return (int) strtol (nptr, (char **) NULL, 10);
+}
diff --git a/REORG.TODO/stdlib/atol.c b/REORG.TODO/stdlib/atol.c
new file mode 100644
index 0000000000..8ca34c0803
--- /dev/null
+++ b/REORG.TODO/stdlib/atol.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef atol
+
+
+/* Convert a string to a long int. */
+long int
+atol (const char *nptr)
+{
+ return strtol (nptr, (char **) NULL, 10);
+}
diff --git a/REORG.TODO/stdlib/atoll.c b/REORG.TODO/stdlib/atoll.c
new file mode 100644
index 0000000000..41b36a016e
--- /dev/null
+++ b/REORG.TODO/stdlib/atoll.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef atoll
+
+
+/* Convert a string to a long long int. */
+long long int
+atoll (const char *nptr)
+{
+ return strtoll (nptr, (char **) NULL, 10);
+}
diff --git a/REORG.TODO/stdlib/bits/monetary-ldbl.h b/REORG.TODO/stdlib/bits/monetary-ldbl.h
new file mode 100644
index 0000000000..d042ac5af1
--- /dev/null
+++ b/REORG.TODO/stdlib/bits/monetary-ldbl.h
@@ -0,0 +1,27 @@
+/* -mlong-double-64 compatibility mode for monetary functions.
+ Copyright (C) 2006-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _MONETARY_H
+# error "Never include <bits/monetary-ldbl.h> directly; use <monetary.h> instead."
+#endif
+
+__LDBL_REDIR_DECL (strfmon)
+
+#ifdef __USE_GNU
+__LDBL_REDIR_DECL (strfmon_l)
+#endif
diff --git a/REORG.TODO/stdlib/bits/stdlib-float.h b/REORG.TODO/stdlib/bits/stdlib-float.h
new file mode 100644
index 0000000000..aba8e94596
--- /dev/null
+++ b/REORG.TODO/stdlib/bits/stdlib-float.h
@@ -0,0 +1,29 @@
+/* Floating-point inline functions for stdlib.h.
+ Copyright (C) 2012-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _STDLIB_H
+# error "Never use <bits/stdlib-float.h> directly; include <stdlib.h> instead."
+#endif
+
+#ifdef __USE_EXTERN_INLINES
+__extern_inline double
+__NTH (atof (const char *__nptr))
+{
+ return strtod (__nptr, (char **) NULL);
+}
+#endif /* Optimizing and Inlining. */
diff --git a/REORG.TODO/stdlib/bits/stdlib-ldbl.h b/REORG.TODO/stdlib/bits/stdlib-ldbl.h
new file mode 100644
index 0000000000..2f568db45a
--- /dev/null
+++ b/REORG.TODO/stdlib/bits/stdlib-ldbl.h
@@ -0,0 +1,41 @@
+/* -mlong-double-64 compatibility mode for <stdlib.h> functions.
+ Copyright (C) 2006-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _STDLIB_H
+# error "Never include <bits/stdlib-ldbl.h> directly; use <stdlib.h> instead."
+#endif
+
+#ifdef __USE_ISOC99
+__LDBL_REDIR1_DECL (strtold, strtod)
+#endif
+
+#ifdef __USE_GNU
+__LDBL_REDIR1_DECL (strtold_l, strtod_l)
+#endif
+
+#if __GLIBC_USE (IEC_60559_BFP_EXT)
+__LDBL_REDIR1_DECL (strfroml, strfromd)
+#endif
+
+#ifdef __USE_MISC
+__LDBL_REDIR1_DECL (qecvt, ecvt)
+__LDBL_REDIR1_DECL (qfcvt, fcvt)
+__LDBL_REDIR1_DECL (qgcvt, gcvt)
+__LDBL_REDIR1_DECL (qecvt_r, ecvt_r)
+__LDBL_REDIR1_DECL (qfcvt_r, fcvt_r)
+#endif
diff --git a/REORG.TODO/stdlib/bits/stdlib.h b/REORG.TODO/stdlib/bits/stdlib.h
new file mode 100644
index 0000000000..864284fc74
--- /dev/null
+++ b/REORG.TODO/stdlib/bits/stdlib.h
@@ -0,0 +1,155 @@
+/* Checking macros for stdlib functions.
+ Copyright (C) 2005-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _STDLIB_H
+# error "Never include <bits/stdlib.h> directly; use <stdlib.h> instead."
+#endif
+
+extern char *__realpath_chk (const char *__restrict __name,
+ char *__restrict __resolved,
+ size_t __resolvedlen) __THROW __wur;
+extern char *__REDIRECT_NTH (__realpath_alias,
+ (const char *__restrict __name,
+ char *__restrict __resolved), realpath) __wur;
+extern char *__REDIRECT_NTH (__realpath_chk_warn,
+ (const char *__restrict __name,
+ char *__restrict __resolved,
+ size_t __resolvedlen), __realpath_chk) __wur
+ __warnattr ("second argument of realpath must be either NULL or at "
+ "least PATH_MAX bytes long buffer");
+
+__fortify_function __wur char *
+__NTH (realpath (const char *__restrict __name, char *__restrict __resolved))
+{
+ if (__bos (__resolved) != (size_t) -1)
+ {
+#if defined _LIBC_LIMITS_H_ && defined PATH_MAX
+ if (__bos (__resolved) < PATH_MAX)
+ return __realpath_chk_warn (__name, __resolved, __bos (__resolved));
+#endif
+ return __realpath_chk (__name, __resolved, __bos (__resolved));
+ }
+
+ return __realpath_alias (__name, __resolved);
+}
+
+
+extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen,
+ size_t __nreal) __THROW __nonnull ((2));
+extern int __REDIRECT_NTH (__ptsname_r_alias, (int __fd, char *__buf,
+ size_t __buflen), ptsname_r)
+ __nonnull ((2));
+extern int __REDIRECT_NTH (__ptsname_r_chk_warn,
+ (int __fd, char *__buf, size_t __buflen,
+ size_t __nreal), __ptsname_r_chk)
+ __nonnull ((2)) __warnattr ("ptsname_r called with buflen bigger than "
+ "size of buf");
+
+__fortify_function int
+__NTH (ptsname_r (int __fd, char *__buf, size_t __buflen))
+{
+ if (__bos (__buf) != (size_t) -1)
+ {
+ if (!__builtin_constant_p (__buflen))
+ return __ptsname_r_chk (__fd, __buf, __buflen, __bos (__buf));
+ if (__buflen > __bos (__buf))
+ return __ptsname_r_chk_warn (__fd, __buf, __buflen, __bos (__buf));
+ }
+ return __ptsname_r_alias (__fd, __buf, __buflen);
+}
+
+
+extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen)
+ __THROW __wur;
+extern int __REDIRECT_NTH (__wctomb_alias, (char *__s, wchar_t __wchar),
+ wctomb) __wur;
+
+__fortify_function __wur int
+__NTH (wctomb (char *__s, wchar_t __wchar))
+{
+ /* We would have to include <limits.h> to get a definition of MB_LEN_MAX.
+ But this would only disturb the namespace. So we define our own
+ version here. */
+#define __STDLIB_MB_LEN_MAX 16
+#if defined MB_LEN_MAX && MB_LEN_MAX != __STDLIB_MB_LEN_MAX
+# error "Assumed value of MB_LEN_MAX wrong"
+#endif
+ if (__bos (__s) != (size_t) -1 && __STDLIB_MB_LEN_MAX > __bos (__s))
+ return __wctomb_chk (__s, __wchar, __bos (__s));
+ return __wctomb_alias (__s, __wchar);
+}
+
+
+extern size_t __mbstowcs_chk (wchar_t *__restrict __dst,
+ const char *__restrict __src,
+ size_t __len, size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__mbstowcs_alias,
+ (wchar_t *__restrict __dst,
+ const char *__restrict __src,
+ size_t __len), mbstowcs);
+extern size_t __REDIRECT_NTH (__mbstowcs_chk_warn,
+ (wchar_t *__restrict __dst,
+ const char *__restrict __src,
+ size_t __len, size_t __dstlen), __mbstowcs_chk)
+ __warnattr ("mbstowcs called with dst buffer smaller than len "
+ "* sizeof (wchar_t)");
+
+__fortify_function size_t
+__NTH (mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src,
+ size_t __len))
+{
+ if (__bos (__dst) != (size_t) -1)
+ {
+ if (!__builtin_constant_p (__len))
+ return __mbstowcs_chk (__dst, __src, __len,
+ __bos (__dst) / sizeof (wchar_t));
+
+ if (__len > __bos (__dst) / sizeof (wchar_t))
+ return __mbstowcs_chk_warn (__dst, __src, __len,
+ __bos (__dst) / sizeof (wchar_t));
+ }
+ return __mbstowcs_alias (__dst, __src, __len);
+}
+
+
+extern size_t __wcstombs_chk (char *__restrict __dst,
+ const wchar_t *__restrict __src,
+ size_t __len, size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__wcstombs_alias,
+ (char *__restrict __dst,
+ const wchar_t *__restrict __src,
+ size_t __len), wcstombs);
+extern size_t __REDIRECT_NTH (__wcstombs_chk_warn,
+ (char *__restrict __dst,
+ const wchar_t *__restrict __src,
+ size_t __len, size_t __dstlen), __wcstombs_chk)
+ __warnattr ("wcstombs called with dst buffer smaller than len");
+
+__fortify_function size_t
+__NTH (wcstombs (char *__restrict __dst, const wchar_t *__restrict __src,
+ size_t __len))
+{
+ if (__bos (__dst) != (size_t) -1)
+ {
+ if (!__builtin_constant_p (__len))
+ return __wcstombs_chk (__dst, __src, __len, __bos (__dst));
+ if (__len > __bos (__dst))
+ return __wcstombs_chk_warn (__dst, __src, __len, __bos (__dst));
+ }
+ return __wcstombs_alias (__dst, __src, __len);
+}
diff --git a/REORG.TODO/stdlib/bsearch.c b/REORG.TODO/stdlib/bsearch.c
new file mode 100644
index 0000000000..e6aa407491
--- /dev/null
+++ b/REORG.TODO/stdlib/bsearch.c
@@ -0,0 +1,23 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef __extern_inline
+#define __extern_inline /* Empty, so we get a normal definition. */
+#include <bits/stdlib-bsearch.h>
+libc_hidden_def (bsearch)
diff --git a/REORG.TODO/stdlib/bug-fmtmsg1.c b/REORG.TODO/stdlib/bug-fmtmsg1.c
new file mode 100644
index 0000000000..04bfaea3ce
--- /dev/null
+++ b/REORG.TODO/stdlib/bug-fmtmsg1.c
@@ -0,0 +1,28 @@
+#include <fmtmsg.h>
+#include <stdio.h>
+
+
+static int
+do_test (void)
+{
+ /* Ugly, but fmtmsg would otherwise print to stderr which we do not
+ want. */
+ fclose (stderr);
+ stderr = stdout;
+
+ int e1;
+ e1 = fmtmsg (MM_PRINT, "label:part", MM_WARNING, "text", "action", "tag");
+
+ int e2;
+ e2 = fmtmsg (MM_PRINT, "label2:part2", 11, "text2", "action2", "tag2");
+
+ addseverity (10, "additional severity");
+
+ int e3;
+ e3 = fmtmsg (MM_PRINT, "label3:part3", 10, "text3", "action3", "tag3");
+
+ return e1 != 0 || e2 != 0 || e3 != 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/bug-getcontext.c b/REORG.TODO/stdlib/bug-getcontext.c
new file mode 100644
index 0000000000..163400acba
--- /dev/null
+++ b/REORG.TODO/stdlib/bug-getcontext.c
@@ -0,0 +1,76 @@
+/* BZ 12420 */
+
+#include <errno.h>
+#include <fenv.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <ucontext.h>
+#include <libc-diag.h>
+
+static int
+do_test (void)
+{
+ if (FE_ALL_EXCEPT == 0)
+ {
+ printf("Skipping test; no support for FP exceptions.\n");
+ return 0;
+ }
+
+ int except_mask = 0;
+#ifdef FE_DIVBYZERO
+ except_mask |= FE_DIVBYZERO;
+#endif
+#ifdef FE_INVALID
+ except_mask |= FE_INVALID;
+#endif
+#ifdef FE_OVERFLOW
+ except_mask |= FE_OVERFLOW;
+#endif
+#ifdef FE_UNDERFLOW
+ except_mask |= FE_UNDERFLOW;
+#endif
+ int status = feenableexcept (except_mask);
+
+ except_mask = fegetexcept ();
+ if (except_mask == -1)
+ {
+ printf("\nBefore getcontext(): fegetexcept returned: %d\n",
+ except_mask);
+ return 1;
+ }
+
+ ucontext_t ctx;
+ status = getcontext(&ctx);
+ if (status)
+ {
+ printf("\ngetcontext failed, errno: %d.\n", errno);
+ return 1;
+ }
+
+ printf ("\nDone with getcontext()!\n");
+ fflush (NULL);
+
+ /* On nios2 and tilepro, GCC 5 warns that except_mask may be used
+ uninitialized. Because it is always initialized and nothing in
+ this test ever calls setcontext (a setcontext call could result
+ in local variables being clobbered on the second return from
+ getcontext), in fact an uninitialized use is not possible. */
+ DIAG_PUSH_NEEDS_COMMENT;
+ DIAG_IGNORE_NEEDS_COMMENT (5, "-Wmaybe-uninitialized");
+ int mask = fegetexcept ();
+ if (mask != except_mask)
+ {
+ printf("\nAfter getcontext(): fegetexcept returned: %d, expected: %d.\n",
+ mask, except_mask);
+ return 1;
+ }
+
+ printf("\nAt end fegetexcept() returned %d, expected: %d.\n",
+ mask, except_mask);
+ DIAG_POP_NEEDS_COMMENT;
+
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/bug-strtod.c b/REORG.TODO/stdlib/bug-strtod.c
new file mode 100644
index 0000000000..b91f739104
--- /dev/null
+++ b/REORG.TODO/stdlib/bug-strtod.c
@@ -0,0 +1,67 @@
+/* Test to strtod etc for numbers like x000...0000.000e-nn.
+ This file is part of the GNU C Library.
+ Copyright (C) 2001-2017 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "tst-strtod.h"
+
+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
+static int \
+test_strto ## FSUF (void) \
+{ \
+ char buf[300]; \
+ int cnt; \
+ int result = 0; \
+ \
+ for (cnt = 0; cnt < 200; ++cnt) \
+ { \
+ ssize_t n; \
+ FTYPE f; \
+ \
+ n = sprintf (buf, "%d", cnt); \
+ memset (buf + n, '0', cnt); \
+ sprintf (buf + n + cnt, ".000e-%d", cnt); \
+ f = strto ## FSUF (buf, NULL); \
+ \
+ if (f != (FTYPE) cnt) \
+ { \
+ char fstr[FSTRLENMAX]; \
+ char fcntstr[FSTRLENMAX]; \
+ FTOSTR (fstr, sizeof (fstr), "%g", f); \
+ FTOSTR (fcntstr, sizeof (fstr), "%g", (FTYPE) cnt); \
+ printf ("strto" #FSUF "(\"%s\") " \
+ "failed for cnt == %d (%s instead of %s)\n", \
+ buf, cnt, fstr, fcntstr); \
+ result = 1; \
+ } \
+ else \
+ printf ( "strto" #FSUF "() fine for cnt == %d\n", cnt); \
+ } \
+ return result; \
+}
+
+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)
+
+int
+main (void)
+{
+ return STRTOD_TEST_FOREACH (test_strto);
+}
diff --git a/REORG.TODO/stdlib/bug-strtod2.c b/REORG.TODO/stdlib/bug-strtod2.c
new file mode 100644
index 0000000000..6128f2dd56
--- /dev/null
+++ b/REORG.TODO/stdlib/bug-strtod2.c
@@ -0,0 +1,57 @@
+#include <locale.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "tst-strtod.h"
+
+static const char *tests[] =
+ {
+ "inf", "Inf", "iNf", "inF", "INf", "iNF", "INF", "InF",
+ "infinity", "Infinity", "InfInity", "INFINITY"
+ };
+#define ntests (sizeof (tests) / sizeof (tests[0]))
+
+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
+static int \
+test_strto ## FSUF (void) \
+{ \
+ int res = 0; \
+ for (int i = 0; i < ntests; ++i) \
+ { \
+ char *endp; \
+ FTYPE d = strto ## FSUF (tests[i], &endp); \
+ if (*endp != '\0') \
+ { \
+ printf ("did not consume all of '%s'\n", tests[i]); \
+ res = 1; \
+ } \
+ if (!isinf (d)) \
+ { \
+ printf ("'%s' does not pass isinf\n", tests[i]); \
+ res = 1; \
+ } \
+ } \
+ \
+ return res; \
+}
+
+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)
+
+static int
+do_test (void)
+{
+ /* The Turkish locale is notorious because tolower() maps 'I' to the
+ dotless lowercase 'i' and toupper() maps 'i' to an 'I' with a dot
+ above. */
+ if (setlocale (LC_ALL, "tr_TR.UTF-8") == NULL)
+ {
+ puts ("cannot set locale");
+ return 0;
+ }
+
+ return STRTOD_TEST_FOREACH (test_strto);
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/canonicalize.c b/REORG.TODO/stdlib/canonicalize.c
new file mode 100644
index 0000000000..c3d892c862
--- /dev/null
+++ b/REORG.TODO/stdlib/canonicalize.c
@@ -0,0 +1,246 @@
+/* Return the canonical absolute name of a given file.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <limits.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <stddef.h>
+
+#include <eloop-threshold.h>
+#include <shlib-compat.h>
+
+/* Return the canonical absolute name of file NAME. A canonical name
+ does not contain any `.', `..' components nor any repeated path
+ separators ('/') or symlinks. All path components must exist. If
+ RESOLVED is null, the result is malloc'd; otherwise, if the
+ canonical name is PATH_MAX chars or more, returns null with `errno'
+ set to ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
+ returns the name in RESOLVED. If the name cannot be resolved and
+ RESOLVED is non-NULL, it contains the path of the first component
+ that cannot be resolved. If the path can be resolved, RESOLVED
+ holds the same value as the value returned. */
+
+char *
+__realpath (const char *name, char *resolved)
+{
+ char *rpath, *dest, *extra_buf = NULL;
+ const char *start, *end, *rpath_limit;
+ long int path_max;
+ int num_links = 0;
+
+ if (name == NULL)
+ {
+ /* As per Single Unix Specification V2 we must return an error if
+ either parameter is a null pointer. We extend this to allow
+ the RESOLVED parameter to be NULL in case the we are expected to
+ allocate the room for the return value. */
+ __set_errno (EINVAL);
+ return NULL;
+ }
+
+ if (name[0] == '\0')
+ {
+ /* As per Single Unix Specification V2 we must return an error if
+ the name argument points to an empty string. */
+ __set_errno (ENOENT);
+ return NULL;
+ }
+
+#ifdef PATH_MAX
+ path_max = PATH_MAX;
+#else
+ path_max = pathconf (name, _PC_PATH_MAX);
+ if (path_max <= 0)
+ path_max = 1024;
+#endif
+
+ if (resolved == NULL)
+ {
+ rpath = malloc (path_max);
+ if (rpath == NULL)
+ return NULL;
+ }
+ else
+ rpath = resolved;
+ rpath_limit = rpath + path_max;
+
+ if (name[0] != '/')
+ {
+ if (!__getcwd (rpath, path_max))
+ {
+ rpath[0] = '\0';
+ goto error;
+ }
+ dest = __rawmemchr (rpath, '\0');
+ }
+ else
+ {
+ rpath[0] = '/';
+ dest = rpath + 1;
+ }
+
+ for (start = end = name; *start; start = end)
+ {
+ struct stat64 st;
+ int n;
+
+ /* Skip sequence of multiple path-separators. */
+ while (*start == '/')
+ ++start;
+
+ /* Find end of path component. */
+ for (end = start; *end && *end != '/'; ++end)
+ /* Nothing. */;
+
+ if (end - start == 0)
+ break;
+ else if (end - start == 1 && start[0] == '.')
+ /* nothing */;
+ else if (end - start == 2 && start[0] == '.' && start[1] == '.')
+ {
+ /* Back up to previous component, ignore if at root already. */
+ if (dest > rpath + 1)
+ while ((--dest)[-1] != '/');
+ }
+ else
+ {
+ size_t new_size;
+
+ if (dest[-1] != '/')
+ *dest++ = '/';
+
+ if (dest + (end - start) >= rpath_limit)
+ {
+ ptrdiff_t dest_offset = dest - rpath;
+ char *new_rpath;
+
+ if (resolved)
+ {
+ __set_errno (ENAMETOOLONG);
+ if (dest > rpath + 1)
+ dest--;
+ *dest = '\0';
+ goto error;
+ }
+ new_size = rpath_limit - rpath;
+ if (end - start + 1 > path_max)
+ new_size += end - start + 1;
+ else
+ new_size += path_max;
+ new_rpath = (char *) realloc (rpath, new_size);
+ if (new_rpath == NULL)
+ goto error;
+ rpath = new_rpath;
+ rpath_limit = rpath + new_size;
+
+ dest = rpath + dest_offset;
+ }
+
+ dest = __mempcpy (dest, start, end - start);
+ *dest = '\0';
+
+ if (__lxstat64 (_STAT_VER, rpath, &st) < 0)
+ goto error;
+
+ if (S_ISLNK (st.st_mode))
+ {
+ char *buf = __alloca (path_max);
+ size_t len;
+
+ if (++num_links > __eloop_threshold ())
+ {
+ __set_errno (ELOOP);
+ goto error;
+ }
+
+ n = __readlink (rpath, buf, path_max - 1);
+ if (n < 0)
+ goto error;
+ buf[n] = '\0';
+
+ if (!extra_buf)
+ extra_buf = __alloca (path_max);
+
+ len = strlen (end);
+ if ((long int) (n + len) >= path_max)
+ {
+ __set_errno (ENAMETOOLONG);
+ goto error;
+ }
+
+ /* Careful here, end may be a pointer into extra_buf... */
+ memmove (&extra_buf[n], end, len + 1);
+ name = end = memcpy (extra_buf, buf, n);
+
+ if (buf[0] == '/')
+ dest = rpath + 1; /* It's an absolute symlink */
+ else
+ /* Back up to previous component, ignore if at root already: */
+ if (dest > rpath + 1)
+ while ((--dest)[-1] != '/');
+ }
+ else if (!S_ISDIR (st.st_mode) && *end != '\0')
+ {
+ __set_errno (ENOTDIR);
+ goto error;
+ }
+ }
+ }
+ if (dest > rpath + 1 && dest[-1] == '/')
+ --dest;
+ *dest = '\0';
+
+ assert (resolved == NULL || resolved == rpath);
+ return rpath;
+
+error:
+ assert (resolved == NULL || resolved == rpath);
+ if (resolved == NULL)
+ free (rpath);
+ return NULL;
+}
+versioned_symbol (libc, __realpath, realpath, GLIBC_2_3);
+
+
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3)
+char *
+attribute_compat_text_section
+__old_realpath (const char *name, char *resolved)
+{
+ if (resolved == NULL)
+ {
+ __set_errno (EINVAL);
+ return NULL;
+ }
+
+ return __realpath (name, resolved);
+}
+compat_symbol (libc, __old_realpath, realpath, GLIBC_2_0);
+#endif
+
+
+char *
+__canonicalize_file_name (const char *name)
+{
+ return __realpath (name, NULL);
+}
+weak_alias (__canonicalize_file_name, canonicalize_file_name)
diff --git a/REORG.TODO/stdlib/cmp.c b/REORG.TODO/stdlib/cmp.c
new file mode 100644
index 0000000000..1480a9b165
--- /dev/null
+++ b/REORG.TODO/stdlib/cmp.c
@@ -0,0 +1,48 @@
+/* mpn_cmp -- Compare two low-level natural-number integers.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+/* Compare OP1_PTR/OP1_SIZE with OP2_PTR/OP2_SIZE.
+ There are no restrictions on the relative sizes of
+ the two arguments.
+ Return 1 if OP1 > OP2, 0 if they are equal, and -1 if OP1 < OP2. */
+
+int
+mpn_cmp (mp_srcptr op1_ptr, mp_srcptr op2_ptr, mp_size_t size)
+{
+ mp_size_t i;
+ mp_limb_t op1_word, op2_word;
+
+ for (i = size - 1; i >= 0; i--)
+ {
+ op1_word = op1_ptr[i];
+ op2_word = op2_ptr[i];
+ if (op1_word != op2_word)
+ goto diff;
+ }
+ return 0;
+ diff:
+ /* This can *not* be simplified to
+ op2_word - op2_word
+ since that expression might give signed overflow. */
+ return (op1_word > op2_word) ? 1 : -1;
+}
diff --git a/REORG.TODO/stdlib/cxa_at_quick_exit.c b/REORG.TODO/stdlib/cxa_at_quick_exit.c
new file mode 100644
index 0000000000..ebebaf4bd7
--- /dev/null
+++ b/REORG.TODO/stdlib/cxa_at_quick_exit.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include "exit.h"
+
+
+static struct exit_function_list initial_quick;
+struct exit_function_list *__quick_exit_funcs = &initial_quick;
+
+/* Register a function to be called by quick_exit. */
+int
+__cxa_at_quick_exit (void (*func) (void *), void *d)
+{
+ return __internal_atexit (func, NULL, d, &__quick_exit_funcs);
+}
diff --git a/REORG.TODO/stdlib/cxa_atexit.c b/REORG.TODO/stdlib/cxa_atexit.c
new file mode 100644
index 0000000000..ce5d9f22b4
--- /dev/null
+++ b/REORG.TODO/stdlib/cxa_atexit.c
@@ -0,0 +1,133 @@
+/* Copyright (C) 1999-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#include <libc-lock.h>
+#include "exit.h"
+#include <atomic.h>
+#include <sysdep.h>
+
+#undef __cxa_atexit
+
+
+int
+attribute_hidden
+__internal_atexit (void (*func) (void *), void *arg, void *d,
+ struct exit_function_list **listp)
+{
+ struct exit_function *new = __new_exitfn (listp);
+
+ if (new == NULL)
+ return -1;
+
+#ifdef PTR_MANGLE
+ PTR_MANGLE (func);
+#endif
+ new->func.cxa.fn = (void (*) (void *, int)) func;
+ new->func.cxa.arg = arg;
+ new->func.cxa.dso_handle = d;
+ atomic_write_barrier ();
+ new->flavor = ef_cxa;
+ return 0;
+}
+
+
+/* Register a function to be called by exit or when a shared library
+ is unloaded. This function is only called from code generated by
+ the C++ compiler. */
+int
+__cxa_atexit (void (*func) (void *), void *arg, void *d)
+{
+ return __internal_atexit (func, arg, d, &__exit_funcs);
+}
+libc_hidden_def (__cxa_atexit)
+
+
+/* We change global data, so we need locking. */
+__libc_lock_define_initialized (static, lock)
+
+
+static struct exit_function_list initial;
+struct exit_function_list *__exit_funcs = &initial;
+uint64_t __new_exitfn_called;
+
+struct exit_function *
+__new_exitfn (struct exit_function_list **listp)
+{
+ struct exit_function_list *p = NULL;
+ struct exit_function_list *l;
+ struct exit_function *r = NULL;
+ size_t i = 0;
+
+ __libc_lock_lock (lock);
+
+ for (l = *listp; l != NULL; p = l, l = l->next)
+ {
+ for (i = l->idx; i > 0; --i)
+ if (l->fns[i - 1].flavor != ef_free)
+ break;
+
+ if (i > 0)
+ break;
+
+ /* This block is completely unused. */
+ l->idx = 0;
+ }
+
+ if (l == NULL || i == sizeof (l->fns) / sizeof (l->fns[0]))
+ {
+ /* The last entry in a block is used. Use the first entry in
+ the previous block if it exists. Otherwise create a new one. */
+ if (p == NULL)
+ {
+ assert (l != NULL);
+ p = (struct exit_function_list *)
+ calloc (1, sizeof (struct exit_function_list));
+ if (p != NULL)
+ {
+ p->next = *listp;
+ *listp = p;
+ }
+ }
+
+ if (p != NULL)
+ {
+ r = &p->fns[0];
+ p->idx = 1;
+ }
+ }
+ else
+ {
+ /* There is more room in the block. */
+ r = &l->fns[i];
+ l->idx = i + 1;
+ }
+
+ /* Mark entry as used, but we don't know the flavor now. */
+ if (r != NULL)
+ {
+ r->flavor = ef_us;
+ ++__new_exitfn_called;
+ }
+
+ __libc_lock_unlock (lock);
+
+ return r;
+}
diff --git a/REORG.TODO/stdlib/cxa_finalize.c b/REORG.TODO/stdlib/cxa_finalize.c
new file mode 100644
index 0000000000..aa0a70cb58
--- /dev/null
+++ b/REORG.TODO/stdlib/cxa_finalize.c
@@ -0,0 +1,82 @@
+/* Copyright (C) 1999-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <assert.h>
+#include <stdlib.h>
+#include <atomic.h>
+#include "exit.h"
+#include <fork.h>
+#include <sysdep.h>
+#include <stdint.h>
+
+/* If D is non-NULL, call all functions registered with `__cxa_atexit'
+ with the same dso handle. Otherwise, if D is NULL, call all of the
+ registered handlers. */
+void
+__cxa_finalize (void *d)
+{
+ struct exit_function_list *funcs;
+
+ restart:
+ for (funcs = __exit_funcs; funcs; funcs = funcs->next)
+ {
+ struct exit_function *f;
+
+ for (f = &funcs->fns[funcs->idx - 1]; f >= &funcs->fns[0]; --f)
+ {
+ void (*cxafn) (void *arg, int status);
+ void *cxaarg;
+
+ if ((d == NULL || d == f->func.cxa.dso_handle)
+ /* We don't want to run this cleanup more than once. */
+ && (cxafn = f->func.cxa.fn,
+ cxaarg = f->func.cxa.arg,
+ ! catomic_compare_and_exchange_bool_acq (&f->flavor, ef_free,
+ ef_cxa)))
+ {
+ uint64_t check = __new_exitfn_called;
+
+#ifdef PTR_DEMANGLE
+ PTR_DEMANGLE (cxafn);
+#endif
+ cxafn (cxaarg, 0);
+
+ /* It is possible that that last exit function registered
+ more exit functions. Start the loop over. */
+ if (__glibc_unlikely (check != __new_exitfn_called))
+ goto restart;
+ }
+ }
+ }
+
+ /* Also remove the quick_exit handlers, but do not call them. */
+ for (funcs = __quick_exit_funcs; funcs; funcs = funcs->next)
+ {
+ struct exit_function *f;
+
+ for (f = &funcs->fns[funcs->idx - 1]; f >= &funcs->fns[0]; --f)
+ if (d == NULL || d == f->func.cxa.dso_handle)
+ f->flavor = ef_free;
+ }
+
+ /* Remove the registered fork handlers. We do not have to
+ unregister anything if the program is going to terminate anyway. */
+#ifdef UNREGISTER_ATFORK
+ if (d != NULL)
+ UNREGISTER_ATFORK (d);
+#endif
+}
diff --git a/REORG.TODO/stdlib/cxa_thread_atexit_impl.c b/REORG.TODO/stdlib/cxa_thread_atexit_impl.c
new file mode 100644
index 0000000000..f9942255a3
--- /dev/null
+++ b/REORG.TODO/stdlib/cxa_thread_atexit_impl.c
@@ -0,0 +1,165 @@
+/* Register destructors for C++ TLS variables declared with thread_local.
+ Copyright (C) 2013-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* CONCURRENCY NOTES:
+
+ This documents concurrency for the non-POD TLS destructor registration,
+ calling and destruction. The functions __cxa_thread_atexit_impl,
+ _dl_close_worker and __call_tls_dtors are the three main routines that may
+ run concurrently and access shared data. The shared data in all possible
+ combinations of all three functions are the link map list, a link map for a
+ DSO and the link map member l_tls_dtor_count.
+
+ __cxa_thread_atexit_impl acquires the dl_load_lock before accessing any
+ shared state and hence multiple of its instances can safely execute
+ concurrently.
+
+ _dl_close_worker acquires the dl_load_lock before accessing any shared state
+ as well and hence can concurrently execute multiple of its own instances as
+ well as those of __cxa_thread_atexit_impl safely. Not all accesses to
+ l_tls_dtor_count are protected by the dl_load_lock, so we need to
+ synchronize using atomics.
+
+ __call_tls_dtors accesses the l_tls_dtor_count without taking the lock; it
+ decrements the value by one. It does not need the big lock because it does
+ not access any other shared state except for the current DSO link map and
+ its member l_tls_dtor_count.
+
+ Correspondingly, _dl_close_worker loads l_tls_dtor_count and if it is zero,
+ unloads the DSO, thus deallocating the current link map. This is the goal
+ of maintaining l_tls_dtor_count - to unload the DSO and free resources if
+ there are no pending destructors to be called.
+
+ We want to eliminate the inconsistent state where the DSO is unloaded in
+ _dl_close_worker before it is used in __call_tls_dtors. This could happen
+ if __call_tls_dtors uses the link map after it sets l_tls_dtor_count to 0,
+ since _dl_close_worker will conclude from the 0 l_tls_dtor_count value that
+ it is safe to unload the DSO. Hence, to ensure that this does not happen,
+ the following conditions must be met:
+
+ 1. In _dl_close_worker, the l_tls_dtor_count load happens before the DSO is
+ unloaded and its link map is freed
+ 2. The link map dereference in __call_tls_dtors happens before the
+ l_tls_dtor_count dereference.
+
+ To ensure this, the l_tls_dtor_count decrement in __call_tls_dtors should
+ have release semantics and the load in _dl_close_worker should have acquire
+ semantics.
+
+ Concurrent executions of __call_tls_dtors should only ensure that the value
+ is accessed atomically; no reordering constraints need to be considered.
+ Likewise for the increment of l_tls_dtor_count in __cxa_thread_atexit_impl.
+
+ There is still a possibility on concurrent execution of _dl_close_worker and
+ __call_tls_dtors where _dl_close_worker reads the value of l_tls_dtor_count
+ as 1, __call_tls_dtors decrements the value of l_tls_dtor_count but
+ _dl_close_worker does not unload the DSO, having read the old value. This
+ is not very different from a case where __call_tls_dtors is called after
+ _dl_close_worker on the DSO and hence is an accepted execution. */
+
+#include <stdlib.h>
+#include <ldsodefs.h>
+
+typedef void (*dtor_func) (void *);
+
+struct dtor_list
+{
+ dtor_func func;
+ void *obj;
+ struct link_map *map;
+ struct dtor_list *next;
+};
+
+static __thread struct dtor_list *tls_dtor_list;
+static __thread void *dso_symbol_cache;
+static __thread struct link_map *lm_cache;
+
+/* Register a destructor for TLS variables declared with the 'thread_local'
+ keyword. This function is only called from code generated by the C++
+ compiler. FUNC is the destructor function and OBJ is the object to be
+ passed to the destructor. DSO_SYMBOL is the __dso_handle symbol that each
+ DSO has at a unique address in its map, added from crtbegin.o during the
+ linking phase. */
+int
+__cxa_thread_atexit_impl (dtor_func func, void *obj, void *dso_symbol)
+{
+#ifdef PTR_MANGLE
+ PTR_MANGLE (func);
+#endif
+
+ /* Prepend. */
+ struct dtor_list *new = calloc (1, sizeof (struct dtor_list));
+ new->func = func;
+ new->obj = obj;
+ new->next = tls_dtor_list;
+ tls_dtor_list = new;
+
+ /* We have to acquire the big lock to prevent a racing dlclose from pulling
+ our DSO from underneath us while we're setting up our destructor. */
+ __rtld_lock_lock_recursive (GL(dl_load_lock));
+
+ /* See if we already encountered the DSO. */
+ if (__glibc_unlikely (dso_symbol_cache != dso_symbol))
+ {
+ ElfW(Addr) caller = (ElfW(Addr)) dso_symbol;
+
+ struct link_map *l = _dl_find_dso_for_object (caller);
+
+ /* If the address is not recognized the call comes from the main
+ program (we hope). */
+ lm_cache = l ? l : GL(dl_ns)[LM_ID_BASE]._ns_loaded;
+ }
+
+ /* This increment may only be concurrently observed either by the decrement
+ in __call_tls_dtors since the other l_tls_dtor_count access in
+ _dl_close_worker is protected by the dl_load_lock. The execution in
+ __call_tls_dtors does not really depend on this value beyond the fact that
+ it should be atomic, so Relaxed MO should be sufficient. */
+ atomic_fetch_add_relaxed (&lm_cache->l_tls_dtor_count, 1);
+ __rtld_lock_unlock_recursive (GL(dl_load_lock));
+
+ new->map = lm_cache;
+
+ return 0;
+}
+
+/* Call the destructors. This is called either when a thread returns from the
+ initial function or when the process exits via the exit function. */
+void
+__call_tls_dtors (void)
+{
+ while (tls_dtor_list)
+ {
+ struct dtor_list *cur = tls_dtor_list;
+ dtor_func func = cur->func;
+#ifdef PTR_DEMANGLE
+ PTR_DEMANGLE (func);
+#endif
+
+ tls_dtor_list = tls_dtor_list->next;
+ func (cur->obj);
+
+ /* Ensure that the MAP dereference happens before
+ l_tls_dtor_count decrement. That way, we protect this access from a
+ potential DSO unload in _dl_close_worker, which happens when
+ l_tls_dtor_count is 0. See CONCURRENCY NOTES for more detail. */
+ atomic_fetch_add_release (&cur->map->l_tls_dtor_count, -1);
+ free (cur);
+ }
+}
+libc_hidden_def (__call_tls_dtors)
diff --git a/REORG.TODO/stdlib/dbl2mpn.c b/REORG.TODO/stdlib/dbl2mpn.c
new file mode 100644
index 0000000000..3872db5c41
--- /dev/null
+++ b/REORG.TODO/stdlib/dbl2mpn.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 1993-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+/* Convert a `double' to a multi-precision integer representing the
+ significand scaled up by the highest possible number of significant bits
+ of fraction (DBL_MANT_DIG), and an integral power of two (MPN frexp). */
+
+mp_size_t
+__mpn_extract_double (mp_ptr res_ptr, mp_size_t size,
+ int *expt, int *is_neg,
+ double value)
+{
+#error "__mpn_extract_double is not implemented for this floating point format"
+}
diff --git a/REORG.TODO/stdlib/div.c b/REORG.TODO/stdlib/div.c
new file mode 100644
index 0000000000..d525afa1ac
--- /dev/null
+++ b/REORG.TODO/stdlib/div.c
@@ -0,0 +1,62 @@
+/* Copyright (C) 1992-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/*
+ * Copyright (c) 1990 Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <stdlib.h>
+
+/* Return the `div_t' representation of NUMER over DENOM. */
+div_t
+div (int numer, int denom)
+{
+ div_t result;
+
+ result.quot = numer / denom;
+ result.rem = numer % denom;
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/divmod_1.c b/REORG.TODO/stdlib/divmod_1.c
new file mode 100644
index 0000000000..1ef15d6a1e
--- /dev/null
+++ b/REORG.TODO/stdlib/divmod_1.c
@@ -0,0 +1,199 @@
+/* mpn_divmod_1(quot_ptr, dividend_ptr, dividend_size, divisor_limb) --
+ Divide (DIVIDEND_PTR,,DIVIDEND_SIZE) by DIVISOR_LIMB.
+ Write DIVIDEND_SIZE limbs of quotient at QUOT_PTR.
+ Return the single-limb remainder.
+ There are no constraints on the value of the divisor.
+
+ QUOT_PTR and DIVIDEND_PTR might point to the same limb.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+#ifndef UMUL_TIME
+#define UMUL_TIME 1
+#endif
+
+#ifndef UDIV_TIME
+#define UDIV_TIME UMUL_TIME
+#endif
+
+/* FIXME: We should be using invert_limb (or invert_normalized_limb)
+ here (not udiv_qrnnd). */
+
+mp_limb_t
+mpn_divmod_1 (mp_ptr quot_ptr,
+ mp_srcptr dividend_ptr, mp_size_t dividend_size,
+ mp_limb_t divisor_limb)
+{
+ mp_size_t i;
+ mp_limb_t n1, n0, r;
+ mp_limb_t dummy __attribute__ ((unused));
+
+ /* ??? Should this be handled at all? Rely on callers? */
+ if (dividend_size == 0)
+ return 0;
+
+ /* If multiplication is much faster than division, and the
+ dividend is large, pre-invert the divisor, and use
+ only multiplications in the inner loop. */
+
+ /* This test should be read:
+ Does it ever help to use udiv_qrnnd_preinv?
+ && Does what we save compensate for the inversion overhead? */
+ if (UDIV_TIME > (2 * UMUL_TIME + 6)
+ && (UDIV_TIME - (2 * UMUL_TIME + 6)) * dividend_size > UDIV_TIME)
+ {
+ int normalization_steps;
+
+ count_leading_zeros (normalization_steps, divisor_limb);
+ if (normalization_steps != 0)
+ {
+ mp_limb_t divisor_limb_inverted;
+
+ divisor_limb <<= normalization_steps;
+
+ /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The
+ result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
+ most significant bit (with weight 2**N) implicit. */
+
+ /* Special case for DIVISOR_LIMB == 100...000. */
+ if (divisor_limb << 1 == 0)
+ divisor_limb_inverted = ~(mp_limb_t) 0;
+ else
+ udiv_qrnnd (divisor_limb_inverted, dummy,
+ -divisor_limb, 0, divisor_limb);
+
+ n1 = dividend_ptr[dividend_size - 1];
+ r = n1 >> (BITS_PER_MP_LIMB - normalization_steps);
+
+ /* Possible optimization:
+ if (r == 0
+ && divisor_limb > ((n1 << normalization_steps)
+ | (dividend_ptr[dividend_size - 2] >> ...)))
+ ...one division less... */
+
+ for (i = dividend_size - 2; i >= 0; i--)
+ {
+ n0 = dividend_ptr[i];
+ udiv_qrnnd_preinv (quot_ptr[i + 1], r, r,
+ ((n1 << normalization_steps)
+ | (n0 >> (BITS_PER_MP_LIMB - normalization_steps))),
+ divisor_limb, divisor_limb_inverted);
+ n1 = n0;
+ }
+ udiv_qrnnd_preinv (quot_ptr[0], r, r,
+ n1 << normalization_steps,
+ divisor_limb, divisor_limb_inverted);
+ return r >> normalization_steps;
+ }
+ else
+ {
+ mp_limb_t divisor_limb_inverted;
+
+ /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The
+ result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
+ most significant bit (with weight 2**N) implicit. */
+
+ /* Special case for DIVISOR_LIMB == 100...000. */
+ if (divisor_limb << 1 == 0)
+ divisor_limb_inverted = ~(mp_limb_t) 0;
+ else
+ udiv_qrnnd (divisor_limb_inverted, dummy,
+ -divisor_limb, 0, divisor_limb);
+
+ i = dividend_size - 1;
+ r = dividend_ptr[i];
+
+ if (r >= divisor_limb)
+ r = 0;
+ else
+ {
+ quot_ptr[i] = 0;
+ i--;
+ }
+
+ for (; i >= 0; i--)
+ {
+ n0 = dividend_ptr[i];
+ udiv_qrnnd_preinv (quot_ptr[i], r, r,
+ n0, divisor_limb, divisor_limb_inverted);
+ }
+ return r;
+ }
+ }
+ else
+ {
+ if (UDIV_NEEDS_NORMALIZATION)
+ {
+ int normalization_steps;
+
+ count_leading_zeros (normalization_steps, divisor_limb);
+ if (normalization_steps != 0)
+ {
+ divisor_limb <<= normalization_steps;
+
+ n1 = dividend_ptr[dividend_size - 1];
+ r = n1 >> (BITS_PER_MP_LIMB - normalization_steps);
+
+ /* Possible optimization:
+ if (r == 0
+ && divisor_limb > ((n1 << normalization_steps)
+ | (dividend_ptr[dividend_size - 2] >> ...)))
+ ...one division less... */
+
+ for (i = dividend_size - 2; i >= 0; i--)
+ {
+ n0 = dividend_ptr[i];
+ udiv_qrnnd (quot_ptr[i + 1], r, r,
+ ((n1 << normalization_steps)
+ | (n0 >> (BITS_PER_MP_LIMB - normalization_steps))),
+ divisor_limb);
+ n1 = n0;
+ }
+ udiv_qrnnd (quot_ptr[0], r, r,
+ n1 << normalization_steps,
+ divisor_limb);
+ return r >> normalization_steps;
+ }
+ }
+ /* No normalization needed, either because udiv_qrnnd doesn't require
+ it, or because DIVISOR_LIMB is already normalized. */
+
+ i = dividend_size - 1;
+ r = dividend_ptr[i];
+
+ if (r >= divisor_limb)
+ r = 0;
+ else
+ {
+ quot_ptr[i] = 0;
+ i--;
+ }
+
+ for (; i >= 0; i--)
+ {
+ n0 = dividend_ptr[i];
+ udiv_qrnnd (quot_ptr[i], r, r, n0, divisor_limb);
+ }
+ return r;
+ }
+}
diff --git a/REORG.TODO/stdlib/divrem.c b/REORG.TODO/stdlib/divrem.c
new file mode 100644
index 0000000000..984d945dee
--- /dev/null
+++ b/REORG.TODO/stdlib/divrem.c
@@ -0,0 +1,234 @@
+/* mpn_divrem -- Divide natural numbers, producing both remainder and
+ quotient.
+
+Copyright (C) 1993-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+/* Divide num (NP/NSIZE) by den (DP/DSIZE) and write
+ the NSIZE-DSIZE least significant quotient limbs at QP
+ and the DSIZE long remainder at NP. If QEXTRA_LIMBS is
+ non-zero, generate that many fraction bits and append them after the
+ other quotient limbs.
+ Return the most significant limb of the quotient, this is always 0 or 1.
+
+ Preconditions:
+ 0. NSIZE >= DSIZE.
+ 1. The most significant bit of the divisor must be set.
+ 2. QP must either not overlap with the input operands at all, or
+ QP + DSIZE >= NP must hold true. (This means that it's
+ possible to put the quotient in the high part of NUM, right after the
+ remainder in NUM.
+ 3. NSIZE >= DSIZE, even if QEXTRA_LIMBS is non-zero. */
+
+mp_limb_t
+mpn_divrem (mp_ptr qp, mp_size_t qextra_limbs,
+ mp_ptr np, mp_size_t nsize,
+ mp_srcptr dp, mp_size_t dsize)
+{
+ mp_limb_t most_significant_q_limb = 0;
+
+ switch (dsize)
+ {
+ case 0:
+ /* We are asked to divide by zero, so go ahead and do it! (To make
+ the compiler not remove this statement, return the value.) */
+ return 1 / dsize;
+
+ case 1:
+ {
+ mp_size_t i;
+ mp_limb_t n1;
+ mp_limb_t d;
+
+ d = dp[0];
+ n1 = np[nsize - 1];
+
+ if (n1 >= d)
+ {
+ n1 -= d;
+ most_significant_q_limb = 1;
+ }
+
+ qp += qextra_limbs;
+ for (i = nsize - 2; i >= 0; i--)
+ udiv_qrnnd (qp[i], n1, n1, np[i], d);
+ qp -= qextra_limbs;
+
+ for (i = qextra_limbs - 1; i >= 0; i--)
+ udiv_qrnnd (qp[i], n1, n1, 0, d);
+
+ np[0] = n1;
+ }
+ break;
+
+ case 2:
+ {
+ mp_size_t i;
+ mp_limb_t n1, n0, n2;
+ mp_limb_t d1, d0;
+
+ np += nsize - 2;
+ d1 = dp[1];
+ d0 = dp[0];
+ n1 = np[1];
+ n0 = np[0];
+
+ if (n1 >= d1 && (n1 > d1 || n0 >= d0))
+ {
+ sub_ddmmss (n1, n0, n1, n0, d1, d0);
+ most_significant_q_limb = 1;
+ }
+
+ for (i = qextra_limbs + nsize - 2 - 1; i >= 0; i--)
+ {
+ mp_limb_t q;
+ mp_limb_t r;
+
+ if (i >= qextra_limbs)
+ np--;
+ else
+ np[0] = 0;
+
+ if (n1 == d1)
+ {
+ /* Q should be either 111..111 or 111..110. Need special
+ treatment of this rare case as normal division would
+ give overflow. */
+ q = ~(mp_limb_t) 0;
+
+ r = n0 + d1;
+ if (r < d1) /* Carry in the addition? */
+ {
+ add_ssaaaa (n1, n0, r - d0, np[0], 0, d0);
+ qp[i] = q;
+ continue;
+ }
+ n1 = d0 - (d0 != 0);
+ n0 = -d0;
+ }
+ else
+ {
+ udiv_qrnnd (q, r, n1, n0, d1);
+ umul_ppmm (n1, n0, d0, q);
+ }
+
+ n2 = np[0];
+ q_test:
+ if (n1 > r || (n1 == r && n0 > n2))
+ {
+ /* The estimated Q was too large. */
+ q--;
+
+ sub_ddmmss (n1, n0, n1, n0, 0, d0);
+ r += d1;
+ if (r >= d1) /* If not carry, test Q again. */
+ goto q_test;
+ }
+
+ qp[i] = q;
+ sub_ddmmss (n1, n0, r, n2, n1, n0);
+ }
+ np[1] = n1;
+ np[0] = n0;
+ }
+ break;
+
+ default:
+ {
+ mp_size_t i;
+ mp_limb_t dX, d1, n0;
+
+ np += nsize - dsize;
+ dX = dp[dsize - 1];
+ d1 = dp[dsize - 2];
+ n0 = np[dsize - 1];
+
+ if (n0 >= dX)
+ {
+ if (n0 > dX || mpn_cmp (np, dp, dsize - 1) >= 0)
+ {
+ mpn_sub_n (np, np, dp, dsize);
+ n0 = np[dsize - 1];
+ most_significant_q_limb = 1;
+ }
+ }
+
+ for (i = qextra_limbs + nsize - dsize - 1; i >= 0; i--)
+ {
+ mp_limb_t q;
+ mp_limb_t n1, n2;
+ mp_limb_t cy_limb;
+
+ if (i >= qextra_limbs)
+ {
+ np--;
+ n2 = np[dsize];
+ }
+ else
+ {
+ n2 = np[dsize - 1];
+ MPN_COPY_DECR (np + 1, np, dsize);
+ np[0] = 0;
+ }
+
+ if (n0 == dX)
+ /* This might over-estimate q, but it's probably not worth
+ the extra code here to find out. */
+ q = ~(mp_limb_t) 0;
+ else
+ {
+ mp_limb_t r;
+
+ udiv_qrnnd (q, r, n0, np[dsize - 1], dX);
+ umul_ppmm (n1, n0, d1, q);
+
+ while (n1 > r || (n1 == r && n0 > np[dsize - 2]))
+ {
+ q--;
+ r += dX;
+ if (r < dX) /* I.e. "carry in previous addition?" */
+ break;
+ n1 -= n0 < d1;
+ n0 -= d1;
+ }
+ }
+
+ /* Possible optimization: We already have (q * n0) and (1 * n1)
+ after the calculation of q. Taking advantage of that, we
+ could make this loop make two iterations less. */
+
+ cy_limb = mpn_submul_1 (np, dp, dsize, q);
+
+ if (n2 != cy_limb)
+ {
+ mpn_add_n (np, np, dp, dsize);
+ q--;
+ }
+
+ qp[i] = q;
+ n0 = np[dsize - 1];
+ }
+ }
+ }
+
+ return most_significant_q_limb;
+}
diff --git a/REORG.TODO/stdlib/drand48-iter.c b/REORG.TODO/stdlib/drand48-iter.c
new file mode 100644
index 0000000000..f59c803138
--- /dev/null
+++ b/REORG.TODO/stdlib/drand48-iter.c
@@ -0,0 +1,56 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <stdint.h>
+#include <sys/types.h>
+
+/* Global state for non-reentrant functions. */
+struct drand48_data __libc_drand48_data;
+
+
+int
+__drand48_iterate (unsigned short int xsubi[3], struct drand48_data *buffer)
+{
+ uint64_t X;
+ uint64_t result;
+
+ /* Initialize buffer, if not yet done. */
+ if (__glibc_unlikely (!buffer->__init))
+ {
+ buffer->__a = 0x5deece66dull;
+ buffer->__c = 0xb;
+ buffer->__init = 1;
+ }
+
+ /* Do the real work. We choose a data type which contains at least
+ 48 bits. Because we compute the modulus it does not care how
+ many bits really are computed. */
+
+ X = (uint64_t) xsubi[2] << 32 | (uint32_t) xsubi[1] << 16 | xsubi[0];
+
+ result = X * buffer->__a + buffer->__c;
+
+ xsubi[0] = result & 0xffff;
+ xsubi[1] = (result >> 16) & 0xffff;
+ xsubi[2] = (result >> 32) & 0xffff;
+
+ return 0;
+}
diff --git a/REORG.TODO/stdlib/drand48.c b/REORG.TODO/stdlib/drand48.c
new file mode 100644
index 0000000000..b98759a32e
--- /dev/null
+++ b/REORG.TODO/stdlib/drand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+double
+drand48 (void)
+{
+ double result;
+
+ (void) __erand48_r (__libc_drand48_data.__x, &__libc_drand48_data, &result);
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/drand48_r.c b/REORG.TODO/stdlib/drand48_r.c
new file mode 100644
index 0000000000..801edf43a0
--- /dev/null
+++ b/REORG.TODO/stdlib/drand48_r.c
@@ -0,0 +1,27 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <math.h>
+#include <stdlib.h>
+
+int
+drand48_r (struct drand48_data *buffer, double *result)
+{
+ return __erand48_r (buffer->__x, buffer, result);
+}
diff --git a/REORG.TODO/stdlib/erand48.c b/REORG.TODO/stdlib/erand48.c
new file mode 100644
index 0000000000..b209189ba3
--- /dev/null
+++ b/REORG.TODO/stdlib/erand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+double
+erand48 (unsigned short int xsubi[3])
+{
+ double result;
+
+ (void) __erand48_r (xsubi, &__libc_drand48_data, &result);
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/erand48_r.c b/REORG.TODO/stdlib/erand48_r.c
new file mode 100644
index 0000000000..8f6d3fad61
--- /dev/null
+++ b/REORG.TODO/stdlib/erand48_r.c
@@ -0,0 +1,47 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <ieee754.h>
+#include <stdlib.h>
+#include <limits.h>
+
+
+int
+__erand48_r (unsigned short int xsubi[3], struct drand48_data *buffer,
+ double *result)
+{
+ union ieee754_double temp;
+
+ /* Compute next state. */
+ if (__drand48_iterate (xsubi, buffer) < 0)
+ return -1;
+
+ /* Construct a positive double with the 48 random bits distributed over
+ its fractional part so the resulting FP number is [0.0,1.0). */
+
+ temp.ieee.negative = 0;
+ temp.ieee.exponent = IEEE754_DOUBLE_BIAS;
+ temp.ieee.mantissa0 = (xsubi[2] << 4) | (xsubi[1] >> 12);
+ temp.ieee.mantissa1 = ((xsubi[1] & 0xfff) << 20) | (xsubi[0] << 4);
+
+ /* Please note the lower 4 bits of mantissa1 are always 0. */
+ *result = temp.d - 1.0;
+
+ return 0;
+}
+weak_alias (__erand48_r, erand48_r)
diff --git a/REORG.TODO/stdlib/errno.h b/REORG.TODO/stdlib/errno.h
new file mode 100644
index 0000000000..65f2f4570c
--- /dev/null
+++ b/REORG.TODO/stdlib/errno.h
@@ -0,0 +1,72 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/*
+ * ISO C99 Standard: 7.5 Errors <errno.h>
+ */
+
+#ifndef _ERRNO_H
+
+/* The includer defined __need_Emath if he wants only the definitions
+ of EDOM and ERANGE, and not everything else. */
+#ifndef __need_Emath
+# define _ERRNO_H 1
+# include <features.h>
+#endif
+
+__BEGIN_DECLS
+
+/* Get the error number constants from the system-specific file.
+ This file will test __need_Emath and _ERRNO_H. */
+#include <bits/errno.h>
+#undef __need_Emath
+
+#ifdef _ERRNO_H
+
+/* Declare the `errno' variable, unless it's defined as a macro by
+ bits/errno.h. This is the case in GNU, where it is a per-thread
+ variable. This redeclaration using the macro still works, but it
+ will be a function declaration without a prototype and may trigger
+ a -Wstrict-prototypes warning. */
+#ifndef errno
+extern int errno;
+#endif
+
+#ifdef __USE_GNU
+
+/* The full and simple forms of the name with which the program was
+ invoked. These variables are set up automatically at startup based on
+ the value of ARGV[0] (this works only if you use GNU ld). */
+extern char *program_invocation_name, *program_invocation_short_name;
+#endif /* __USE_GNU */
+#endif /* _ERRNO_H */
+
+__END_DECLS
+
+#endif /* _ERRNO_H */
+
+/* The Hurd <bits/errno.h> defines `error_t' as an enumerated type so
+ that printing `error_t' values in the debugger shows the names. We
+ might need this definition sometimes even if this file was included
+ before. */
+#if defined __USE_GNU || defined __need_error_t
+# ifndef __error_t_defined
+typedef int error_t;
+# define __error_t_defined 1
+# endif
+# undef __need_error_t
+#endif
diff --git a/REORG.TODO/stdlib/exit.c b/REORG.TODO/stdlib/exit.c
new file mode 100644
index 0000000000..c0b6d666c7
--- /dev/null
+++ b/REORG.TODO/stdlib/exit.c
@@ -0,0 +1,107 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sysdep.h>
+#include "exit.h"
+
+#include "set-hooks.h"
+DEFINE_HOOK (__libc_atexit, (void))
+
+
+/* Call all functions registered with `atexit' and `on_exit',
+ in the reverse of the order in which they were registered
+ perform stdio cleanup, and terminate program execution with STATUS. */
+void
+attribute_hidden
+__run_exit_handlers (int status, struct exit_function_list **listp,
+ bool run_list_atexit, bool run_dtors)
+{
+ /* First, call the TLS destructors. */
+#ifndef SHARED
+ if (&__call_tls_dtors != NULL)
+#endif
+ if (run_dtors)
+ __call_tls_dtors ();
+
+ /* We do it this way to handle recursive calls to exit () made by
+ the functions registered with `atexit' and `on_exit'. We call
+ everyone on the list and use the status value in the last
+ exit (). */
+ while (*listp != NULL)
+ {
+ struct exit_function_list *cur = *listp;
+
+ while (cur->idx > 0)
+ {
+ const struct exit_function *const f =
+ &cur->fns[--cur->idx];
+ switch (f->flavor)
+ {
+ void (*atfct) (void);
+ void (*onfct) (int status, void *arg);
+ void (*cxafct) (void *arg, int status);
+
+ case ef_free:
+ case ef_us:
+ break;
+ case ef_on:
+ onfct = f->func.on.fn;
+#ifdef PTR_DEMANGLE
+ PTR_DEMANGLE (onfct);
+#endif
+ onfct (status, f->func.on.arg);
+ break;
+ case ef_at:
+ atfct = f->func.at;
+#ifdef PTR_DEMANGLE
+ PTR_DEMANGLE (atfct);
+#endif
+ atfct ();
+ break;
+ case ef_cxa:
+ cxafct = f->func.cxa.fn;
+#ifdef PTR_DEMANGLE
+ PTR_DEMANGLE (cxafct);
+#endif
+ cxafct (f->func.cxa.arg, status);
+ break;
+ }
+ }
+
+ *listp = cur->next;
+ if (*listp != NULL)
+ /* Don't free the last element in the chain, this is the statically
+ allocate element. */
+ free (cur);
+ }
+
+ if (run_list_atexit)
+ RUN_HOOK (__libc_atexit, ());
+
+ _exit (status);
+}
+
+
+void
+exit (int status)
+{
+ __run_exit_handlers (status, &__exit_funcs, true, true);
+}
+libc_hidden_def (exit)
diff --git a/REORG.TODO/stdlib/exit.h b/REORG.TODO/stdlib/exit.h
new file mode 100644
index 0000000000..7f2e679246
--- /dev/null
+++ b/REORG.TODO/stdlib/exit.h
@@ -0,0 +1,77 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _EXIT_H
+#define _EXIT_H 1
+
+#include <stdbool.h>
+#include <stdint.h>
+
+enum
+{
+ ef_free, /* `ef_free' MUST be zero! */
+ ef_us,
+ ef_on,
+ ef_at,
+ ef_cxa
+};
+
+struct exit_function
+ {
+ /* `flavour' should be of type of the `enum' above but since we need
+ this element in an atomic operation we have to use `long int'. */
+ long int flavor;
+ union
+ {
+ void (*at) (void);
+ struct
+ {
+ void (*fn) (int status, void *arg);
+ void *arg;
+ } on;
+ struct
+ {
+ void (*fn) (void *arg, int status);
+ void *arg;
+ void *dso_handle;
+ } cxa;
+ } func;
+ };
+struct exit_function_list
+ {
+ struct exit_function_list *next;
+ size_t idx;
+ struct exit_function fns[32];
+ };
+extern struct exit_function_list *__exit_funcs attribute_hidden;
+extern struct exit_function_list *__quick_exit_funcs attribute_hidden;
+
+extern struct exit_function *__new_exitfn (struct exit_function_list **listp);
+extern uint64_t __new_exitfn_called attribute_hidden;
+
+extern void __run_exit_handlers (int status,
+ struct exit_function_list **listp,
+ bool run_list_atexit, bool run_dtors)
+ attribute_hidden __attribute__ ((__noreturn__));
+
+extern int __internal_atexit (void (*func) (void *), void *arg, void *d,
+ struct exit_function_list **listp)
+ attribute_hidden;
+extern int __cxa_at_quick_exit (void (*func) (void *), void *d);
+
+
+#endif /* exit.h */
diff --git a/REORG.TODO/stdlib/fmtmsg.c b/REORG.TODO/stdlib/fmtmsg.c
new file mode 100644
index 0000000000..ac0c3aa28a
--- /dev/null
+++ b/REORG.TODO/stdlib/fmtmsg.c
@@ -0,0 +1,386 @@
+/* Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <fmtmsg.h>
+#include <libc-lock.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/syslog.h>
+#include <wchar.h>
+
+
+/* We have global data, protect the modification. */
+__libc_lock_define_initialized (static, lock)
+
+
+enum
+{
+ label_mask = 0x01,
+ severity_mask = 0x02,
+ text_mask = 0x04,
+ action_mask = 0x08,
+ tag_mask = 0x10,
+ all_mask = label_mask | severity_mask | text_mask | action_mask | tag_mask
+};
+
+static const struct
+{
+ uint32_t len;
+ /* Adjust the size if new elements are added. */
+ const char name[12];
+} keywords[] =
+ {
+ { 5, "label" },
+ { 8, "severity" },
+ { 4, "text" },
+ { 6, "action"},
+ { 3, "tag" }
+ };
+#define NKEYWORDS (sizeof( keywords) / sizeof (keywords[0]))
+
+
+struct severity_info
+{
+ int severity;
+ const char *string;
+ struct severity_info *next;
+};
+
+
+/* List of known severities. */
+static const struct severity_info nosev =
+{
+ MM_NOSEV, "", NULL
+};
+static const struct severity_info haltsev =
+{
+ MM_HALT, "HALT", (struct severity_info *) &nosev
+};
+static const struct severity_info errorsev =
+{
+ MM_ERROR, "ERROR", (struct severity_info *) &haltsev
+};
+static const struct severity_info warningsev =
+{
+ MM_WARNING, "WARNING", (struct severity_info *) &errorsev
+};
+static const struct severity_info infosev =
+{
+ MM_INFO, "INFO", (struct severity_info *) &warningsev
+};
+
+/* Start of the list. */
+static struct severity_info *severity_list = (struct severity_info *) &infosev;
+
+/* Mask of values we will print. */
+static int print;
+
+/* Prototypes for local functions. */
+static void init (void);
+static int internal_addseverity (int severity, const char *string)
+ internal_function;
+
+
+int
+fmtmsg (long int classification, const char *label, int severity,
+ const char *text, const char *action, const char *tag)
+{
+ __libc_once_define (static, once);
+ struct severity_info *severity_rec;
+
+ /* Make sure everything is initialized. */
+ __libc_once (once, init);
+
+ /* Start the real work. First check whether the input is ok. */
+ if (label != MM_NULLLBL)
+ {
+ /* Must be two fields, separated by a colon. */
+ const char *cp = strchr (label, ':');
+ if (cp == NULL)
+ return MM_NOTOK;
+
+ /* The first field must not contain more than 10 bytes. */
+ if (cp - label > 10
+ /* The second field must not have more than 14 bytes. */
+ || strlen (cp + 1) > 14)
+ return MM_NOTOK;
+ }
+
+#ifdef __libc_ptf_call
+ /* We do not want this call to be cut short by a thread
+ cancellation. Therefore disable cancellation for now. */
+ int state = PTHREAD_CANCEL_ENABLE;
+ __libc_ptf_call (__pthread_setcancelstate,
+ (PTHREAD_CANCEL_DISABLE, &state), 0);
+#endif
+
+ __libc_lock_lock (lock);
+
+ for (severity_rec = severity_list; severity_rec != NULL;
+ severity_rec = severity_rec->next)
+ if (severity == severity_rec->severity)
+ /* Bingo. */
+ break;
+
+ /* If we don't know anything about the severity level return an error. */
+ int result = MM_NOTOK;
+ if (severity_rec != NULL)
+ {
+ result = MM_OK;
+
+ /* Now we can print. */
+ if (classification & MM_PRINT)
+ {
+ int do_label = (print & label_mask) && label != MM_NULLLBL;
+ int do_severity = (print & severity_mask) && severity != MM_NULLSEV;
+ int do_text = (print & text_mask) && text != MM_NULLTXT;
+ int do_action = (print & action_mask) && action != MM_NULLACT;
+ int do_tag = (print & tag_mask) && tag != MM_NULLTAG;
+ int need_colon = (do_label
+ && (do_severity | do_text | do_action | do_tag));
+
+ if (__fxprintf (stderr, "%s%s%s%s%s%s%s%s%s%s\n",
+ do_label ? label : "",
+ need_colon ? ": " : "",
+ do_severity ? severity_rec->string : "",
+ do_severity && (do_text | do_action | do_tag)
+ ? ": " : "",
+ do_text ? text : "",
+ do_text && (do_action | do_tag) ? "\n" : "",
+ do_action ? "TO FIX: " : "",
+ do_action ? action : "",
+ do_action && do_tag ? " " : "",
+ do_tag ? tag : "") < 0)
+ /* Oh, oh. An error occurred during the output. */
+ result = MM_NOMSG;
+ }
+
+ if (classification & MM_CONSOLE)
+ {
+ int do_label = label != MM_NULLLBL;
+ int do_severity = severity != MM_NULLSEV;
+ int do_text = text != MM_NULLTXT;
+ int do_action = action != MM_NULLACT;
+ int do_tag = tag != MM_NULLTAG;
+ int need_colon = (do_label
+ && (do_severity | do_text | do_action | do_tag));
+
+ syslog (LOG_ERR, "%s%s%s%s%s%s%s%s%s%s\n",
+ do_label ? label : "",
+ need_colon ? ": " : "",
+ do_severity ? severity_rec->string : "",
+ do_severity && (do_text | do_action | do_tag) ? ": " : "",
+ do_text ? text : "",
+ do_text && (do_action | do_tag) ? "\n" : "",
+ do_action ? "TO FIX: " : "",
+ do_action ? action : "",
+ do_action && do_tag ? " " : "",
+ do_tag ? tag : "");
+ }
+ }
+
+ __libc_lock_unlock (lock);
+
+#ifdef __libc_ptf_call
+ __libc_ptf_call (__pthread_setcancelstate, (state, NULL), 0);
+#endif
+
+ return result;
+}
+
+
+/* Initialize from environment variable content. */
+static void
+init (void)
+{
+ const char *msgverb_var = getenv ("MSGVERB");
+ const char *sevlevel_var = getenv ("SEV_LEVEL");
+
+ if (msgverb_var != NULL && msgverb_var[0] != '\0')
+ {
+ /* Using this extra variable allows us to work without locking. */
+ do
+ {
+ size_t cnt;
+
+ for (cnt = 0; cnt < NKEYWORDS; ++cnt)
+ if (memcmp (msgverb_var,
+ keywords[cnt].name, keywords[cnt].len) == 0
+ && (msgverb_var[keywords[cnt].len] == ':'
+ || msgverb_var[keywords[cnt].len] == '\0'))
+ break;
+
+ if (cnt < NKEYWORDS)
+ {
+ print |= 1 << cnt;
+
+ msgverb_var += keywords[cnt].len;
+ if (msgverb_var[0] == ':')
+ ++msgverb_var;
+ }
+ else
+ {
+ /* We found an illegal keyword in the environment
+ variable. The specifications say that we print all
+ fields. */
+ print = all_mask;
+ break;
+ }
+ }
+ while (msgverb_var[0] != '\0');
+ }
+ else
+ print = all_mask;
+
+
+ if (sevlevel_var != NULL)
+ {
+ __libc_lock_lock (lock);
+
+ while (sevlevel_var[0] != '\0')
+ {
+ const char *end = __strchrnul (sevlevel_var, ':');
+ int level;
+
+ /* First field: keyword. This is not used here but it must be
+ present. */
+ while (sevlevel_var < end)
+ if (*sevlevel_var++ == ',')
+ break;
+
+ if (sevlevel_var < end)
+ {
+ /* Second field: severity level, a number. */
+ char *cp;
+
+ level = strtol (sevlevel_var, &cp, 0);
+ if (cp != sevlevel_var && cp < end && *cp++ == ','
+ && level > MM_INFO)
+ {
+ const char *new_string;
+
+ new_string = __strndup (cp, end - cp);
+
+ if (new_string != NULL
+ && (internal_addseverity (level, new_string)
+ != MM_OK))
+ free ((char *) new_string);
+ }
+ }
+
+ sevlevel_var = end + (*end == ':' ? 1 : 0);
+ }
+
+ __libc_lock_unlock (lock);
+ }
+}
+
+
+/* Add the new entry to the list. */
+static int
+internal_function
+internal_addseverity (int severity, const char *string)
+{
+ struct severity_info *runp, *lastp;
+ int result = MM_OK;
+
+ /* First see if there is already a record for the severity level. */
+ for (runp = severity_list, lastp = NULL; runp != NULL; runp = runp->next)
+ if (runp->severity == severity)
+ break;
+ else
+ lastp = runp;
+
+ if (runp != NULL)
+ {
+ if (string != NULL)
+ /* Change the string. */
+ runp->string = string;
+ else
+ {
+ /* Remove the severity class. */
+ if (lastp == NULL)
+ severity_list = runp->next;
+ else
+ lastp->next = runp->next;
+
+ free (runp);
+ }
+ }
+ else if (string != NULL)
+ {
+ runp = malloc (sizeof (*runp));
+ if (runp == NULL)
+ result = MM_NOTOK;
+ else
+ {
+ runp->severity = severity;
+ runp->next = severity_list;
+ runp->string = string;
+ severity_list = runp;
+ }
+ }
+ else
+ /* We tried to remove a non-existing severity class. */
+ result = MM_NOTOK;
+
+ return result;
+}
+
+
+/* Add new severity level or remove old one. */
+int
+__addseverity (int severity, const char *string)
+{
+ int result;
+
+ /* Prevent illegal SEVERITY values. */
+ if (severity <= MM_INFO)
+ return MM_NOTOK;
+
+ /* Protect the global data. */
+ __libc_lock_lock (lock);
+
+ /* Do the real work. */
+ result = internal_addseverity (severity, string);
+
+ /* Release the lock. */
+ __libc_lock_unlock (lock);
+
+ return result;
+}
+weak_alias (__addseverity, addseverity)
+
+
+libc_freeres_fn (free_mem)
+{
+ struct severity_info *runp = severity_list;
+
+ while (runp != NULL)
+ if (runp->severity > MM_INFO)
+ {
+ /* This is data we have to release. */
+ struct severity_info *here = runp;
+ runp = runp->next;
+ free (here);
+ }
+ else
+ runp = runp->next;
+}
diff --git a/REORG.TODO/stdlib/fmtmsg.h b/REORG.TODO/stdlib/fmtmsg.h
new file mode 100644
index 0000000000..0b9069ca10
--- /dev/null
+++ b/REORG.TODO/stdlib/fmtmsg.h
@@ -0,0 +1,105 @@
+/* Message display handling.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef __FMTMSG_H
+#define __FMTMSG_H 1
+
+#include <features.h>
+
+
+__BEGIN_DECLS
+
+/* Values to control `fmtmsg' function. */
+enum
+{
+ MM_HARD = 0x001, /* Source of the condition is hardware. */
+#define MM_HARD MM_HARD
+ MM_SOFT = 0x002, /* Source of the condition is software. */
+#define MM_SOFT MM_SOFT
+ MM_FIRM = 0x004, /* Source of the condition is firmware. */
+#define MM_FIRM MM_FIRM
+ MM_APPL = 0x008, /* Condition detected by application. */
+#define MM_APPL MM_APPL
+ MM_UTIL = 0x010, /* Condition detected by utility. */
+#define MM_UTIL MM_UTIL
+ MM_OPSYS = 0x020, /* Condition detected by operating system. */
+#define MM_OPSYS MM_OPSYS
+ MM_RECOVER = 0x040, /* Recoverable error. */
+#define MM_RECOVER MM_RECOVER
+ MM_NRECOV = 0x080, /* Non-recoverable error. */
+#define MM_NRECOV MM_NRECOV
+ MM_PRINT = 0x100, /* Display message in standard error. */
+#define MM_PRINT MM_PRINT
+ MM_CONSOLE = 0x200 /* Display message on system console. */
+#define MM_CONSOLE MM_CONSOLE
+};
+
+/* Values to be for SEVERITY parameter of `fmtmsg'. */
+enum
+{
+ MM_NOSEV = 0, /* No severity level provided for the message. */
+#define MM_NOSEV MM_NOSEV
+ MM_HALT, /* Error causing application to halt. */
+#define MM_HALT MM_HALT
+ MM_ERROR, /* Application has encountered a non-fatal fault. */
+#define MM_ERROR MM_ERROR
+ MM_WARNING, /* Application has detected unusual non-error
+ condition. */
+#define MM_WARNING MM_WARNING
+ MM_INFO /* Informative message. */
+#define MM_INFO MM_INFO
+};
+
+
+/* Macros which can be used as null values for the arguments of `fmtmsg'. */
+#define MM_NULLLBL ((char *) 0)
+#define MM_NULLSEV 0
+#define MM_NULLMC ((long int) 0)
+#define MM_NULLTXT ((char *) 0)
+#define MM_NULLACT ((char *) 0)
+#define MM_NULLTAG ((char *) 0)
+
+
+/* Possible return values of `fmtmsg'. */
+enum
+{
+ MM_NOTOK = -1,
+#define MM_NOTOK MM_NOTOK
+ MM_OK = 0,
+#define MM_OK MM_OK
+ MM_NOMSG = 1,
+#define MM_NOMSG MM_NOMSG
+ MM_NOCON = 4
+#define MM_NOCON MM_NOCON
+};
+
+
+/* Print message with given CLASSIFICATION, LABEL, SEVERITY, TEXT, ACTION
+ and TAG to console or standard error. */
+extern int fmtmsg (long int __classification, const char *__label,
+ int __severity, const char *__text,
+ const char *__action, const char *__tag);
+
+#ifdef __USE_MISC
+/* Add or remove severity level. */
+extern int addseverity (int __severity, const char *__string) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* fmtmsg.h */
diff --git a/REORG.TODO/stdlib/fpioconst.c b/REORG.TODO/stdlib/fpioconst.c
new file mode 100644
index 0000000000..a0563b9676
--- /dev/null
+++ b/REORG.TODO/stdlib/fpioconst.c
@@ -0,0 +1,1329 @@
+/* Table of MP integer constants 10^(2^i), used for floating point <-> decimal.
+ Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "fpioconst.h"
+#include <gmp-mparam.h> /* This defines BITS_PER_MP_LIMB. */
+
+/* First page : 32-bit limbs
+ Second page : 64-bit limbs
+ Last page : table of pointers
+
+ The tables (apart from internal #if conditions) may be generated
+ with gen-fpioconst.c.
+ */
+
+#if BITS_PER_MP_LIMB == 32
+
+/* Table with constants of 10^(2^i), i=0..12 for 32-bit limbs. */
+
+const mp_limb_t __tens[] =
+{
+#define TENS_P0_IDX 0
+#define TENS_P0_SIZE 3
+ [TENS_P0_IDX] = 0x00000000, 0x00000000, 0x0000000a,
+
+#define TENS_P1_IDX (TENS_P0_IDX + TENS_P0_SIZE)
+#define TENS_P1_SIZE 3
+ [TENS_P1_IDX] = 0x00000000, 0x00000000, 0x00000064,
+
+#define TENS_P2_IDX (TENS_P1_IDX + TENS_P1_SIZE)
+#define TENS_P2_SIZE 3
+ [TENS_P2_IDX] = 0x00000000, 0x00000000, 0x00002710,
+
+#define TENS_P3_IDX (TENS_P2_IDX + TENS_P2_SIZE)
+#define TENS_P3_SIZE 3
+ [TENS_P3_IDX] = 0x00000000, 0x00000000, 0x05f5e100,
+
+#define TENS_P4_IDX (TENS_P3_IDX + TENS_P3_SIZE)
+#define TENS_P4_SIZE 4
+ [TENS_P4_IDX] = 0x00000000, 0x00000000, 0x6fc10000, 0x002386f2,
+
+#define TENS_P5_IDX (TENS_P4_IDX + TENS_P4_SIZE)
+#define TENS_P5_SIZE 6
+ [TENS_P5_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x85acef81, 0x2d6d415b,
+ 0x000004ee,
+
+#define TENS_P6_IDX (TENS_P5_IDX + TENS_P5_SIZE)
+#define TENS_P6_SIZE 9
+ [TENS_P6_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xbf6a1f01,
+ 0x6e38ed64, 0xdaa797ed, 0xe93ff9f4, 0x00184f03,
+
+#define TENS_P7_IDX (TENS_P6_IDX + TENS_P6_SIZE)
+#define TENS_P7_SIZE 16
+ [TENS_P7_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x2e953e01, 0x03df9909, 0x0f1538fd, 0x2374e42f, 0xd3cff5ec,
+ 0xc404dc08, 0xbccdb0da, 0xa6337f19, 0xe91f2603, 0x0000024e,
+
+#define TENS_P8_IDX (TENS_P7_IDX + TENS_P7_SIZE)
+#define TENS_P8_SIZE 29
+ [TENS_P8_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x982e7c01,
+ 0xbed3875b, 0xd8d99f72, 0x12152f87, 0x6bde50c6, 0xcf4a6e70, 0xd595d80f,
+ 0x26b2716e, 0xadc666b0, 0x1d153624, 0x3c42d35a, 0x63ff540e, 0xcc5573c0,
+ 0x65f9ef17, 0x55bc28f2, 0x80dcc7f7, 0xf46eeddc, 0x5fdcefce, 0x000553f7,
+
+#define TENS_P9_IDX (TENS_P8_IDX + TENS_P8_SIZE)
+#define TENS_P9_SIZE 56
+ [TENS_P9_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0xfc6cf801, 0x77f27267, 0x8f9546dc, 0x5d96976f, 0xb83a8a97,
+ 0xc31e1ad9, 0x46c40513, 0x94e65747, 0xc88976c1, 0x4475b579, 0x28f8733b,
+ 0xaa1da1bf, 0x703ed321, 0x1e25cfea, 0xb21a2f22, 0xbc51fb2e, 0x96e14f5d,
+ 0xbfa3edac, 0x329c57ae, 0xe7fc7153, 0xc3fc0695, 0x85a91924, 0xf95f635e,
+ 0xb2908ee0, 0x93abade4, 0x1366732a, 0x9449775c, 0x69be5b0e, 0x7343afac,
+ 0xb099bc81, 0x45a71d46, 0xa2699748, 0x8cb07303, 0x8a0b1f13, 0x8cab8a97,
+ 0xc1d238d9, 0x633415d4, 0x0000001c,
+
+#define TENS_P10_IDX (TENS_P9_IDX + TENS_P9_SIZE)
+#define TENS_P10_SIZE 109
+ [TENS_P10_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2919f001,
+ 0xf55b2b72, 0x6e7c215b, 0x1ec29f86, 0x991c4e87, 0x15c51a88, 0x140ac535,
+ 0x4c7d1e1a, 0xcc2cd819, 0x0ed1440e, 0x896634ee, 0x7de16cfb, 0x1e43f61f,
+ 0x9fce837d, 0x231d2b9c, 0x233e55c7, 0x65dc60d7, 0xf451218b, 0x1c5cd134,
+ 0xc9635986, 0x922bbb9f, 0xa7e89431, 0x9f9f2a07, 0x62be695a, 0x8e1042c4,
+ 0x045b7a74, 0x1abe1de3, 0x8ad822a5, 0xba34c411, 0xd814b505, 0xbf3fdeb3,
+ 0x8fc51a16, 0xb1b896bc, 0xf56deeec, 0x31fb6bfd, 0xb6f4654b, 0x101a3616,
+ 0x6b7595fb, 0xdc1a47fe, 0x80d98089, 0x80bda5a5, 0x9a202882, 0x31eb0f66,
+ 0xfc8f1f90, 0x976a3310, 0xe26a7b7e, 0xdf68368a, 0x3ce3a0b8, 0x8e4262ce,
+ 0x75a351a2, 0x6cb0b6c9, 0x44597583, 0x31b5653f, 0xc356e38a, 0x35faaba6,
+ 0x0190fba0, 0x9fc4ed52, 0x88bc491b, 0x1640114a, 0x005b8041, 0xf4f3235e,
+ 0x1e8d4649, 0x36a8de06, 0x73c55349, 0xa7e6bd2a, 0xc1a6970c, 0x47187094,
+ 0xd2db49ef, 0x926c3f5b, 0xae6209d4, 0x2d433949, 0x34f4a3c6, 0xd4305d94,
+ 0xd9d61a05, 0x00000325,
+
+#if FPIOCONST_HAVE_EXTENDED_RANGE
+# define TENS_P11_IDX (TENS_P10_IDX + TENS_P10_SIZE)
+# define TENS_P11_SIZE 215
+ [TENS_P11_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x1333e001, 0xe3096865, 0xb27d4d3f, 0x49e28dcf, 0xec2e4721,
+ 0xee87e354, 0xb6067584, 0x368b8abb, 0xa5e5a191, 0x2ed56d55, 0xfd827773,
+ 0xea50d142, 0x51b78db2, 0x98342c9e, 0xc850dabc, 0x866ed6f1, 0x19342c12,
+ 0x92794987, 0xd2f869c2, 0x66912e4a, 0x71c7fd8f, 0x57a7842d, 0x235552eb,
+ 0xfb7fedcc, 0xf3861ce0, 0x38209ce1, 0x9713b449, 0x34c10134, 0x8c6c54de,
+ 0xa7a8289c, 0x2dbb6643, 0xe3cb64f3, 0x8074ff01, 0xe3892ee9, 0x10c17f94,
+ 0xa8f16f92, 0xa8281ed6, 0x967abbb3, 0x5a151440, 0x9952fbed, 0x13b41e44,
+ 0xafe609c3, 0xa2bca416, 0xf111821f, 0xfb1264b4, 0x91bac974, 0xd6c7d6ab,
+ 0x8e48ff35, 0x4419bd43, 0xc4a65665, 0x685e5510, 0x33554c36, 0xab498697,
+ 0x0dbd21fe, 0x3cfe491d, 0x982da466, 0xcbea4ca7, 0x9e110c7b, 0x79c56b8a,
+ 0x5fc5a047, 0x84d80e2e, 0x1aa9f444, 0x730f203c, 0x6a57b1ab, 0xd752f7a6,
+ 0x87a7dc62, 0x944545ff, 0x40660460, 0x77c1a42f, 0xc9ac375d, 0xe866d7ef,
+ 0x744695f0, 0x81428c85, 0xa1fc6b96, 0xd7917c7b, 0x7bf03c19, 0x5b33eb41,
+ 0x5715f791, 0x8f6cae5f, 0xdb0708fd, 0xb125ac8e, 0x785ce6b7, 0x56c6815b,
+ 0x6f46eadb, 0x4eeebeee, 0x195355d8, 0xa244de3c, 0x9d7389c0, 0x53761abd,
+ 0xcf99d019, 0xde9ec24b, 0x0d76ce39, 0x70beb181, 0x2e55ecee, 0xd5f86079,
+ 0xf56d9d4b, 0xfb8886fb, 0x13ef5a83, 0x408f43c5, 0x3f3389a4, 0xfad37943,
+ 0x58ccf45c, 0xf82df846, 0x415c7f3e, 0x2915e818, 0x8b3d5cf4, 0x6a445f27,
+ 0xf8dbb57a, 0xca8f0070, 0x8ad803ec, 0xb2e87c34, 0x038f9245, 0xbedd8a6c,
+ 0xc7c9dee0, 0x0eac7d56, 0x2ad3fa14, 0xe0de0840, 0xf775677c, 0xf1bd0ad5,
+ 0x92be221e, 0x87fa1fb9, 0xce9d04a4, 0xd2c36fa9, 0x3f6f7024, 0xb028af62,
+ 0x907855ee, 0xd83e49d6, 0x4efac5dc, 0xe7151aab, 0x77cd8c6b, 0x0a753b7d,
+ 0x0af908b4, 0x8c983623, 0xe50f3027, 0x94222771, 0x1d08e2d6, 0xf7e928e6,
+ 0xf2ee5ca6, 0x1b61b93c, 0x11eb962b, 0x9648b21c, 0xce2bcba1, 0x34f77154,
+ 0x7bbebe30, 0xe526a319, 0x8ce329ac, 0xde4a74d2, 0xb5dc53d5, 0x0009e8b3,
+
+# define TENS_P12_IDX (TENS_P11_IDX + TENS_P11_SIZE)
+# define TENS_P12_SIZE 428
+ [TENS_P12_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2a67c001,
+ 0xd4724e8d, 0x8efe7ae7, 0xf89a1e90, 0xef084117, 0x54e05154, 0x13b1bb51,
+ 0x506be829, 0xfb29b172, 0xe599574e, 0xf0da6146, 0x806c0ed3, 0xb86ae5be,
+ 0x45155e93, 0xc0591cc2, 0x7e1e7c34, 0x7c4823da, 0x1d1f4cce, 0x9b8ba1e8,
+ 0xd6bfdf75, 0xe341be10, 0xc2dfae78, 0x016b67b2, 0x0f237f1a, 0x3dbeabcd,
+ 0xaf6a2574, 0xcab3e6d7, 0x142e0e80, 0x61959127, 0x2c234811, 0x87009701,
+ 0xcb4bf982, 0xf8169c84, 0x88052f8c, 0x68dde6d4, 0xbc131761, 0xff0b0905,
+ 0x54ab9c41, 0x7613b224, 0x1a1c304e, 0x3bfe167b, 0x441c2d47, 0x4f6cea9c,
+ 0x78f06181, 0xeb659fb8, 0x30c7ae41, 0x947e0d0e, 0xa1ebcad7, 0xd97d9556,
+ 0x2130504d, 0x1a8309cb, 0xf2acd507, 0x3f8ec72a, 0xfd82373a, 0x95a842bc,
+ 0x280f4d32, 0xf3618ac0, 0x811a4f04, 0x6dc3a5b4, 0xd3967a1b, 0x15b8c898,
+ 0xdcfe388f, 0x454eb2a0, 0x8738b909, 0x10c4e996, 0x2bd9cc11, 0x3297cd0c,
+ 0x655fec30, 0xae0725b1, 0xf4090ee8, 0x037d19ee, 0x398c6fed, 0x3b9af26b,
+ 0xc994a450, 0xb5341743, 0x75a697b2, 0xac50b9c1, 0x3ccb5b92, 0xffe06205,
+ 0xa8329761, 0xdfea5242, 0xeb83cadb, 0xe79dadf7, 0x3c20ee69, 0x1e0a6817,
+ 0x7021b97a, 0x743074fa, 0x176ca776, 0x77fb8af6, 0xeca19beb, 0x92baf1de,
+ 0xaf63b712, 0xde35c88b, 0xa4eb8f8c, 0xe137d5e9, 0x40b464a0, 0x87d1cde8,
+ 0x42923bbd, 0xcd8f62ff, 0x2e2690f3, 0x095edc16, 0x59c89f1b, 0x1fa8fd5d,
+ 0x5138753d, 0x390a2b29, 0x80152f18, 0x2dd8d925, 0xf984d83e, 0x7a872e74,
+ 0xc19e1faf, 0xed4d542d, 0xecf9b5d0, 0x9462ea75, 0xc53c0adf, 0x0caea134,
+ 0x37a2d439, 0xc8fa2e8a, 0x2181327e, 0x6e7bb827, 0x2d240820, 0x50be10e0,
+ 0x5893d4b8, 0xab312bb9, 0x1f2b2322, 0x440b3f25, 0xbf627ede, 0x72dac789,
+ 0xb608b895, 0x78787e2a, 0x86deb3f0, 0x6fee7aab, 0xbb9373f4, 0x27ecf57b,
+ 0xf7d8b57e, 0xfca26a9f, 0x3d04e8d2, 0xc9df13cb, 0x3172826a, 0xcd9e8d7c,
+ 0xa8fcd8e0, 0xb2c39497, 0x307641d9, 0x1cc939c1, 0x2608c4cf, 0xb6d1c7bf,
+ 0x3d326a7e, 0xeeaf19e6, 0x8e13e25f, 0xee63302b, 0x2dfe6d97, 0x25971d58,
+ 0xe41d3cc4, 0x0a80627c, 0xab8db59a, 0x9eea37c8, 0xe90afb77, 0x90ca19cf,
+ 0x9ee3352c, 0x3613c850, 0xfe78d682, 0x788f6e50, 0x5b060904, 0xb71bd1a4,
+ 0x3fecb534, 0xb32c450c, 0x20c33857, 0xa6e9cfda, 0x0239f4ce, 0x48497187,
+ 0xa19adb95, 0xb492ed8a, 0x95aca6a8, 0x4dcd6cd9, 0xcf1b2350, 0xfbe8b12a,
+ 0x1a67778c, 0x38eb3acc, 0xc32da383, 0xfb126ab1, 0xa03f40a8, 0xed5bf546,
+ 0xe9ce4724, 0x4c4a74fd, 0x73a130d8, 0xd9960e2d, 0xa2ebd6c1, 0x94ab6feb,
+ 0x6f233b7c, 0x49126080, 0x8e7b9a73, 0x4b8c9091, 0xd298f999, 0x35e836b5,
+ 0xa96ddeff, 0x96119b31, 0x6b0dd9bc, 0xc6cc3f8d, 0x282566fb, 0x72b882e7,
+ 0xd6769f3b, 0xa674343d, 0x00fc509b, 0xdcbf7789, 0xd6266a3f, 0xae9641fd,
+ 0x4e89541b, 0x11953407, 0x53400d03, 0x8e0dd75a, 0xe5b53345, 0x108f19ad,
+ 0x108b89bc, 0x41a4c954, 0xe03b2b63, 0x437b3d7f, 0x97aced8e, 0xcbd66670,
+ 0x2c5508c2, 0x650ebc69, 0x5c4f2ef0, 0x904ff6bf, 0x9985a2df, 0x9faddd9e,
+ 0x5ed8d239, 0x25585832, 0xe3e51cb9, 0x0ff4f1d4, 0x56c02d9a, 0x8c4ef804,
+ 0xc1a08a13, 0x13fd01c8, 0xe6d27671, 0xa7c234f4, 0x9d0176cc, 0xd0d73df2,
+ 0x4d8bfa89, 0x544f10cd, 0x2b17e0b2, 0xb70a5c7d, 0xfd86fe49, 0xdf373f41,
+ 0x214495bb, 0x84e857fd, 0x00d313d5, 0x0496fcbe, 0xa4ba4744, 0xe8cac982,
+ 0xaec29e6e, 0x87ec7038, 0x7000a519, 0xaeee333b, 0xff66e42c, 0x8afd6b25,
+ 0x03b4f63b, 0xbd7991dc, 0x5ab8d9c7, 0x2ed4684e, 0x48741a6c, 0xaf06940d,
+ 0x2fdc6349, 0xb03d7ecd, 0xe974996f, 0xac7867f9, 0x52ec8721, 0xbcdd9d4a,
+ 0x8edd2d00, 0x3557de06, 0x41c759f8, 0x3956d4b9, 0xa75409f2, 0x123cd8a1,
+ 0xb6100fab, 0x3e7b21e2, 0x2e8d623b, 0x92959da2, 0xbca35f77, 0x200c03a5,
+ 0x35fcb457, 0x1bb6c6e4, 0xf74eb928, 0x3d5d0b54, 0x87cc1d21, 0x4964046f,
+ 0x18ae4240, 0xd868b275, 0x8bd2b496, 0x1c5563f4, 0xc234d8f5, 0xf868e970,
+ 0xf9151fff, 0xae7be4a2, 0x271133ee, 0xbb0fd922, 0x25254932, 0xa60a9fc0,
+ 0x104bcd64, 0x30290145, 0x00000062,
+
+# define TENS_P13_IDX (TENS_P12_IDX + TENS_P12_SIZE)
+# define TENS_P13_SIZE 853
+ [TENS_P13_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x64cf8001, 0x9f345226, 0x644963e5, 0x7b8d5053, 0x49f0aa29,
+ 0xb945c82f, 0x430ff478, 0x933b6bb8, 0x5ff82d0a, 0x64c501d4, 0x73bbf174,
+ 0x9ec1e1b3, 0x3bfbe803, 0xe9010689, 0xf7390d8e, 0x3fef8d80, 0xf31d1325,
+ 0x2c73446b, 0xf5ca7a92, 0x1c19e379, 0x270af2be, 0xf52d9d9c, 0xeb2bed48,
+ 0x3abf72e1, 0x4ac4ffc2, 0x7ecf3508, 0x22019a82, 0x38597a5a, 0xbe6a7b3c,
+ 0x9a51ff6e, 0xa2d28437, 0x0c0abe9d, 0x7c9ec6ea, 0xc79887ff, 0x5851c899,
+ 0x436420d0, 0xefead581, 0x72b5547f, 0x99b1d2b5, 0x077ad8f8, 0x5cddbf5b,
+ 0x3b4305ed, 0xe3861ac7, 0x2d88f3fd, 0x3d6b43be, 0x393220aa, 0xe5382405,
+ 0x1cd62095, 0x61a10c96, 0x87a0d1e1, 0xca95a55d, 0x68c933e6, 0x9ee082e2,
+ 0x778089bb, 0x41429ee9, 0xfbb6d8d4, 0xc529500d, 0x26cf5471, 0x68b9be29,
+ 0xd6c9b140, 0x07be635a, 0x84151852, 0xb5572182, 0x83730335, 0xeb2300b4,
+ 0xdd312d31, 0x05d6dd9b, 0x488da59c, 0x37784d25, 0xda2c2e40, 0x6a8d92fa,
+ 0x6a57d720, 0x950b41ac, 0xf07a8632, 0xcd55f062, 0x2ecad06a, 0xe6a3dfe7,
+ 0x34c98bb0, 0x9c767d8f, 0xb60521b1, 0x752aafd1, 0xe87d16be, 0x9de1d728,
+ 0xe58a8b0c, 0xc6013830, 0x2fa2c119, 0x3c4f9156, 0x519b40c8, 0x5058fc8f,
+ 0xab78701b, 0xadc59c47, 0xc502a554, 0x0fb3286f, 0x6647f04c, 0x9db4076e,
+ 0x5ea495c8, 0x9c74fab1, 0xb4f00f8b, 0x897c7a3c, 0xd092b4c6, 0x283e0340,
+ 0x32f31fa8, 0xeeb708cc, 0x67b63de2, 0x4f7b3c8b, 0xef2bc02b, 0xda14bfe3,
+ 0xc49344c0, 0xaabc85be, 0xb6c4e69e, 0x2ece8aa6, 0x63a11016, 0x19cfba4d,
+ 0x726ae4d9, 0x0fc90b42, 0xee6ae707, 0x4290b04a, 0x4d9aabc5, 0xfb2b070e,
+ 0xf34906cd, 0x1ff54b0a, 0x52ca9709, 0x0b42bfe1, 0x16431570, 0x980f3076,
+ 0x6b5565bb, 0xeb8c4c4a, 0x9ce63c76, 0xb9e4c771, 0x3da24c53, 0x6f0266fa,
+ 0xb50e3c66, 0x76e34f79, 0x01bb4b96, 0x9948cf3e, 0x0fbea124, 0x86bead12,
+ 0xa1fa4edc, 0xd11e901c, 0xc3b97bf9, 0x71730e03, 0x370ca58e, 0x48b19715,
+ 0x886467e2, 0xdb237497, 0x3c727e24, 0x2116ccd2, 0x8e67d76e, 0xf973aecf,
+ 0x34bdedd3, 0x31d680ec, 0xb042ab05, 0x770e96a0, 0xfc5c3c17, 0xab6f1874,
+ 0xb8204ece, 0x5843f3a5, 0x416c0ced, 0x11dd112f, 0x95780183, 0xb1c74bd8,
+ 0x7e0e8613, 0x96c6453b, 0xa79ffc10, 0xb2157651, 0xfcd6da0a, 0x836a34a7,
+ 0x3dd0ccac, 0x316e5a36, 0x496049ed, 0x0322bcb2, 0xdea1a97d, 0xcdf2aa5a,
+ 0x39578d53, 0x1d1aa931, 0x030565c9, 0xd198cbed, 0x324e0a27, 0x5db83e8a,
+ 0x28432534, 0x90bf23e8, 0x5cb134c0, 0xdd0adab6, 0x009e5051, 0xf8ad61da,
+ 0x7e36a6d7, 0x84c75e57, 0xbdffe6aa, 0xb5d5532e, 0x138d680e, 0xbd84ddac,
+ 0x4a5f74a1, 0xccff00d1, 0x55538cfa, 0xb0948b8c, 0x48528011, 0xe345f82e,
+ 0x9e047ad7, 0x6ee770ff, 0xea77bef0, 0x0fc13669, 0x2f162567, 0x869426ac,
+ 0x0614686c, 0x3a3ff464, 0x4263ed82, 0xb3589b47, 0x57205a7a, 0x213f24ad,
+ 0xae6fc46b, 0x3de03e4e, 0xd92b133f, 0x315a589b, 0x1b49c24a, 0x73381bcb,
+ 0x1641c138, 0x7bc99425, 0xbc680ada, 0xa5cfbc9a, 0x962e9884, 0x0a960d70,
+ 0xfc8d12f6, 0xed18ef4c, 0x60acc868, 0x9aea5d14, 0x13113036, 0xc747c87e,
+ 0x2d99a5b0, 0x3a369bb3, 0x006b3658, 0x118a5135, 0xe43fa6e6, 0xb4947190,
+ 0xa13dc05e, 0xd7733db8, 0x0dbd7170, 0xc3fb67d1, 0x117ed7e7, 0xe2d72a49,
+ 0xc05fe99e, 0x9638db40, 0xd971a25b, 0x4239d468, 0x1a159559, 0x850a223c,
+ 0xc1117392, 0x22d2dbd8, 0x567b5fc0, 0x92c5b4eb, 0xc051007a, 0x11cc0099,
+ 0xfb355720, 0x6907810d, 0x39848161, 0x5e8534f4, 0x61d19ef2, 0x2ee8c466,
+ 0x8a0ab03c, 0xc234af76, 0x879aa514, 0x9774a235, 0x59e5da57, 0x9bc466b3,
+ 0xf339bd5a, 0x44ab026d, 0xbbb5fd67, 0x2b977202, 0x3685c9f2, 0x03e5dc00,
+ 0x7054359e, 0x5239cfb0, 0x9ba11f08, 0xf8237562, 0x9c258687, 0xa3b510dd,
+ 0x52c7bf8f, 0xb31ed0cf, 0x3245e079, 0xff9ff8d3, 0xbaee38c7, 0xf17d5562,
+ 0xf702b3b9, 0xcc4c8563, 0xcbca275d, 0xe005d9d1, 0xe817dbac, 0x05c6920a,
+ 0x62cee350, 0x0f1deac0, 0x19e049b9, 0x59599f74, 0xb2a27a16, 0xf0911d5a,
+ 0x7dcef00d, 0x3603dd66, 0x37552251, 0x97813735, 0x5fa022da, 0x0d849416,
+ 0xefbe57c2, 0x30a0e592, 0x57619296, 0xc953cc47, 0x11735043, 0xa83526ad,
+ 0xc0444be0, 0xb5f8463c, 0x16ff5136, 0x2a0a6631, 0xf037572c, 0xd30464da,
+ 0xb1bf8daa, 0x7f5718f7, 0x0f3e9e7e, 0xe5a4cfe7, 0xc26f2624, 0x8c9b5ae4,
+ 0xdfe8f485, 0xf6fa82e3, 0xc64a1509, 0xacb24aea, 0x3024b220, 0xddb02ac0,
+ 0xddcdfedd, 0xd834c574, 0x384c86c3, 0xd904e099, 0xdd48a571, 0x4550a05f,
+ 0x77b35c74, 0x81e85f71, 0xaaebdc6d, 0x0f9bb0b1, 0xd4cdc054, 0x7af4df85,
+ 0x845786af, 0xe5e53887, 0xdf2a91ca, 0xf6a58211, 0x5689a3c4, 0x8cf6aa15,
+ 0xa705983a, 0x9fbf2f52, 0x2ce7fef0, 0x48e84a62, 0x4a3b5365, 0xf8281a47,
+ 0xd48a0872, 0x8423dcf6, 0xf0929c3e, 0x044a5049, 0xe9ec071b, 0x17decc36,
+ 0x20e30c1b, 0x45fc2813, 0x3342196a, 0x46afb7f9, 0x6601e337, 0x30754439,
+ 0xf18094d1, 0xd38b4112, 0x61410dd1, 0xd8796b36, 0xd97d4dd8, 0x47e9bc0b,
+ 0x80805191, 0x1584e2da, 0xcde438c1, 0x955d24f1, 0x409659a1, 0x1b0950b1,
+ 0x5a09635f, 0x65b1febe, 0x615472b9, 0x525dc00a, 0x6308e067, 0x4089e2d4,
+ 0xd4e705a4, 0x43fc9209, 0x32c18b26, 0x4447a5fa, 0xaf271153, 0x3617cadc,
+ 0x4dc4f0d2, 0x692eb386, 0x6aa116ef, 0x655991bc, 0x0641dc0b, 0x54469597,
+ 0xc6559664, 0x749c0fe8, 0x4bdc0d1a, 0xa7d3381e, 0xc5292a61, 0x4eb65fdc,
+ 0x42474cc2, 0xf2c6b173, 0x19dfc9ee, 0x0a19a199, 0xbece2ee3, 0xc68b778d,
+ 0xaa03aa7c, 0xc8db86f0, 0xae54d2be, 0xb92a01e0, 0xdee3f48f, 0x6023c0a9,
+ 0xf6ae2852, 0xa233763b, 0xa441cb9e, 0x3246dddd, 0x3a8bb4b7, 0x44faa3c3,
+ 0x308ef2c8, 0xfd1c8516, 0xd2862534, 0x3b25ebe7, 0x62336f6f, 0x0c336a45,
+ 0x0b8e2ce6, 0xe867f171, 0x11eea1f2, 0x523972ec, 0x68df4903, 0x50c05824,
+ 0x51ef4cb7, 0xcb4df2a8, 0x3ffae115, 0xb51aca2f, 0x3ed1635f, 0xd6ff1cc6,
+ 0x0a5ac09f, 0xde8ed9d6, 0x0a3dc76f, 0x5dc2d8dd, 0x37991dde, 0xf95bacb2,
+ 0x80ad6e13, 0x163005ee, 0xd4f8c7a6, 0x3225d180, 0xa4760f08, 0x5fff004d,
+ 0x9b2b1a87, 0xe7ea8576, 0x5cd00b66, 0xec478452, 0x285dd80d, 0x20112439,
+ 0x4301b3a1, 0xff879fc8, 0xfacbb68c, 0xaf6af6b8, 0xb17fdf84, 0xc208d9f1,
+ 0xf4489576, 0x8794a6e9, 0xadcc862c, 0x0e83e54c, 0x931685a4, 0xab01c580,
+ 0x1e40293b, 0xcad784fa, 0x1f1ddf7f, 0x6b856084, 0xcee722b2, 0x1c39938b,
+ 0x74254eb4, 0xc7ccebf4, 0xb9c26d9a, 0x6b08dfb9, 0x2e3ece24, 0x981455ec,
+ 0xdff60410, 0xbc804e2b, 0xe06fa38b, 0xb534540c, 0x72e53c52, 0x02dfb2ef,
+ 0xb2a5c05a, 0x5002a2a5, 0x97313338, 0x597c53ff, 0xd61df455, 0x34e5261a,
+ 0x39ac2ec5, 0xc6bc0cab, 0x388b7539, 0x3f732fc0, 0x00eac704, 0x92fb21d9,
+ 0xc089971e, 0xb4ffa503, 0x7af93f8f, 0x72e353b6, 0xa8311b23, 0x8266c9af,
+ 0x1de496ca, 0xdbdb16b0, 0xd6fa0b51, 0x9991a5ef, 0xbd563089, 0x168cbe0f,
+ 0x0954a1e3, 0x537b9245, 0x53d09723, 0x2867272d, 0x86558cb9, 0x0b83f026,
+ 0xfac85d10, 0xf8562951, 0x1e5ddb95, 0xad3668c8, 0x48d27b92, 0xc930b7e6,
+ 0x19b58a99, 0xa3de74e3, 0xa9cda917, 0xcb6e35ee, 0x7a4dd16e, 0x4c80e9d5,
+ 0x4d84073f, 0x74a95ba8, 0x9cffcfc0, 0xd28485eb, 0x15796372, 0x5717e9cd,
+ 0x77eda8df, 0xab473c4e, 0xadb965e1, 0xffad6959, 0x5bc05659, 0x6ed63880,
+ 0xfb240227, 0x2014850b, 0xd15fdddf, 0xfdd74592, 0xb538f37d, 0x3a8e2e82,
+ 0x1473396f, 0xf6a5edf8, 0x3ce41a21, 0x0cc4351a, 0x754e8264, 0xaab95e73,
+ 0xc7821b96, 0xf42ff463, 0xc242faaa, 0xdd00ac65, 0x087e260e, 0x17d193f5,
+ 0x0dbe0328, 0x844a63c9, 0xf9d10f96, 0x85aa91dd, 0xbaf127ec, 0x0ab6dabb,
+ 0xce85e6a5, 0x1af5d24f, 0xe7b56a16, 0xcd6c5a19, 0x57d1d79f, 0x5dfc2b28,
+ 0xec4dd2f0, 0x18fe64a1, 0x8d72216a, 0x5f222077, 0x72f14a08, 0xd8b09b11,
+ 0x3bf038ab, 0xc6cf1f44, 0xc4265d7c, 0xdab1b0e7, 0x46398d2c, 0x7dcfdc68,
+ 0xb6e705d3, 0x4aafd1e6, 0x362c1183, 0xd8701107, 0xf6ac98b7, 0xad114d7e,
+ 0xd6649424, 0xc40ab551, 0xddd1c6e4, 0xa132030f, 0xc9d284c8, 0xdb1f662a,
+ 0x824069ee, 0x4157904b, 0xc846b3ad, 0xd38481ca, 0x0a248c17, 0xc846831f,
+ 0xe8745feb, 0x000025a8,
+
+# define TENS_P14_IDX (TENS_P13_IDX + TENS_P13_SIZE)
+# define TENS_P14_SIZE 1703
+ [TENS_P14_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x099f0001,
+ 0x41b5687d, 0xcbfd1b6e, 0x8c75ee63, 0x4b191cea, 0xd75296ad, 0x2394d80a,
+ 0x1eb5da9b, 0x18a004ed, 0x5c79fed9, 0x37e3b01c, 0xed67a1b8, 0x78d9a714,
+ 0x2a1a34d5, 0x8fbe7f0d, 0x6b1d3516, 0xe57c43ea, 0xa7825681, 0xc81d32e8,
+ 0xd3e716e1, 0x58860b00, 0xa6d93d65, 0x83159c97, 0x0113232f, 0xd6122269,
+ 0x7321c3a0, 0xbe6a92f3, 0xca4ca9d3, 0xd1e276a5, 0xc0e55163, 0xb05915d6,
+ 0x7b7a78c1, 0x0fae0ca4, 0x62a3df4b, 0x08abec6f, 0x13030d11, 0xd446338a,
+ 0x60dcc8f2, 0x5f05d1d5, 0x25e1f9f6, 0x04a40bee, 0x7f8c7113, 0x88f47ec0,
+ 0x589ff59a, 0x308c3661, 0xea5068a1, 0x95fb108f, 0x06e87dff, 0x1559e741,
+ 0xd4d4abdc, 0x01e092e4, 0xee16907c, 0x5a7b78e6, 0xe73aabcb, 0x146bb7e0,
+ 0xad372889, 0x4f6b43c5, 0xfd49fc1d, 0x0f29f589, 0xd3739253, 0xc4745a56,
+ 0xe2acfcc2, 0xd75ccbc7, 0xedd016cd, 0xac5a63e0, 0xef82ccd3, 0xb352496e,
+ 0x2bdabfc4, 0x5b3d0401, 0x01b0197f, 0xade96d3c, 0x29d9253d, 0x19bebdba,
+ 0x73c56b1b, 0x255e7b25, 0x1f2b7f1e, 0xa56a457e, 0x6299c836, 0x5c63cc78,
+ 0xa2ca74c6, 0x5c85fe93, 0xee571bea, 0x508e2561, 0x2db5f1d0, 0xb1fde6a9,
+ 0xa9b87b99, 0x4fb90a37, 0xf7260f07, 0xff58c5fd, 0x56ee7e97, 0xbab9fa46,
+ 0x42e6f9ce, 0x78816f73, 0x1b76d267, 0xfdb2c728, 0x4566519c, 0xae17dd8d,
+ 0xb9f6a95f, 0x1cd533a1, 0x67160dea, 0x14534bac, 0xfcd8f8f9, 0xf3f2901d,
+ 0x708b1f0a, 0x8829063b, 0x9457a1df, 0x8f872aa1, 0x36bb9335, 0xb5672c0e,
+ 0xd889d109, 0x7ec63a6a, 0x93306672, 0x39b6d457, 0x8239ab68, 0xef2e2506,
+ 0xbe0d7a1f, 0x4251b635, 0x05f65522, 0x0ef0bd55, 0x03286891, 0x2c42b664,
+ 0x9815fbac, 0x471fd611, 0x814e379c, 0x7dd8349d, 0xa4a25bda, 0x9886b84c,
+ 0x01b9e39d, 0x5a7ce1a2, 0xae31cbc9, 0x86d07f32, 0x83ef8faf, 0xb66b5b76,
+ 0x58470fdf, 0x96d59b73, 0x51618889, 0xdc400cf7, 0xfc8e0fc6, 0xaf693670,
+ 0x09a08e56, 0x91737de6, 0x74f682e1, 0x0e03923f, 0x7f8ac56d, 0x7400cfd4,
+ 0x8e05e49a, 0x4cebea3c, 0x384e1164, 0xb2e43d8c, 0xb50ae05e, 0x0f0b3ed9,
+ 0xa4006123, 0x64137137, 0x4e9a1934, 0x05404100, 0xd9621be6, 0x9329a255,
+ 0x5c347ebb, 0x75cbeb1b, 0xe684346b, 0x840fee55, 0xba6a9753, 0xf43836f6,
+ 0x60505b7b, 0x334a9278, 0xfd6d475d, 0x5db94761, 0x267375aa, 0xc110e160,
+ 0x024f6d63, 0x2ec96610, 0xa99b4c19, 0xb915c9f4, 0x338cfd90, 0xf02ea846,
+ 0xb9e51a09, 0xae928fb1, 0xfae31d88, 0x1a3db721, 0x8475dd26, 0x5769489d,
+ 0x7ad4c407, 0x0a49e9f0, 0x34e275c8, 0x3d075d83, 0x1d63114a, 0x72a96415,
+ 0x6b98e947, 0x1d500b5f, 0xd50fdc36, 0x141e5085, 0x87751275, 0xe7843834,
+ 0x2278809e, 0xb15c52ee, 0x947aead2, 0xfedb7b02, 0x5197b744, 0x64e09ba8,
+ 0x8849d0a6, 0x23beaa85, 0x11ecb913, 0x0f7ed667, 0x5d984848, 0x9f6331ea,
+ 0x588290e9, 0xa24d64d1, 0x7e09e9e5, 0x32592033, 0x03a501df, 0x27c270a6,
+ 0xbb3df738, 0x3c7c5a70, 0x4190833c, 0x7d4bf9f4, 0x80e5d89b, 0xa7fc6194,
+ 0xfaefb663, 0x62e52b49, 0xd3b6adcd, 0x809646fc, 0x1f2cf73a, 0xb765ed4f,
+ 0x531e4bfb, 0x92cd05f2, 0xaf12d1a6, 0x22ee30f3, 0x38da1074, 0xed6447bb,
+ 0x1a725608, 0xaff222d3, 0x7a3c6f54, 0xbca79a56, 0x7b0e8d12, 0x1c4660c5,
+ 0x6e34d6fb, 0x6f481a9f, 0xfe9dc99c, 0xf888db82, 0xd8489ea0, 0x84b4c0fa,
+ 0xc0dea281, 0x977a8583, 0xae30e887, 0x8c1cbcec, 0x1d4848cb, 0x0ee0d137,
+ 0xd011b0fc, 0x94b5fd49, 0x478d7dd4, 0x3d67f2e7, 0xacab62ad, 0x0ab4e62a,
+ 0x1dfc7df5, 0xd22e4553, 0x870b0e75, 0x49b7b001, 0x1b73bf6d, 0x12807ffd,
+ 0xdc9f0737, 0x6f3e5852, 0xc0e2f250, 0x93e62e4a, 0x4d96a55a, 0xc1d0e185,
+ 0x83a126db, 0x190b917b, 0xefbfd043, 0xc7df1669, 0x8f25b6dd, 0x2062eac9,
+ 0x476c17a6, 0xcb60f278, 0x25460383, 0x0e85e996, 0xda8c05be, 0x6f678a34,
+ 0x69206234, 0xf59be929, 0x1947b69a, 0x0ebfa11b, 0x90fd8322, 0x15c1e9bf,
+ 0xd699b1ec, 0xb2f0343f, 0x7001d002, 0xcf76eaaa, 0xc0778ab5, 0x5173eda8,
+ 0xb7b008e2, 0x4e00e4c6, 0x505d3f4d, 0x99dd341a, 0x1c9d4e12, 0x4ffb6978,
+ 0x474c5e95, 0x6e9ca6dd, 0xda19f938, 0xe2dda6e0, 0x98dc318e, 0xda455e54,
+ 0x3f67b836, 0x21e4181c, 0xa97e9a64, 0x1e17f655, 0x527a08bb, 0x1712dc21,
+ 0x682972ad, 0x0042d256, 0xccbeadf1, 0xca497b96, 0x861e99e0, 0x0d8aa585,
+ 0xeeb0f650, 0xdcc3c3da, 0x506af77e, 0x5deb9768, 0x7c9d60be, 0xe9d978b7,
+ 0x37b37e95, 0x77ad0b94, 0x42747f75, 0x07be42c4, 0x6d5fd2fe, 0x4c8c5da9,
+ 0x0d8fc27d, 0x0f2fd50f, 0x0ccf6023, 0x5b56053f, 0x3b1101bd, 0x56d34906,
+ 0xc0feca27, 0x7602a150, 0xc4888da4, 0x419abe54, 0x56d10633, 0xc76120ed,
+ 0x8db14123, 0xb656e675, 0x741e8f76, 0xd297b94e, 0x96be6f21, 0x3662439d,
+ 0x9b409e27, 0x6626574d, 0x35fff92a, 0xbf558205, 0x69e02439, 0xbe6838b7,
+ 0x6400fd4c, 0xa00f64ca, 0x1f4b158a, 0x9e2052ae, 0x04cca558, 0xfb5ee69e,
+ 0x58da644c, 0x96f26e1f, 0x8ab19401, 0xbee1e16b, 0xed8bf908, 0x2f2809a4,
+ 0xd50babab, 0x6e57f7e6, 0x6b0a8929, 0xf7356431, 0xb54a4cfc, 0x9a1d0ac4,
+ 0x6f9fd6cb, 0x836bfbf8, 0x3b42f469, 0x8bd32129, 0x40111b6b, 0x7c278fb1,
+ 0xb345d955, 0xff1fd188, 0xd32cd13c, 0xf7ec3aa0, 0x3789f792, 0xab707fa4,
+ 0x4d79a4bf, 0xb3a28ceb, 0xd9c24d8e, 0x7134dadc, 0x06e2eb3e, 0xd7c04f76,
+ 0xb379d811, 0x2b3b0ebc, 0x8c94fc33, 0xa28b53ab, 0xc06c5d01, 0xd900432a,
+ 0x7fea91ca, 0x6d30b008, 0x64845f08, 0x796f5349, 0xfde4687d, 0xf888fe67,
+ 0xe0046c56, 0xae482177, 0xce98cb11, 0x84590c46, 0x1feb4400, 0x6e1ba29b,
+ 0xff2f1611, 0xf73f3e9c, 0x3159ca8c, 0x34845918, 0x56f0ed46, 0xb7d10c32,
+ 0xd9a16a01, 0x405b9e91, 0x3cee3e24, 0x8739e4a6, 0x2ab396b4, 0x3f1b7871,
+ 0x09835dfd, 0x8c7a489f, 0x1592b74a, 0x05df7c81, 0x0e8d3f37, 0xa61ff273,
+ 0x68b29622, 0x259cd337, 0x43ff84a6, 0x81cf8fe9, 0x566ed883, 0x48427fc6,
+ 0x35c79428, 0xcfd2fb59, 0xa97e8c8b, 0x750aaed8, 0x32ddca23, 0xaa8108ef,
+ 0x96fbfff9, 0xa1d039aa, 0xe3cdf588, 0x47e77e00, 0xcd6b3fdb, 0xe72a9a80,
+ 0x9a522152, 0xeda06283, 0xef175610, 0xa670cfa1, 0x339fe6c4, 0x2dfbf3ee,
+ 0xc2d7f53b, 0x92a44e27, 0xcc47e4b0, 0xdfa212bc, 0xd64f83c9, 0x997e5475,
+ 0xb51319bf, 0x9fffe599, 0x1fc2c7b6, 0xef5605e7, 0x832169dd, 0xfeb6be4e,
+ 0xbf921dc8, 0x60bdfb1d, 0x72759f8d, 0x3546efa0, 0x020eebed, 0xcaab3d64,
+ 0xdb20a2fe, 0xba1218f6, 0xb2b62bdd, 0x3101eff0, 0x8fde5cfa, 0x2e319213,
+ 0xa52114d2, 0x87eead3f, 0xdf08b1dd, 0xa5387642, 0x746f34d0, 0xd76c4844,
+ 0x4cc40317, 0xe4f689c9, 0xb7d76071, 0x5fe0b4a2, 0x6e1c7915, 0xc7d43f53,
+ 0x3efb7d71, 0x068dd906, 0x35a75f5f, 0x652d7770, 0x750f4607, 0x64a1656c,
+ 0x36c2cf8e, 0x214d758b, 0x9348ef93, 0xe4058978, 0x9674b7f3, 0x10570b0b,
+ 0xbdfaba8f, 0xcef09dd7, 0xa92b261f, 0x071c21b6, 0xcbebb81f, 0xf427ed6c,
+ 0x44228cd6, 0x65e56fcf, 0x5036c460, 0xad919def, 0xccfd848b, 0x61d158a6,
+ 0x7527dca3, 0x4cf30459, 0x50855075, 0xa70dfd09, 0x3540f5aa, 0x35577adb,
+ 0xb5ba3d4e, 0x35736c4f, 0xcdfb689f, 0xefe8fa82, 0x97ab0dca, 0x51bd2ff3,
+ 0x77a7fe9c, 0x3107846c, 0x3d618b81, 0xbca797a4, 0xfc5e9651, 0xe2e08fbc,
+ 0xf7e8791f, 0x772f1cc0, 0x7c426f9d, 0x08d56f88, 0x0080c3ab, 0x0deea663,
+ 0xe6d46ec6, 0x7dca4eb7, 0x6b681d9d, 0xda06730b, 0x4af0e0f2, 0x038bf468,
+ 0x52097463, 0xca19d302, 0xbc09bb9a, 0xaa55aeb1, 0x3ded4433, 0xf27938ba,
+ 0x3e4b7865, 0x28296be7, 0x7ef96314, 0x7a1d55cc, 0xdf0b6b47, 0xcde11852,
+ 0xcedda5bd, 0xf00a0eb3, 0x72ca1a8b, 0x5241b572, 0xb002fdcc, 0xff8898b3,
+ 0xc4878862, 0xb3e85372, 0xbf4bca29, 0x7e1fef45, 0xf2d83189, 0x0f5427af,
+ 0x3cdf9e05, 0x75bae885, 0xf65c06ac, 0x9c71a700, 0xa3145eac, 0xde63bab2,
+ 0x76255bbf, 0x6e817be6, 0x4c6ad3d0, 0x25ab9935, 0xe95ef2f8, 0x11cd095a,
+ 0xd54f78de, 0xa001ae7e, 0xb3829dcb, 0x5abd18bd, 0x18eb9c9e, 0xada3c504,
+ 0xe3e3556c, 0xd35479aa, 0x5191ac5f, 0x221821ac, 0xc8d1d9d3, 0x313a8c51,
+ 0x088c3fc8, 0xc146a264, 0xb154abed, 0x92755bc5, 0x349ec093, 0xf94aba57,
+ 0x41d5886c, 0x0a5ad8b2, 0x36aba94b, 0x883a6758, 0xa9ad229f, 0x5d64069a,
+ 0x0546172f, 0x0366da16, 0xc3808ea4, 0x0b172403, 0x70f0a235, 0xfa816e66,
+ 0x4fceb827, 0xa65fcfea, 0x167b56d5, 0xfe2b9fb2, 0xfec36bcd, 0xa84c4cc9,
+ 0xcd96320f, 0x3e128584, 0x09eda8b8, 0x91eca525, 0x7ec7e17b, 0xbc45bedc,
+ 0xc14032f4, 0x9be689a7, 0x2eb20bc0, 0xffdf1efc, 0x14ef835f, 0xc6966c59,
+ 0xcd778dd8, 0x5feb0f3b, 0x23d47715, 0xd64b87c8, 0x5722a550, 0x62883198,
+ 0x315a1a8b, 0x648e17e6, 0x4b7e9d7a, 0x2ba43d28, 0x67caca84, 0x741f0398,
+ 0x6e660159, 0x3e16e1a9, 0x3dde3c45, 0xa53e56ae, 0xc7eb0aef, 0x3f39f33e,
+ 0x78751d73, 0x45816df8, 0x626770f7, 0xcb17d28d, 0x909e87f4, 0x93a86aba,
+ 0xc1dcf328, 0x1a1e4ce2, 0xd895d042, 0xb9f6dd69, 0xbb00eaf5, 0xacc37687,
+ 0xca609578, 0x5b490d39, 0xf8b86d4c, 0xf2737ef0, 0x39419f6d, 0x69267bc0,
+ 0x72524a03, 0x6eb060c4, 0xdbc01e93, 0x291035b1, 0x83984d54, 0xf673ad85,
+ 0xe08cbc20, 0x1fb24915, 0x584803a6, 0xe15bbcd7, 0x4088ddb5, 0xd4c22542,
+ 0x2c18041a, 0xa51372d1, 0xb2ba69b4, 0x2299283f, 0xcd11c296, 0x25dcd6f3,
+ 0xac54df23, 0x24a3a55e, 0x77e16e1d, 0xb3cd415b, 0xb99d85c0, 0x497befc7,
+ 0xe91154e3, 0x7365cd8b, 0xb55100aa, 0x0ee699eb, 0xfc0927a6, 0xefb374de,
+ 0x8acaa910, 0x83b40e3d, 0xda3f0006, 0x8590a089, 0xc6ce1b75, 0x54f6ff20,
+ 0xfda2f7f3, 0xd2ab58f6, 0xd0763b6d, 0x6caf2515, 0x2519622d, 0xc3714057,
+ 0x9863638f, 0xea00bb4f, 0x09ea4a4d, 0xe69de96d, 0x6b01fe5f, 0x960161a5,
+ 0x529e32ec, 0xf8260ae9, 0x01a37eea, 0x69710577, 0x5aa0716f, 0xcb3fb1da,
+ 0x4260feda, 0xa33fb790, 0x76012f75, 0x24c0e5be, 0x130f09ae, 0x2e8323dc,
+ 0x5c8ecb76, 0x17cb8f12, 0x401b5f5c, 0x5f0a63e0, 0x47e1560a, 0xdc57a786,
+ 0xee1377d4, 0x228e7ee5, 0x0aa294b9, 0xaea6c534, 0x55b0fe2f, 0x922d318a,
+ 0xf108b772, 0xf15bddf6, 0xdfb69702, 0xcd438a4e, 0x90e1db66, 0x584ce4a1,
+ 0x568ef6cb, 0x69e55f9d, 0x6da376ba, 0x5ca6c109, 0x45c7e294, 0xc977b3e9,
+ 0xcf5b6c0c, 0x1d694499, 0x11b487ae, 0xcf8339ac, 0xbcb3cc6e, 0x50b828e0,
+ 0x046b1071, 0x5703ed0d, 0x2c615946, 0x720d1610, 0xa908dbd0, 0x742bbe33,
+ 0x22c076e2, 0x48966a66, 0x1d0cefa4, 0x1dde819f, 0x601352bf, 0xb9370c39,
+ 0xa585cc4a, 0xeb857f94, 0x5a2f7206, 0x3fae6b58, 0x49cd0f1f, 0x78e5fb3d,
+ 0x1b89d476, 0x74e9e65b, 0xed82945b, 0xb74e6483, 0x2941c4d9, 0x7e087acc,
+ 0x565c18dc, 0x1a09f2e5, 0xbf4ccd3d, 0xd304e977, 0xa522631d, 0x6123378e,
+ 0x4517109b, 0xb7e4285a, 0x4bf1a506, 0x625803c2, 0x683172f8, 0xc84e7354,
+ 0x3f8a2b11, 0x7dd12b89, 0xed420491, 0x8c698b0b, 0x9853fb97, 0x9631777b,
+ 0xb697e1c9, 0x5f028f05, 0x51038110, 0x9055f055, 0x30e255e3, 0xe2d0c1b6,
+ 0xb990321e, 0xa8fdf4d1, 0xff4dc144, 0x521a3056, 0x148999e0, 0xa8111c66,
+ 0xa9c96852, 0x8157f508, 0x4b394a94, 0xa0dc4df1, 0x94ec2e93, 0x6e6afa56,
+ 0x8fc28377, 0xf72ffa04, 0xc435186f, 0xf91488b7, 0x8d037f6f, 0xa899ec1e,
+ 0x48757727, 0x4101b612, 0xb8cf377d, 0xa5a54e68, 0xb4570569, 0x2ac5a0a0,
+ 0x063d9cfd, 0x7c504c74, 0xf1a5884c, 0x0a9b1955, 0x8d0b91bf, 0xe5f6862f,
+ 0x79ff5361, 0x0ed3d38f, 0xc6fd31fb, 0x9fe131c7, 0x85b9c648, 0x8febf2b4,
+ 0x8e77e86b, 0x992ba80e, 0x56429986, 0x6848879a, 0x608cdda5, 0x3e0d106e,
+ 0x754b300e, 0x25200576, 0xafd5195b, 0x5d37aad9, 0xe81f0939, 0xe00a390e,
+ 0xdeeea20a, 0xf5fef0be, 0xb5d51155, 0x6e27d173, 0x9e72ebcf, 0xb776e978,
+ 0xb966f7ba, 0x09520238, 0x726c8408, 0x3347ebc5, 0x65dce5a2, 0x3ec78337,
+ 0x8c92d740, 0x3cdde3fe, 0x32caec93, 0xd20379ae, 0x411be811, 0x41756580,
+ 0x72fa1bbd, 0xa92125b3, 0x84c42f04, 0xdd4ee5fe, 0x3a25922c, 0x96446853,
+ 0x49ad3be0, 0x2880366d, 0x1c841afe, 0xf1e09019, 0xfb905fe1, 0xa451ad59,
+ 0x3ba9d0c9, 0x56db2e9c, 0xa42419f2, 0xe921e7a0, 0x3c9a3ca5, 0xad8ea375,
+ 0xcec7d091, 0x99bdb940, 0x477ef58f, 0x8a4933c7, 0xb2598b8d, 0xf5659df7,
+ 0xcfac1e1c, 0x339f8748, 0xe2a04aab, 0xe122b03f, 0x45bc6f37, 0xc9feeb30,
+ 0x9c75aaa0, 0xc13c174e, 0x0ea0585d, 0xdc58bbb4, 0x3a96bd5a, 0x20251482,
+ 0x3c7a714d, 0x696897eb, 0x6cb83b6b, 0xa37de406, 0x3b496b5f, 0x37e75d6a,
+ 0x380dd382, 0x0e1a513c, 0xda26fac9, 0xf2458364, 0x12b5c6ea, 0x79ce9e47,
+ 0x1ff1fcbf, 0xbe7c6e86, 0x59a6a7ba, 0x8d70f515, 0x94761453, 0x6b04e425,
+ 0x8768ffb2, 0x1ca5f425, 0x3f9e8407, 0x3b641184, 0x5f8f6756, 0x62b1a5a5,
+ 0x56bc2120, 0xd1e5da68, 0x17f2fa18, 0x8cce5e2d, 0xa1bc9c06, 0x8e290fb1,
+ 0x892df1af, 0xad10b8c8, 0xb43e5517, 0xd0597409, 0x4407c38f, 0x4a020d81,
+ 0xfea9c9b6, 0xd8e0e7d6, 0xd5b2aaf9, 0xde5e9b40, 0xda44ed4a, 0x45d6bf41,
+ 0x87aa3ca0, 0xc62d12fc, 0x4708acc8, 0x10212e26, 0x0d1227ff, 0xfeeb5742,
+ 0x5da02550, 0xd66668e7, 0x1d56e5e1, 0x32c215ec, 0xae1e0bef, 0x7f048b7e,
+ 0x58c0e922, 0x2aea8619, 0x58251aac, 0xbbe10425, 0xa1fea536, 0x2e1d9667,
+ 0xd233eb7d, 0xcf435c0b, 0xb0693c67, 0x61d918ea, 0x903ec9f0, 0xd6c4e8ac,
+ 0x0efb1788, 0xb0098f5b, 0x1709d878, 0x3c12b35e, 0x3f6ce1b7, 0xa1b3ff54,
+ 0x8a8f7dbb, 0x37608d6a, 0x73e8563e, 0xa3330540, 0x64e00749, 0xebbfcab9,
+ 0x8d5caaf9, 0x3bc87c7e, 0xedb2bd94, 0x22f8f62d, 0xe656dec3, 0xc5683222,
+ 0x670c1626, 0x94089e7f, 0x4237542f, 0x47d29440, 0x2fc4e530, 0x8419441e,
+ 0x8b288dac, 0x7f9245f9, 0xa7afb4e9, 0x8a15650d, 0x082adef7, 0x3104ef19,
+ 0x043c62de, 0x0aff3dc5, 0x7ecd0635, 0xe7e80a8b, 0xe0600fad, 0x4d8e81cc,
+ 0x81ebf4e0, 0xf587e30f, 0x7b372af7, 0x2d8f8ca0, 0xdee11c6f, 0xd3624b1c,
+ 0xf8adc426, 0xca9debed, 0x5c22de4f, 0x3634f778, 0xfae3186b, 0xacf8b595,
+ 0xd7bfa75f, 0x003cd316, 0xbbfe3cf6, 0xb023cb50, 0xc51055a1, 0x0063cffd,
+ 0x93869a77, 0x51e022d4, 0xfbceeb10, 0x5187457e, 0x109defc9, 0x673892d8,
+ 0xe13cfde2, 0xd4aa3272, 0xc09c8134, 0xbf89ad5b, 0x0327181b, 0x09511ec7,
+ 0xaa21b632, 0xd7e72186, 0xe41885b5, 0x46713f9c, 0x493d2789, 0x1386c526,
+ 0xd5d22a5c, 0xcefddfc4, 0xcf59281c, 0x92973ea6, 0x4ebe43f6, 0xeac5c6ad,
+ 0x6cf4897d, 0xd95082a0, 0x82ce562a, 0x28e5e9bd, 0x28d8f0db, 0xddf06e81,
+ 0x707b0166, 0x7dae3f00, 0xfbf5756a, 0x035a4680, 0x4f114102, 0xe7ba4b33,
+ 0x5190fedf, 0x106a7594, 0xe5f1bc49, 0xaae3ad67, 0xd7a1a766, 0x040ee971,
+ 0x9120a214, 0xf415b374, 0x1edc87ea, 0x17aab43c, 0xc6ad637d, 0x885858c1,
+ 0xd90303c7, 0xbfd4b70b, 0x3ff4eb0e, 0x344a9a88, 0xd81eea30, 0x95925446,
+ 0x5adef0ec, 0xabb5f5e7, 0x20bbd8c3, 0xc1c22cce, 0xe6944262, 0xc5acdb23,
+ 0x80024021, 0x2232c635, 0x94b30c81, 0x55f07648, 0x78569acd, 0x9696ea39,
+ 0x4dd6b528, 0x1c3e1b40, 0xde5853b3, 0x8a2c3679, 0x6eb5a7d8, 0x56bda89a,
+ 0x8f9cf096, 0xfda86d5b, 0x6481c7e7, 0x50a6a7d5, 0x15bfb45d, 0x4f9a5381,
+ 0xc057d45d, 0x4fb10024, 0xa0009f00, 0x5e1ca0dd, 0xac420f74, 0xcfbb38bd,
+ 0xf0d4a615, 0x19bf0318, 0x0e3aef84, 0xcb3d7b20, 0x166c1e3e, 0x58272fdd,
+ 0x3bfacf9f, 0xc0f5ce46, 0x63a13528, 0xea59e333, 0xa020ca8c, 0xaadd116b,
+ 0x3dbb5a3d, 0xe5523f47, 0x747f55ea, 0x0922171e, 0x64d520fb, 0x6c709e84,
+ 0x07ce951b, 0x35fdc402, 0x7508eb6d, 0xc495a8fa, 0xb0d11c39, 0x81313d65,
+ 0x57447ef0, 0xa7b61e26, 0xf72301f3, 0xbb096315, 0x45a3a7c5, 0xa903a44b,
+ 0x00432f88, 0x19081987, 0xeb4e1b66, 0xbb7b66bd, 0x6d245171, 0xde4182f5,
+ 0x0d89bd0b, 0x87f4de6c, 0xf70d8a60, 0x9a87855b, 0x08a27449, 0x4ac7720a,
+ 0xd4964017, 0xb0d9ddac, 0x4db3488c, 0xfe397d44, 0xd07b745b, 0x197dcb7b,
+ 0x6e9d567d, 0xe3b90812, 0x9143fef1, 0xb9e002ac, 0x115ff96d, 0xf60a2201,
+ 0x5b61c9c8, 0x09abab2f, 0xb14a44a7, 0x0ca19c73, 0x843c7997, 0xe3a9bbe6,
+ 0x5e3fc18c, 0x0c0404ee, 0x764df59d, 0x990ec2c2, 0x4ad0ba3c, 0x05e8be0f,
+ 0xe599647d, 0xc19d365d, 0x4d0c2990, 0xe5a9d9ac, 0xb680a72d, 0x4ce2e5dd,
+ 0x6d6c0267, 0x06f9c25b, 0xbd6078e0, 0xb5fcdc81, 0xd742fa41, 0xcccc2399,
+ 0xc691adc0, 0x215ad82c, 0xea73b0c3, 0xa511e5b0, 0xf499e0a6, 0x53e27ab0,
+ 0xd94440a2, 0x47752521, 0x9a6e3644, 0xab113708, 0x8f8b301d, 0x058a42a3,
+#endif /* FPIOCONST_HAVE_EXTENDED_RANGE */
+};
+
+#elif BITS_PER_MP_LIMB == 64
+
+/* Table with constants of 10^(2^i), i=0..12 for 64-bit limbs. */
+
+const mp_limb_t __tens[] =
+{
+#define TENS_P0_IDX 0
+#define TENS_P0_SIZE 2
+ [TENS_P0_IDX] = 0x0000000000000000ull, 0x000000000000000aull,
+
+#define TENS_P1_IDX (TENS_P0_IDX + TENS_P0_SIZE)
+#define TENS_P1_SIZE 2
+ [TENS_P1_IDX] = 0x0000000000000000ull, 0x0000000000000064ull,
+
+#define TENS_P2_IDX (TENS_P1_IDX + TENS_P1_SIZE)
+#define TENS_P2_SIZE 2
+ [TENS_P2_IDX] = 0x0000000000000000ull, 0x0000000000002710ull,
+
+#define TENS_P3_IDX (TENS_P2_IDX + TENS_P2_SIZE)
+#define TENS_P3_SIZE 2
+ [TENS_P3_IDX] = 0x0000000000000000ull, 0x0000000005f5e100ull,
+
+#define TENS_P4_IDX (TENS_P3_IDX + TENS_P3_SIZE)
+#define TENS_P4_SIZE 2
+ [TENS_P4_IDX] = 0x0000000000000000ull, 0x002386f26fc10000ull,
+
+#define TENS_P5_IDX (TENS_P4_IDX + TENS_P4_SIZE)
+#define TENS_P5_SIZE 3
+ [TENS_P5_IDX] = 0x0000000000000000ull, 0x85acef8100000000ull,
+ 0x000004ee2d6d415bull,
+
+#define TENS_P6_IDX (TENS_P5_IDX + TENS_P5_SIZE)
+#define TENS_P6_SIZE 5
+ [TENS_P6_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x6e38ed64bf6a1f01ull, 0xe93ff9f4daa797edull, 0x0000000000184f03ull,
+
+#define TENS_P7_IDX (TENS_P6_IDX + TENS_P6_SIZE)
+#define TENS_P7_SIZE 8
+ [TENS_P7_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x03df99092e953e01ull, 0x2374e42f0f1538fdull,
+ 0xc404dc08d3cff5ecull, 0xa6337f19bccdb0daull, 0x0000024ee91f2603ull,
+
+#define TENS_P8_IDX (TENS_P7_IDX + TENS_P7_SIZE)
+#define TENS_P8_SIZE 15
+ [TENS_P8_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0xbed3875b982e7c01ull, 0x12152f87d8d99f72ull, 0xcf4a6e706bde50c6ull,
+ 0x26b2716ed595d80full, 0x1d153624adc666b0ull, 0x63ff540e3c42d35aull,
+ 0x65f9ef17cc5573c0ull, 0x80dcc7f755bc28f2ull, 0x5fdcefcef46eeddcull,
+ 0x00000000000553f7ull,
+
+#define TENS_P9_IDX (TENS_P8_IDX + TENS_P8_SIZE)
+#define TENS_P9_SIZE 28
+ [TENS_P9_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x77f27267fc6cf801ull, 0x5d96976f8f9546dcull,
+ 0xc31e1ad9b83a8a97ull, 0x94e6574746c40513ull, 0x4475b579c88976c1ull,
+ 0xaa1da1bf28f8733bull, 0x1e25cfea703ed321ull, 0xbc51fb2eb21a2f22ull,
+ 0xbfa3edac96e14f5dull, 0xe7fc7153329c57aeull, 0x85a91924c3fc0695ull,
+ 0xb2908ee0f95f635eull, 0x1366732a93abade4ull, 0x69be5b0e9449775cull,
+ 0xb099bc817343afacull, 0xa269974845a71d46ull, 0x8a0b1f138cb07303ull,
+ 0xc1d238d98cab8a97ull, 0x0000001c633415d4ull,
+
+#define TENS_P10_IDX (TENS_P9_IDX + TENS_P9_SIZE)
+#define TENS_P10_SIZE 55
+ [TENS_P10_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0xf55b2b722919f001ull, 0x1ec29f866e7c215bull, 0x15c51a88991c4e87ull,
+ 0x4c7d1e1a140ac535ull, 0x0ed1440ecc2cd819ull, 0x7de16cfb896634eeull,
+ 0x9fce837d1e43f61full, 0x233e55c7231d2b9cull, 0xf451218b65dc60d7ull,
+ 0xc96359861c5cd134ull, 0xa7e89431922bbb9full, 0x62be695a9f9f2a07ull,
+ 0x045b7a748e1042c4ull, 0x8ad822a51abe1de3ull, 0xd814b505ba34c411ull,
+ 0x8fc51a16bf3fdeb3ull, 0xf56deeecb1b896bcull, 0xb6f4654b31fb6bfdull,
+ 0x6b7595fb101a3616ull, 0x80d98089dc1a47feull, 0x9a20288280bda5a5ull,
+ 0xfc8f1f9031eb0f66ull, 0xe26a7b7e976a3310ull, 0x3ce3a0b8df68368aull,
+ 0x75a351a28e4262ceull, 0x445975836cb0b6c9ull, 0xc356e38a31b5653full,
+ 0x0190fba035faaba6ull, 0x88bc491b9fc4ed52ull, 0x005b80411640114aull,
+ 0x1e8d4649f4f3235eull, 0x73c5534936a8de06ull, 0xc1a6970ca7e6bd2aull,
+ 0xd2db49ef47187094ull, 0xae6209d4926c3f5bull, 0x34f4a3c62d433949ull,
+ 0xd9d61a05d4305d94ull, 0x0000000000000325ull,
+
+#if FPIOCONST_HAVE_EXTENDED_RANGE
+# define TENS_P11_IDX (TENS_P10_IDX + TENS_P10_SIZE)
+# define TENS_P11_SIZE 108
+ [TENS_P11_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0xe30968651333e001ull, 0x49e28dcfb27d4d3full,
+ 0xee87e354ec2e4721ull, 0x368b8abbb6067584ull, 0x2ed56d55a5e5a191ull,
+ 0xea50d142fd827773ull, 0x98342c9e51b78db2ull, 0x866ed6f1c850dabcull,
+ 0x9279498719342c12ull, 0x66912e4ad2f869c2ull, 0x57a7842d71c7fd8full,
+ 0xfb7fedcc235552ebull, 0x38209ce1f3861ce0ull, 0x34c101349713b449ull,
+ 0xa7a8289c8c6c54deull, 0xe3cb64f32dbb6643ull, 0xe3892ee98074ff01ull,
+ 0xa8f16f9210c17f94ull, 0x967abbb3a8281ed6ull, 0x9952fbed5a151440ull,
+ 0xafe609c313b41e44ull, 0xf111821fa2bca416ull, 0x91bac974fb1264b4ull,
+ 0x8e48ff35d6c7d6abull, 0xc4a656654419bd43ull, 0x33554c36685e5510ull,
+ 0x0dbd21feab498697ull, 0x982da4663cfe491dull, 0x9e110c7bcbea4ca7ull,
+ 0x5fc5a04779c56b8aull, 0x1aa9f44484d80e2eull, 0x6a57b1ab730f203cull,
+ 0x87a7dc62d752f7a6ull, 0x40660460944545ffull, 0xc9ac375d77c1a42full,
+ 0x744695f0e866d7efull, 0xa1fc6b9681428c85ull, 0x7bf03c19d7917c7bull,
+ 0x5715f7915b33eb41ull, 0xdb0708fd8f6cae5full, 0x785ce6b7b125ac8eull,
+ 0x6f46eadb56c6815bull, 0x195355d84eeebeeeull, 0x9d7389c0a244de3cull,
+ 0xcf99d01953761abdull, 0x0d76ce39de9ec24bull, 0x2e55ecee70beb181ull,
+ 0xf56d9d4bd5f86079ull, 0x13ef5a83fb8886fbull, 0x3f3389a4408f43c5ull,
+ 0x58ccf45cfad37943ull, 0x415c7f3ef82df846ull, 0x8b3d5cf42915e818ull,
+ 0xf8dbb57a6a445f27ull, 0x8ad803ecca8f0070ull, 0x038f9245b2e87c34ull,
+ 0xc7c9dee0bedd8a6cull, 0x2ad3fa140eac7d56ull, 0xf775677ce0de0840ull,
+ 0x92be221ef1bd0ad5ull, 0xce9d04a487fa1fb9ull, 0x3f6f7024d2c36fa9ull,
+ 0x907855eeb028af62ull, 0x4efac5dcd83e49d6ull, 0x77cd8c6be7151aabull,
+ 0x0af908b40a753b7dull, 0xe50f30278c983623ull, 0x1d08e2d694222771ull,
+ 0xf2ee5ca6f7e928e6ull, 0x11eb962b1b61b93cull, 0xce2bcba19648b21cull,
+ 0x7bbebe3034f77154ull, 0x8ce329ace526a319ull, 0xb5dc53d5de4a74d2ull,
+ 0x000000000009e8b3ull,
+
+# define TENS_P12_IDX (TENS_P11_IDX + TENS_P11_SIZE)
+# define TENS_P12_SIZE 214
+ [TENS_P12_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0xd4724e8d2a67c001ull, 0xf89a1e908efe7ae7ull, 0x54e05154ef084117ull,
+ 0x506be82913b1bb51ull, 0xe599574efb29b172ull, 0x806c0ed3f0da6146ull,
+ 0x45155e93b86ae5beull, 0x7e1e7c34c0591cc2ull, 0x1d1f4cce7c4823daull,
+ 0xd6bfdf759b8ba1e8ull, 0xc2dfae78e341be10ull, 0x0f237f1a016b67b2ull,
+ 0xaf6a25743dbeabcdull, 0x142e0e80cab3e6d7ull, 0x2c23481161959127ull,
+ 0xcb4bf98287009701ull, 0x88052f8cf8169c84ull, 0xbc13176168dde6d4ull,
+ 0x54ab9c41ff0b0905ull, 0x1a1c304e7613b224ull, 0x441c2d473bfe167bull,
+ 0x78f061814f6cea9cull, 0x30c7ae41eb659fb8ull, 0xa1ebcad7947e0d0eull,
+ 0x2130504dd97d9556ull, 0xf2acd5071a8309cbull, 0xfd82373a3f8ec72aull,
+ 0x280f4d3295a842bcull, 0x811a4f04f3618ac0ull, 0xd3967a1b6dc3a5b4ull,
+ 0xdcfe388f15b8c898ull, 0x8738b909454eb2a0ull, 0x2bd9cc1110c4e996ull,
+ 0x655fec303297cd0cull, 0xf4090ee8ae0725b1ull, 0x398c6fed037d19eeull,
+ 0xc994a4503b9af26bull, 0x75a697b2b5341743ull, 0x3ccb5b92ac50b9c1ull,
+ 0xa8329761ffe06205ull, 0xeb83cadbdfea5242ull, 0x3c20ee69e79dadf7ull,
+ 0x7021b97a1e0a6817ull, 0x176ca776743074faull, 0xeca19beb77fb8af6ull,
+ 0xaf63b71292baf1deull, 0xa4eb8f8cde35c88bull, 0x40b464a0e137d5e9ull,
+ 0x42923bbd87d1cde8ull, 0x2e2690f3cd8f62ffull, 0x59c89f1b095edc16ull,
+ 0x5138753d1fa8fd5dull, 0x80152f18390a2b29ull, 0xf984d83e2dd8d925ull,
+ 0xc19e1faf7a872e74ull, 0xecf9b5d0ed4d542dull, 0xc53c0adf9462ea75ull,
+ 0x37a2d4390caea134ull, 0x2181327ec8fa2e8aull, 0x2d2408206e7bb827ull,
+ 0x5893d4b850be10e0ull, 0x1f2b2322ab312bb9ull, 0xbf627ede440b3f25ull,
+ 0xb608b89572dac789ull, 0x86deb3f078787e2aull, 0xbb9373f46fee7aabull,
+ 0xf7d8b57e27ecf57bull, 0x3d04e8d2fca26a9full, 0x3172826ac9df13cbull,
+ 0xa8fcd8e0cd9e8d7cull, 0x307641d9b2c39497ull, 0x2608c4cf1cc939c1ull,
+ 0x3d326a7eb6d1c7bfull, 0x8e13e25feeaf19e6ull, 0x2dfe6d97ee63302bull,
+ 0xe41d3cc425971d58ull, 0xab8db59a0a80627cull, 0xe90afb779eea37c8ull,
+ 0x9ee3352c90ca19cfull, 0xfe78d6823613c850ull, 0x5b060904788f6e50ull,
+ 0x3fecb534b71bd1a4ull, 0x20c33857b32c450cull, 0x0239f4cea6e9cfdaull,
+ 0xa19adb9548497187ull, 0x95aca6a8b492ed8aull, 0xcf1b23504dcd6cd9ull,
+ 0x1a67778cfbe8b12aull, 0xc32da38338eb3accull, 0xa03f40a8fb126ab1ull,
+ 0xe9ce4724ed5bf546ull, 0x73a130d84c4a74fdull, 0xa2ebd6c1d9960e2dull,
+ 0x6f233b7c94ab6febull, 0x8e7b9a7349126080ull, 0xd298f9994b8c9091ull,
+ 0xa96ddeff35e836b5ull, 0x6b0dd9bc96119b31ull, 0x282566fbc6cc3f8dull,
+ 0xd6769f3b72b882e7ull, 0x00fc509ba674343dull, 0xd6266a3fdcbf7789ull,
+ 0x4e89541bae9641fdull, 0x53400d0311953407ull, 0xe5b533458e0dd75aull,
+ 0x108b89bc108f19adull, 0xe03b2b6341a4c954ull, 0x97aced8e437b3d7full,
+ 0x2c5508c2cbd66670ull, 0x5c4f2ef0650ebc69ull, 0x9985a2df904ff6bfull,
+ 0x5ed8d2399faddd9eull, 0xe3e51cb925585832ull, 0x56c02d9a0ff4f1d4ull,
+ 0xc1a08a138c4ef804ull, 0xe6d2767113fd01c8ull, 0x9d0176cca7c234f4ull,
+ 0x4d8bfa89d0d73df2ull, 0x2b17e0b2544f10cdull, 0xfd86fe49b70a5c7dull,
+ 0x214495bbdf373f41ull, 0x00d313d584e857fdull, 0xa4ba47440496fcbeull,
+ 0xaec29e6ee8cac982ull, 0x7000a51987ec7038ull, 0xff66e42caeee333bull,
+ 0x03b4f63b8afd6b25ull, 0x5ab8d9c7bd7991dcull, 0x48741a6c2ed4684eull,
+ 0x2fdc6349af06940dull, 0xe974996fb03d7ecdull, 0x52ec8721ac7867f9ull,
+ 0x8edd2d00bcdd9d4aull, 0x41c759f83557de06ull, 0xa75409f23956d4b9ull,
+ 0xb6100fab123cd8a1ull, 0x2e8d623b3e7b21e2ull, 0xbca35f7792959da2ull,
+ 0x35fcb457200c03a5ull, 0xf74eb9281bb6c6e4ull, 0x87cc1d213d5d0b54ull,
+ 0x18ae42404964046full, 0x8bd2b496d868b275ull, 0xc234d8f51c5563f4ull,
+ 0xf9151ffff868e970ull, 0x271133eeae7be4a2ull, 0x25254932bb0fd922ull,
+ 0x104bcd64a60a9fc0ull, 0x0000006230290145ull,
+
+# define TENS_P13_IDX (TENS_P12_IDX + TENS_P12_SIZE)
+# define TENS_P13_SIZE 427
+ [TENS_P13_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x9f34522664cf8001ull, 0x7b8d5053644963e5ull,
+ 0xb945c82f49f0aa29ull, 0x933b6bb8430ff478ull, 0x64c501d45ff82d0aull,
+ 0x9ec1e1b373bbf174ull, 0xe90106893bfbe803ull, 0x3fef8d80f7390d8eull,
+ 0x2c73446bf31d1325ull, 0x1c19e379f5ca7a92ull, 0xf52d9d9c270af2beull,
+ 0x3abf72e1eb2bed48ull, 0x7ecf35084ac4ffc2ull, 0x38597a5a22019a82ull,
+ 0x9a51ff6ebe6a7b3cull, 0x0c0abe9da2d28437ull, 0xc79887ff7c9ec6eaull,
+ 0x436420d05851c899ull, 0x72b5547fefead581ull, 0x077ad8f899b1d2b5ull,
+ 0x3b4305ed5cddbf5bull, 0x2d88f3fde3861ac7ull, 0x393220aa3d6b43beull,
+ 0x1cd62095e5382405ull, 0x87a0d1e161a10c96ull, 0x68c933e6ca95a55dull,
+ 0x778089bb9ee082e2ull, 0xfbb6d8d441429ee9ull, 0x26cf5471c529500dull,
+ 0xd6c9b14068b9be29ull, 0x8415185207be635aull, 0x83730335b5572182ull,
+ 0xdd312d31eb2300b4ull, 0x488da59c05d6dd9bull, 0xda2c2e4037784d25ull,
+ 0x6a57d7206a8d92faull, 0xf07a8632950b41acull, 0x2ecad06acd55f062ull,
+ 0x34c98bb0e6a3dfe7ull, 0xb60521b19c767d8full, 0xe87d16be752aafd1ull,
+ 0xe58a8b0c9de1d728ull, 0x2fa2c119c6013830ull, 0x519b40c83c4f9156ull,
+ 0xab78701b5058fc8full, 0xc502a554adc59c47ull, 0x6647f04c0fb3286full,
+ 0x5ea495c89db4076eull, 0xb4f00f8b9c74fab1ull, 0xd092b4c6897c7a3cull,
+ 0x32f31fa8283e0340ull, 0x67b63de2eeb708ccull, 0xef2bc02b4f7b3c8bull,
+ 0xc49344c0da14bfe3ull, 0xb6c4e69eaabc85beull, 0x63a110162ece8aa6ull,
+ 0x726ae4d919cfba4dull, 0xee6ae7070fc90b42ull, 0x4d9aabc54290b04aull,
+ 0xf34906cdfb2b070eull, 0x52ca97091ff54b0aull, 0x164315700b42bfe1ull,
+ 0x6b5565bb980f3076ull, 0x9ce63c76eb8c4c4aull, 0x3da24c53b9e4c771ull,
+ 0xb50e3c666f0266faull, 0x01bb4b9676e34f79ull, 0x0fbea1249948cf3eull,
+ 0xa1fa4edc86bead12ull, 0xc3b97bf9d11e901cull, 0x370ca58e71730e03ull,
+ 0x886467e248b19715ull, 0x3c727e24db237497ull, 0x8e67d76e2116ccd2ull,
+ 0x34bdedd3f973aecfull, 0xb042ab0531d680ecull, 0xfc5c3c17770e96a0ull,
+ 0xb8204eceab6f1874ull, 0x416c0ced5843f3a5ull, 0x9578018311dd112full,
+ 0x7e0e8613b1c74bd8ull, 0xa79ffc1096c6453bull, 0xfcd6da0ab2157651ull,
+ 0x3dd0ccac836a34a7ull, 0x496049ed316e5a36ull, 0xdea1a97d0322bcb2ull,
+ 0x39578d53cdf2aa5aull, 0x030565c91d1aa931ull, 0x324e0a27d198cbedull,
+ 0x284325345db83e8aull, 0x5cb134c090bf23e8ull, 0x009e5051dd0adab6ull,
+ 0x7e36a6d7f8ad61daull, 0xbdffe6aa84c75e57ull, 0x138d680eb5d5532eull,
+ 0x4a5f74a1bd84ddacull, 0x55538cfaccff00d1ull, 0x48528011b0948b8cull,
+ 0x9e047ad7e345f82eull, 0xea77bef06ee770ffull, 0x2f1625670fc13669ull,
+ 0x0614686c869426acull, 0x4263ed823a3ff464ull, 0x57205a7ab3589b47ull,
+ 0xae6fc46b213f24adull, 0xd92b133f3de03e4eull, 0x1b49c24a315a589bull,
+ 0x1641c13873381bcbull, 0xbc680ada7bc99425ull, 0x962e9884a5cfbc9aull,
+ 0xfc8d12f60a960d70ull, 0x60acc868ed18ef4cull, 0x131130369aea5d14ull,
+ 0x2d99a5b0c747c87eull, 0x006b36583a369bb3ull, 0xe43fa6e6118a5135ull,
+ 0xa13dc05eb4947190ull, 0x0dbd7170d7733db8ull, 0x117ed7e7c3fb67d1ull,
+ 0xc05fe99ee2d72a49ull, 0xd971a25b9638db40ull, 0x1a1595594239d468ull,
+ 0xc1117392850a223cull, 0x567b5fc022d2dbd8ull, 0xc051007a92c5b4ebull,
+ 0xfb35572011cc0099ull, 0x398481616907810dull, 0x61d19ef25e8534f4ull,
+ 0x8a0ab03c2ee8c466ull, 0x879aa514c234af76ull, 0x59e5da579774a235ull,
+ 0xf339bd5a9bc466b3ull, 0xbbb5fd6744ab026dull, 0x3685c9f22b977202ull,
+ 0x7054359e03e5dc00ull, 0x9ba11f085239cfb0ull, 0x9c258687f8237562ull,
+ 0x52c7bf8fa3b510ddull, 0x3245e079b31ed0cfull, 0xbaee38c7ff9ff8d3ull,
+ 0xf702b3b9f17d5562ull, 0xcbca275dcc4c8563ull, 0xe817dbace005d9d1ull,
+ 0x62cee35005c6920aull, 0x19e049b90f1deac0ull, 0xb2a27a1659599f74ull,
+ 0x7dcef00df0911d5aull, 0x375522513603dd66ull, 0x5fa022da97813735ull,
+ 0xefbe57c20d849416ull, 0x5761929630a0e592ull, 0x11735043c953cc47ull,
+ 0xc0444be0a83526adull, 0x16ff5136b5f8463cull, 0xf037572c2a0a6631ull,
+ 0xb1bf8daad30464daull, 0x0f3e9e7e7f5718f7ull, 0xc26f2624e5a4cfe7ull,
+ 0xdfe8f4858c9b5ae4ull, 0xc64a1509f6fa82e3ull, 0x3024b220acb24aeaull,
+ 0xddcdfeddddb02ac0ull, 0x384c86c3d834c574ull, 0xdd48a571d904e099ull,
+ 0x77b35c744550a05full, 0xaaebdc6d81e85f71ull, 0xd4cdc0540f9bb0b1ull,
+ 0x845786af7af4df85ull, 0xdf2a91cae5e53887ull, 0x5689a3c4f6a58211ull,
+ 0xa705983a8cf6aa15ull, 0x2ce7fef09fbf2f52ull, 0x4a3b536548e84a62ull,
+ 0xd48a0872f8281a47ull, 0xf0929c3e8423dcf6ull, 0xe9ec071b044a5049ull,
+ 0x20e30c1b17decc36ull, 0x3342196a45fc2813ull, 0x6601e33746afb7f9ull,
+ 0xf18094d130754439ull, 0x61410dd1d38b4112ull, 0xd97d4dd8d8796b36ull,
+ 0x8080519147e9bc0bull, 0xcde438c11584e2daull, 0x409659a1955d24f1ull,
+ 0x5a09635f1b0950b1ull, 0x615472b965b1febeull, 0x6308e067525dc00aull,
+ 0xd4e705a44089e2d4ull, 0x32c18b2643fc9209ull, 0xaf2711534447a5faull,
+ 0x4dc4f0d23617cadcull, 0x6aa116ef692eb386ull, 0x0641dc0b655991bcull,
+ 0xc655966454469597ull, 0x4bdc0d1a749c0fe8ull, 0xc5292a61a7d3381eull,
+ 0x42474cc24eb65fdcull, 0x19dfc9eef2c6b173ull, 0xbece2ee30a19a199ull,
+ 0xaa03aa7cc68b778dull, 0xae54d2bec8db86f0ull, 0xdee3f48fb92a01e0ull,
+ 0xf6ae28526023c0a9ull, 0xa441cb9ea233763bull, 0x3a8bb4b73246ddddull,
+ 0x308ef2c844faa3c3ull, 0xd2862534fd1c8516ull, 0x62336f6f3b25ebe7ull,
+ 0x0b8e2ce60c336a45ull, 0x11eea1f2e867f171ull, 0x68df4903523972ecull,
+ 0x51ef4cb750c05824ull, 0x3ffae115cb4df2a8ull, 0x3ed1635fb51aca2full,
+ 0x0a5ac09fd6ff1cc6ull, 0x0a3dc76fde8ed9d6ull, 0x37991dde5dc2d8ddull,
+ 0x80ad6e13f95bacb2ull, 0xd4f8c7a6163005eeull, 0xa4760f083225d180ull,
+ 0x9b2b1a875fff004dull, 0x5cd00b66e7ea8576ull, 0x285dd80dec478452ull,
+ 0x4301b3a120112439ull, 0xfacbb68cff879fc8ull, 0xb17fdf84af6af6b8ull,
+ 0xf4489576c208d9f1ull, 0xadcc862c8794a6e9ull, 0x931685a40e83e54cull,
+ 0x1e40293bab01c580ull, 0x1f1ddf7fcad784faull, 0xcee722b26b856084ull,
+ 0x74254eb41c39938bull, 0xb9c26d9ac7ccebf4ull, 0x2e3ece246b08dfb9ull,
+ 0xdff60410981455ecull, 0xe06fa38bbc804e2bull, 0x72e53c52b534540cull,
+ 0xb2a5c05a02dfb2efull, 0x973133385002a2a5ull, 0xd61df455597c53ffull,
+ 0x39ac2ec534e5261aull, 0x388b7539c6bc0cabull, 0x00eac7043f732fc0ull,
+ 0xc089971e92fb21d9ull, 0x7af93f8fb4ffa503ull, 0xa8311b2372e353b6ull,
+ 0x1de496ca8266c9afull, 0xd6fa0b51dbdb16b0ull, 0xbd5630899991a5efull,
+ 0x0954a1e3168cbe0full, 0x53d09723537b9245ull, 0x86558cb92867272dull,
+ 0xfac85d100b83f026ull, 0x1e5ddb95f8562951ull, 0x48d27b92ad3668c8ull,
+ 0x19b58a99c930b7e6ull, 0xa9cda917a3de74e3ull, 0x7a4dd16ecb6e35eeull,
+ 0x4d84073f4c80e9d5ull, 0x9cffcfc074a95ba8ull, 0x15796372d28485ebull,
+ 0x77eda8df5717e9cdull, 0xadb965e1ab473c4eull, 0x5bc05659ffad6959ull,
+ 0xfb2402276ed63880ull, 0xd15fdddf2014850bull, 0xb538f37dfdd74592ull,
+ 0x1473396f3a8e2e82ull, 0x3ce41a21f6a5edf8ull, 0x754e82640cc4351aull,
+ 0xc7821b96aab95e73ull, 0xc242faaaf42ff463ull, 0x087e260edd00ac65ull,
+ 0x0dbe032817d193f5ull, 0xf9d10f96844a63c9ull, 0xbaf127ec85aa91ddull,
+ 0xce85e6a50ab6dabbull, 0xe7b56a161af5d24full, 0x57d1d79fcd6c5a19ull,
+ 0xec4dd2f05dfc2b28ull, 0x8d72216a18fe64a1ull, 0x72f14a085f222077ull,
+ 0x3bf038abd8b09b11ull, 0xc4265d7cc6cf1f44ull, 0x46398d2cdab1b0e7ull,
+ 0xb6e705d37dcfdc68ull, 0x362c11834aafd1e6ull, 0xf6ac98b7d8701107ull,
+ 0xd6649424ad114d7eull, 0xddd1c6e4c40ab551ull, 0xc9d284c8a132030full,
+ 0x824069eedb1f662aull, 0xc846b3ad4157904bull, 0x0a248c17d38481caull,
+ 0xe8745febc846831full, 0x00000000000025a8ull,
+
+# define TENS_P14_IDX (TENS_P13_IDX + TENS_P13_SIZE)
+# define TENS_P14_SIZE 852
+ [TENS_P14_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x41b5687d099f0001ull, 0x8c75ee63cbfd1b6eull, 0xd75296ad4b191ceaull,
+ 0x1eb5da9b2394d80aull, 0x5c79fed918a004edull, 0xed67a1b837e3b01cull,
+ 0x2a1a34d578d9a714ull, 0x6b1d35168fbe7f0dull, 0xa7825681e57c43eaull,
+ 0xd3e716e1c81d32e8ull, 0xa6d93d6558860b00ull, 0x0113232f83159c97ull,
+ 0x7321c3a0d6122269ull, 0xca4ca9d3be6a92f3ull, 0xc0e55163d1e276a5ull,
+ 0x7b7a78c1b05915d6ull, 0x62a3df4b0fae0ca4ull, 0x13030d1108abec6full,
+ 0x60dcc8f2d446338aull, 0x25e1f9f65f05d1d5ull, 0x7f8c711304a40beeull,
+ 0x589ff59a88f47ec0ull, 0xea5068a1308c3661ull, 0x06e87dff95fb108full,
+ 0xd4d4abdc1559e741ull, 0xee16907c01e092e4ull, 0xe73aabcb5a7b78e6ull,
+ 0xad372889146bb7e0ull, 0xfd49fc1d4f6b43c5ull, 0xd37392530f29f589ull,
+ 0xe2acfcc2c4745a56ull, 0xedd016cdd75ccbc7ull, 0xef82ccd3ac5a63e0ull,
+ 0x2bdabfc4b352496eull, 0x01b0197f5b3d0401ull, 0x29d9253dade96d3cull,
+ 0x73c56b1b19bebdbaull, 0x1f2b7f1e255e7b25ull, 0x6299c836a56a457eull,
+ 0xa2ca74c65c63cc78ull, 0xee571bea5c85fe93ull, 0x2db5f1d0508e2561ull,
+ 0xa9b87b99b1fde6a9ull, 0xf7260f074fb90a37ull, 0x56ee7e97ff58c5fdull,
+ 0x42e6f9cebab9fa46ull, 0x1b76d26778816f73ull, 0x4566519cfdb2c728ull,
+ 0xb9f6a95fae17dd8dull, 0x67160dea1cd533a1ull, 0xfcd8f8f914534bacull,
+ 0x708b1f0af3f2901dull, 0x9457a1df8829063bull, 0x36bb93358f872aa1ull,
+ 0xd889d109b5672c0eull, 0x933066727ec63a6aull, 0x8239ab6839b6d457ull,
+ 0xbe0d7a1fef2e2506ull, 0x05f655224251b635ull, 0x032868910ef0bd55ull,
+ 0x9815fbac2c42b664ull, 0x814e379c471fd611ull, 0xa4a25bda7dd8349dull,
+ 0x01b9e39d9886b84cull, 0xae31cbc95a7ce1a2ull, 0x83ef8faf86d07f32ull,
+ 0x58470fdfb66b5b76ull, 0x5161888996d59b73ull, 0xfc8e0fc6dc400cf7ull,
+ 0x09a08e56af693670ull, 0x74f682e191737de6ull, 0x7f8ac56d0e03923full,
+ 0x8e05e49a7400cfd4ull, 0x384e11644cebea3cull, 0xb50ae05eb2e43d8cull,
+ 0xa40061230f0b3ed9ull, 0x4e9a193464137137ull, 0xd9621be605404100ull,
+ 0x5c347ebb9329a255ull, 0xe684346b75cbeb1bull, 0xba6a9753840fee55ull,
+ 0x60505b7bf43836f6ull, 0xfd6d475d334a9278ull, 0x267375aa5db94761ull,
+ 0x024f6d63c110e160ull, 0xa99b4c192ec96610ull, 0x338cfd90b915c9f4ull,
+ 0xb9e51a09f02ea846ull, 0xfae31d88ae928fb1ull, 0x8475dd261a3db721ull,
+ 0x7ad4c4075769489dull, 0x34e275c80a49e9f0ull, 0x1d63114a3d075d83ull,
+ 0x6b98e94772a96415ull, 0xd50fdc361d500b5full, 0x87751275141e5085ull,
+ 0x2278809ee7843834ull, 0x947aead2b15c52eeull, 0x5197b744fedb7b02ull,
+ 0x8849d0a664e09ba8ull, 0x11ecb91323beaa85ull, 0x5d9848480f7ed667ull,
+ 0x588290e99f6331eaull, 0x7e09e9e5a24d64d1ull, 0x03a501df32592033ull,
+ 0xbb3df73827c270a6ull, 0x4190833c3c7c5a70ull, 0x80e5d89b7d4bf9f4ull,
+ 0xfaefb663a7fc6194ull, 0xd3b6adcd62e52b49ull, 0x1f2cf73a809646fcull,
+ 0x531e4bfbb765ed4full, 0xaf12d1a692cd05f2ull, 0x38da107422ee30f3ull,
+ 0x1a725608ed6447bbull, 0x7a3c6f54aff222d3ull, 0x7b0e8d12bca79a56ull,
+ 0x6e34d6fb1c4660c5ull, 0xfe9dc99c6f481a9full, 0xd8489ea0f888db82ull,
+ 0xc0dea28184b4c0faull, 0xae30e887977a8583ull, 0x1d4848cb8c1cbcecull,
+ 0xd011b0fc0ee0d137ull, 0x478d7dd494b5fd49ull, 0xacab62ad3d67f2e7ull,
+ 0x1dfc7df50ab4e62aull, 0x870b0e75d22e4553ull, 0x1b73bf6d49b7b001ull,
+ 0xdc9f073712807ffdull, 0xc0e2f2506f3e5852ull, 0x4d96a55a93e62e4aull,
+ 0x83a126dbc1d0e185ull, 0xefbfd043190b917bull, 0x8f25b6ddc7df1669ull,
+ 0x476c17a62062eac9ull, 0x25460383cb60f278ull, 0xda8c05be0e85e996ull,
+ 0x692062346f678a34ull, 0x1947b69af59be929ull, 0x90fd83220ebfa11bull,
+ 0xd699b1ec15c1e9bfull, 0x7001d002b2f0343full, 0xc0778ab5cf76eaaaull,
+ 0xb7b008e25173eda8ull, 0x505d3f4d4e00e4c6ull, 0x1c9d4e1299dd341aull,
+ 0x474c5e954ffb6978ull, 0xda19f9386e9ca6ddull, 0x98dc318ee2dda6e0ull,
+ 0x3f67b836da455e54ull, 0xa97e9a6421e4181cull, 0x527a08bb1e17f655ull,
+ 0x682972ad1712dc21ull, 0xccbeadf10042d256ull, 0x861e99e0ca497b96ull,
+ 0xeeb0f6500d8aa585ull, 0x506af77edcc3c3daull, 0x7c9d60be5deb9768ull,
+ 0x37b37e95e9d978b7ull, 0x42747f7577ad0b94ull, 0x6d5fd2fe07be42c4ull,
+ 0x0d8fc27d4c8c5da9ull, 0x0ccf60230f2fd50full, 0x3b1101bd5b56053full,
+ 0xc0feca2756d34906ull, 0xc4888da47602a150ull, 0x56d10633419abe54ull,
+ 0x8db14123c76120edull, 0x741e8f76b656e675ull, 0x96be6f21d297b94eull,
+ 0x9b409e273662439dull, 0x35fff92a6626574dull, 0x69e02439bf558205ull,
+ 0x6400fd4cbe6838b7ull, 0x1f4b158aa00f64caull, 0x04cca5589e2052aeull,
+ 0x58da644cfb5ee69eull, 0x8ab1940196f26e1full, 0xed8bf908bee1e16bull,
+ 0xd50babab2f2809a4ull, 0x6b0a89296e57f7e6ull, 0xb54a4cfcf7356431ull,
+ 0x6f9fd6cb9a1d0ac4ull, 0x3b42f469836bfbf8ull, 0x40111b6b8bd32129ull,
+ 0xb345d9557c278fb1ull, 0xd32cd13cff1fd188ull, 0x3789f792f7ec3aa0ull,
+ 0x4d79a4bfab707fa4ull, 0xd9c24d8eb3a28cebull, 0x06e2eb3e7134dadcull,
+ 0xb379d811d7c04f76ull, 0x8c94fc332b3b0ebcull, 0xc06c5d01a28b53abull,
+ 0x7fea91cad900432aull, 0x64845f086d30b008ull, 0xfde4687d796f5349ull,
+ 0xe0046c56f888fe67ull, 0xce98cb11ae482177ull, 0x1feb440084590c46ull,
+ 0xff2f16116e1ba29bull, 0x3159ca8cf73f3e9cull, 0x56f0ed4634845918ull,
+ 0xd9a16a01b7d10c32ull, 0x3cee3e24405b9e91ull, 0x2ab396b48739e4a6ull,
+ 0x09835dfd3f1b7871ull, 0x1592b74a8c7a489full, 0x0e8d3f3705df7c81ull,
+ 0x68b29622a61ff273ull, 0x43ff84a6259cd337ull, 0x566ed88381cf8fe9ull,
+ 0x35c7942848427fc6ull, 0xa97e8c8bcfd2fb59ull, 0x32ddca23750aaed8ull,
+ 0x96fbfff9aa8108efull, 0xe3cdf588a1d039aaull, 0xcd6b3fdb47e77e00ull,
+ 0x9a522152e72a9a80ull, 0xef175610eda06283ull, 0x339fe6c4a670cfa1ull,
+ 0xc2d7f53b2dfbf3eeull, 0xcc47e4b092a44e27ull, 0xd64f83c9dfa212bcull,
+ 0xb51319bf997e5475ull, 0x1fc2c7b69fffe599ull, 0x832169ddef5605e7ull,
+ 0xbf921dc8feb6be4eull, 0x72759f8d60bdfb1dull, 0x020eebed3546efa0ull,
+ 0xdb20a2fecaab3d64ull, 0xb2b62bddba1218f6ull, 0x8fde5cfa3101eff0ull,
+ 0xa52114d22e319213ull, 0xdf08b1dd87eead3full, 0x746f34d0a5387642ull,
+ 0x4cc40317d76c4844ull, 0xb7d76071e4f689c9ull, 0x6e1c79155fe0b4a2ull,
+ 0x3efb7d71c7d43f53ull, 0x35a75f5f068dd906ull, 0x750f4607652d7770ull,
+ 0x36c2cf8e64a1656cull, 0x9348ef93214d758bull, 0x9674b7f3e4058978ull,
+ 0xbdfaba8f10570b0bull, 0xa92b261fcef09dd7ull, 0xcbebb81f071c21b6ull,
+ 0x44228cd6f427ed6cull, 0x5036c46065e56fcfull, 0xccfd848bad919defull,
+ 0x7527dca361d158a6ull, 0x508550754cf30459ull, 0x3540f5aaa70dfd09ull,
+ 0xb5ba3d4e35577adbull, 0xcdfb689f35736c4full, 0x97ab0dcaefe8fa82ull,
+ 0x77a7fe9c51bd2ff3ull, 0x3d618b813107846cull, 0xfc5e9651bca797a4ull,
+ 0xf7e8791fe2e08fbcull, 0x7c426f9d772f1cc0ull, 0x0080c3ab08d56f88ull,
+ 0xe6d46ec60deea663ull, 0x6b681d9d7dca4eb7ull, 0x4af0e0f2da06730bull,
+ 0x52097463038bf468ull, 0xbc09bb9aca19d302ull, 0x3ded4433aa55aeb1ull,
+ 0x3e4b7865f27938baull, 0x7ef9631428296be7ull, 0xdf0b6b477a1d55ccull,
+ 0xcedda5bdcde11852ull, 0x72ca1a8bf00a0eb3ull, 0xb002fdcc5241b572ull,
+ 0xc4878862ff8898b3ull, 0xbf4bca29b3e85372ull, 0xf2d831897e1fef45ull,
+ 0x3cdf9e050f5427afull, 0xf65c06ac75bae885ull, 0xa3145eac9c71a700ull,
+ 0x76255bbfde63bab2ull, 0x4c6ad3d06e817be6ull, 0xe95ef2f825ab9935ull,
+ 0xd54f78de11cd095aull, 0xb3829dcba001ae7eull, 0x18eb9c9e5abd18bdull,
+ 0xe3e3556cada3c504ull, 0x5191ac5fd35479aaull, 0xc8d1d9d3221821acull,
+ 0x088c3fc8313a8c51ull, 0xb154abedc146a264ull, 0x349ec09392755bc5ull,
+ 0x41d5886cf94aba57ull, 0x36aba94b0a5ad8b2ull, 0xa9ad229f883a6758ull,
+ 0x0546172f5d64069aull, 0xc3808ea40366da16ull, 0x70f0a2350b172403ull,
+ 0x4fceb827fa816e66ull, 0x167b56d5a65fcfeaull, 0xfec36bcdfe2b9fb2ull,
+ 0xcd96320fa84c4cc9ull, 0x09eda8b83e128584ull, 0x7ec7e17b91eca525ull,
+ 0xc14032f4bc45bedcull, 0x2eb20bc09be689a7ull, 0x14ef835fffdf1efcull,
+ 0xcd778dd8c6966c59ull, 0x23d477155feb0f3bull, 0x5722a550d64b87c8ull,
+ 0x315a1a8b62883198ull, 0x4b7e9d7a648e17e6ull, 0x67caca842ba43d28ull,
+ 0x6e660159741f0398ull, 0x3dde3c453e16e1a9ull, 0xc7eb0aefa53e56aeull,
+ 0x78751d733f39f33eull, 0x626770f745816df8ull, 0x909e87f4cb17d28dull,
+ 0xc1dcf32893a86abaull, 0xd895d0421a1e4ce2ull, 0xbb00eaf5b9f6dd69ull,
+ 0xca609578acc37687ull, 0xf8b86d4c5b490d39ull, 0x39419f6df2737ef0ull,
+ 0x72524a0369267bc0ull, 0xdbc01e936eb060c4ull, 0x83984d54291035b1ull,
+ 0xe08cbc20f673ad85ull, 0x584803a61fb24915ull, 0x4088ddb5e15bbcd7ull,
+ 0x2c18041ad4c22542ull, 0xb2ba69b4a51372d1ull, 0xcd11c2962299283full,
+ 0xac54df2325dcd6f3ull, 0x77e16e1d24a3a55eull, 0xb99d85c0b3cd415bull,
+ 0xe91154e3497befc7ull, 0xb55100aa7365cd8bull, 0xfc0927a60ee699ebull,
+ 0x8acaa910efb374deull, 0xda3f000683b40e3dull, 0xc6ce1b758590a089ull,
+ 0xfda2f7f354f6ff20ull, 0xd0763b6dd2ab58f6ull, 0x2519622d6caf2515ull,
+ 0x9863638fc3714057ull, 0x09ea4a4dea00bb4full, 0x6b01fe5fe69de96dull,
+ 0x529e32ec960161a5ull, 0x01a37eeaf8260ae9ull, 0x5aa0716f69710577ull,
+ 0x4260fedacb3fb1daull, 0x76012f75a33fb790ull, 0x130f09ae24c0e5beull,
+ 0x5c8ecb762e8323dcull, 0x401b5f5c17cb8f12ull, 0x47e1560a5f0a63e0ull,
+ 0xee1377d4dc57a786ull, 0x0aa294b9228e7ee5ull, 0x55b0fe2faea6c534ull,
+ 0xf108b772922d318aull, 0xdfb69702f15bddf6ull, 0x90e1db66cd438a4eull,
+ 0x568ef6cb584ce4a1ull, 0x6da376ba69e55f9dull, 0x45c7e2945ca6c109ull,
+ 0xcf5b6c0cc977b3e9ull, 0x11b487ae1d694499ull, 0xbcb3cc6ecf8339acull,
+ 0x046b107150b828e0ull, 0x2c6159465703ed0dull, 0xa908dbd0720d1610ull,
+ 0x22c076e2742bbe33ull, 0x1d0cefa448966a66ull, 0x601352bf1dde819full,
+ 0xa585cc4ab9370c39ull, 0x5a2f7206eb857f94ull, 0x49cd0f1f3fae6b58ull,
+ 0x1b89d47678e5fb3dull, 0xed82945b74e9e65bull, 0x2941c4d9b74e6483ull,
+ 0x565c18dc7e087accull, 0xbf4ccd3d1a09f2e5ull, 0xa522631dd304e977ull,
+ 0x4517109b6123378eull, 0x4bf1a506b7e4285aull, 0x683172f8625803c2ull,
+ 0x3f8a2b11c84e7354ull, 0xed4204917dd12b89ull, 0x9853fb978c698b0bull,
+ 0xb697e1c99631777bull, 0x510381105f028f05ull, 0x30e255e39055f055ull,
+ 0xb990321ee2d0c1b6ull, 0xff4dc144a8fdf4d1ull, 0x148999e0521a3056ull,
+ 0xa9c96852a8111c66ull, 0x4b394a948157f508ull, 0x94ec2e93a0dc4df1ull,
+ 0x8fc283776e6afa56ull, 0xc435186ff72ffa04ull, 0x8d037f6ff91488b7ull,
+ 0x48757727a899ec1eull, 0xb8cf377d4101b612ull, 0xb4570569a5a54e68ull,
+ 0x063d9cfd2ac5a0a0ull, 0xf1a5884c7c504c74ull, 0x8d0b91bf0a9b1955ull,
+ 0x79ff5361e5f6862full, 0xc6fd31fb0ed3d38full, 0x85b9c6489fe131c7ull,
+ 0x8e77e86b8febf2b4ull, 0x56429986992ba80eull, 0x608cdda56848879aull,
+ 0x754b300e3e0d106eull, 0xafd5195b25200576ull, 0xe81f09395d37aad9ull,
+ 0xdeeea20ae00a390eull, 0xb5d51155f5fef0beull, 0x9e72ebcf6e27d173ull,
+ 0xb966f7bab776e978ull, 0x726c840809520238ull, 0x65dce5a23347ebc5ull,
+ 0x8c92d7403ec78337ull, 0x32caec933cdde3feull, 0x411be811d20379aeull,
+ 0x72fa1bbd41756580ull, 0x84c42f04a92125b3ull, 0x3a25922cdd4ee5feull,
+ 0x49ad3be096446853ull, 0x1c841afe2880366dull, 0xfb905fe1f1e09019ull,
+ 0x3ba9d0c9a451ad59ull, 0xa42419f256db2e9cull, 0x3c9a3ca5e921e7a0ull,
+ 0xcec7d091ad8ea375ull, 0x477ef58f99bdb940ull, 0xb2598b8d8a4933c7ull,
+ 0xcfac1e1cf5659df7ull, 0xe2a04aab339f8748ull, 0x45bc6f37e122b03full,
+ 0x9c75aaa0c9feeb30ull, 0x0ea0585dc13c174eull, 0x3a96bd5adc58bbb4ull,
+ 0x3c7a714d20251482ull, 0x6cb83b6b696897ebull, 0x3b496b5fa37de406ull,
+ 0x380dd38237e75d6aull, 0xda26fac90e1a513cull, 0x12b5c6eaf2458364ull,
+ 0x1ff1fcbf79ce9e47ull, 0x59a6a7babe7c6e86ull, 0x947614538d70f515ull,
+ 0x8768ffb26b04e425ull, 0x3f9e84071ca5f425ull, 0x5f8f67563b641184ull,
+ 0x56bc212062b1a5a5ull, 0x17f2fa18d1e5da68ull, 0xa1bc9c068cce5e2dull,
+ 0x892df1af8e290fb1ull, 0xb43e5517ad10b8c8ull, 0x4407c38fd0597409ull,
+ 0xfea9c9b64a020d81ull, 0xd5b2aaf9d8e0e7d6ull, 0xda44ed4ade5e9b40ull,
+ 0x87aa3ca045d6bf41ull, 0x4708acc8c62d12fcull, 0x0d1227ff10212e26ull,
+ 0x5da02550feeb5742ull, 0x1d56e5e1d66668e7ull, 0xae1e0bef32c215ecull,
+ 0x58c0e9227f048b7eull, 0x58251aac2aea8619ull, 0xa1fea536bbe10425ull,
+ 0xd233eb7d2e1d9667ull, 0xb0693c67cf435c0bull, 0x903ec9f061d918eaull,
+ 0x0efb1788d6c4e8acull, 0x1709d878b0098f5bull, 0x3f6ce1b73c12b35eull,
+ 0x8a8f7dbba1b3ff54ull, 0x73e8563e37608d6aull, 0x64e00749a3330540ull,
+ 0x8d5caaf9ebbfcab9ull, 0xedb2bd943bc87c7eull, 0xe656dec322f8f62dull,
+ 0x670c1626c5683222ull, 0x4237542f94089e7full, 0x2fc4e53047d29440ull,
+ 0x8b288dac8419441eull, 0xa7afb4e97f9245f9ull, 0x082adef78a15650dull,
+ 0x043c62de3104ef19ull, 0x7ecd06350aff3dc5ull, 0xe0600fade7e80a8bull,
+ 0x81ebf4e04d8e81ccull, 0x7b372af7f587e30full, 0xdee11c6f2d8f8ca0ull,
+ 0xf8adc426d3624b1cull, 0x5c22de4fca9debedull, 0xfae3186b3634f778ull,
+ 0xd7bfa75facf8b595ull, 0xbbfe3cf6003cd316ull, 0xc51055a1b023cb50ull,
+ 0x93869a770063cffdull, 0xfbceeb1051e022d4ull, 0x109defc95187457eull,
+ 0xe13cfde2673892d8ull, 0xc09c8134d4aa3272ull, 0x0327181bbf89ad5bull,
+ 0xaa21b63209511ec7ull, 0xe41885b5d7e72186ull, 0x493d278946713f9cull,
+ 0xd5d22a5c1386c526ull, 0xcf59281ccefddfc4ull, 0x4ebe43f692973ea6ull,
+ 0x6cf4897deac5c6adull, 0x82ce562ad95082a0ull, 0x28d8f0db28e5e9bdull,
+ 0x707b0166ddf06e81ull, 0xfbf5756a7dae3f00ull, 0x4f114102035a4680ull,
+ 0x5190fedfe7ba4b33ull, 0xe5f1bc49106a7594ull, 0xd7a1a766aae3ad67ull,
+ 0x9120a214040ee971ull, 0x1edc87eaf415b374ull, 0xc6ad637d17aab43cull,
+ 0xd90303c7885858c1ull, 0x3ff4eb0ebfd4b70bull, 0xd81eea30344a9a88ull,
+ 0x5adef0ec95925446ull, 0x20bbd8c3abb5f5e7ull, 0xe6944262c1c22cceull,
+ 0x80024021c5acdb23ull, 0x94b30c812232c635ull, 0x78569acd55f07648ull,
+ 0x4dd6b5289696ea39ull, 0xde5853b31c3e1b40ull, 0x6eb5a7d88a2c3679ull,
+ 0x8f9cf09656bda89aull, 0x6481c7e7fda86d5bull, 0x15bfb45d50a6a7d5ull,
+ 0xc057d45d4f9a5381ull, 0xa0009f004fb10024ull, 0xac420f745e1ca0ddull,
+ 0xf0d4a615cfbb38bdull, 0x0e3aef8419bf0318ull, 0x166c1e3ecb3d7b20ull,
+ 0x3bfacf9f58272fddull, 0x63a13528c0f5ce46ull, 0xa020ca8cea59e333ull,
+ 0x3dbb5a3daadd116bull, 0x747f55eae5523f47ull, 0x64d520fb0922171eull,
+ 0x07ce951b6c709e84ull, 0x7508eb6d35fdc402ull, 0xb0d11c39c495a8faull,
+ 0x57447ef081313d65ull, 0xf72301f3a7b61e26ull, 0x45a3a7c5bb096315ull,
+ 0x00432f88a903a44bull, 0xeb4e1b6619081987ull, 0x6d245171bb7b66bdull,
+ 0x0d89bd0bde4182f5ull, 0xf70d8a6087f4de6cull, 0x08a274499a87855bull,
+ 0xd49640174ac7720aull, 0x4db3488cb0d9ddacull, 0xd07b745bfe397d44ull,
+ 0x6e9d567d197dcb7bull, 0x9143fef1e3b90812ull, 0x115ff96db9e002acull,
+ 0x5b61c9c8f60a2201ull, 0xb14a44a709abab2full, 0x843c79970ca19c73ull,
+ 0x5e3fc18ce3a9bbe6ull, 0x764df59d0c0404eeull, 0x4ad0ba3c990ec2c2ull,
+ 0xe599647d05e8be0full, 0x4d0c2990c19d365dull, 0xb680a72de5a9d9acull,
+ 0x6d6c02674ce2e5ddull, 0xbd6078e006f9c25bull, 0xd742fa41b5fcdc81ull,
+ 0xc691adc0cccc2399ull, 0xea73b0c3215ad82cull, 0xf499e0a6a511e5b0ull,
+ 0xd94440a253e27ab0ull, 0x9a6e364447752521ull, 0x8f8b301dab113708ull,
+ 0x00000000058a42a3ull,
+#endif
+};
+
+#else
+# error "mp_limb_t size " BITS_PER_MP_LIMB "not accounted for"
+#endif
+
+/* Each of array variable above defines one mpn integer which is a power of 10.
+ This table points to those variables, indexed by the exponent. */
+
+const struct mp_power _fpioconst_pow10[FPIOCONST_POW10_ARRAY_SIZE] =
+{
+ { TENS_P0_IDX, TENS_P0_SIZE, 4, },
+ { TENS_P1_IDX, TENS_P1_SIZE, 7, 4 },
+ { TENS_P2_IDX, TENS_P2_SIZE, 14, 10 },
+ { TENS_P3_IDX, TENS_P3_SIZE, 27, 24 },
+ { TENS_P4_IDX, TENS_P4_SIZE, 54, 50 },
+ { TENS_P5_IDX, TENS_P5_SIZE, 107, 103 },
+ { TENS_P6_IDX, TENS_P6_SIZE, 213, 210 },
+ { TENS_P7_IDX, TENS_P7_SIZE, 426, 422 },
+ { TENS_P8_IDX, TENS_P8_SIZE, 851, 848 },
+ { TENS_P9_IDX, TENS_P9_SIZE, 1701, 1698 },
+ { TENS_P10_IDX, TENS_P10_SIZE, 3402, 3399 },
+#if FPIOCONST_HAVE_EXTENDED_RANGE
+ { TENS_P11_IDX, TENS_P11_SIZE, 6804, 6800 },
+ { TENS_P12_IDX, TENS_P12_SIZE, 13607, 13604 },
+ { TENS_P13_IDX, TENS_P13_SIZE, 27214, 27210 },
+ { TENS_P14_IDX, TENS_P14_SIZE, 54427, 54424 },
+#endif
+};
diff --git a/REORG.TODO/stdlib/fpioconst.h b/REORG.TODO/stdlib/fpioconst.h
new file mode 100644
index 0000000000..c05f8e7bac
--- /dev/null
+++ b/REORG.TODO/stdlib/fpioconst.h
@@ -0,0 +1,88 @@
+/* Header file for constants used in floating point <-> decimal conversions.
+ Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _FPIOCONST_H
+#define _FPIOCONST_H
+
+#include <float.h>
+#include <math.h>
+#include <gmp.h>
+
+
+/* These values are used by __printf_fp, where they are noncritical (if the
+ value is not large enough, it will just be slower); and by
+ strtof/strtod/strtold, where it is critical (it's used for overflow
+ detection).
+
+ XXX These should be defined in <float.h>. For the time being, we have the
+ IEEE754 values here. */
+
+#if !defined __NO_LONG_DOUBLE_MATH && __LDBL_MAX_EXP__ > 1024
+# define LDBL_MAX_10_EXP_LOG 12 /* = floor(log_2(LDBL_MAX_10_EXP)) */
+#else
+# define LDBL_MAX_10_EXP_LOG 8 /* = floor(log_2(LDBL_MAX_10_EXP)) */
+#endif
+#define DBL_MAX_10_EXP_LOG 8 /* = floor(log_2(DBL_MAX_10_EXP)) */
+#define FLT_MAX_10_EXP_LOG 5 /* = floor(log_2(FLT_MAX_10_EXP)) */
+
+/* On some machines, _Float128 may be ABI-distinct from long double (e.g
+ IBM extended precision). */
+#include <bits/floatn.h>
+
+#if __HAVE_DISTINCT_FLOAT128
+# define FLT128_MAX_10_EXP_LOG 12 /* = floor(log_2(FLT128_MAX_10_EXP)) */
+#endif
+
+/* For strtold, we need powers of 10 up to floor (log_2 (LDBL_MANT_DIG
+ - LDBL_MIN_EXP + 2)). When _Float128 is enabled in libm and it is
+ ABI-distinct from long double (e.g. on powerpc64le), we also need powers
+ of 10 up to floor (log_2 (FLT128_MANT_DIG - FLT128_MIN_EXP + 2)). */
+#define FPIOCONST_HAVE_EXTENDED_RANGE \
+ ((!defined __NO_LONG_DOUBLE_MATH && __LDBL_MAX_EXP__ > 1024) \
+ || __HAVE_DISTINCT_FLOAT128)
+
+#if FPIOCONST_HAVE_EXTENDED_RANGE
+# define FPIOCONST_POW10_ARRAY_SIZE 15
+#else
+# define FPIOCONST_POW10_ARRAY_SIZE 11
+#endif
+
+/* The array with the number representation. */
+extern const mp_limb_t __tens[] attribute_hidden;
+
+/* Table of powers of ten. This is used by __printf_fp and by
+ strtof/strtod/strtold. */
+struct mp_power
+ {
+ size_t arrayoff; /* Offset in `__tens'. */
+ mp_size_t arraysize; /* Size of the array. */
+ int p_expo; /* Exponent of the number 10^(2^i). */
+ int m_expo; /* Exponent of the number 10^-(2^i-1). */
+ };
+extern const struct mp_power _fpioconst_pow10[FPIOCONST_POW10_ARRAY_SIZE]
+ attribute_hidden;
+
+/* The constants in the array `_fpioconst_pow10' have an offset. */
+#if BITS_PER_MP_LIMB == 32
+# define _FPIO_CONST_OFFSET 2
+#else
+# define _FPIO_CONST_OFFSET 1
+#endif
+
+
+#endif /* fpioconst.h */
diff --git a/REORG.TODO/stdlib/gen-fpioconst.c b/REORG.TODO/stdlib/gen-fpioconst.c
new file mode 100644
index 0000000000..e8b3258d1b
--- /dev/null
+++ b/REORG.TODO/stdlib/gen-fpioconst.c
@@ -0,0 +1,108 @@
+/* Generate data for fpioconst.c.
+ Copyright (C) 2012-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gmp.h>
+#include <stdint.h>
+
+int
+main (void)
+{
+ FILE *out32 = fopen ("fpioconst-32", "w");
+ if (out32 == NULL)
+ abort ();
+ FILE *out64 = fopen ("fpioconst-64", "w");
+ if (out64 == NULL)
+ abort ();
+ FILE *outtable = fopen ("fpioconst-table", "w");
+ if (outtable == NULL)
+ abort ();
+ mpz_t p;
+ mpz_init (p);
+ for (int i = 0; i <= 14; i++)
+ {
+ int j = 1 << i;
+ mpz_ui_pow_ui (p, 10, j - 1);
+ int exp_m = mpz_sizeinbase (p, 2);
+ mpz_ui_pow_ui (p, 10, j);
+ int exp_p = mpz_sizeinbase (p, 2);
+ int size32 = 2 + (exp_p + 31) / 32;
+ int size64 = 1 + (exp_p + 63) / 64;
+ uint32_t data32[size32];
+ uint64_t data64[size64];
+ memset (data32, 0, sizeof data32);
+ memset (data64, 0, sizeof data64);
+ mpz_export (data32 + 2, NULL, -1, 4, 0, 0, p);
+ mpz_export (data64 + 1, NULL, -1, 8, 0, 0, p);
+ if (i == 0)
+ {
+ fprintf (out32, "#define TENS_P%d_IDX\t0\n", i);
+ fprintf (out64, "#define TENS_P%d_IDX\t0\n", i);
+ }
+ else
+ {
+ fprintf (out32, "#define TENS_P%d_IDX\t"
+ "(TENS_P%d_IDX + TENS_P%d_SIZE)\n",
+ i, i - 1, i - 1);
+ fprintf (out64, "#define TENS_P%d_IDX\t"
+ "(TENS_P%d_IDX + TENS_P%d_SIZE)\n",
+ i, i - 1, i - 1);
+ }
+ fprintf (out32, "#define TENS_P%d_SIZE\t%d\n", i, size32);
+ fprintf (out64, "#define TENS_P%d_SIZE\t%d\n", i, size64);
+ for (int k = 0; k < size32; k++)
+ {
+ if (k == 0)
+ fprintf (out32, " [TENS_P%d_IDX] = ", i);
+ else if (k % 6 == 5)
+ fprintf (out32, "\n ");
+ else
+ fprintf (out32, " ");
+ fprintf (out32, "0x%08"PRIx32",", data32[k]);
+ }
+ for (int k = 0; k < size64; k++)
+ {
+ if (k == 0)
+ fprintf (out64, " [TENS_P%d_IDX] = ", i);
+ else if (k % 3 == 2)
+ fprintf (out64, "\n ");
+ else
+ fprintf (out64, " ");
+ fprintf (out64, "0x%016"PRIx64"ull,", data64[k]);
+ }
+ fprintf (out32, "\n\n");
+ fprintf (out64, "\n\n");
+ const char *t = (i >= 10 ? "\t" : "\t\t");
+ if (i == 0)
+ fprintf (outtable, " { TENS_P%d_IDX, TENS_P%d_SIZE,%s%d,\t },\n",
+ i, i, t, exp_p);
+ else
+ fprintf (outtable, " { TENS_P%d_IDX, TENS_P%d_SIZE,%s%d,\t%5d },\n",
+ i, i, t, exp_p, exp_m);
+ }
+ if (fclose (out32) != 0)
+ abort ();
+ if (fclose (out64) != 0)
+ abort ();
+ if (fclose (outtable) != 0)
+ abort ();
+ return 0;
+}
diff --git a/REORG.TODO/stdlib/gen-tst-strtod-round.c b/REORG.TODO/stdlib/gen-tst-strtod-round.c
new file mode 100644
index 0000000000..d792a245be
--- /dev/null
+++ b/REORG.TODO/stdlib/gen-tst-strtod-round.c
@@ -0,0 +1,191 @@
+/* Generate table of tests in tst-strtod-round.c from
+ tst-strtod-round-data.
+ Copyright (C) 2012-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Compile this program as:
+
+ gcc -std=gnu11 -O2 -Wall -Wextra gen-tst-strtod-round.c -lmpfr \
+ -o gen-tst-strtod-round
+
+ (use of current MPFR version recommended) and run it as:
+
+ gen-tst-strtod-round tst-strtod-round-data tst-strtod-round-data.h
+
+ The output file will be generated as tst-strtod-round-data.h
+*/
+
+
+#define _GNU_SOURCE
+#include <assert.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpfr.h>
+
+/* Work around incorrect ternary value from mpfr_strtofr
+ <https://sympa.inria.fr/sympa/arc/mpfr/2012-08/msg00005.html>. */
+#define WORKAROUND
+
+static int
+string_to_fp (mpfr_t f, const char *s, mpfr_rnd_t rnd)
+{
+#ifdef WORKAROUND
+ mpfr_t f2;
+ mpfr_init2 (f2, 100000);
+ int r0 = mpfr_strtofr (f2, s, NULL, 0, rnd);
+ int r = mpfr_set (f, f2, rnd);
+ r |= mpfr_subnormalize (f, r, rnd);
+ mpfr_clear (f2);
+ return r0 | r;
+#else
+ int r = mpfr_strtofr (f, s, NULL, 0, rnd);
+ r |= mpfr_subnormalize (f, r, rnd);
+ return r;
+#endif
+}
+
+void
+print_fp (FILE *fout, mpfr_t f, const char *suffix)
+{
+ if (mpfr_inf_p (f))
+ mpfr_fprintf (fout, "\t%sINF%s", mpfr_signbit (f) ? "-" : "", suffix);
+ else
+ mpfr_fprintf (fout, "\t%Ra%s", f, suffix);
+}
+
+static void
+round_str (FILE *fout, const char *s, int prec, int emin, int emax,
+ bool ibm_ld)
+{
+ mpfr_t f;
+ mpfr_set_default_prec (prec);
+ mpfr_set_emin (emin);
+ mpfr_set_emax (emax);
+ mpfr_init (f);
+ int r = string_to_fp (f, s, MPFR_RNDD);
+ if (ibm_ld)
+ {
+ assert (prec == 106 && emin == -1073 && emax == 1024);
+ /* The maximum value in IBM long double has discontiguous
+ mantissa bits. */
+ mpfr_t max_value;
+ mpfr_init2 (max_value, 107);
+ mpfr_set_str (max_value, "0x1.fffffffffffff7ffffffffffffcp+1023", 0,
+ MPFR_RNDN);
+ if (mpfr_cmpabs (f, max_value) > 0)
+ r = 1;
+ mpfr_clear (max_value);
+ }
+ mpfr_fprintf (fout, "\t%s,\n", r ? "false" : "true");
+ print_fp (fout, f, ",\n");
+ string_to_fp (f, s, MPFR_RNDN);
+ print_fp (fout, f, ",\n");
+ string_to_fp (f, s, MPFR_RNDZ);
+ print_fp (fout, f, ",\n");
+ string_to_fp (f, s, MPFR_RNDU);
+ print_fp (fout, f, "");
+ mpfr_clear (f);
+}
+
+static void
+round_for_all (FILE *fout, const char *s)
+{
+ static const struct fmt {
+ int prec;
+ int emin;
+ int emax;
+ bool ibm_ld;
+ } formats[] = {
+ { 24, -148, 128, false },
+ { 53, -1073, 1024, false },
+ /* This is the Intel extended float format. */
+ { 64, -16444, 16384, false },
+ /* This is the Motorola extended float format. */
+ { 64, -16445, 16384, false },
+ { 106, -1073, 1024, true },
+ { 113, -16493, 16384, false },
+ };
+ mpfr_fprintf (fout, " TEST (\"");
+ const char *p;
+ for (p = s; *p; p++)
+ {
+ fputc (*p, fout);
+ if ((p - s) % 60 == 59 && p[1])
+ mpfr_fprintf (fout, "\"\n\t\"");
+ }
+ mpfr_fprintf (fout, "\",\n");
+ int i;
+ int n_formats = sizeof (formats) / sizeof (formats[0]);
+ for (i = 0; i < n_formats; i++)
+ {
+ round_str (fout, s, formats[i].prec, formats[i].emin,
+ formats[i].emax, formats[i].ibm_ld);
+ if (i < n_formats - 1)
+ mpfr_fprintf (fout, ",\n");
+ }
+ mpfr_fprintf (fout, "),\n");
+}
+
+int
+main (int argc, char **argv)
+{
+ char *p = NULL;
+ size_t len;
+ ssize_t nbytes;
+ FILE *fin, *fout;
+ char *fin_name, *fout_name;
+
+ if (argc < 3)
+ {
+ fprintf (stderr, "Usage: %s <input> <output>\n", basename (argv[0]));
+ return EXIT_FAILURE;
+ }
+
+ fin_name = argv[1];
+ fout_name = argv[2];
+
+ fin = fopen (fin_name, "r");
+ if (fin == NULL)
+ {
+ perror ("Could not open input for reading");
+ return EXIT_FAILURE;
+ }
+
+ fout = fopen (fout_name, "w");
+ if (fout == NULL)
+ {
+ perror ("Could not open output for writing");
+ return EXIT_FAILURE;
+ }
+
+ fprintf (fout, "/* This file was generated by %s from %s. */\n",
+ __FILE__, fin_name);
+ fputs ("static const struct test tests[] = {\n", fout);
+ while ((nbytes = getline (&p, &len, fin)) != -1)
+ {
+ if (p[nbytes - 1] == '\n')
+ p[nbytes - 1] = 0;
+ round_for_all (fout, p);
+ free (p);
+ p = NULL;
+ }
+ fputs ("};\n", fout);
+
+ return EXIT_SUCCESS;
+}
diff --git a/REORG.TODO/stdlib/getcontext.c b/REORG.TODO/stdlib/getcontext.c
new file mode 100644
index 0000000000..07560033a6
--- /dev/null
+++ b/REORG.TODO/stdlib/getcontext.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1998-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <ucontext.h>
+
+int
+getcontext (ucontext_t *ucp)
+{
+ __set_errno (ENOSYS);
+ return -1;
+}
+
+
+stub_warning (getcontext)
diff --git a/REORG.TODO/stdlib/getentropy.c b/REORG.TODO/stdlib/getentropy.c
new file mode 100644
index 0000000000..a71d4cd8f5
--- /dev/null
+++ b/REORG.TODO/stdlib/getentropy.c
@@ -0,0 +1,31 @@
+/* Stub for getentropy.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sys/random.h>
+#include <errno.h>
+
+/* Write LENGTH bytes of randomness starting at BUFFER. Return 0 on
+ success and -1 on failure. */
+ssize_t
+getentropy (void *buffer, size_t length)
+{
+ __set_errno (ENOSYS);
+ return -1;
+}
+
+stub_warning (getentropy)
diff --git a/REORG.TODO/stdlib/getenv.c b/REORG.TODO/stdlib/getenv.c
new file mode 100644
index 0000000000..b6fb1abeaa
--- /dev/null
+++ b/REORG.TODO/stdlib/getenv.c
@@ -0,0 +1,92 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <endian.h>
+#include <errno.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+
+/* Return the value of the environment variable NAME. This implementation
+ is tuned a bit in that it assumes no environment variable has an empty
+ name which of course should always be true. We have a special case for
+ one character names so that for the general case we can assume at least
+ two characters which we can access. By doing this we can avoid using the
+ `strncmp' most of the time. */
+char *
+getenv (const char *name)
+{
+ size_t len = strlen (name);
+ char **ep;
+ uint16_t name_start;
+
+ if (__environ == NULL || name[0] == '\0')
+ return NULL;
+
+ if (name[1] == '\0')
+ {
+ /* The name of the variable consists of only one character. Therefore
+ the first two characters of the environment entry are this character
+ and a '=' character. */
+#if __BYTE_ORDER == __LITTLE_ENDIAN || !_STRING_ARCH_unaligned
+ name_start = ('=' << 8) | *(const unsigned char *) name;
+#else
+ name_start = '=' | ((*(const unsigned char *) name) << 8);
+#endif
+ for (ep = __environ; *ep != NULL; ++ep)
+ {
+#if _STRING_ARCH_unaligned
+ uint16_t ep_start = *(uint16_t *) *ep;
+#else
+ uint16_t ep_start = (((unsigned char *) *ep)[0]
+ | (((unsigned char *) *ep)[1] << 8));
+#endif
+ if (name_start == ep_start)
+ return &(*ep)[2];
+ }
+ }
+ else
+ {
+#if _STRING_ARCH_unaligned
+ name_start = *(const uint16_t *) name;
+#else
+ name_start = (((const unsigned char *) name)[0]
+ | (((const unsigned char *) name)[1] << 8));
+#endif
+ len -= 2;
+ name += 2;
+
+ for (ep = __environ; *ep != NULL; ++ep)
+ {
+#if _STRING_ARCH_unaligned
+ uint16_t ep_start = *(uint16_t *) *ep;
+#else
+ uint16_t ep_start = (((unsigned char *) *ep)[0]
+ | (((unsigned char *) *ep)[1] << 8));
+#endif
+
+ if (name_start == ep_start && !strncmp (*ep + 2, name, len)
+ && (*ep)[len + 2] == '=')
+ return &(*ep)[len + 3];
+ }
+ }
+
+ return NULL;
+}
+libc_hidden_def (getenv)
diff --git a/REORG.TODO/stdlib/getrandom.c b/REORG.TODO/stdlib/getrandom.c
new file mode 100644
index 0000000000..b2a83c2db7
--- /dev/null
+++ b/REORG.TODO/stdlib/getrandom.c
@@ -0,0 +1,31 @@
+/* Stub for getrandom.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sys/random.h>
+#include <errno.h>
+
+/* Write LENGTH bytes of randomness starting at BUFFER. Return the
+ number of bytes written, or -1 on error. */
+ssize_t
+getrandom (void *buffer, size_t length, unsigned int flags)
+{
+ __set_errno (ENOSYS);
+ return -1;
+}
+
+stub_warning (getrandom)
diff --git a/REORG.TODO/stdlib/getsubopt.c b/REORG.TODO/stdlib/getsubopt.c
new file mode 100644
index 0000000000..7d6772dc1f
--- /dev/null
+++ b/REORG.TODO/stdlib/getsubopt.c
@@ -0,0 +1,79 @@
+/* Parse comma separate list into words.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <string.h>
+
+#if !_LIBC
+/* This code is written for inclusion in gnu-libc, and uses names in
+ the namespace reserved for libc. If we're compiling in gnulib,
+ define those names to be the normal ones instead. */
+# include "strchrnul.h"
+# undef __strchrnul
+# define __strchrnul strchrnul
+#endif
+
+/* Parse comma separated suboption from *OPTIONP and match against
+ strings in TOKENS. If found return index and set *VALUEP to
+ optional value introduced by an equal sign. If the suboption is
+ not part of TOKENS return in *VALUEP beginning of unknown
+ suboption. On exit *OPTIONP is set to the beginning of the next
+ token or at the terminating NUL character. */
+int
+getsubopt (char **optionp, char *const *tokens, char **valuep)
+{
+ char *endp, *vstart;
+ int cnt;
+
+ if (**optionp == '\0')
+ return -1;
+
+ /* Find end of next token. */
+ endp = __strchrnul (*optionp, ',');
+
+ /* Find start of value. */
+ vstart = memchr (*optionp, '=', endp - *optionp);
+ if (vstart == NULL)
+ vstart = endp;
+
+ /* Try to match the characters between *OPTIONP and VSTART against
+ one of the TOKENS. */
+ for (cnt = 0; tokens[cnt] != NULL; ++cnt)
+ if (strncmp (*optionp, tokens[cnt], vstart - *optionp) == 0
+ && tokens[cnt][vstart - *optionp] == '\0')
+ {
+ /* We found the current option in TOKENS. */
+ *valuep = vstart != endp ? vstart + 1 : NULL;
+
+ if (*endp != '\0')
+ *endp++ = '\0';
+ *optionp = endp;
+
+ return cnt;
+ }
+
+ /* The current suboption does not match any option. */
+ *valuep = *optionp;
+
+ if (*endp != '\0')
+ *endp++ = '\0';
+ *optionp = endp;
+
+ return -1;
+}
diff --git a/REORG.TODO/stdlib/gmp-impl.h b/REORG.TODO/stdlib/gmp-impl.h
new file mode 100644
index 0000000000..42d3e4afac
--- /dev/null
+++ b/REORG.TODO/stdlib/gmp-impl.h
@@ -0,0 +1,367 @@
+/* Include file for internal GNU MP types and definitions.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* When using gcc, make sure to use its builtin alloca. */
+#if ! defined (alloca) && defined (__GNUC__)
+#define alloca __builtin_alloca
+#define HAVE_ALLOCA
+#endif
+
+/* When using cc, do whatever necessary to allow use of alloca. For many
+ machines, this means including alloca.h. IBM's compilers need a #pragma
+ in "each module that needs to use alloca". */
+#if ! defined (alloca)
+/* We need lots of variants for MIPS, to cover all versions and perversions
+ of OSes for MIPS. */
+#if defined (__mips) || defined (MIPSEL) || defined (MIPSEB) \
+ || defined (_MIPSEL) || defined (_MIPSEB) || defined (__sgi) \
+ || defined (__alpha) || defined (__sparc) || defined (sparc) \
+ || defined (__ksr__)
+#include <alloca.h>
+#define HAVE_ALLOCA
+#endif
+#if defined (_IBMR2)
+#pragma alloca
+#define HAVE_ALLOCA
+#endif
+#if defined (__DECC)
+#define alloca(x) __ALLOCA(x)
+#define HAVE_ALLOCA
+#endif
+#endif
+
+#if (! defined (alloca) && ! defined (HAVE_ALLOCA)) \
+ || defined (USE_STACK_ALLOC)
+#include "stack-alloc.h"
+#else
+#define TMP_DECL(m)
+#define TMP_ALLOC(x) alloca(x)
+#define TMP_MARK(m)
+#define TMP_FREE(m)
+#endif
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#if ! defined (__GNUC__)
+#define inline /* Empty */
+#endif
+
+/* Get MAX/MIN macros. */
+#include <sys/param.h>
+
+/* Field access macros. */
+#define SIZ(x) ((x)->_mp_size)
+#define PTR(x) ((x)->_mp_d)
+#define EXP(x) ((x)->_mp_exp)
+#define PREC(x) ((x)->_mp_prec)
+#define ALLOC(x) ((x)->_mp_alloc)
+
+#include "gmp-mparam.h"
+/* #include "longlong.h" */
+
+#if defined (__STDC__) || defined (__cplusplus)
+void *malloc (size_t);
+void *realloc (void *, size_t);
+void free (void *);
+
+extern void * (*_mp_allocate_func) (size_t);
+extern void * (*_mp_reallocate_func) (void *, size_t, size_t);
+extern void (*_mp_free_func) (void *, size_t);
+
+void *_mp_default_allocate (size_t);
+void *_mp_default_reallocate (void *, size_t, size_t);
+void _mp_default_free (void *, size_t);
+
+#else
+
+#define const /* Empty */
+#define signed /* Empty */
+
+void *malloc ();
+void *realloc ();
+void free ();
+
+extern void * (*_mp_allocate_func) ();
+extern void * (*_mp_reallocate_func) ();
+extern void (*_mp_free_func) ();
+
+void *_mp_default_allocate ();
+void *_mp_default_reallocate ();
+void _mp_default_free ();
+#endif
+
+/* Copy NLIMBS *limbs* from SRC to DST. */
+#define MPN_COPY_INCR(DST, SRC, NLIMBS) \
+ do { \
+ mp_size_t __i; \
+ for (__i = 0; __i < (NLIMBS); __i++) \
+ (DST)[__i] = (SRC)[__i]; \
+ } while (0)
+#define MPN_COPY_DECR(DST, SRC, NLIMBS) \
+ do { \
+ mp_size_t __i; \
+ for (__i = (NLIMBS) - 1; __i >= 0; __i--) \
+ (DST)[__i] = (SRC)[__i]; \
+ } while (0)
+#define MPN_COPY MPN_COPY_INCR
+
+/* Zero NLIMBS *limbs* AT DST. */
+#define MPN_ZERO(DST, NLIMBS) \
+ do { \
+ mp_size_t __i; \
+ for (__i = 0; __i < (NLIMBS); __i++) \
+ (DST)[__i] = 0; \
+ } while (0)
+
+#define MPN_NORMALIZE(DST, NLIMBS) \
+ do { \
+ while (NLIMBS > 0) \
+ { \
+ if ((DST)[(NLIMBS) - 1] != 0) \
+ break; \
+ NLIMBS--; \
+ } \
+ } while (0)
+#define MPN_NORMALIZE_NOT_ZERO(DST, NLIMBS) \
+ do { \
+ while (1) \
+ { \
+ if ((DST)[(NLIMBS) - 1] != 0) \
+ break; \
+ NLIMBS--; \
+ } \
+ } while (0)
+
+/* Initialize the MP_INT X with space for NLIMBS limbs.
+ X should be a temporary variable, and it will be automatically
+ cleared out when the running function returns.
+ We use __x here to make it possible to accept both mpz_ptr and mpz_t
+ arguments. */
+#define MPZ_TMP_INIT(X, NLIMBS) \
+ do { \
+ mpz_ptr __x = (X); \
+ __x->_mp_alloc = (NLIMBS); \
+ __x->_mp_d = (mp_ptr) TMP_ALLOC ((NLIMBS) * BYTES_PER_MP_LIMB); \
+ } while (0)
+
+#define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \
+ do { \
+ if ((size) < KARATSUBA_THRESHOLD) \
+ impn_mul_n_basecase (prodp, up, vp, size); \
+ else \
+ impn_mul_n (prodp, up, vp, size, tspace); \
+ } while (0);
+#define MPN_SQR_N_RECURSE(prodp, up, size, tspace) \
+ do { \
+ if ((size) < KARATSUBA_THRESHOLD) \
+ impn_sqr_n_basecase (prodp, up, size); \
+ else \
+ impn_sqr_n (prodp, up, size, tspace); \
+ } while (0);
+
+/* Structure for conversion between internal binary format and
+ strings in base 2..36. */
+struct bases
+{
+ /* Number of digits in the conversion base that always fits in an mp_limb_t.
+ For example, for base 10 on a machine where a mp_limb_t has 32 bits this
+ is 9, since 10**9 is the largest number that fits into a mp_limb_t. */
+ int chars_per_limb;
+
+ /* log(2)/log(conversion_base) */
+ float chars_per_bit_exactly;
+
+ /* base**chars_per_limb, i.e. the biggest number that fits a word, built by
+ factors of base. Exception: For 2, 4, 8, etc, big_base is log2(base),
+ i.e. the number of bits used to represent each digit in the base. */
+ mp_limb_t big_base;
+
+ /* A BITS_PER_MP_LIMB bit approximation to 1/big_base, represented as a
+ fixed-point number. Instead of dividing by big_base an application can
+ choose to multiply by big_base_inverted. */
+ mp_limb_t big_base_inverted;
+};
+
+extern const struct bases __mp_bases[];
+extern mp_size_t __gmp_default_fp_limb_precision;
+
+/* Divide the two-limb number in (NH,,NL) by D, with DI being the largest
+ limb not larger than (2**(2*BITS_PER_MP_LIMB))/D - (2**BITS_PER_MP_LIMB).
+ If this would yield overflow, DI should be the largest possible number
+ (i.e., only ones). For correct operation, the most significant bit of D
+ has to be set. Put the quotient in Q and the remainder in R. */
+#define udiv_qrnnd_preinv(q, r, nh, nl, d, di) \
+ do { \
+ mp_limb_t _ql __attribute__ ((unused)); \
+ mp_limb_t _q, _r; \
+ mp_limb_t _xh, _xl; \
+ umul_ppmm (_q, _ql, (nh), (di)); \
+ _q += (nh); /* DI is 2**BITS_PER_MP_LIMB too small */\
+ umul_ppmm (_xh, _xl, _q, (d)); \
+ sub_ddmmss (_xh, _r, (nh), (nl), _xh, _xl); \
+ if (_xh != 0) \
+ { \
+ sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); \
+ _q += 1; \
+ if (_xh != 0) \
+ { \
+ sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); \
+ _q += 1; \
+ } \
+ } \
+ if (_r >= (d)) \
+ { \
+ _r -= (d); \
+ _q += 1; \
+ } \
+ (r) = _r; \
+ (q) = _q; \
+ } while (0)
+/* Like udiv_qrnnd_preinv, but for any value D. DNORM is D shifted left
+ so that its most significant bit is set. LGUP is ceil(log2(D)). */
+#define udiv_qrnnd_preinv2gen(q, r, nh, nl, d, di, dnorm, lgup) \
+ do { \
+ mp_limb_t n2, n10, n1, nadj, q1; \
+ mp_limb_t _xh, _xl; \
+ n2 = ((nh) << (BITS_PER_MP_LIMB - (lgup))) + ((nl) >> 1 >> (l - 1));\
+ n10 = (nl) << (BITS_PER_MP_LIMB - (lgup)); \
+ n1 = ((mp_limb_signed_t) n10 >> (BITS_PER_MP_LIMB - 1)); \
+ nadj = n10 + (n1 & (dnorm)); \
+ umul_ppmm (_xh, _xl, di, n2 - n1); \
+ add_ssaaaa (_xh, _xl, _xh, _xl, 0, nadj); \
+ q1 = ~(n2 + _xh); \
+ umul_ppmm (_xh, _xl, q1, d); \
+ add_ssaaaa (_xh, _xl, _xh, _xl, nh, nl); \
+ _xh -= (d); \
+ (r) = _xl + ((d) & _xh); \
+ (q) = _xh - q1; \
+ } while (0)
+/* Exactly like udiv_qrnnd_preinv, but branch-free. It is not clear which
+ version to use. */
+#define udiv_qrnnd_preinv2norm(q, r, nh, nl, d, di) \
+ do { \
+ mp_limb_t n2, n10, n1, nadj, q1; \
+ mp_limb_t _xh, _xl; \
+ n2 = (nh); \
+ n10 = (nl); \
+ n1 = ((mp_limb_signed_t) n10 >> (BITS_PER_MP_LIMB - 1)); \
+ nadj = n10 + (n1 & (d)); \
+ umul_ppmm (_xh, _xl, di, n2 - n1); \
+ add_ssaaaa (_xh, _xl, _xh, _xl, 0, nadj); \
+ q1 = ~(n2 + _xh); \
+ umul_ppmm (_xh, _xl, q1, d); \
+ add_ssaaaa (_xh, _xl, _xh, _xl, nh, nl); \
+ _xh -= (d); \
+ (r) = _xl + ((d) & _xh); \
+ (q) = _xh - q1; \
+ } while (0)
+
+#if defined (__GNUC__)
+/* Define stuff for longlong.h. */
+typedef unsigned int UQItype __attribute__ ((mode (QI)));
+typedef int SItype __attribute__ ((mode (SI)));
+typedef unsigned int USItype __attribute__ ((mode (SI)));
+typedef int DItype __attribute__ ((mode (DI)));
+typedef unsigned int UDItype __attribute__ ((mode (DI)));
+#else
+typedef unsigned char UQItype;
+typedef long SItype;
+typedef unsigned long USItype;
+#endif
+
+typedef mp_limb_t UWtype;
+typedef unsigned int UHWtype;
+#define W_TYPE_SIZE BITS_PER_MP_LIMB
+
+/* Internal mpn calls */
+#define impn_mul_n_basecase __MPN(impn_mul_n_basecase)
+#define impn_mul_n __MPN(impn_mul_n)
+#define impn_sqr_n_basecase __MPN(impn_sqr_n_basecase)
+#define impn_sqr_n __MPN(impn_sqr_n)
+
+#ifndef _PROTO
+#if defined (__STDC__) || defined (__cplusplus)
+#define _PROTO(x) x
+#else
+#define _PROTO(x) ()
+#endif
+#endif
+
+/* Prototypes for internal mpn calls. */
+extern void impn_mul_n_basecase _PROTO ((mp_ptr prodp, mp_srcptr up,
+ mp_srcptr vp, mp_size_t size));
+extern void impn_mul_n _PROTO ((mp_ptr prodp, mp_srcptr up, mp_srcptr vp,
+ mp_size_t size, mp_ptr tspace));
+extern void impn_sqr_n_basecase _PROTO ((mp_ptr prodp, mp_srcptr up,
+ mp_size_t size));
+extern void impn_sqr_n _PROTO ((mp_ptr prodp, mp_srcptr up, mp_size_t size,
+ mp_ptr tspace));
+
+
+
+#ifndef IEEE_DOUBLE_BIG_ENDIAN
+#define IEEE_DOUBLE_BIG_ENDIAN 1
+#endif
+
+#ifndef IEEE_DOUBLE_MIXED_ENDIAN
+#define IEEE_DOUBLE_MIXED_ENDIAN 0
+#endif
+
+#if IEEE_DOUBLE_MIXED_ENDIAN
+union ieee_double_extract
+{
+ struct
+ {
+ unsigned int manh:20;
+ unsigned int exp:11;
+ unsigned int sig:1;
+ unsigned int manl:32;
+ } s;
+ double d;
+};
+#else
+#if IEEE_DOUBLE_BIG_ENDIAN
+union ieee_double_extract
+{
+ struct
+ {
+ unsigned int sig:1;
+ unsigned int exp:11;
+ unsigned int manh:20;
+ unsigned int manl:32;
+ } s;
+ double d;
+};
+#else
+union ieee_double_extract
+{
+ struct
+ {
+ unsigned int manl:32;
+ unsigned int manh:20;
+ unsigned int exp:11;
+ unsigned int sig:1;
+ } s;
+ double d;
+};
+#endif
+#endif
diff --git a/REORG.TODO/stdlib/gmp.h b/REORG.TODO/stdlib/gmp.h
new file mode 100644
index 0000000000..821e3affd0
--- /dev/null
+++ b/REORG.TODO/stdlib/gmp.h
@@ -0,0 +1,623 @@
+/* gmp.h -- Definitions for GNU multiple precision functions.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef __GMP_H__
+
+#include <features.h>
+
+#ifndef __GNU_MP__
+#define __GNU_MP__ 2
+#define __need_size_t
+#include <stddef.h>
+#undef __need_size_t
+
+#if defined (__STDC__) || defined (__cplusplus)
+#define __gmp_const const
+#else
+#define __gmp_const
+#endif
+
+#if defined (__GNUC__)
+#define __gmp_inline __inline__
+#else
+#define __gmp_inline
+#endif
+
+#ifndef _EXTERN_INLINE
+#ifdef __GNUC__
+#define _EXTERN_INLINE __extern_inline
+#else
+#define _EXTERN_INLINE static
+#endif
+#endif
+
+#ifdef _SHORT_LIMB
+typedef unsigned int mp_limb_t;
+typedef int mp_limb_signed_t;
+#else
+#ifdef _LONG_LONG_LIMB
+typedef unsigned long long int mp_limb_t;
+typedef long long int mp_limb_signed_t;
+#else
+typedef unsigned long int mp_limb_t;
+typedef long int mp_limb_signed_t;
+#endif
+#endif
+
+typedef mp_limb_t * mp_ptr;
+typedef __gmp_const mp_limb_t * mp_srcptr;
+typedef long int mp_size_t;
+typedef long int mp_exp_t;
+
+#ifndef __MP_SMALL__
+typedef struct
+{
+ int _mp_alloc; /* Number of *limbs* allocated and pointed
+ to by the D field. */
+ int _mp_size; /* abs(SIZE) is the number of limbs
+ the last field points to. If SIZE
+ is negative this is a negative
+ number. */
+ mp_limb_t *_mp_d; /* Pointer to the limbs. */
+} __mpz_struct;
+#else
+typedef struct
+{
+ short int _mp_alloc; /* Number of *limbs* allocated and pointed
+ to by the D field. */
+ short int _mp_size; /* abs(SIZE) is the number of limbs
+ the last field points to. If SIZE
+ is negative this is a negative
+ number. */
+ mp_limb_t *_mp_d; /* Pointer to the limbs. */
+} __mpz_struct;
+#endif
+#endif /* __GNU_MP__ */
+
+/* User-visible types. */
+typedef __mpz_struct MP_INT;
+typedef __mpz_struct mpz_t[1];
+
+/* Structure for rational numbers. Zero is represented as 0/any, i.e.
+ the denominator is ignored. Negative numbers have the sign in
+ the numerator. */
+typedef struct
+{
+ __mpz_struct _mp_num;
+ __mpz_struct _mp_den;
+#if 0
+ int _mp_num_alloc; /* Number of limbs allocated
+ for the numerator. */
+ int _mp_num_size; /* The absolute value of this field is the
+ length of the numerator; the sign is the
+ sign of the entire rational number. */
+ mp_ptr _mp_num; /* Pointer to the numerator limbs. */
+ int _mp_den_alloc; /* Number of limbs allocated
+ for the denominator. */
+ int _mp_den_size; /* Length of the denominator. (This field
+ should always be positive.) */
+ mp_ptr _mp_den; /* Pointer to the denominator limbs. */
+#endif
+} __mpq_struct;
+
+typedef __mpq_struct MP_RAT;
+typedef __mpq_struct mpq_t[1];
+
+typedef struct
+{
+ int _mp_prec; /* Max precision, in number of `mp_limb_t's.
+ Set by mpf_init and modified by
+ mpf_set_prec. The area pointed to
+ by the `d' field contains `prec' + 1
+ limbs. */
+ int _mp_size; /* abs(SIZE) is the number of limbs
+ the last field points to. If SIZE
+ is negative this is a negative
+ number. */
+ mp_exp_t _mp_exp; /* Exponent, in the base of `mp_limb_t'. */
+ mp_limb_t *_mp_d; /* Pointer to the limbs. */
+} __mpf_struct;
+
+/* typedef __mpf_struct MP_FLOAT; */
+typedef __mpf_struct mpf_t[1];
+
+/* Types for function declarations in gmp files. */
+/* ??? Should not pollute user name space with these ??? */
+typedef __gmp_const __mpz_struct *mpz_srcptr;
+typedef __mpz_struct *mpz_ptr;
+typedef __gmp_const __mpf_struct *mpf_srcptr;
+typedef __mpf_struct *mpf_ptr;
+typedef __gmp_const __mpq_struct *mpq_srcptr;
+typedef __mpq_struct *mpq_ptr;
+
+#ifndef _PROTO
+#if defined (__STDC__) || defined (__cplusplus)
+#define _PROTO(x) x
+#else
+#define _PROTO(x) ()
+#endif
+#endif
+
+#ifndef __MPN
+#if defined (__STDC__) || defined (__cplusplus)
+#define __MPN(x) __mpn_##x
+#else
+#define __MPN(x) __mpn_/**/x
+#endif
+#endif
+
+#if defined (FILE) || defined (_STDIO_H_) || defined (__STDIO_H__) || defined (H_STDIO)
+#define _GMP_H_HAVE_FILE 1
+#endif
+
+void mp_set_memory_functions _PROTO ((void *(*) (size_t),
+ void *(*) (void *, size_t, size_t),
+ void (*) (void *, size_t)));
+extern const int mp_bits_per_limb;
+
+/**************** Integer (i.e. Z) routines. ****************/
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+void *_mpz_realloc _PROTO ((mpz_ptr, mp_size_t));
+
+void mpz_abs _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_add _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_add_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_and _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_array_init _PROTO ((mpz_ptr, mp_size_t, mp_size_t));
+void mpz_cdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_cdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_cdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_cdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_cdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_cdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+unsigned long int mpz_cdiv_ui _PROTO ((mpz_srcptr, unsigned long int));
+void mpz_clear _PROTO ((mpz_ptr));
+void mpz_clrbit _PROTO ((mpz_ptr, unsigned long int));
+int mpz_cmp _PROTO ((mpz_srcptr, mpz_srcptr));
+int mpz_cmp_si _PROTO ((mpz_srcptr, signed long int));
+int mpz_cmp_ui _PROTO ((mpz_srcptr, unsigned long int));
+void mpz_com _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_divexact _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_fac_ui _PROTO ((mpz_ptr, unsigned long int));
+void mpz_fdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_fdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+unsigned long int mpz_fdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_fdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_fdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_fdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_fdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+unsigned long int mpz_fdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+unsigned long int mpz_fdiv_ui _PROTO ((mpz_srcptr, unsigned long int));
+void mpz_gcd _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_gcd_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_gcdext _PROTO ((mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
+/* signed */ long int mpz_get_si _PROTO ((mpz_srcptr));
+char *mpz_get_str _PROTO ((char *, int, mpz_srcptr));
+unsigned long int mpz_get_ui _PROTO ((mpz_srcptr));
+mp_limb_t mpz_getlimbn _PROTO ((mpz_srcptr, mp_size_t));
+unsigned long int mpz_hamdist _PROTO ((mpz_srcptr, mpz_srcptr));
+void mpz_init _PROTO ((mpz_ptr));
+#ifdef _GMP_H_HAVE_FILE
+size_t mpz_inp_binary _PROTO ((mpz_ptr, FILE *));
+size_t mpz_inp_raw _PROTO ((mpz_ptr, FILE *));
+size_t mpz_inp_str _PROTO ((mpz_ptr, FILE *, int));
+#endif
+void mpz_init_set _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_init_set_d _PROTO ((mpz_ptr, double));
+void mpz_init_set_si _PROTO ((mpz_ptr, signed long int));
+int mpz_init_set_str _PROTO ((mpz_ptr, const char *, int));
+void mpz_init_set_ui _PROTO ((mpz_ptr, unsigned long int));
+int mpz_invert _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_ior _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+int mpz_jacobi _PROTO ((mpz_srcptr, mpz_srcptr));
+int mpz_legendre _PROTO ((mpz_srcptr, mpz_srcptr));
+void mpz_mod _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_mul _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_mul_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_mul_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_neg _PROTO ((mpz_ptr, mpz_srcptr));
+#ifdef _GMP_H_HAVE_FILE
+size_t mpz_out_binary _PROTO ((FILE *, mpz_srcptr));
+size_t mpz_out_raw _PROTO ((FILE *, mpz_srcptr));
+size_t mpz_out_str _PROTO ((FILE *, int, mpz_srcptr));
+#endif
+int mpz_perfect_square_p _PROTO ((mpz_srcptr));
+unsigned long int mpz_popcount _PROTO ((mpz_srcptr));
+void mpz_pow_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_powm _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr));
+void mpz_powm_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr));
+int mpz_probab_prime_p _PROTO ((mpz_srcptr, int));
+void mpz_random _PROTO ((mpz_ptr, mp_size_t));
+void mpz_random2 _PROTO ((mpz_ptr, mp_size_t));
+unsigned long int mpz_scan0 _PROTO ((mpz_srcptr, unsigned long int));
+unsigned long int mpz_scan1 _PROTO ((mpz_srcptr, unsigned long int));
+void mpz_set _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_set_d _PROTO ((mpz_ptr, double));
+void mpz_set_si _PROTO ((mpz_ptr, signed long int));
+int mpz_set_str _PROTO ((mpz_ptr, const char *, int));
+void mpz_set_ui _PROTO ((mpz_ptr, unsigned long int));
+void mpz_setbit _PROTO ((mpz_ptr, unsigned long int));
+size_t mpz_size _PROTO ((mpz_srcptr));
+size_t mpz_sizeinbase _PROTO ((mpz_srcptr, int));
+void mpz_sqrt _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_sqrtrem _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr));
+void mpz_sub _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_sub_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_tdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_tdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_tdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_ui_pow_ui _PROTO ((mpz_ptr, unsigned long int, unsigned long int));
+
+/**************** Rational (i.e. Q) routines. ****************/
+
+void mpq_init _PROTO ((mpq_ptr));
+void mpq_clear _PROTO ((mpq_ptr));
+void mpq_set _PROTO ((mpq_ptr, mpq_srcptr));
+void mpq_set_ui _PROTO ((mpq_ptr, unsigned long int, unsigned long int));
+void mpq_set_si _PROTO ((mpq_ptr, signed long int, unsigned long int));
+void mpq_add _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
+void mpq_sub _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
+void mpq_mul _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
+void mpq_div _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
+void mpq_neg _PROTO ((mpq_ptr, mpq_srcptr));
+int mpq_cmp _PROTO ((mpq_srcptr, mpq_srcptr));
+int mpq_cmp_ui _PROTO ((mpq_srcptr, unsigned long int, unsigned long int));
+void mpq_inv _PROTO ((mpq_ptr, mpq_srcptr));
+void mpq_set_num _PROTO ((mpq_ptr, mpz_srcptr));
+void mpq_set_den _PROTO ((mpq_ptr, mpz_srcptr));
+void mpq_get_num _PROTO ((mpz_ptr, mpq_srcptr));
+void mpq_get_den _PROTO ((mpz_ptr, mpq_srcptr));
+double mpq_get_d _PROTO ((mpq_srcptr));
+void mpq_canonicalize _PROTO ((mpq_ptr));
+
+/**************** Float (i.e. F) routines. ****************/
+
+void mpf_abs _PROTO ((mpf_ptr, mpf_srcptr));
+void mpf_add _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_add_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_clear _PROTO ((mpf_ptr));
+int mpf_cmp _PROTO ((mpf_srcptr, mpf_srcptr));
+int mpf_cmp_si _PROTO ((mpf_srcptr, signed long int));
+int mpf_cmp_ui _PROTO ((mpf_srcptr, unsigned long int));
+void mpf_div _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_div_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_div_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_dump _PROTO ((mpf_srcptr));
+int mpf_eq _PROTO ((mpf_srcptr, mpf_srcptr, unsigned long int));
+unsigned long int mpf_get_prec _PROTO ((mpf_srcptr));
+char *mpf_get_str _PROTO ((char *, mp_exp_t *, int, size_t, mpf_srcptr));
+void mpf_init _PROTO ((mpf_ptr));
+void mpf_init2 _PROTO ((mpf_ptr, unsigned long int));
+#ifdef _GMP_H_HAVE_FILE
+size_t mpf_inp_str _PROTO ((mpf_ptr, FILE *, int));
+#endif
+void mpf_init_set _PROTO ((mpf_ptr, mpf_srcptr));
+void mpf_init_set_d _PROTO ((mpf_ptr, double));
+void mpf_init_set_si _PROTO ((mpf_ptr, signed long int));
+int mpf_init_set_str _PROTO ((mpf_ptr, char *, int));
+void mpf_init_set_ui _PROTO ((mpf_ptr, unsigned long int));
+void mpf_mul _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_mul_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_mul_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_neg _PROTO ((mpf_ptr, mpf_srcptr));
+#ifdef _GMP_H_HAVE_FILE
+size_t mpf_out_str _PROTO ((FILE *, int, size_t, mpf_srcptr));
+#endif
+void mpf_random2 _PROTO ((mpf_ptr, mp_size_t, mp_exp_t));
+void mpf_reldiff _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_set _PROTO ((mpf_ptr, mpf_srcptr));
+void mpf_set_d _PROTO ((mpf_ptr, double));
+void mpf_set_default_prec _PROTO ((unsigned long int));
+void mpf_set_prec _PROTO ((mpf_ptr, unsigned long int));
+void mpf_set_prec_raw _PROTO ((mpf_ptr, unsigned long int));
+void mpf_set_si _PROTO ((mpf_ptr, signed long int));
+int mpf_set_str _PROTO ((mpf_ptr, const char *, int));
+void mpf_set_ui _PROTO ((mpf_ptr, unsigned long int));
+size_t mpf_size _PROTO ((mpf_srcptr));
+void mpf_sqrt _PROTO ((mpf_ptr, mpf_srcptr));
+void mpf_sqrt_ui _PROTO ((mpf_ptr, unsigned long int));
+void mpf_sub _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_sub_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_ui_div _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr));
+void mpf_ui_sub _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr));
+#if defined (__cplusplus)
+}
+#endif
+/************ Low level positive-integer (i.e. N) routines. ************/
+
+/* This is ugly, but we need to make usr calls reach the prefixed function. */
+#define mpn_add __MPN(add)
+#define mpn_add_1 __MPN(add_1)
+#define mpn_add_n __MPN(add_n)
+#define mpn_addmul_1 __MPN(addmul_1)
+#define mpn_bdivmod __MPN(bdivmod)
+#define mpn_cmp __MPN(cmp)
+#define mpn_divmod_1 __MPN(divmod_1)
+#define mpn_divrem __MPN(divrem)
+#define mpn_divrem_1 __MPN(divrem_1)
+#define mpn_dump __MPN(dump)
+#define mpn_gcd __MPN(gcd)
+#define mpn_gcd_1 __MPN(gcd_1)
+#define mpn_gcdext __MPN(gcdext)
+#define mpn_get_str __MPN(get_str)
+#define mpn_hamdist __MPN(hamdist)
+#define mpn_lshift __MPN(lshift)
+#define mpn_mod_1 __MPN(mod_1)
+#define mpn_mul __MPN(mul)
+#define mpn_mul_1 __MPN(mul_1)
+#define mpn_mul_n __MPN(mul_n)
+#define mpn_perfect_square_p __MPN(perfect_square_p)
+#define mpn_popcount __MPN(popcount)
+#define mpn_preinv_mod_1 __MPN(preinv_mod_1)
+#define mpn_random2 __MPN(random2)
+#define mpn_rshift __MPN(rshift)
+#define mpn_scan0 __MPN(scan0)
+#define mpn_scan1 __MPN(scan1)
+#define mpn_set_str __MPN(set_str)
+#define mpn_sqrtrem __MPN(sqrtrem)
+#define mpn_sub __MPN(sub)
+#define mpn_sub_1 __MPN(sub_1)
+#define mpn_sub_n __MPN(sub_n)
+#define mpn_submul_1 __MPN(submul_1)
+#define mpn_udiv_w_sdiv __MPN(udiv_w_sdiv)
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+mp_limb_t mpn_add _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t));
+mp_limb_t mpn_add_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+mp_limb_t mpn_add_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
+mp_limb_t mpn_addmul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+mp_limb_t mpn_bdivmod _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, unsigned long int));
+int mpn_cmp _PROTO ((mp_srcptr, mp_srcptr, mp_size_t));
+mp_limb_t mpn_divmod_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+mp_limb_t mpn_divrem _PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t));
+mp_limb_t mpn_divrem_1 _PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t));
+void mpn_dump _PROTO ((mp_srcptr, mp_size_t));
+mp_size_t mpn_gcd _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t));
+mp_limb_t mpn_gcd_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t));
+mp_size_t mpn_gcdext _PROTO ((mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t));
+size_t mpn_get_str _PROTO ((unsigned char *, int, mp_ptr, mp_size_t));
+unsigned long int mpn_hamdist _PROTO ((mp_srcptr, mp_srcptr, mp_size_t));
+mp_limb_t mpn_lshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int));
+mp_limb_t mpn_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t));
+mp_limb_t mpn_mul _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t));
+mp_limb_t mpn_mul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+void mpn_mul_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
+int mpn_perfect_square_p _PROTO ((mp_srcptr, mp_size_t));
+unsigned long int mpn_popcount _PROTO ((mp_srcptr, mp_size_t));
+mp_limb_t mpn_preinv_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t));
+void mpn_random2 _PROTO ((mp_ptr, mp_size_t));
+mp_limb_t mpn_rshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int));
+unsigned long int mpn_scan0 _PROTO ((mp_srcptr, unsigned long int));
+unsigned long int mpn_scan1 _PROTO ((mp_srcptr, unsigned long int));
+mp_size_t mpn_set_str _PROTO ((mp_ptr, const unsigned char *, size_t, int));
+mp_size_t mpn_sqrtrem _PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t));
+mp_limb_t mpn_sub _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t));
+mp_limb_t mpn_sub_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+mp_limb_t mpn_sub_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
+mp_limb_t mpn_submul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+#if defined (__cplusplus)
+}
+#endif
+
+#if defined (__GNUC__) || defined (_FORCE_INLINES)
+_EXTERN_INLINE mp_limb_t
+#if defined (__STDC__) || defined (__cplusplus)
+mpn_add_1 (register mp_ptr res_ptr,
+ register mp_srcptr s1_ptr,
+ register mp_size_t s1_size,
+ register mp_limb_t s2_limb)
+#else
+mpn_add_1 (res_ptr, s1_ptr, s1_size, s2_limb)
+ register mp_ptr res_ptr;
+ register mp_srcptr s1_ptr;
+ register mp_size_t s1_size;
+ register mp_limb_t s2_limb;
+#endif
+{
+ register mp_limb_t x;
+
+ x = *s1_ptr++;
+ s2_limb = x + s2_limb;
+ *res_ptr++ = s2_limb;
+ if (s2_limb < x)
+ {
+ while (--s1_size != 0)
+ {
+ x = *s1_ptr++ + 1;
+ *res_ptr++ = x;
+ if (x != 0)
+ goto fin;
+ }
+
+ return 1;
+ }
+
+ fin:
+ if (res_ptr != s1_ptr)
+ {
+ mp_size_t i;
+ for (i = 0; i < s1_size - 1; i++)
+ res_ptr[i] = s1_ptr[i];
+ }
+ return 0;
+}
+
+_EXTERN_INLINE mp_limb_t
+#if defined (__STDC__) || defined (__cplusplus)
+mpn_add (register mp_ptr res_ptr,
+ register mp_srcptr s1_ptr,
+ register mp_size_t s1_size,
+ register mp_srcptr s2_ptr,
+ register mp_size_t s2_size)
+#else
+mpn_add (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size)
+ register mp_ptr res_ptr;
+ register mp_srcptr s1_ptr;
+ register mp_size_t s1_size;
+ register mp_srcptr s2_ptr;
+ register mp_size_t s2_size;
+#endif
+{
+ mp_limb_t cy_limb = 0;
+
+ if (s2_size != 0)
+ cy_limb = mpn_add_n (res_ptr, s1_ptr, s2_ptr, s2_size);
+
+ if (s1_size - s2_size != 0)
+ cy_limb = mpn_add_1 (res_ptr + s2_size,
+ s1_ptr + s2_size,
+ s1_size - s2_size,
+ cy_limb);
+ return cy_limb;
+}
+
+_EXTERN_INLINE mp_limb_t
+#if defined (__STDC__) || defined (__cplusplus)
+mpn_sub_1 (register mp_ptr res_ptr,
+ register mp_srcptr s1_ptr,
+ register mp_size_t s1_size,
+ register mp_limb_t s2_limb)
+#else
+mpn_sub_1 (res_ptr, s1_ptr, s1_size, s2_limb)
+ register mp_ptr res_ptr;
+ register mp_srcptr s1_ptr;
+ register mp_size_t s1_size;
+ register mp_limb_t s2_limb;
+#endif
+{
+ register mp_limb_t x;
+
+ x = *s1_ptr++;
+ s2_limb = x - s2_limb;
+ *res_ptr++ = s2_limb;
+ if (s2_limb > x)
+ {
+ while (--s1_size != 0)
+ {
+ x = *s1_ptr++;
+ *res_ptr++ = x - 1;
+ if (x != 0)
+ goto fin;
+ }
+
+ return 1;
+ }
+
+ fin:
+ if (res_ptr != s1_ptr)
+ {
+ mp_size_t i;
+ for (i = 0; i < s1_size - 1; i++)
+ res_ptr[i] = s1_ptr[i];
+ }
+ return 0;
+}
+
+_EXTERN_INLINE mp_limb_t
+#if defined (__STDC__) || defined (__cplusplus)
+mpn_sub (register mp_ptr res_ptr,
+ register mp_srcptr s1_ptr,
+ register mp_size_t s1_size,
+ register mp_srcptr s2_ptr,
+ register mp_size_t s2_size)
+#else
+mpn_sub (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size)
+ register mp_ptr res_ptr;
+ register mp_srcptr s1_ptr;
+ register mp_size_t s1_size;
+ register mp_srcptr s2_ptr;
+ register mp_size_t s2_size;
+#endif
+{
+ mp_limb_t cy_limb = 0;
+
+ if (s2_size != 0)
+ cy_limb = mpn_sub_n (res_ptr, s1_ptr, s2_ptr, s2_size);
+
+ if (s1_size - s2_size != 0)
+ cy_limb = mpn_sub_1 (res_ptr + s2_size,
+ s1_ptr + s2_size,
+ s1_size - s2_size,
+ cy_limb);
+ return cy_limb;
+}
+#endif /* __GNUC__ */
+
+/* Allow faster testing for negative, zero, and positive. */
+#define mpz_sgn(Z) ((Z)->_mp_size < 0 ? -1 : (Z)->_mp_size > 0)
+#define mpf_sgn(F) ((F)->_mp_size < 0 ? -1 : (F)->_mp_size > 0)
+#define mpq_sgn(Q) ((Q)->_mp_num._mp_size < 0 ? -1 : (Q)->_mp_num._mp_size > 0)
+
+/* Allow direct user access to numerator and denominator of a mpq_t object. */
+#define mpq_numref(Q) (&((Q)->_mp_num))
+#define mpq_denref(Q) (&((Q)->_mp_den))
+
+/* When using GCC, optimize certain common comparisons. */
+#if defined (__GNUC__)
+#define mpz_cmp_ui(Z,UI) \
+ (__builtin_constant_p (UI) && (UI) == 0 \
+ ? mpz_sgn (Z) : mpz_cmp_ui (Z,UI))
+#define mpz_cmp_si(Z,UI) \
+ (__builtin_constant_p (UI) && (UI) == 0 ? mpz_sgn (Z) \
+ : __builtin_constant_p (UI) && (UI) > 0 ? mpz_cmp_ui (Z,UI) \
+ : mpz_cmp_si (Z,UI))
+#define mpq_cmp_ui(Q,NUI,DUI) \
+ (__builtin_constant_p (NUI) && (NUI) == 0 \
+ ? mpq_sgn (Q) : mpq_cmp_ui (Q,NUI,DUI))
+#endif
+
+#define mpn_divmod(qp,np,nsize,dp,dsize) mpn_divrem (qp,0,np,nsize,dp,dsize)
+#if 0
+#define mpn_divmod_1(qp,np,nsize,dlimb) mpn_divrem_1 (qp,0,np,nsize,dlimb)
+#endif
+
+/* Compatibility with GMP 1. */
+#define mpz_mdiv mpz_fdiv_q
+#define mpz_mdivmod mpz_fdiv_qr
+#define mpz_mmod mpz_fdiv_r
+#define mpz_mdiv_ui mpz_fdiv_q_ui
+#define mpz_mdivmod_ui(q,r,n,d) \
+ ((r == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d))
+#define mpz_mmod_ui(r,n,d) \
+ ((r == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d))
+
+/* Useful synonyms, but not quite compatible with GMP 1. */
+#define mpz_div mpz_fdiv_q
+#define mpz_divmod mpz_fdiv_qr
+#define mpz_div_ui mpz_fdiv_q_ui
+#define mpz_divmod_ui mpz_fdiv_qr_ui
+#define mpz_mod_ui mpz_fdiv_r_ui
+#define mpz_div_2exp mpz_fdiv_q_2exp
+#define mpz_mod_2exp mpz_fdiv_r_2exp
+
+#define __GNU_MP_VERSION 2
+#define __GNU_MP_VERSION_MINOR 0
+#define __GMP_H__
+#endif /* __GMP_H__ */
diff --git a/REORG.TODO/stdlib/grouping.c b/REORG.TODO/stdlib/grouping.c
new file mode 100644
index 0000000000..63ef4c1644
--- /dev/null
+++ b/REORG.TODO/stdlib/grouping.c
@@ -0,0 +1,201 @@
+/* Internal header for proving correct grouping in strings of numbers.
+ Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <limits.h>
+#include <stddef.h>
+#include <string.h>
+
+#ifndef MAX
+#define MAX(a,b) ({ typeof(a) _a = (a); typeof(b) _b = (b); \
+ _a > _b ? _a : _b; })
+#endif
+
+#ifdef USE_WIDE_CHAR
+# include <wctype.h>
+# define L_(Ch) L##Ch
+# define UCHAR_TYPE wint_t
+# define STRING_TYPE wchar_t
+#else
+# define L_(Ch) Ch
+# define UCHAR_TYPE unsigned char
+# define STRING_TYPE char
+#endif
+
+#include "grouping.h"
+
+/* Find the maximum prefix of the string between BEGIN and END which
+ satisfies the grouping rules. It is assumed that at least one digit
+ follows BEGIN directly. */
+
+const STRING_TYPE *
+#ifdef USE_WIDE_CHAR
+__correctly_grouped_prefixwc (const STRING_TYPE *begin, const STRING_TYPE *end,
+ wchar_t thousands,
+#else
+__correctly_grouped_prefixmb (const STRING_TYPE *begin, const STRING_TYPE *end,
+ const char *thousands,
+#endif
+ const char *grouping)
+{
+#ifndef USE_WIDE_CHAR
+ size_t thousands_len;
+ int cnt;
+#endif
+
+ if (grouping == NULL)
+ return end;
+
+#ifndef USE_WIDE_CHAR
+ thousands_len = strlen (thousands);
+#endif
+
+ while (end > begin)
+ {
+ const STRING_TYPE *cp = end - 1;
+ const char *gp = grouping;
+
+ /* Check first group. */
+ while (cp >= begin)
+ {
+#ifdef USE_WIDE_CHAR
+ if (*cp == thousands)
+ break;
+#else
+ if (cp[thousands_len - 1] == *thousands)
+ {
+ for (cnt = 1; thousands[cnt] != '\0'; ++cnt)
+ if (thousands[cnt] != cp[thousands_len - 1 - cnt])
+ break;
+ if (thousands[cnt] == '\0')
+ break;
+ }
+#endif
+ --cp;
+ }
+
+ /* We allow the representation to contain no grouping at all even if
+ the locale specifies we can have grouping. */
+ if (cp < begin)
+ return end;
+
+ if (end - cp == (int) *gp + 1)
+ {
+ /* This group matches the specification. */
+
+ const STRING_TYPE *new_end;
+
+ if (cp < begin)
+ /* There is just one complete group. We are done. */
+ return end;
+
+ /* CP points to a thousands separator character. The preceding
+ remainder of the string from BEGIN to NEW_END is the part we
+ will consider if there is a grouping error in this trailing
+ portion from CP to END. */
+ new_end = cp - 1;
+
+ /* Loop while the grouping is correct. */
+ while (1)
+ {
+ /* Get the next grouping rule. */
+ ++gp;
+ if (*gp == 0)
+ /* If end is reached use last rule. */
+ --gp;
+
+ /* Skip the thousands separator. */
+ --cp;
+
+ if (*gp == CHAR_MAX
+#if CHAR_MIN < 0
+ || *gp < 0
+#endif
+ )
+ {
+ /* No more thousands separators are allowed to follow. */
+ while (cp >= begin)
+ {
+#ifdef USE_WIDE_CHAR
+ if (*cp == thousands)
+ break;
+#else
+ for (cnt = 0; thousands[cnt] != '\0'; ++cnt)
+ if (thousands[cnt] != cp[thousands_len - cnt - 1])
+ break;
+ if (thousands[cnt] == '\0')
+ break;
+#endif
+ --cp;
+ }
+
+ if (cp < begin)
+ /* OK, only digits followed. */
+ return end;
+ }
+ else
+ {
+ /* Check the next group. */
+ const STRING_TYPE *group_end = cp;
+
+ while (cp >= begin)
+ {
+#ifdef USE_WIDE_CHAR
+ if (*cp == thousands)
+ break;
+#else
+ for (cnt = 0; thousands[cnt] != '\0'; ++cnt)
+ if (thousands[cnt] != cp[thousands_len - cnt - 1])
+ break;
+ if (thousands[cnt] == '\0')
+ break;
+#endif
+ --cp;
+ }
+
+ if (cp < begin && group_end - cp <= (int) *gp)
+ /* Final group is correct. */
+ return end;
+
+ if (cp < begin || group_end - cp != (int) *gp)
+ /* Incorrect group. Punt. */
+ break;
+ }
+ }
+
+ /* The trailing portion of the string starting at NEW_END
+ contains a grouping error. So we will look for a correctly
+ grouped number in the preceding portion instead. */
+ end = new_end;
+ }
+ else
+ {
+ /* Even the first group was wrong; determine maximum shift. */
+ if (end - cp > (int) *gp + 1)
+ end = cp + (int) *gp + 1;
+ else if (cp < begin)
+ /* This number does not fill the first group, but is correct. */
+ return end;
+ else
+ /* CP points to a thousands separator character. */
+ end = cp;
+ }
+ }
+
+ return MAX (begin, end);
+}
diff --git a/REORG.TODO/stdlib/grouping.h b/REORG.TODO/stdlib/grouping.h
new file mode 100644
index 0000000000..d77b6e1105
--- /dev/null
+++ b/REORG.TODO/stdlib/grouping.h
@@ -0,0 +1,33 @@
+/* Internal header for proving correct grouping in strings of numbers.
+ Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Find the maximum prefix of the string between BEGIN and END which
+ satisfies the grouping rules. It is assumed that at least one digit
+ follows BEGIN directly. */
+extern const wchar_t *__correctly_grouped_prefixwc (const wchar_t *begin,
+ const wchar_t *end,
+ wchar_t thousands,
+ const char *grouping)
+ attribute_hidden;
+
+extern const char *__correctly_grouped_prefixmb (const char *begin,
+ const char *end,
+ const char *thousands,
+ const char *grouping)
+ attribute_hidden;
diff --git a/REORG.TODO/stdlib/groupingwc.c b/REORG.TODO/stdlib/groupingwc.c
new file mode 100644
index 0000000000..cd9675ee58
--- /dev/null
+++ b/REORG.TODO/stdlib/groupingwc.c
@@ -0,0 +1,2 @@
+#define USE_WIDE_CHAR 1
+#include "grouping.c"
diff --git a/REORG.TODO/stdlib/inlines.c b/REORG.TODO/stdlib/inlines.c
new file mode 100644
index 0000000000..5f1065ea13
--- /dev/null
+++ b/REORG.TODO/stdlib/inlines.c
@@ -0,0 +1,3 @@
+#define _FORCE_INLINES
+#define _EXTERN_INLINE /* empty */
+#include <gmp.h>
diff --git a/REORG.TODO/stdlib/isomac.c b/REORG.TODO/stdlib/isomac.c
new file mode 100644
index 0000000000..d12d1ff661
--- /dev/null
+++ b/REORG.TODO/stdlib/isomac.c
@@ -0,0 +1,447 @@
+/* Check system header files for ISO 9899:1990 (ISO C) compliance.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Jens Schweikhardt <schweikh@noc.dfn.de>, 1996.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* This is a simple minded program that tries to find illegal macro
+ definitions in system header files. Illegal macro definitions are
+ those not from the implementation namespace (i.e. not starting with
+ an underscore) or not matching any identifier mandated by The
+ Standard. Some common macro names are considered okay, e.g. all those
+ beginning with E (which may be defined in <errno.h>) or ending in
+ _MAX. See the arrays prefix[] and suffix[] below for details.
+
+ In a compliant implementation no other macros can be defined, because
+ you could write strictly conforming programs that may fail to compile
+ due to syntax errors: suppose <stdio.h> defines PIPE_BUF, then the
+ conforming
+
+ #include <assert.h>
+ #include <stdio.h> <- or where the bogus macro is defined
+ #include <string.h>
+ #define STR(x) #x
+ #define XSTR(x) STR(x)
+ int main (void)
+ {
+ int PIPE_BUF = 0;
+ assert (strcmp ("PIPE_BUF", XSTR (PIPE_BUF)) == 0);
+ return 0;
+ }
+
+ is expected to compile and meet the assertion. If it does not, your
+ compiler compiles some other language than Standard C.
+
+ REQUIREMENTS:
+ This program calls gcc to get the list of defined macros. If you
+ don't have gcc you're probably out of luck unless your compiler or
+ preprocessor has something similar to gcc's -dM option. Tune
+ PRINT_MACROS in this case. This program assumes headers are found
+ under /usr/include and that there is a writable /tmp directory.
+ Tune SYSTEM_INCLUDE if your system differs.
+ #define BROKEN_SYSTEM if system(NULL) bombs -- one more violation
+ of ISO C, by the way.
+
+ OUTPUT:
+ Each header file name is printed, followed by illegal macro names
+ and their definition. For the above example, you would see
+ ...
+ /usr/include/stdio.h
+ #define PIPE_BUF 5120
+ ...
+ If your implementation does not yet incorporate Amendment 1 you
+ will see messages about iso646.h, wctype.h and wchar.h not being
+ found. */
+
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define HEADER_MAX 256
+
+static const char *macrofile;
+
+/* ISO C header names including Amendment 1 (without ".h" suffix). */
+static char *header[] =
+{
+ "assert", "ctype", "errno", "float", "iso646", "limits", "locale",
+ "math", "setjmp", "signal", "stdarg", "stddef", "stdio", "stdlib",
+ "string", "time", "wchar", "wctype"
+};
+
+/* Macros with these prefixes are considered okay. */
+static char *prefix[] =
+{
+ "_", "E", "is", "str", "mem", "SIG", "FLT_", "DBL_", "LDBL_",
+ "LC_", "wmem", "wcs"
+};
+
+/* Macros with these suffixes are considered okay. Will not work for
+ parametrized macros with arguments. */
+static char *suffix[] =
+{
+ "_MAX", "_MIN"
+};
+
+/* These macros are considered okay. In fact, these are just more prefixes. */
+static char *macros[] =
+{
+ "BUFSIZ", "CHAR_BIT", "CHAR_MAX", "CHAR_MIN", "CLOCKS_PER_SEC",
+ "DBL_DIG", "DBL_EPSILON", "DBL_MANT_DIG", "DBL_MAX",
+ "DBL_MAX_10_EXP", "DBL_MAX_EXP", "DBL_MIN", "DBL_MIN_10_EXP",
+ "DBL_MIN_EXP", "EDOM", "EILSEQ", "EOF", "ERANGE", "EXIT_FAILURE",
+ "EXIT_SUCCESS", "FILENAME_MAX", "FLT_DIG", "FLT_EPSILON",
+ "FLT_MANT_DIG", "FLT_MAX", "FLT_MAX_10_EXP", "FLT_MAX_EXP",
+ "FLT_MIN", "FLT_MIN_10_EXP", "FLT_MIN_EXP", "FLT_RADIX",
+ "FLT_ROUNDS", "FOPEN_MAX", "HUGE_VAL", "INT_MAX", "INT_MIN",
+ "LC_ALL", "LC_COLLATE", "LC_CTYPE", "LC_MONETARY", "LC_NUMERIC",
+ "LC_TIME", "LDBL_DIG", "LDBL_EPSILON", "LDBL_MANT_DIG", "LDBL_MAX",
+ "LDBL_MAX_10_EXP", "LDBL_MAX_EXP", "LDBL_MIN", "LDBL_MIN_10_EXP",
+ "LDBL_MIN_EXP", "LONG_MAX", "LONG_MIN", "L_tmpnam", "MB_CUR_MAX",
+ "MB_LEN_MAX", "NDEBUG", "NULL", "RAND_MAX", "SCHAR_MAX",
+ "SCHAR_MIN", "SEEK_CUR", "SEEK_END", "SEEK_SET", "SHRT_MAX",
+ "SHRT_MIN", "SIGABRT", "SIGFPE", "SIGILL", "SIGINT", "SIGSEGV",
+ "SIGTERM", "SIG_DFL", "SIG_ERR", "SIG_IGN", "TMP_MAX", "UCHAR_MAX",
+ "UINT_MAX", "ULONG_MAX", "USHRT_MAX", "WCHAR_MAX", "WCHAR_MIN",
+ "WEOF", "_IOFBF", "_IOLBF", "_IONBF", "abort", "abs", "acos",
+ "acosf", "acosl", "and", "and_eq", "asctime", "asin", "asinf",
+ "asinl", "assert", "atan", "atan2", "atan2f", "atan2l", "atanf",
+ "atanl", "atexit", "atof", "atoi", "atol", "bitand", "bitor",
+ "bsearch", "btowc", "calloc", "ceil", "ceilf", "ceill", "clearerr",
+ "clock", "clock_t", "compl", "cos", "cosf", "cosh", "coshf",
+ "coshl", "cosl", "ctime", "difftime", "div", "div_t", "errno",
+ "exit", "exp", "expf", "expl", "fabs", "fabsf", "fabsl", "fclose",
+ "feof", "ferror", "fflush", "fgetc", "fgetpos", "fgets", "fgetwc",
+ "fgetws", "floor", "floorf", "floorl", "fmod", "fmodf", "fmodl",
+ "fopen", "fprintf", "fputc", "fputs", "fputwc", "fputws", "fread",
+ "free", "freopen", "frexp", "frexpf", "frexpl", "fscanf", "fseek",
+ "fsetpos", "ftell", "fwide", "fwprintf", "fwrite", "fwscanf",
+ "getc", "getchar", "getenv", "gets", "getwc", "getwchar", "gmtime",
+ "isalnum", "isalpha", "iscntrl", "isdigit", "isgraph", "islower",
+ "isprint", "ispunct", "isspace", "isupper", "iswalnum", "iswalpha",
+ "iswcntrl", "iswctype", "iswdigit", "iswgraph", "iswlower",
+ "iswprint", "iswpunct", "iswspace", "iswupper", "iswxdigit",
+ "isxdigit", "labs", "ldexp", "ldexpf", "ldexpl", "ldiv", "ldiv_t",
+ "localeconv", "localtime", "log", "log10", "log10f", "log10l",
+ "logf", "logl", "longjmp", "malloc", "mblen", "mbrlen", "mbrtowc",
+ "mbsinit", "mbsrtowcs", "mbstate_t", "mbstowcs", "mbtowc", "memchr",
+ "memcmp", "memcpy", "memmove", "memset", "mktime", "modf", "modff",
+ "modfl", "not", "not_eq", "offsetof", "or", "or_eq", "perror",
+ "pow", "powf", "powl", "printf", "ptrdiff_t", "putc", "putchar",
+ "puts", "putwc", "putwchar", "qsort", "raise", "rand", "realloc",
+ "remove", "rename", "rewind", "scanf", "setbuf", "setjmp",
+ "setlocale", "setvbuf", "sig_atomic_t", "signal", "sin", "sinf",
+ "sinh", "sinhf", "sinhl", "sinl", "size_t", "sprintf", "sqrt",
+ "sqrtf", "sqrtl", "srand", "sscanf", "stderr", "stdin", "stdout",
+ "strcat", "strchr", "strcmp", "strcoll", "strcpy", "strcspn",
+ "strerror", "strftime", "strlen", "strncat", "strncmp", "strncpy",
+ "strpbrk", "strrchr", "strspn", "strstr", "strtod", "strtok",
+ "strtol", "strtoul", "strxfrm", "swprintf", "swscanf", "system",
+ "tan", "tanf", "tanh", "tanhf", "tanhl", "tanl", "time", "time_t",
+ "tmpfile", "tmpnam", "tolower", "toupper", "towctrans", "towlower",
+ "towupper", "ungetc", "ungetwc", "va_arg", "va_copy", "va_end", "va_start",
+ "vfprintf", "vfwprintf", "vprintf", "vsprintf", "vswprintf",
+ "vwprintf", "wchar_t", "wcrtomb", "wcscat", "wcschr", "wcscmp",
+ "wcscoll", "wcscpy", "wcscspn", "wcsftime", "wcslen", "wcsncat",
+ "wcsncmp", "wcsncpy", "wcspbrk", "wcsrchr", "wcsrtombs", "wcsspn",
+ "wcsstr", "wcstod", "wcstok", "wcstol", "wcstombs", "wcstoul",
+ "wcsxfrm", "wctob", "wctomb", "wctrans", "wctrans_t", "wctype",
+ "wctype_t", "wint_t", "wmemchr", "wmemcmp", "wmemcpy", "wmemmove",
+ "wmemset", "wprintf", "wscanf", "xor", "xor_eq"
+};
+
+#define NUMBER_OF_HEADERS (sizeof header / sizeof *header)
+#define NUMBER_OF_PREFIXES (sizeof prefix / sizeof *prefix)
+#define NUMBER_OF_SUFFIXES (sizeof suffix / sizeof *suffix)
+#define NUMBER_OF_MACROS (sizeof macros / sizeof *macros)
+
+
+/* Format string to build command to invoke compiler. */
+static const char fmt[] = "\
+echo \"#include <%s>\" |\
+%s -E -dM -ansi -pedantic %s -D_LIBC -D_ISOMAC \
+-DIN_MODULE=MODULE_extramodules -I. \
+-isystem `%s --print-prog-name=include` - 2> /dev/null > %s";
+
+
+/* The compiler we use (given on the command line). */
+char *CC;
+/* The -I parameters for CC to find all headers. */
+char *INC;
+
+static char *xstrndup (const char *, size_t);
+static const char **get_null_defines (void);
+static int check_header (const char *, const char **);
+
+int
+main (int argc, char *argv[])
+{
+ int h;
+ int result = 0;
+ const char **ignore_list;
+
+ CC = argc > 1 ? argv[1] : "gcc";
+ INC = argc > 2 ? argv[2] : "";
+
+ if (system (NULL) == 0)
+ {
+ puts ("Sorry, no command processor.");
+ return EXIT_FAILURE;
+ }
+
+ /* First get list of symbols which are defined by the compiler. */
+ ignore_list = get_null_defines ();
+
+ fputs ("Tested files:\n", stdout);
+
+ for (h = 0; h < NUMBER_OF_HEADERS; ++h)
+ {
+ char file_name[HEADER_MAX];
+ sprintf (file_name, "%s.h", header[h]);
+ result |= check_header (file_name, ignore_list);
+ }
+
+ /* The test suite should return errors but for now this is not
+ practical. Give a warning and ask the user to correct the bugs. */
+ return result;
+}
+
+
+static char *
+xstrndup (const char *s, size_t n)
+{
+ size_t len = n;
+ char *new = malloc (len + 1);
+
+ if (new == NULL)
+ return NULL;
+
+ new[len] = '\0';
+ return memcpy (new, s, len);
+}
+
+
+static const char **
+get_null_defines (void)
+{
+ char line[BUFSIZ], *command;
+ char **result = NULL;
+ size_t result_len = 0;
+ size_t result_max = 0;
+ FILE *input;
+ int first = 1;
+
+ macrofile = tmpnam (NULL);
+
+ command = malloc (sizeof fmt + sizeof "/dev/null" + 2 * strlen (CC)
+ + strlen (INC) + strlen (macrofile));
+
+ if (command == NULL)
+ {
+ puts ("No more memory.");
+ exit (1);
+ }
+
+ sprintf (command, fmt, "/dev/null", CC, INC, CC, macrofile);
+
+ if (system (command))
+ {
+ puts ("system() returned nonzero");
+ free (command);
+ return NULL;
+ }
+ free (command);
+ input = fopen (macrofile, "r");
+
+ if (input == NULL)
+ {
+ printf ("Could not read %s: ", macrofile);
+ perror (NULL);
+ return NULL;
+ }
+
+ while (fgets (line, sizeof line, input) != NULL)
+ {
+ int i, okay = 0;
+ size_t endmac;
+ char *start, *end;
+ if (strlen (line) < 9 || line[7] != ' ')
+ { /* "#define A" */
+ printf ("Malformed input, expected '#define MACRO'\ngot '%s'\n",
+ line);
+ continue;
+ }
+ if (line[8] == '_')
+ /* It's a safe identifier. */
+ continue;
+ if (result_len == result_max)
+ {
+ result_max += 10;
+ result = realloc (result, result_max * sizeof (char **));
+ if (result == NULL)
+ {
+ puts ("No more memory.");
+ exit (1);
+ }
+ }
+ start = &line[8];
+ for (end = start + 1; !isspace (*end) && *end != '\0'; ++end)
+ ;
+ result[result_len] = xstrndup (start, end - start);
+
+ if (strcmp (result[result_len], "IN_MODULE") != 0)
+ {
+ if (first)
+ {
+ fputs ("The following identifiers will be ignored since the compiler defines them\nby default:\n", stdout);
+ first = 0;
+ }
+ puts (result[result_len]);
+ }
+ ++result_len;
+ }
+ if (result_len == result_max)
+ {
+ result_max += 1;
+ result = realloc (result, result_max * sizeof (char **));
+ if (result == NULL)
+ {
+ puts ("No more memory.");
+ exit (1);
+ }
+ }
+ result[result_len] = NULL;
+ fclose (input);
+ remove (macrofile);
+
+ return (const char **) result;
+}
+
+
+static int
+check_header (const char *file_name, const char **except)
+{
+ char line[BUFSIZ], *command;
+ FILE *input;
+ int result = 0;
+
+ command = malloc (sizeof fmt + strlen (file_name) + 2 * strlen (CC)
+ + strlen (INC) + strlen (macrofile));
+
+ if (command == NULL)
+ {
+ puts ("No more memory.");
+ exit (1);
+ }
+
+ puts (file_name);
+ sprintf (command, fmt, file_name, CC, INC, CC, macrofile);
+
+ if (system (command))
+ {
+ puts ("system() returned nonzero");
+ result = 1;
+ }
+ free (command);
+ input = fopen (macrofile, "r");
+
+ if (input == NULL)
+ {
+ printf ("Could not read %s: ", macrofile);
+ perror (NULL);
+ return 1;
+ }
+
+ while (fgets (line, sizeof line, input) != NULL)
+ {
+ int i, okay = 0;
+ size_t endmac;
+ const char **cpp;
+ if (strlen (line) < 9 || line[7] != ' ')
+ { /* "#define A" */
+ printf ("Malformed input, expected '#define MACRO'\ngot '%s'\n",
+ line);
+ result = 1;
+ continue;
+ }
+ for (i = 0; i < NUMBER_OF_PREFIXES; ++i)
+ {
+ if (!strncmp (line+8, prefix[i], strlen (prefix[i]))) {
+ ++okay;
+ break;
+ }
+ }
+ if (okay)
+ continue;
+ for (i = 0; i < NUMBER_OF_MACROS; ++i)
+ {
+ if (!strncmp (line + 8, macros[i], strlen (macros[i])))
+ {
+ ++okay;
+ break;
+ }
+ }
+ if (okay)
+ continue;
+ /* Find next char after the macro identifier; this can be either
+ a space or an open parenthesis. */
+ endmac = strcspn (line + 8, " (");
+ if (line[8+endmac] == '\0')
+ {
+ printf ("malformed input, expected '#define MACRO VALUE'\n"
+ "got '%s'\n", line);
+ result = 1;
+ continue;
+ }
+ for (i = 0; i < NUMBER_OF_SUFFIXES; ++i)
+ {
+ size_t len = strlen (suffix[i]);
+ if (!strncmp (line + 8 + endmac - len, suffix[i], len))
+ {
+ ++okay;
+ break;
+ }
+ }
+ if (okay)
+ continue;
+ if (except != NULL)
+ for (cpp = except; *cpp != NULL; ++cpp)
+ {
+ size_t len = strlen (*cpp);
+ if (!strncmp (line + 8, *cpp, len) && isspace (line[8 + len]))
+ {
+ ++okay;
+ break;
+ }
+ }
+ if (!okay)
+ {
+ fputs (line, stdout);
+ result = 2;
+ }
+ }
+ fclose (input);
+ remove (macrofile);
+
+ return result;
+}
+
+/* EOF */
diff --git a/REORG.TODO/stdlib/jrand48.c b/REORG.TODO/stdlib/jrand48.c
new file mode 100644
index 0000000000..4a551ed1f3
--- /dev/null
+++ b/REORG.TODO/stdlib/jrand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+long int
+jrand48 (unsigned short int xsubi[3])
+{
+ long int result;
+
+ (void) __jrand48_r (xsubi, &__libc_drand48_data, &result);
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/jrand48_r.c b/REORG.TODO/stdlib/jrand48_r.c
new file mode 100644
index 0000000000..40e6a1cb2c
--- /dev/null
+++ b/REORG.TODO/stdlib/jrand48_r.c
@@ -0,0 +1,34 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+int
+__jrand48_r (unsigned short int xsubi[3], struct drand48_data *buffer,
+ long int *result)
+{
+ /* Compute next state. */
+ if (__drand48_iterate (xsubi, buffer) < 0)
+ return -1;
+
+ /* Store the result. */
+ *result = (int32_t) ((xsubi[2] << 16) | xsubi[1]);
+
+ return 0;
+}
+weak_alias (__jrand48_r, jrand48_r)
diff --git a/REORG.TODO/stdlib/l64a.c b/REORG.TODO/stdlib/l64a.c
new file mode 100644
index 0000000000..fc125844ce
--- /dev/null
+++ b/REORG.TODO/stdlib/l64a.c
@@ -0,0 +1,56 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+/* Conversion table. */
+static const char conv_table[64] =
+{
+ '.', '/', '0', '1', '2', '3', '4', '5',
+ '6', '7', '8', '9', 'A', 'B', 'C', 'D',
+ 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
+ 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
+ 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b',
+ 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
+ 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
+ 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
+};
+
+char *
+l64a (long int n)
+{
+ unsigned long int m = (unsigned long int) n;
+ static char result[7];
+ int cnt;
+
+ /* The standard says that only 32 bits are used. */
+ m &= 0xffffffff;
+
+ if (m == 0ul)
+ /* The value for N == 0 is defined to be the empty string. */
+ return (char *) "";
+
+ for (cnt = 0; m > 0ul; ++cnt)
+ {
+ result[cnt] = conv_table[m & 0x3f];
+ m >>= 6;
+ }
+ result[cnt] = '\0';
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/labs.c b/REORG.TODO/stdlib/labs.c
new file mode 100644
index 0000000000..506c4bb21e
--- /dev/null
+++ b/REORG.TODO/stdlib/labs.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef labs
+
+
+/* Return the absolute value of I. */
+long int
+labs (long int i)
+{
+ return i < 0 ? -i : i;
+}
diff --git a/REORG.TODO/stdlib/lcong48.c b/REORG.TODO/stdlib/lcong48.c
new file mode 100644
index 0000000000..b90ae1c5c2
--- /dev/null
+++ b/REORG.TODO/stdlib/lcong48.c
@@ -0,0 +1,26 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+void
+lcong48 (unsigned short int param[7])
+{
+ (void) __lcong48_r (param, &__libc_drand48_data);
+}
diff --git a/REORG.TODO/stdlib/lcong48_r.c b/REORG.TODO/stdlib/lcong48_r.c
new file mode 100644
index 0000000000..d5228af8f5
--- /dev/null
+++ b/REORG.TODO/stdlib/lcong48_r.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+int
+__lcong48_r (unsigned short int param[7], struct drand48_data *buffer)
+{
+ /* Store the given values. */
+ memcpy (buffer->__x, &param[0], sizeof (buffer->__x));
+ buffer->__a = ((uint64_t) param[5] << 32 | (uint32_t) param[4] << 16
+ | param[3]);
+ buffer->__c = param[6];
+ buffer->__init = 1;
+
+ return 0;
+}
+weak_alias (__lcong48_r, lcong48_r)
diff --git a/REORG.TODO/stdlib/ldbl2mpn.c b/REORG.TODO/stdlib/ldbl2mpn.c
new file mode 100644
index 0000000000..450f9381cc
--- /dev/null
+++ b/REORG.TODO/stdlib/ldbl2mpn.c
@@ -0,0 +1 @@
+/* Empty. Not needed unless ldbl support is in. */
diff --git a/REORG.TODO/stdlib/ldiv.c b/REORG.TODO/stdlib/ldiv.c
new file mode 100644
index 0000000000..3951eb05f0
--- /dev/null
+++ b/REORG.TODO/stdlib/ldiv.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 1992-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+/* Return the `ldiv_t' representation of NUMER over DENOM. */
+ldiv_t
+ldiv (long int numer, long int denom)
+{
+ ldiv_t result;
+
+ result.quot = numer / denom;
+ result.rem = numer % denom;
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/llabs.c b/REORG.TODO/stdlib/llabs.c
new file mode 100644
index 0000000000..39d0561c0d
--- /dev/null
+++ b/REORG.TODO/stdlib/llabs.c
@@ -0,0 +1,29 @@
+/* `long long int' absolute value.
+ Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef llabs
+
+
+/* Return the absolute value of I. */
+long long int
+llabs (long long int i)
+{
+ return i < 0 ? -i : i;
+}
diff --git a/REORG.TODO/stdlib/lldiv.c b/REORG.TODO/stdlib/lldiv.c
new file mode 100644
index 0000000000..7109f35063
--- /dev/null
+++ b/REORG.TODO/stdlib/lldiv.c
@@ -0,0 +1,32 @@
+/* `long long int' divison with remainder.
+ Copyright (C) 1992-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+/* Return the `lldiv_t' representation of NUMER over DENOM. */
+lldiv_t
+lldiv (long long int numer, long long int denom)
+{
+ lldiv_t result;
+
+ result.quot = numer / denom;
+ result.rem = numer % denom;
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/longlong.h b/REORG.TODO/stdlib/longlong.h
new file mode 100644
index 0000000000..0ec11c5056
--- /dev/null
+++ b/REORG.TODO/stdlib/longlong.h
@@ -0,0 +1,1773 @@
+/* longlong.h -- definitions for mixed size 32/64 bit arithmetic.
+ Copyright (C) 1991-2017 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
+ <http://www.gnu.org/licenses/>. */
+
+/* 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<bl" arithmetically comes out making an actual 0 or 1 in a
+ register, which takes an extra cycle. */
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ do { \
+ UWtype __x; \
+ __x = (al) - (bl); \
+ if ((al) < (bl)) \
+ (sh) = (ah) - (bh) - 1; \
+ else \
+ (sh) = (ah) - (bh); \
+ (sl) = __x; \
+ } while (0)
+
+/* Do both product parts in assembly, since that gives better code with
+ all gcc versions. Some callers will just use the upper part, and in
+ that situation we waste an instruction, but not any cycles. */
+#define umul_ppmm(ph, pl, m0, m1) \
+ __asm__ ("xma.hu %0 = %2, %3, f0\n\txma.l %1 = %2, %3, f0" \
+ : "=&f" (ph), "=f" (pl) \
+ : "f" (m0), "f" (m1))
+#define count_leading_zeros(count, x) \
+ do { \
+ UWtype _x = (x), _y, _a, _c; \
+ __asm__ ("mux1 %0 = %1, @rev" : "=r" (_y) : "r" (_x)); \
+ __asm__ ("czx1.l %0 = %1" : "=r" (_a) : "r" (-_y | _y)); \
+ _c = (_a - 1) << 3; \
+ _x >>= _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__) && (!defined (__SHMEDIA__) || !__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
+
+#ifdef __FDPIC__
+/* FDPIC needs a special version of the asm fragment to extract the
+ code address from the function descriptor. __udiv_qrnnd_16 is
+ assumed to be local and not to use the GOT, so loading r12 is
+ not needed. */
+#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" \
+" mov.l @%5,r2\n" \
+" jsr @r2\n" \
+" shll16 r6\n" \
+" swap.w r4,r4\n" \
+" mov.l @%5,r2\n" \
+" jsr @r2\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)
+#else
+#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)
+#endif /* __FDPIC__ */
+
+#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__) && defined (__SHMEDIA__) && __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/REORG.TODO/stdlib/lrand48.c b/REORG.TODO/stdlib/lrand48.c
new file mode 100644
index 0000000000..645977bb96
--- /dev/null
+++ b/REORG.TODO/stdlib/lrand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+long int
+lrand48 (void)
+{
+ long int result;
+
+ (void) __nrand48_r (__libc_drand48_data.__x, &__libc_drand48_data, &result);
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/lrand48_r.c b/REORG.TODO/stdlib/lrand48_r.c
new file mode 100644
index 0000000000..445efe09b6
--- /dev/null
+++ b/REORG.TODO/stdlib/lrand48_r.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.org>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+int
+lrand48_r (struct drand48_data *buffer, long int *result)
+{
+ /* Be generous for the arguments, detect some errors. */
+ if (buffer == NULL)
+ return -1;
+
+ return __nrand48_r (buffer->__x, buffer, result);
+}
+libc_hidden_def (lrand48_r)
diff --git a/REORG.TODO/stdlib/lshift.c b/REORG.TODO/stdlib/lshift.c
new file mode 100644
index 0000000000..c8228f9aa6
--- /dev/null
+++ b/REORG.TODO/stdlib/lshift.c
@@ -0,0 +1,78 @@
+/* mpn_lshift -- Shift left low level.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+/* Shift U (pointed to by UP and USIZE digits long) CNT bits to the left
+ and store the USIZE least significant digits of the result at WP.
+ Return the bits shifted out from the most significant digit.
+
+ Argument constraints:
+ 1. 0 < CNT < BITS_PER_MP_LIMB
+ 2. If the result is to be written over the input, WP must be >= UP.
+*/
+
+mp_limb_t
+mpn_lshift (register mp_ptr wp,
+ register mp_srcptr up, mp_size_t usize,
+ register unsigned int cnt)
+{
+ register mp_limb_t high_limb, low_limb;
+ register unsigned sh_1, sh_2;
+ register mp_size_t i;
+ mp_limb_t retval;
+
+#ifdef DEBUG
+ if (usize == 0 || cnt == 0)
+ abort ();
+#endif
+
+ sh_1 = cnt;
+#if 0
+ if (sh_1 == 0)
+ {
+ if (wp != up)
+ {
+ /* Copy from high end to low end, to allow specified input/output
+ overlapping. */
+ for (i = usize - 1; i >= 0; i--)
+ wp[i] = up[i];
+ }
+ return 0;
+ }
+#endif
+
+ wp += 1;
+ sh_2 = BITS_PER_MP_LIMB - sh_1;
+ i = usize - 1;
+ low_limb = up[i];
+ retval = low_limb >> sh_2;
+ high_limb = low_limb;
+ while (--i >= 0)
+ {
+ low_limb = up[i];
+ wp[i] = (high_limb << sh_1) | (low_limb >> sh_2);
+ high_limb = low_limb;
+ }
+ wp[i] = high_limb << sh_1;
+
+ return retval;
+}
diff --git a/REORG.TODO/stdlib/makecontext.c b/REORG.TODO/stdlib/makecontext.c
new file mode 100644
index 0000000000..b699bd8a56
--- /dev/null
+++ b/REORG.TODO/stdlib/makecontext.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1998-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <ucontext.h>
+
+void
+makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
+{
+ __set_errno (ENOSYS);
+}
+
+
+stub_warning (makecontext)
diff --git a/REORG.TODO/stdlib/mblen.c b/REORG.TODO/stdlib/mblen.c
new file mode 100644
index 0000000000..b98bb915e4
--- /dev/null
+++ b/REORG.TODO/stdlib/mblen.c
@@ -0,0 +1,68 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+#include <gconv.h>
+#include <wcsmbs/wcsmbsload.h>
+
+
+/* Internal state. */
+static mbstate_t state;
+
+/* Return the length of the multibyte character (if there is one)
+ at S which is no longer than N characters.
+ The ISO C standard says that the `mblen' function must not change
+ the state of the `mbtowc' function. */
+int
+mblen (const char *s, size_t n)
+{
+ int result;
+
+ /* If S is NULL the function has to return null or not null
+ depending on the encoding having a state depending encoding or
+ not. */
+ if (s == NULL)
+ {
+ const struct gconv_fcts *fcts;
+
+ /* Get the conversion functions. */
+ fcts = get_gconv_fcts (_NL_CURRENT_DATA (LC_CTYPE));
+
+ /* Reset the state. */
+ memset (&state, '\0', sizeof state);
+
+ result = fcts->towc->__stateful;
+ }
+ else if (*s == '\0')
+ /* According to the ISO C 89 standard this is the expected behaviour. */
+ result = 0;
+ else
+ {
+ memset (&state, '\0', sizeof state);
+
+ result = __mbrtowc (NULL, s, n, &state);
+
+ /* The `mbrtowc' functions tell us more than we need. Fold the -1
+ and -2 result into -1. */
+ if (result < 0)
+ result = -1;
+ }
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/mbstowcs.c b/REORG.TODO/stdlib/mbstowcs.c
new file mode 100644
index 0000000000..8016208e76
--- /dev/null
+++ b/REORG.TODO/stdlib/mbstowcs.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+
+/* Convert the string of multibyte characters in S to `wchar_t's in
+ PWCS, writing no more than N. Return the number written,
+ or (size_t) -1 if an invalid multibyte character is encountered.
+
+ Attention: this function should NEVER be intentionally used.
+ The interface is completely stupid. The state is shared between
+ all conversion functions. You should use instead the restartable
+ version `mbsrtowcs'. */
+size_t
+mbstowcs (wchar_t *pwcs, const char *s, size_t n)
+{
+ mbstate_t state;
+
+ memset (&state, '\0', sizeof state);
+ /* Return how many we wrote (or maybe an error). */
+ return __mbsrtowcs (pwcs, &s, n, &state);
+}
diff --git a/REORG.TODO/stdlib/mbtowc.c b/REORG.TODO/stdlib/mbtowc.c
new file mode 100644
index 0000000000..c391726689
--- /dev/null
+++ b/REORG.TODO/stdlib/mbtowc.c
@@ -0,0 +1,72 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+#include <gconv.h>
+#include <wcsmbs/wcsmbsload.h>
+
+
+/* Convert the multibyte character at S, which is no longer
+ than N characters, to its `wchar_t' representation, placing
+ this n *PWC and returning its length.
+
+ Attention: this function should NEVER be intentionally used.
+ The interface is completely stupid. The state is shared between
+ all conversion functions. You should use instead the restartable
+ version `mbrtowc'. */
+int
+mbtowc (wchar_t *pwc, const char *s, size_t n)
+{
+ int result;
+ static mbstate_t state;
+
+ /* If S is NULL the function has to return null or not null
+ depending on the encoding having a state depending encoding or
+ not. */
+ if (s == NULL)
+ {
+ const struct gconv_fcts *fcts;
+
+ /* Get the conversion functions. */
+ fcts = get_gconv_fcts (_NL_CURRENT_DATA (LC_CTYPE));
+
+ /* This is an extension in the Unix standard which does not directly
+ violate ISO C. */
+ memset (&state, '\0', sizeof state);
+
+ result = fcts->towc->__stateful;
+ }
+ else if (*s == '\0')
+ {
+ if (pwc != NULL)
+ *pwc = L'\0';
+ result = 0;
+ }
+ else
+ {
+ result = __mbrtowc (pwc, s, n, &state);
+
+ /* The `mbrtowc' functions tell us more than we need. Fold the -1
+ and -2 result into -1. */
+ if (result < 0)
+ result = -1;
+ }
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/mod_1.c b/REORG.TODO/stdlib/mod_1.c
new file mode 100644
index 0000000000..33ca193ce2
--- /dev/null
+++ b/REORG.TODO/stdlib/mod_1.c
@@ -0,0 +1,189 @@
+/* mpn_mod_1(dividend_ptr, dividend_size, divisor_limb) --
+ Divide (DIVIDEND_PTR,,DIVIDEND_SIZE) by DIVISOR_LIMB.
+ Return the single-limb remainder.
+ There are no constraints on the value of the divisor.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+#ifndef UMUL_TIME
+#define UMUL_TIME 1
+#endif
+
+#ifndef UDIV_TIME
+#define UDIV_TIME UMUL_TIME
+#endif
+
+/* FIXME: We should be using invert_limb (or invert_normalized_limb)
+ here (not udiv_qrnnd). */
+
+mp_limb_t
+mpn_mod_1 (mp_srcptr dividend_ptr, mp_size_t dividend_size,
+ mp_limb_t divisor_limb)
+{
+ mp_size_t i;
+ mp_limb_t n1, n0, r;
+ mp_limb_t dummy __attribute__ ((unused));
+
+ /* Botch: Should this be handled at all? Rely on callers? */
+ if (dividend_size == 0)
+ return 0;
+
+ /* If multiplication is much faster than division, and the
+ dividend is large, pre-invert the divisor, and use
+ only multiplications in the inner loop. */
+
+ /* This test should be read:
+ Does it ever help to use udiv_qrnnd_preinv?
+ && Does what we save compensate for the inversion overhead? */
+ if (UDIV_TIME > (2 * UMUL_TIME + 6)
+ && (UDIV_TIME - (2 * UMUL_TIME + 6)) * dividend_size > UDIV_TIME)
+ {
+ int normalization_steps;
+
+ count_leading_zeros (normalization_steps, divisor_limb);
+ if (normalization_steps != 0)
+ {
+ mp_limb_t divisor_limb_inverted;
+
+ divisor_limb <<= normalization_steps;
+
+ /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The
+ result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
+ most significant bit (with weight 2**N) implicit. */
+
+ /* Special case for DIVISOR_LIMB == 100...000. */
+ if (divisor_limb << 1 == 0)
+ divisor_limb_inverted = ~(mp_limb_t) 0;
+ else
+ udiv_qrnnd (divisor_limb_inverted, dummy,
+ -divisor_limb, 0, divisor_limb);
+
+ n1 = dividend_ptr[dividend_size - 1];
+ r = n1 >> (BITS_PER_MP_LIMB - normalization_steps);
+
+ /* Possible optimization:
+ if (r == 0
+ && divisor_limb > ((n1 << normalization_steps)
+ | (dividend_ptr[dividend_size - 2] >> ...)))
+ ...one division less... */
+
+ for (i = dividend_size - 2; i >= 0; i--)
+ {
+ n0 = dividend_ptr[i];
+ udiv_qrnnd_preinv (dummy, r, r,
+ ((n1 << normalization_steps)
+ | (n0 >> (BITS_PER_MP_LIMB - normalization_steps))),
+ divisor_limb, divisor_limb_inverted);
+ n1 = n0;
+ }
+ udiv_qrnnd_preinv (dummy, r, r,
+ n1 << normalization_steps,
+ divisor_limb, divisor_limb_inverted);
+ return r >> normalization_steps;
+ }
+ else
+ {
+ mp_limb_t divisor_limb_inverted;
+
+ /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The
+ result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
+ most significant bit (with weight 2**N) implicit. */
+
+ /* Special case for DIVISOR_LIMB == 100...000. */
+ if (divisor_limb << 1 == 0)
+ divisor_limb_inverted = ~(mp_limb_t) 0;
+ else
+ udiv_qrnnd (divisor_limb_inverted, dummy,
+ -divisor_limb, 0, divisor_limb);
+
+ i = dividend_size - 1;
+ r = dividend_ptr[i];
+
+ if (r >= divisor_limb)
+ r = 0;
+ else
+ i--;
+
+ for (; i >= 0; i--)
+ {
+ n0 = dividend_ptr[i];
+ udiv_qrnnd_preinv (dummy, r, r,
+ n0, divisor_limb, divisor_limb_inverted);
+ }
+ return r;
+ }
+ }
+ else
+ {
+ if (UDIV_NEEDS_NORMALIZATION)
+ {
+ int normalization_steps;
+
+ count_leading_zeros (normalization_steps, divisor_limb);
+ if (normalization_steps != 0)
+ {
+ divisor_limb <<= normalization_steps;
+
+ n1 = dividend_ptr[dividend_size - 1];
+ r = n1 >> (BITS_PER_MP_LIMB - normalization_steps);
+
+ /* Possible optimization:
+ if (r == 0
+ && divisor_limb > ((n1 << normalization_steps)
+ | (dividend_ptr[dividend_size - 2] >> ...)))
+ ...one division less... */
+
+ for (i = dividend_size - 2; i >= 0; i--)
+ {
+ n0 = dividend_ptr[i];
+ udiv_qrnnd (dummy, r, r,
+ ((n1 << normalization_steps)
+ | (n0 >> (BITS_PER_MP_LIMB - normalization_steps))),
+ divisor_limb);
+ n1 = n0;
+ }
+ udiv_qrnnd (dummy, r, r,
+ n1 << normalization_steps,
+ divisor_limb);
+ return r >> normalization_steps;
+ }
+ }
+ /* No normalization needed, either because udiv_qrnnd doesn't require
+ it, or because DIVISOR_LIMB is already normalized. */
+
+ i = dividend_size - 1;
+ r = dividend_ptr[i];
+
+ if (r >= divisor_limb)
+ r = 0;
+ else
+ i--;
+
+ for (; i >= 0; i--)
+ {
+ n0 = dividend_ptr[i];
+ udiv_qrnnd (dummy, r, r, n0, divisor_limb);
+ }
+ return r;
+ }
+}
diff --git a/REORG.TODO/stdlib/monetary.h b/REORG.TODO/stdlib/monetary.h
new file mode 100644
index 0000000000..dcfbfc5262
--- /dev/null
+++ b/REORG.TODO/stdlib/monetary.h
@@ -0,0 +1,58 @@
+/* Header file for monetary value formatting functions.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _MONETARY_H
+#define _MONETARY_H 1
+
+#include <features.h>
+
+/* Get needed types. */
+#define __need_size_t
+#include <stddef.h>
+#include <bits/types.h>
+
+#ifndef __ssize_t_defined
+typedef __ssize_t ssize_t;
+# define __ssize_t_defined
+#endif
+
+
+__BEGIN_DECLS
+
+/* Formatting a monetary value according to the current locale. */
+extern ssize_t strfmon (char *__restrict __s, size_t __maxsize,
+ const char *__restrict __format, ...)
+ __THROW __attribute_format_strfmon__ (3, 4);
+
+#ifdef __USE_XOPEN2K8
+# include <xlocale.h>
+
+/* Formatting a monetary value according to the given locale. */
+extern ssize_t strfmon_l (char *__restrict __s, size_t __maxsize,
+ __locale_t __loc,
+ const char *__restrict __format, ...)
+ __THROW __attribute_format_strfmon__ (4, 5);
+#endif
+
+#ifdef __LDBL_COMPAT
+# include <bits/monetary-ldbl.h>
+#endif
+
+__END_DECLS
+
+#endif /* monetary.h */
diff --git a/REORG.TODO/stdlib/mp_clz_tab.c b/REORG.TODO/stdlib/mp_clz_tab.c
new file mode 100644
index 0000000000..7759ce3abb
--- /dev/null
+++ b/REORG.TODO/stdlib/mp_clz_tab.c
@@ -0,0 +1,36 @@
+/* __clz_tab -- support for longlong.h
+ Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library. Its master source is NOT part of
+ the C library, however. The master source lives in the GNU MP Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#if 0
+#include <gmp.h>
+#include "gmp-impl.h"
+#endif
+
+const
+unsigned char __clz_tab[] =
+{
+ 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,
+};
diff --git a/REORG.TODO/stdlib/mpn2dbl.c b/REORG.TODO/stdlib/mpn2dbl.c
new file mode 100644
index 0000000000..0196e50cad
--- /dev/null
+++ b/REORG.TODO/stdlib/mpn2dbl.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include <float.h>
+
+/* Convert a multi-precision integer of the needed number of bits and an
+ integral power of two to a `double'. */
+
+double
+__mpn_construct_double (mp_srcptr frac_ptr, int expt, int negative)
+{
+#error "__mpn_construct_double not implemented for this floating point format"
+}
diff --git a/REORG.TODO/stdlib/mpn2flt.c b/REORG.TODO/stdlib/mpn2flt.c
new file mode 100644
index 0000000000..62a208d6c7
--- /dev/null
+++ b/REORG.TODO/stdlib/mpn2flt.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "gmp.h"
+#include "gmp-impl.h"
+#include <float.h>
+
+/* Convert a multi-precision integer of the needed number of bits and an
+ integral power of two to a `float'. */
+
+float
+__mpn_construct_float (mp_srcptr frac_ptr, int expt, int negative)
+{
+#error "__mpn_construct_float not implemented for this floating point format"
+}
diff --git a/REORG.TODO/stdlib/mpn2ldbl.c b/REORG.TODO/stdlib/mpn2ldbl.c
new file mode 100644
index 0000000000..450f9381cc
--- /dev/null
+++ b/REORG.TODO/stdlib/mpn2ldbl.c
@@ -0,0 +1 @@
+/* Empty. Not needed unless ldbl support is in. */
diff --git a/REORG.TODO/stdlib/mrand48.c b/REORG.TODO/stdlib/mrand48.c
new file mode 100644
index 0000000000..cbc8aaf786
--- /dev/null
+++ b/REORG.TODO/stdlib/mrand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+long int
+mrand48 (void)
+{
+ long int result;
+
+ (void) __jrand48_r (__libc_drand48_data.__x, &__libc_drand48_data, &result);
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/mrand48_r.c b/REORG.TODO/stdlib/mrand48_r.c
new file mode 100644
index 0000000000..a674b5b26d
--- /dev/null
+++ b/REORG.TODO/stdlib/mrand48_r.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+int
+mrand48_r (struct drand48_data *buffer, long int *result)
+{
+ /* Be generous for the arguments, detect some errors. */
+ if (buffer == NULL)
+ return -1;
+
+ return __jrand48_r (buffer->__x, buffer, result);
+}
diff --git a/REORG.TODO/stdlib/msort.c b/REORG.TODO/stdlib/msort.c
new file mode 100644
index 0000000000..c00f389601
--- /dev/null
+++ b/REORG.TODO/stdlib/msort.c
@@ -0,0 +1,310 @@
+/* An alternative to qsort, with an identical interface.
+ This file is part of the GNU C Library.
+ Copyright (C) 1992-2017 Free Software Foundation, Inc.
+ Written by Mike Haertel, September 1988.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <alloca.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <memcopy.h>
+#include <errno.h>
+#include <atomic.h>
+
+struct msort_param
+{
+ size_t s;
+ size_t var;
+ __compar_d_fn_t cmp;
+ void *arg;
+ char *t;
+};
+static void msort_with_tmp (const struct msort_param *p, void *b, size_t n);
+
+static void
+msort_with_tmp (const struct msort_param *p, void *b, size_t n)
+{
+ char *b1, *b2;
+ size_t n1, n2;
+
+ if (n <= 1)
+ return;
+
+ n1 = n / 2;
+ n2 = n - n1;
+ b1 = b;
+ b2 = (char *) b + (n1 * p->s);
+
+ msort_with_tmp (p, b1, n1);
+ msort_with_tmp (p, b2, n2);
+
+ char *tmp = p->t;
+ const size_t s = p->s;
+ __compar_d_fn_t cmp = p->cmp;
+ void *arg = p->arg;
+ switch (p->var)
+ {
+ case 0:
+ while (n1 > 0 && n2 > 0)
+ {
+ if ((*cmp) (b1, b2, arg) <= 0)
+ {
+ *(uint32_t *) tmp = *(uint32_t *) b1;
+ b1 += sizeof (uint32_t);
+ --n1;
+ }
+ else
+ {
+ *(uint32_t *) tmp = *(uint32_t *) b2;
+ b2 += sizeof (uint32_t);
+ --n2;
+ }
+ tmp += sizeof (uint32_t);
+ }
+ break;
+ case 1:
+ while (n1 > 0 && n2 > 0)
+ {
+ if ((*cmp) (b1, b2, arg) <= 0)
+ {
+ *(uint64_t *) tmp = *(uint64_t *) b1;
+ b1 += sizeof (uint64_t);
+ --n1;
+ }
+ else
+ {
+ *(uint64_t *) tmp = *(uint64_t *) b2;
+ b2 += sizeof (uint64_t);
+ --n2;
+ }
+ tmp += sizeof (uint64_t);
+ }
+ break;
+ case 2:
+ while (n1 > 0 && n2 > 0)
+ {
+ unsigned long *tmpl = (unsigned long *) tmp;
+ unsigned long *bl;
+
+ tmp += s;
+ if ((*cmp) (b1, b2, arg) <= 0)
+ {
+ bl = (unsigned long *) b1;
+ b1 += s;
+ --n1;
+ }
+ else
+ {
+ bl = (unsigned long *) b2;
+ b2 += s;
+ --n2;
+ }
+ while (tmpl < (unsigned long *) tmp)
+ *tmpl++ = *bl++;
+ }
+ break;
+ case 3:
+ while (n1 > 0 && n2 > 0)
+ {
+ if ((*cmp) (*(const void **) b1, *(const void **) b2, arg) <= 0)
+ {
+ *(void **) tmp = *(void **) b1;
+ b1 += sizeof (void *);
+ --n1;
+ }
+ else
+ {
+ *(void **) tmp = *(void **) b2;
+ b2 += sizeof (void *);
+ --n2;
+ }
+ tmp += sizeof (void *);
+ }
+ break;
+ default:
+ while (n1 > 0 && n2 > 0)
+ {
+ if ((*cmp) (b1, b2, arg) <= 0)
+ {
+ tmp = (char *) __mempcpy (tmp, b1, s);
+ b1 += s;
+ --n1;
+ }
+ else
+ {
+ tmp = (char *) __mempcpy (tmp, b2, s);
+ b2 += s;
+ --n2;
+ }
+ }
+ break;
+ }
+
+ if (n1 > 0)
+ memcpy (tmp, b1, n1 * s);
+ memcpy (b, p->t, (n - n2) * s);
+}
+
+
+void
+__qsort_r (void *b, size_t n, size_t s, __compar_d_fn_t cmp, void *arg)
+{
+ size_t size = n * s;
+ char *tmp = NULL;
+ struct msort_param p;
+
+ /* For large object sizes use indirect sorting. */
+ if (s > 32)
+ size = 2 * n * sizeof (void *) + s;
+
+ if (size < 1024)
+ /* The temporary array is small, so put it on the stack. */
+ p.t = __alloca (size);
+ else
+ {
+ /* We should avoid allocating too much memory since this might
+ have to be backed up by swap space. */
+ static long int phys_pages;
+ static int pagesize;
+
+ if (pagesize == 0)
+ {
+ phys_pages = __sysconf (_SC_PHYS_PAGES);
+
+ if (phys_pages == -1)
+ /* Error while determining the memory size. So let's
+ assume there is enough memory. Otherwise the
+ implementer should provide a complete implementation of
+ the `sysconf' function. */
+ phys_pages = (long int) (~0ul >> 1);
+
+ /* The following determines that we will never use more than
+ a quarter of the physical memory. */
+ phys_pages /= 4;
+
+ /* Make sure phys_pages is written to memory. */
+ atomic_write_barrier ();
+
+ pagesize = __sysconf (_SC_PAGESIZE);
+ }
+
+ /* Just a comment here. We cannot compute
+ phys_pages * pagesize
+ and compare the needed amount of memory against this value.
+ The problem is that some systems might have more physical
+ memory then can be represented with a `size_t' value (when
+ measured in bytes. */
+
+ /* If the memory requirements are too high don't allocate memory. */
+ if (size / pagesize > (size_t) phys_pages)
+ {
+ _quicksort (b, n, s, cmp, arg);
+ return;
+ }
+
+ /* It's somewhat large, so malloc it. */
+ int save = errno;
+ tmp = malloc (size);
+ __set_errno (save);
+ if (tmp == NULL)
+ {
+ /* Couldn't get space, so use the slower algorithm
+ that doesn't need a temporary array. */
+ _quicksort (b, n, s, cmp, arg);
+ return;
+ }
+ p.t = tmp;
+ }
+
+ p.s = s;
+ p.var = 4;
+ p.cmp = cmp;
+ p.arg = arg;
+
+ if (s > 32)
+ {
+ /* Indirect sorting. */
+ char *ip = (char *) b;
+ void **tp = (void **) (p.t + n * sizeof (void *));
+ void **t = tp;
+ void *tmp_storage = (void *) (tp + n);
+
+ while ((void *) t < tmp_storage)
+ {
+ *t++ = ip;
+ ip += s;
+ }
+ p.s = sizeof (void *);
+ p.var = 3;
+ msort_with_tmp (&p, p.t + n * sizeof (void *), n);
+
+ /* tp[0] .. tp[n - 1] is now sorted, copy around entries of
+ the original array. Knuth vol. 3 (2nd ed.) exercise 5.2-10. */
+ char *kp;
+ size_t i;
+ for (i = 0, ip = (char *) b; i < n; i++, ip += s)
+ if ((kp = tp[i]) != ip)
+ {
+ size_t j = i;
+ char *jp = ip;
+ memcpy (tmp_storage, ip, s);
+
+ do
+ {
+ size_t k = (kp - (char *) b) / s;
+ tp[j] = jp;
+ memcpy (jp, kp, s);
+ j = k;
+ jp = kp;
+ kp = tp[k];
+ }
+ while (kp != ip);
+
+ tp[j] = jp;
+ memcpy (jp, tmp_storage, s);
+ }
+ }
+ else
+ {
+ if ((s & (sizeof (uint32_t) - 1)) == 0
+ && ((char *) b - (char *) 0) % __alignof__ (uint32_t) == 0)
+ {
+ if (s == sizeof (uint32_t))
+ p.var = 0;
+ else if (s == sizeof (uint64_t)
+ && ((char *) b - (char *) 0) % __alignof__ (uint64_t) == 0)
+ p.var = 1;
+ else if ((s & (sizeof (unsigned long) - 1)) == 0
+ && ((char *) b - (char *) 0)
+ % __alignof__ (unsigned long) == 0)
+ p.var = 2;
+ }
+ msort_with_tmp (&p, b, n);
+ }
+ free (tmp);
+}
+libc_hidden_def (__qsort_r)
+weak_alias (__qsort_r, qsort_r)
+
+
+void
+qsort (void *b, size_t n, size_t s, __compar_fn_t cmp)
+{
+ return __qsort_r (b, n, s, (__compar_d_fn_t) cmp, NULL);
+}
+libc_hidden_def (qsort)
diff --git a/REORG.TODO/stdlib/mul.c b/REORG.TODO/stdlib/mul.c
new file mode 100644
index 0000000000..88ba1c5176
--- /dev/null
+++ b/REORG.TODO/stdlib/mul.c
@@ -0,0 +1,142 @@
+/* mpn_mul -- Multiply two natural numbers.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+/* Multiply the natural numbers u (pointed to by UP, with USIZE limbs)
+ and v (pointed to by VP, with VSIZE limbs), and store the result at
+ PRODP. USIZE + VSIZE limbs are always stored, but if the input
+ operands are normalized. Return the most significant limb of the
+ result.
+
+ NOTE: The space pointed to by PRODP is overwritten before finished
+ with U and V, so overlap is an error.
+
+ Argument constraints:
+ 1. USIZE >= VSIZE.
+ 2. PRODP != UP and PRODP != VP, i.e. the destination
+ must be distinct from the multiplier and the multiplicand. */
+
+/* If KARATSUBA_THRESHOLD is not already defined, define it to a
+ value which is good on most machines. */
+#ifndef KARATSUBA_THRESHOLD
+#define KARATSUBA_THRESHOLD 32
+#endif
+
+mp_limb_t
+mpn_mul (mp_ptr prodp,
+ mp_srcptr up, mp_size_t usize,
+ mp_srcptr vp, mp_size_t vsize)
+{
+ mp_ptr prod_endp = prodp + usize + vsize - 1;
+ mp_limb_t cy;
+ mp_ptr tspace;
+ TMP_DECL (marker);
+
+ if (vsize < KARATSUBA_THRESHOLD)
+ {
+ /* Handle simple cases with traditional multiplication.
+
+ This is the most critical code of the entire function. All
+ multiplies rely on this, both small and huge. Small ones arrive
+ here immediately. Huge ones arrive here as this is the base case
+ for Karatsuba's recursive algorithm below. */
+ mp_size_t i;
+ mp_limb_t cy_limb;
+ mp_limb_t v_limb;
+
+ if (vsize == 0)
+ return 0;
+
+ /* Multiply by the first limb in V separately, as the result can be
+ stored (not added) to PROD. We also avoid a loop for zeroing. */
+ v_limb = vp[0];
+ if (v_limb <= 1)
+ {
+ if (v_limb == 1)
+ MPN_COPY (prodp, up, usize);
+ else
+ MPN_ZERO (prodp, usize);
+ cy_limb = 0;
+ }
+ else
+ cy_limb = mpn_mul_1 (prodp, up, usize, v_limb);
+
+ prodp[usize] = cy_limb;
+ prodp++;
+
+ /* For each iteration in the outer loop, multiply one limb from
+ U with one limb from V, and add it to PROD. */
+ for (i = 1; i < vsize; i++)
+ {
+ v_limb = vp[i];
+ if (v_limb <= 1)
+ {
+ cy_limb = 0;
+ if (v_limb == 1)
+ cy_limb = mpn_add_n (prodp, prodp, up, usize);
+ }
+ else
+ cy_limb = mpn_addmul_1 (prodp, up, usize, v_limb);
+
+ prodp[usize] = cy_limb;
+ prodp++;
+ }
+ return cy_limb;
+ }
+
+ TMP_MARK (marker);
+
+ tspace = (mp_ptr) TMP_ALLOC (2 * vsize * BYTES_PER_MP_LIMB);
+ MPN_MUL_N_RECURSE (prodp, up, vp, vsize, tspace);
+
+ prodp += vsize;
+ up += vsize;
+ usize -= vsize;
+ if (usize >= vsize)
+ {
+ mp_ptr tp = (mp_ptr) TMP_ALLOC (2 * vsize * BYTES_PER_MP_LIMB);
+ do
+ {
+ MPN_MUL_N_RECURSE (tp, up, vp, vsize, tspace);
+ cy = mpn_add_n (prodp, prodp, tp, vsize);
+ mpn_add_1 (prodp + vsize, tp + vsize, vsize, cy);
+ prodp += vsize;
+ up += vsize;
+ usize -= vsize;
+ }
+ while (usize >= vsize);
+ }
+
+ /* True: usize < vsize. */
+
+ /* Make life simple: Recurse. */
+
+ if (usize != 0)
+ {
+ mpn_mul (tspace, vp, vsize, up, usize);
+ cy = mpn_add_n (prodp, prodp, tspace, vsize);
+ mpn_add_1 (prodp + vsize, tspace + vsize, usize, cy);
+ }
+
+ TMP_FREE (marker);
+ return *prod_endp;
+}
diff --git a/REORG.TODO/stdlib/mul_1.c b/REORG.TODO/stdlib/mul_1.c
new file mode 100644
index 0000000000..2c590d2741
--- /dev/null
+++ b/REORG.TODO/stdlib/mul_1.c
@@ -0,0 +1,55 @@
+/* mpn_mul_1 -- Multiply a limb vector with a single limb and
+ store the product in a second limb vector.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+mp_limb_t
+mpn_mul_1 (register mp_ptr res_ptr, register mp_srcptr s1_ptr,
+ mp_size_t s1_size, register mp_limb_t s2_limb)
+{
+ register mp_limb_t cy_limb;
+ register mp_size_t j;
+ register mp_limb_t prod_high, prod_low;
+
+ /* The loop counter and index J goes from -S1_SIZE to -1. This way
+ the loop becomes faster. */
+ j = -s1_size;
+
+ /* Offset the base pointers to compensate for the negative indices. */
+ s1_ptr -= j;
+ res_ptr -= j;
+
+ cy_limb = 0;
+ do
+ {
+ umul_ppmm (prod_high, prod_low, s1_ptr[j], s2_limb);
+
+ prod_low += cy_limb;
+ cy_limb = (prod_low < cy_limb) + prod_high;
+
+ res_ptr[j] = prod_low;
+ }
+ while (++j != 0);
+
+ return cy_limb;
+}
diff --git a/REORG.TODO/stdlib/mul_n.c b/REORG.TODO/stdlib/mul_n.c
new file mode 100644
index 0000000000..cf243242cc
--- /dev/null
+++ b/REORG.TODO/stdlib/mul_n.c
@@ -0,0 +1,360 @@
+/* mpn_mul_n -- Multiply two natural numbers of length n.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+/* Multiply the natural numbers u (pointed to by UP) and v (pointed to by VP),
+ both with SIZE limbs, and store the result at PRODP. 2 * SIZE limbs are
+ always stored. Return the most significant limb.
+
+ Argument constraints:
+ 1. PRODP != UP and PRODP != VP, i.e. the destination
+ must be distinct from the multiplier and the multiplicand. */
+
+/* If KARATSUBA_THRESHOLD is not already defined, define it to a
+ value which is good on most machines. */
+#ifndef KARATSUBA_THRESHOLD
+#define KARATSUBA_THRESHOLD 32
+#endif
+
+/* The code can't handle KARATSUBA_THRESHOLD smaller than 2. */
+#if KARATSUBA_THRESHOLD < 2
+#undef KARATSUBA_THRESHOLD
+#define KARATSUBA_THRESHOLD 2
+#endif
+
+/* Handle simple cases with traditional multiplication.
+
+ This is the most critical code of multiplication. All multiplies rely
+ on this, both small and huge. Small ones arrive here immediately. Huge
+ ones arrive here as this is the base case for Karatsuba's recursive
+ algorithm below. */
+
+void
+impn_mul_n_basecase (mp_ptr prodp, mp_srcptr up, mp_srcptr vp, mp_size_t size)
+{
+ mp_size_t i;
+ mp_limb_t cy_limb;
+ mp_limb_t v_limb;
+
+ /* Multiply by the first limb in V separately, as the result can be
+ stored (not added) to PROD. We also avoid a loop for zeroing. */
+ v_limb = vp[0];
+ if (v_limb <= 1)
+ {
+ if (v_limb == 1)
+ MPN_COPY (prodp, up, size);
+ else
+ MPN_ZERO (prodp, size);
+ cy_limb = 0;
+ }
+ else
+ cy_limb = mpn_mul_1 (prodp, up, size, v_limb);
+
+ prodp[size] = cy_limb;
+ prodp++;
+
+ /* For each iteration in the outer loop, multiply one limb from
+ U with one limb from V, and add it to PROD. */
+ for (i = 1; i < size; i++)
+ {
+ v_limb = vp[i];
+ if (v_limb <= 1)
+ {
+ cy_limb = 0;
+ if (v_limb == 1)
+ cy_limb = mpn_add_n (prodp, prodp, up, size);
+ }
+ else
+ cy_limb = mpn_addmul_1 (prodp, up, size, v_limb);
+
+ prodp[size] = cy_limb;
+ prodp++;
+ }
+}
+
+void
+impn_mul_n (mp_ptr prodp,
+ mp_srcptr up, mp_srcptr vp, mp_size_t size, mp_ptr tspace)
+{
+ if ((size & 1) != 0)
+ {
+ /* The size is odd, the code code below doesn't handle that.
+ Multiply the least significant (size - 1) limbs with a recursive
+ call, and handle the most significant limb of S1 and S2
+ separately. */
+ /* A slightly faster way to do this would be to make the Karatsuba
+ code below behave as if the size were even, and let it check for
+ odd size in the end. I.e., in essence move this code to the end.
+ Doing so would save us a recursive call, and potentially make the
+ stack grow a lot less. */
+
+ mp_size_t esize = size - 1; /* even size */
+ mp_limb_t cy_limb;
+
+ MPN_MUL_N_RECURSE (prodp, up, vp, esize, tspace);
+ cy_limb = mpn_addmul_1 (prodp + esize, up, esize, vp[esize]);
+ prodp[esize + esize] = cy_limb;
+ cy_limb = mpn_addmul_1 (prodp + esize, vp, size, up[esize]);
+
+ prodp[esize + size] = cy_limb;
+ }
+ else
+ {
+ /* Anatolij Alekseevich Karatsuba's divide-and-conquer algorithm.
+
+ Split U in two pieces, U1 and U0, such that
+ U = U0 + U1*(B**n),
+ and V in V1 and V0, such that
+ V = V0 + V1*(B**n).
+
+ UV is then computed recursively using the identity
+
+ 2n n n n
+ UV = (B + B )U V + B (U -U )(V -V ) + (B + 1)U V
+ 1 1 1 0 0 1 0 0
+
+ Where B = 2**BITS_PER_MP_LIMB. */
+
+ mp_size_t hsize = size >> 1;
+ mp_limb_t cy;
+ int negflg;
+
+ /*** Product H. ________________ ________________
+ |_____U1 x V1____||____U0 x V0_____| */
+ /* Put result in upper part of PROD and pass low part of TSPACE
+ as new TSPACE. */
+ MPN_MUL_N_RECURSE (prodp + size, up + hsize, vp + hsize, hsize, tspace);
+
+ /*** Product M. ________________
+ |_(U1-U0)(V0-V1)_| */
+ if (mpn_cmp (up + hsize, up, hsize) >= 0)
+ {
+ mpn_sub_n (prodp, up + hsize, up, hsize);
+ negflg = 0;
+ }
+ else
+ {
+ mpn_sub_n (prodp, up, up + hsize, hsize);
+ negflg = 1;
+ }
+ if (mpn_cmp (vp + hsize, vp, hsize) >= 0)
+ {
+ mpn_sub_n (prodp + hsize, vp + hsize, vp, hsize);
+ negflg ^= 1;
+ }
+ else
+ {
+ mpn_sub_n (prodp + hsize, vp, vp + hsize, hsize);
+ /* No change of NEGFLG. */
+ }
+ /* Read temporary operands from low part of PROD.
+ Put result in low part of TSPACE using upper part of TSPACE
+ as new TSPACE. */
+ MPN_MUL_N_RECURSE (tspace, prodp, prodp + hsize, hsize, tspace + size);
+
+ /*** Add/copy product H. */
+ MPN_COPY (prodp + hsize, prodp + size, hsize);
+ cy = mpn_add_n (prodp + size, prodp + size, prodp + size + hsize, hsize);
+
+ /*** Add product M (if NEGFLG M is a negative number). */
+ if (negflg)
+ cy -= mpn_sub_n (prodp + hsize, prodp + hsize, tspace, size);
+ else
+ cy += mpn_add_n (prodp + hsize, prodp + hsize, tspace, size);
+
+ /*** Product L. ________________ ________________
+ |________________||____U0 x V0_____| */
+ /* Read temporary operands from low part of PROD.
+ Put result in low part of TSPACE using upper part of TSPACE
+ as new TSPACE. */
+ MPN_MUL_N_RECURSE (tspace, up, vp, hsize, tspace + size);
+
+ /*** Add/copy Product L (twice). */
+
+ cy += mpn_add_n (prodp + hsize, prodp + hsize, tspace, size);
+ if (cy)
+ mpn_add_1 (prodp + hsize + size, prodp + hsize + size, hsize, cy);
+
+ MPN_COPY (prodp, tspace, hsize);
+ cy = mpn_add_n (prodp + hsize, prodp + hsize, tspace + hsize, hsize);
+ if (cy)
+ mpn_add_1 (prodp + size, prodp + size, size, 1);
+ }
+}
+
+void
+impn_sqr_n_basecase (mp_ptr prodp, mp_srcptr up, mp_size_t size)
+{
+ mp_size_t i;
+ mp_limb_t cy_limb;
+ mp_limb_t v_limb;
+
+ /* Multiply by the first limb in V separately, as the result can be
+ stored (not added) to PROD. We also avoid a loop for zeroing. */
+ v_limb = up[0];
+ if (v_limb <= 1)
+ {
+ if (v_limb == 1)
+ MPN_COPY (prodp, up, size);
+ else
+ MPN_ZERO (prodp, size);
+ cy_limb = 0;
+ }
+ else
+ cy_limb = mpn_mul_1 (prodp, up, size, v_limb);
+
+ prodp[size] = cy_limb;
+ prodp++;
+
+ /* For each iteration in the outer loop, multiply one limb from
+ U with one limb from V, and add it to PROD. */
+ for (i = 1; i < size; i++)
+ {
+ v_limb = up[i];
+ if (v_limb <= 1)
+ {
+ cy_limb = 0;
+ if (v_limb == 1)
+ cy_limb = mpn_add_n (prodp, prodp, up, size);
+ }
+ else
+ cy_limb = mpn_addmul_1 (prodp, up, size, v_limb);
+
+ prodp[size] = cy_limb;
+ prodp++;
+ }
+}
+
+void
+impn_sqr_n (mp_ptr prodp,
+ mp_srcptr up, mp_size_t size, mp_ptr tspace)
+{
+ if ((size & 1) != 0)
+ {
+ /* The size is odd, the code code below doesn't handle that.
+ Multiply the least significant (size - 1) limbs with a recursive
+ call, and handle the most significant limb of S1 and S2
+ separately. */
+ /* A slightly faster way to do this would be to make the Karatsuba
+ code below behave as if the size were even, and let it check for
+ odd size in the end. I.e., in essence move this code to the end.
+ Doing so would save us a recursive call, and potentially make the
+ stack grow a lot less. */
+
+ mp_size_t esize = size - 1; /* even size */
+ mp_limb_t cy_limb;
+
+ MPN_SQR_N_RECURSE (prodp, up, esize, tspace);
+ cy_limb = mpn_addmul_1 (prodp + esize, up, esize, up[esize]);
+ prodp[esize + esize] = cy_limb;
+ cy_limb = mpn_addmul_1 (prodp + esize, up, size, up[esize]);
+
+ prodp[esize + size] = cy_limb;
+ }
+ else
+ {
+ mp_size_t hsize = size >> 1;
+ mp_limb_t cy;
+
+ /*** Product H. ________________ ________________
+ |_____U1 x U1____||____U0 x U0_____| */
+ /* Put result in upper part of PROD and pass low part of TSPACE
+ as new TSPACE. */
+ MPN_SQR_N_RECURSE (prodp + size, up + hsize, hsize, tspace);
+
+ /*** Product M. ________________
+ |_(U1-U0)(U0-U1)_| */
+ if (mpn_cmp (up + hsize, up, hsize) >= 0)
+ {
+ mpn_sub_n (prodp, up + hsize, up, hsize);
+ }
+ else
+ {
+ mpn_sub_n (prodp, up, up + hsize, hsize);
+ }
+
+ /* Read temporary operands from low part of PROD.
+ Put result in low part of TSPACE using upper part of TSPACE
+ as new TSPACE. */
+ MPN_SQR_N_RECURSE (tspace, prodp, hsize, tspace + size);
+
+ /*** Add/copy product H. */
+ MPN_COPY (prodp + hsize, prodp + size, hsize);
+ cy = mpn_add_n (prodp + size, prodp + size, prodp + size + hsize, hsize);
+
+ /*** Add product M (if NEGFLG M is a negative number). */
+ cy -= mpn_sub_n (prodp + hsize, prodp + hsize, tspace, size);
+
+ /*** Product L. ________________ ________________
+ |________________||____U0 x U0_____| */
+ /* Read temporary operands from low part of PROD.
+ Put result in low part of TSPACE using upper part of TSPACE
+ as new TSPACE. */
+ MPN_SQR_N_RECURSE (tspace, up, hsize, tspace + size);
+
+ /*** Add/copy Product L (twice). */
+
+ cy += mpn_add_n (prodp + hsize, prodp + hsize, tspace, size);
+ if (cy)
+ mpn_add_1 (prodp + hsize + size, prodp + hsize + size, hsize, cy);
+
+ MPN_COPY (prodp, tspace, hsize);
+ cy = mpn_add_n (prodp + hsize, prodp + hsize, tspace + hsize, hsize);
+ if (cy)
+ mpn_add_1 (prodp + size, prodp + size, size, 1);
+ }
+}
+
+/* This should be made into an inline function in gmp.h. */
+void
+mpn_mul_n (mp_ptr prodp, mp_srcptr up, mp_srcptr vp, mp_size_t size)
+{
+ TMP_DECL (marker);
+ TMP_MARK (marker);
+ if (up == vp)
+ {
+ if (size < KARATSUBA_THRESHOLD)
+ {
+ impn_sqr_n_basecase (prodp, up, size);
+ }
+ else
+ {
+ mp_ptr tspace;
+ tspace = (mp_ptr) TMP_ALLOC (2 * size * BYTES_PER_MP_LIMB);
+ impn_sqr_n (prodp, up, size, tspace);
+ }
+ }
+ else
+ {
+ if (size < KARATSUBA_THRESHOLD)
+ {
+ impn_mul_n_basecase (prodp, up, vp, size);
+ }
+ else
+ {
+ mp_ptr tspace;
+ tspace = (mp_ptr) TMP_ALLOC (2 * size * BYTES_PER_MP_LIMB);
+ impn_mul_n (prodp, up, vp, size, tspace);
+ }
+ }
+ TMP_FREE (marker);
+}
diff --git a/REORG.TODO/stdlib/nrand48.c b/REORG.TODO/stdlib/nrand48.c
new file mode 100644
index 0000000000..9fdc62ff5f
--- /dev/null
+++ b/REORG.TODO/stdlib/nrand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+long int
+nrand48 (unsigned short int xsubi[3])
+{
+ long int result;
+
+ (void) __nrand48_r (xsubi, &__libc_drand48_data, &result);
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/nrand48_r.c b/REORG.TODO/stdlib/nrand48_r.c
new file mode 100644
index 0000000000..e6f385d907
--- /dev/null
+++ b/REORG.TODO/stdlib/nrand48_r.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+int
+__nrand48_r (unsigned short int xsubi[3], struct drand48_data *buffer,
+ long int *result)
+{
+ /* Compute next state. */
+ if (__drand48_iterate (xsubi, buffer) < 0)
+ return -1;
+
+ /* Store the result. */
+ if (sizeof (unsigned short int) == 2)
+ *result = xsubi[2] << 15 | xsubi[1] >> 1;
+ else
+ *result = xsubi[2] >> 1;
+
+ return 0;
+}
+weak_alias (__nrand48_r, nrand48_r)
diff --git a/REORG.TODO/stdlib/old_atexit.c b/REORG.TODO/stdlib/old_atexit.c
new file mode 100644
index 0000000000..44bbd699bd
--- /dev/null
+++ b/REORG.TODO/stdlib/old_atexit.c
@@ -0,0 +1,8 @@
+#include <shlib-compat.h>
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2_2)
+# define atexit attribute_compat_text_section __dyn_atexit
+# include "atexit.c"
+# undef atexit
+compat_symbol (libc, __dyn_atexit, atexit, GLIBC_2_0);
+#endif
diff --git a/REORG.TODO/stdlib/on_exit.c b/REORG.TODO/stdlib/on_exit.c
new file mode 100644
index 0000000000..83845e76d8
--- /dev/null
+++ b/REORG.TODO/stdlib/on_exit.c
@@ -0,0 +1,41 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include "exit.h"
+#include <atomic.h>
+#include <sysdep.h>
+
+/* Register a function to be called by exit. */
+int
+__on_exit (void (*func) (int status, void *arg), void *arg)
+{
+ struct exit_function *new = __new_exitfn (&__exit_funcs);
+
+ if (new == NULL)
+ return -1;
+
+#ifdef PTR_MANGLE
+ PTR_MANGLE (func);
+#endif
+ new->func.on.fn = func;
+ new->func.on.arg = arg;
+ atomic_write_barrier ();
+ new->flavor = ef_on;
+ return 0;
+}
+weak_alias (__on_exit, on_exit)
diff --git a/REORG.TODO/stdlib/putenv.c b/REORG.TODO/stdlib/putenv.c
new file mode 100644
index 0000000000..c0488fc505
--- /dev/null
+++ b/REORG.TODO/stdlib/putenv.c
@@ -0,0 +1,87 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if _LIBC || HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+#if _LIBC || HAVE_STRING_H
+# include <string.h>
+#endif
+
+#if !__GNU_LIBRARY__ && !HAVE_STRCHR
+# define strchr index
+#endif
+
+#ifndef _LIBC
+# ifdef HAVE_ALLOCA_H
+# include <alloca.h>
+# else
+# ifdef __GNUC__
+# define alloca __builtin_alloca
+# else
+extern char *alloca ();
+# endif /* __GNUC__ */
+# endif /* HAVE_ALLOCA_H */
+#endif /* _LIBC */
+
+
+/* Put STRING, which is of the form "NAME=VALUE", in the environment. */
+int
+putenv (char *string)
+{
+ const char *const name_end = strchr (string, '=');
+
+ if (name_end != NULL)
+ {
+ char *name;
+#ifdef _LIBC
+ int use_malloc = !__libc_use_alloca (name_end - string + 1);
+ if (__builtin_expect (use_malloc, 0))
+ {
+ name = __strndup (string, name_end - string);
+ if (name == NULL)
+ return -1;
+ }
+ else
+ name = strndupa (string, name_end - string);
+#else
+# define use_malloc 1
+ name = malloc (name_end - string + 1);
+ if (name == NULL)
+ return -1;
+ memcpy (name, string, name_end - string);
+ name[name_end - string] = '\0';
+#endif
+ int result = __add_to_environ (name, NULL, string, 1);
+
+ if (__glibc_unlikely (use_malloc))
+ free (name);
+
+ return result;
+ }
+
+ __unsetenv (string);
+ return 0;
+}
diff --git a/REORG.TODO/stdlib/qsort.c b/REORG.TODO/stdlib/qsort.c
new file mode 100644
index 0000000000..9badf33ec0
--- /dev/null
+++ b/REORG.TODO/stdlib/qsort.c
@@ -0,0 +1,249 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Written by Douglas C. Schmidt (schmidt@ics.uci.edu).
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* If you consider tuning this algorithm, you should consult first:
+ Engineering a sort function; Jon Bentley and M. Douglas McIlroy;
+ Software - Practice and Experience; Vol. 23 (11), 1249-1265, 1993. */
+
+#include <alloca.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Byte-wise swap two items of size SIZE. */
+#define SWAP(a, b, size) \
+ do \
+ { \
+ size_t __size = (size); \
+ char *__a = (a), *__b = (b); \
+ do \
+ { \
+ char __tmp = *__a; \
+ *__a++ = *__b; \
+ *__b++ = __tmp; \
+ } while (--__size > 0); \
+ } while (0)
+
+/* Discontinue quicksort algorithm when partition gets below this size.
+ This particular magic number was chosen to work best on a Sun 4/260. */
+#define MAX_THRESH 4
+
+/* Stack node declarations used to store unfulfilled partition obligations. */
+typedef struct
+ {
+ char *lo;
+ char *hi;
+ } stack_node;
+
+/* The next 4 #defines implement a very fast in-line stack abstraction. */
+/* The stack needs log (total_elements) entries (we could even subtract
+ log(MAX_THRESH)). Since total_elements has type size_t, we get as
+ upper bound for log (total_elements):
+ bits per byte (CHAR_BIT) * sizeof(size_t). */
+#define STACK_SIZE (CHAR_BIT * sizeof(size_t))
+#define PUSH(low, high) ((void) ((top->lo = (low)), (top->hi = (high)), ++top))
+#define POP(low, high) ((void) (--top, (low = top->lo), (high = top->hi)))
+#define STACK_NOT_EMPTY (stack < top)
+
+
+/* Order size using quicksort. This implementation incorporates
+ four optimizations discussed in Sedgewick:
+
+ 1. Non-recursive, using an explicit stack of pointer that store the
+ next array partition to sort. To save time, this maximum amount
+ of space required to store an array of SIZE_MAX is allocated on the
+ stack. Assuming a 32-bit (64 bit) integer for size_t, this needs
+ only 32 * sizeof(stack_node) == 256 bytes (for 64 bit: 1024 bytes).
+ Pretty cheap, actually.
+
+ 2. Chose the pivot element using a median-of-three decision tree.
+ This reduces the probability of selecting a bad pivot value and
+ eliminates certain extraneous comparisons.
+
+ 3. Only quicksorts TOTAL_ELEMS / MAX_THRESH partitions, leaving
+ insertion sort to order the MAX_THRESH items within each partition.
+ This is a big win, since insertion sort is faster for small, mostly
+ sorted array segments.
+
+ 4. The larger of the two sub-partitions is always pushed onto the
+ stack first, with the algorithm then concentrating on the
+ smaller partition. This *guarantees* no more than log (total_elems)
+ stack size is needed (actually O(1) in this case)! */
+
+void
+_quicksort (void *const pbase, size_t total_elems, size_t size,
+ __compar_d_fn_t cmp, void *arg)
+{
+ char *base_ptr = (char *) pbase;
+
+ const size_t max_thresh = MAX_THRESH * size;
+
+ if (total_elems == 0)
+ /* Avoid lossage with unsigned arithmetic below. */
+ return;
+
+ if (total_elems > MAX_THRESH)
+ {
+ char *lo = base_ptr;
+ char *hi = &lo[size * (total_elems - 1)];
+ stack_node stack[STACK_SIZE];
+ stack_node *top = stack;
+
+ PUSH (NULL, NULL);
+
+ while (STACK_NOT_EMPTY)
+ {
+ char *left_ptr;
+ char *right_ptr;
+
+ /* Select median value from among LO, MID, and HI. Rearrange
+ LO and HI so the three values are sorted. This lowers the
+ probability of picking a pathological pivot value and
+ skips a comparison for both the LEFT_PTR and RIGHT_PTR in
+ the while loops. */
+
+ char *mid = lo + size * ((hi - lo) / size >> 1);
+
+ if ((*cmp) ((void *) mid, (void *) lo, arg) < 0)
+ SWAP (mid, lo, size);
+ if ((*cmp) ((void *) hi, (void *) mid, arg) < 0)
+ SWAP (mid, hi, size);
+ else
+ goto jump_over;
+ if ((*cmp) ((void *) mid, (void *) lo, arg) < 0)
+ SWAP (mid, lo, size);
+ jump_over:;
+
+ left_ptr = lo + size;
+ right_ptr = hi - size;
+
+ /* Here's the famous ``collapse the walls'' section of quicksort.
+ Gotta like those tight inner loops! They are the main reason
+ that this algorithm runs much faster than others. */
+ do
+ {
+ while ((*cmp) ((void *) left_ptr, (void *) mid, arg) < 0)
+ left_ptr += size;
+
+ while ((*cmp) ((void *) mid, (void *) right_ptr, arg) < 0)
+ right_ptr -= size;
+
+ if (left_ptr < right_ptr)
+ {
+ SWAP (left_ptr, right_ptr, size);
+ if (mid == left_ptr)
+ mid = right_ptr;
+ else if (mid == right_ptr)
+ mid = left_ptr;
+ left_ptr += size;
+ right_ptr -= size;
+ }
+ else if (left_ptr == right_ptr)
+ {
+ left_ptr += size;
+ right_ptr -= size;
+ break;
+ }
+ }
+ while (left_ptr <= right_ptr);
+
+ /* Set up pointers for next iteration. First determine whether
+ left and right partitions are below the threshold size. If so,
+ ignore one or both. Otherwise, push the larger partition's
+ bounds on the stack and continue sorting the smaller one. */
+
+ if ((size_t) (right_ptr - lo) <= max_thresh)
+ {
+ if ((size_t) (hi - left_ptr) <= max_thresh)
+ /* Ignore both small partitions. */
+ POP (lo, hi);
+ else
+ /* Ignore small left partition. */
+ lo = left_ptr;
+ }
+ else if ((size_t) (hi - left_ptr) <= max_thresh)
+ /* Ignore small right partition. */
+ hi = right_ptr;
+ else if ((right_ptr - lo) > (hi - left_ptr))
+ {
+ /* Push larger left partition indices. */
+ PUSH (lo, right_ptr);
+ lo = left_ptr;
+ }
+ else
+ {
+ /* Push larger right partition indices. */
+ PUSH (left_ptr, hi);
+ hi = right_ptr;
+ }
+ }
+ }
+
+ /* Once the BASE_PTR array is partially sorted by quicksort the rest
+ is completely sorted using insertion sort, since this is efficient
+ for partitions below MAX_THRESH size. BASE_PTR points to the beginning
+ of the array to sort, and END_PTR points at the very last element in
+ the array (*not* one beyond it!). */
+
+#define min(x, y) ((x) < (y) ? (x) : (y))
+
+ {
+ char *const end_ptr = &base_ptr[size * (total_elems - 1)];
+ char *tmp_ptr = base_ptr;
+ char *thresh = min(end_ptr, base_ptr + max_thresh);
+ char *run_ptr;
+
+ /* Find smallest element in first threshold and place it at the
+ array's beginning. This is the smallest array element,
+ and the operation speeds up insertion sort's inner loop. */
+
+ for (run_ptr = tmp_ptr + size; run_ptr <= thresh; run_ptr += size)
+ if ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, arg) < 0)
+ tmp_ptr = run_ptr;
+
+ if (tmp_ptr != base_ptr)
+ SWAP (tmp_ptr, base_ptr, size);
+
+ /* Insertion sort, running from left-hand-side up to right-hand-side. */
+
+ run_ptr = base_ptr + size;
+ while ((run_ptr += size) <= end_ptr)
+ {
+ tmp_ptr = run_ptr - size;
+ while ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, arg) < 0)
+ tmp_ptr -= size;
+
+ tmp_ptr += size;
+ if (tmp_ptr != run_ptr)
+ {
+ char *trav;
+
+ trav = run_ptr + size;
+ while (--trav >= run_ptr)
+ {
+ char c = *trav;
+ char *hi, *lo;
+
+ for (hi = lo = trav; (lo -= size) >= tmp_ptr; hi = lo)
+ *hi = *lo;
+ *hi = c;
+ }
+ }
+ }
+ }
+}
diff --git a/REORG.TODO/stdlib/quick_exit.c b/REORG.TODO/stdlib/quick_exit.c
new file mode 100644
index 0000000000..67ad043727
--- /dev/null
+++ b/REORG.TODO/stdlib/quick_exit.c
@@ -0,0 +1,48 @@
+/* Copyright (C) 2009-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sysdep.h>
+#include <signal.h>
+#include <errno.h>
+#include <shlib-compat.h>
+#include "exit.h"
+
+void
+__new_quick_exit (int status)
+{
+ /* The new quick_exit, following C++11 18.5.12, does not run object
+ destructors. While C11 says nothing about object destructors,
+ since it has none, the intent is to run the registered
+ at_quick_exit handlers and then run _Exit immediately without
+ disturbing the state of the process and threads. */
+ __run_exit_handlers (status, &__quick_exit_funcs, false, false);
+}
+versioned_symbol (libc, __new_quick_exit, quick_exit, GLIBC_2_24);
+
+#if SHLIB_COMPAT(libc, GLIBC_2_10, GLIBC_2_24)
+void
+attribute_compat_text_section
+__old_quick_exit (int status)
+{
+ /* The old quick_exit runs thread_local destructors. */
+ __run_exit_handlers (status, &__quick_exit_funcs, false, true);
+}
+compat_symbol (libc, __old_quick_exit, quick_exit, GLIBC_2_10);
+#endif
diff --git a/REORG.TODO/stdlib/rand.c b/REORG.TODO/stdlib/rand.c
new file mode 100644
index 0000000000..a036319ce7
--- /dev/null
+++ b/REORG.TODO/stdlib/rand.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef rand
+
+
+/* Return a random integer between 0 and RAND_MAX. */
+int
+rand (void)
+{
+ return (int) __random ();
+}
diff --git a/REORG.TODO/stdlib/rand_r.c b/REORG.TODO/stdlib/rand_r.c
new file mode 100644
index 0000000000..ca681e8b53
--- /dev/null
+++ b/REORG.TODO/stdlib/rand_r.c
@@ -0,0 +1,48 @@
+/* Reentrant random function from POSIX.1c.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+/* This algorithm is mentioned in the ISO C standard, here extended
+ for 32 bits. */
+int
+rand_r (unsigned int *seed)
+{
+ unsigned int next = *seed;
+ int result;
+
+ next *= 1103515245;
+ next += 12345;
+ result = (unsigned int) (next / 65536) % 2048;
+
+ next *= 1103515245;
+ next += 12345;
+ result <<= 10;
+ result ^= (unsigned int) (next / 65536) % 1024;
+
+ next *= 1103515245;
+ next += 12345;
+ result <<= 10;
+ result ^= (unsigned int) (next / 65536) % 1024;
+
+ *seed = next;
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/random.c b/REORG.TODO/stdlib/random.c
new file mode 100644
index 0000000000..43bdb1232e
--- /dev/null
+++ b/REORG.TODO/stdlib/random.c
@@ -0,0 +1,300 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/*
+ * This is derived from the Berkeley source:
+ * @(#)random.c 5.5 (Berkeley) 7/6/88
+ * It was reworked for the GNU C Library by Roland McGrath.
+ * Rewritten to use reentrant functions by Ulrich Drepper, 1995.
+ */
+
+/*
+ Copyright (C) 1983 Regents of the University of California.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 4. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.*/
+
+#include <libc-lock.h>
+#include <limits.h>
+#include <stddef.h>
+#include <stdlib.h>
+
+
+/* An improved random number generation package. In addition to the standard
+ rand()/srand() like interface, this package also has a special state info
+ interface. The initstate() routine is called with a seed, an array of
+ bytes, and a count of how many bytes are being passed in; this array is
+ then initialized to contain information for random number generation with
+ that much state information. Good sizes for the amount of state
+ information are 32, 64, 128, and 256 bytes. The state can be switched by
+ calling the setstate() function with the same array as was initialized
+ with initstate(). By default, the package runs with 128 bytes of state
+ information and generates far better random numbers than a linear
+ congruential generator. If the amount of state information is less than
+ 32 bytes, a simple linear congruential R.N.G. is used. Internally, the
+ state information is treated as an array of longs; the zeroth element of
+ the array is the type of R.N.G. being used (small integer); the remainder
+ of the array is the state information for the R.N.G. Thus, 32 bytes of
+ state information will give 7 longs worth of state information, which will
+ allow a degree seven polynomial. (Note: The zeroth word of state
+ information also has some other information stored in it; see setstate
+ for details). The random number generation technique is a linear feedback
+ shift register approach, employing trinomials (since there are fewer terms
+ to sum up that way). In this approach, the least significant bit of all
+ the numbers in the state table will act as a linear feedback shift register,
+ and will have period 2^deg - 1 (where deg is the degree of the polynomial
+ being used, assuming that the polynomial is irreducible and primitive).
+ The higher order bits will have longer periods, since their values are
+ also influenced by pseudo-random carries out of the lower bits. The
+ total period of the generator is approximately deg*(2**deg - 1); thus
+ doubling the amount of state information has a vast influence on the
+ period of the generator. Note: The deg*(2**deg - 1) is an approximation
+ only good for large deg, when the period of the shift register is the
+ dominant factor. With deg equal to seven, the period is actually much
+ longer than the 7*(2**7 - 1) predicted by this formula. */
+
+
+
+/* For each of the currently supported random number generators, we have a
+ break value on the amount of state information (you need at least this many
+ bytes of state info to support this random number generator), a degree for
+ the polynomial (actually a trinomial) that the R.N.G. is based on, and
+ separation between the two lower order coefficients of the trinomial. */
+
+/* Linear congruential. */
+#define TYPE_0 0
+#define BREAK_0 8
+#define DEG_0 0
+#define SEP_0 0
+
+/* x**7 + x**3 + 1. */
+#define TYPE_1 1
+#define BREAK_1 32
+#define DEG_1 7
+#define SEP_1 3
+
+/* x**15 + x + 1. */
+#define TYPE_2 2
+#define BREAK_2 64
+#define DEG_2 15
+#define SEP_2 1
+
+/* x**31 + x**3 + 1. */
+#define TYPE_3 3
+#define BREAK_3 128
+#define DEG_3 31
+#define SEP_3 3
+
+/* x**63 + x + 1. */
+#define TYPE_4 4
+#define BREAK_4 256
+#define DEG_4 63
+#define SEP_4 1
+
+
+/* Array versions of the above information to make code run faster.
+ Relies on fact that TYPE_i == i. */
+
+#define MAX_TYPES 5 /* Max number of types above. */
+
+
+/* Initially, everything is set up as if from:
+ initstate(1, randtbl, 128);
+ Note that this initialization takes advantage of the fact that srandom
+ advances the front and rear pointers 10*rand_deg times, and hence the
+ rear pointer which starts at 0 will also end up at zero; thus the zeroth
+ element of the state information, which contains info about the current
+ position of the rear pointer is just
+ (MAX_TYPES * (rptr - state)) + TYPE_3 == TYPE_3. */
+
+static int32_t randtbl[DEG_3 + 1] =
+ {
+ TYPE_3,
+
+ -1726662223, 379960547, 1735697613, 1040273694, 1313901226,
+ 1627687941, -179304937, -2073333483, 1780058412, -1989503057,
+ -615974602, 344556628, 939512070, -1249116260, 1507946756,
+ -812545463, 154635395, 1388815473, -1926676823, 525320961,
+ -1009028674, 968117788, -123449607, 1284210865, 435012392,
+ -2017506339, -911064859, -370259173, 1132637927, 1398500161,
+ -205601318,
+ };
+
+
+static struct random_data unsafe_state =
+ {
+/* FPTR and RPTR are two pointers into the state info, a front and a rear
+ pointer. These two pointers are always rand_sep places apart, as they
+ cycle through the state information. (Yes, this does mean we could get
+ away with just one pointer, but the code for random is more efficient
+ this way). The pointers are left positioned as they would be from the call:
+ initstate(1, randtbl, 128);
+ (The position of the rear pointer, rptr, is really 0 (as explained above
+ in the initialization of randtbl) because the state table pointer is set
+ to point to randtbl[1] (as explained below).) */
+
+ .fptr = &randtbl[SEP_3 + 1],
+ .rptr = &randtbl[1],
+
+/* The following things are the pointer to the state information table,
+ the type of the current generator, the degree of the current polynomial
+ being used, and the separation between the two pointers.
+ Note that for efficiency of random, we remember the first location of
+ the state information, not the zeroth. Hence it is valid to access
+ state[-1], which is used to store the type of the R.N.G.
+ Also, we remember the last location, since this is more efficient than
+ indexing every time to find the address of the last element to see if
+ the front and rear pointers have wrapped. */
+
+ .state = &randtbl[1],
+
+ .rand_type = TYPE_3,
+ .rand_deg = DEG_3,
+ .rand_sep = SEP_3,
+
+ .end_ptr = &randtbl[sizeof (randtbl) / sizeof (randtbl[0])]
+};
+
+/* POSIX.1c requires that there is mutual exclusion for the `rand' and
+ `srand' functions to prevent concurrent calls from modifying common
+ data. */
+__libc_lock_define_initialized (static, lock)
+
+/* Initialize the random number generator based on the given seed. If the
+ type is the trivial no-state-information type, just remember the seed.
+ Otherwise, initializes state[] based on the given "seed" via a linear
+ congruential generator. Then, the pointers are set to known locations
+ that are exactly rand_sep places apart. Lastly, it cycles the state
+ information a given number of times to get rid of any initial dependencies
+ introduced by the L.C.R.N.G. Note that the initialization of randtbl[]
+ for default usage relies on values produced by this routine. */
+void
+__srandom (unsigned int x)
+{
+ __libc_lock_lock (lock);
+ (void) __srandom_r (x, &unsafe_state);
+ __libc_lock_unlock (lock);
+}
+
+weak_alias (__srandom, srandom)
+weak_alias (__srandom, srand)
+
+/* Initialize the state information in the given array of N bytes for
+ future random number generation. Based on the number of bytes we
+ are given, and the break values for the different R.N.G.'s, we choose
+ the best (largest) one we can and set things up for it. srandom is
+ then called to initialize the state information. Note that on return
+ from srandom, we set state[-1] to be the type multiplexed with the current
+ value of the rear pointer; this is so successive calls to initstate won't
+ lose this information and will be able to restart with setstate.
+ Note: The first thing we do is save the current state, if any, just like
+ setstate so that it doesn't matter when initstate is called.
+ Returns a pointer to the old state. */
+char *
+__initstate (unsigned int seed, char *arg_state, size_t n)
+{
+ int32_t *ostate;
+ int ret;
+
+ __libc_lock_lock (lock);
+
+ ostate = &unsafe_state.state[-1];
+
+ ret = __initstate_r (seed, arg_state, n, &unsafe_state);
+
+ __libc_lock_unlock (lock);
+
+ return ret == -1 ? NULL : (char *) ostate;
+}
+
+weak_alias (__initstate, initstate)
+
+/* Restore the state from the given state array.
+ Note: It is important that we also remember the locations of the pointers
+ in the current state information, and restore the locations of the pointers
+ from the old state information. This is done by multiplexing the pointer
+ location into the zeroth word of the state information. Note that due
+ to the order in which things are done, it is OK to call setstate with the
+ same state as the current state
+ Returns a pointer to the old state information. */
+char *
+__setstate (char *arg_state)
+{
+ int32_t *ostate;
+
+ __libc_lock_lock (lock);
+
+ ostate = &unsafe_state.state[-1];
+
+ if (__setstate_r (arg_state, &unsafe_state) < 0)
+ ostate = NULL;
+
+ __libc_lock_unlock (lock);
+
+ return (char *) ostate;
+}
+
+weak_alias (__setstate, setstate)
+
+/* If we are using the trivial TYPE_0 R.N.G., just do the old linear
+ congruential bit. Otherwise, we do our fancy trinomial stuff, which is the
+ same in all the other cases due to all the global variables that have been
+ set up. The basic operation is to add the number at the rear pointer into
+ the one at the front pointer. Then both pointers are advanced to the next
+ location cyclically in the table. The value returned is the sum generated,
+ reduced to 31 bits by throwing away the "least random" low bit.
+ Note: The code takes advantage of the fact that both the front and
+ rear pointers can't wrap on the same call by not testing the rear
+ pointer if the front one has wrapped. Returns a 31-bit random number. */
+
+long int
+__random (void)
+{
+ int32_t retval;
+
+ __libc_lock_lock (lock);
+
+ (void) __random_r (&unsafe_state, &retval);
+
+ __libc_lock_unlock (lock);
+
+ return retval;
+}
+
+weak_alias (__random, random)
diff --git a/REORG.TODO/stdlib/random_r.c b/REORG.TODO/stdlib/random_r.c
new file mode 100644
index 0000000000..c3f6f9aede
--- /dev/null
+++ b/REORG.TODO/stdlib/random_r.c
@@ -0,0 +1,401 @@
+/*
+ Copyright (C) 1995-2017 Free Software Foundation, Inc.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/*
+ Copyright (C) 1983 Regents of the University of California.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 4. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.*/
+
+/*
+ * This is derived from the Berkeley source:
+ * @(#)random.c 5.5 (Berkeley) 7/6/88
+ * It was reworked for the GNU C Library by Roland McGrath.
+ * Rewritten to be reentrant by Ulrich Drepper, 1995
+ */
+
+#include <errno.h>
+#include <limits.h>
+#include <stddef.h>
+#include <stdlib.h>
+
+
+/* An improved random number generation package. In addition to the standard
+ rand()/srand() like interface, this package also has a special state info
+ interface. The initstate() routine is called with a seed, an array of
+ bytes, and a count of how many bytes are being passed in; this array is
+ then initialized to contain information for random number generation with
+ that much state information. Good sizes for the amount of state
+ information are 32, 64, 128, and 256 bytes. The state can be switched by
+ calling the setstate() function with the same array as was initialized
+ with initstate(). By default, the package runs with 128 bytes of state
+ information and generates far better random numbers than a linear
+ congruential generator. If the amount of state information is less than
+ 32 bytes, a simple linear congruential R.N.G. is used. Internally, the
+ state information is treated as an array of longs; the zeroth element of
+ the array is the type of R.N.G. being used (small integer); the remainder
+ of the array is the state information for the R.N.G. Thus, 32 bytes of
+ state information will give 7 longs worth of state information, which will
+ allow a degree seven polynomial. (Note: The zeroth word of state
+ information also has some other information stored in it; see setstate
+ for details). The random number generation technique is a linear feedback
+ shift register approach, employing trinomials (since there are fewer terms
+ to sum up that way). In this approach, the least significant bit of all
+ the numbers in the state table will act as a linear feedback shift register,
+ and will have period 2^deg - 1 (where deg is the degree of the polynomial
+ being used, assuming that the polynomial is irreducible and primitive).
+ The higher order bits will have longer periods, since their values are
+ also influenced by pseudo-random carries out of the lower bits. The
+ total period of the generator is approximately deg*(2**deg - 1); thus
+ doubling the amount of state information has a vast influence on the
+ period of the generator. Note: The deg*(2**deg - 1) is an approximation
+ only good for large deg, when the period of the shift register is the
+ dominant factor. With deg equal to seven, the period is actually much
+ longer than the 7*(2**7 - 1) predicted by this formula. */
+
+
+
+/* For each of the currently supported random number generators, we have a
+ break value on the amount of state information (you need at least this many
+ bytes of state info to support this random number generator), a degree for
+ the polynomial (actually a trinomial) that the R.N.G. is based on, and
+ separation between the two lower order coefficients of the trinomial. */
+
+/* Linear congruential. */
+#define TYPE_0 0
+#define BREAK_0 8
+#define DEG_0 0
+#define SEP_0 0
+
+/* x**7 + x**3 + 1. */
+#define TYPE_1 1
+#define BREAK_1 32
+#define DEG_1 7
+#define SEP_1 3
+
+/* x**15 + x + 1. */
+#define TYPE_2 2
+#define BREAK_2 64
+#define DEG_2 15
+#define SEP_2 1
+
+/* x**31 + x**3 + 1. */
+#define TYPE_3 3
+#define BREAK_3 128
+#define DEG_3 31
+#define SEP_3 3
+
+/* x**63 + x + 1. */
+#define TYPE_4 4
+#define BREAK_4 256
+#define DEG_4 63
+#define SEP_4 1
+
+
+/* Array versions of the above information to make code run faster.
+ Relies on fact that TYPE_i == i. */
+
+#define MAX_TYPES 5 /* Max number of types above. */
+
+struct random_poly_info
+{
+ int seps[MAX_TYPES];
+ int degrees[MAX_TYPES];
+};
+
+static const struct random_poly_info random_poly_info =
+{
+ { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 },
+ { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 }
+};
+
+
+
+
+/* Initialize the random number generator based on the given seed. If the
+ type is the trivial no-state-information type, just remember the seed.
+ Otherwise, initializes state[] based on the given "seed" via a linear
+ congruential generator. Then, the pointers are set to known locations
+ that are exactly rand_sep places apart. Lastly, it cycles the state
+ information a given number of times to get rid of any initial dependencies
+ introduced by the L.C.R.N.G. Note that the initialization of randtbl[]
+ for default usage relies on values produced by this routine. */
+int
+__srandom_r (unsigned int seed, struct random_data *buf)
+{
+ int type;
+ int32_t *state;
+ long int i;
+ int32_t word;
+ int32_t *dst;
+ int kc;
+
+ if (buf == NULL)
+ goto fail;
+ type = buf->rand_type;
+ if ((unsigned int) type >= MAX_TYPES)
+ goto fail;
+
+ state = buf->state;
+ /* We must make sure the seed is not 0. Take arbitrarily 1 in this case. */
+ if (seed == 0)
+ seed = 1;
+ state[0] = seed;
+ if (type == TYPE_0)
+ goto done;
+
+ dst = state;
+ word = seed;
+ kc = buf->rand_deg;
+ for (i = 1; i < kc; ++i)
+ {
+ /* This does:
+ state[i] = (16807 * state[i - 1]) % 2147483647;
+ but avoids overflowing 31 bits. */
+ long int hi = word / 127773;
+ long int lo = word % 127773;
+ word = 16807 * lo - 2836 * hi;
+ if (word < 0)
+ word += 2147483647;
+ *++dst = word;
+ }
+
+ buf->fptr = &state[buf->rand_sep];
+ buf->rptr = &state[0];
+ kc *= 10;
+ while (--kc >= 0)
+ {
+ int32_t discard;
+ (void) __random_r (buf, &discard);
+ }
+
+ done:
+ return 0;
+
+ fail:
+ return -1;
+}
+
+weak_alias (__srandom_r, srandom_r)
+
+/* Initialize the state information in the given array of N bytes for
+ future random number generation. Based on the number of bytes we
+ are given, and the break values for the different R.N.G.'s, we choose
+ the best (largest) one we can and set things up for it. srandom is
+ then called to initialize the state information. Note that on return
+ from srandom, we set state[-1] to be the type multiplexed with the current
+ value of the rear pointer; this is so successive calls to initstate won't
+ lose this information and will be able to restart with setstate.
+ Note: The first thing we do is save the current state, if any, just like
+ setstate so that it doesn't matter when initstate is called.
+ Returns 0 on success, non-zero on failure. */
+int
+__initstate_r (unsigned int seed, char *arg_state, size_t n,
+ struct random_data *buf)
+{
+ if (buf == NULL)
+ goto fail;
+
+ int32_t *old_state = buf->state;
+ if (old_state != NULL)
+ {
+ int old_type = buf->rand_type;
+ if (old_type == TYPE_0)
+ old_state[-1] = TYPE_0;
+ else
+ old_state[-1] = (MAX_TYPES * (buf->rptr - old_state)) + old_type;
+ }
+
+ int type;
+ if (n >= BREAK_3)
+ type = n < BREAK_4 ? TYPE_3 : TYPE_4;
+ else if (n < BREAK_1)
+ {
+ if (n < BREAK_0)
+ goto fail;
+
+ type = TYPE_0;
+ }
+ else
+ type = n < BREAK_2 ? TYPE_1 : TYPE_2;
+
+ int degree = random_poly_info.degrees[type];
+ int separation = random_poly_info.seps[type];
+
+ buf->rand_type = type;
+ buf->rand_sep = separation;
+ buf->rand_deg = degree;
+ int32_t *state = &((int32_t *) arg_state)[1]; /* First location. */
+ /* Must set END_PTR before srandom. */
+ buf->end_ptr = &state[degree];
+
+ buf->state = state;
+
+ __srandom_r (seed, buf);
+
+ state[-1] = TYPE_0;
+ if (type != TYPE_0)
+ state[-1] = (buf->rptr - state) * MAX_TYPES + type;
+
+ return 0;
+
+ fail:
+ __set_errno (EINVAL);
+ return -1;
+}
+
+weak_alias (__initstate_r, initstate_r)
+
+/* Restore the state from the given state array.
+ Note: It is important that we also remember the locations of the pointers
+ in the current state information, and restore the locations of the pointers
+ from the old state information. This is done by multiplexing the pointer
+ location into the zeroth word of the state information. Note that due
+ to the order in which things are done, it is OK to call setstate with the
+ same state as the current state
+ Returns 0 on success, non-zero on failure. */
+int
+__setstate_r (char *arg_state, struct random_data *buf)
+{
+ int32_t *new_state = 1 + (int32_t *) arg_state;
+ int type;
+ int old_type;
+ int32_t *old_state;
+ int degree;
+ int separation;
+
+ if (arg_state == NULL || buf == NULL)
+ goto fail;
+
+ old_type = buf->rand_type;
+ old_state = buf->state;
+ if (old_type == TYPE_0)
+ old_state[-1] = TYPE_0;
+ else
+ old_state[-1] = (MAX_TYPES * (buf->rptr - old_state)) + old_type;
+
+ type = new_state[-1] % MAX_TYPES;
+ if (type < TYPE_0 || type > TYPE_4)
+ goto fail;
+
+ buf->rand_deg = degree = random_poly_info.degrees[type];
+ buf->rand_sep = separation = random_poly_info.seps[type];
+ buf->rand_type = type;
+
+ if (type != TYPE_0)
+ {
+ int rear = new_state[-1] / MAX_TYPES;
+ buf->rptr = &new_state[rear];
+ buf->fptr = &new_state[(rear + separation) % degree];
+ }
+ buf->state = new_state;
+ /* Set end_ptr too. */
+ buf->end_ptr = &new_state[degree];
+
+ return 0;
+
+ fail:
+ __set_errno (EINVAL);
+ return -1;
+}
+
+weak_alias (__setstate_r, setstate_r)
+
+/* If we are using the trivial TYPE_0 R.N.G., just do the old linear
+ congruential bit. Otherwise, we do our fancy trinomial stuff, which is the
+ same in all the other cases due to all the global variables that have been
+ set up. The basic operation is to add the number at the rear pointer into
+ the one at the front pointer. Then both pointers are advanced to the next
+ location cyclically in the table. The value returned is the sum generated,
+ reduced to 31 bits by throwing away the "least random" low bit.
+ Note: The code takes advantage of the fact that both the front and
+ rear pointers can't wrap on the same call by not testing the rear
+ pointer if the front one has wrapped. Returns a 31-bit random number. */
+
+int
+__random_r (struct random_data *buf, int32_t *result)
+{
+ int32_t *state;
+
+ if (buf == NULL || result == NULL)
+ goto fail;
+
+ state = buf->state;
+
+ if (buf->rand_type == TYPE_0)
+ {
+ int32_t val = state[0];
+ val = ((state[0] * 1103515245) + 12345) & 0x7fffffff;
+ state[0] = val;
+ *result = val;
+ }
+ else
+ {
+ int32_t *fptr = buf->fptr;
+ int32_t *rptr = buf->rptr;
+ int32_t *end_ptr = buf->end_ptr;
+ int32_t val;
+
+ val = *fptr += *rptr;
+ /* Chucking least random bit. */
+ *result = (val >> 1) & 0x7fffffff;
+ ++fptr;
+ if (fptr >= end_ptr)
+ {
+ fptr = state;
+ ++rptr;
+ }
+ else
+ {
+ ++rptr;
+ if (rptr >= end_ptr)
+ rptr = state;
+ }
+ buf->fptr = fptr;
+ buf->rptr = rptr;
+ }
+ return 0;
+
+ fail:
+ __set_errno (EINVAL);
+ return -1;
+}
+
+weak_alias (__random_r, random_r)
diff --git a/REORG.TODO/stdlib/rpmatch.c b/REORG.TODO/stdlib/rpmatch.c
new file mode 100644
index 0000000000..965c2999d8
--- /dev/null
+++ b/REORG.TODO/stdlib/rpmatch.c
@@ -0,0 +1,61 @@
+/* Determine whether string value is affirmation or negative response
+ according to current locale's data.
+ This file is part of the GNU C Library.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <langinfo.h>
+#include <stdlib.h>
+#include <regex.h>
+
+
+/* Match against one of the response patterns, compiling the pattern
+ first if necessary. */
+static int
+try (const char *response,
+ const int tag, const int match, const int nomatch,
+ const char **lastp, regex_t *re)
+{
+ const char *pattern = nl_langinfo (tag);
+ if (pattern != *lastp)
+ {
+ /* The pattern has changed. */
+ if (*lastp != NULL)
+ {
+ /* Free the old compiled pattern. */
+ __regfree (re);
+ *lastp = NULL;
+ }
+ /* Compile the pattern and cache it for future runs. */
+ if (__regcomp (re, pattern, REG_EXTENDED) != 0)
+ return -1;
+ *lastp = pattern;
+ }
+
+ /* Try the pattern. */
+ return __regexec (re, response, 0, NULL, 0) == 0 ? match : nomatch;
+}
+
+int
+rpmatch (const char *response)
+{
+ /* We cache the response patterns and compiled regexps here. */
+ static const char *yesexpr, *noexpr;
+ static regex_t yesre, nore;
+
+ return (try (response, YESEXPR, 1, 0, &yesexpr, &yesre) ?:
+ try (response, NOEXPR, 0, -1, &noexpr, &nore));
+}
diff --git a/REORG.TODO/stdlib/rshift.c b/REORG.TODO/stdlib/rshift.c
new file mode 100644
index 0000000000..d4c7f77769
--- /dev/null
+++ b/REORG.TODO/stdlib/rshift.c
@@ -0,0 +1,78 @@
+/* mpn_rshift -- Shift right a low-level natural-number integer.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+#include <assert.h>
+
+/* Shift U (pointed to by UP and USIZE limbs long) CNT bits to the right
+ and store the USIZE least significant limbs of the result at WP.
+ The bits shifted out to the right are returned.
+
+ Argument constraints:
+ 1. 0 < CNT < BITS_PER_MP_LIMB
+ 2. If the result is to be written over the input, WP must be <= UP.
+*/
+
+mp_limb_t
+mpn_rshift (register mp_ptr wp,
+ register mp_srcptr up, mp_size_t usize,
+ register unsigned int cnt)
+{
+ register mp_limb_t high_limb, low_limb;
+ register unsigned sh_1, sh_2;
+ register mp_size_t i;
+ mp_limb_t retval;
+
+ assert (usize != 0 && cnt != 0);
+
+ sh_1 = cnt;
+
+#if 0
+ if (sh_1 == 0)
+ {
+ if (wp != up)
+ {
+ /* Copy from low end to high end, to allow specified input/output
+ overlapping. */
+ for (i = 0; i < usize; i++)
+ wp[i] = up[i];
+ }
+ return usize;
+ }
+#endif
+
+ wp -= 1;
+ sh_2 = BITS_PER_MP_LIMB - sh_1;
+ high_limb = up[0];
+ retval = high_limb << sh_2;
+ low_limb = high_limb;
+
+ for (i = 1; i < usize; i++)
+ {
+ high_limb = up[i];
+ wp[i] = (low_limb >> sh_1) | (high_limb << sh_2);
+ low_limb = high_limb;
+ }
+ wp[i] = low_limb >> sh_1;
+
+ return retval;
+}
diff --git a/REORG.TODO/stdlib/secure-getenv.c b/REORG.TODO/stdlib/secure-getenv.c
new file mode 100644
index 0000000000..8d6a7e39a6
--- /dev/null
+++ b/REORG.TODO/stdlib/secure-getenv.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <shlib-compat.h>
+
+/* Some programs and especially the libc itself have to be careful
+ what values to accept from the environment. This special version
+ checks for SUID or SGID first before doing any work. */
+char *
+__libc_secure_getenv (const char *name)
+{
+ return __libc_enable_secure ? NULL : getenv (name);
+}
+weak_alias (__libc_secure_getenv, secure_getenv)
+libc_hidden_weak (__libc_secure_getenv)
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_17)
+compat_symbol (libc, __libc_secure_getenv, __secure_getenv, GLIBC_2_0);
+#endif
diff --git a/REORG.TODO/stdlib/seed48.c b/REORG.TODO/stdlib/seed48.c
new file mode 100644
index 0000000000..3108b0ca76
--- /dev/null
+++ b/REORG.TODO/stdlib/seed48.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+unsigned short int *
+seed48 (unsigned short int seed16v[3])
+{
+ (void) __seed48_r (seed16v, &__libc_drand48_data);
+
+ return __libc_drand48_data.__old_x;
+}
diff --git a/REORG.TODO/stdlib/seed48_r.c b/REORG.TODO/stdlib/seed48_r.c
new file mode 100644
index 0000000000..3cdf351dfd
--- /dev/null
+++ b/REORG.TODO/stdlib/seed48_r.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+int
+__seed48_r (unsigned short int seed16v[3], struct drand48_data *buffer)
+{
+ /* Save old value at a private place to be used as return value. */
+ memcpy (buffer->__old_x, buffer->__x, sizeof (buffer->__x));
+
+ /* Install new state. */
+ buffer->__x[2] = seed16v[2];
+ buffer->__x[1] = seed16v[1];
+ buffer->__x[0] = seed16v[0];
+ buffer->__a = 0x5deece66dull;
+ buffer->__c = 0xb;
+ buffer->__init = 1;
+
+ return 0;
+}
+weak_alias (__seed48_r, seed48_r)
diff --git a/REORG.TODO/stdlib/setcontext.c b/REORG.TODO/stdlib/setcontext.c
new file mode 100644
index 0000000000..3fe77177a2
--- /dev/null
+++ b/REORG.TODO/stdlib/setcontext.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1998-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <ucontext.h>
+
+int
+setcontext (const ucontext_t *ucp)
+{
+ __set_errno (ENOSYS);
+ return -1;
+}
+
+
+stub_warning (setcontext)
diff --git a/REORG.TODO/stdlib/setenv.c b/REORG.TODO/stdlib/setenv.c
new file mode 100644
index 0000000000..f3c0220045
--- /dev/null
+++ b/REORG.TODO/stdlib/setenv.c
@@ -0,0 +1,340 @@
+/* Copyright (C) 1992-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Pacify GCC; see the commentary about VALLEN below. This is needed
+ at least through GCC 4.9.2. Pacify GCC for the entire file, as
+ there seems to be no way to pacify GCC selectively, only for the
+ place where it's needed. Do not use DIAG_IGNORE_NEEDS_COMMENT
+ here, as it's not defined yet. */
+#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+
+#include <errno.h>
+#if !_LIBC
+# if !defined errno && !defined HAVE_ERRNO_DECL
+extern int errno;
+# endif
+# define __set_errno(ev) ((errno) = (ev))
+#endif
+
+#if _LIBC || HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+#if _LIBC || HAVE_STRING_H
+# include <string.h>
+#endif
+#if _LIBC || HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#if !_LIBC
+# define __environ environ
+# ifndef HAVE_ENVIRON_DECL
+extern char **environ;
+# endif
+#endif
+
+#if _LIBC
+/* This lock protects against simultaneous modifications of `environ'. */
+# include <libc-lock.h>
+__libc_lock_define_initialized (static, envlock)
+# define LOCK __libc_lock_lock (envlock)
+# define UNLOCK __libc_lock_unlock (envlock)
+#else
+# define LOCK
+# define UNLOCK
+#endif
+
+/* In the GNU C library we must keep the namespace clean. */
+#ifdef _LIBC
+# define setenv __setenv
+# define unsetenv __unsetenv
+# define clearenv __clearenv
+# define tfind __tfind
+# define tsearch __tsearch
+#endif
+
+/* In the GNU C library implementation we try to be more clever and
+ allow arbitrarily many changes of the environment given that the used
+ values are from a small set. Outside glibc this will eat up all
+ memory after a while. */
+#if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \
+ && defined __GNUC__)
+# define USE_TSEARCH 1
+# include <search.h>
+
+/* This is a pointer to the root of the search tree with the known
+ values. */
+static void *known_values;
+
+# define KNOWN_VALUE(Str) \
+ ({ \
+ void *value = tfind (Str, &known_values, (__compar_fn_t) strcmp); \
+ value != NULL ? *(char **) value : NULL; \
+ })
+# define STORE_VALUE(Str) \
+ tsearch (Str, &known_values, (__compar_fn_t) strcmp)
+
+#else
+# undef USE_TSEARCH
+
+# define KNOWN_VALUE(Str) NULL
+# define STORE_VALUE(Str) do { } while (0)
+
+#endif
+
+
+/* If this variable is not a null pointer we allocated the current
+ environment. */
+static char **last_environ;
+
+
+/* This function is used by `setenv' and `putenv'. The difference between
+ the two functions is that for the former must create a new string which
+ is then placed in the environment, while the argument of `putenv'
+ must be used directly. This is all complicated by the fact that we try
+ to reuse values once generated for a `setenv' call since we can never
+ free the strings. */
+int
+__add_to_environ (const char *name, const char *value, const char *combined,
+ int replace)
+{
+ char **ep;
+ size_t size;
+
+ /* Compute lengths before locking, so that the critical section is
+ less of a performance bottleneck. VALLEN is needed only if
+ COMBINED is null (unfortunately GCC is not smart enough to deduce
+ this; see the #pragma at the start of this file). Testing
+ COMBINED instead of VALUE causes setenv (..., NULL, ...) to dump
+ core now instead of corrupting memory later. */
+ const size_t namelen = strlen (name);
+ size_t vallen;
+ if (combined == NULL)
+ vallen = strlen (value) + 1;
+
+ LOCK;
+
+ /* We have to get the pointer now that we have the lock and not earlier
+ since another thread might have created a new environment. */
+ ep = __environ;
+
+ size = 0;
+ if (ep != NULL)
+ {
+ for (; *ep != NULL; ++ep)
+ if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=')
+ break;
+ else
+ ++size;
+ }
+
+ if (ep == NULL || __builtin_expect (*ep == NULL, 1))
+ {
+ char **new_environ;
+
+ /* We allocated this space; we can extend it. */
+ new_environ = (char **) realloc (last_environ,
+ (size + 2) * sizeof (char *));
+ if (new_environ == NULL)
+ {
+ UNLOCK;
+ return -1;
+ }
+
+ if (__environ != last_environ)
+ memcpy ((char *) new_environ, (char *) __environ,
+ size * sizeof (char *));
+
+ new_environ[size] = NULL;
+ new_environ[size + 1] = NULL;
+ ep = new_environ + size;
+
+ last_environ = __environ = new_environ;
+ }
+ if (*ep == NULL || replace)
+ {
+ char *np;
+
+ /* Use the user string if given. */
+ if (combined != NULL)
+ np = (char *) combined;
+ else
+ {
+ const size_t varlen = namelen + 1 + vallen;
+#ifdef USE_TSEARCH
+ char *new_value;
+ int use_alloca = __libc_use_alloca (varlen);
+ if (__builtin_expect (use_alloca, 1))
+ new_value = (char *) alloca (varlen);
+ else
+ {
+ new_value = malloc (varlen);
+ if (new_value == NULL)
+ {
+ UNLOCK;
+ return -1;
+ }
+ }
+# ifdef _LIBC
+ __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1),
+ value, vallen);
+# else
+ memcpy (new_value, name, namelen);
+ new_value[namelen] = '=';
+ memcpy (&new_value[namelen + 1], value, vallen);
+# endif
+
+ np = KNOWN_VALUE (new_value);
+ if (__glibc_likely (np == NULL))
+#endif
+ {
+#ifdef USE_TSEARCH
+ if (__glibc_unlikely (! use_alloca))
+ np = new_value;
+ else
+#endif
+ {
+ np = malloc (varlen);
+ if (__glibc_unlikely (np == NULL))
+ {
+ UNLOCK;
+ return -1;
+ }
+
+#ifdef USE_TSEARCH
+ memcpy (np, new_value, varlen);
+#else
+ memcpy (np, name, namelen);
+ np[namelen] = '=';
+ memcpy (&np[namelen + 1], value, vallen);
+#endif
+ }
+ /* And remember the value. */
+ STORE_VALUE (np);
+ }
+#ifdef USE_TSEARCH
+ else
+ {
+ if (__glibc_unlikely (! use_alloca))
+ free (new_value);
+ }
+#endif
+ }
+
+ *ep = np;
+ }
+
+ UNLOCK;
+
+ return 0;
+}
+
+int
+setenv (const char *name, const char *value, int replace)
+{
+ if (name == NULL || *name == '\0' || strchr (name, '=') != NULL)
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+
+ return __add_to_environ (name, value, NULL, replace);
+}
+
+int
+unsetenv (const char *name)
+{
+ size_t len;
+ char **ep;
+
+ if (name == NULL || *name == '\0' || strchr (name, '=') != NULL)
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+
+ len = strlen (name);
+
+ LOCK;
+
+ ep = __environ;
+ if (ep != NULL)
+ while (*ep != NULL)
+ {
+ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+ {
+ /* Found it. Remove this pointer by moving later ones back. */
+ char **dp = ep;
+
+ do
+ dp[0] = dp[1];
+ while (*dp++);
+ /* Continue the loop in case NAME appears again. */
+ }
+ else
+ ++ep;
+ }
+
+ UNLOCK;
+
+ return 0;
+}
+
+/* The `clearenv' was planned to be added to POSIX.1 but probably
+ never made it. Nevertheless the POSIX.9 standard (POSIX bindings
+ for Fortran 77) requires this function. */
+int
+clearenv (void)
+{
+ LOCK;
+
+ if (__environ == last_environ && __environ != NULL)
+ {
+ /* We allocated this environment so we can free it. */
+ free (__environ);
+ last_environ = NULL;
+ }
+
+ /* Clear the environment pointer removes the whole environment. */
+ __environ = NULL;
+
+ UNLOCK;
+
+ return 0;
+}
+#ifdef _LIBC
+libc_freeres_fn (free_mem)
+{
+ /* Remove all traces. */
+ clearenv ();
+
+ /* Now remove the search tree. */
+ __tdestroy (known_values, free);
+ known_values = NULL;
+}
+
+# undef setenv
+# undef unsetenv
+# undef clearenv
+weak_alias (__setenv, setenv)
+weak_alias (__unsetenv, unsetenv)
+weak_alias (__clearenv, clearenv)
+#endif
diff --git a/REORG.TODO/stdlib/srand48.c b/REORG.TODO/stdlib/srand48.c
new file mode 100644
index 0000000000..9d665055a0
--- /dev/null
+++ b/REORG.TODO/stdlib/srand48.c
@@ -0,0 +1,26 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+void
+srand48 (long seedval)
+{
+ (void) __srand48_r (seedval, &__libc_drand48_data);
+}
diff --git a/REORG.TODO/stdlib/srand48_r.c b/REORG.TODO/stdlib/srand48_r.c
new file mode 100644
index 0000000000..43bca37062
--- /dev/null
+++ b/REORG.TODO/stdlib/srand48_r.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <limits.h>
+
+int
+__srand48_r (long int seedval, struct drand48_data *buffer)
+{
+ /* The standards say we only have 32 bits. */
+ if (sizeof (long int) > 4)
+ seedval &= 0xffffffffl;
+
+ buffer->__x[2] = seedval >> 16;
+ buffer->__x[1] = seedval & 0xffffl;
+ buffer->__x[0] = 0x330e;
+
+ buffer->__a = 0x5deece66dull;
+ buffer->__c = 0xb;
+ buffer->__init = 1;
+
+ return 0;
+}
+weak_alias (__srand48_r, srand48_r)
diff --git a/REORG.TODO/stdlib/stdlib.h b/REORG.TODO/stdlib/stdlib.h
new file mode 100644
index 0000000000..0a693c2b41
--- /dev/null
+++ b/REORG.TODO/stdlib/stdlib.h
@@ -0,0 +1,911 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/*
+ * ISO C99 Standard: 7.20 General utilities <stdlib.h>
+ */
+
+#ifndef _STDLIB_H
+
+#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
+#include <bits/libc-header-start.h>
+
+/* Get size_t, wchar_t and NULL from <stddef.h>. */
+#define __need_size_t
+#define __need_wchar_t
+#define __need_NULL
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+#define _STDLIB_H 1
+
+#if (defined __USE_XOPEN || defined __USE_XOPEN2K8) && !defined _SYS_WAIT_H
+/* XPG requires a few symbols from <sys/wait.h> being defined. */
+# include <bits/waitflags.h>
+# include <bits/waitstatus.h>
+
+/* Define the macros <sys/wait.h> also would define this way. */
+# define WEXITSTATUS(status) __WEXITSTATUS (status)
+# define WTERMSIG(status) __WTERMSIG (status)
+# define WSTOPSIG(status) __WSTOPSIG (status)
+# define WIFEXITED(status) __WIFEXITED (status)
+# define WIFSIGNALED(status) __WIFSIGNALED (status)
+# define WIFSTOPPED(status) __WIFSTOPPED (status)
+# ifdef __WIFCONTINUED
+# define WIFCONTINUED(status) __WIFCONTINUED (status)
+# endif
+#endif /* X/Open or XPG7 and <sys/wait.h> not included. */
+
+/* _FloatN API tests for enablement. */
+#include <bits/floatn.h>
+
+/* Returned by `div'. */
+typedef struct
+ {
+ int quot; /* Quotient. */
+ int rem; /* Remainder. */
+ } div_t;
+
+/* Returned by `ldiv'. */
+#ifndef __ldiv_t_defined
+typedef struct
+ {
+ long int quot; /* Quotient. */
+ long int rem; /* Remainder. */
+ } ldiv_t;
+# define __ldiv_t_defined 1
+#endif
+
+#if defined __USE_ISOC99 && !defined __lldiv_t_defined
+/* Returned by `lldiv'. */
+__extension__ typedef struct
+ {
+ long long int quot; /* Quotient. */
+ long long int rem; /* Remainder. */
+ } lldiv_t;
+# define __lldiv_t_defined 1
+#endif
+
+
+/* The largest number rand will return (same as INT_MAX). */
+#define RAND_MAX 2147483647
+
+
+/* We define these the same for all machines.
+ Changes from this to the outside world should be done in `_exit'. */
+#define EXIT_FAILURE 1 /* Failing exit status. */
+#define EXIT_SUCCESS 0 /* Successful exit status. */
+
+
+/* Maximum length of a multibyte character in the current locale. */
+#define MB_CUR_MAX (__ctype_get_mb_cur_max ())
+extern size_t __ctype_get_mb_cur_max (void) __THROW __wur;
+
+
+/* Convert a string to a floating-point number. */
+extern double atof (const char *__nptr)
+ __THROW __attribute_pure__ __nonnull ((1)) __wur;
+/* Convert a string to an integer. */
+extern int atoi (const char *__nptr)
+ __THROW __attribute_pure__ __nonnull ((1)) __wur;
+/* Convert a string to a long integer. */
+extern long int atol (const char *__nptr)
+ __THROW __attribute_pure__ __nonnull ((1)) __wur;
+
+#ifdef __USE_ISOC99
+/* Convert a string to a long long integer. */
+__extension__ extern long long int atoll (const char *__nptr)
+ __THROW __attribute_pure__ __nonnull ((1)) __wur;
+#endif
+
+/* Convert a string to a floating-point number. */
+extern double strtod (const char *__restrict __nptr,
+ char **__restrict __endptr)
+ __THROW __nonnull ((1));
+
+#ifdef __USE_ISOC99
+/* Likewise for `float' and `long double' sizes of floating-point numbers. */
+extern float strtof (const char *__restrict __nptr,
+ char **__restrict __endptr) __THROW __nonnull ((1));
+
+extern long double strtold (const char *__restrict __nptr,
+ char **__restrict __endptr)
+ __THROW __nonnull ((1));
+#endif
+
+/* Convert a string to a long integer. */
+extern long int strtol (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1));
+/* Convert a string to an unsigned long integer. */
+extern unsigned long int strtoul (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1));
+
+#ifdef __USE_MISC
+/* Convert a string to a quadword integer. */
+__extension__
+extern long long int strtoq (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1));
+/* Convert a string to an unsigned quadword integer. */
+__extension__
+extern unsigned long long int strtouq (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1));
+#endif /* Use misc. */
+
+#ifdef __USE_ISOC99
+/* Convert a string to a quadword integer. */
+__extension__
+extern long long int strtoll (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1));
+/* Convert a string to an unsigned quadword integer. */
+__extension__
+extern unsigned long long int strtoull (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1));
+#endif /* ISO C99 or use MISC. */
+
+/* Convert a floating-point number to a string. */
+#if __GLIBC_USE (IEC_60559_BFP_EXT)
+extern int strfromd (char *__dest, size_t __size, const char *__format,
+ double __f)
+ __THROW __nonnull ((3));
+
+extern int strfromf (char *__dest, size_t __size, const char *__format,
+ float __f)
+ __THROW __nonnull ((3));
+
+extern int strfroml (char *__dest, size_t __size, const char *__format,
+ long double __f)
+ __THROW __nonnull ((3));
+#endif
+
+#if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern int strfromf128 (char *__dest, size_t __size, const char * __format,
+ _Float128 __f)
+ __THROW __nonnull ((3));
+#endif
+
+
+#ifdef __USE_GNU
+/* The concept of one static locale per category is not very well
+ thought out. Many applications will need to process its data using
+ information from several different locales. Another problem is
+ the implementation of the internationalization handling in the
+ ISO C++ standard library. To support this another set of
+ the functions using locale data exist which take an additional
+ argument.
+
+ Attention: even though several *_l interfaces are part of POSIX:2008,
+ these are not. */
+
+/* Structure for reentrant locale using functions. This is an
+ (almost) opaque type for the user level programs. */
+# include <xlocale.h>
+
+/* Special versions of the functions above which take the locale to
+ use as an additional parameter. */
+extern long int strtol_l (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base,
+ __locale_t __loc) __THROW __nonnull ((1, 4));
+
+extern unsigned long int strtoul_l (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base, __locale_t __loc)
+ __THROW __nonnull ((1, 4));
+
+__extension__
+extern long long int strtoll_l (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base,
+ __locale_t __loc)
+ __THROW __nonnull ((1, 4));
+
+__extension__
+extern unsigned long long int strtoull_l (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base, __locale_t __loc)
+ __THROW __nonnull ((1, 4));
+
+extern double strtod_l (const char *__restrict __nptr,
+ char **__restrict __endptr, __locale_t __loc)
+ __THROW __nonnull ((1, 3));
+
+extern float strtof_l (const char *__restrict __nptr,
+ char **__restrict __endptr, __locale_t __loc)
+ __THROW __nonnull ((1, 3));
+
+extern long double strtold_l (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ __locale_t __loc)
+ __THROW __nonnull ((1, 3));
+#endif /* GNU */
+
+
+#ifdef __USE_EXTERN_INLINES
+__extern_inline int
+__NTH (atoi (const char *__nptr))
+{
+ return (int) strtol (__nptr, (char **) NULL, 10);
+}
+__extern_inline long int
+__NTH (atol (const char *__nptr))
+{
+ return strtol (__nptr, (char **) NULL, 10);
+}
+
+# ifdef __USE_ISOC99
+__extension__ __extern_inline long long int
+__NTH (atoll (const char *__nptr))
+{
+ return strtoll (__nptr, (char **) NULL, 10);
+}
+# endif
+#endif /* Optimizing and Inlining. */
+
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Convert N to base 64 using the digits "./0-9A-Za-z", least-significant
+ digit first. Returns a pointer to static storage overwritten by the
+ next call. */
+extern char *l64a (long int __n) __THROW __wur;
+
+/* Read a number from a string S in base 64 as above. */
+extern long int a64l (const char *__s)
+ __THROW __attribute_pure__ __nonnull ((1)) __wur;
+
+#endif /* Use misc || extended X/Open. */
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+# include <sys/types.h> /* we need int32_t... */
+
+/* These are the functions that actually do things. The `random', `srandom',
+ `initstate' and `setstate' functions are those from BSD Unices.
+ The `rand' and `srand' functions are required by the ANSI standard.
+ We provide both interfaces to the same random number generator. */
+/* Return a random long integer between 0 and RAND_MAX inclusive. */
+extern long int random (void) __THROW;
+
+/* Seed the random number generator with the given number. */
+extern void srandom (unsigned int __seed) __THROW;
+
+/* Initialize the random number generator to use state buffer STATEBUF,
+ of length STATELEN, and seed it with SEED. Optimal lengths are 8, 16,
+ 32, 64, 128 and 256, the bigger the better; values less than 8 will
+ cause an error and values greater than 256 will be rounded down. */
+extern char *initstate (unsigned int __seed, char *__statebuf,
+ size_t __statelen) __THROW __nonnull ((2));
+
+/* Switch the random number generator to state buffer STATEBUF,
+ which should have been previously initialized by `initstate'. */
+extern char *setstate (char *__statebuf) __THROW __nonnull ((1));
+
+
+# ifdef __USE_MISC
+/* Reentrant versions of the `random' family of functions.
+ These functions all use the following data structure to contain
+ state, rather than global state variables. */
+
+struct random_data
+ {
+ int32_t *fptr; /* Front pointer. */
+ int32_t *rptr; /* Rear pointer. */
+ int32_t *state; /* Array of state values. */
+ int rand_type; /* Type of random number generator. */
+ int rand_deg; /* Degree of random number generator. */
+ int rand_sep; /* Distance between front and rear. */
+ int32_t *end_ptr; /* Pointer behind state table. */
+ };
+
+extern int random_r (struct random_data *__restrict __buf,
+ int32_t *__restrict __result) __THROW __nonnull ((1, 2));
+
+extern int srandom_r (unsigned int __seed, struct random_data *__buf)
+ __THROW __nonnull ((2));
+
+extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
+ size_t __statelen,
+ struct random_data *__restrict __buf)
+ __THROW __nonnull ((2, 4));
+
+extern int setstate_r (char *__restrict __statebuf,
+ struct random_data *__restrict __buf)
+ __THROW __nonnull ((1, 2));
+# endif /* Use misc. */
+#endif /* Use extended X/Open || misc. */
+
+
+/* Return a random integer between 0 and RAND_MAX inclusive. */
+extern int rand (void) __THROW;
+/* Seed the random number generator with the given number. */
+extern void srand (unsigned int __seed) __THROW;
+
+#ifdef __USE_POSIX199506
+/* Reentrant interface according to POSIX.1. */
+extern int rand_r (unsigned int *__seed) __THROW;
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* System V style 48-bit random number generator functions. */
+
+/* Return non-negative, double-precision floating-point value in [0.0,1.0). */
+extern double drand48 (void) __THROW;
+extern double erand48 (unsigned short int __xsubi[3]) __THROW __nonnull ((1));
+
+/* Return non-negative, long integer in [0,2^31). */
+extern long int lrand48 (void) __THROW;
+extern long int nrand48 (unsigned short int __xsubi[3])
+ __THROW __nonnull ((1));
+
+/* Return signed, long integers in [-2^31,2^31). */
+extern long int mrand48 (void) __THROW;
+extern long int jrand48 (unsigned short int __xsubi[3])
+ __THROW __nonnull ((1));
+
+/* Seed random number generator. */
+extern void srand48 (long int __seedval) __THROW;
+extern unsigned short int *seed48 (unsigned short int __seed16v[3])
+ __THROW __nonnull ((1));
+extern void lcong48 (unsigned short int __param[7]) __THROW __nonnull ((1));
+
+# ifdef __USE_MISC
+/* Data structure for communication with thread safe versions. This
+ type is to be regarded as opaque. It's only exported because users
+ have to allocate objects of this type. */
+struct drand48_data
+ {
+ unsigned short int __x[3]; /* Current state. */
+ unsigned short int __old_x[3]; /* Old state. */
+ unsigned short int __c; /* Additive const. in congruential formula. */
+ unsigned short int __init; /* Flag for initializing. */
+ __extension__ unsigned long long int __a; /* Factor in congruential
+ formula. */
+ };
+
+/* Return non-negative, double-precision floating-point value in [0.0,1.0). */
+extern int drand48_r (struct drand48_data *__restrict __buffer,
+ double *__restrict __result) __THROW __nonnull ((1, 2));
+extern int erand48_r (unsigned short int __xsubi[3],
+ struct drand48_data *__restrict __buffer,
+ double *__restrict __result) __THROW __nonnull ((1, 2));
+
+/* Return non-negative, long integer in [0,2^31). */
+extern int lrand48_r (struct drand48_data *__restrict __buffer,
+ long int *__restrict __result)
+ __THROW __nonnull ((1, 2));
+extern int nrand48_r (unsigned short int __xsubi[3],
+ struct drand48_data *__restrict __buffer,
+ long int *__restrict __result)
+ __THROW __nonnull ((1, 2));
+
+/* Return signed, long integers in [-2^31,2^31). */
+extern int mrand48_r (struct drand48_data *__restrict __buffer,
+ long int *__restrict __result)
+ __THROW __nonnull ((1, 2));
+extern int jrand48_r (unsigned short int __xsubi[3],
+ struct drand48_data *__restrict __buffer,
+ long int *__restrict __result)
+ __THROW __nonnull ((1, 2));
+
+/* Seed random number generator. */
+extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
+ __THROW __nonnull ((2));
+
+extern int seed48_r (unsigned short int __seed16v[3],
+ struct drand48_data *__buffer) __THROW __nonnull ((1, 2));
+
+extern int lcong48_r (unsigned short int __param[7],
+ struct drand48_data *__buffer)
+ __THROW __nonnull ((1, 2));
+# endif /* Use misc. */
+#endif /* Use misc or X/Open. */
+
+/* Allocate SIZE bytes of memory. */
+extern void *malloc (size_t __size) __THROW __attribute_malloc__ __wur;
+/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0. */
+extern void *calloc (size_t __nmemb, size_t __size)
+ __THROW __attribute_malloc__ __wur;
+
+/* Re-allocate the previously allocated block
+ in PTR, making the new block SIZE bytes long. */
+/* __attribute_malloc__ is not used, because if realloc returns
+ the same pointer that was passed to it, aliasing needs to be allowed
+ between objects pointed by the old and new pointers. */
+extern void *realloc (void *__ptr, size_t __size)
+ __THROW __attribute_warn_unused_result__;
+
+#ifdef __USE_GNU
+/* Re-allocate the previously allocated block in PTR, making the new
+ block large enough for NMEMB elements of SIZE bytes each. */
+/* __attribute_malloc__ is not used, because if reallocarray returns
+ the same pointer that was passed to it, aliasing needs to be allowed
+ between objects pointed by the old and new pointers. */
+extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
+ __THROW __attribute_warn_unused_result__;
+#endif
+
+/* Free a block allocated by `malloc', `realloc' or `calloc'. */
+extern void free (void *__ptr) __THROW;
+
+#ifdef __USE_MISC
+# include <alloca.h>
+#endif /* Use misc. */
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \
+ || defined __USE_MISC
+/* Allocate SIZE bytes on a page boundary. The storage cannot be freed. */
+extern void *valloc (size_t __size) __THROW __attribute_malloc__ __wur;
+#endif
+
+#ifdef __USE_XOPEN2K
+/* Allocate memory of SIZE bytes with an alignment of ALIGNMENT. */
+extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
+ __THROW __nonnull ((1)) __wur;
+#endif
+
+#ifdef __USE_ISOC11
+/* ISO C variant of aligned allocation. */
+extern void *aligned_alloc (size_t __alignment, size_t __size)
+ __THROW __attribute_malloc__ __attribute_alloc_size__ ((2)) __wur;
+#endif
+
+/* Abort execution and generate a core-dump. */
+extern void abort (void) __THROW __attribute__ ((__noreturn__));
+
+
+/* Register a function to be called when `exit' is called. */
+extern int atexit (void (*__func) (void)) __THROW __nonnull ((1));
+
+#if defined __USE_ISOC11 || defined __USE_ISOCXX11
+/* Register a function to be called when `quick_exit' is called. */
+# ifdef __cplusplus
+extern "C++" int at_quick_exit (void (*__func) (void))
+ __THROW __asm ("at_quick_exit") __nonnull ((1));
+# else
+extern int at_quick_exit (void (*__func) (void)) __THROW __nonnull ((1));
+# endif
+#endif
+
+#ifdef __USE_MISC
+/* Register a function to be called with the status
+ given to `exit' and the given argument. */
+extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
+ __THROW __nonnull ((1));
+#endif
+
+/* Call all functions registered with `atexit' and `on_exit',
+ in the reverse of the order in which they were registered,
+ perform stdio cleanup, and terminate program execution with STATUS. */
+extern void exit (int __status) __THROW __attribute__ ((__noreturn__));
+
+#if defined __USE_ISOC11 || defined __USE_ISOCXX11
+/* Call all functions registered with `at_quick_exit' in the reverse
+ of the order in which they were registered and terminate program
+ execution with STATUS. */
+extern void quick_exit (int __status) __THROW __attribute__ ((__noreturn__));
+#endif
+
+#ifdef __USE_ISOC99
+/* Terminate the program with STATUS without calling any of the
+ functions registered with `atexit' or `on_exit'. */
+extern void _Exit (int __status) __THROW __attribute__ ((__noreturn__));
+#endif
+
+
+/* Return the value of envariable NAME, or NULL if it doesn't exist. */
+extern char *getenv (const char *__name) __THROW __nonnull ((1)) __wur;
+
+#ifdef __USE_GNU
+/* This function is similar to the above but returns NULL if the
+ programs is running with SUID or SGID enabled. */
+extern char *secure_getenv (const char *__name)
+ __THROW __nonnull ((1)) __wur;
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* The SVID says this is in <stdio.h>, but this seems a better place. */
+/* Put STRING, which is of the form "NAME=VALUE", in the environment.
+ If there is no `=', remove NAME from the environment. */
+extern int putenv (char *__string) __THROW __nonnull ((1));
+#endif
+
+#ifdef __USE_XOPEN2K
+/* Set NAME to VALUE in the environment.
+ If REPLACE is nonzero, overwrite an existing value. */
+extern int setenv (const char *__name, const char *__value, int __replace)
+ __THROW __nonnull ((2));
+
+/* Remove the variable NAME from the environment. */
+extern int unsetenv (const char *__name) __THROW __nonnull ((1));
+#endif
+
+#ifdef __USE_MISC
+/* The `clearenv' was planned to be added to POSIX.1 but probably
+ never made it. Nevertheless the POSIX.9 standard (POSIX bindings
+ for Fortran 77) requires this function. */
+extern int clearenv (void) __THROW;
+#endif
+
+
+#if defined __USE_MISC \
+ || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8)
+/* Generate a unique temporary file name from TEMPLATE.
+ The last six characters of TEMPLATE must be "XXXXXX";
+ they are replaced with a string that makes the file name unique.
+ Always returns TEMPLATE, it's either a temporary file name or a null
+ string if it cannot get a unique file name. */
+extern char *mktemp (char *__template) __THROW __nonnull ((1));
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Generate a unique temporary file name from TEMPLATE.
+ The last six characters of TEMPLATE must be "XXXXXX";
+ they are replaced with a string that makes the filename unique.
+ Returns a file descriptor open on the file for reading and writing,
+ or -1 if it cannot create a uniquely-named file.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+# ifndef __USE_FILE_OFFSET64
+extern int mkstemp (char *__template) __nonnull ((1)) __wur;
+# else
+# ifdef __REDIRECT
+extern int __REDIRECT (mkstemp, (char *__template), mkstemp64)
+ __nonnull ((1)) __wur;
+# else
+# define mkstemp mkstemp64
+# endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkstemp64 (char *__template) __nonnull ((1)) __wur;
+# endif
+#endif
+
+#ifdef __USE_MISC
+/* Similar to mkstemp, but the template can have a suffix after the
+ XXXXXX. The length of the suffix is specified in the second
+ parameter.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+# ifndef __USE_FILE_OFFSET64
+extern int mkstemps (char *__template, int __suffixlen) __nonnull ((1)) __wur;
+# else
+# ifdef __REDIRECT
+extern int __REDIRECT (mkstemps, (char *__template, int __suffixlen),
+ mkstemps64) __nonnull ((1)) __wur;
+# else
+# define mkstemps mkstemps64
+# endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkstemps64 (char *__template, int __suffixlen)
+ __nonnull ((1)) __wur;
+# endif
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Create a unique temporary directory from TEMPLATE.
+ The last six characters of TEMPLATE must be "XXXXXX";
+ they are replaced with a string that makes the directory name unique.
+ Returns TEMPLATE, or a null pointer if it cannot get a unique name.
+ The directory is created mode 700. */
+extern char *mkdtemp (char *__template) __THROW __nonnull ((1)) __wur;
+#endif
+
+#ifdef __USE_GNU
+/* Generate a unique temporary file name from TEMPLATE similar to
+ mkstemp. But allow the caller to pass additional flags which are
+ used in the open call to create the file..
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+# ifndef __USE_FILE_OFFSET64
+extern int mkostemp (char *__template, int __flags) __nonnull ((1)) __wur;
+# else
+# ifdef __REDIRECT
+extern int __REDIRECT (mkostemp, (char *__template, int __flags), mkostemp64)
+ __nonnull ((1)) __wur;
+# else
+# define mkostemp mkostemp64
+# endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkostemp64 (char *__template, int __flags) __nonnull ((1)) __wur;
+# endif
+
+/* Similar to mkostemp, but the template can have a suffix after the
+ XXXXXX. The length of the suffix is specified in the second
+ parameter.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+# ifndef __USE_FILE_OFFSET64
+extern int mkostemps (char *__template, int __suffixlen, int __flags)
+ __nonnull ((1)) __wur;
+# else
+# ifdef __REDIRECT
+extern int __REDIRECT (mkostemps, (char *__template, int __suffixlen,
+ int __flags), mkostemps64)
+ __nonnull ((1)) __wur;
+# else
+# define mkostemps mkostemps64
+# endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
+ __nonnull ((1)) __wur;
+# endif
+#endif
+
+
+/* Execute the given line as a shell command.
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+extern int system (const char *__command) __wur;
+
+
+#ifdef __USE_GNU
+/* Return a malloc'd string containing the canonical absolute name of the
+ existing named file. */
+extern char *canonicalize_file_name (const char *__name)
+ __THROW __nonnull ((1)) __wur;
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Return the canonical absolute name of file NAME. If RESOLVED is
+ null, the result is malloc'd; otherwise, if the canonical name is
+ PATH_MAX chars or more, returns null with `errno' set to
+ ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
+ returns the name in RESOLVED. */
+extern char *realpath (const char *__restrict __name,
+ char *__restrict __resolved) __THROW __wur;
+#endif
+
+
+/* Shorthand for type of comparison functions. */
+#ifndef __COMPAR_FN_T
+# define __COMPAR_FN_T
+typedef int (*__compar_fn_t) (const void *, const void *);
+
+# ifdef __USE_GNU
+typedef __compar_fn_t comparison_fn_t;
+# endif
+#endif
+#ifdef __USE_GNU
+typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
+#endif
+
+/* Do a binary search for KEY in BASE, which consists of NMEMB elements
+ of SIZE bytes each, using COMPAR to perform the comparisons. */
+extern void *bsearch (const void *__key, const void *__base,
+ size_t __nmemb, size_t __size, __compar_fn_t __compar)
+ __nonnull ((1, 2, 5)) __wur;
+
+#ifdef __USE_EXTERN_INLINES
+# include <bits/stdlib-bsearch.h>
+#endif
+
+/* Sort NMEMB elements of BASE, of SIZE bytes each,
+ using COMPAR to perform the comparisons. */
+extern void qsort (void *__base, size_t __nmemb, size_t __size,
+ __compar_fn_t __compar) __nonnull ((1, 4));
+#ifdef __USE_GNU
+extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
+ __compar_d_fn_t __compar, void *__arg)
+ __nonnull ((1, 4));
+#endif
+
+
+/* Return the absolute value of X. */
+extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
+extern long int labs (long int __x) __THROW __attribute__ ((__const__)) __wur;
+
+#ifdef __USE_ISOC99
+__extension__ extern long long int llabs (long long int __x)
+ __THROW __attribute__ ((__const__)) __wur;
+#endif
+
+
+/* Return the `div_t', `ldiv_t' or `lldiv_t' representation
+ of the value of NUMER over DENOM. */
+/* GCC may have built-ins for these someday. */
+extern div_t div (int __numer, int __denom)
+ __THROW __attribute__ ((__const__)) __wur;
+extern ldiv_t ldiv (long int __numer, long int __denom)
+ __THROW __attribute__ ((__const__)) __wur;
+
+#ifdef __USE_ISOC99
+__extension__ extern lldiv_t lldiv (long long int __numer,
+ long long int __denom)
+ __THROW __attribute__ ((__const__)) __wur;
+#endif
+
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \
+ || defined __USE_MISC
+/* Convert floating point numbers to strings. The returned values are
+ valid only until another call to the same function. */
+
+/* Convert VALUE to a string with NDIGIT digits and return a pointer to
+ this. Set *DECPT with the position of the decimal character and *SIGN
+ with the sign of the number. */
+extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
+ int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
+
+/* Convert VALUE to a string rounded to NDIGIT decimal digits. Set *DECPT
+ with the position of the decimal character and *SIGN with the sign of
+ the number. */
+extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
+ int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
+
+/* If possible convert VALUE to a string with NDIGIT significant digits.
+ Otherwise use exponential representation. The resulting string will
+ be written to BUF. */
+extern char *gcvt (double __value, int __ndigit, char *__buf)
+ __THROW __nonnull ((3)) __wur;
+#endif
+
+#ifdef __USE_MISC
+/* Long double versions of above functions. */
+extern char *qecvt (long double __value, int __ndigit,
+ int *__restrict __decpt, int *__restrict __sign)
+ __THROW __nonnull ((3, 4)) __wur;
+extern char *qfcvt (long double __value, int __ndigit,
+ int *__restrict __decpt, int *__restrict __sign)
+ __THROW __nonnull ((3, 4)) __wur;
+extern char *qgcvt (long double __value, int __ndigit, char *__buf)
+ __THROW __nonnull ((3)) __wur;
+
+
+/* Reentrant version of the functions above which provide their own
+ buffers. */
+extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
+ int *__restrict __sign, char *__restrict __buf,
+ size_t __len) __THROW __nonnull ((3, 4, 5));
+extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
+ int *__restrict __sign, char *__restrict __buf,
+ size_t __len) __THROW __nonnull ((3, 4, 5));
+
+extern int qecvt_r (long double __value, int __ndigit,
+ int *__restrict __decpt, int *__restrict __sign,
+ char *__restrict __buf, size_t __len)
+ __THROW __nonnull ((3, 4, 5));
+extern int qfcvt_r (long double __value, int __ndigit,
+ int *__restrict __decpt, int *__restrict __sign,
+ char *__restrict __buf, size_t __len)
+ __THROW __nonnull ((3, 4, 5));
+#endif /* misc */
+
+
+/* Return the length of the multibyte character
+ in S, which is no longer than N. */
+extern int mblen (const char *__s, size_t __n) __THROW;
+/* Return the length of the given multibyte character,
+ putting its `wchar_t' representation in *PWC. */
+extern int mbtowc (wchar_t *__restrict __pwc,
+ const char *__restrict __s, size_t __n) __THROW;
+/* Put the multibyte character represented
+ by WCHAR in S, returning its length. */
+extern int wctomb (char *__s, wchar_t __wchar) __THROW;
+
+
+/* Convert a multibyte string to a wide char string. */
+extern size_t mbstowcs (wchar_t *__restrict __pwcs,
+ const char *__restrict __s, size_t __n) __THROW;
+/* Convert a wide char string to multibyte string. */
+extern size_t wcstombs (char *__restrict __s,
+ const wchar_t *__restrict __pwcs, size_t __n)
+ __THROW;
+
+
+#ifdef __USE_MISC
+/* Determine whether the string value of RESPONSE matches the affirmation
+ or negative response expression as specified by the LC_MESSAGES category
+ in the program's current locale. Returns 1 if affirmative, 0 if
+ negative, and -1 if not matching. */
+extern int rpmatch (const char *__response) __THROW __nonnull ((1)) __wur;
+#endif
+
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Parse comma separated suboption from *OPTIONP and match against
+ strings in TOKENS. If found return index and set *VALUEP to
+ optional value introduced by an equal sign. If the suboption is
+ not part of TOKENS return in *VALUEP beginning of unknown
+ suboption. On exit *OPTIONP is set to the beginning of the next
+ token or at the terminating NUL character. */
+extern int getsubopt (char **__restrict __optionp,
+ char *const *__restrict __tokens,
+ char **__restrict __valuep)
+ __THROW __nonnull ((1, 2, 3)) __wur;
+#endif
+
+
+#ifdef __USE_XOPEN
+/* Setup DES tables according KEY. */
+extern void setkey (const char *__key) __THROW __nonnull ((1));
+#endif
+
+
+/* X/Open pseudo terminal handling. */
+
+#ifdef __USE_XOPEN2KXSI
+/* Return a master pseudo-terminal handle. */
+extern int posix_openpt (int __oflag) __wur;
+#endif
+
+#ifdef __USE_XOPEN_EXTENDED
+/* The next four functions all take a master pseudo-tty fd and
+ perform an operation on the associated slave: */
+
+/* Chown the slave to the calling user. */
+extern int grantpt (int __fd) __THROW;
+
+/* Release an internal lock so the slave can be opened.
+ Call after grantpt(). */
+extern int unlockpt (int __fd) __THROW;
+
+/* Return the pathname of the pseudo terminal slave associated with
+ the master FD is open on, or NULL on errors.
+ The returned storage is good until the next call to this function. */
+extern char *ptsname (int __fd) __THROW __wur;
+#endif
+
+#ifdef __USE_GNU
+/* Store at most BUFLEN characters of the pathname of the slave pseudo
+ terminal associated with the master FD is open on in BUF.
+ Return 0 on success, otherwise an error number. */
+extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
+ __THROW __nonnull ((2));
+
+/* Open a master pseudo terminal and return its file descriptor. */
+extern int getpt (void);
+#endif
+
+#ifdef __USE_MISC
+/* Put the 1 minute, 5 minute and 15 minute load averages into the first
+ NELEM elements of LOADAVG. Return the number written (never more than
+ three, but may be less than NELEM), or -1 if an error occurred. */
+extern int getloadavg (double __loadavg[], int __nelem)
+ __THROW __nonnull ((1));
+#endif
+
+#if defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K
+/* Return the index into the active-logins file (utmp) for
+ the controlling terminal. */
+extern int ttyslot (void) __THROW;
+#endif
+
+#include <bits/stdlib-float.h>
+
+/* Define some macros helping to catch buffer overflows. */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/stdlib.h>
+#endif
+#ifdef __LDBL_COMPAT
+# include <bits/stdlib-ldbl.h>
+#endif
+
+__END_DECLS
+
+#endif /* stdlib.h */
diff --git a/REORG.TODO/stdlib/strfmon.c b/REORG.TODO/stdlib/strfmon.c
new file mode 100644
index 0000000000..dfaa9e0d9c
--- /dev/null
+++ b/REORG.TODO/stdlib/strfmon.c
@@ -0,0 +1,39 @@
+/* Formatting a monetary value according to the current locale.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>
+ and Jochen Hein <Jochen.Hein@informatik.TU-Clausthal.de>, 1996.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <monetary.h>
+#include <stdarg.h>
+#include <locale/localeinfo.h>
+#include <math_ldbl_opt.h>
+
+ssize_t
+__strfmon (char *s, size_t maxsize, const char *format, ...)
+{
+ va_list ap;
+
+ va_start (ap, format);
+
+ ssize_t res = __vstrfmon_l (s, maxsize, _NL_CURRENT_LOCALE, format, ap);
+
+ va_end (ap);
+
+ return res;
+}
+ldbl_strong_alias (__strfmon, strfmon)
diff --git a/REORG.TODO/stdlib/strfmon_l.c b/REORG.TODO/stdlib/strfmon_l.c
new file mode 100644
index 0000000000..af64173800
--- /dev/null
+++ b/REORG.TODO/stdlib/strfmon_l.c
@@ -0,0 +1,625 @@
+/* Formatting a monetary value according to the given locale.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <ctype.h>
+#include <errno.h>
+#include <langinfo.h>
+#include <locale.h>
+#include <monetary.h>
+#include "../libio/libioP.h"
+#include "../libio/strfile.h"
+#include <printf.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+#include "../locale/localeinfo.h"
+
+
+#define out_char(Ch) \
+ do { \
+ if (dest >= s + maxsize - 1) \
+ { \
+ __set_errno (E2BIG); \
+ va_end (ap); \
+ return -1; \
+ } \
+ *dest++ = (Ch); \
+ } while (0)
+
+#define out_string(String) \
+ do { \
+ const char *_s = (String); \
+ while (*_s) \
+ out_char (*_s++); \
+ } while (0)
+
+#define out_nstring(String, N) \
+ do { \
+ int _n = (N); \
+ const char *_s = (String); \
+ while (_n-- > 0) \
+ out_char (*_s++); \
+ } while (0)
+
+#define to_digit(Ch) ((Ch) - '0')
+
+
+/* We use this code also for the extended locale handling where the
+ function gets as an additional argument the locale which has to be
+ used. To access the values we have to redefine the _NL_CURRENT
+ macro. */
+#undef _NL_CURRENT
+#define _NL_CURRENT(category, item) \
+ (current->values[_NL_ITEM_INDEX (item)].string)
+
+/* This function determines the number of digit groups in the output.
+ The definition is in printf_fp.c. */
+extern unsigned int __guess_grouping (unsigned int intdig_max,
+ const char *grouping, wchar_t sepchar);
+
+
+/* We have to overcome some problems with this implementation. On the
+ one hand the strfmon() function is specified in XPG4 and of course
+ it has to follow this. But on the other hand POSIX.2 specifies
+ some information in the LC_MONETARY category which should be used,
+ too. Some of the information contradicts the information which can
+ be specified in format string. */
+ssize_t
+__vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format,
+ va_list ap)
+{
+ struct __locale_data *current = loc->__locales[LC_MONETARY];
+ _IO_strfile f;
+ struct printf_info info;
+ char *dest; /* Pointer so copy the output. */
+ const char *fmt; /* Pointer that walks through format. */
+
+ dest = s;
+ fmt = format;
+
+ /* Loop through the format-string. */
+ while (*fmt != '\0')
+ {
+ /* The floating-point value to output. */
+ union
+ {
+ double dbl;
+ __long_double_t ldbl;
+ }
+ fpnum;
+ int int_format;
+ int print_curr_symbol;
+ int left_prec;
+ int left_pad;
+ int right_prec;
+ int group;
+ char pad;
+ int is_long_double;
+ int p_sign_posn;
+ int n_sign_posn;
+ int sign_posn;
+ int other_sign_posn;
+ int left;
+ int is_negative;
+ int sep_by_space;
+ int other_sep_by_space;
+ int cs_precedes;
+ int other_cs_precedes;
+ const char *sign_string;
+ const char *other_sign_string;
+ int done;
+ const char *currency_symbol;
+ size_t currency_symbol_len;
+ long int width;
+ char *startp;
+ const void *ptr;
+ char space_char;
+
+ /* Process all character which do not introduce a format
+ specification. */
+ if (*fmt != '%')
+ {
+ out_char (*fmt++);
+ continue;
+ }
+
+ /* "%%" means a single '%' character. */
+ if (fmt[1] == '%')
+ {
+ out_char (*++fmt);
+ ++fmt;
+ continue;
+ }
+
+ /* Defaults for formatting. */
+ int_format = 0; /* Use international curr. symbol */
+ print_curr_symbol = 1; /* Print the currency symbol. */
+ left_prec = -1; /* No left precision specified. */
+ right_prec = -1; /* No right precision specified. */
+ group = 1; /* Print digits grouped. */
+ pad = ' '; /* Fill character is <SP>. */
+ is_long_double = 0; /* Double argument by default. */
+ p_sign_posn = -2; /* This indicates whether the */
+ n_sign_posn = -2; /* '(' flag is given. */
+ width = -1; /* No width specified so far. */
+ left = 0; /* Right justified by default. */
+
+ /* Parse group characters. */
+ while (1)
+ {
+ switch (*++fmt)
+ {
+ case '=': /* Set fill character. */
+ pad = *++fmt;
+ if (pad == '\0')
+ {
+ /* Premature EOS. */
+ __set_errno (EINVAL);
+ return -1;
+ }
+ continue;
+ case '^': /* Don't group digits. */
+ group = 0;
+ continue;
+ case '+': /* Use +/- for sign of number. */
+ if (n_sign_posn != -2)
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+ p_sign_posn = *_NL_CURRENT (LC_MONETARY, P_SIGN_POSN);
+ n_sign_posn = *_NL_CURRENT (LC_MONETARY, N_SIGN_POSN);
+ continue;
+ case '(': /* Use ( ) for negative sign. */
+ if (n_sign_posn != -2)
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+ p_sign_posn = 0;
+ n_sign_posn = 0;
+ continue;
+ case '!': /* Don't print the currency symbol. */
+ print_curr_symbol = 0;
+ continue;
+ case '-': /* Print left justified. */
+ left = 1;
+ continue;
+ default:
+ /* Will stop the loop. */;
+ }
+ break;
+ }
+
+ if (isdigit (*fmt))
+ {
+ /* Parse field width. */
+ width = to_digit (*fmt);
+
+ while (isdigit (*++fmt))
+ {
+ int val = to_digit (*fmt);
+
+ if (width > LONG_MAX / 10
+ || (width == LONG_MAX && val > LONG_MAX % 10))
+ {
+ __set_errno (E2BIG);
+ return -1;
+ }
+
+ width = width * 10 + val;
+ }
+
+ /* If we don't have enough room for the demanded width we
+ can stop now and return an error. */
+ if (width >= maxsize - (dest - s))
+ {
+ __set_errno (E2BIG);
+ return -1;
+ }
+ }
+
+ /* Recognize left precision. */
+ if (*fmt == '#')
+ {
+ if (!isdigit (*++fmt))
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+ left_prec = to_digit (*fmt);
+
+ while (isdigit (*++fmt))
+ {
+ left_prec *= 10;
+ left_prec += to_digit (*fmt);
+ }
+ }
+
+ /* Recognize right precision. */
+ if (*fmt == '.')
+ {
+ if (!isdigit (*++fmt))
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+ right_prec = to_digit (*fmt);
+
+ while (isdigit (*++fmt))
+ {
+ right_prec *= 10;
+ right_prec += to_digit (*fmt);
+ }
+ }
+
+ /* Handle modifier. This is an extension. */
+ if (*fmt == 'L')
+ {
+ ++fmt;
+ if (!__ldbl_is_dbl)
+ is_long_double = 1;
+ }
+
+ /* Handle format specifier. */
+ char int_symbol[4];
+ switch (*fmt++)
+ {
+ case 'i': { /* Use international currency symbol. */
+ const char *int_curr_symbol;
+
+ int_curr_symbol = _NL_CURRENT (LC_MONETARY, INT_CURR_SYMBOL);
+ strncpy(int_symbol, int_curr_symbol, 3);
+ int_symbol[3] = '\0';
+
+ currency_symbol_len = 3;
+ currency_symbol = &int_symbol[0];
+ space_char = int_curr_symbol[3];
+ int_format = 1;
+ break;
+ }
+ case 'n': /* Use national currency symbol. */
+ currency_symbol = _NL_CURRENT (LC_MONETARY, CURRENCY_SYMBOL);
+ currency_symbol_len = strlen (currency_symbol);
+ space_char = ' ';
+ int_format = 0;
+ break;
+ default: /* Any unrecognized format is an error. */
+ __set_errno (EINVAL);
+ return -1;
+ }
+
+ /* If not specified by the format string now find the values for
+ the format specification. */
+ if (p_sign_posn == -2)
+ p_sign_posn = *_NL_CURRENT (LC_MONETARY, int_format ? INT_P_SIGN_POSN : P_SIGN_POSN);
+ if (n_sign_posn == -2)
+ n_sign_posn = *_NL_CURRENT (LC_MONETARY, int_format ? INT_N_SIGN_POSN : N_SIGN_POSN);
+
+ if (right_prec == -1)
+ {
+ right_prec = *_NL_CURRENT (LC_MONETARY, int_format ? INT_FRAC_DIGITS : FRAC_DIGITS);
+
+ if (right_prec == '\377')
+ right_prec = 2;
+ }
+
+ /* If we have to print the digits grouped determine how many
+ extra characters this means. */
+ if (group && left_prec != -1)
+ left_prec += __guess_grouping (left_prec,
+ _NL_CURRENT (LC_MONETARY, MON_GROUPING),
+ *_NL_CURRENT (LC_MONETARY,
+ MON_THOUSANDS_SEP));
+
+ /* Now it's time to get the value. */
+ if (is_long_double == 1)
+ {
+ fpnum.ldbl = va_arg (ap, long double);
+ is_negative = fpnum.ldbl < 0;
+ if (is_negative)
+ fpnum.ldbl = -fpnum.ldbl;
+ }
+ else
+ {
+ fpnum.dbl = va_arg (ap, double);
+ is_negative = fpnum.dbl < 0;
+ if (is_negative)
+ fpnum.dbl = -fpnum.dbl;
+ }
+
+ /* We now know the sign of the value and can determine the format. */
+ if (is_negative)
+ {
+ sign_string = _NL_CURRENT (LC_MONETARY, NEGATIVE_SIGN);
+ /* If the locale does not specify a character for the
+ negative sign we use a '-'. */
+ if (*sign_string == '\0')
+ sign_string = (const char *) "-";
+ cs_precedes = *_NL_CURRENT (LC_MONETARY, int_format ? INT_N_CS_PRECEDES : N_CS_PRECEDES);
+ sep_by_space = *_NL_CURRENT (LC_MONETARY, int_format ? INT_N_SEP_BY_SPACE : N_SEP_BY_SPACE);
+ sign_posn = n_sign_posn;
+
+ other_sign_string = _NL_CURRENT (LC_MONETARY, POSITIVE_SIGN);
+ other_cs_precedes = *_NL_CURRENT (LC_MONETARY, int_format ? INT_P_CS_PRECEDES : P_CS_PRECEDES);
+ other_sep_by_space = *_NL_CURRENT (LC_MONETARY, int_format ? INT_P_SEP_BY_SPACE : P_SEP_BY_SPACE);
+ other_sign_posn = p_sign_posn;
+ }
+ else
+ {
+ sign_string = _NL_CURRENT (LC_MONETARY, POSITIVE_SIGN);
+ cs_precedes = *_NL_CURRENT (LC_MONETARY, int_format ? INT_P_CS_PRECEDES : P_CS_PRECEDES);
+ sep_by_space = *_NL_CURRENT (LC_MONETARY, int_format ? INT_P_SEP_BY_SPACE : P_SEP_BY_SPACE);
+ sign_posn = p_sign_posn;
+
+ other_sign_string = _NL_CURRENT (LC_MONETARY, NEGATIVE_SIGN);
+ if (*other_sign_string == '\0')
+ other_sign_string = (const char *) "-";
+ other_cs_precedes = *_NL_CURRENT (LC_MONETARY, int_format ? INT_N_CS_PRECEDES : N_CS_PRECEDES);
+ other_sep_by_space = *_NL_CURRENT (LC_MONETARY, int_format ? INT_N_SEP_BY_SPACE : N_SEP_BY_SPACE);
+ other_sign_posn = n_sign_posn;
+ }
+
+ /* Set default values for unspecified information. */
+ if (cs_precedes != 0)
+ cs_precedes = 1;
+ if (other_cs_precedes != 0)
+ other_cs_precedes = 1;
+ if (sep_by_space == '\377')
+ sep_by_space = 0;
+ if (other_sep_by_space == '\377')
+ other_sep_by_space = 0;
+ if (sign_posn == '\377')
+ sign_posn = 1;
+ if (other_sign_posn == '\377')
+ other_sign_posn = 1;
+
+ /* Check for degenerate cases */
+ if (sep_by_space == 2)
+ {
+ if (sign_posn == 0 ||
+ (sign_posn == 1 && !cs_precedes) ||
+ (sign_posn == 2 && cs_precedes))
+ /* sign and symbol are not adjacent, so no separator */
+ sep_by_space = 0;
+ }
+ if (other_sep_by_space == 2)
+ {
+ if (other_sign_posn == 0 ||
+ (other_sign_posn == 1 && !other_cs_precedes) ||
+ (other_sign_posn == 2 && other_cs_precedes))
+ /* sign and symbol are not adjacent, so no separator */
+ other_sep_by_space = 0;
+ }
+
+ /* Set the left precision and padding needed for alignment */
+ if (left_prec == -1)
+ {
+ left_prec = 0;
+ left_pad = 0;
+ }
+ else
+ {
+ /* Set left_pad to number of spaces needed to align positive
+ and negative formats */
+
+ int left_bytes = 0;
+ int other_left_bytes = 0;
+
+ /* Work out number of bytes for currency string and separator
+ preceding the value */
+ if (cs_precedes)
+ {
+ left_bytes += currency_symbol_len;
+ if (sep_by_space != 0)
+ ++left_bytes;
+ }
+
+ if (other_cs_precedes)
+ {
+ other_left_bytes += currency_symbol_len;
+ if (other_sep_by_space != 0)
+ ++other_left_bytes;
+ }
+
+ /* Work out number of bytes for the sign (or left parenthesis)
+ preceding the value */
+ if (sign_posn == 0 && is_negative)
+ ++left_bytes;
+ else if (sign_posn == 1)
+ left_bytes += strlen (sign_string);
+ else if (cs_precedes && (sign_posn == 3 || sign_posn == 4))
+ left_bytes += strlen (sign_string);
+
+ if (other_sign_posn == 0 && !is_negative)
+ ++other_left_bytes;
+ else if (other_sign_posn == 1)
+ other_left_bytes += strlen (other_sign_string);
+ else if (other_cs_precedes &&
+ (other_sign_posn == 3 || other_sign_posn == 4))
+ other_left_bytes += strlen (other_sign_string);
+
+ /* Compare the number of bytes preceding the value for
+ each format, and set the padding accordingly */
+ if (other_left_bytes > left_bytes)
+ left_pad = other_left_bytes - left_bytes;
+ else
+ left_pad = 0;
+ }
+
+ /* Perhaps we'll someday make these things configurable so
+ better start using symbolic names now. */
+#define left_paren '('
+#define right_paren ')'
+
+ startp = dest; /* Remember start so we can compute length. */
+
+ while (left_pad-- > 0)
+ out_char (' ');
+
+ if (sign_posn == 0 && is_negative)
+ out_char (left_paren);
+
+ if (cs_precedes)
+ {
+ if (sign_posn != 0 && sign_posn != 2 && sign_posn != 4
+ && sign_posn != 5)
+ {
+ out_string (sign_string);
+ if (sep_by_space == 2)
+ out_char (' ');
+ }
+
+ if (print_curr_symbol)
+ out_string (currency_symbol);
+
+ if (sign_posn == 4)
+ {
+ if (print_curr_symbol && sep_by_space == 2)
+ out_char (space_char);
+ out_string (sign_string);
+ if (sep_by_space == 1)
+ /* POSIX.2 and SUS are not clear on this case, but C99
+ says a space follows the adjacent-symbol-and-sign */
+ out_char (' ');
+ }
+ else
+ if (print_curr_symbol && sep_by_space == 1)
+ out_char (space_char);
+ }
+ else
+ if (sign_posn != 0 && sign_posn != 2 && sign_posn != 3
+ && sign_posn != 4 && sign_posn != 5)
+ out_string (sign_string);
+
+ /* Print the number. */
+#ifdef _IO_MTSAFE_IO
+ f._sbf._f._lock = NULL;
+#endif
+ _IO_init_internal (&f._sbf._f, 0);
+ _IO_JUMPS (&f._sbf) = &_IO_str_jumps;
+ _IO_str_init_static_internal (&f, dest, (s + maxsize) - dest, dest);
+ /* We clear the last available byte so we can find out whether
+ the numeric representation is too long. */
+ s[maxsize - 1] = '\0';
+
+ memset (&info, '\0', sizeof (info));
+ info.prec = right_prec;
+ info.width = left_prec + (right_prec ? (right_prec + 1) : 0);
+ info.spec = 'f';
+ info.is_long_double = is_long_double;
+ info.group = group;
+ info.pad = pad;
+ info.extra = 1; /* This means use values from LC_MONETARY. */
+
+ ptr = &fpnum;
+ done = __printf_fp_l (&f._sbf._f, loc, &info, &ptr);
+ if (done < 0)
+ return -1;
+
+ if (s[maxsize - 1] != '\0')
+ {
+ __set_errno (E2BIG);
+ return -1;
+ }
+
+ dest += done;
+
+ if (!cs_precedes)
+ {
+ if (sign_posn == 3)
+ {
+ if (sep_by_space == 1)
+ out_char (' ');
+ out_string (sign_string);
+ }
+
+ if (print_curr_symbol)
+ {
+ if ((sign_posn == 3 && sep_by_space == 2)
+ || (sign_posn == 4 && sep_by_space == 1)
+ || (sign_posn == 2 && sep_by_space == 1)
+ || (sign_posn == 1 && sep_by_space == 1)
+ || (sign_posn == 0 && sep_by_space == 1))
+ out_char (space_char);
+ out_nstring (currency_symbol, currency_symbol_len);
+ }
+
+ if (sign_posn == 4)
+ {
+ if (sep_by_space == 2)
+ out_char (' ');
+ out_string (sign_string);
+ }
+ }
+
+ if (sign_posn == 2)
+ {
+ if (sep_by_space == 2)
+ out_char (' ');
+ out_string (sign_string);
+ }
+
+ if (sign_posn == 0 && is_negative)
+ out_char (right_paren);
+
+ /* Now test whether the output width is filled. */
+ if (dest - startp < width)
+ {
+ if (left)
+ /* We simply have to fill using spaces. */
+ do
+ out_char (' ');
+ while (dest - startp < width);
+ else
+ {
+ long int dist = width - (dest - startp);
+ for (char *cp = dest - 1; cp >= startp; --cp)
+ cp[dist] = cp[0];
+
+ dest += dist;
+
+ do
+ startp[--dist] = ' ';
+ while (dist > 0);
+ }
+ }
+ }
+
+ /* Terminate the string. */
+ *dest = '\0';
+
+ return dest - s;
+}
+
+ssize_t
+___strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
+{
+ va_list ap;
+
+ va_start (ap, format);
+
+ ssize_t res = __vstrfmon_l (s, maxsize, loc, format, ap);
+
+ va_end (ap);
+
+ return res;
+}
+ldbl_strong_alias (___strfmon_l, __strfmon_l)
+ldbl_weak_alias (___strfmon_l, strfmon_l)
diff --git a/REORG.TODO/stdlib/strfrom-skeleton.c b/REORG.TODO/stdlib/strfrom-skeleton.c
new file mode 100644
index 0000000000..5841919fe4
--- /dev/null
+++ b/REORG.TODO/stdlib/strfrom-skeleton.c
@@ -0,0 +1,155 @@
+/* Convert a floating-point number to string.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Generic implementation for strfrom functions. The implementation is generic
+ for several floating-point types (e.g.: float, double), so that each
+ function, such as strfromf and strfroml, share the same code, thus avoiding
+ code duplication. */
+
+#include <ctype.h>
+#include "../libio/libioP.h"
+#include "../libio/strfile.h"
+#include <printf.h>
+#include <string.h>
+#include <locale/localeinfo.h>
+
+#define UCHAR_T char
+#define L_(Str) Str
+#define ISDIGIT(Ch) isdigit (Ch)
+#include "stdio-common/printf-parse.h"
+
+int
+STRFROM (char *dest, size_t size, const char *format, FLOAT f)
+{
+ _IO_strnfile sfile;
+#ifdef _IO_MTSAFE_IO
+ sfile.f._sbf._f._lock = NULL;
+#endif
+
+ int done;
+
+ /* Single-precision values need to be stored in a double type, because
+ __printf_fp_l and __printf_fphex do not accept the float type. */
+ union {
+ double flt;
+ FLOAT value;
+ } fpnum;
+ const void *fpptr;
+ fpptr = &fpnum;
+
+ /* Variables to control the output format. */
+ int precision = -1; /* printf_fp and printf_fphex treat this internally. */
+ int specifier;
+ struct printf_info info;
+
+ /* Single-precision values need to be converted into double-precision,
+ because __printf_fp and __printf_fphex only accept double and long double
+ as the floating-point argument. */
+ if (__builtin_types_compatible_p (FLOAT, float))
+ fpnum.flt = f;
+ else
+ fpnum.value = f;
+
+ /* Check if the first character in the format string is indeed the '%'
+ character. Otherwise, abort. */
+ if (*format == '%')
+ format++;
+ else
+ abort ();
+
+ /* The optional precision specification always starts with a '.'. If such
+ character is present, read the precision. */
+ if (*format == '.')
+ {
+ format++;
+
+ /* Parse the precision. */
+ if (ISDIGIT (*format))
+ precision = read_int (&format);
+ /* If only the period is specified, the precision is taken as zero, as
+ described in ISO/IEC 9899:2011, section 7.21.6.1, 4th paragraph, 3rd
+ item. */
+ else
+ precision = 0;
+ }
+
+ /* Now there is only the conversion specifier to be read. */
+ switch (*format)
+ {
+ case 'a':
+ case 'A':
+ case 'e':
+ case 'E':
+ case 'f':
+ case 'F':
+ case 'g':
+ case 'G':
+ specifier = *format;
+ break;
+ default:
+ abort ();
+ }
+
+ /* The following code to prepare the virtual file has been adapted from the
+ function _IO_vsnprintf from libio. */
+
+ if (size == 0)
+ {
+ /* When size is zero, nothing is written and dest may be a null pointer.
+ This is specified for snprintf in ISO/IEC 9899:2011, Section 7.21.6.5,
+ in the second paragraph. Thus, if size is zero, prepare to use the
+ overflow buffer right from the start. */
+ dest = sfile.overflow_buf;
+ size = sizeof (sfile.overflow_buf);
+ }
+
+ /* Prepare the virtual string file. */
+ _IO_no_init (&sfile.f._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
+ _IO_JUMPS (&sfile.f._sbf) = &_IO_strn_jumps;
+ _IO_str_init_static_internal (&sfile.f, dest, size - 1, dest);
+
+ /* Prepare the format specification for printf_fp. */
+ memset (&info, '\0', sizeof (info));
+
+ /* The functions strfromd and strfromf pass a floating-point number with
+ double precision to printf_fp, whereas strfroml passes a floating-point
+ number with long double precision. The following line informs printf_fp
+ which type of floating-point number is being passed. */
+ info.is_long_double = __builtin_types_compatible_p (FLOAT, long double);
+
+ /* Similarly, the function strfromf128 passes a floating-point number in
+ _Float128 format to printf_fp. */
+#if __HAVE_DISTINCT_FLOAT128
+ info.is_binary128 = __builtin_types_compatible_p (FLOAT, _Float128);
+#endif
+
+ /* Set info according to the format string. */
+ info.prec = precision;
+ info.spec = specifier;
+
+ if (info.spec != 'a' && info.spec != 'A')
+ done = __printf_fp_l (&sfile.f._sbf._f, _NL_CURRENT_LOCALE, &info, &fpptr);
+ else
+ done = __printf_fphex (&sfile.f._sbf._f, &info, &fpptr);
+
+ /* Terminate the string. */
+ if (sfile.f._sbf._f._IO_buf_base != sfile.overflow_buf)
+ *sfile.f._sbf._f._IO_write_ptr = '\0';
+
+ return done;
+}
diff --git a/REORG.TODO/stdlib/strfromd.c b/REORG.TODO/stdlib/strfromd.c
new file mode 100644
index 0000000000..5342059008
--- /dev/null
+++ b/REORG.TODO/stdlib/strfromd.c
@@ -0,0 +1,22 @@
+/* Definitions for strfromd. Implementation in stdlib/strfrom-skeleton.c.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define FLOAT double
+#define STRFROM strfromd
+
+#include "strfrom-skeleton.c"
diff --git a/REORG.TODO/stdlib/strfromf.c b/REORG.TODO/stdlib/strfromf.c
new file mode 100644
index 0000000000..20c674414d
--- /dev/null
+++ b/REORG.TODO/stdlib/strfromf.c
@@ -0,0 +1,22 @@
+/* Definitions for strfromf. Implementation in stdlib/strfrom-skeleton.c.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define FLOAT float
+#define STRFROM strfromf
+
+#include "strfrom-skeleton.c"
diff --git a/REORG.TODO/stdlib/strfroml.c b/REORG.TODO/stdlib/strfroml.c
new file mode 100644
index 0000000000..f8c8a4fcc5
--- /dev/null
+++ b/REORG.TODO/stdlib/strfroml.c
@@ -0,0 +1,22 @@
+/* Definitions for strfroml. Implementation in stdlib/strfrom-skeleton.c.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define FLOAT long double
+#define STRFROM strfroml
+
+#include "strfrom-skeleton.c"
diff --git a/REORG.TODO/stdlib/strtod.c b/REORG.TODO/stdlib/strtod.c
new file mode 100644
index 0000000000..2ac1b2e57a
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod.c
@@ -0,0 +1,80 @@
+/* Read decimal floating point numbers.
+ This file is part of the GNU C Library.
+ Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <wchar.h>
+#include <locale/localeinfo.h>
+
+
+#ifndef FLOAT
+# include <math_ldbl_opt.h>
+# define FLOAT double
+# ifdef USE_WIDE_CHAR
+# define STRTOF wcstod
+# define STRTOF_L __wcstod_l
+# else
+# define STRTOF strtod
+# define STRTOF_L __strtod_l
+# endif
+#endif
+
+#ifdef USE_WIDE_CHAR
+# include <wctype.h>
+# define STRING_TYPE wchar_t
+#else
+# define STRING_TYPE char
+#endif
+
+#define INTERNAL(x) INTERNAL1(x)
+#define INTERNAL1(x) __##x##_internal
+
+
+FLOAT
+INTERNAL (STRTOF) (const STRING_TYPE *nptr, STRING_TYPE **endptr, int group)
+{
+ return INTERNAL(STRTOF_L) (nptr, endptr, group, _NL_CURRENT_LOCALE);
+}
+#if defined _LIBC
+libc_hidden_def (INTERNAL (STRTOF))
+#endif
+
+
+FLOAT
+#ifdef weak_function
+weak_function
+#endif
+STRTOF (const STRING_TYPE *nptr, STRING_TYPE **endptr)
+{
+ return INTERNAL(STRTOF_L) (nptr, endptr, 0, _NL_CURRENT_LOCALE);
+}
+#if defined _LIBC
+libc_hidden_def (STRTOF)
+#endif
+
+#ifdef LONG_DOUBLE_COMPAT
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+# ifdef USE_WIDE_CHAR
+compat_symbol (libc, wcstod, wcstold, GLIBC_2_0);
+compat_symbol (libc, __wcstod_internal, __wcstold_internal, GLIBC_2_0);
+# else
+compat_symbol (libc, strtod, strtold, GLIBC_2_0);
+compat_symbol (libc, __strtod_internal, __strtold_internal, GLIBC_2_0);
+# endif
+# endif
+#endif
diff --git a/REORG.TODO/stdlib/strtod_l.c b/REORG.TODO/stdlib/strtod_l.c
new file mode 100644
index 0000000000..99c2af357e
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_l.c
@@ -0,0 +1,1787 @@
+/* Convert string representing a number to float value, using given locale.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <xlocale.h>
+
+extern double ____strtod_l_internal (const char *, char **, int, __locale_t);
+
+/* Configuration part. These macros are defined by `strtold.c',
+ `strtof.c', `wcstod.c', `wcstold.c', and `wcstof.c' to produce the
+ `long double' and `float' versions of the reader. */
+#ifndef FLOAT
+# include <math_ldbl_opt.h>
+# define FLOAT double
+# define FLT DBL
+# ifdef USE_WIDE_CHAR
+# define STRTOF wcstod_l
+# define __STRTOF __wcstod_l
+# define STRTOF_NAN __wcstod_nan
+# else
+# define STRTOF strtod_l
+# define __STRTOF __strtod_l
+# define STRTOF_NAN __strtod_nan
+# endif
+# define MPN2FLOAT __mpn_construct_double
+# define FLOAT_HUGE_VAL HUGE_VAL
+#endif
+/* End of configuration part. */
+
+#include <ctype.h>
+#include <errno.h>
+#include <float.h>
+#include "../locale/localeinfo.h"
+#include <locale.h>
+#include <math.h>
+#include <math_private.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include <rounding-mode.h>
+#include <tininess.h>
+
+/* The gmp headers need some configuration frobs. */
+#define HAVE_ALLOCA 1
+
+/* Include gmp-mparam.h first, such that definitions of _SHORT_LIMB
+ and _LONG_LONG_LIMB in it can take effect into gmp.h. */
+#include <gmp-mparam.h>
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+#include "fpioconst.h"
+
+#include <assert.h>
+
+
+/* We use this code for the extended locale handling where the
+ function gets as an additional argument the locale which has to be
+ used. To access the values we have to redefine the _NL_CURRENT and
+ _NL_CURRENT_WORD macros. */
+#undef _NL_CURRENT
+#define _NL_CURRENT(category, item) \
+ (current->values[_NL_ITEM_INDEX (item)].string)
+#undef _NL_CURRENT_WORD
+#define _NL_CURRENT_WORD(category, item) \
+ ((uint32_t) current->values[_NL_ITEM_INDEX (item)].word)
+
+#if defined _LIBC || defined HAVE_WCHAR_H
+# include <wchar.h>
+#endif
+
+#ifdef USE_WIDE_CHAR
+# include <wctype.h>
+# define STRING_TYPE wchar_t
+# define CHAR_TYPE wint_t
+# define L_(Ch) L##Ch
+# define ISSPACE(Ch) __iswspace_l ((Ch), loc)
+# define ISDIGIT(Ch) __iswdigit_l ((Ch), loc)
+# define ISXDIGIT(Ch) __iswxdigit_l ((Ch), loc)
+# define TOLOWER(Ch) __towlower_l ((Ch), loc)
+# define TOLOWER_C(Ch) __towlower_l ((Ch), _nl_C_locobj_ptr)
+# define STRNCASECMP(S1, S2, N) \
+ __wcsncasecmp_l ((S1), (S2), (N), _nl_C_locobj_ptr)
+#else
+# define STRING_TYPE char
+# define CHAR_TYPE char
+# define L_(Ch) Ch
+# define ISSPACE(Ch) __isspace_l ((Ch), loc)
+# define ISDIGIT(Ch) __isdigit_l ((Ch), loc)
+# define ISXDIGIT(Ch) __isxdigit_l ((Ch), loc)
+# define TOLOWER(Ch) __tolower_l ((Ch), loc)
+# define TOLOWER_C(Ch) __tolower_l ((Ch), _nl_C_locobj_ptr)
+# define STRNCASECMP(S1, S2, N) \
+ __strncasecmp_l ((S1), (S2), (N), _nl_C_locobj_ptr)
+#endif
+
+
+/* Constants we need from float.h; select the set for the FLOAT precision. */
+#define MANT_DIG PASTE(FLT,_MANT_DIG)
+#define DIG PASTE(FLT,_DIG)
+#define MAX_EXP PASTE(FLT,_MAX_EXP)
+#define MIN_EXP PASTE(FLT,_MIN_EXP)
+#define MAX_10_EXP PASTE(FLT,_MAX_10_EXP)
+#define MIN_10_EXP PASTE(FLT,_MIN_10_EXP)
+#define MAX_VALUE PASTE(FLT,_MAX)
+#define MIN_VALUE PASTE(FLT,_MIN)
+
+/* Extra macros required to get FLT expanded before the pasting. */
+#define PASTE(a,b) PASTE1(a,b)
+#define PASTE1(a,b) a##b
+
+/* Function to construct a floating point number from an MP integer
+ containing the fraction bits, a base 2 exponent, and a sign flag. */
+extern FLOAT MPN2FLOAT (mp_srcptr mpn, int exponent, int negative);
+
+/* Definitions according to limb size used. */
+#if BITS_PER_MP_LIMB == 32
+# define MAX_DIG_PER_LIMB 9
+# define MAX_FAC_PER_LIMB 1000000000UL
+#elif BITS_PER_MP_LIMB == 64
+# define MAX_DIG_PER_LIMB 19
+# define MAX_FAC_PER_LIMB 10000000000000000000ULL
+#else
+# error "mp_limb_t size " BITS_PER_MP_LIMB "not accounted for"
+#endif
+
+extern const mp_limb_t _tens_in_limb[MAX_DIG_PER_LIMB + 1];
+
+#ifndef howmany
+#define howmany(x,y) (((x)+((y)-1))/(y))
+#endif
+#define SWAP(x, y) ({ typeof(x) _tmp = x; x = y; y = _tmp; })
+
+#define RETURN_LIMB_SIZE howmany (MANT_DIG, BITS_PER_MP_LIMB)
+
+#define RETURN(val,end) \
+ do { if (endptr != NULL) *endptr = (STRING_TYPE *) (end); \
+ return val; } while (0)
+
+/* Maximum size necessary for mpn integers to hold floating point
+ numbers. The largest number we need to hold is 10^n where 2^-n is
+ 1/4 ulp of the smallest representable value (that is, n = MANT_DIG
+ - MIN_EXP + 2). Approximate using 10^3 < 2^10. */
+#define MPNSIZE (howmany (1 + ((MANT_DIG - MIN_EXP + 2) * 10) / 3, \
+ BITS_PER_MP_LIMB) + 2)
+/* Declare an mpn integer variable that big. */
+#define MPN_VAR(name) mp_limb_t name[MPNSIZE]; mp_size_t name##size
+/* Copy an mpn integer value. */
+#define MPN_ASSIGN(dst, src) \
+ memcpy (dst, src, (dst##size = src##size) * sizeof (mp_limb_t))
+
+
+/* Set errno and return an overflowing value with sign specified by
+ NEGATIVE. */
+static FLOAT
+overflow_value (int negative)
+{
+ __set_errno (ERANGE);
+ FLOAT result = math_narrow_eval ((negative ? -MAX_VALUE : MAX_VALUE)
+ * MAX_VALUE);
+ return result;
+}
+
+
+/* Set errno and return an underflowing value with sign specified by
+ NEGATIVE. */
+static FLOAT
+underflow_value (int negative)
+{
+ __set_errno (ERANGE);
+ FLOAT result = math_narrow_eval ((negative ? -MIN_VALUE : MIN_VALUE)
+ * MIN_VALUE);
+ return result;
+}
+
+
+/* Return a floating point number of the needed type according to the given
+ multi-precision number after possible rounding. */
+static FLOAT
+round_and_return (mp_limb_t *retval, intmax_t exponent, int negative,
+ mp_limb_t round_limb, mp_size_t round_bit, int more_bits)
+{
+ int mode = get_rounding_mode ();
+
+ if (exponent < MIN_EXP - 1)
+ {
+ if (exponent < MIN_EXP - 1 - MANT_DIG)
+ return underflow_value (negative);
+
+ mp_size_t shift = MIN_EXP - 1 - exponent;
+ bool is_tiny = true;
+
+ more_bits |= (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0;
+ if (shift == MANT_DIG)
+ /* This is a special case to handle the very seldom case where
+ the mantissa will be empty after the shift. */
+ {
+ int i;
+
+ round_limb = retval[RETURN_LIMB_SIZE - 1];
+ round_bit = (MANT_DIG - 1) % BITS_PER_MP_LIMB;
+ for (i = 0; i < RETURN_LIMB_SIZE - 1; ++i)
+ more_bits |= retval[i] != 0;
+ MPN_ZERO (retval, RETURN_LIMB_SIZE);
+ }
+ else if (shift >= BITS_PER_MP_LIMB)
+ {
+ int i;
+
+ round_limb = retval[(shift - 1) / BITS_PER_MP_LIMB];
+ round_bit = (shift - 1) % BITS_PER_MP_LIMB;
+ for (i = 0; i < (shift - 1) / BITS_PER_MP_LIMB; ++i)
+ more_bits |= retval[i] != 0;
+ more_bits |= ((round_limb & ((((mp_limb_t) 1) << round_bit) - 1))
+ != 0);
+
+ /* __mpn_rshift requires 0 < shift < BITS_PER_MP_LIMB. */
+ if ((shift % BITS_PER_MP_LIMB) != 0)
+ (void) __mpn_rshift (retval, &retval[shift / BITS_PER_MP_LIMB],
+ RETURN_LIMB_SIZE - (shift / BITS_PER_MP_LIMB),
+ shift % BITS_PER_MP_LIMB);
+ else
+ for (i = 0; i < RETURN_LIMB_SIZE - (shift / BITS_PER_MP_LIMB); i++)
+ retval[i] = retval[i + (shift / BITS_PER_MP_LIMB)];
+ MPN_ZERO (&retval[RETURN_LIMB_SIZE - (shift / BITS_PER_MP_LIMB)],
+ shift / BITS_PER_MP_LIMB);
+ }
+ else if (shift > 0)
+ {
+ if (TININESS_AFTER_ROUNDING && shift == 1)
+ {
+ /* Whether the result counts as tiny depends on whether,
+ after rounding to the normal precision, it still has
+ a subnormal exponent. */
+ mp_limb_t retval_normal[RETURN_LIMB_SIZE];
+ if (round_away (negative,
+ (retval[0] & 1) != 0,
+ (round_limb
+ & (((mp_limb_t) 1) << round_bit)) != 0,
+ (more_bits
+ || ((round_limb
+ & ((((mp_limb_t) 1) << round_bit) - 1))
+ != 0)),
+ mode))
+ {
+ mp_limb_t cy = __mpn_add_1 (retval_normal, retval,
+ RETURN_LIMB_SIZE, 1);
+
+ if (((MANT_DIG % BITS_PER_MP_LIMB) == 0 && cy) ||
+ ((MANT_DIG % BITS_PER_MP_LIMB) != 0 &&
+ ((retval_normal[RETURN_LIMB_SIZE - 1]
+ & (((mp_limb_t) 1) << (MANT_DIG % BITS_PER_MP_LIMB)))
+ != 0)))
+ is_tiny = false;
+ }
+ }
+ round_limb = retval[0];
+ round_bit = shift - 1;
+ (void) __mpn_rshift (retval, retval, RETURN_LIMB_SIZE, shift);
+ }
+ /* This is a hook for the m68k long double format, where the
+ exponent bias is the same for normalized and denormalized
+ numbers. */
+#ifndef DENORM_EXP
+# define DENORM_EXP (MIN_EXP - 2)
+#endif
+ exponent = DENORM_EXP;
+ if (is_tiny
+ && ((round_limb & (((mp_limb_t) 1) << round_bit)) != 0
+ || more_bits
+ || (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0))
+ {
+ __set_errno (ERANGE);
+ FLOAT force_underflow = MIN_VALUE * MIN_VALUE;
+ math_force_eval (force_underflow);
+ }
+ }
+
+ if (exponent > MAX_EXP)
+ goto overflow;
+
+ bool half_bit = (round_limb & (((mp_limb_t) 1) << round_bit)) != 0;
+ bool more_bits_nonzero
+ = (more_bits
+ || (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0);
+ if (round_away (negative,
+ (retval[0] & 1) != 0,
+ half_bit,
+ more_bits_nonzero,
+ mode))
+ {
+ mp_limb_t cy = __mpn_add_1 (retval, retval, RETURN_LIMB_SIZE, 1);
+
+ if (((MANT_DIG % BITS_PER_MP_LIMB) == 0 && cy) ||
+ ((MANT_DIG % BITS_PER_MP_LIMB) != 0 &&
+ (retval[RETURN_LIMB_SIZE - 1]
+ & (((mp_limb_t) 1) << (MANT_DIG % BITS_PER_MP_LIMB))) != 0))
+ {
+ ++exponent;
+ (void) __mpn_rshift (retval, retval, RETURN_LIMB_SIZE, 1);
+ retval[RETURN_LIMB_SIZE - 1]
+ |= ((mp_limb_t) 1) << ((MANT_DIG - 1) % BITS_PER_MP_LIMB);
+ }
+ else if (exponent == DENORM_EXP
+ && (retval[RETURN_LIMB_SIZE - 1]
+ & (((mp_limb_t) 1) << ((MANT_DIG - 1) % BITS_PER_MP_LIMB)))
+ != 0)
+ /* The number was denormalized but now normalized. */
+ exponent = MIN_EXP - 1;
+ }
+
+ if (exponent > MAX_EXP)
+ overflow:
+ return overflow_value (negative);
+
+ if (half_bit || more_bits_nonzero)
+ {
+ FLOAT force_inexact = (FLOAT) 1 + MIN_VALUE;
+ math_force_eval (force_inexact);
+ }
+ return MPN2FLOAT (retval, exponent, negative);
+}
+
+
+/* Read a multi-precision integer starting at STR with exactly DIGCNT digits
+ into N. Return the size of the number limbs in NSIZE at the first
+ character od the string that is not part of the integer as the function
+ value. If the EXPONENT is small enough to be taken as an additional
+ factor for the resulting number (see code) multiply by it. */
+static const STRING_TYPE *
+str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t *n, mp_size_t *nsize,
+ intmax_t *exponent
+#ifndef USE_WIDE_CHAR
+ , const char *decimal, size_t decimal_len, const char *thousands
+#endif
+
+ )
+{
+ /* Number of digits for actual limb. */
+ int cnt = 0;
+ mp_limb_t low = 0;
+ mp_limb_t start;
+
+ *nsize = 0;
+ assert (digcnt > 0);
+ do
+ {
+ if (cnt == MAX_DIG_PER_LIMB)
+ {
+ if (*nsize == 0)
+ {
+ n[0] = low;
+ *nsize = 1;
+ }
+ else
+ {
+ mp_limb_t cy;
+ cy = __mpn_mul_1 (n, n, *nsize, MAX_FAC_PER_LIMB);
+ cy += __mpn_add_1 (n, n, *nsize, low);
+ if (cy != 0)
+ {
+ assert (*nsize < MPNSIZE);
+ n[*nsize] = cy;
+ ++(*nsize);
+ }
+ }
+ cnt = 0;
+ low = 0;
+ }
+
+ /* There might be thousands separators or radix characters in
+ the string. But these all can be ignored because we know the
+ format of the number is correct and we have an exact number
+ of characters to read. */
+#ifdef USE_WIDE_CHAR
+ if (*str < L'0' || *str > L'9')
+ ++str;
+#else
+ if (*str < '0' || *str > '9')
+ {
+ int inner = 0;
+ if (thousands != NULL && *str == *thousands
+ && ({ for (inner = 1; thousands[inner] != '\0'; ++inner)
+ if (thousands[inner] != str[inner])
+ break;
+ thousands[inner] == '\0'; }))
+ str += inner;
+ else
+ str += decimal_len;
+ }
+#endif
+ low = low * 10 + *str++ - L_('0');
+ ++cnt;
+ }
+ while (--digcnt > 0);
+
+ if (*exponent > 0 && *exponent <= MAX_DIG_PER_LIMB - cnt)
+ {
+ low *= _tens_in_limb[*exponent];
+ start = _tens_in_limb[cnt + *exponent];
+ *exponent = 0;
+ }
+ else
+ start = _tens_in_limb[cnt];
+
+ if (*nsize == 0)
+ {
+ n[0] = low;
+ *nsize = 1;
+ }
+ else
+ {
+ mp_limb_t cy;
+ cy = __mpn_mul_1 (n, n, *nsize, start);
+ cy += __mpn_add_1 (n, n, *nsize, low);
+ if (cy != 0)
+ {
+ assert (*nsize < MPNSIZE);
+ n[(*nsize)++] = cy;
+ }
+ }
+
+ return str;
+}
+
+
+/* Shift {PTR, SIZE} COUNT bits to the left, and fill the vacated bits
+ with the COUNT most significant bits of LIMB.
+
+ Implemented as a macro, so that __builtin_constant_p works even at -O0.
+
+ Tege doesn't like this macro so I have to write it here myself. :)
+ --drepper */
+#define __mpn_lshift_1(ptr, size, count, limb) \
+ do \
+ { \
+ mp_limb_t *__ptr = (ptr); \
+ if (__builtin_constant_p (count) && count == BITS_PER_MP_LIMB) \
+ { \
+ mp_size_t i; \
+ for (i = (size) - 1; i > 0; --i) \
+ __ptr[i] = __ptr[i - 1]; \
+ __ptr[0] = (limb); \
+ } \
+ else \
+ { \
+ /* We assume count > 0 && count < BITS_PER_MP_LIMB here. */ \
+ unsigned int __count = (count); \
+ (void) __mpn_lshift (__ptr, __ptr, size, __count); \
+ __ptr[0] |= (limb) >> (BITS_PER_MP_LIMB - __count); \
+ } \
+ } \
+ while (0)
+
+
+#define INTERNAL(x) INTERNAL1(x)
+#define INTERNAL1(x) __##x##_internal
+#ifndef ____STRTOF_INTERNAL
+# define ____STRTOF_INTERNAL INTERNAL (__STRTOF)
+#endif
+
+/* This file defines a function to check for correct grouping. */
+#include "grouping.h"
+
+
+/* Return a floating point number with the value of the given string NPTR.
+ Set *ENDPTR to the character after the last used one. If the number is
+ smaller than the smallest representable number, set `errno' to ERANGE and
+ return 0.0. If the number is too big to be represented, set `errno' to
+ ERANGE and return HUGE_VAL with the appropriate sign. */
+FLOAT
+____STRTOF_INTERNAL (const STRING_TYPE *nptr, STRING_TYPE **endptr, int group,
+ __locale_t loc)
+{
+ int negative; /* The sign of the number. */
+ MPN_VAR (num); /* MP representation of the number. */
+ intmax_t exponent; /* Exponent of the number. */
+
+ /* Numbers starting `0X' or `0x' have to be processed with base 16. */
+ int base = 10;
+
+ /* When we have to compute fractional digits we form a fraction with a
+ second multi-precision number (and we sometimes need a second for
+ temporary results). */
+ MPN_VAR (den);
+
+ /* Representation for the return value. */
+ mp_limb_t retval[RETURN_LIMB_SIZE];
+ /* Number of bits currently in result value. */
+ int bits;
+
+ /* Running pointer after the last character processed in the string. */
+ const STRING_TYPE *cp, *tp;
+ /* Start of significant part of the number. */
+ const STRING_TYPE *startp, *start_of_digits;
+ /* Points at the character following the integer and fractional digits. */
+ const STRING_TYPE *expp;
+ /* Total number of digit and number of digits in integer part. */
+ size_t dig_no, int_no, lead_zero;
+ /* Contains the last character read. */
+ CHAR_TYPE c;
+
+/* We should get wint_t from <stddef.h>, but not all GCC versions define it
+ there. So define it ourselves if it remains undefined. */
+#ifndef _WINT_T
+ typedef unsigned int wint_t;
+#endif
+ /* The radix character of the current locale. */
+#ifdef USE_WIDE_CHAR
+ wchar_t decimal;
+#else
+ const char *decimal;
+ size_t decimal_len;
+#endif
+ /* The thousands character of the current locale. */
+#ifdef USE_WIDE_CHAR
+ wchar_t thousands = L'\0';
+#else
+ const char *thousands = NULL;
+#endif
+ /* The numeric grouping specification of the current locale,
+ in the format described in <locale.h>. */
+ const char *grouping;
+ /* Used in several places. */
+ int cnt;
+
+ struct __locale_data *current = loc->__locales[LC_NUMERIC];
+
+ if (__glibc_unlikely (group))
+ {
+ grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
+ if (*grouping <= 0 || *grouping == CHAR_MAX)
+ grouping = NULL;
+ else
+ {
+ /* Figure out the thousands separator character. */
+#ifdef USE_WIDE_CHAR
+ thousands = _NL_CURRENT_WORD (LC_NUMERIC,
+ _NL_NUMERIC_THOUSANDS_SEP_WC);
+ if (thousands == L'\0')
+ grouping = NULL;
+#else
+ thousands = _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
+ if (*thousands == '\0')
+ {
+ thousands = NULL;
+ grouping = NULL;
+ }
+#endif
+ }
+ }
+ else
+ grouping = NULL;
+
+ /* Find the locale's decimal point character. */
+#ifdef USE_WIDE_CHAR
+ decimal = _NL_CURRENT_WORD (LC_NUMERIC, _NL_NUMERIC_DECIMAL_POINT_WC);
+ assert (decimal != L'\0');
+# define decimal_len 1
+#else
+ decimal = _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
+ decimal_len = strlen (decimal);
+ assert (decimal_len > 0);
+#endif
+
+ /* Prepare number representation. */
+ exponent = 0;
+ negative = 0;
+ bits = 0;
+
+ /* Parse string to get maximal legal prefix. We need the number of
+ characters of the integer part, the fractional part and the exponent. */
+ cp = nptr - 1;
+ /* Ignore leading white space. */
+ do
+ c = *++cp;
+ while (ISSPACE (c));
+
+ /* Get sign of the result. */
+ if (c == L_('-'))
+ {
+ negative = 1;
+ c = *++cp;
+ }
+ else if (c == L_('+'))
+ c = *++cp;
+
+ /* Return 0.0 if no legal string is found.
+ No character is used even if a sign was found. */
+#ifdef USE_WIDE_CHAR
+ if (c == (wint_t) decimal
+ && (wint_t) cp[1] >= L'0' && (wint_t) cp[1] <= L'9')
+ {
+ /* We accept it. This funny construct is here only to indent
+ the code correctly. */
+ }
+#else
+ for (cnt = 0; decimal[cnt] != '\0'; ++cnt)
+ if (cp[cnt] != decimal[cnt])
+ break;
+ if (decimal[cnt] == '\0' && cp[cnt] >= '0' && cp[cnt] <= '9')
+ {
+ /* We accept it. This funny construct is here only to indent
+ the code correctly. */
+ }
+#endif
+ else if (c < L_('0') || c > L_('9'))
+ {
+ /* Check for `INF' or `INFINITY'. */
+ CHAR_TYPE lowc = TOLOWER_C (c);
+
+ if (lowc == L_('i') && STRNCASECMP (cp, L_("inf"), 3) == 0)
+ {
+ /* Return +/- infinity. */
+ if (endptr != NULL)
+ *endptr = (STRING_TYPE *)
+ (cp + (STRNCASECMP (cp + 3, L_("inity"), 5) == 0
+ ? 8 : 3));
+
+ return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL;
+ }
+
+ if (lowc == L_('n') && STRNCASECMP (cp, L_("nan"), 3) == 0)
+ {
+ /* Return NaN. */
+ FLOAT retval = NAN;
+
+ cp += 3;
+
+ /* Match `(n-char-sequence-digit)'. */
+ if (*cp == L_('('))
+ {
+ const STRING_TYPE *startp = cp;
+ STRING_TYPE *endp;
+ retval = STRTOF_NAN (cp + 1, &endp, L_(')'));
+ if (*endp == L_(')'))
+ /* Consume the closing parenthesis. */
+ cp = endp + 1;
+ else
+ /* Only match the NAN part. */
+ cp = startp;
+ }
+
+ if (endptr != NULL)
+ *endptr = (STRING_TYPE *) cp;
+
+ return retval;
+ }
+
+ /* It is really a text we do not recognize. */
+ RETURN (0.0, nptr);
+ }
+
+ /* First look whether we are faced with a hexadecimal number. */
+ if (c == L_('0') && TOLOWER (cp[1]) == L_('x'))
+ {
+ /* Okay, it is a hexa-decimal number. Remember this and skip
+ the characters. BTW: hexadecimal numbers must not be
+ grouped. */
+ base = 16;
+ cp += 2;
+ c = *cp;
+ grouping = NULL;
+ }
+
+ /* Record the start of the digits, in case we will check their grouping. */
+ start_of_digits = startp = cp;
+
+ /* Ignore leading zeroes. This helps us to avoid useless computations. */
+#ifdef USE_WIDE_CHAR
+ while (c == L'0' || ((wint_t) thousands != L'\0' && c == (wint_t) thousands))
+ c = *++cp;
+#else
+ if (__glibc_likely (thousands == NULL))
+ while (c == '0')
+ c = *++cp;
+ else
+ {
+ /* We also have the multibyte thousands string. */
+ while (1)
+ {
+ if (c != '0')
+ {
+ for (cnt = 0; thousands[cnt] != '\0'; ++cnt)
+ if (thousands[cnt] != cp[cnt])
+ break;
+ if (thousands[cnt] != '\0')
+ break;
+ cp += cnt - 1;
+ }
+ c = *++cp;
+ }
+ }
+#endif
+
+ /* If no other digit but a '0' is found the result is 0.0.
+ Return current read pointer. */
+ CHAR_TYPE lowc = TOLOWER (c);
+ if (!((c >= L_('0') && c <= L_('9'))
+ || (base == 16 && lowc >= L_('a') && lowc <= L_('f'))
+ || (
+#ifdef USE_WIDE_CHAR
+ c == (wint_t) decimal
+#else
+ ({ for (cnt = 0; decimal[cnt] != '\0'; ++cnt)
+ if (decimal[cnt] != cp[cnt])
+ break;
+ decimal[cnt] == '\0'; })
+#endif
+ /* '0x.' alone is not a valid hexadecimal number.
+ '.' alone is not valid either, but that has been checked
+ already earlier. */
+ && (base != 16
+ || cp != start_of_digits
+ || (cp[decimal_len] >= L_('0') && cp[decimal_len] <= L_('9'))
+ || ({ CHAR_TYPE lo = TOLOWER (cp[decimal_len]);
+ lo >= L_('a') && lo <= L_('f'); })))
+ || (base == 16 && (cp != start_of_digits
+ && lowc == L_('p')))
+ || (base != 16 && lowc == L_('e'))))
+ {
+#ifdef USE_WIDE_CHAR
+ tp = __correctly_grouped_prefixwc (start_of_digits, cp, thousands,
+ grouping);
+#else
+ tp = __correctly_grouped_prefixmb (start_of_digits, cp, thousands,
+ grouping);
+#endif
+ /* If TP is at the start of the digits, there was no correctly
+ grouped prefix of the string; so no number found. */
+ RETURN (negative ? -0.0 : 0.0,
+ tp == start_of_digits ? (base == 16 ? cp - 1 : nptr) : tp);
+ }
+
+ /* Remember first significant digit and read following characters until the
+ decimal point, exponent character or any non-FP number character. */
+ startp = cp;
+ dig_no = 0;
+ while (1)
+ {
+ if ((c >= L_('0') && c <= L_('9'))
+ || (base == 16
+ && ({ CHAR_TYPE lo = TOLOWER (c);
+ lo >= L_('a') && lo <= L_('f'); })))
+ ++dig_no;
+ else
+ {
+#ifdef USE_WIDE_CHAR
+ if (__builtin_expect ((wint_t) thousands == L'\0', 1)
+ || c != (wint_t) thousands)
+ /* Not a digit or separator: end of the integer part. */
+ break;
+#else
+ if (__glibc_likely (thousands == NULL))
+ break;
+ else
+ {
+ for (cnt = 0; thousands[cnt] != '\0'; ++cnt)
+ if (thousands[cnt] != cp[cnt])
+ break;
+ if (thousands[cnt] != '\0')
+ break;
+ cp += cnt - 1;
+ }
+#endif
+ }
+ c = *++cp;
+ }
+
+ if (__builtin_expect (grouping != NULL, 0) && cp > start_of_digits)
+ {
+ /* Check the grouping of the digits. */
+#ifdef USE_WIDE_CHAR
+ tp = __correctly_grouped_prefixwc (start_of_digits, cp, thousands,
+ grouping);
+#else
+ tp = __correctly_grouped_prefixmb (start_of_digits, cp, thousands,
+ grouping);
+#endif
+ if (cp != tp)
+ {
+ /* Less than the entire string was correctly grouped. */
+
+ if (tp == start_of_digits)
+ /* No valid group of numbers at all: no valid number. */
+ RETURN (0.0, nptr);
+
+ if (tp < startp)
+ /* The number is validly grouped, but consists
+ only of zeroes. The whole value is zero. */
+ RETURN (negative ? -0.0 : 0.0, tp);
+
+ /* Recompute DIG_NO so we won't read more digits than
+ are properly grouped. */
+ cp = tp;
+ dig_no = 0;
+ for (tp = startp; tp < cp; ++tp)
+ if (*tp >= L_('0') && *tp <= L_('9'))
+ ++dig_no;
+
+ int_no = dig_no;
+ lead_zero = 0;
+
+ goto number_parsed;
+ }
+ }
+
+ /* We have the number of digits in the integer part. Whether these
+ are all or any is really a fractional digit will be decided
+ later. */
+ int_no = dig_no;
+ lead_zero = int_no == 0 ? (size_t) -1 : 0;
+
+ /* Read the fractional digits. A special case are the 'american
+ style' numbers like `16.' i.e. with decimal point but without
+ trailing digits. */
+ if (
+#ifdef USE_WIDE_CHAR
+ c == (wint_t) decimal
+#else
+ ({ for (cnt = 0; decimal[cnt] != '\0'; ++cnt)
+ if (decimal[cnt] != cp[cnt])
+ break;
+ decimal[cnt] == '\0'; })
+#endif
+ )
+ {
+ cp += decimal_len;
+ c = *cp;
+ while ((c >= L_('0') && c <= L_('9')) ||
+ (base == 16 && ({ CHAR_TYPE lo = TOLOWER (c);
+ lo >= L_('a') && lo <= L_('f'); })))
+ {
+ if (c != L_('0') && lead_zero == (size_t) -1)
+ lead_zero = dig_no - int_no;
+ ++dig_no;
+ c = *++cp;
+ }
+ }
+ assert (dig_no <= (uintmax_t) INTMAX_MAX);
+
+ /* Remember start of exponent (if any). */
+ expp = cp;
+
+ /* Read exponent. */
+ lowc = TOLOWER (c);
+ if ((base == 16 && lowc == L_('p'))
+ || (base != 16 && lowc == L_('e')))
+ {
+ int exp_negative = 0;
+
+ c = *++cp;
+ if (c == L_('-'))
+ {
+ exp_negative = 1;
+ c = *++cp;
+ }
+ else if (c == L_('+'))
+ c = *++cp;
+
+ if (c >= L_('0') && c <= L_('9'))
+ {
+ intmax_t exp_limit;
+
+ /* Get the exponent limit. */
+ if (base == 16)
+ {
+ if (exp_negative)
+ {
+ assert (int_no <= (uintmax_t) (INTMAX_MAX
+ + MIN_EXP - MANT_DIG) / 4);
+ exp_limit = -MIN_EXP + MANT_DIG + 4 * (intmax_t) int_no;
+ }
+ else
+ {
+ if (int_no)
+ {
+ assert (lead_zero == 0
+ && int_no <= (uintmax_t) INTMAX_MAX / 4);
+ exp_limit = MAX_EXP - 4 * (intmax_t) int_no + 3;
+ }
+ else if (lead_zero == (size_t) -1)
+ {
+ /* The number is zero and this limit is
+ arbitrary. */
+ exp_limit = MAX_EXP + 3;
+ }
+ else
+ {
+ assert (lead_zero
+ <= (uintmax_t) (INTMAX_MAX - MAX_EXP - 3) / 4);
+ exp_limit = (MAX_EXP
+ + 4 * (intmax_t) lead_zero
+ + 3);
+ }
+ }
+ }
+ else
+ {
+ if (exp_negative)
+ {
+ assert (int_no
+ <= (uintmax_t) (INTMAX_MAX + MIN_10_EXP - MANT_DIG));
+ exp_limit = -MIN_10_EXP + MANT_DIG + (intmax_t) int_no;
+ }
+ else
+ {
+ if (int_no)
+ {
+ assert (lead_zero == 0
+ && int_no <= (uintmax_t) INTMAX_MAX);
+ exp_limit = MAX_10_EXP - (intmax_t) int_no + 1;
+ }
+ else if (lead_zero == (size_t) -1)
+ {
+ /* The number is zero and this limit is
+ arbitrary. */
+ exp_limit = MAX_10_EXP + 1;
+ }
+ else
+ {
+ assert (lead_zero
+ <= (uintmax_t) (INTMAX_MAX - MAX_10_EXP - 1));
+ exp_limit = MAX_10_EXP + (intmax_t) lead_zero + 1;
+ }
+ }
+ }
+
+ if (exp_limit < 0)
+ exp_limit = 0;
+
+ do
+ {
+ if (__builtin_expect ((exponent > exp_limit / 10
+ || (exponent == exp_limit / 10
+ && c - L_('0') > exp_limit % 10)), 0))
+ /* The exponent is too large/small to represent a valid
+ number. */
+ {
+ FLOAT result;
+
+ /* We have to take care for special situation: a joker
+ might have written "0.0e100000" which is in fact
+ zero. */
+ if (lead_zero == (size_t) -1)
+ result = negative ? -0.0 : 0.0;
+ else
+ {
+ /* Overflow or underflow. */
+ result = (exp_negative
+ ? underflow_value (negative)
+ : overflow_value (negative));
+ }
+
+ /* Accept all following digits as part of the exponent. */
+ do
+ ++cp;
+ while (*cp >= L_('0') && *cp <= L_('9'));
+
+ RETURN (result, cp);
+ /* NOTREACHED */
+ }
+
+ exponent *= 10;
+ exponent += c - L_('0');
+
+ c = *++cp;
+ }
+ while (c >= L_('0') && c <= L_('9'));
+
+ if (exp_negative)
+ exponent = -exponent;
+ }
+ else
+ cp = expp;
+ }
+
+ /* We don't want to have to work with trailing zeroes after the radix. */
+ if (dig_no > int_no)
+ {
+ while (expp[-1] == L_('0'))
+ {
+ --expp;
+ --dig_no;
+ }
+ assert (dig_no >= int_no);
+ }
+
+ if (dig_no == int_no && dig_no > 0 && exponent < 0)
+ do
+ {
+ while (! (base == 16 ? ISXDIGIT (expp[-1]) : ISDIGIT (expp[-1])))
+ --expp;
+
+ if (expp[-1] != L_('0'))
+ break;
+
+ --expp;
+ --dig_no;
+ --int_no;
+ exponent += base == 16 ? 4 : 1;
+ }
+ while (dig_no > 0 && exponent < 0);
+
+ number_parsed:
+
+ /* The whole string is parsed. Store the address of the next character. */
+ if (endptr)
+ *endptr = (STRING_TYPE *) cp;
+
+ if (dig_no == 0)
+ return negative ? -0.0 : 0.0;
+
+ if (lead_zero)
+ {
+ /* Find the decimal point */
+#ifdef USE_WIDE_CHAR
+ while (*startp != decimal)
+ ++startp;
+#else
+ while (1)
+ {
+ if (*startp == decimal[0])
+ {
+ for (cnt = 1; decimal[cnt] != '\0'; ++cnt)
+ if (decimal[cnt] != startp[cnt])
+ break;
+ if (decimal[cnt] == '\0')
+ break;
+ }
+ ++startp;
+ }
+#endif
+ startp += lead_zero + decimal_len;
+ assert (lead_zero <= (base == 16
+ ? (uintmax_t) INTMAX_MAX / 4
+ : (uintmax_t) INTMAX_MAX));
+ assert (lead_zero <= (base == 16
+ ? ((uintmax_t) exponent
+ - (uintmax_t) INTMAX_MIN) / 4
+ : ((uintmax_t) exponent - (uintmax_t) INTMAX_MIN)));
+ exponent -= base == 16 ? 4 * (intmax_t) lead_zero : (intmax_t) lead_zero;
+ dig_no -= lead_zero;
+ }
+
+ /* If the BASE is 16 we can use a simpler algorithm. */
+ if (base == 16)
+ {
+ static const int nbits[16] = { 0, 1, 2, 2, 3, 3, 3, 3,
+ 4, 4, 4, 4, 4, 4, 4, 4 };
+ int idx = (MANT_DIG - 1) / BITS_PER_MP_LIMB;
+ int pos = (MANT_DIG - 1) % BITS_PER_MP_LIMB;
+ mp_limb_t val;
+
+ while (!ISXDIGIT (*startp))
+ ++startp;
+ while (*startp == L_('0'))
+ ++startp;
+ if (ISDIGIT (*startp))
+ val = *startp++ - L_('0');
+ else
+ val = 10 + TOLOWER (*startp++) - L_('a');
+ bits = nbits[val];
+ /* We cannot have a leading zero. */
+ assert (bits != 0);
+
+ if (pos + 1 >= 4 || pos + 1 >= bits)
+ {
+ /* We don't have to care for wrapping. This is the normal
+ case so we add the first clause in the `if' expression as
+ an optimization. It is a compile-time constant and so does
+ not cost anything. */
+ retval[idx] = val << (pos - bits + 1);
+ pos -= bits;
+ }
+ else
+ {
+ retval[idx--] = val >> (bits - pos - 1);
+ retval[idx] = val << (BITS_PER_MP_LIMB - (bits - pos - 1));
+ pos = BITS_PER_MP_LIMB - 1 - (bits - pos - 1);
+ }
+
+ /* Adjust the exponent for the bits we are shifting in. */
+ assert (int_no <= (uintmax_t) (exponent < 0
+ ? (INTMAX_MAX - bits + 1) / 4
+ : (INTMAX_MAX - exponent - bits + 1) / 4));
+ exponent += bits - 1 + ((intmax_t) int_no - 1) * 4;
+
+ while (--dig_no > 0 && idx >= 0)
+ {
+ if (!ISXDIGIT (*startp))
+ startp += decimal_len;
+ if (ISDIGIT (*startp))
+ val = *startp++ - L_('0');
+ else
+ val = 10 + TOLOWER (*startp++) - L_('a');
+
+ if (pos + 1 >= 4)
+ {
+ retval[idx] |= val << (pos - 4 + 1);
+ pos -= 4;
+ }
+ else
+ {
+ retval[idx--] |= val >> (4 - pos - 1);
+ val <<= BITS_PER_MP_LIMB - (4 - pos - 1);
+ if (idx < 0)
+ {
+ int rest_nonzero = 0;
+ while (--dig_no > 0)
+ {
+ if (*startp != L_('0'))
+ {
+ rest_nonzero = 1;
+ break;
+ }
+ startp++;
+ }
+ return round_and_return (retval, exponent, negative, val,
+ BITS_PER_MP_LIMB - 1, rest_nonzero);
+ }
+
+ retval[idx] = val;
+ pos = BITS_PER_MP_LIMB - 1 - (4 - pos - 1);
+ }
+ }
+
+ /* We ran out of digits. */
+ MPN_ZERO (retval, idx);
+
+ return round_and_return (retval, exponent, negative, 0, 0, 0);
+ }
+
+ /* Now we have the number of digits in total and the integer digits as well
+ as the exponent and its sign. We can decide whether the read digits are
+ really integer digits or belong to the fractional part; i.e. we normalize
+ 123e-2 to 1.23. */
+ {
+ intmax_t incr = (exponent < 0
+ ? MAX (-(intmax_t) int_no, exponent)
+ : MIN ((intmax_t) dig_no - (intmax_t) int_no, exponent));
+ int_no += incr;
+ exponent -= incr;
+ }
+
+ if (__glibc_unlikely (exponent > MAX_10_EXP + 1 - (intmax_t) int_no))
+ return overflow_value (negative);
+
+ /* 10^(MIN_10_EXP-1) is not normal. Thus, 10^(MIN_10_EXP-1) /
+ 2^MANT_DIG is below half the least subnormal, so anything with a
+ base-10 exponent less than the base-10 exponent (which is
+ MIN_10_EXP - 1 - ceil(MANT_DIG*log10(2))) of that value
+ underflows. DIG is floor((MANT_DIG-1)log10(2)), so an exponent
+ below MIN_10_EXP - (DIG + 3) underflows. But EXPONENT is
+ actually an exponent multiplied only by a fractional part, not an
+ integer part, so an exponent below MIN_10_EXP - (DIG + 2)
+ underflows. */
+ if (__glibc_unlikely (exponent < MIN_10_EXP - (DIG + 2)))
+ return underflow_value (negative);
+
+ if (int_no > 0)
+ {
+ /* Read the integer part as a multi-precision number to NUM. */
+ startp = str_to_mpn (startp, int_no, num, &numsize, &exponent
+#ifndef USE_WIDE_CHAR
+ , decimal, decimal_len, thousands
+#endif
+ );
+
+ if (exponent > 0)
+ {
+ /* We now multiply the gained number by the given power of ten. */
+ mp_limb_t *psrc = num;
+ mp_limb_t *pdest = den;
+ int expbit = 1;
+ const struct mp_power *ttab = &_fpioconst_pow10[0];
+
+ do
+ {
+ if ((exponent & expbit) != 0)
+ {
+ size_t size = ttab->arraysize - _FPIO_CONST_OFFSET;
+ mp_limb_t cy;
+ exponent ^= expbit;
+
+ /* FIXME: not the whole multiplication has to be
+ done. If we have the needed number of bits we
+ only need the information whether more non-zero
+ bits follow. */
+ if (numsize >= ttab->arraysize - _FPIO_CONST_OFFSET)
+ cy = __mpn_mul (pdest, psrc, numsize,
+ &__tens[ttab->arrayoff
+ + _FPIO_CONST_OFFSET],
+ size);
+ else
+ cy = __mpn_mul (pdest, &__tens[ttab->arrayoff
+ + _FPIO_CONST_OFFSET],
+ size, psrc, numsize);
+ numsize += size;
+ if (cy == 0)
+ --numsize;
+ (void) SWAP (psrc, pdest);
+ }
+ expbit <<= 1;
+ ++ttab;
+ }
+ while (exponent != 0);
+
+ if (psrc == den)
+ memcpy (num, den, numsize * sizeof (mp_limb_t));
+ }
+
+ /* Determine how many bits of the result we already have. */
+ count_leading_zeros (bits, num[numsize - 1]);
+ bits = numsize * BITS_PER_MP_LIMB - bits;
+
+ /* Now we know the exponent of the number in base two.
+ Check it against the maximum possible exponent. */
+ if (__glibc_unlikely (bits > MAX_EXP))
+ return overflow_value (negative);
+
+ /* We have already the first BITS bits of the result. Together with
+ the information whether more non-zero bits follow this is enough
+ to determine the result. */
+ if (bits > MANT_DIG)
+ {
+ int i;
+ const mp_size_t least_idx = (bits - MANT_DIG) / BITS_PER_MP_LIMB;
+ const mp_size_t least_bit = (bits - MANT_DIG) % BITS_PER_MP_LIMB;
+ const mp_size_t round_idx = least_bit == 0 ? least_idx - 1
+ : least_idx;
+ const mp_size_t round_bit = least_bit == 0 ? BITS_PER_MP_LIMB - 1
+ : least_bit - 1;
+
+ if (least_bit == 0)
+ memcpy (retval, &num[least_idx],
+ RETURN_LIMB_SIZE * sizeof (mp_limb_t));
+ else
+ {
+ for (i = least_idx; i < numsize - 1; ++i)
+ retval[i - least_idx] = (num[i] >> least_bit)
+ | (num[i + 1]
+ << (BITS_PER_MP_LIMB - least_bit));
+ if (i - least_idx < RETURN_LIMB_SIZE)
+ retval[RETURN_LIMB_SIZE - 1] = num[i] >> least_bit;
+ }
+
+ /* Check whether any limb beside the ones in RETVAL are non-zero. */
+ for (i = 0; num[i] == 0; ++i)
+ ;
+
+ return round_and_return (retval, bits - 1, negative,
+ num[round_idx], round_bit,
+ int_no < dig_no || i < round_idx);
+ /* NOTREACHED */
+ }
+ else if (dig_no == int_no)
+ {
+ const mp_size_t target_bit = (MANT_DIG - 1) % BITS_PER_MP_LIMB;
+ const mp_size_t is_bit = (bits - 1) % BITS_PER_MP_LIMB;
+
+ if (target_bit == is_bit)
+ {
+ memcpy (&retval[RETURN_LIMB_SIZE - numsize], num,
+ numsize * sizeof (mp_limb_t));
+ /* FIXME: the following loop can be avoided if we assume a
+ maximal MANT_DIG value. */
+ MPN_ZERO (retval, RETURN_LIMB_SIZE - numsize);
+ }
+ else if (target_bit > is_bit)
+ {
+ (void) __mpn_lshift (&retval[RETURN_LIMB_SIZE - numsize],
+ num, numsize, target_bit - is_bit);
+ /* FIXME: the following loop can be avoided if we assume a
+ maximal MANT_DIG value. */
+ MPN_ZERO (retval, RETURN_LIMB_SIZE - numsize);
+ }
+ else
+ {
+ mp_limb_t cy;
+ assert (numsize < RETURN_LIMB_SIZE);
+
+ cy = __mpn_rshift (&retval[RETURN_LIMB_SIZE - numsize],
+ num, numsize, is_bit - target_bit);
+ retval[RETURN_LIMB_SIZE - numsize - 1] = cy;
+ /* FIXME: the following loop can be avoided if we assume a
+ maximal MANT_DIG value. */
+ MPN_ZERO (retval, RETURN_LIMB_SIZE - numsize - 1);
+ }
+
+ return round_and_return (retval, bits - 1, negative, 0, 0, 0);
+ /* NOTREACHED */
+ }
+
+ /* Store the bits we already have. */
+ memcpy (retval, num, numsize * sizeof (mp_limb_t));
+#if RETURN_LIMB_SIZE > 1
+ if (numsize < RETURN_LIMB_SIZE)
+# if RETURN_LIMB_SIZE == 2
+ retval[numsize] = 0;
+# else
+ MPN_ZERO (retval + numsize, RETURN_LIMB_SIZE - numsize);
+# endif
+#endif
+ }
+
+ /* We have to compute at least some of the fractional digits. */
+ {
+ /* We construct a fraction and the result of the division gives us
+ the needed digits. The denominator is 1.0 multiplied by the
+ exponent of the lowest digit; i.e. 0.123 gives 123 / 1000 and
+ 123e-6 gives 123 / 1000000. */
+
+ int expbit;
+ int neg_exp;
+ int more_bits;
+ int need_frac_digits;
+ mp_limb_t cy;
+ mp_limb_t *psrc = den;
+ mp_limb_t *pdest = num;
+ const struct mp_power *ttab = &_fpioconst_pow10[0];
+
+ assert (dig_no > int_no
+ && exponent <= 0
+ && exponent >= MIN_10_EXP - (DIG + 2));
+
+ /* We need to compute MANT_DIG - BITS fractional bits that lie
+ within the mantissa of the result, the following bit for
+ rounding, and to know whether any subsequent bit is 0.
+ Computing a bit with value 2^-n means looking at n digits after
+ the decimal point. */
+ if (bits > 0)
+ {
+ /* The bits required are those immediately after the point. */
+ assert (int_no > 0 && exponent == 0);
+ need_frac_digits = 1 + MANT_DIG - bits;
+ }
+ else
+ {
+ /* The number is in the form .123eEXPONENT. */
+ assert (int_no == 0 && *startp != L_('0'));
+ /* The number is at least 10^(EXPONENT-1), and 10^3 <
+ 2^10. */
+ int neg_exp_2 = ((1 - exponent) * 10) / 3 + 1;
+ /* The number is at least 2^-NEG_EXP_2. We need up to
+ MANT_DIG bits following that bit. */
+ need_frac_digits = neg_exp_2 + MANT_DIG;
+ /* However, we never need bits beyond 1/4 ulp of the smallest
+ representable value. (That 1/4 ulp bit is only needed to
+ determine tinyness on machines where tinyness is determined
+ after rounding.) */
+ if (need_frac_digits > MANT_DIG - MIN_EXP + 2)
+ need_frac_digits = MANT_DIG - MIN_EXP + 2;
+ /* At this point, NEED_FRAC_DIGITS is the total number of
+ digits needed after the point, but some of those may be
+ leading 0s. */
+ need_frac_digits += exponent;
+ /* Any cases underflowing enough that none of the fractional
+ digits are needed should have been caught earlier (such
+ cases are on the order of 10^-n or smaller where 2^-n is
+ the least subnormal). */
+ assert (need_frac_digits > 0);
+ }
+
+ if (need_frac_digits > (intmax_t) dig_no - (intmax_t) int_no)
+ need_frac_digits = (intmax_t) dig_no - (intmax_t) int_no;
+
+ if ((intmax_t) dig_no > (intmax_t) int_no + need_frac_digits)
+ {
+ dig_no = int_no + need_frac_digits;
+ more_bits = 1;
+ }
+ else
+ more_bits = 0;
+
+ neg_exp = (intmax_t) dig_no - (intmax_t) int_no - exponent;
+
+ /* Construct the denominator. */
+ densize = 0;
+ expbit = 1;
+ do
+ {
+ if ((neg_exp & expbit) != 0)
+ {
+ mp_limb_t cy;
+ neg_exp ^= expbit;
+
+ if (densize == 0)
+ {
+ densize = ttab->arraysize - _FPIO_CONST_OFFSET;
+ memcpy (psrc, &__tens[ttab->arrayoff + _FPIO_CONST_OFFSET],
+ densize * sizeof (mp_limb_t));
+ }
+ else
+ {
+ cy = __mpn_mul (pdest, &__tens[ttab->arrayoff
+ + _FPIO_CONST_OFFSET],
+ ttab->arraysize - _FPIO_CONST_OFFSET,
+ psrc, densize);
+ densize += ttab->arraysize - _FPIO_CONST_OFFSET;
+ if (cy == 0)
+ --densize;
+ (void) SWAP (psrc, pdest);
+ }
+ }
+ expbit <<= 1;
+ ++ttab;
+ }
+ while (neg_exp != 0);
+
+ if (psrc == num)
+ memcpy (den, num, densize * sizeof (mp_limb_t));
+
+ /* Read the fractional digits from the string. */
+ (void) str_to_mpn (startp, dig_no - int_no, num, &numsize, &exponent
+#ifndef USE_WIDE_CHAR
+ , decimal, decimal_len, thousands
+#endif
+ );
+
+ /* We now have to shift both numbers so that the highest bit in the
+ denominator is set. In the same process we copy the numerator to
+ a high place in the array so that the division constructs the wanted
+ digits. This is done by a "quasi fix point" number representation.
+
+ num: ddddddddddd . 0000000000000000000000
+ |--- m ---|
+ den: ddddddddddd n >= m
+ |--- n ---|
+ */
+
+ count_leading_zeros (cnt, den[densize - 1]);
+
+ if (cnt > 0)
+ {
+ /* Don't call `mpn_shift' with a count of zero since the specification
+ does not allow this. */
+ (void) __mpn_lshift (den, den, densize, cnt);
+ cy = __mpn_lshift (num, num, numsize, cnt);
+ if (cy != 0)
+ num[numsize++] = cy;
+ }
+
+ /* Now we are ready for the division. But it is not necessary to
+ do a full multi-precision division because we only need a small
+ number of bits for the result. So we do not use __mpn_divmod
+ here but instead do the division here by hand and stop whenever
+ the needed number of bits is reached. The code itself comes
+ from the GNU MP Library by Torbj\"orn Granlund. */
+
+ exponent = bits;
+
+ switch (densize)
+ {
+ case 1:
+ {
+ mp_limb_t d, n, quot;
+ int used = 0;
+
+ n = num[0];
+ d = den[0];
+ assert (numsize == 1 && n < d);
+
+ do
+ {
+ udiv_qrnnd (quot, n, n, 0, d);
+
+#define got_limb \
+ if (bits == 0) \
+ { \
+ int cnt; \
+ if (quot == 0) \
+ cnt = BITS_PER_MP_LIMB; \
+ else \
+ count_leading_zeros (cnt, quot); \
+ exponent -= cnt; \
+ if (BITS_PER_MP_LIMB - cnt > MANT_DIG) \
+ { \
+ used = MANT_DIG + cnt; \
+ retval[0] = quot >> (BITS_PER_MP_LIMB - used); \
+ bits = MANT_DIG + 1; \
+ } \
+ else \
+ { \
+ /* Note that we only clear the second element. */ \
+ /* The conditional is determined at compile time. */ \
+ if (RETURN_LIMB_SIZE > 1) \
+ retval[1] = 0; \
+ retval[0] = quot; \
+ bits = -cnt; \
+ } \
+ } \
+ else if (bits + BITS_PER_MP_LIMB <= MANT_DIG) \
+ __mpn_lshift_1 (retval, RETURN_LIMB_SIZE, BITS_PER_MP_LIMB, \
+ quot); \
+ else \
+ { \
+ used = MANT_DIG - bits; \
+ if (used > 0) \
+ __mpn_lshift_1 (retval, RETURN_LIMB_SIZE, used, quot); \
+ } \
+ bits += BITS_PER_MP_LIMB
+
+ got_limb;
+ }
+ while (bits <= MANT_DIG);
+
+ return round_and_return (retval, exponent - 1, negative,
+ quot, BITS_PER_MP_LIMB - 1 - used,
+ more_bits || n != 0);
+ }
+ case 2:
+ {
+ mp_limb_t d0, d1, n0, n1;
+ mp_limb_t quot = 0;
+ int used = 0;
+
+ d0 = den[0];
+ d1 = den[1];
+
+ if (numsize < densize)
+ {
+ if (num[0] >= d1)
+ {
+ /* The numerator of the number occupies fewer bits than
+ the denominator but the one limb is bigger than the
+ high limb of the numerator. */
+ n1 = 0;
+ n0 = num[0];
+ }
+ else
+ {
+ if (bits <= 0)
+ exponent -= BITS_PER_MP_LIMB;
+ else
+ {
+ if (bits + BITS_PER_MP_LIMB <= MANT_DIG)
+ __mpn_lshift_1 (retval, RETURN_LIMB_SIZE,
+ BITS_PER_MP_LIMB, 0);
+ else
+ {
+ used = MANT_DIG - bits;
+ if (used > 0)
+ __mpn_lshift_1 (retval, RETURN_LIMB_SIZE, used, 0);
+ }
+ bits += BITS_PER_MP_LIMB;
+ }
+ n1 = num[0];
+ n0 = 0;
+ }
+ }
+ else
+ {
+ n1 = num[1];
+ n0 = num[0];
+ }
+
+ while (bits <= MANT_DIG)
+ {
+ mp_limb_t r;
+
+ if (n1 == d1)
+ {
+ /* QUOT should be either 111..111 or 111..110. We need
+ special treatment of this rare case as normal division
+ would give overflow. */
+ quot = ~(mp_limb_t) 0;
+
+ r = n0 + d1;
+ if (r < d1) /* Carry in the addition? */
+ {
+ add_ssaaaa (n1, n0, r - d0, 0, 0, d0);
+ goto have_quot;
+ }
+ n1 = d0 - (d0 != 0);
+ n0 = -d0;
+ }
+ else
+ {
+ udiv_qrnnd (quot, r, n1, n0, d1);
+ umul_ppmm (n1, n0, d0, quot);
+ }
+
+ q_test:
+ if (n1 > r || (n1 == r && n0 > 0))
+ {
+ /* The estimated QUOT was too large. */
+ --quot;
+
+ sub_ddmmss (n1, n0, n1, n0, 0, d0);
+ r += d1;
+ if (r >= d1) /* If not carry, test QUOT again. */
+ goto q_test;
+ }
+ sub_ddmmss (n1, n0, r, 0, n1, n0);
+
+ have_quot:
+ got_limb;
+ }
+
+ return round_and_return (retval, exponent - 1, negative,
+ quot, BITS_PER_MP_LIMB - 1 - used,
+ more_bits || n1 != 0 || n0 != 0);
+ }
+ default:
+ {
+ int i;
+ mp_limb_t cy, dX, d1, n0, n1;
+ mp_limb_t quot = 0;
+ int used = 0;
+
+ dX = den[densize - 1];
+ d1 = den[densize - 2];
+
+ /* The division does not work if the upper limb of the two-limb
+ numerator is greater than the denominator. */
+ if (__mpn_cmp (num, &den[densize - numsize], numsize) > 0)
+ num[numsize++] = 0;
+
+ if (numsize < densize)
+ {
+ mp_size_t empty = densize - numsize;
+ int i;
+
+ if (bits <= 0)
+ exponent -= empty * BITS_PER_MP_LIMB;
+ else
+ {
+ if (bits + empty * BITS_PER_MP_LIMB <= MANT_DIG)
+ {
+ /* We make a difference here because the compiler
+ cannot optimize the `else' case that good and
+ this reflects all currently used FLOAT types
+ and GMP implementations. */
+#if RETURN_LIMB_SIZE <= 2
+ assert (empty == 1);
+ __mpn_lshift_1 (retval, RETURN_LIMB_SIZE,
+ BITS_PER_MP_LIMB, 0);
+#else
+ for (i = RETURN_LIMB_SIZE - 1; i >= empty; --i)
+ retval[i] = retval[i - empty];
+ while (i >= 0)
+ retval[i--] = 0;
+#endif
+ }
+ else
+ {
+ used = MANT_DIG - bits;
+ if (used >= BITS_PER_MP_LIMB)
+ {
+ int i;
+ (void) __mpn_lshift (&retval[used
+ / BITS_PER_MP_LIMB],
+ retval,
+ (RETURN_LIMB_SIZE
+ - used / BITS_PER_MP_LIMB),
+ used % BITS_PER_MP_LIMB);
+ for (i = used / BITS_PER_MP_LIMB - 1; i >= 0; --i)
+ retval[i] = 0;
+ }
+ else if (used > 0)
+ __mpn_lshift_1 (retval, RETURN_LIMB_SIZE, used, 0);
+ }
+ bits += empty * BITS_PER_MP_LIMB;
+ }
+ for (i = numsize; i > 0; --i)
+ num[i + empty] = num[i - 1];
+ MPN_ZERO (num, empty + 1);
+ }
+ else
+ {
+ int i;
+ assert (numsize == densize);
+ for (i = numsize; i > 0; --i)
+ num[i] = num[i - 1];
+ num[0] = 0;
+ }
+
+ den[densize] = 0;
+ n0 = num[densize];
+
+ while (bits <= MANT_DIG)
+ {
+ if (n0 == dX)
+ /* This might over-estimate QUOT, but it's probably not
+ worth the extra code here to find out. */
+ quot = ~(mp_limb_t) 0;
+ else
+ {
+ mp_limb_t r;
+
+ udiv_qrnnd (quot, r, n0, num[densize - 1], dX);
+ umul_ppmm (n1, n0, d1, quot);
+
+ while (n1 > r || (n1 == r && n0 > num[densize - 2]))
+ {
+ --quot;
+ r += dX;
+ if (r < dX) /* I.e. "carry in previous addition?" */
+ break;
+ n1 -= n0 < d1;
+ n0 -= d1;
+ }
+ }
+
+ /* Possible optimization: We already have (q * n0) and (1 * n1)
+ after the calculation of QUOT. Taking advantage of this, we
+ could make this loop make two iterations less. */
+
+ cy = __mpn_submul_1 (num, den, densize + 1, quot);
+
+ if (num[densize] != cy)
+ {
+ cy = __mpn_add_n (num, num, den, densize);
+ assert (cy != 0);
+ --quot;
+ }
+ n0 = num[densize] = num[densize - 1];
+ for (i = densize - 1; i > 0; --i)
+ num[i] = num[i - 1];
+ num[0] = 0;
+
+ got_limb;
+ }
+
+ for (i = densize; i >= 0 && num[i] == 0; --i)
+ ;
+ return round_and_return (retval, exponent - 1, negative,
+ quot, BITS_PER_MP_LIMB - 1 - used,
+ more_bits || i >= 0);
+ }
+ }
+ }
+
+ /* NOTREACHED */
+}
+#if defined _LIBC && !defined USE_WIDE_CHAR
+libc_hidden_def (____STRTOF_INTERNAL)
+#endif
+
+/* External user entry point. */
+
+FLOAT
+#ifdef weak_function
+weak_function
+#endif
+__STRTOF (const STRING_TYPE *nptr, STRING_TYPE **endptr, __locale_t loc)
+{
+ return ____STRTOF_INTERNAL (nptr, endptr, 0, loc);
+}
+#if defined _LIBC
+libc_hidden_def (__STRTOF)
+libc_hidden_ver (__STRTOF, STRTOF)
+#endif
+weak_alias (__STRTOF, STRTOF)
+
+#ifdef LONG_DOUBLE_COMPAT
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_1)
+# ifdef USE_WIDE_CHAR
+compat_symbol (libc, __wcstod_l, __wcstold_l, GLIBC_2_1);
+# else
+compat_symbol (libc, __strtod_l, __strtold_l, GLIBC_2_1);
+# endif
+# endif
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_3)
+# ifdef USE_WIDE_CHAR
+compat_symbol (libc, wcstod_l, wcstold_l, GLIBC_2_3);
+# else
+compat_symbol (libc, strtod_l, strtold_l, GLIBC_2_3);
+# endif
+# endif
+#endif
diff --git a/REORG.TODO/stdlib/strtod_nan.c b/REORG.TODO/stdlib/strtod_nan.c
new file mode 100644
index 0000000000..3fbfb46cfc
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan.c
@@ -0,0 +1,24 @@
+/* Convert string for NaN payload to corresponding NaN. Narrow
+ strings, double.
+ Copyright (C) 2015-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <strtod_nan_narrow.h>
+#include <strtod_nan_double.h>
+
+#define STRTOD_NAN __strtod_nan
+#include <strtod_nan_main.c>
diff --git a/REORG.TODO/stdlib/strtod_nan_double.h b/REORG.TODO/stdlib/strtod_nan_double.h
new file mode 100644
index 0000000000..224654d005
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan_double.h
@@ -0,0 +1,30 @@
+/* Convert string for NaN payload to corresponding NaN. For double.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define FLOAT double
+#define SET_MANTISSA(flt, mant) \
+ do \
+ { \
+ union ieee754_double u; \
+ u.d = (flt); \
+ u.ieee_nan.mantissa0 = (mant) >> 32; \
+ u.ieee_nan.mantissa1 = (mant); \
+ if ((u.ieee.mantissa0 | u.ieee.mantissa1) != 0) \
+ (flt) = u.d; \
+ } \
+ while (0)
diff --git a/REORG.TODO/stdlib/strtod_nan_float.h b/REORG.TODO/stdlib/strtod_nan_float.h
new file mode 100644
index 0000000000..99e95cc2e7
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan_float.h
@@ -0,0 +1,29 @@
+/* Convert string for NaN payload to corresponding NaN. For float.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define FLOAT float
+#define SET_MANTISSA(flt, mant) \
+ do \
+ { \
+ union ieee754_float u; \
+ u.f = (flt); \
+ u.ieee_nan.mantissa = (mant); \
+ if (u.ieee.mantissa != 0) \
+ (flt) = u.f; \
+ } \
+ while (0)
diff --git a/REORG.TODO/stdlib/strtod_nan_main.c b/REORG.TODO/stdlib/strtod_nan_main.c
new file mode 100644
index 0000000000..96b788cb1e
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan_main.c
@@ -0,0 +1,63 @@
+/* Convert string for NaN payload to corresponding NaN.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <ieee754.h>
+#include <locale.h>
+#include <math.h>
+#include <stdlib.h>
+#include <wchar.h>
+
+
+/* If STR starts with an optional n-char-sequence as defined by ISO C
+ (a sequence of ASCII letters, digits and underscores), followed by
+ ENDC, return a NaN whose payload is set based on STR. Otherwise,
+ return a default NAN. If ENDPTR is not NULL, set *ENDPTR to point
+ to the character after the initial n-char-sequence. */
+
+internal_function
+FLOAT
+STRTOD_NAN (const STRING_TYPE *str, STRING_TYPE **endptr, STRING_TYPE endc)
+{
+ const STRING_TYPE *cp = str;
+
+ while ((*cp >= L_('0') && *cp <= L_('9'))
+ || (*cp >= L_('A') && *cp <= L_('Z'))
+ || (*cp >= L_('a') && *cp <= L_('z'))
+ || *cp == L_('_'))
+ ++cp;
+
+ FLOAT retval = NAN;
+ if (*cp != endc)
+ goto out;
+
+ /* This is a system-dependent way to specify the bitmask used for
+ the NaN. We expect it to be a number which is put in the
+ mantissa of the number. */
+ STRING_TYPE *endp;
+ unsigned long long int mant;
+
+ mant = STRTOULL (str, &endp, 0);
+ if (endp == cp)
+ SET_MANTISSA (retval, mant);
+
+ out:
+ if (endptr != NULL)
+ *endptr = (STRING_TYPE *) cp;
+ return retval;
+}
+libc_hidden_def (STRTOD_NAN)
diff --git a/REORG.TODO/stdlib/strtod_nan_narrow.h b/REORG.TODO/stdlib/strtod_nan_narrow.h
new file mode 100644
index 0000000000..15733c21ae
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan_narrow.h
@@ -0,0 +1,22 @@
+/* Convert string for NaN payload to corresponding NaN. Narrow strings.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define STRING_TYPE char
+#define L_(Ch) Ch
+#define STRTOULL(S, E, B) ____strtoull_l_internal ((S), (E), (B), 0, \
+ _nl_C_locobj_ptr)
diff --git a/REORG.TODO/stdlib/strtod_nan_wide.h b/REORG.TODO/stdlib/strtod_nan_wide.h
new file mode 100644
index 0000000000..23abb2c745
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan_wide.h
@@ -0,0 +1,22 @@
+/* Convert string for NaN payload to corresponding NaN. Wide strings.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define STRING_TYPE wchar_t
+#define L_(Ch) L##Ch
+#define STRTOULL(S, E, B) ____wcstoull_l_internal ((S), (E), (B), 0, \
+ _nl_C_locobj_ptr)
diff --git a/REORG.TODO/stdlib/strtof.c b/REORG.TODO/stdlib/strtof.c
new file mode 100644
index 0000000000..600512134c
--- /dev/null
+++ b/REORG.TODO/stdlib/strtof.c
@@ -0,0 +1,34 @@
+/* Read decimal floating point numbers.
+ This file is part of the GNU C Library.
+ Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* The actual implementation for all floating point sizes is in strtod.c.
+ These macros tell it to produce the `float' version, `strtof'. */
+
+#define FLOAT float
+#define FLT FLT
+#ifdef USE_WIDE_CHAR
+#define STRTOF wcstof
+#define STRTOF_L __wcstof_l
+#else
+# define STRTOF strtof
+# define STRTOF_L __strtof_l
+#endif
+
+
+#include "strtod.c"
diff --git a/REORG.TODO/stdlib/strtof_l.c b/REORG.TODO/stdlib/strtof_l.c
new file mode 100644
index 0000000000..57e557516a
--- /dev/null
+++ b/REORG.TODO/stdlib/strtof_l.c
@@ -0,0 +1,38 @@
+/* Convert string representing a number to float value, using given locale.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <xlocale.h>
+
+extern float ____strtof_l_internal (const char *, char **, int, __locale_t);
+
+#define FLOAT float
+#define FLT FLT
+#ifdef USE_WIDE_CHAR
+# define STRTOF wcstof_l
+# define __STRTOF __wcstof_l
+# define STRTOF_NAN __wcstof_nan
+#else
+# define STRTOF strtof_l
+# define __STRTOF __strtof_l
+# define STRTOF_NAN __strtof_nan
+#endif
+#define MPN2FLOAT __mpn_construct_float
+#define FLOAT_HUGE_VAL HUGE_VALF
+
+#include "strtod_l.c"
diff --git a/REORG.TODO/stdlib/strtof_nan.c b/REORG.TODO/stdlib/strtof_nan.c
new file mode 100644
index 0000000000..0dd44294cc
--- /dev/null
+++ b/REORG.TODO/stdlib/strtof_nan.c
@@ -0,0 +1,24 @@
+/* Convert string for NaN payload to corresponding NaN. Narrow
+ strings, float.
+ Copyright (C) 2015-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <strtod_nan_narrow.h>
+#include <strtod_nan_float.h>
+
+#define STRTOD_NAN __strtof_nan
+#include <strtod_nan_main.c>
diff --git a/REORG.TODO/stdlib/strtoimax.c b/REORG.TODO/stdlib/strtoimax.c
new file mode 100644
index 0000000000..f1de70f320
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoimax.c
@@ -0,0 +1 @@
+#error "The correct implementation must be chosen based on the `intmax_t' type"
diff --git a/REORG.TODO/stdlib/strtol.c b/REORG.TODO/stdlib/strtol.c
new file mode 100644
index 0000000000..8ac8347e7d
--- /dev/null
+++ b/REORG.TODO/stdlib/strtol.c
@@ -0,0 +1,109 @@
+/* Convert string representation of a number into an integer value.
+ Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <wchar.h>
+#include <locale/localeinfo.h>
+
+#ifndef UNSIGNED
+# define UNSIGNED 0
+# define INT LONG int
+#else
+# define INT unsigned LONG int
+#endif
+
+#if UNSIGNED
+# ifdef USE_WIDE_CHAR
+# ifdef QUAD
+# define strtol wcstoull
+# define __strtol_l __wcstoull_l
+# else
+# define strtol wcstoul
+# define __strtol_l __wcstoul_l
+# endif
+# else
+# ifdef QUAD
+# define strtol strtoull
+# define __strtol_l __strtoull_l
+# else
+# define strtol strtoul
+# define __strtol_l __strtoul_l
+# endif
+# endif
+#else
+# ifdef USE_WIDE_CHAR
+# ifdef QUAD
+# define strtol wcstoll
+# define __strtol_l __wcstoll_l
+# else
+# define strtol wcstol
+# define __strtol_l __wcstol_l
+# endif
+# else
+# ifdef QUAD
+# define strtol strtoll
+# define __strtol_l __strtoll_l
+# endif
+# endif
+#endif
+
+
+/* If QUAD is defined, we are defining `strtoll' or `strtoull',
+ operating on `long long int's. */
+#ifdef QUAD
+# define LONG long long
+#else
+# define LONG long
+#endif
+
+
+#ifdef USE_WIDE_CHAR
+# define STRING_TYPE wchar_t
+#else
+# define STRING_TYPE char
+#endif
+
+
+#define INTERNAL(X) INTERNAL1(X)
+#define INTERNAL1(X) __##X##_internal
+
+#define SYM__(X) SYM__1 (X)
+#define SYM__1(X) __ ## X
+#define __strtol SYM__ (strtol)
+
+
+extern INT INTERNAL (__strtol_l) (const STRING_TYPE *, STRING_TYPE **, int,
+ int, __locale_t);
+
+
+INT
+INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+ int base, int group)
+{
+ return INTERNAL (__strtol_l) (nptr, endptr, base, group, _NL_CURRENT_LOCALE);
+}
+libc_hidden_def (INTERNAL (strtol))
+
+
+INT
+__strtol (const STRING_TYPE *nptr, STRING_TYPE **endptr, int base)
+{
+ return INTERNAL (__strtol_l) (nptr, endptr, base, 0, _NL_CURRENT_LOCALE);
+}
+weak_alias (__strtol, strtol)
+libc_hidden_weak (strtol)
diff --git a/REORG.TODO/stdlib/strtol_l.c b/REORG.TODO/stdlib/strtol_l.c
new file mode 100644
index 0000000000..5a0683b2bb
--- /dev/null
+++ b/REORG.TODO/stdlib/strtol_l.c
@@ -0,0 +1,551 @@
+/* Convert string representing a number to integer value, using given locale.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define USE_NUMBER_GROUPING
+# define HAVE_LIMITS_H
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#ifndef __set_errno
+# define __set_errno(Val) errno = (Val)
+#endif
+
+#ifdef HAVE_LIMITS_H
+# include <limits.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <locale.h>
+#include <xlocale.h>
+#include <stdint.h>
+#include <bits/wordsize.h>
+
+#ifdef USE_NUMBER_GROUPING
+# include "../locale/localeinfo.h"
+#endif
+
+/* Nonzero if we are defining `strtoul' or `strtoull', operating on
+ unsigned integers. */
+#ifndef UNSIGNED
+# define UNSIGNED 0
+# define INT LONG int
+#else
+# define INT unsigned LONG int
+#endif
+
+/* Determine the name. */
+#if UNSIGNED
+# ifdef USE_WIDE_CHAR
+# ifdef QUAD
+# define strtol_l wcstoull_l
+# else
+# define strtol_l wcstoul_l
+# endif
+# else
+# ifdef QUAD
+# define strtol_l strtoull_l
+# else
+# define strtol_l strtoul_l
+# endif
+# endif
+#else
+# ifdef USE_WIDE_CHAR
+# ifdef QUAD
+# define strtol_l wcstoll_l
+# else
+# define strtol_l wcstol_l
+# endif
+# else
+# ifdef QUAD
+# define strtol_l strtoll_l
+# else
+# define strtol_l strtol_l
+# endif
+# endif
+#endif
+
+#define __strtol_l __strtol_l2(strtol_l)
+#define __strtol_l2(name) __strtol_l3(name)
+#define __strtol_l3(name) __##name
+
+
+/* If QUAD is defined, we are defining `strtoll' or `strtoull',
+ operating on `long long int's. */
+#ifdef QUAD
+# define LONG long long
+# define STRTOL_LONG_MIN LONG_LONG_MIN
+# define STRTOL_LONG_MAX LONG_LONG_MAX
+# define STRTOL_ULONG_MAX ULONG_LONG_MAX
+#else
+# define LONG long
+
+# ifndef ULONG_MAX
+# define ULONG_MAX ((unsigned long int) ~(unsigned long int) 0)
+# endif
+# ifndef LONG_MAX
+# define LONG_MAX ((long int) (ULONG_MAX >> 1))
+# endif
+# define STRTOL_LONG_MIN LONG_MIN
+# define STRTOL_LONG_MAX LONG_MAX
+# define STRTOL_ULONG_MAX ULONG_MAX
+#endif
+
+
+/* We use this code for the extended locale handling where the
+ function gets as an additional argument the locale which has to be
+ used. To access the values we have to redefine the _NL_CURRENT and
+ _NL_CURRENT_WORD macros. */
+#undef _NL_CURRENT
+#define _NL_CURRENT(category, item) \
+ (current->values[_NL_ITEM_INDEX (item)].string)
+#undef _NL_CURRENT_WORD
+#define _NL_CURRENT_WORD(category, item) \
+ ((uint32_t) current->values[_NL_ITEM_INDEX (item)].word)
+
+#if defined _LIBC || defined HAVE_WCHAR_H
+# include <wchar.h>
+#endif
+
+#ifdef USE_WIDE_CHAR
+# include <wctype.h>
+# define L_(Ch) L##Ch
+# define UCHAR_TYPE wint_t
+# define STRING_TYPE wchar_t
+# define ISSPACE(Ch) __iswspace_l ((Ch), loc)
+# define ISALPHA(Ch) __iswalpha_l ((Ch), _nl_C_locobj_ptr)
+# define TOUPPER(Ch) __towupper_l ((Ch), _nl_C_locobj_ptr)
+#else
+# if defined _LIBC \
+ || defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
+# define IN_CTYPE_DOMAIN(c) 1
+# else
+# define IN_CTYPE_DOMAIN(c) isascii(c)
+# endif
+# define L_(Ch) Ch
+# define UCHAR_TYPE unsigned char
+# define STRING_TYPE char
+# define ISSPACE(Ch) __isspace_l ((Ch), loc)
+# define ISALPHA(Ch) __isalpha_l ((Ch), _nl_C_locobj_ptr)
+# define TOUPPER(Ch) __toupper_l ((Ch), _nl_C_locobj_ptr)
+#endif
+
+#define INTERNAL(X) INTERNAL1(X)
+#define INTERNAL1(X) __##X##_internal
+#define WEAKNAME(X) WEAKNAME1(X)
+
+#ifdef USE_NUMBER_GROUPING
+/* This file defines a function to check for correct grouping. */
+# include "grouping.h"
+#endif
+
+
+/* Define tables of maximum values and remainders in order to detect
+ overflow. Do this at compile-time in order to avoid the runtime
+ overhead of the division. */
+extern const unsigned long __strtol_ul_max_tab[] attribute_hidden;
+extern const unsigned char __strtol_ul_rem_tab[] attribute_hidden;
+#if defined(QUAD) && __WORDSIZE == 32
+extern const unsigned long long __strtol_ull_max_tab[] attribute_hidden;
+extern const unsigned char __strtol_ull_rem_tab[] attribute_hidden;
+#endif
+
+#define DEF(TYPE, NAME) \
+ const TYPE NAME[] attribute_hidden = \
+ { \
+ F(2), F(3), F(4), F(5), F(6), F(7), F(8), F(9), F(10), \
+ F(11), F(12), F(13), F(14), F(15), F(16), F(17), F(18), F(19), F(20), \
+ F(21), F(22), F(23), F(24), F(25), F(26), F(27), F(28), F(29), F(30), \
+ F(31), F(32), F(33), F(34), F(35), F(36) \
+ }
+
+#if !UNSIGNED && !defined (USE_WIDE_CHAR) && !defined (QUAD)
+# define F(X) ULONG_MAX / X
+ DEF (unsigned long, __strtol_ul_max_tab);
+# undef F
+# define F(X) ULONG_MAX % X
+ DEF (unsigned char, __strtol_ul_rem_tab);
+# undef F
+#endif
+#if !UNSIGNED && !defined (USE_WIDE_CHAR) && defined (QUAD) \
+ && __WORDSIZE == 32
+# define F(X) ULONG_LONG_MAX / X
+ DEF (unsigned long long, __strtol_ull_max_tab);
+# undef F
+# define F(X) ULONG_LONG_MAX % X
+ DEF (unsigned char, __strtol_ull_rem_tab);
+# undef F
+#endif
+#undef DEF
+
+/* Define some more readable aliases for these arrays which correspond
+ to how they'll be used in the function below. */
+#define jmax_tab __strtol_ul_max_tab
+#if defined(QUAD) && __WORDSIZE == 32
+# define cutoff_tab __strtol_ull_max_tab
+# define cutlim_tab __strtol_ull_rem_tab
+#else
+# define cutoff_tab __strtol_ul_max_tab
+# define cutlim_tab __strtol_ul_rem_tab
+#endif
+
+
+/* Convert NPTR to an `unsigned long int' or `long int' in base BASE.
+ If BASE is 0 the base is determined by the presence of a leading
+ zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal.
+ If BASE is < 2 or > 36, it is reset to 10.
+ If ENDPTR is not NULL, a pointer to the character after the last
+ one converted is stored in *ENDPTR. */
+
+INT
+INTERNAL (__strtol_l) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+ int base, int group, __locale_t loc)
+{
+ int negative;
+ unsigned LONG int cutoff;
+ unsigned int cutlim;
+ unsigned LONG int i;
+ const STRING_TYPE *s;
+ UCHAR_TYPE c;
+ const STRING_TYPE *save, *end;
+ int overflow;
+#ifndef USE_WIDE_CHAR
+ size_t cnt;
+#endif
+
+#ifdef USE_NUMBER_GROUPING
+ struct __locale_data *current = loc->__locales[LC_NUMERIC];
+ /* The thousands character of the current locale. */
+# ifdef USE_WIDE_CHAR
+ wchar_t thousands = L'\0';
+# else
+ const char *thousands = NULL;
+ size_t thousands_len = 0;
+# endif
+ /* The numeric grouping specification of the current locale,
+ in the format described in <locale.h>. */
+ const char *grouping;
+
+ if (__glibc_unlikely (group))
+ {
+ grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
+ if (*grouping <= 0 || *grouping == CHAR_MAX)
+ grouping = NULL;
+ else
+ {
+ /* Figure out the thousands separator character. */
+# ifdef USE_WIDE_CHAR
+# ifdef _LIBC
+ thousands = _NL_CURRENT_WORD (LC_NUMERIC,
+ _NL_NUMERIC_THOUSANDS_SEP_WC);
+# endif
+ if (thousands == L'\0')
+ grouping = NULL;
+# else
+# ifdef _LIBC
+ thousands = _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
+# endif
+ if (*thousands == '\0')
+ {
+ thousands = NULL;
+ grouping = NULL;
+ }
+# endif
+ }
+ }
+ else
+ grouping = NULL;
+#endif
+
+ if (base < 0 || base == 1 || base > 36)
+ {
+ __set_errno (EINVAL);
+ return 0;
+ }
+
+ save = s = nptr;
+
+ /* Skip white space. */
+ while (ISSPACE (*s))
+ ++s;
+ if (__glibc_unlikely (*s == L_('\0')))
+ goto noconv;
+
+ /* Check for a sign. */
+ negative = 0;
+ if (*s == L_('-'))
+ {
+ negative = 1;
+ ++s;
+ }
+ else if (*s == L_('+'))
+ ++s;
+
+ /* Recognize number prefix and if BASE is zero, figure it out ourselves. */
+ if (*s == L_('0'))
+ {
+ if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X'))
+ {
+ s += 2;
+ base = 16;
+ }
+ else if (base == 0)
+ base = 8;
+ }
+ else if (base == 0)
+ base = 10;
+
+ /* Save the pointer so we can check later if anything happened. */
+ save = s;
+
+#ifdef USE_NUMBER_GROUPING
+ if (base != 10)
+ grouping = NULL;
+
+ if (__glibc_unlikely (grouping != NULL))
+ {
+# ifndef USE_WIDE_CHAR
+ thousands_len = strlen (thousands);
+# endif
+
+ /* Find the end of the digit string and check its grouping. */
+ end = s;
+ if (
+# ifdef USE_WIDE_CHAR
+ *s != thousands
+# else
+ ({ for (cnt = 0; cnt < thousands_len; ++cnt)
+ if (thousands[cnt] != end[cnt])
+ break;
+ cnt < thousands_len; })
+# endif
+ )
+ {
+ for (c = *end; c != L_('\0'); c = *++end)
+ if (((STRING_TYPE) c < L_('0') || (STRING_TYPE) c > L_('9'))
+# ifdef USE_WIDE_CHAR
+ && (wchar_t) c != thousands
+# else
+ && ({ for (cnt = 0; cnt < thousands_len; ++cnt)
+ if (thousands[cnt] != end[cnt])
+ break;
+ cnt < thousands_len; })
+# endif
+ && (!ISALPHA (c)
+ || (int) (TOUPPER (c) - L_('A') + 10) >= base))
+ break;
+
+# ifdef USE_WIDE_CHAR
+ end = __correctly_grouped_prefixwc (s, end, thousands, grouping);
+# else
+ end = __correctly_grouped_prefixmb (s, end, thousands, grouping);
+# endif
+ }
+ }
+ else
+#endif
+ end = NULL;
+
+ /* Avoid runtime division; lookup cutoff and limit. */
+ cutoff = cutoff_tab[base - 2];
+ cutlim = cutlim_tab[base - 2];
+
+ overflow = 0;
+ i = 0;
+ c = *s;
+ if (sizeof (long int) != sizeof (LONG int))
+ {
+ unsigned long int j = 0;
+ unsigned long int jmax = jmax_tab[base - 2];
+
+ for (;c != L_('\0'); c = *++s)
+ {
+ if (s == end)
+ break;
+ if (c >= L_('0') && c <= L_('9'))
+ c -= L_('0');
+#ifdef USE_NUMBER_GROUPING
+# ifdef USE_WIDE_CHAR
+ else if (grouping && (wchar_t) c == thousands)
+ continue;
+# else
+ else if (thousands_len)
+ {
+ for (cnt = 0; cnt < thousands_len; ++cnt)
+ if (thousands[cnt] != s[cnt])
+ break;
+ if (cnt == thousands_len)
+ {
+ s += thousands_len - 1;
+ continue;
+ }
+ if (ISALPHA (c))
+ c = TOUPPER (c) - L_('A') + 10;
+ else
+ break;
+ }
+# endif
+#endif
+ else if (ISALPHA (c))
+ c = TOUPPER (c) - L_('A') + 10;
+ else
+ break;
+ if ((int) c >= base)
+ break;
+ /* Note that we never can have an overflow. */
+ else if (j >= jmax)
+ {
+ /* We have an overflow. Now use the long representation. */
+ i = (unsigned LONG int) j;
+ goto use_long;
+ }
+ else
+ j = j * (unsigned long int) base + c;
+ }
+
+ i = (unsigned LONG int) j;
+ }
+ else
+ for (;c != L_('\0'); c = *++s)
+ {
+ if (s == end)
+ break;
+ if (c >= L_('0') && c <= L_('9'))
+ c -= L_('0');
+#ifdef USE_NUMBER_GROUPING
+# ifdef USE_WIDE_CHAR
+ else if (grouping && (wchar_t) c == thousands)
+ continue;
+# else
+ else if (thousands_len)
+ {
+ for (cnt = 0; cnt < thousands_len; ++cnt)
+ if (thousands[cnt] != s[cnt])
+ break;
+ if (cnt == thousands_len)
+ {
+ s += thousands_len - 1;
+ continue;
+ }
+ if (ISALPHA (c))
+ c = TOUPPER (c) - L_('A') + 10;
+ else
+ break;
+ }
+# endif
+#endif
+ else if (ISALPHA (c))
+ c = TOUPPER (c) - L_('A') + 10;
+ else
+ break;
+ if ((int) c >= base)
+ break;
+ /* Check for overflow. */
+ if (i > cutoff || (i == cutoff && c > cutlim))
+ overflow = 1;
+ else
+ {
+ use_long:
+ i *= (unsigned LONG int) base;
+ i += c;
+ }
+ }
+
+ /* Check if anything actually happened. */
+ if (s == save)
+ goto noconv;
+
+ /* Store in ENDPTR the address of one character
+ past the last character we converted. */
+ if (endptr != NULL)
+ *endptr = (STRING_TYPE *) s;
+
+#if !UNSIGNED
+ /* Check for a value that is within the range of
+ `unsigned LONG int', but outside the range of `LONG int'. */
+ if (overflow == 0
+ && i > (negative
+ ? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1
+ : (unsigned LONG int) STRTOL_LONG_MAX))
+ overflow = 1;
+#endif
+
+ if (__glibc_unlikely (overflow))
+ {
+ __set_errno (ERANGE);
+#if UNSIGNED
+ return STRTOL_ULONG_MAX;
+#else
+ return negative ? STRTOL_LONG_MIN : STRTOL_LONG_MAX;
+#endif
+ }
+
+ /* Return the result of the appropriate sign. */
+ return negative ? -i : i;
+
+noconv:
+ /* We must handle a special case here: the base is 0 or 16 and the
+ first two characters are '0' and 'x', but the rest are no
+ hexadecimal digits. This is no error case. We return 0 and
+ ENDPTR points to the `x`. */
+ if (endptr != NULL)
+ {
+ if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X')
+ && save[-2] == L_('0'))
+ *endptr = (STRING_TYPE *) &save[-1];
+ else
+ /* There was no number to convert. */
+ *endptr = (STRING_TYPE *) nptr;
+ }
+
+ return 0L;
+}
+#if defined _LIBC && !defined USE_WIDE_CHAR
+libc_hidden_def (INTERNAL (__strtol_l))
+#endif
+
+/* External user entry point. */
+
+#if _LIBC - 0 == 0
+
+/* Prototype. */
+extern INT __strtol_l (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+ int base);
+#endif
+
+
+INT
+#ifdef weak_function
+weak_function
+#endif
+__strtol_l (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+ int base, __locale_t loc)
+{
+ return INTERNAL (__strtol_l) (nptr, endptr, base, 0, loc);
+}
+libc_hidden_def (__strtol_l)
+weak_alias (__strtol_l, strtol_l)
diff --git a/REORG.TODO/stdlib/strtold.c b/REORG.TODO/stdlib/strtold.c
new file mode 100644
index 0000000000..e4ace02dd0
--- /dev/null
+++ b/REORG.TODO/stdlib/strtold.c
@@ -0,0 +1,64 @@
+/* Read decimal floating point numbers.
+ This file is part of the GNU C Library.
+ Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* The actual implementation for all floating point sizes is in strtod.c.
+ These macros tell it to produce the `float' version, `strtof'. */
+
+#include <bits/long-double.h>
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+# include <wchar.h>
+# define NEW(x) NEW1(x)
+# define NEW1(x) __new_##x
+long double ____new_strtold_internal (const char *, char **, int);
+long double __new_strtold (const char *, char **);
+long double ____new_wcstold_internal (const wchar_t *, wchar_t **, int);
+long double __new_wcstold (const wchar_t *, wchar_t **);
+libc_hidden_proto (____new_strtold_internal)
+libc_hidden_proto (____new_wcstold_internal)
+libc_hidden_proto (__new_strtold)
+libc_hidden_proto (__new_wcstold)
+#else
+# define NEW(x) x
+#endif
+
+#define FLOAT long double
+#define FLT LDBL
+#ifdef USE_WIDE_CHAR
+# define STRTOF NEW (wcstold)
+# define STRTOF_L __wcstold_l
+#else
+# define STRTOF NEW (strtold)
+# define STRTOF_L __strtold_l
+#endif
+
+#include "strtod.c"
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+# include <math_ldbl_opt.h>
+# ifdef USE_WIDE_CHAR
+long_double_symbol (libc, __new_wcstold, wcstold);
+long_double_symbol (libc, ____new_wcstold_internal, __wcstold_internal);
+libc_hidden_ver (____new_wcstold_internal, __wcstold_internal)
+# else
+long_double_symbol (libc, __new_strtold, strtold);
+long_double_symbol (libc, ____new_strtold_internal, __strtold_internal);
+libc_hidden_ver (____new_strtold_internal, __strtold_internal)
+# endif
+#endif
diff --git a/REORG.TODO/stdlib/strtold_l.c b/REORG.TODO/stdlib/strtold_l.c
new file mode 100644
index 0000000000..bef2a4d3d7
--- /dev/null
+++ b/REORG.TODO/stdlib/strtold_l.c
@@ -0,0 +1,65 @@
+/* Copyright (C) 1999-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <math.h>
+#include <stdlib.h>
+#include <xlocale.h>
+
+#if defined _LIBC || defined HAVE_WCHAR_H
+# include <wchar.h>
+#endif
+
+#ifdef USE_WIDE_CHAR
+# define STRING_TYPE wchar_t
+# define STRTOLD wcstold_l
+# define __STRTOLD __wcstold_l
+# define __STRTOD __wcstod_l
+#else
+# define STRING_TYPE char
+# define STRTOLD strtold_l
+# define __STRTOLD __strtold_l
+# define __STRTOD __strtod_l
+#endif
+
+#define INTERNAL(x) INTERNAL1(x)
+#define INTERNAL1(x) __##x##_internal
+
+extern double INTERNAL (__STRTOD) (const STRING_TYPE *, STRING_TYPE **,
+ int, __locale_t);
+
+/* There is no `long double' type, use the `double' implementations. */
+long double
+INTERNAL (__STRTOLD) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+ int group, __locale_t loc)
+{
+ return INTERNAL (__STRTOD) (nptr, endptr, group, loc);
+}
+#ifndef USE_WIDE_CHAR
+libc_hidden_def (INTERNAL (__STRTOLD))
+#endif
+
+long double
+weak_function
+__STRTOLD (const STRING_TYPE *nptr, STRING_TYPE **endptr, __locale_t loc)
+{
+ return INTERNAL (__STRTOD) (nptr, endptr, 0, loc);
+}
+#if defined _LIBC
+libc_hidden_def (__STRTOLD)
+libc_hidden_ver (__STRTOLD, STRTOLD)
+#endif
+weak_alias (__STRTOLD, STRTOLD)
diff --git a/REORG.TODO/stdlib/strtold_nan.c b/REORG.TODO/stdlib/strtold_nan.c
new file mode 100644
index 0000000000..165a3e6c0f
--- /dev/null
+++ b/REORG.TODO/stdlib/strtold_nan.c
@@ -0,0 +1,30 @@
+/* Convert string for NaN payload to corresponding NaN. Narrow
+ strings, long double.
+ Copyright (C) 2015-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <math.h>
+
+/* This function is unused if long double and double have the same
+ representation. */
+#ifndef __NO_LONG_DOUBLE_MATH
+# include <strtod_nan_narrow.h>
+# include <strtod_nan_ldouble.h>
+
+# define STRTOD_NAN __strtold_nan
+# include <strtod_nan_main.c>
+#endif
diff --git a/REORG.TODO/stdlib/strtoll.c b/REORG.TODO/stdlib/strtoll.c
new file mode 100644
index 0000000000..cb2207cc55
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoll.c
@@ -0,0 +1,33 @@
+/* Function to parse a `long long int' from text.
+ Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define QUAD 1
+
+#include <strtol.c>
+
+#ifdef _LIBC
+# ifdef SHARED
+# include <shlib-compat.h>
+
+# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+compat_symbol (libc, __strtoll_internal, __strtoq_internal, GLIBC_2_0);
+# endif
+
+# endif
+weak_alias (strtoll, strtoq)
+#endif
diff --git a/REORG.TODO/stdlib/strtoll_l.c b/REORG.TODO/stdlib/strtoll_l.c
new file mode 100644
index 0000000000..2a712eb80e
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoll_l.c
@@ -0,0 +1,27 @@
+/* Convert string representing a number to integer value, using given locale.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define QUAD 1
+
+#include <xlocale.h>
+
+extern long long int ____strtoll_l_internal (const char *, char **, int, int,
+ __locale_t);
+
+#include <strtol_l.c>
diff --git a/REORG.TODO/stdlib/strtoul.c b/REORG.TODO/stdlib/strtoul.c
new file mode 100644
index 0000000000..f72a8d50b1
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoul.c
@@ -0,0 +1,20 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define UNSIGNED 1
+
+#include "strtol.c"
diff --git a/REORG.TODO/stdlib/strtoul_l.c b/REORG.TODO/stdlib/strtoul_l.c
new file mode 100644
index 0000000000..6d23ee2964
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoul_l.c
@@ -0,0 +1,27 @@
+/* Convert string representing a number to integer value, using given locale.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define UNSIGNED 1
+
+#include <xlocale.h>
+
+extern unsigned long int ____strtoul_l_internal (const char *, char **, int,
+ int, __locale_t);
+
+#include "strtol_l.c"
diff --git a/REORG.TODO/stdlib/strtoull.c b/REORG.TODO/stdlib/strtoull.c
new file mode 100644
index 0000000000..e3dbd849e0
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoull.c
@@ -0,0 +1,33 @@
+/* Function to parse an `unsigned long long int' from text.
+ Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define QUAD 1
+
+#include <strtoul.c>
+
+#ifdef _LIBC
+# ifdef SHARED
+# include <shlib-compat.h>
+
+# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+compat_symbol (libc, __strtoull_internal, __strtouq_internal, GLIBC_2_0);
+# endif
+
+# endif
+weak_alias (strtoull, strtouq)
+#endif
diff --git a/REORG.TODO/stdlib/strtoull_l.c b/REORG.TODO/stdlib/strtoull_l.c
new file mode 100644
index 0000000000..53ecb916df
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoull_l.c
@@ -0,0 +1,28 @@
+/* Convert string representing a number to integer value, using given locale.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define QUAD 1
+#define UNSIGNED 1
+
+#include <xlocale.h>
+
+extern unsigned long long int ____strtoull_l_internal (const char *, char **,
+ int, int, __locale_t);
+
+#include <strtol_l.c>
diff --git a/REORG.TODO/stdlib/strtoumax.c b/REORG.TODO/stdlib/strtoumax.c
new file mode 100644
index 0000000000..508cb19f8c
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoumax.c
@@ -0,0 +1 @@
+#error "The correct implementation must be chosen based on the `uintmax_t' type"
diff --git a/REORG.TODO/stdlib/sub_n.c b/REORG.TODO/stdlib/sub_n.c
new file mode 100644
index 0000000000..7f429def89
--- /dev/null
+++ b/REORG.TODO/stdlib/sub_n.c
@@ -0,0 +1,53 @@
+/* mpn_sub_n -- Subtract two limb vectors of equal, non-zero length.
+
+Copyright (C) 1992-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+mp_limb_t
+mpn_sub_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr, mp_size_t size)
+{
+ register mp_limb_t x, y, cy;
+ register mp_size_t j;
+
+ /* The loop counter and index J goes from -SIZE to -1. This way
+ the loop becomes faster. */
+ j = -size;
+
+ /* Offset the base pointers to compensate for the negative indices. */
+ s1_ptr -= j;
+ s2_ptr -= j;
+ res_ptr -= j;
+
+ cy = 0;
+ do
+ {
+ y = s2_ptr[j];
+ x = s1_ptr[j];
+ y += cy; /* add previous carry to subtrahend */
+ cy = (y < cy); /* get out carry from that addition */
+ y = x - y; /* main subtract */
+ cy = (y > x) + cy; /* get out carry from the subtract, combine */
+ res_ptr[j] = y;
+ }
+ while (++j != 0);
+
+ return cy;
+}
diff --git a/REORG.TODO/stdlib/submul_1.c b/REORG.TODO/stdlib/submul_1.c
new file mode 100644
index 0000000000..9bc27df442
--- /dev/null
+++ b/REORG.TODO/stdlib/submul_1.c
@@ -0,0 +1,61 @@
+/* mpn_submul_1 -- multiply the S1_SIZE long limb vector pointed to by S1_PTR
+ by S2_LIMB, subtract the S1_SIZE least significant limbs of the product
+ from the limb vector pointed to by RES_PTR. Return the most significant
+ limb of the product, adjusted for carry-out from the subtraction.
+
+Copyright (C) 1992-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+mp_limb_t
+mpn_submul_1 (register mp_ptr res_ptr, register mp_srcptr s1_ptr,
+ mp_size_t s1_size, register mp_limb_t s2_limb)
+{
+ register mp_limb_t cy_limb;
+ register mp_size_t j;
+ register mp_limb_t prod_high, prod_low;
+ register mp_limb_t x;
+
+ /* The loop counter and index J goes from -SIZE to -1. This way
+ the loop becomes faster. */
+ j = -s1_size;
+
+ /* Offset the base pointers to compensate for the negative indices. */
+ res_ptr -= j;
+ s1_ptr -= j;
+
+ cy_limb = 0;
+ do
+ {
+ umul_ppmm (prod_high, prod_low, s1_ptr[j], s2_limb);
+
+ prod_low += cy_limb;
+ cy_limb = (prod_low < cy_limb) + prod_high;
+
+ x = res_ptr[j];
+ prod_low = x - prod_low;
+ cy_limb += (prod_low > x);
+ res_ptr[j] = prod_low;
+ }
+ while (++j != 0);
+
+ return cy_limb;
+}
diff --git a/REORG.TODO/stdlib/swapcontext.c b/REORG.TODO/stdlib/swapcontext.c
new file mode 100644
index 0000000000..decf2b9a9e
--- /dev/null
+++ b/REORG.TODO/stdlib/swapcontext.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1998-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <ucontext.h>
+
+int
+swapcontext (ucontext_t *oucp, const ucontext_t *ucp)
+{
+ __set_errno (ENOSYS);
+ return -1;
+}
+
+
+stub_warning (swapcontext)
diff --git a/REORG.TODO/stdlib/sys/errno.h b/REORG.TODO/stdlib/sys/errno.h
new file mode 100644
index 0000000000..339f4fc10c
--- /dev/null
+++ b/REORG.TODO/stdlib/sys/errno.h
@@ -0,0 +1 @@
+#include <errno.h>
diff --git a/REORG.TODO/stdlib/sys/random.h b/REORG.TODO/stdlib/sys/random.h
new file mode 100644
index 0000000000..90a0aca15c
--- /dev/null
+++ b/REORG.TODO/stdlib/sys/random.h
@@ -0,0 +1,42 @@
+/* Interfaces for obtaining random bytes.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _SYS_RANDOM_H
+#define _SYS_RANDOM_H 1
+
+#include <features.h>
+#include <sys/types.h>
+
+/* Flags for use with getrandom. */
+#define GRND_NONBLOCK 0x01
+#define GRND_RANDOM 0x02
+
+__BEGIN_DECLS
+
+/* Write LENGTH bytes of randomness starting at BUFFER. Return the
+ number of bytes written, or -1 on error. */
+ssize_t getrandom (void *__buffer, size_t __length,
+ unsigned int __flags) __wur;
+
+/* Write LENGTH bytes of randomness starting at BUFFER. Return 0 on
+ success or -1 on error. */
+int getentropy (void *__buffer, size_t __length) __wur;
+
+__END_DECLS
+
+#endif /* _SYS_RANDOM_H */
diff --git a/REORG.TODO/stdlib/system.c b/REORG.TODO/stdlib/system.c
new file mode 100644
index 0000000000..026ab77768
--- /dev/null
+++ b/REORG.TODO/stdlib/system.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <stdlib.h>
+
+
+/* Execute LINE as a shell command. */
+int
+__libc_system (const char *line)
+{
+ if (line == NULL)
+ return 0; /* This indicates no command processor. */
+
+ __set_errno (ENOSYS);
+ return -1;
+}
+weak_alias (__libc_system, system)
+
+
+stub_warning (system)
diff --git a/REORG.TODO/stdlib/tens_in_limb.c b/REORG.TODO/stdlib/tens_in_limb.c
new file mode 100644
index 0000000000..b6e35aa35a
--- /dev/null
+++ b/REORG.TODO/stdlib/tens_in_limb.c
@@ -0,0 +1,31 @@
+#include <gmp.h>
+
+
+/* Definitions according to limb size used. */
+#if BITS_PER_MP_LIMB == 32
+# define MAX_DIG_PER_LIMB 9
+# define MAX_FAC_PER_LIMB 1000000000UL
+#elif BITS_PER_MP_LIMB == 64
+# define MAX_DIG_PER_LIMB 19
+# define MAX_FAC_PER_LIMB 10000000000000000000ULL
+#else
+# error "mp_limb_t size " BITS_PER_MP_LIMB "not accounted for"
+#endif
+
+
+/* Local data structure. */
+const mp_limb_t _tens_in_limb[MAX_DIG_PER_LIMB + 1] =
+{ 0, 10, 100,
+ 1000, 10000, 100000L,
+ 1000000L, 10000000L, 100000000L,
+ 1000000000L
+#if BITS_PER_MP_LIMB > 32
+ , 10000000000ULL, 100000000000ULL,
+ 1000000000000ULL, 10000000000000ULL, 100000000000000ULL,
+ 1000000000000000ULL, 10000000000000000ULL, 100000000000000000ULL,
+ 1000000000000000000ULL, 10000000000000000000ULL
+#endif
+#if BITS_PER_MP_LIMB > 64
+ #error "Need to expand tens_in_limb table to" MAX_DIG_PER_LIMB
+#endif
+};
diff --git a/REORG.TODO/stdlib/test-a64l.c b/REORG.TODO/stdlib/test-a64l.c
new file mode 100644
index 0000000000..b3e1b2e846
--- /dev/null
+++ b/REORG.TODO/stdlib/test-a64l.c
@@ -0,0 +1,80 @@
+/* Test program for the l64a and a64l functions.
+ Copyright (C) 2001-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Andreas Schwab <schwab@suse.de>.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Prototype for our test function. */
+extern int do_test (int argc, char *argv[]);
+#include <test-skeleton.c>
+
+struct a64l_test
+{
+ const char *base64;
+ long int value;
+};
+
+static const struct a64l_test tests[] =
+ {
+ { "./", 64 },
+ { "", 0 },
+ { "/", 1 },
+ { "FT", 2001 },
+ { "zzzzz1", 0xffffffff },
+ { "zzzz1", 0x3ffffff },
+ { "zzz1", 0xfffff },
+ { "zz1", 0x3fff },
+ { "z1", 0xff },
+ { "1", 0x3 },
+ { NULL, 0 }
+ };
+
+int
+do_test (int argc, char ** argv)
+{
+ const struct a64l_test *at;
+ long int l;
+ const char *s;
+ int status = 0;
+
+ for (at = tests; at->base64 != NULL; ++at)
+ {
+ printf ("a64l (\"%s\")", at->base64);
+ l = a64l (at->base64);
+ if (l == at->value)
+ puts ("\tOK");
+ else
+ {
+ printf ("\tBAD\n returns %ld, expected %ld\n", l, at->value);
+ status = 1;
+ }
+ printf ("l64a (%ld)", at->value);
+ s = l64a (at->value);
+ if (strcmp (s, at->base64) == 0)
+ puts ("\tOK");
+ else
+ {
+ printf ("\tBAD\n returns \"%s\", expected \"%s\"\n", s, at->base64);
+ status = 1;
+ }
+ }
+
+ return status ? EXIT_FAILURE : EXIT_SUCCESS;
+}
diff --git a/REORG.TODO/stdlib/test-canon.c b/REORG.TODO/stdlib/test-canon.c
new file mode 100644
index 0000000000..d664f73c45
--- /dev/null
+++ b/REORG.TODO/stdlib/test-canon.c
@@ -0,0 +1,235 @@
+/* Test program for returning the canonical absolute name of a given file.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David Mosberger <davidm@azstarnet.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.
+
+ 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
+ <http://www.gnu.org/licenses/>. */
+
+/* This file must be run from within a directory called "stdlib". */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/param.h>
+#include <sys/stat.h>
+
+/* Prototype for our test function. */
+extern int do_test (int argc, char *argv[]);
+#include <test-skeleton.c>
+
+#ifndef PATH_MAX
+# define PATH_MAX 4096
+#endif
+static char cwd[PATH_MAX];
+static size_t cwd_len;
+
+struct {
+ const char * name;
+ const char * value;
+} symlinks[] = {
+ {"SYMLINK_LOOP", "SYMLINK_LOOP"},
+ {"SYMLINK_1", "."},
+ {"SYMLINK_2", "//////./../../etc"},
+ {"SYMLINK_3", "SYMLINK_1"},
+ {"SYMLINK_4", "SYMLINK_2"},
+ {"SYMLINK_5", "doesNotExist"},
+};
+
+struct {
+ const char * in, * out, * resolved;
+ int error;
+} tests[] = {
+ /* 0 */
+ {"/", "/"},
+ {"/////////////////////////////////", "/"},
+ {"/.././.././.././..///", "/"},
+ {"/etc", "/etc"},
+ {"/etc/../etc", "/etc"},
+ /* 5 */
+ {"/doesNotExist/../etc", 0, "/doesNotExist", ENOENT},
+ {"./././././././././.", "."},
+ {"/etc/.//doesNotExist", 0, "/etc/doesNotExist", ENOENT},
+ {"./doesExist", "./doesExist"},
+ {"./doesExist/", "./doesExist"},
+ /* 10 */
+ {"./doesExist/../doesExist", "./doesExist"},
+ {"foobar", 0, "./foobar", ENOENT},
+ {".", "."},
+ {"./foobar", 0, "./foobar", ENOENT},
+ {"SYMLINK_LOOP", 0, "./SYMLINK_LOOP", ELOOP},
+ /* 15 */
+ {"./SYMLINK_LOOP", 0, "./SYMLINK_LOOP", ELOOP},
+ {"SYMLINK_1", "."},
+ {"SYMLINK_1/foobar", 0, "./foobar", ENOENT},
+ {"SYMLINK_2", "/etc"},
+ {"SYMLINK_3", "."},
+ /* 20 */
+ {"SYMLINK_4", "/etc"},
+ {"../stdlib/SYMLINK_1", "."},
+ {"../stdlib/SYMLINK_2", "/etc"},
+ {"../stdlib/SYMLINK_3", "."},
+ {"../stdlib/SYMLINK_4", "/etc"},
+ /* 25 */
+ {"./SYMLINK_5", 0, "./doesNotExist", ENOENT},
+ {"SYMLINK_5", 0, "./doesNotExist", ENOENT},
+ {"SYMLINK_5/foobar", 0, "./doesNotExist", ENOENT},
+ {"doesExist/../../stdlib/doesExist", "./doesExist"},
+ {"doesExist/.././../stdlib/.", "."},
+ /* 30 */
+ {"./doesExist/someFile/", 0, "./doesExist/someFile", ENOTDIR},
+ {"./doesExist/someFile/..", 0, "./doesExist/someFile", ENOTDIR},
+};
+
+
+static int
+check_path (const char * result, const char * expected)
+{
+ int good;
+
+ if (!result)
+ return (expected == NULL);
+
+ if (!expected)
+ return 0;
+
+ if (expected[0] == '.' && (expected[1] == '/' || expected[1] == '\0'))
+ good = (strncmp (result, cwd, cwd_len) == 0
+ && strcmp (result + cwd_len, expected + 1) == 0);
+ else
+ good = (strcmp (expected, result) == 0);
+
+ return good;
+}
+
+
+int
+do_test (int argc, char ** argv)
+{
+ char * result;
+ int i, errors = 0;
+ char buf[PATH_MAX];
+
+ getcwd (cwd, sizeof(buf));
+ cwd_len = strlen (cwd);
+
+ errno = 0;
+ if (realpath (NULL, buf) != NULL || errno != EINVAL)
+ {
+ printf ("%s: expected return value NULL and errno set to EINVAL"
+ " for realpath(NULL,...)\n", argv[0]);
+ ++errors;
+ }
+
+#if 0
+ /* This is now allowed. The test is invalid. */
+ errno = 0;
+ if (realpath ("/", NULL) != NULL || errno != EINVAL)
+ {
+ printf ("%s: expected return value NULL and errno set to EINVAL"
+ " for realpath(...,NULL)\n", argv[0]);
+ ++errors;
+ }
+#endif
+
+ errno = 0;
+ if (realpath ("", buf) != NULL || errno != ENOENT)
+ {
+ printf ("%s: expected return value NULL and set errno to ENOENT"
+ " for realpath(\"\",...)\n", argv[0]);
+ ++errors;
+ }
+
+ for (i = 0; i < (int) (sizeof (symlinks) / sizeof (symlinks[0])); ++i)
+ symlink (symlinks[i].value, symlinks[i].name);
+
+ int has_dir = mkdir ("doesExist", 0777) == 0;
+
+ int fd = has_dir ? creat ("doesExist/someFile", 0777) : -1;
+
+ for (i = 0; i < (int) (sizeof (tests) / sizeof (tests[0])); ++i)
+ {
+ buf[0] = '\0';
+ result = realpath (tests[i].in, buf);
+
+ if (!check_path (result, tests[i].out))
+ {
+ printf ("%s: flunked test %d (expected `%s', got `%s')\n",
+ argv[0], i, tests[i].out ? tests[i].out : "NULL",
+ result ? result : "NULL");
+ ++errors;
+ continue;
+ }
+
+ if (!check_path (buf, tests[i].out ? tests[i].out : tests[i].resolved))
+ {
+ printf ("%s: flunked test %d (expected resolved `%s', got `%s')\n",
+ argv[0], i, tests[i].out ? tests[i].out : tests[i].resolved,
+ buf);
+ ++errors;
+ continue;
+ }
+
+ if (!tests[i].out && errno != tests[i].error)
+ {
+ printf ("%s: flunked test %d (expected errno %d, got %d)\n",
+ argv[0], i, tests[i].error, errno);
+ ++errors;
+ continue;
+ }
+
+ char *result2 = realpath (tests[i].in, NULL);
+ if ((result2 == NULL && result != NULL)
+ || (result2 != NULL && strcmp (result, result2) != 0))
+ {
+ printf ("\
+%s: realpath(..., NULL) produced different result than realpath(..., buf): '%s' vs '%s'\n",
+ argv[0], result2, result);
+ ++errors;
+ }
+ free (result2);
+ }
+
+ getcwd (buf, sizeof(buf));
+ if (strcmp (buf, cwd))
+ {
+ printf ("%s: current working directory changed from %s to %s\n",
+ argv[0], cwd, buf);
+ ++errors;
+ }
+
+ if (fd >= 0)
+ {
+ close (fd);
+ unlink ("doesExist/someFile");
+ }
+
+ if (has_dir)
+ rmdir ("doesExist");
+
+ for (i = 0; i < (int) (sizeof (symlinks) / sizeof (symlinks[0])); ++i)
+ unlink (symlinks[i].name);
+
+ if (errors != 0)
+ {
+ printf ("%d errors.\n", errors);
+ return EXIT_FAILURE;
+ }
+
+ puts ("No errors.");
+ return EXIT_SUCCESS;
+}
diff --git a/REORG.TODO/stdlib/test-canon2.c b/REORG.TODO/stdlib/test-canon2.c
new file mode 100644
index 0000000000..bb676cd865
--- /dev/null
+++ b/REORG.TODO/stdlib/test-canon2.c
@@ -0,0 +1,74 @@
+/* Test for realpath/canonicalize function.
+ Copyright (C) 1998-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <string.h>
+
+
+/* Prototype for our test function. */
+extern void do_prepare (int argc, char *argv[]);
+extern int do_test (int argc, char *argv[]);
+
+/* We have a preparation function. */
+#define PREPARE do_prepare
+
+#include <test-skeleton.c>
+
+/* Name of the temporary files we create. */
+char *name1;
+char *name2;
+
+/* Preparation. */
+void
+do_prepare (int argc, char *argv[])
+{
+ size_t test_dir_len;
+
+ test_dir_len = strlen (test_dir);
+
+ /* Generate the circular symlinks. */
+ name1 = malloc (test_dir_len + sizeof ("/canonXXXXXX"));
+ mempcpy (mempcpy (name1, test_dir, test_dir_len),
+ "/canonXXXXXX", sizeof ("/canonXXXXXX"));
+ name2 = strdup (name1);
+
+ add_temp_file (mktemp (name1));
+ add_temp_file (mktemp (name2));
+}
+
+
+/* Run the test. */
+int
+do_test (int argc, char *argv[])
+{
+ char *canon;
+
+ printf ("create symlinks from %s to %s and vice versa\n", name1, name2);
+ if (symlink (name1, name2) == -1
+ || symlink (name2, name1) == -1)
+ /* We cannot test this. */
+ return 0;
+
+ /* Call the function. This is equivalent the using `realpath' but the
+ function allocates the room for the result. */
+ errno = 0;
+ canon = canonicalize_file_name (name1);
+
+ return canon != NULL || errno != ELOOP;
+}
diff --git a/REORG.TODO/stdlib/testdiv.c b/REORG.TODO/stdlib/testdiv.c
new file mode 100644
index 0000000000..4ba3843c69
--- /dev/null
+++ b/REORG.TODO/stdlib/testdiv.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 1992-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+int
+main (void)
+{
+ int err = 0;
+ int i, j;
+ while (scanf ("%d %d\n", &i, &j) == 2)
+ {
+ div_t d = div (i, j);
+ printf ("%d / %d = %d + %d/%d", i, j, d.quot, d.rem, j);
+ if (i == d.quot * j + d.rem)
+ fputs (" OK\n", stdout);
+ else
+ {
+ fputs (" FAILED\n", stdout);
+ err = 1;
+ }
+ }
+ return err;
+}
diff --git a/REORG.TODO/stdlib/testdiv.input b/REORG.TODO/stdlib/testdiv.input
new file mode 100644
index 0000000000..415b7b4f54
--- /dev/null
+++ b/REORG.TODO/stdlib/testdiv.input
@@ -0,0 +1,2 @@
+10 3
+-10 3
diff --git a/REORG.TODO/stdlib/testmb.c b/REORG.TODO/stdlib/testmb.c
new file mode 100644
index 0000000000..45dae7db61
--- /dev/null
+++ b/REORG.TODO/stdlib/testmb.c
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main (int argc, char *argv[])
+{
+ wchar_t w[10];
+ char c[10];
+ int i;
+ int lose = 0;
+
+ i = mbstowcs (w, "bar", 4);
+ if (!(i == 3 && w[1] == 'a'))
+ {
+ puts ("mbstowcs FAILED!");
+ lose = 1;
+ }
+
+ mbstowcs (w, "blah", 5);
+ i = wcstombs (c, w, 10);
+ if (i != 4)
+ {
+ puts ("wcstombs FAILED!");
+ lose = 1;
+ }
+
+ if (mblen ("foobar", 7) != 1)
+ {
+ puts ("mblen 1 FAILED!");
+ lose = 1;
+ }
+
+ if (mblen ("", 1) != 0)
+ {
+ puts ("mblen 2 FAILED!");
+ lose = 1;
+ }
+
+ {
+ int r;
+ char c = 'x';
+ wchar_t wc;
+ char mbc[MB_CUR_MAX];
+
+ if ((r = mbtowc (&wc, &c, MB_CUR_MAX)) <= 0)
+ {
+ printf ("conversion to wide failed, result: %d\n", r);
+ lose = 1;
+ }
+ else
+ {
+ printf ("wide value: 0x%04lx\n", (unsigned long) wc);
+ mbc[0] = '\0';
+ if ((r = wctomb (mbc, wc)) <= 0)
+ {
+ printf ("conversion to multibyte failed, result: %d\n", r);
+ lose = 1;
+ }
+ }
+
+ }
+
+ puts (lose ? "Test FAILED!" : "Test succeeded.");
+ return lose;
+}
diff --git a/REORG.TODO/stdlib/testmb2.c b/REORG.TODO/stdlib/testmb2.c
new file mode 100644
index 0000000000..3a3e354629
--- /dev/null
+++ b/REORG.TODO/stdlib/testmb2.c
@@ -0,0 +1,31 @@
+/* Test case by Miloslav Trmac <mitr@volny.cz>. */
+#include <locale.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+int
+main (void)
+{
+ wchar_t wc;
+
+ if (setlocale (LC_CTYPE, "de_DE.UTF-8") == NULL)
+ {
+ puts ("setlocale failed");
+ return 1;
+ }
+
+ if (mbtowc (&wc, "\xc3\xa1", MB_CUR_MAX) != 2 || wc != 0xE1)
+ {
+ puts ("1st mbtowc failed");
+ return 1;
+ }
+
+ if (mbtowc (&wc, "\xc3\xa1", SIZE_MAX) != 2 || wc != 0xE1)
+ {
+ puts ("2nd mbtowc failed");
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/REORG.TODO/stdlib/testrand.c b/REORG.TODO/stdlib/testrand.c
new file mode 100644
index 0000000000..fdfc4e5694
--- /dev/null
+++ b/REORG.TODO/stdlib/testrand.c
@@ -0,0 +1,52 @@
+/* Copyright (C) 1992-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+int
+main (void)
+{
+ int i1, i2;
+ int j1, j2;
+
+ /* The C standard says that "If rand is called before any calls to
+ srand have been made, the same sequence shall be generated as
+ when srand is first called with a seed value of 1." */
+ i1 = rand();
+ i2 = rand();
+ srand (1);
+ j1 = rand();
+ j2 = rand();
+ if (i1 < 0 || i2 < 0 || j1 < 0 || j2 < 0) {
+ puts ("Test FAILED!");
+ }
+ if (j1 == i1 && j2 == i2)
+ {
+ puts ("Test succeeded.");
+ return 0;
+ }
+ else
+ {
+ if (j1 != i1)
+ printf ("%d != %d\n", j1, i1);
+ if (j2 != i2)
+ printf ("%d != %d\n", j2, i2);
+ puts ("Test FAILED!");
+ return 1;
+ }
+}
diff --git a/REORG.TODO/stdlib/testsort.c b/REORG.TODO/stdlib/testsort.c
new file mode 100644
index 0000000000..aa4332a568
--- /dev/null
+++ b/REORG.TODO/stdlib/testsort.c
@@ -0,0 +1,36 @@
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+static int
+compare (const void *a, const void *b)
+{
+ return strcmp (*(char **) a, *(char **) b);
+}
+
+int
+main (void)
+{
+ char bufs[500][20];
+ char *lines[500];
+ size_t lens[500];
+ size_t i, j;
+
+ srandom (1);
+
+ for (i = 0; i < 500; ++i)
+ {
+ lens[i] = random() % 19;
+ lines[i] = bufs[i];
+ for (j = 0; j < lens[i]; ++j)
+ lines[i][j] = random() % 26 + 'a';
+ lines[i][j] = '\0';
+ }
+
+ qsort (lines, 500, sizeof (char *), compare);
+
+ for (i = 0; i < 500 && lines[i] != NULL; ++i)
+ puts (lines[i]);
+
+ return 0;
+}
diff --git a/REORG.TODO/stdlib/tst-atof1.c b/REORG.TODO/stdlib/tst-atof1.c
new file mode 100644
index 0000000000..879d866558
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-atof1.c
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static int
+do_test (void)
+{
+ char buf[100];
+ snprintf (buf, sizeof (buf), "%g", atof ("0x10p-1"));
+ if (strcmp (buf, "8") != 0)
+ {
+ printf ("got \"%s\", expected \"8\"\n", buf);
+ return 1;
+ }
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-atof2.c b/REORG.TODO/stdlib/tst-atof2.c
new file mode 100644
index 0000000000..74dac87b0d
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-atof2.c
@@ -0,0 +1,55 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+static const struct
+{
+ const char *str;
+ const char *expected;
+} tests[] =
+ {
+ { "1e308", "1e+308" },
+ { "100000000e300", "1e+308" },
+ { "0x1p1023", "8.98847e+307" },
+ { "0x1000p1011", "8.98847e+307" },
+ { "0x1p1020", "1.12356e+307" },
+ { "0x0.00001p1040", "1.12356e+307" },
+ { "1e-307", "1e-307" },
+ { "0.000001e-301", "1e-307" },
+ { "0.0000001e-300", "1e-307" },
+ { "0.00000001e-299", "1e-307" },
+ { "1000000e-313", "1e-307" },
+ { "10000000e-314", "1e-307" },
+ { "100000000e-315", "1e-307" },
+ { "0x1p-1021", "4.45015e-308" },
+ { "0x1000p-1033", "4.45015e-308" },
+ { "0x10000p-1037", "4.45015e-308" },
+ { "0x0.001p-1009", "4.45015e-308" },
+ { "0x0.0001p-1005", "4.45015e-308" },
+ };
+#define NTESTS (sizeof (tests) / sizeof (tests[0]))
+
+
+static int
+do_test (void)
+{
+ int status = 0;
+
+ for (int i = 0; i < NTESTS; ++i)
+ {
+ char buf[100];
+ snprintf (buf, sizeof (buf), "%g", atof (tests[i].str));
+ if (strcmp (buf, tests[i].expected) != 0)
+ {
+ printf ("%d: got \"%s\", expected \"%s\"\n",
+ i, buf, tests[i].expected);
+ status = 1;
+ }
+ }
+
+ return status;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-bsearch.c b/REORG.TODO/stdlib/tst-bsearch.c
new file mode 100644
index 0000000000..766b11bc61
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-bsearch.c
@@ -0,0 +1,153 @@
+/* Copyright (C) 2000-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@redhat.com>, 2000.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <tst-stack-align.h>
+
+struct item
+{
+ int val;
+ const char *str;
+} arr[] =
+{
+ { 0, "zero" },
+ { 1, "one" },
+ { 2, "two" },
+ { 3, "three" },
+ { 4, "four" },
+ { 5, "five" },
+ { 6, "six" },
+ { 7, "seven" },
+ { 8, "eight" },
+ { 9, "nine" },
+ { 10, "ten" }
+};
+#define narr (sizeof (arr) / sizeof (arr[0]))
+
+static int align_check;
+
+static int
+comp (const void *p1, const void *p2)
+{
+ struct item *e1 = (struct item *) p1;
+ struct item *e2 = (struct item *) p2;
+
+ if (!align_check)
+ align_check = TEST_STACK_ALIGN () ? -1 : 1;
+
+ return e1->val - e2->val;
+}
+
+
+static int
+do_test (void)
+{
+ size_t cnt;
+ int result = 0;
+ struct item key;
+ struct item *res;
+
+ for (cnt = 0; cnt < narr; ++cnt)
+ {
+
+ key.val = arr[cnt].val;
+
+ res = (struct item *) bsearch (&key, arr, narr, sizeof (arr[0]), comp);
+ if (res == NULL)
+ {
+ printf ("entry %zd not found\n", cnt);
+ result = 1;
+ }
+ else if (res != &arr[cnt])
+ {
+ puts ("wrong entry returned");
+ result = 1;
+ }
+ }
+
+ /* And some special tests that shouldn't find any entry. */
+ key.val = -1;
+ res = (struct item *) bsearch (&key, arr, narr, sizeof (arr[0]), comp);
+ if (res != NULL)
+ {
+ puts ("found an entry that's not there");
+ result = 1;
+ }
+
+ key.val = 11;
+ res = (struct item *) bsearch (&key, arr, narr, sizeof (arr[0]), comp);
+ if (res != NULL)
+ {
+ puts ("found an entry that's not there");
+ result = 1;
+ }
+
+ key.val = 11;
+ res = (struct item *) bsearch (&key, arr, 0, sizeof (arr[0]), comp);
+ if (res != NULL)
+ {
+ puts ("found an entry that's not there");
+ result = 1;
+ }
+
+ /* Now the array contains only one element - no entry should be found. */
+ for (cnt = 0; cnt < narr; ++cnt)
+ {
+ key.val = arr[cnt].val;
+
+ res = (struct item *) bsearch (&key, &arr[5], 1, sizeof (arr[0]), comp);
+ if (cnt == 5)
+ {
+ if (res == NULL)
+ {
+ printf ("entry %zd not found\n", cnt);
+ result = 1;
+ }
+ else if (res != &arr[cnt])
+ {
+ puts ("wrong entry returned");
+ result = 1;
+ }
+ }
+ else if (res != NULL)
+ {
+ puts ("found an entry that's not there");
+ result = 1;
+ }
+ }
+
+ if (align_check == 0)
+ {
+ puts ("alignment not checked");
+ result = 1;
+ }
+ else if (align_check == -1)
+ {
+ puts ("stack not sufficiently aligned");
+ result = 1;
+ }
+
+ if (result == 0)
+ puts ("all OK");
+
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-empty-env.c b/REORG.TODO/stdlib/tst-empty-env.c
new file mode 100644
index 0000000000..0b0651d530
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-empty-env.c
@@ -0,0 +1,58 @@
+/* Test that passing a NULL value does not hang environment traversal in
+ tunables.
+ Copyright (C) 2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* The test is useful only when the source is configured with
+ --enable-hardcoded-path-in-tests since otherwise the execve just picks up
+ the system dynamic linker. */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+
+static int
+do_test (int argc, char **argv)
+{
+ if (argc == 2)
+ return 0;
+
+ char envname[] = "FOOBAR";
+ char *filename = program_invocation_name;
+ char *newargv[] = {filename, filename, NULL};
+ char *newenviron[] = {envname, NULL};
+
+ /* This was reported in Fedora:
+
+ https://bugzilla.redhat.com/show_bug.cgi?id=1414589
+
+ If one of the environment variables has no value, then the environment
+ traversal must skip and also advance to the next environment entry. The
+ bug in question would cause this test to hang in an infinite loop. */
+ int ret = execve (filename, newargv, newenviron);
+
+ if (ret != 0)
+ printf ("execve failed: %m");
+
+ /* We will reach here only if we fail execve. */
+ return 1;
+}
+
+#define TIMEOUT 3
+#define TEST_FUNCTION_ARGV do_test
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-environ.c b/REORG.TODO/stdlib/tst-environ.c
new file mode 100644
index 0000000000..b2301641f5
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-environ.c
@@ -0,0 +1,229 @@
+/* Copyright (C) 1999-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libc-diag.h>
+
+#define VAR "FOOBAR"
+
+char putenv_val[100] = VAR "=some longer value";
+
+static int
+do_test (void)
+{
+ int result = 0;
+ const char *valp;
+
+ /* First test: remove entry FOOBAR, whether it exists or not. */
+ unsetenv (VAR);
+
+ /* Now getting the value should fail. */
+ if (getenv (VAR) != NULL)
+ {
+ printf ("There should be no `%s' value\n", VAR);
+ result = 1;
+ }
+
+ /* Now add a value, with the replace flag cleared. */
+ if (setenv (VAR, "one", 0) != 0)
+ {
+ printf ("setenv #1 failed: %m\n");
+ result = 1;
+ }
+
+ /* Getting this value should now be possible. */
+ valp = getenv (VAR);
+ if (valp == NULL || strcmp (valp, "one") != 0)
+ {
+ puts ("getenv #2 failed");
+ result = 1;
+ }
+
+ /* Try to replace without the replace flag set. This should fail. */
+ if (setenv (VAR, "two", 0) != 0)
+ {
+ printf ("setenv #2 failed: %m\n");
+ result = 1;
+ }
+
+ /* The value shouldn't have changed. */
+ valp = getenv (VAR);
+ if (valp == NULL || strcmp (valp, "one") != 0)
+ {
+ puts ("getenv #3 failed");
+ result = 1;
+ }
+
+ /* Now replace the value using putenv. */
+ if (putenv (putenv_val) != 0)
+ {
+ printf ("putenv #1 failed: %m\n");
+ result = 1;
+ }
+
+ /* The value should have changed now. */
+ valp = getenv (VAR);
+ if (valp == NULL || strcmp (valp, "some longer value") != 0)
+ {
+ printf ("getenv #4 failed (is \"%s\")\n", valp);
+ result = 1;
+ }
+
+ /* Now one tricky check: changing the variable passed in putenv should
+ change the environment. */
+ strcpy (&putenv_val[sizeof VAR], "a short one");
+
+ /* The value should have changed again. */
+ valp = getenv (VAR);
+ if (valp == NULL || strcmp (valp, "a short one") != 0)
+ {
+ puts ("getenv #5 failed");
+ result = 1;
+ }
+
+ /* It should even be possible to rename the variable. */
+ strcpy (putenv_val, "XYZZY=some other value");
+
+ /* Now a lookup using the old name should fail. */
+ if (getenv (VAR) != NULL)
+ {
+ puts ("getenv #6 failed");
+ result = 1;
+ }
+
+ /* But using the new name it should work. */
+ valp = getenv ("XYZZY");
+ if (valp == NULL || strcmp (valp, "some other value") != 0)
+ {
+ puts ("getenv #7 failed");
+ result = 1;
+ }
+
+ /* Create a new variable with the old name. */
+ if (setenv (VAR, "a new value", 0) != 0)
+ {
+ printf ("setenv #3 failed: %m\n");
+ result = 1;
+ }
+
+ /* At this point a getenv call must return the new value. */
+ valp = getenv (VAR);
+ if (valp == NULL || strcmp (valp, "a new value") != 0)
+ {
+ puts ("getenv #8 failed");
+ result = 1;
+ }
+
+ /* Black magic: rename the variable we added using putenv back. */
+ strcpy (putenv_val, VAR "=old name new value");
+
+ /* This is interesting. We have two variables with the same name.
+ Getting a value should return one of them. */
+ valp = getenv (VAR);
+ if (valp == NULL
+ || (strcmp (valp, "a new value") != 0
+ && strcmp (valp, "old name new value") != 0))
+ {
+ puts ("getenv #9 failed");
+ result = 1;
+ }
+
+ /* More fun ahead: we are now removing the variable. This should remove
+ both values. The cast is ok: this call should never put the string
+ in the environment and it should never modify it. */
+ putenv ((char *) VAR);
+
+ /* Getting the value should now fail. */
+ if (getenv (VAR) != NULL)
+ {
+ printf ("getenv #10 failed (\"%s\" found)\n", getenv (VAR));
+ result = 1;
+ }
+
+ /* Now a test with an environment variable that's one character long.
+ This is to test a special case in the getenv implementation. */
+ strcpy (putenv_val, "X=one character test");
+ if (putenv (putenv_val) != 0)
+ {
+ printf ("putenv #2 failed: %m\n");
+ result = 1;
+ }
+
+ valp = getenv ("X");
+ if (valp == NULL || strcmp (valp, "one character test") != 0)
+ {
+ puts ("getenv #11 failed");
+ result = 1;
+ }
+
+ /* Both setenv and unsetenv should return -1/EINVAL for NULL or "" name
+ or if name contains '=' character. */
+ errno = 0;
+ if (setenv (NULL, "val", 1) >= 0 || errno != EINVAL)
+ {
+ puts ("setenv #4 failed");
+ result = 1;
+ }
+
+ errno = 0;
+ if (setenv ("", "val", 0) >= 0 || errno != EINVAL)
+ {
+ puts ("setenv #5 failed");
+ result = 1;
+ }
+
+ errno = 0;
+ if (setenv ("var=val", "val", 1) >= 0 || errno != EINVAL)
+ {
+ puts ("setenv #6 failed");
+ result = 1;
+ }
+
+ /* This deliberately tests supplying a null pointer to a function whose
+ argument is marked __attribute__ ((nonnull)). */
+ DIAG_PUSH_NEEDS_COMMENT;
+ DIAG_IGNORE_NEEDS_COMMENT(5, "-Wnonnull");
+ errno = 0;
+ if (unsetenv (NULL) >= 0 || errno != EINVAL)
+ {
+ puts ("unsetenv #1 failed");
+ result = 1;
+ }
+ DIAG_POP_NEEDS_COMMENT;
+
+ errno = 0;
+ if (unsetenv ("") >= 0 || errno != EINVAL)
+ {
+ puts ("unsetenv #2 failed");
+ result = 1;
+ }
+
+ errno = 0;
+ if (unsetenv ("x=y") >= 0 || errno != EINVAL)
+ {
+ puts ("unsetenv #3 failed");
+ result = 1;
+ }
+
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-fmtmsg.c b/REORG.TODO/stdlib/tst-fmtmsg.c
new file mode 100644
index 0000000000..b7948c5f1e
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-fmtmsg.c
@@ -0,0 +1,85 @@
+#include <fmtmsg.h>
+#include <mcheck.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define MM_TEST 10
+
+static int
+do_test (void)
+{
+ int result = 0;
+
+ mtrace ();
+
+ char TEST[] = "ABCD";
+ if (addseverity (MM_TEST, TEST) != MM_OK)
+ {
+ puts ("addseverity failed");
+ result = 1;
+ }
+ strcpy (TEST, "TEST");
+
+ if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_HALT, "halt",
+ "should print message for MM_HALT", "GLIBC:tst-fmtmsg:1")
+ != MM_OK)
+ result = 1;
+
+ if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_ERROR, "halt",
+ "should print message for MM_ERROR", "GLIBC:tst-fmtmsg:2")
+ != MM_OK)
+ result = 1;
+
+ if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_WARNING, "halt",
+ "should print message for MM_WARNING", "GLIBC:tst-fmtmsg:3")
+ != MM_OK)
+ result = 1;
+
+ if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_INFO, "halt",
+ "should print message for MM_INFO", "GLIBC:tst-fmtmsg:4")
+ != MM_OK)
+ result = 1;
+
+ if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_NOSEV, "halt",
+ "should print message for MM_NOSEV", "GLIBC:tst-fmtmsg:5")
+ != MM_OK)
+ result = 1;
+
+ if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_TEST, "halt",
+ "should print message for MM_TEST", "GLIBC:tst-fmtmsg:6")
+ != MM_OK)
+ result = 1;
+
+ if (addseverity (MM_TEST, NULL) != MM_OK)
+ {
+ puts ("second addseverity failed");
+ result = 1;
+ }
+
+ if (addseverity (MM_TEST, NULL) != MM_NOTOK)
+ {
+ puts ("third addseverity unexpectedly succeeded");
+ result = 1;
+ }
+
+ char *p = strdup ("TEST2");
+ if (addseverity (MM_TEST, p) != MM_OK)
+ {
+ puts ("fourth addseverity failed");
+ result = 1;
+ }
+ if (addseverity (MM_TEST, "TEST3") != MM_OK)
+ {
+ puts ("fifth addseverity failed");
+ result = 1;
+ }
+
+ free (p);
+
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-fmtmsg.sh b/REORG.TODO/stdlib/tst-fmtmsg.sh
new file mode 100755
index 0000000000..bcbe2e3348
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-fmtmsg.sh
@@ -0,0 +1,337 @@
+#!/bin/sh
+# Test of fmtmsg function family.
+# Copyright (C) 2000-2017 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+
+# The GNU C Library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <http://www.gnu.org/licenses/>.
+
+set -e
+
+common_objpfx=$1
+test_program_prefix_before_env=$2
+run_program_env=$3
+test_program_prefix_after_env=$4
+objpfx=$5
+
+test_pre="${test_program_prefix_before_env} ${run_program_env}"
+test="${test_program_prefix_after_env} ${objpfx}tst-fmtmsg"
+out=${objpfx}tst-fmtmsg.out
+
+($test_pre MSGVERB= $test || exit 1;
+ $test_pre MSGVERB=label $test || exit 1;
+ $test_pre MSGVERB=severity $test || exit 1;
+ $test_pre MSGVERB=severity:label $test || exit 1;
+ $test_pre MSGVERB=text $test || exit 1;
+ $test_pre MSGVERB=text:label $test || exit 1;
+ $test_pre MSGVERB=text:severity $test || exit 1;
+ $test_pre MSGVERB=text:severity:label $test || exit 1;
+ $test_pre MSGVERB=action $test || exit 1;
+ $test_pre MSGVERB=action:label $test || exit 1;
+ $test_pre MSGVERB=action:severity $test || exit 1;
+ $test_pre MSGVERB=action:severity:label $test || exit 1;
+ $test_pre MSGVERB=action:text $test || exit 1;
+ $test_pre MSGVERB=action:text:label $test || exit 1;
+ $test_pre MSGVERB=action:text:severity $test || exit 1;
+ $test_pre MSGVERB=action:text:severity:label $test || exit 1;
+ $test_pre MSGVERB=tag $test || exit 1;
+ $test_pre MSGVERB=tag:label $test || exit 1;
+ $test_pre MSGVERB=tag:severity $test || exit 1;
+ $test_pre MSGVERB=tag:severity:label $test || exit 1;
+ $test_pre MSGVERB=tag:text $test || exit 1;
+ $test_pre MSGVERB=tag:text:label $test || exit 1;
+ $test_pre MSGVERB=tag:text:severity $test || exit 1;
+ $test_pre MSGVERB=tag:text:severity:label $test || exit 1;
+ $test_pre MSGVERB=tag:action $test || exit 1;
+ $test_pre MSGVERB=tag:action:label $test || exit 1;
+ $test_pre MSGVERB=tag:action:severity $test || exit 1;
+ $test_pre MSGVERB=tag:action:severity:label $test || exit 1;
+ $test_pre MSGVERB=tag:action:text $test || exit 1;
+ $test_pre MSGVERB=tag:action:text:label $test || exit 1;
+ $test_pre MSGVERB=tag:action:text:severity $test || exit 1;
+ $test_pre MSGVERB=tag:action:text:severity:label $test || exit 1;) 2> $out
+
+cmp $out <<EOF
+GLIBC:tst-fmtmsg: HALT: halt
+TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: ERROR: halt
+TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: WARNING: halt
+TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: INFO: halt
+TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TEST: halt
+TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg
+HALT
+ERROR
+WARNING
+INFO
+
+TEST
+GLIBC:tst-fmtmsg: HALT
+GLIBC:tst-fmtmsg: ERROR
+GLIBC:tst-fmtmsg: WARNING
+GLIBC:tst-fmtmsg: INFO
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg: TEST
+halt
+halt
+halt
+halt
+halt
+halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: halt
+HALT: halt
+ERROR: halt
+WARNING: halt
+INFO: halt
+halt
+TEST: halt
+GLIBC:tst-fmtmsg: HALT: halt
+GLIBC:tst-fmtmsg: ERROR: halt
+GLIBC:tst-fmtmsg: WARNING: halt
+GLIBC:tst-fmtmsg: INFO: halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: TEST: halt
+TO FIX: should print message for MM_HALT
+TO FIX: should print message for MM_ERROR
+TO FIX: should print message for MM_WARNING
+TO FIX: should print message for MM_INFO
+TO FIX: should print message for MM_NOSEV
+TO FIX: should print message for MM_TEST
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_HALT
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_ERROR
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_WARNING
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_INFO
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_NOSEV
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_TEST
+HALT: TO FIX: should print message for MM_HALT
+ERROR: TO FIX: should print message for MM_ERROR
+WARNING: TO FIX: should print message for MM_WARNING
+INFO: TO FIX: should print message for MM_INFO
+TO FIX: should print message for MM_NOSEV
+TEST: TO FIX: should print message for MM_TEST
+GLIBC:tst-fmtmsg: HALT: TO FIX: should print message for MM_HALT
+GLIBC:tst-fmtmsg: ERROR: TO FIX: should print message for MM_ERROR
+GLIBC:tst-fmtmsg: WARNING: TO FIX: should print message for MM_WARNING
+GLIBC:tst-fmtmsg: INFO: TO FIX: should print message for MM_INFO
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_NOSEV
+GLIBC:tst-fmtmsg: TEST: TO FIX: should print message for MM_TEST
+halt
+TO FIX: should print message for MM_HALT
+halt
+TO FIX: should print message for MM_ERROR
+halt
+TO FIX: should print message for MM_WARNING
+halt
+TO FIX: should print message for MM_INFO
+halt
+TO FIX: should print message for MM_NOSEV
+halt
+TO FIX: should print message for MM_TEST
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_HALT
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_ERROR
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_WARNING
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_INFO
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_NOSEV
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_TEST
+HALT: halt
+TO FIX: should print message for MM_HALT
+ERROR: halt
+TO FIX: should print message for MM_ERROR
+WARNING: halt
+TO FIX: should print message for MM_WARNING
+INFO: halt
+TO FIX: should print message for MM_INFO
+halt
+TO FIX: should print message for MM_NOSEV
+TEST: halt
+TO FIX: should print message for MM_TEST
+GLIBC:tst-fmtmsg: HALT: halt
+TO FIX: should print message for MM_HALT
+GLIBC:tst-fmtmsg: ERROR: halt
+TO FIX: should print message for MM_ERROR
+GLIBC:tst-fmtmsg: WARNING: halt
+TO FIX: should print message for MM_WARNING
+GLIBC:tst-fmtmsg: INFO: halt
+TO FIX: should print message for MM_INFO
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_NOSEV
+GLIBC:tst-fmtmsg: TEST: halt
+TO FIX: should print message for MM_TEST
+GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:6
+HALT: GLIBC:tst-fmtmsg:1
+ERROR: GLIBC:tst-fmtmsg:2
+WARNING: GLIBC:tst-fmtmsg:3
+INFO: GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg:5
+TEST: GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: HALT: GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: ERROR: GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: WARNING: GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: INFO: GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TEST: GLIBC:tst-fmtmsg:6
+halt
+GLIBC:tst-fmtmsg:1
+halt
+GLIBC:tst-fmtmsg:2
+halt
+GLIBC:tst-fmtmsg:3
+halt
+GLIBC:tst-fmtmsg:4
+halt
+GLIBC:tst-fmtmsg:5
+halt
+GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:6
+HALT: halt
+GLIBC:tst-fmtmsg:1
+ERROR: halt
+GLIBC:tst-fmtmsg:2
+WARNING: halt
+GLIBC:tst-fmtmsg:3
+INFO: halt
+GLIBC:tst-fmtmsg:4
+halt
+GLIBC:tst-fmtmsg:5
+TEST: halt
+GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: HALT: halt
+GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: ERROR: halt
+GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: WARNING: halt
+GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: INFO: halt
+GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TEST: halt
+GLIBC:tst-fmtmsg:6
+TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+HALT: TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+ERROR: TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+WARNING: TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+INFO: TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+TEST: TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: HALT: TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: ERROR: TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: WARNING: TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: INFO: TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TEST: TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+halt
+TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+halt
+TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+halt
+TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+halt
+TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+halt
+TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+halt
+TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+HALT: halt
+TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+ERROR: halt
+TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+WARNING: halt
+TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+INFO: halt
+TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+halt
+TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+TEST: halt
+TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: HALT: halt
+TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: ERROR: halt
+TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: WARNING: halt
+TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: INFO: halt
+TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TEST: halt
+TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+EOF
+exit $?
diff --git a/REORG.TODO/stdlib/tst-getrandom.c b/REORG.TODO/stdlib/tst-getrandom.c
new file mode 100644
index 0000000000..e84a83f248
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-getrandom.c
@@ -0,0 +1,245 @@
+/* Tests for the getentropy, getrandom functions.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/random.h>
+
+/* Set to true if any errors are encountered. */
+static bool errors;
+
+/* Test getrandom with a single buffer length. NB: The passed-in
+ buffer must have room for four extra bytes after the specified
+ length, which are used to test that getrandom leaves those bytes
+ unchanged. */
+static void
+test_length (char *buffer, size_t length, unsigned int flags)
+{
+ memset (buffer, 0, length);
+ strcpy (buffer + length, "123");
+ ssize_t ret = getrandom (buffer, length, flags);
+ if (ret < 0)
+ {
+ /* EAGAIN is an expected error with GRND_RANDOM and
+ GRND_NONBLOCK. */
+ if ((flags & GRND_RANDOM)
+ && (flags & GRND_NONBLOCK)
+ && errno == EAGAIN)
+ return;
+ printf ("error: getrandom (%zu, 0x%x): %m\n", length, flags);
+ errors = true;
+ return;
+ }
+ if (ret != length)
+ {
+ if (flags & GRND_RANDOM)
+ {
+ if (ret == 0 || ret > length)
+ {
+ printf ("error: getrandom (%zu, 0x%x) returned %zd\n",
+ length, flags, ret);
+ errors = true;
+ }
+ }
+ else
+ {
+ printf ("error: getrandom (%zu, 0x%x) returned %zd\n",
+ length, flags, ret);
+ errors = true;
+ }
+ }
+ if (length >= 7)
+ {
+ /* One spurious test failure in 2**56 is sufficiently
+ unlikely. */
+ int non_null = 0;
+ for (int i = 0; i < length; ++i)
+ non_null += buffer[i] != 0;
+ if (non_null == 0)
+ {
+ printf ("error: getrandom (%zu, 0x%x) returned all-zero bytes\n",
+ length, flags);
+ errors = true;
+ }
+ }
+ if (memcmp (buffer + length, "123", 4) != 0)
+ {
+ printf ("error: getrandom (%zu, 0x%x) wrote spurious bytes\n",
+ length, flags);
+ errors = true;
+ }
+}
+
+/* Call getrandom repeatedly to fill the buffer. */
+static bool
+getrandom_full (char *buffer, size_t length, unsigned int flags)
+{
+ char *end = buffer + length;
+ while (buffer < end)
+ {
+ ssize_t ret = getrandom (buffer, end - buffer, flags);
+ if (ret < 0)
+ {
+ printf ("error: getrandom (%zu, 0x%x): %m\n", length, flags);
+ errors = true;
+ return false;
+ }
+ buffer += ret;
+ }
+
+ return true;
+}
+
+static void
+test_flags (unsigned int flags)
+{
+ /* Test various lengths, but only for !GRND_RANDOM, to conserve
+ entropy. */
+ {
+ enum { max_length = 300 };
+ char buffer[max_length + 4];
+ if (flags & GRND_RANDOM)
+ test_length (buffer, 0, flags);
+ else
+ {
+ for (int length = 0; length <= 9; ++length)
+ test_length (buffer, length, flags);
+ test_length (buffer, 16, flags);
+ test_length (buffer, max_length, flags);
+ }
+ }
+
+ /* Test that getrandom returns different data. */
+ if (!(flags & GRND_NONBLOCK))
+ {
+ char buffer1[8];
+ memset (buffer1, 0, sizeof (buffer1));
+
+ char buffer2[8];
+ memset (buffer2, 0, sizeof (buffer2));
+
+ if (getrandom_full (buffer1, sizeof (buffer1), flags)
+ && getrandom_full (buffer2, sizeof (buffer2), flags))
+ {
+ /* The probability that these two 8-byte buffers are equal
+ is very small (assuming that two subsequent calls to
+ getrandom result are independent, uniformly distributed
+ random variables). */
+ if (memcmp (buffer1, buffer2, sizeof (buffer1)) == 0)
+ {
+ printf ("error: getrandom returns constant value\n");
+ errors = true;
+ }
+ }
+ }
+}
+
+static void
+test_getentropy (void)
+{
+ char buf[16];
+ memset (buf, '@', sizeof (buf));
+ if (getentropy (buf, 0) != 0)
+ {
+ printf ("error: getentropy zero length: %m\n");
+ errors = true;
+ return;
+ }
+ for (size_t i = 0; i < sizeof (buf); ++i)
+ if (buf[i] != '@')
+ {
+ printf ("error: getentropy modified zero-length buffer\n");
+ errors = true;
+ return;
+ }
+
+ if (getentropy (buf, sizeof (buf)) != 0)
+ {
+ printf ("error: getentropy buf: %m\n");
+ errors = true;
+ return;
+ }
+
+ char buf2[256];
+ _Static_assert (sizeof (buf) < sizeof (buf2), "buf and buf2 compatible");
+ memset (buf2, '@', sizeof (buf2));
+ if (getentropy (buf2, sizeof (buf)) != 0)
+ {
+ printf ("error: getentropy buf2: %m\n");
+ errors = true;
+ return;
+ }
+
+ /* The probability that these two buffers are equal is very
+ small. */
+ if (memcmp (buf, buf2, sizeof (buf) == 0))
+ {
+ printf ("error: getentropy appears to return constant bytes\n");
+ errors = true;
+ return;
+ }
+
+ for (size_t i = sizeof (buf); i < sizeof (buf2); ++i)
+ if (buf2[i] != '@')
+ {
+ printf ("error: getentropy wrote beyond the end of the buffer\n");
+ errors = true;
+ return;
+ }
+
+ char buf3[257];
+ if (getentropy (buf3, sizeof (buf3)) == 0)
+ {
+ printf ("error: getentropy successful for 257 byte buffer\n");
+ errors = true;
+ return;
+ }
+ if (errno != EIO)
+ {
+ printf ("error: getentropy wrong error for 257 byte buffer: %m\n");
+ errors = true;
+ return;
+ }
+}
+
+static int
+do_test (void)
+{
+ /* Check if getrandom is not supported by this system. */
+ if (getrandom (NULL, 0, 0) == -1 && errno == ENOSYS)
+ return 77;
+
+ for (int use_random = 0; use_random < 2; ++use_random)
+ for (int use_nonblock = 0; use_nonblock < 2; ++use_nonblock)
+ {
+ unsigned int flags = 0;
+ if (use_random)
+ flags |= GRND_RANDOM;
+ if (use_nonblock)
+ flags |= GRND_NONBLOCK;
+ test_flags (flags);
+ }
+
+ test_getentropy ();
+
+ return errors;
+}
+
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-limits.c b/REORG.TODO/stdlib/tst-limits.c
new file mode 100644
index 0000000000..9aabc360f6
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-limits.c
@@ -0,0 +1,72 @@
+/* It is important that this comes first to not hide effects introduced
+ by other headers. */
+#include <limits.h>
+
+#include <inttypes.h>
+#include <stdio.h>
+
+
+static long long int
+bitval (int bits)
+{
+ long long int val = 0;
+ while (bits-- > 0)
+ val |= 1ll << bits;
+ return val;
+}
+
+
+static int
+do_test (void)
+{
+ int result = 0;
+
+#define TEST(name, format, expected) \
+ printf ("%-12s expected = %-20" format " actual = %" format "\n", \
+ #name ":", expected, name); \
+ result |= name != expected
+
+ /* The limits from ISO C99. */
+
+ /* We cannot support anything but 8-bit chars. */
+ TEST (CHAR_BIT, "d", 8);
+ TEST (SCHAR_MIN, "d", -128);
+ TEST (SCHAR_MAX, "d", 127);
+ TEST (UCHAR_MAX, "d", 255);
+
+ TEST (SHRT_MIN, "d", -(1 << (sizeof (short int) * CHAR_BIT - 1)));
+ TEST (SHRT_MAX, "d", (1 << (sizeof (short int) * CHAR_BIT - 1)) - 1);
+ TEST (USHRT_MAX, "d", (1 << sizeof (short int) * CHAR_BIT) - 1);
+
+ TEST (INT_MIN, "d", (int) -bitval (sizeof (int) * CHAR_BIT - 1) - 1);
+ TEST (INT_MAX, "d", (int) bitval (sizeof (int) * CHAR_BIT - 1));
+ TEST (UINT_MAX, "u",
+ (unsigned int) bitval (sizeof (unsigned int) * CHAR_BIT));
+
+ TEST (LONG_MIN, "ld",
+ (long int) -bitval (sizeof (long int) * CHAR_BIT - 1) - 1);
+ TEST (LONG_MAX, "ld", (long int) bitval (sizeof (long int) * CHAR_BIT - 1));
+ TEST (ULONG_MAX, "lu",
+ (unsigned long int) bitval (sizeof (unsigned long int) * CHAR_BIT));
+
+ TEST (LLONG_MIN, "lld", -bitval (sizeof (long long int) * CHAR_BIT - 1) - 1);
+ TEST (LLONG_MAX, "lld", bitval (sizeof (long long int) * CHAR_BIT - 1));
+ TEST (ULLONG_MAX, "llu",
+ (unsigned long long int) bitval (sizeof (unsigned long long int)
+ * CHAR_BIT));
+
+ /* Values from POSIX and Unix. */
+#ifdef PAGESIZE
+ TEST (PAGESIZE, "d", getpagesize ());
+#elif defined (PAGE_SIZE)
+ TEST (PAGE_SIZE, "d", getpagesize ());
+#endif
+
+ TEST (WORD_BIT, "d", (int) sizeof (int) * CHAR_BIT);
+ TEST (LONG_BIT, "d", (int) sizeof (long int) * CHAR_BIT);
+
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-makecontext.c b/REORG.TODO/stdlib/tst-makecontext.c
new file mode 100644
index 0000000000..d7ffad5f64
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-makecontext.c
@@ -0,0 +1,110 @@
+/* Copyright (C) 2006-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ucontext.h>
+#include <assert.h>
+#include <unwind.h>
+#include <dlfcn.h>
+#include <gnu/lib-names.h>
+
+ucontext_t ucp;
+char st1[16384];
+__thread int thr;
+
+int somevar = -76;
+long othervar = -78L;
+
+struct trace_arg
+{
+ int cnt, size;
+};
+
+static _Unwind_Reason_Code
+backtrace_helper (struct _Unwind_Context *ctx, void *a)
+{
+ struct trace_arg *arg = a;
+ if (++arg->cnt == arg->size)
+ return _URC_END_OF_STACK;
+ return _URC_NO_REASON;
+}
+
+void
+cf (int i)
+{
+ struct trace_arg arg = { .size = 100, .cnt = -1 };
+ void *handle;
+ _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *);
+
+ if (i != othervar || thr != 94)
+ {
+ printf ("i %d thr %d\n", i, thr);
+ exit (1);
+ }
+
+ /* Test if callback function of _Unwind_Backtrace is not called infinitely
+ times. See Bug 18508 or gcc bug "Bug 66303 - runtime.Caller() returns
+ infinitely deep stack frames on s390x.".
+ The go runtime calls backtrace_full() in
+ <gcc-src>/libbacktrace/backtrace.c, which uses _Unwind_Backtrace(). */
+ handle = dlopen (LIBGCC_S_SO, RTLD_LAZY);
+ if (handle != NULL)
+ {
+ unwind_backtrace = dlsym (handle, "_Unwind_Backtrace");
+ if (unwind_backtrace != NULL)
+ {
+ unwind_backtrace (backtrace_helper, &arg);
+ assert (arg.cnt != -1 && arg.cnt < 100);
+ }
+ dlclose (handle);
+ }
+
+ /* Since uc_link below has been set to NULL, setcontext is supposed to
+ terminate the process normally after this function returns. */
+}
+
+int
+do_test (void)
+{
+ if (getcontext (&ucp) != 0)
+ {
+ if (errno == ENOSYS)
+ {
+ puts ("context handling not supported");
+ return 0;
+ }
+
+ puts ("getcontext failed");
+ return 1;
+ }
+ thr = 94;
+ ucp.uc_link = NULL;
+ ucp.uc_stack.ss_sp = st1;
+ ucp.uc_stack.ss_size = sizeof st1;
+ makecontext (&ucp, (void (*) (void)) cf, 1, somevar - 2);
+ if (setcontext (&ucp) != 0)
+ {
+ puts ("setcontext failed");
+ return 1;
+ }
+ return 2;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-makecontext2.c b/REORG.TODO/stdlib/tst-makecontext2.c
new file mode 100644
index 0000000000..0d078279a8
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-makecontext2.c
@@ -0,0 +1,79 @@
+/* Copyright (C) 2008-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ucontext.h>
+#include <tst-stack-align.h>
+
+ucontext_t ucp, ucp2;
+char st1[262144] __attribute__((aligned (16)));
+
+void
+cf (int i, int j)
+{
+ if (i != 78 || j != 274)
+ {
+ printf ("i %d j %d\n", i, j);
+ exit (1);
+ }
+ else if (TEST_STACK_ALIGN ())
+ {
+ puts ("insufficiently aligned stack");
+ exit (2);
+ }
+}
+
+int
+do_test (void)
+{
+ for (size_t j = 32; j < 64; j += sizeof (long))
+ {
+ if (getcontext (&ucp) != 0)
+ {
+ if (errno == ENOSYS)
+ {
+ puts ("context handling not supported");
+ return 0;
+ }
+
+ puts ("getcontext failed");
+ return 1;
+ }
+ ucp.uc_link = &ucp2;
+ ucp.uc_stack.ss_sp = st1;
+ ucp.uc_stack.ss_size = sizeof (st1) - j;
+ memset (&st1[sizeof (st1) - j], 0x55, j);
+ makecontext (&ucp, (void (*) (void)) cf, 2, 78, 274);
+ if (swapcontext (&ucp2, &ucp) != 0)
+ {
+ puts ("setcontext failed");
+ return 1;
+ }
+
+ for (size_t i = j; i > 0; i--)
+ if (st1[sizeof (st1) - j + i - 1] != 0x55)
+ { printf ("fail %zd %zd\n", i, j); break; }
+ }
+
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-makecontext3.c b/REORG.TODO/stdlib/tst-makecontext3.c
new file mode 100644
index 0000000000..ccdeb4a282
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-makecontext3.c
@@ -0,0 +1,220 @@
+/* Copyright (C) 2001-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ucontext.h>
+#include <unistd.h>
+
+static ucontext_t ctx[3];
+
+static int was_in_f1;
+static int was_in_f2;
+
+static char st2[32768];
+
+static volatile int flag;
+
+static void
+f1 (int a00, int a01, int a02, int a03, int a04, int a05, int a06, int a07,
+ int a08, int a09, int a10, int a11, int a12, int a13, int a14, int a15,
+ int a16, int a17, int a18, int a19, int a20, int a21, int a22, int a23,
+ int a24, int a25, int a26, int a27, int a28, int a29, int a30, int a31,
+ int a32)
+{
+ printf ("start f1(a00=%08x,a01=%08x,a02=%08x,a03=%08x,\n"
+ " a04=%08x,a05=%08x,a06=%08x,a07=%08x,\n"
+ " a08=%08x,a09=%08x,a10=%08x,a11=%08x,\n"
+ " a12=%08x,a13=%08x,a14=%08x,a15=%08x,\n"
+ " a16=%08x,a17=%08x,a18=%08x,a19=%08x,\n"
+ " a20=%08x,a21=%08x,a22=%08x,a23=%08x,\n"
+ " a24=%08x,a25=%08x,a26=%08x,a27=%08x,\n"
+ " a28=%08x,a29=%08x,a30=%08x,a31=%08x,\n"
+ " a32=%08x) [%d]\n",
+ a00, a01, a02, a03, a04, a05, a06, a07,
+ a08, a09, a10, a11, a12, a13, a14, a15,
+ a16, a17, a18, a19, a20, a21, a22, a23,
+ a24, a25, a26, a27, a28, a29, a30, a31,
+ a32, flag);
+
+ if (a00 != (0x00000001 << flag) || a01 != (0x00000004 << flag)
+ || a02 != (0x00000012 << flag) || a03 != (0x00000048 << flag)
+ || a04 != (0x00000123 << flag) || a05 != (0x0000048d << flag)
+ || a06 != (0x00001234 << flag) || a07 != (0x000048d1 << flag)
+ || a08 != (0x00012345 << flag) || a09 != (0x00048d15 << flag)
+ || a10 != (0x00123456 << flag) || a11 != (0x0048d159 << flag)
+ || a12 != (0x01234567 << flag) || a13 != (0x048d159e << flag)
+ || a14 != (0x12345678 << flag) || a15 != (0x48d159e2 << flag)
+ || a16 != (0x23456789 << flag) || a17 != (0x8d159e26 << flag)
+ || a18 != (0x3456789a << flag) || a19 != (0xd159e26a << flag)
+ || a20 != (0x456789ab << flag) || a21 != (0x159e26af << flag)
+ || a22 != (0x56789abc << flag) || a23 != (0x59e26af3 << flag)
+ || a24 != (0x6789abcd << flag) || a25 != (0x9e26af37 << flag)
+ || a26 != (0x789abcde << flag) || a27 != (0xe26af37b << flag)
+ || a28 != (0x89abcdef << flag) || a29 != (0x26af37bc << flag)
+ || a30 != (0x9abcdef0 << flag) || a31 != (0x6af37bc3 << flag)
+ || a32 != (0xabcdef0f << flag))
+ {
+ puts ("arg mismatch");
+ exit (-1);
+ }
+
+ if (flag && swapcontext (&ctx[1], &ctx[2]) != 0)
+ {
+ printf ("%s: swapcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ printf ("finish f1 [%d]\n", flag);
+ flag++;
+ was_in_f1++;
+}
+
+static void
+f2 (void)
+{
+ puts ("start f2");
+ if (swapcontext (&ctx[2], &ctx[1]) != 0)
+ {
+ printf ("%s: swapcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ puts ("finish f2");
+ was_in_f2 = 1;
+}
+
+volatile int global;
+
+
+static int back_in_main;
+
+
+static void
+check_called (void)
+{
+ if (back_in_main == 0)
+ {
+ puts ("program did not reach main again");
+ _exit (1);
+ }
+}
+
+
+int
+main (void)
+{
+ atexit (check_called);
+
+ char st1[32768];
+
+ puts ("making contexts");
+ if (getcontext (&ctx[0]) != 0)
+ {
+ if (errno == ENOSYS)
+ {
+ back_in_main = 1;
+ exit (0);
+ }
+
+ printf ("%s: getcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+
+ if (getcontext (&ctx[1]) != 0)
+ {
+ printf ("%s: getcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+
+ ctx[1].uc_stack.ss_sp = st1;
+ ctx[1].uc_stack.ss_size = sizeof st1;
+ ctx[1].uc_link = &ctx[0];
+ errno = 0;
+ makecontext (&ctx[1], (void (*) (void)) f1, 33,
+ 0x00000001 << flag, 0x00000004 << flag,
+ 0x00000012 << flag, 0x00000048 << flag,
+ 0x00000123 << flag, 0x0000048d << flag,
+ 0x00001234 << flag, 0x000048d1 << flag,
+ 0x00012345 << flag, 0x00048d15 << flag,
+ 0x00123456 << flag, 0x0048d159 << flag,
+ 0x01234567 << flag, 0x048d159e << flag,
+ 0x12345678 << flag, 0x48d159e2 << flag,
+ 0x23456789 << flag, 0x8d159e26 << flag,
+ 0x3456789a << flag, 0xd159e26a << flag,
+ 0x456789ab << flag, 0x159e26af << flag,
+ 0x56789abc << flag, 0x59e26af3 << flag,
+ 0x6789abcd << flag, 0x9e26af37 << flag,
+ 0x789abcde << flag, 0xe26af37b << flag,
+ 0x89abcdef << flag, 0x26af37bc << flag,
+ 0x9abcdef0 << flag, 0x6af37bc3 << flag,
+ 0xabcdef0f << flag);
+
+ /* Without this check, a stub makecontext can make us spin forever. */
+ if (errno == ENOSYS)
+ {
+ puts ("makecontext not implemented");
+ back_in_main = 1;
+ return 0;
+ }
+
+ /* Play some tricks with this context. */
+ if (++global == 1)
+ if (setcontext (&ctx[1]) != 0)
+ {
+ printf ("%s: setcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ if (global != 2)
+ {
+ printf ("%s: 'global' not incremented twice\n", __FUNCTION__);
+ exit (1);
+ }
+
+ if (getcontext (&ctx[2]) != 0)
+ {
+ printf ("%s: second getcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ ctx[2].uc_stack.ss_sp = st2;
+ ctx[2].uc_stack.ss_size = sizeof st2;
+ ctx[2].uc_link = &ctx[1];
+ makecontext (&ctx[2], f2, 0);
+
+ puts ("swapping contexts");
+ if (swapcontext (&ctx[0], &ctx[2]) != 0)
+ {
+ printf ("%s: swapcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ puts ("back at main program");
+ back_in_main = 1;
+
+ if (was_in_f1 < 2)
+ {
+ puts ("didn't reach f1 twice");
+ exit (1);
+ }
+ if (was_in_f2 == 0)
+ {
+ puts ("didn't reach f2");
+ exit (1);
+ }
+
+ puts ("test succeeded");
+ return 0;
+}
diff --git a/REORG.TODO/stdlib/tst-putenv.c b/REORG.TODO/stdlib/tst-putenv.c
new file mode 100644
index 0000000000..47513ea42b
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-putenv.c
@@ -0,0 +1,18 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+static int
+do_test (void)
+{
+ char *p = getenv ("SOMETHING_NOBODY_USES");
+ if (p == NULL)
+ {
+ puts ("envvar not defined");
+ return 1;
+ }
+
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-putenvmod.c b/REORG.TODO/stdlib/tst-putenvmod.c
new file mode 100644
index 0000000000..7c0c337d3f
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-putenvmod.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+void
+__attribute ((constructor))
+init (void)
+{
+ puts ("init DSO");
+
+ static char str[] = "SOMETHING_NOBODY_USES=something_else";
+ if (putenv (str) != 0)
+ {
+ puts ("putenv failed");
+ _exit (1);
+ }
+}
diff --git a/REORG.TODO/stdlib/tst-qsort.c b/REORG.TODO/stdlib/tst-qsort.c
new file mode 100644
index 0000000000..2b26e74d0b
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-qsort.c
@@ -0,0 +1,55 @@
+/* Test case by Paul Eggert <eggert@twinsun.com> */
+#include <stdio.h>
+#include <stdlib.h>
+#include <tst-stack-align.h>
+
+struct big { char c[4 * 1024]; };
+
+struct big *array;
+struct big *array_end;
+
+static int align_check;
+
+int
+compare (void const *a1, void const *b1)
+{
+ struct big const *a = a1;
+ struct big const *b = b1;
+
+ if (!align_check)
+ align_check = TEST_STACK_ALIGN () ? -1 : 1;
+
+ if (! (array <= a && a < array_end
+ && array <= b && b < array_end))
+ {
+ exit (EXIT_FAILURE);
+ }
+ return b->c[0] - a->c[0];
+}
+
+int
+main (int argc, char **argv)
+{
+ size_t i;
+ size_t array_members = argv[1] ? atoi (argv[1]) : 50;
+ array = (struct big *) malloc (array_members * sizeof *array);
+ if (array == NULL)
+ {
+ puts ("no memory");
+ exit (EXIT_FAILURE);
+ }
+
+ array_end = array + array_members;
+ for (i = 0; i < array_members; i++)
+ array[i].c[0] = i % 128;
+
+ qsort (array, array_members, sizeof *array, compare);
+
+ if (align_check == -1)
+ {
+ puts ("stack not sufficiently aligned");
+ exit (EXIT_FAILURE);
+ }
+
+ return 0;
+}
diff --git a/REORG.TODO/stdlib/tst-qsort2.c b/REORG.TODO/stdlib/tst-qsort2.c
new file mode 100644
index 0000000000..10d16852b0
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-qsort2.c
@@ -0,0 +1,89 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+char *array;
+char *array_end;
+size_t member_size;
+
+int
+compare (const void *a1, const void *b1)
+{
+ const char *a = a1;
+ const char *b = b1;
+
+ if (! (array <= a && a < array_end
+ && array <= b && b < array_end))
+ {
+ puts ("compare arguments not inside of the array");
+ exit (EXIT_FAILURE);
+ }
+ int ret = b[0] - a[0];
+ if (ret)
+ return ret;
+ if (member_size > 1)
+ return b[1] - a[1];
+ return 0;
+}
+
+int
+test (size_t nmemb, size_t size)
+{
+ array = malloc (nmemb * size);
+ if (array == NULL)
+ {
+ printf ("%zd x %zd: no memory", nmemb, size);
+ return 1;
+ }
+
+ array_end = array + nmemb * size;
+ member_size = size;
+
+ char *p;
+ size_t i;
+ size_t bias = random ();
+ for (i = 0, p = array; i < nmemb; i++, p += size)
+ {
+ p[0] = (char) (i + bias);
+ if (size > 1)
+ p[1] = (char) ((i + bias) >> 8);
+ }
+
+ qsort (array, nmemb, size, compare);
+
+ for (i = 0, p = array; i < nmemb - 1; i++, p += size)
+ {
+ if (p[0] < p[size]
+ || (size > 1 && p[0] == p[size] && p[1] < p[size + 1]))
+ {
+ printf ("%zd x %zd: failure at offset %zd\n", nmemb,
+ size, i);
+ free (array);
+ return 1;
+ }
+ }
+
+ free (array);
+ return 0;
+}
+
+int
+main (int argc, char **argv)
+{
+ int ret = 0;
+ if (argc >= 3)
+ ret |= test (atoi (argv[1]), atoi (argv[2]));
+ else
+ {
+ ret |= test (10000, 1);
+ ret |= test (200000, 2);
+ ret |= test (2000000, 3);
+ ret |= test (2132310, 4);
+ ret |= test (1202730, 7);
+ ret |= test (1184710, 8);
+ ret |= test (272710, 12);
+ ret |= test (14170, 32);
+ ret |= test (4170, 320);
+ }
+
+ return ret;
+}
diff --git a/REORG.TODO/stdlib/tst-quick_exit.cc b/REORG.TODO/stdlib/tst-quick_exit.cc
new file mode 100644
index 0000000000..b46fafed5c
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-quick_exit.cc
@@ -0,0 +1,47 @@
+/* Bug 20198: Do not call object destructors at exit.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+struct A
+{
+ ~A () { abort (); }
+};
+
+thread_local A a;
+
+void
+__attribute__ ((noinline, noclone))
+optimization_barrier (A &)
+{
+}
+
+static int
+do_test ()
+{
+ optimization_barrier (a);
+ /* The C++11 standard in 18.5.12 says:
+ "Objects shall not be destroyed as a result of calling
+ quick_exit."
+ If quick_exit calls the destructors the test aborts. */
+ quick_exit (0);
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-rand48-2.c b/REORG.TODO/stdlib/tst-rand48-2.c
new file mode 100644
index 0000000000..8b8fef4430
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-rand48-2.c
@@ -0,0 +1,116 @@
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+static int
+do_test (void)
+{
+ time_t t = time (NULL);
+ int i, ret = 0;
+ double d;
+ long int l;
+ struct drand48_data data;
+ unsigned short int buf[3];
+
+ srand48 ((long int) t);
+ for (i = 0; i < 50; i++)
+ if ((d = drand48 ()) < 0.0 || d >= 1.0)
+ {
+ printf ("drand48 %d %g\n", i, d);
+ ret = 1;
+ }
+
+ srand48_r ((long int) t, &data);
+ for (i = 0; i < 50; i++)
+ if (drand48_r (&data, &d) != 0 || d < 0.0 || d >= 1.0)
+ {
+ printf ("drand48_r %d %g\n", i, d);
+ ret = 1;
+ }
+
+ buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+ for (i = 0; i < 50; i++)
+ if ((d = erand48 (buf)) < 0.0 || d >= 1.0)
+ {
+ printf ("erand48 %d %g\n", i, d);
+ ret = 1;
+ }
+
+ buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+ for (i = 0; i < 50; i++)
+ if (erand48_r (buf, &data, &d) != 0 || d < 0.0 || d >= 1.0)
+ {
+ printf ("erand48_r %d %g\n", i, d);
+ ret = 1;
+ }
+
+ srand48 ((long int) t);
+ for (i = 0; i < 50; i++)
+ if ((l = lrand48 ()) < 0 || l > INT32_MAX)
+ {
+ printf ("lrand48 %d %ld\n", i, l);
+ ret = 1;
+ }
+
+ srand48_r ((long int) t, &data);
+ for (i = 0; i < 50; i++)
+ if (lrand48_r (&data, &l) != 0 || l < 0 || l > INT32_MAX)
+ {
+ printf ("lrand48_r %d %ld\n", i, l);
+ ret = 1;
+ }
+
+ buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+ for (i = 0; i < 50; i++)
+ if ((l = nrand48 (buf)) < 0 || l > INT32_MAX)
+ {
+ printf ("nrand48 %d %ld\n", i, l);
+ ret = 1;
+ }
+
+ buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+ for (i = 0; i < 50; i++)
+ if (nrand48_r (buf, &data, &l) != 0 || l < 0 || l > INT32_MAX)
+ {
+ printf ("nrand48_r %d %ld\n", i, l);
+ ret = 1;
+ }
+
+ srand48 ((long int) t);
+ for (i = 0; i < 50; i++)
+ if ((l = mrand48 ()) < INT32_MIN || l > INT32_MAX)
+ {
+ printf ("mrand48 %d %ld\n", i, l);
+ ret = 1;
+ }
+
+ srand48_r ((long int) t, &data);
+ for (i = 0; i < 50; i++)
+ if (mrand48_r (&data, &l) != 0 || l < INT32_MIN || l > INT32_MAX)
+ {
+ printf ("mrand48_r %d %ld\n", i, l);
+ ret = 1;
+ }
+
+ buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+ for (i = 0; i < 50; i++)
+ if ((l = jrand48 (buf)) < INT32_MIN || l > INT32_MAX)
+ {
+ printf ("jrand48 %d %ld\n", i, l);
+ ret = 1;
+ }
+
+ buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+ for (i = 0; i < 50; i++)
+ if (jrand48_r (buf, &data, &l) != 0 || l < INT32_MIN || l > INT32_MAX)
+ {
+ printf ("jrand48_r %d %ld\n", i, l);
+ ret = 1;
+ }
+
+ return ret;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-rand48.c b/REORG.TODO/stdlib/tst-rand48.c
new file mode 100644
index 0000000000..973c62e1eb
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-rand48.c
@@ -0,0 +1,393 @@
+#include <float.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef DECIMAL_DIG
+# define DECIMAL_DIG 21
+#endif
+
+
+static int
+do_test (void)
+{
+ unsigned short int xs[3] = { 0x0001, 0x0012, 0x0123 };
+ unsigned short int lxs[7];
+ unsigned short int *xsp;
+ int result = 0;
+ long int l;
+ double d;
+ double e;
+
+ /* Test srand48. */
+ srand48 (0x98765432);
+ /* Get the values of the internal Xi array. */
+ xsp = seed48 (xs);
+ if (xsp[0] != 0x330e || xsp[1] != 0x5432 || xsp[2] != 0x9876)
+ {
+ puts ("srand48(0x98765432) didn't set correct value");
+ printf (" expected: { %04hx, %04hx, %04hx }\n", 0x330e, 0x5432, 0x9876);
+ printf (" seen: { %04hx, %04hx, %04hx }\n", xsp[0], xsp[1], xsp[2]);
+ result = 1;
+ }
+ /* Put the values back. */
+ memcpy (xs, xsp, sizeof (xs));
+ (void) seed48 (xs);
+
+ /* See whether the correct values are installed. */
+ l = lrand48 ();
+ if (l != 0x2fed1413l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x2fed1413l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != -0x5d73effdl)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, -0x5d73effdl, l);
+ result = 1;
+ }
+
+ l = lrand48 ();
+ if (l != 0x585fcfb7l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x585fcfb7l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != -0x61770b8cl)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, -0x61770b8cl, l);
+ result = 1;
+ }
+
+ /* Test seed48. The previous call should have install the values in
+ the initialization of `xs' above. */
+ xs[0] = 0x1234;
+ xs[1] = 0x5678;
+ xs[2] = 0x9012;
+ xsp = seed48 (xs);
+ if (xsp[0] != 0x62f2 || xsp[1] != 0xf474 || xsp[2] != 0x9e88)
+ {
+ puts ("seed48() did not install the values correctly");
+ printf (" expected: { %04hx, %04hx, %04hx }\n", 0x62f2, 0xf474, 0x9e88);
+ printf (" seen: { %04hx, %04hx, %04hx }\n", xsp[0], xsp[1], xsp[2]);
+ result = 1;
+ }
+
+ /* Test lrand48 and mrand48. We continue from the seed established
+ above. */
+ l = lrand48 ();
+ if (l != 0x017e48b5l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x017e48b5l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != -0x1485e05dl)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, -0x1485e05dl, l);
+ result = 1;
+ }
+
+ l = lrand48 ();
+ if (l != 0x6b6a3f95l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x6b6a3f95l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != 0x175c0d6fl)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x175c0d6fl, l);
+ result = 1;
+ }
+
+ /* Test lcong48. */
+ lxs[0] = 0x4567;
+ lxs[1] = 0x6789;
+ lxs[2] = 0x8901;
+ lxs[3] = 0x0123;
+ lxs[4] = 0x2345;
+ lxs[5] = 0x1111;
+ lxs[6] = 0x2222;
+ lcong48 (lxs);
+
+ /* See whether the correct values are installed. */
+ l = lrand48 ();
+ if (l != 0x6df63d66l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x6df63d66l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != 0x2f92c8e1l)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x2f92c8e1l, l);
+ result = 1;
+ }
+
+ l = lrand48 ();
+ if (l != 0x3b4869ffl)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x3b4869ffl, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != 0x5cd4cc3el)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x5cd4cc3el, l);
+ result = 1;
+ }
+
+ /* Check whether srand48() restores the A and C parameters. */
+ srand48 (0x98765432);
+
+ /* See whether the correct values are installed. */
+ l = lrand48 ();
+ if (l != 0x2fed1413l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x2fed1413l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != -0x5d73effdl)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, -0x5d73effdl, l);
+ result = 1;
+ }
+
+ l = lrand48 ();
+ if (l != 0x585fcfb7l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x585fcfb7l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != -0x61770b8cl)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, -0x61770b8cl, l);
+ result = 1;
+ }
+
+ /* And again to see whether seed48() does the same. */
+ lcong48 (lxs);
+
+ /* See whether lxs wasn't modified. */
+ l = lrand48 ();
+ if (l != 0x6df63d66l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x6df63d66l, l);
+ result = 1;
+ }
+
+ /* Test seed48. The previous call should have install the values in
+ the initialization of `xs' above. */
+ xs[0] = 0x1234;
+ xs[1] = 0x5678;
+ xs[2] = 0x9012;
+ xsp = seed48 (xs);
+ if (xsp[0] != 0x0637 || xsp[1] != 0x7acd || xsp[2] != 0xdbec)
+ {
+ puts ("seed48() did not install the values correctly");
+ printf (" expected: { %04hx, %04hx, %04hx }\n", 0x0637, 0x7acd, 0xdbec);
+ printf (" seen: { %04hx, %04hx, %04hx }\n", xsp[0], xsp[1], xsp[2]);
+ result = 1;
+ }
+
+ /* Test lrand48 and mrand48. We continue from the seed established
+ above. */
+ l = lrand48 ();
+ if (l != 0x017e48b5l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x017e48b5l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != -0x1485e05dl)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, -0x1485e05dl, l);
+ result = 1;
+ }
+
+ l = lrand48 ();
+ if (l != 0x6b6a3f95l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x6b6a3f95l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != 0x175c0d6fl)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x175c0d6fl, l);
+ result = 1;
+ }
+
+ /* Test drand48. */
+ d = drand48 ();
+ if (d != 0.0908832261858485424)
+ {
+ printf ("drand48() in line %d failed: expected %.*g, seen %.*g\n",
+ __LINE__ - 4, DECIMAL_DIG, 0.0908832261858485424,
+ DECIMAL_DIG, d);
+ result = 1;
+ }
+
+ d = drand48 ();
+ if (d != 0.943149381730059133133)
+ {
+ printf ("drand48() in line %d failed: expected %.*g, seen %.*g\n",
+ __LINE__ - 4, DECIMAL_DIG, 0.943149381730059133133,
+ DECIMAL_DIG, d);
+ result = 1;
+ }
+
+ /* Now the functions which get the Xis passed. */
+ xs[0] = 0x3849;
+ xs[1] = 0x5061;
+ xs[2] = 0x7283;
+
+ l = nrand48 (xs);
+ if (l != 0x1efe61a1l)
+ {
+ printf ("nrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x1efe61a1l, l);
+ result = 1;
+ }
+
+ l = jrand48 (xs);
+ if (l != -0xa973860l)
+ {
+ printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, -0xa973860l, l);
+ result = 1;
+ }
+
+ l = nrand48 (xs);
+ if (l != 0x2a5e57fel)
+ {
+ printf ("nrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x2a5e57fel, l);
+ result = 1;
+ }
+
+ l = jrand48 (xs);
+ if (l != 0x71a779a8l)
+ {
+ printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x71a779a8l, l);
+ result = 1;
+ }
+
+ /* Test whether the global A and C are used. */
+ lcong48 (lxs);
+
+ l = nrand48 (xs);
+ if (l != 0x32beee9fl)
+ {
+ printf ("nrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x32beee9fl, l);
+ result = 1;
+ }
+
+ l = jrand48 (xs);
+ if (l != 0x7bddf3bal)
+ {
+ printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x7bddf3bal, l);
+ result = 1;
+ }
+
+ l = nrand48 (xs);
+ if (l != 0x85bdf28l)
+ {
+ printf ("nrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x85bdf28l, l);
+ result = 1;
+ }
+
+ l = jrand48 (xs);
+ if (l != 0x7b433e47l)
+ {
+ printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x7b433e47l, l);
+ result = 1;
+ }
+
+ /* Test erand48. Also compare with the drand48 results. */
+ (void) seed48 (xs);
+
+ d = drand48 ();
+ e = erand48 (xs);
+ if (d != e)
+ {
+ printf ("\
+drand48() and erand48 in lines %d and %d produce different results\n",
+ __LINE__ - 6, __LINE__ - 5);
+ printf (" drand48() = %g, erand48() = %g\n", d, e);
+ result = 1;
+ }
+ else if (e != 0.640650904452755298735)
+ {
+ printf ("erand48() in line %d failed: expected %.*g, seen %.*g\n",
+ __LINE__ - 4, DECIMAL_DIG, 0.640650904452755298735,
+ DECIMAL_DIG, e);
+ result = 1;
+
+ }
+
+ d = drand48 ();
+ e = erand48 (xs);
+ if (d != e)
+ {
+ printf ("\
+drand48() and erand48 in lines %d and %d produce different results\n",
+ __LINE__ - 6, __LINE__ - 5);
+ printf (" drand48() = %g, erand48() = %g\n", d, e);
+ result = 1;
+ }
+ else if (e != 0.115372323508150742555)
+ {
+ printf ("erand48() in line %d failed: expected %.*g, seen %.*g\n",
+ __LINE__ - 4, DECIMAL_DIG, 0.0115372323508150742555,
+ DECIMAL_DIG, e);
+ result = 1;
+
+ }
+
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-random.c b/REORG.TODO/stdlib/tst-random.c
new file mode 100644
index 0000000000..8fe0993dd7
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-random.c
@@ -0,0 +1,122 @@
+/* Test program for random(), srandom(), initstate(), setstate()
+ Written by Michael J. Fischer, August 21, 2000
+ Placed in the public domain. */
+
+/* This program primarily tests the correct functioning of srandom()
+ and setstate(). The strategy is generate and store a set of random
+ sequences, each with a specified starting seed. Then each sequence
+ is regenerated twice and checked against the stored values.
+
+ First they are regenerated one sequence at a time, using srandom()
+ to set the initial state. A discrepency here would suggest that
+ srandom() was failing to completely initialize the random number
+ generator.
+
+ Second the sequences are regenerated in an interleaved order.
+ A state vector is created for each sequence using initstate().
+ setstate() is used to switch from sequence to sequence during
+ the interleaved generation. A discrepency here would suggest
+ a problem with either initstate() failing to initialize the
+ random number generator properly, or the failure of setstate()
+ to correctly save and restore state information. Also, each
+ time setstate() is called, the returned value is checked for
+ correctness (since we know what it should be).
+
+ Note: We use default state vector for sequence 0 and our own
+ state vectors for the remaining sequences. This is to give a check
+ that the value returned by initstate() is valid and can indeed be
+ used in the future. */
+
+/* Strategy:
+ 1. Use srandom() followed by calls on random to generate a set of
+ sequences of values.
+ 2. Regenerate and check the sequences.
+ 3. Use initstate() to create new states.
+ 4. Regenerate the sequences in an interleaved manner and check.
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+
+const int degree = 128; /* random number generator degree (should
+ be one of 8, 16, 32, 64, 128, 256) */
+const int nseq = 3; /* number of test sequences */
+const int nrnd = 50; /* length of each test sequence */
+const unsigned int seed[3] = { 0x12344321U, 0xEE11DD22U, 0xFEDCBA98 };
+
+void fail (const char *msg, int s, int i) __attribute__ ((__noreturn__));
+
+static int
+do_test (void)
+{
+ long int rnd[nseq][nrnd]; /* pseudorandom numbers */
+ char* state[nseq]; /* state for PRNG */
+ char* oldstate[nseq]; /* old PRNG state */
+ int s; /* sequence index */
+ int i; /* element index */
+
+ printf ("Begining random package test using %d sequences of length %d.\n",
+ nseq, nrnd);
+
+ /* 1. Generate and store the sequences. */
+ printf ("Generating random sequences.\n");
+ for (s = 0; s < nseq; ++s)
+ {
+ srandom ( seed[s] );
+ for (i = 0; i < nrnd; ++i)
+ rnd[s][i] = random ();
+ }
+
+ /* 2. Regenerate and check. */
+ printf ("Regenerating and checking sequences.\n");
+ for (s = 0; s < nseq; ++s)
+ {
+ srandom (seed[s]);
+ for (i = 0; i < nrnd; ++i)
+ if (rnd[s][i] != random ())
+ fail ("first regenerate test", s, i);
+ }
+
+ /* 3. Create state vector, one for each sequence.
+ First state is random's internal state; others are malloced. */
+ printf ("Creating and checking state vector for each sequence.\n");
+ srandom (seed[0]); /* reseed with first seed */
+ for (s = 1; s < nseq; ++s)
+ {
+ state[s] = (char*) malloc (degree);
+ oldstate[s] = initstate (seed[s], state[s], degree);
+ }
+ state[0] = oldstate[1];
+
+ /* Check returned values. */
+ for (s = 1; s < nseq - 1; ++s)
+ if (state[s] != oldstate[s + 1])
+ fail ("bad initstate() return value", s, i);
+
+ /* 4. Regenerate sequences interleaved and check. */
+ printf ("Regenerating and checking sequences in interleaved order.\n");
+ for (i = 0; i < nrnd; ++i)
+ {
+ for (s = 0; s < nseq; ++s)
+ {
+ char *oldstate = (char *) setstate (state[s]);
+ if (oldstate != state[(s + nseq - 1) % nseq])
+ fail ("bad setstate() return value", s, i);
+ if (rnd[s][i] != random ())
+ fail ("bad value generated in interleave test", s, i);
+ }
+ }
+ printf ("All tests passed!\n");
+ return 0;
+}
+
+void
+fail (const char *msg, int s, int i)
+{
+ printf ("\nTest FAILED: ");
+ printf ("%s (seq %d, pos %d).\n", msg, s, i);
+ exit (1);
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-random2.c b/REORG.TODO/stdlib/tst-random2.c
new file mode 100644
index 0000000000..093e16879c
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-random2.c
@@ -0,0 +1,61 @@
+/* Test initstate saving the old state.
+ Copyright (C) 2005-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Jakub Jelinek <jakub@redhat.com>, 2005.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+static int
+do_test (void)
+{
+ int pass;
+ int ret = 0;
+ long int r[2];
+
+ for (pass = 0; pass < 2; pass++)
+ {
+ srandom (0x12344321);
+
+ int j;
+ for (j = 0; j < 3; ++j)
+ random ();
+ if (pass == 1)
+ {
+ char state[128];
+ char *ostate = initstate (0x34562101, state, 128);
+ if (setstate (ostate) != state)
+ {
+ puts ("setstate (ostate) != state");
+ ret = 1;
+ }
+ }
+
+ random ();
+ r[pass] = random ();
+ }
+
+ if (r[0] != r[1])
+ {
+ printf ("%ld != %ld\n", r[0], r[1]);
+ ret = 1;
+ }
+ return ret;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-secure-getenv.c b/REORG.TODO/stdlib/tst-secure-getenv.c
new file mode 100644
index 0000000000..2705cf9c5b
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-secure-getenv.c
@@ -0,0 +1,242 @@
+/* Copyright (C) 2012-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Test that secure_getenv works by invoking the test as a SGID
+ program with a group ID from the supplementary group list. This
+ test can fail spuriously if the user is not a member of a suitable
+ supplementary group. */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <support/support.h>
+#include <support/test-driver.h>
+
+static char MAGIC_ARGUMENT[] = "run-actual-test";
+#define MAGIC_STATUS 19
+
+/* Return a GID which is not our current GID, but is present in the
+ supplementary group list. */
+static gid_t
+choose_gid (void)
+{
+ const int count = 64;
+ gid_t groups[count];
+ int ret = getgroups (count, groups);
+ if (ret < 0)
+ {
+ printf ("getgroups: %m\n");
+ exit (1);
+ }
+ gid_t current = getgid ();
+ for (int i = 0; i < ret; ++i)
+ {
+ if (groups[i] != current)
+ return groups[i];
+ }
+ return 0;
+}
+
+
+/* Copies the executable into a restricted directory, so that we can
+ safely make it SGID with the TARGET group ID. Then runs the
+ executable. */
+static int
+run_executable_sgid (gid_t target)
+{
+ char *dirname = xasprintf ("%s/secure-getenv.%jd",
+ test_dir, (intmax_t) getpid ());
+ char *execname = xasprintf ("%s/bin", dirname);
+ int infd = -1;
+ int outfd = -1;
+ int ret = -1;
+ if (mkdir (dirname, 0700) < 0)
+ {
+ printf ("mkdir: %m\n");
+ goto err;
+ }
+ infd = open ("/proc/self/exe", O_RDONLY);
+ if (infd < 0)
+ {
+ printf ("open (/proc/self/exe): %m\n");
+ goto err;
+ }
+ outfd = open (execname, O_WRONLY | O_CREAT | O_EXCL, 0700);
+ if (outfd < 0)
+ {
+ printf ("open (%s): %m\n", execname);
+ goto err;
+ }
+ char buf[4096];
+ for (;;)
+ {
+ ssize_t rdcount = read (infd, buf, sizeof (buf));
+ if (rdcount < 0)
+ {
+ printf ("read: %m\n");
+ goto err;
+ }
+ if (rdcount == 0)
+ break;
+ char *p = buf;
+ char *end = buf + rdcount;
+ while (p != end)
+ {
+ ssize_t wrcount = write (outfd, buf, end - p);
+ if (wrcount == 0)
+ errno = ENOSPC;
+ if (wrcount <= 0)
+ {
+ printf ("write: %m\n");
+ goto err;
+ }
+ p += wrcount;
+ }
+ }
+ if (fchown (outfd, getuid (), target) < 0)
+ {
+ printf ("fchown (%s): %m\n", execname);
+ goto err;
+ }
+ if (fchmod (outfd, 02750) < 0)
+ {
+ printf ("fchmod (%s): %m\n", execname);
+ goto err;
+ }
+ if (close (outfd) < 0)
+ {
+ printf ("close (outfd): %m\n");
+ goto err;
+ }
+ if (close (infd) < 0)
+ {
+ printf ("close (infd): %m\n");
+ goto err;
+ }
+
+ int kid = fork ();
+ if (kid < 0)
+ {
+ printf ("fork: %m\n");
+ goto err;
+ }
+ if (kid == 0)
+ {
+ /* Child process. */
+ char *args[] = { execname, MAGIC_ARGUMENT, NULL };
+ execve (execname, args, environ);
+ printf ("execve (%s): %m\n", execname);
+ _exit (1);
+ }
+ int status;
+ if (waitpid (kid, &status, 0) < 0)
+ {
+ printf ("waitpid: %m\n");
+ goto err;
+ }
+ if (!WIFEXITED (status) || WEXITSTATUS (status) != MAGIC_STATUS)
+ {
+ printf ("Unexpected exit status %d from child process\n",
+ status);
+ goto err;
+ }
+ ret = 0;
+
+err:
+ if (outfd >= 0)
+ close (outfd);
+ if (infd >= 0)
+ close (infd);
+ if (execname)
+ {
+ unlink (execname);
+ free (execname);
+ }
+ if (dirname)
+ {
+ rmdir (dirname);
+ free (dirname);
+ }
+ return ret;
+}
+
+static int
+do_test (void)
+{
+ if (getenv ("PATH") == NULL)
+ {
+ printf ("PATH not set\n");
+ exit (1);
+ }
+ if (secure_getenv ("PATH") == NULL)
+ {
+ printf ("PATH not set according to secure_getenv\n");
+ exit (1);
+ }
+ if (strcmp (getenv ("PATH"), secure_getenv ("PATH")) != 0)
+ {
+ printf ("PATH mismatch (%s, %s)\n",
+ getenv ("PATH"), secure_getenv ("PATH"));
+ exit (1);
+ }
+
+ gid_t target = choose_gid ();
+ if (target == 0)
+ {
+ fprintf (stderr,
+ "Could not find a suitable GID for user %jd, skipping test\n",
+ (intmax_t) getuid ());
+ exit (0);
+ }
+ return run_executable_sgid (target);
+}
+
+static void
+alternative_main (int argc, char **argv)
+{
+ if (argc == 2 && strcmp (argv[1], MAGIC_ARGUMENT) == 0)
+ {
+ if (getgid () == getegid ())
+ {
+ /* This can happen if the file system is mounted nosuid. */
+ fprintf (stderr, "SGID failed: GID and EGID match (%jd)\n",
+ (intmax_t) getgid ());
+ exit (MAGIC_STATUS);
+ }
+ if (getenv ("PATH") == NULL)
+ {
+ printf ("PATH variable not present\n");
+ exit (3);
+ }
+ if (secure_getenv ("PATH") != NULL)
+ {
+ printf ("PATH variable not filtered out\n");
+ exit (4);
+ }
+ exit (MAGIC_STATUS);
+ }
+}
+
+#define PREPARE alternative_main
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-setcontext.c b/REORG.TODO/stdlib/tst-setcontext.c
new file mode 100644
index 0000000000..20b2ff6f3b
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-setcontext.c
@@ -0,0 +1,244 @@
+/* Copyright (C) 2001-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ucontext.h>
+#include <unistd.h>
+
+static ucontext_t ctx[3];
+
+static int was_in_f1;
+static int was_in_f2;
+
+static char st2[32768];
+
+static void
+f1 (int a0, int a1, int a2, int a3)
+{
+ printf ("start f1(a0=%x,a1=%x,a2=%x,a3=%x)\n", a0, a1, a2, a3);
+
+ if (a0 != 1 || a1 != 2 || a2 != 3 || a3 != -4)
+ {
+ puts ("arg mismatch");
+ exit (-1);
+ }
+
+ if (swapcontext (&ctx[1], &ctx[2]) != 0)
+ {
+ printf ("%s: swapcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ puts ("finish f1");
+ was_in_f1 = 1;
+}
+
+static void
+f2 (void)
+{
+ char on_stack[1];
+
+ puts ("start f2");
+
+ printf ("&on_stack=%p\n", on_stack);
+ if (on_stack < st2 || on_stack >= st2 + sizeof (st2))
+ {
+ printf ("%s: memory stack is not where it belongs!", __FUNCTION__);
+ exit (1);
+ }
+
+ if (swapcontext (&ctx[2], &ctx[1]) != 0)
+ {
+ printf ("%s: swapcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ puts ("finish f2");
+ was_in_f2 = 1;
+}
+
+void
+test_stack (volatile int a, volatile int b,
+ volatile int c, volatile int d)
+{
+ volatile int e = 5;
+ volatile int f = 6;
+ ucontext_t uc;
+
+ /* Test for cases where getcontext is clobbering the callers
+ stack, including parameters. */
+ getcontext (&uc);
+
+ if (a != 1)
+ {
+ printf ("%s: getcontext clobbers parm a\n", __FUNCTION__);
+ exit (1);
+ }
+
+ if (b != 2)
+ {
+ printf ("%s: getcontext clobbers parm b\n", __FUNCTION__);
+ exit (1);
+ }
+
+ if (c != 3)
+ {
+ printf ("%s: getcontext clobbers parm c\n", __FUNCTION__);
+ exit (1);
+ }
+
+ if (d != 4)
+ {
+ printf ("%s: getcontext clobbers parm d\n", __FUNCTION__);
+ exit (1);
+ }
+
+ if (e != 5)
+ {
+ printf ("%s: getcontext clobbers varible e\n", __FUNCTION__);
+ exit (1);
+ }
+
+ if (f != 6)
+ {
+ printf ("%s: getcontext clobbers variable f\n", __FUNCTION__);
+ exit (1);
+ }
+}
+
+volatile int global;
+
+
+static int back_in_main;
+
+
+static void
+check_called (void)
+{
+ if (back_in_main == 0)
+ {
+ puts ("program did not reach main again");
+ _exit (1);
+ }
+}
+
+
+int
+main (void)
+{
+ atexit (check_called);
+
+ char st1[32768];
+ stack_t stack_before, stack_after;
+
+ sigaltstack (NULL, &stack_before);
+
+ puts ("making contexts");
+ if (getcontext (&ctx[1]) != 0)
+ {
+ if (errno == ENOSYS)
+ {
+ back_in_main = 1;
+ exit (0);
+ }
+
+ printf ("%s: getcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+
+ test_stack (1, 2, 3, 4);
+
+ /* Play some tricks with this context. */
+ if (++global == 1)
+ if (setcontext (&ctx[1]) != 0)
+ {
+ printf ("%s: setcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ if (global != 2)
+ {
+ printf ("%s: 'global' not incremented twice\n", __FUNCTION__);
+ exit (1);
+ }
+
+ ctx[1].uc_stack.ss_sp = st1;
+ ctx[1].uc_stack.ss_size = sizeof st1;
+ ctx[1].uc_link = &ctx[0];
+ {
+ ucontext_t tempctx = ctx[1];
+ makecontext (&ctx[1], (void (*) (void)) f1, 4, 1, 2, 3, -4);
+
+ /* Without this check, a stub makecontext can make us spin forever. */
+ if (memcmp (&tempctx, &ctx[1], sizeof ctx[1]) == 0)
+ {
+ puts ("makecontext was a no-op, presuming not implemented");
+ return 0;
+ }
+ }
+
+ if (getcontext (&ctx[2]) != 0)
+ {
+ printf ("%s: second getcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ ctx[2].uc_stack.ss_sp = st2;
+ ctx[2].uc_stack.ss_size = sizeof st2;
+ ctx[2].uc_link = &ctx[1];
+ makecontext (&ctx[2], f2, 0);
+
+ puts ("swapping contexts");
+ if (swapcontext (&ctx[0], &ctx[2]) != 0)
+ {
+ printf ("%s: swapcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ puts ("back at main program");
+ back_in_main = 1;
+
+ sigaltstack (NULL, &stack_after);
+
+ if (was_in_f1 == 0)
+ {
+ puts ("didn't reach f1");
+ exit (1);
+ }
+ if (was_in_f2 == 0)
+ {
+ puts ("didn't reach f2");
+ exit (1);
+ }
+
+ /* Check sigaltstack state is not clobbered as in BZ #16629. */
+ if (stack_before.ss_sp != stack_after.ss_sp)
+ {
+ printf ("stack ss_sp mismatch: %p %p\n",
+ stack_before.ss_sp, stack_after.ss_sp);
+ exit (1);
+ }
+
+ if (stack_before.ss_size != stack_after.ss_size)
+ {
+ printf ("stack ss_size mismatch: %zd %zd\n",
+ stack_before.ss_size, stack_after.ss_size);
+ exit (1);
+ }
+
+ puts ("test succeeded");
+ return 0;
+}
diff --git a/REORG.TODO/stdlib/tst-setcontext2.c b/REORG.TODO/stdlib/tst-setcontext2.c
new file mode 100644
index 0000000000..07fb974c46
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-setcontext2.c
@@ -0,0 +1,230 @@
+/* Testcase checks, if setcontext(), swapcontext() restores signal-mask
+ and if pending signals are delivered after those calls.
+ Copyright (C) 2015-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <signal.h>
+#include <ucontext.h>
+#include <unistd.h>
+
+volatile int global;
+volatile sig_atomic_t handlerCalled;
+
+static void
+check (const char *funcName)
+{
+ sigset_t set;
+
+ /* check if SIGUSR2 is unblocked after setcontext-call. */
+ sigprocmask (SIG_BLOCK, NULL, &set);
+
+ if (sigismember (&set, SIGUSR2) != 0)
+ {
+ printf ("FAIL: SIGUSR2 is blocked after %s.\n", funcName);
+ exit (1);
+ }
+
+ if (sigismember (&set, SIGUSR1) != 1)
+ {
+ printf ("FAIL: SIGUSR1 is not blocked after %s.\n", funcName);
+ exit (1);
+ }
+}
+
+static void
+signalmask (int how, int signum)
+{
+ sigset_t set;
+ sigemptyset (&set);
+ sigaddset (&set, signum);
+ if (sigprocmask (how, &set, NULL) != 0)
+ {
+ printf ("FAIL: sigprocmaks (%d, %d, NULL): %m\n", how, signum);
+ exit (1);
+ }
+}
+
+static void
+signalpending (int signum, const char *msg)
+{
+ sigset_t set;
+ sigemptyset (&set);
+ if (sigpending (&set) != 0)
+ {
+ printf ("FAIL: sigpending: %m\n");
+ exit (1);
+ }
+ if (sigismember (&set, SIGUSR2) != 1)
+ {
+ printf ("FAIL: Signal %d is not pending %s\n", signum, msg);
+ exit (1);
+ }
+}
+
+static void
+handler (int __attribute__ ((unused)) signum)
+{
+ handlerCalled ++;
+}
+
+static int
+do_test (void)
+{
+ ucontext_t ctx, oldctx;
+ struct sigaction action;
+ pid_t pid;
+
+ pid = getpid ();
+
+ /* unblock SIGUSR2 */
+ signalmask (SIG_UNBLOCK, SIGUSR2);
+
+ /* block SIGUSR1 */
+ signalmask (SIG_BLOCK, SIGUSR1);
+
+ /* register handler for SIGUSR2 */
+ action.sa_flags = 0;
+ action.sa_handler = handler;
+ sigemptyset (&action.sa_mask);
+ sigaction (SIGUSR2, &action, NULL);
+
+ if (getcontext (&ctx) != 0)
+ {
+ printf ("FAIL: getcontext: %m\n");
+ exit (1);
+ }
+
+ global++;
+
+ if (global == 1)
+ {
+ puts ("after getcontext");
+
+ /* block SIGUSR2 */
+ signalmask (SIG_BLOCK, SIGUSR2);
+
+ /* send SIGUSR2 to me */
+ handlerCalled = 0;
+ kill (pid, SIGUSR2);
+
+ /* was SIGUSR2 handler called? */
+ if (handlerCalled != 0)
+ {
+ puts ("FAIL: signal handler was called, but signal was blocked.");
+ exit (1);
+ }
+
+ /* is SIGUSR2 pending? */
+ signalpending (SIGUSR2, "before setcontext");
+
+ /* SIGUSR2 will be unblocked by setcontext-call. */
+ if (setcontext (&ctx) != 0)
+ {
+ printf ("FAIL: setcontext: %m\n");
+ exit (1);
+ }
+ }
+ else if (global == 2)
+ {
+ puts ("after setcontext");
+
+ /* check SIGUSR1/2 */
+ check ("setcontext");
+
+ /* was SIGUSR2 handler called? */
+ if (handlerCalled != 1)
+ {
+ puts ("FAIL: signal handler was not called after setcontext.");
+ exit (1);
+ }
+
+ /* block SIGUSR2 */
+ signalmask (SIG_BLOCK, SIGUSR2);
+
+ /* send SIGUSR2 to me */
+ handlerCalled = 0;
+ kill (pid, SIGUSR2);
+
+ /* was SIGUSR2 handler called? */
+ if (handlerCalled != 0)
+ {
+ puts ("FAIL: signal handler was called, but signal was blocked.");
+ exit (1);
+ }
+
+ /* is SIGUSR2 pending? */
+ signalpending (SIGUSR2, "before swapcontext");
+
+ if (swapcontext (&oldctx, &ctx) != 0)
+ {
+ printf ("FAIL: swapcontext: %m\n");
+ exit (1);
+ }
+
+ puts ("after returned from swapcontext");
+
+ if (global != 3)
+ {
+ puts ("FAIL: returned from swapcontext without ctx-context called.");
+ exit (1);
+ }
+
+ puts ("test succeeded");
+ return 0;
+ }
+ else if ( global != 3 )
+ {
+ puts ("FAIL: 'global' not incremented three times");
+ exit (1);
+ }
+
+ puts ("after swapcontext");
+ /* check SIGUSR1/2 */
+ check ("swapcontext");
+
+ /* was SIGUSR2 handler called? */
+ if (handlerCalled != 1)
+ {
+ puts ("FAIL: signal handler was not called after swapcontext.");
+ exit (1);
+ }
+
+ /* check sigmask in old context of swapcontext-call */
+ if (sigismember (&oldctx.uc_sigmask, SIGUSR2) != 1)
+ {
+ puts ("FAIL: SIGUSR2 is not blocked in oldctx.uc_sigmask.");
+ exit (1);
+ }
+
+ if (sigismember (&oldctx.uc_sigmask, SIGUSR1) != 1)
+ {
+ puts ("FAIL: SIGUSR1 is not blocked in oldctx.uc_sigmaks.");
+ exit (1);
+ }
+
+ /* change to old context, which was gathered by swapcontext() call. */
+ setcontext (&oldctx);
+
+ puts ("FAIL: returned from setcontext (&oldctx)");
+ exit (1);
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-setcontext3.c b/REORG.TODO/stdlib/tst-setcontext3.c
new file mode 100644
index 0000000000..414a9a7f41
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-setcontext3.c
@@ -0,0 +1,138 @@
+/* Bug 18125: Verify setcontext calls exit() and not _exit().
+ Copyright (C) 2015-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ucontext.h>
+#include <unistd.h>
+#include <limits.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+/* Please note that depending on the outcome of Bug 18135 this test
+ may become invalid, and instead of testing for calling exit it
+ should be reworked to test for the last context calling
+ pthread_exit(). */
+
+static ucontext_t ctx;
+static char *filename;
+
+/* It is intended that this function does nothing. */
+static void
+cf (void)
+{
+ printf ("called context function\n");
+}
+
+static void
+exit_called (void)
+{
+ int fd;
+ ssize_t res;
+ const char buf[] = "Called exit function\n";
+
+ fd = open (filename, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
+ if (fd == -1)
+ {
+ printf ("FAIL: Unable to create test file %s\n", filename);
+ exit (1);
+ }
+ res = write (fd, buf, sizeof (buf));
+ if (res != sizeof (buf))
+ {
+ printf ("FAIL: Expected to write test file in one write call.\n");
+ exit (1);
+ }
+ res = close (fd);
+ if (res == -1)
+ {
+ printf ("FAIL: Failed to close test file.\n");
+ exit (1);
+ }
+ printf ("PASS: %s", buf);
+}
+
+/* The test expects a filename given by the wrapper calling script.
+ The test then registers an atexit handler that will create the
+ file to indicate that the atexit handler ran. Then the test
+ creates a context, modifies it with makecontext, and sets it.
+ The context has only a single context which then must exit.
+ If it incorrectly exits via _exit then the atexit handler is
+ not run, the file is not created, and the wrapper detects this
+ and fails the test. This test cannot be done using an _exit
+ interposer since setcontext avoids the PLT and calls _exit
+ directly. */
+static int
+do_test (int argc, char **argv)
+{
+ int ret;
+ char st1[32768];
+ ucontext_t tempctx = ctx;
+
+ if (argc < 2)
+ {
+ printf ("FAIL: Test missing filename argument.\n");
+ exit (1);
+ }
+
+ filename = argv[1];
+
+ atexit (exit_called);
+
+ puts ("making contexts");
+ if (getcontext (&ctx) != 0)
+ {
+ if (errno == ENOSYS)
+ {
+ /* Exit with 77 to mark the test as UNSUPPORTED. */
+ printf ("UNSUPPORTED: getcontext not implemented.\n");
+ exit (77);
+ }
+
+ printf ("FAIL: getcontext failed.\n");
+ exit (1);
+ }
+
+ ctx.uc_stack.ss_sp = st1;
+ ctx.uc_stack.ss_size = sizeof (st1);
+ ctx.uc_link = 0;
+ makecontext (&ctx, cf, 0);
+
+ /* Without this check, a stub makecontext can make us spin forever. */
+ if (memcmp (&tempctx, &ctx, sizeof ctx) == 0)
+ {
+ puts ("UNSUPPORTED: makecontext was a no-op, presuming not implemented");
+ exit (77);
+ }
+
+ ret = setcontext (&ctx);
+ if (ret != 0)
+ {
+ printf ("FAIL: setcontext returned with %d and errno of %d.\n", ret, errno);
+ exit (1);
+ }
+
+ printf ("FAIL: Impossibly returned to main.\n");
+ exit (1);
+}
+
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-setcontext3.sh b/REORG.TODO/stdlib/tst-setcontext3.sh
new file mode 100644
index 0000000000..158d0dc0a8
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-setcontext3.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+# Bug 18125: Test the exit functionality of setcontext().
+# Copyright (C) 2015-2017 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+
+# The GNU C Library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <http://www.gnu.org/licenses/>.
+
+set -e
+
+common_objpfx=$1
+test_program_prefix_before_env=$2
+run_program_env=$3
+test_program_prefix_after_env=$4
+objpfx=$5
+
+test_pre="${test_program_prefix_before_env} ${run_program_env}"
+test="${test_program_prefix_after_env} ${objpfx}tst-setcontext3"
+out=${objpfx}tst-setcontext3.out
+
+cleanup() {
+ rm -f $tempfile
+}
+trap cleanup 0
+
+tempfile=$(mktemp "tst-setcontext3.XXXXXXXXXX")
+
+# We want to run the test program and see if secontext called
+# exit() and wrote out the test file we specified. If the
+# test exits with a non-zero status this will fail because we
+# are using `set -e`.
+$test_pre $test "$tempfile"
+
+# Look for resulting file.
+if [ -e "$tempfile" ]; then
+ echo "PASS: tst-setcontext3 an exit() and created $tempfile"
+ exit 0
+else
+ echo "FAIL: tst-setcontext3 did not create $tempfile"
+ exit 1
+fi
diff --git a/REORG.TODO/stdlib/tst-strfmon_l.c b/REORG.TODO/stdlib/tst-strfmon_l.c
new file mode 100644
index 0000000000..49fa31907e
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strfmon_l.c
@@ -0,0 +1,220 @@
+/* Test locale dependence of strfmon_l.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <monetary.h>
+#include <string.h>
+#include <stdlib.h>
+#include <locale.h>
+
+static const char *const en_us_name = "en_US.ISO-8859-1";
+
+/* Locale value to be used by tests. */
+static locale_t loc;
+static const char *loc_name;
+
+/* Set the global locale to GLOBAL_NAME, and the locale referenced by
+ the loc variable above to LOCAL_NAME. */
+static void
+init_loc (const char *global_name, const char *local_name)
+{
+ loc = newlocale (LC_ALL_MASK, local_name, 0);
+ if (loc == 0)
+ {
+ printf ("error: newlocale (%s): %m\n", local_name);
+ abort ();
+ }
+ loc_name = local_name;
+
+ if (setlocale (LC_ALL, global_name) == NULL)
+ {
+ printf ("error: setlocale (%s): %m\n", global_name);
+ abort ();
+ }
+}
+
+/* Expected strings for a positive or negative value. */
+struct testcase
+{
+ const char *i; /* %i */
+ const char *n; /* %n */
+ const char *i_ungrouped; /* %^i */
+ const char *n_ungrouped; /* %^n */
+};
+
+/* Collected expected strings for both positive and negative
+ values. */
+struct testcase_pair
+{
+ struct testcase positive; /* 1234567.89 */
+ struct testcase negative; /* -1234567.89 */
+};
+
+static bool errors;
+
+/* Test one value using the locale loc. */
+static void
+test_one (const char *format, double value, const char *expected)
+{
+ static char actual[64];
+ int result = strfmon_l (actual, sizeof (actual), loc, format, value);
+ if (result < 0)
+ {
+ printf ("error: locale %s, format \"%s\", value %g: strfmon_l: %m\n",
+ loc_name, format, value);
+ errors = true;
+ }
+ else if (strcmp (actual, expected) != 0)
+ {
+ printf ("error: locale %s, format \"%s\", value %g: mismatch\n",
+ loc_name, format, value);
+ printf ("error: expected: \"%s\"\n", expected);
+ printf ("error: actual: \"%s\"\n", actual);
+ errors = true;
+ }
+}
+
+static void
+test_pair (const struct testcase_pair *pair)
+{
+ double positive = 1234567.89;
+ test_one ("%i", positive, pair->positive.i);
+ test_one ("%n", positive, pair->positive.n);
+ test_one ("%^i", positive, pair->positive.i_ungrouped);
+ test_one ("%^n", positive, pair->positive.n_ungrouped);
+ double negative = -1234567.89;
+ test_one ("%i", negative, pair->negative.i);
+ test_one ("%n", negative, pair->negative.n);
+ test_one ("%^i", negative, pair->negative.i_ungrouped);
+ test_one ("%^n", negative, pair->negative.n_ungrouped);
+}
+
+static const struct testcase_pair en_us =
+ {
+ {
+ "USD 1,234,567.89", "$1,234,567.89",
+ "USD 1234567.89", "$1234567.89"
+ },
+ {
+ "-USD 1,234,567.89", "-$1,234,567.89",
+ "-USD 1234567.89", "-$1234567.89"
+ }
+ };
+
+static void
+test_en_us (const char *other_name)
+{
+ init_loc (other_name, en_us_name);
+ test_pair (&en_us);
+ freelocale (loc);
+}
+
+struct locale_pair
+{
+ const char *locale_name;
+ struct testcase_pair pair;
+};
+
+static const struct locale_pair tests[] =
+ {
+ {
+ "de_DE.UTF-8",
+ {
+ {
+ "1.234.567,89 EUR", "1.234.567,89 \u20ac",
+ "1234567,89 EUR", "1234567,89 \u20ac"
+ },
+ {
+ "-1.234.567,89 EUR", "-1.234.567,89 \u20ac",
+ "-1234567,89 EUR", "-1234567,89 \u20ac"
+ }
+ },
+ },
+ {
+ "tg_TJ.UTF-8",
+ {
+ {
+ "1 234 567.89 TJS", "1 234 567.89 \u0440\u0443\u0431",
+ "1234567.89 TJS", "1234567.89 \u0440\u0443\u0431"
+ },
+ {
+ "-1 234 567.89 TJS", "-1 234 567.89 \u0440\u0443\u0431",
+ "-1234567.89 TJS", "-1234567.89 \u0440\u0443\u0431"
+ }
+ }
+ },
+ {
+ "te_IN.UTF-8",
+ {
+ {
+ "INR12,34,567.89", "\u20b912,34,567.89",
+ "INR1234567.89", "\u20b91234567.89"
+ },
+ {
+ "-INR12,34,567.89", "-\u20b912,34,567.89",
+ "-INR1234567.89", "-\u20b91234567.89"
+ }
+ }
+ },
+ {
+ "bn_IN.UTF-8",
+ {
+ {
+ "INR 12,345,67.89", "\u20b9 12,345,67.89",
+ "INR 1234567.89", "\u20b9 1234567.89"
+ },
+ {
+ "-INR 12,345,67.89", "-\u20b9 12,345,67.89",
+ "-INR 1234567.89", "-\u20b9 1234567.89"
+ }
+ }
+ },
+ {
+ "el_GR.UTF-8",
+ {
+ {
+ "1.234.567,89EUR", "1.234.567,89\u20ac",
+ "1234567,89EUR", "1234567,89\u20ac"
+ },
+ {
+ "-EUR1.234.567,89", "-\u20ac1.234.567,89",
+ "-EUR1234567,89", "-\u20ac1234567,89",
+ }
+ }
+ },
+ {}
+ };
+
+static int
+do_test (void)
+{
+ for (const struct locale_pair *test = tests;
+ test->locale_name != NULL; ++test)
+ {
+ init_loc (en_us_name, test->locale_name);
+ test_pair (&test->pair);
+ freelocale (loc);
+ test_en_us (test->locale_name);
+ }
+
+ return errors;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strfrom-locale.c b/REORG.TODO/stdlib/tst-strfrom-locale.c
new file mode 100644
index 0000000000..f01b42d575
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strfrom-locale.c
@@ -0,0 +1,91 @@
+/* Tests for strfromf, strfromd, strfroml functions.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "tst-strfrom.h"
+
+static const struct test tests[] = {
+ TEST ("12,345000", "%f", 50, 9, 12.345),
+ TEST ("9,999", "%.3f", 50, 5, 9.999),
+ TEST ("0,125000", "%f", 50, 8, .125),
+ TEST ("0,000000", "%f", 50, 8, .0),
+ TEST ("0", "%g", 50, 1, .0),
+ TEST ("9,900000", "%f", 50, 8, 9.9),
+ TEST ("9,1", "%.5f", 4, 7, 9.123456),
+ TEST ("9,91235", "%g", 50, 7, 9.91234567812345678),
+ TEST ("79,8765", "%G", 50, 7, 79.8765432111),
+ TEST ("79,9", "%.3g", 50, 4, 79.8765432111),
+ TEST ("1,000000e+38", "%e", 50, 12, 1e+38),
+ TEST ("1,000000e+38", "%e", 50, 12, 1e38),
+ TEST ("-1,000000e-37", "%e", 50, 13, -1e-37),
+ TEST ("1,000000e-37", "%e", 50, 12, 0.00000001e-29),
+ TEST ("1,000000e-37", "%e", 50, 12, 1.000000e-37),
+ TEST ("5,900000e-16", "%e", 50, 12, 5.9e-16),
+ TEST ("1,234500e+20", "%e", 50, 12, 12.345e19),
+ TEST ("1,000000e+05", "%e", 50, 12, 1e5),
+ TEST ("-NAN", "%G", 50, 4, -NAN_),
+ TEST ("-inf", "%g", 50, 4, -INF),
+ TEST ("inf", "%g", 50, 3, INF)
+};
+/* Tests with buffer size small. */
+static const struct test stest[] = {
+ TEST ("1234", "%g", 5, 7, 12345.345),
+ TEST ("0,12", "%f", 5, 8, .125),
+ TEST ("9,99", "%.3f", 5, 5, 9.999),
+ TEST ("100", "%g", 5, 3, 1e2)
+};
+/* Hexadecimal tests. */
+static const struct htests htest[] = {
+ HTEST ("%a", { "0x1,ffp+6", "0x3,fep+5", "0x7,fcp+4", "0xf,f8p+3" },
+ 0x1.ffp+6),
+ HTEST ("%a", { "0x1,88p+4", "0x3,1p+3", "0x6,2p+2", "0xc,4p+1" },
+ 0x1.88p+4),
+ HTEST ("%A", { "-0X1,88P+5", "-0X3,1P+4", "-0X6,2P+3", "-0XC,4P+2" },
+ -0x1.88p+5),
+ HTEST ("%a", { "0x1,44p+10", "0x2,88p+9", "0x5,1p+8", "0xa,2p+7" },
+ 0x1.44p+10),
+ HTEST ("%a", { "0x1p-10", "0x2p-11", "0x4p-12", "0x8p-13" },
+ 0x0.0040p+0),
+ HTEST ("%a", { "0x1,4p+3", "0x2,8p+2", "0x5p+1", "0xap+0" },
+ 10.0)
+};
+
+GEN_TEST_STRTOD_FOREACH (TEST_STRFROM)
+
+static int
+test_locale (const char *locale)
+{
+ printf ("Testing in locale: %s\n", locale);
+ if (setlocale (LC_ALL, locale) == NULL)
+ {
+ printf ("Cannot set locale %s\n", locale);
+ }
+ return STRTOD_TEST_FOREACH (test_);
+}
+
+static int
+do_test (void)
+{
+ int result = 0;
+ result += test_locale ("de_DE.UTF-8");
+ result += test_locale ("tr_TR.ISO-8859-9");
+ result += test_locale ("tr_TR.UTF-8");
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strfrom.c b/REORG.TODO/stdlib/tst-strfrom.c
new file mode 100644
index 0000000000..5aa54fa7cb
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strfrom.c
@@ -0,0 +1,91 @@
+/* Tests for strfromf, strfromd, strfroml functions.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "tst-strfrom.h"
+
+static const struct test tests[] = {
+ TEST ("12.345000", "%f", 50, 9, 12.345),
+ TEST ("9.999", "%.3f", 50, 5, 9.999),
+ TEST ("0.125000", "%f", 50, 8, .125),
+ TEST ("0.000000", "%f", 50, 8, .0),
+ TEST ("0", "%g", 50, 1, .0),
+ TEST ("9.900000", "%f", 50, 8, 9.9),
+ TEST ("9.1", "%.5f", 4, 7, 9.123456),
+ TEST ("9.91235", "%g", 50, 7, 9.91234567812345678),
+ TEST ("79.8765", "%G", 50, 7, 79.8765432111),
+ TEST ("79.9", "%.3g", 50, 4, 79.8765432111),
+ TEST ("1.000000e+38", "%e", 50, 12, 1e+38),
+ TEST ("1.000000e+38", "%e", 50, 12, 1e38),
+ TEST ("-1.000000e-37", "%e", 50, 13, -1e-37),
+ TEST ("1.000000e-37", "%e", 50, 12, 0.00000001e-29),
+ TEST ("1.000000e-37", "%e", 50, 12, 1.000000e-37),
+ TEST ("5.900000e-16", "%e", 50, 12, 5.9e-16),
+ TEST ("1.234500e+20", "%e", 50, 12, 12.345e19),
+ TEST ("1.000000e+05", "%e", 50, 12, 1e5),
+ TEST ("-NAN", "%G", 50, 4, -NAN_),
+ TEST ("-inf", "%g", 50, 4, -INF),
+ TEST ("inf", "%g", 50, 3, INF)
+};
+/* Tests with buffer size small. */
+static const struct test stest[] = {
+ TEST ("1234", "%g", 5, 7, 12345.345),
+ TEST ("0.12", "%f", 5, 8, .125),
+ TEST ("9.99", "%.3f", 5, 5, 9.999),
+ TEST ("100", "%g", 5, 3, 1e2)
+};
+/* Hexadecimal tests. */
+static const struct htests htest[] = {
+ HTEST ("%a", { "0x1.ffp+6", "0x3.fep+5", "0x7.fcp+4", "0xf.f8p+3" },
+ 0x1.ffp+6),
+ HTEST ("%a", { "0x1.88p+4", "0x3.1p+3", "0x6.2p+2", "0xc.4p+1" },
+ 0x1.88p+4),
+ HTEST ("%A", { "-0X1.88P+5", "-0X3.1P+4", "-0X6.2P+3", "-0XC.4P+2" },
+ -0x1.88p+5),
+ HTEST ("%a", { "0x1.44p+10", "0x2.88p+9", "0x5.1p+8", "0xa.2p+7" },
+ 0x1.44p+10),
+ HTEST ("%a", { "0x1p-10", "0x2p-11", "0x4p-12", "0x8p-13" },
+ 0x0.0040p+0),
+ HTEST ("%a", { "0x1.4p+3", "0x2.8p+2", "0x5p+1", "0xap+0" },
+ 10.0)
+};
+
+GEN_TEST_STRTOD_FOREACH (TEST_STRFROM)
+
+static int
+test_locale (const char *locale)
+{
+ printf ("Testing in locale: %s\n", locale);
+ if (setlocale (LC_ALL, locale) == NULL)
+ {
+ printf ("Cannot set locale %s\n", locale);
+ }
+ return STRTOD_TEST_FOREACH (test_);
+}
+
+static int
+do_test (void)
+{
+ int result = 0;
+ result += test_locale ("C");
+ result += test_locale ("en_US.ISO-8859-1");
+ result += test_locale ("en_US.UTF-8");
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strfrom.h b/REORG.TODO/stdlib/tst-strfrom.h
new file mode 100644
index 0000000000..86c0c19392
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strfrom.h
@@ -0,0 +1,120 @@
+/* Tests for strfromf, strfromd, strfroml functions.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <float.h>
+#include <math.h>
+#include <locale.h>
+
+#include "tst-strtod.h"
+
+#define _CONCAT(a, b) a ## b
+#define CONCAT(a, b) _CONCAT (a, b)
+
+/* Generator to create an FTYPE member variabled named FSUF
+ * used to populate struct member variables. */
+#define FTYPE_MEMBER(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
+ FTYPE FSUF;
+
+#define STRUCT_FOREACH_FLOAT_FTYPE GEN_TEST_STRTOD_FOREACH (FTYPE_MEMBER)
+
+#define ENTRY(FSUF, FTYPE, FTOSTR, LSUF, CSUF, ...) \
+ CONCAT (__VA_ARGS__, LSUF),
+/* This is hacky way around the seemingly unavoidable macro
+ * expansion of the INFINITY or HUGE_VAL like macros in the
+ * above. It is assumed the compiler will implicitly convert
+ * the infinity correctly. */
+#define INF INFINITY + 0.0
+#define NAN_ NAN + 0.0
+
+struct test_input
+{
+ STRUCT_FOREACH_FLOAT_FTYPE
+};
+struct test {
+ const char *s;
+ const char *fmt;
+ int size;
+ int rc;
+ struct test_input t;
+};
+#define TEST(s, fmt, size, rc, val) \
+ { \
+ s, fmt, size, rc, { GEN_TEST_STRTOD_FOREACH (ENTRY, val) } \
+ }
+/* Hexadecimal tests. */
+struct htests
+{
+ const char *fmt;
+ const char *exp[4];
+ struct test_input t;
+};
+#define HTEST(fmt, exp1, exp2, exp3, exp4, val) \
+ { \
+ fmt, exp1, exp2, exp3, exp4, { GEN_TEST_STRTOD_FOREACH (ENTRY, val) } \
+ }
+
+#define TEST_STRFROM(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
+static int \
+test_ ## FSUF (void) \
+{ \
+ char buf[50], sbuf[5]; \
+ int status = 0; \
+ int i, rc = 0, rc1 = 0; \
+ for (i = 0; i < sizeof (stest) / sizeof (stest[0]); i++) \
+ { \
+ rc = FTOSTR (sbuf, stest[i].size, stest[i].fmt, stest[i].t.FSUF); \
+ rc1 = (strcmp (sbuf, stest[i].s) != 0) || (rc != stest[i].rc); \
+ if (rc1) \
+ { \
+ printf (#FTOSTR ": got %s (%d), expected %s (%d)\n", \
+ sbuf, rc, stest[i].s, stest[i].rc); \
+ status++; \
+ } \
+ } \
+ for (i = 0; i < sizeof (tests) / sizeof (tests[0]); i++) \
+ { \
+ rc = FTOSTR (buf, tests[i].size, tests[i].fmt, tests[i].t.FSUF); \
+ rc1 = (strcmp (buf, tests[i].s) != 0) || (rc != tests[i].rc); \
+ if (rc1) \
+ { \
+ printf (#FTOSTR ": got %s (%d), expected %s (%d)\n", \
+ buf, rc, tests[i].s, tests[i].rc); \
+ status++; \
+ } \
+ } \
+ for (i = 0; i < sizeof (htest) / sizeof (htest[0]); i++) \
+ { \
+ rc = FTOSTR (buf, 50, htest[i].fmt, htest[i].t.FSUF); \
+ if (strcmp (buf, htest[i].exp[0]) == 0 || \
+ strcmp (buf, htest[i].exp[1]) == 0 || \
+ strcmp (buf, htest[i].exp[2]) == 0 || \
+ strcmp (buf, htest[i].exp[3]) == 0) \
+ continue; \
+ else \
+ { \
+ printf (#FTOSTR ": got %s (%d), expected %s or %s or %s " \
+ "or %s\n", buf, rc, htest[i].exp[0], htest[i].exp[1], \
+ htest[i].exp[2], htest[i].exp[3]); \
+ status++; \
+ } \
+ } \
+ return status; \
+}
diff --git a/REORG.TODO/stdlib/tst-strtod-nan-locale-main.c b/REORG.TODO/stdlib/tst-strtod-nan-locale-main.c
new file mode 100644
index 0000000000..8044dad89f
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-nan-locale-main.c
@@ -0,0 +1,89 @@
+/* Test strtod functions work with all ASCII letters in NAN(...) in
+ Turkish locales (bug 19266).
+ Copyright (C) 2015-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <locale.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <wchar.h>
+
+#define STR_(X) #X
+#define STR(X) STR_(X)
+#define FNPFXS STR (FNPFX)
+#define CONCAT_(X, Y) X ## Y
+#define CONCAT(X, Y) CONCAT_ (X, Y)
+#define FNX(FN) CONCAT (FNPFX, FN)
+
+#define TEST(LOC, STR, FN, TYPE) \
+ do \
+ { \
+ CHAR *ep; \
+ TYPE val = FNX (FN) (STR, &ep); \
+ if (isnan (val) && *ep == 0) \
+ printf ("PASS: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR); \
+ else \
+ { \
+ printf ("FAIL: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR); \
+ result = 1; \
+ } \
+ } \
+ while (0)
+
+static int
+test_one_locale (const char *loc)
+{
+ if (setlocale (LC_ALL, loc) == NULL)
+ {
+ printf ("setlocale (LC_ALL, \"%s\") failed\n", loc);
+ return 1;
+ }
+ int result = 0;
+ for (int i = 10; i < 36; i++)
+ {
+ CHAR s[7];
+ s[0] = L_('N');
+ s[1] = L_('A');
+ s[2] = L_('N');
+ s[3] = L_('(');
+ s[4] = L_('A') + i - 10;
+ s[5] = L_(')');
+ s[6] = 0;
+ TEST (loc, s, f, float);
+ TEST (loc, s, d, double);
+ TEST (loc, s, ld, long double);
+ s[4] = L_('a') + i - 10;
+ TEST (loc, s, f, float);
+ TEST (loc, s, d, double);
+ TEST (loc, s, ld, long double);
+ }
+ return result;
+}
+
+static int
+do_test (void)
+{
+ int result = 0;
+ result |= test_one_locale ("C");
+ result |= test_one_locale ("tr_TR.UTF-8");
+ result |= test_one_locale ("tr_TR.ISO-8859-9");
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod-nan-locale.c b/REORG.TODO/stdlib/tst-strtod-nan-locale.c
new file mode 100644
index 0000000000..cf0820df75
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-nan-locale.c
@@ -0,0 +1,25 @@
+/* Test strtod functions work with all ASCII letters in NAN(...) in
+ Turkish locales (bug 19266). Narrow string version.
+ Copyright (C) 2015-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define CHAR char
+#define SFMT "\"%s\""
+#define FNPFX strto
+#define L_(C) C
+
+#include <tst-strtod-nan-locale-main.c>
diff --git a/REORG.TODO/stdlib/tst-strtod-overflow.c b/REORG.TODO/stdlib/tst-strtod-overflow.c
new file mode 100644
index 0000000000..c1eb561dec
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-overflow.c
@@ -0,0 +1,49 @@
+/* Test for integer/buffer overflow in strtod.
+ Copyright (C) 2012-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define EXPONENT "e-2147483649"
+#define SIZE 214748364
+
+static int
+do_test (void)
+{
+ char *p = malloc (1 + SIZE + sizeof (EXPONENT));
+ if (p == NULL)
+ {
+ puts ("malloc failed, cannot test for overflow");
+ return 0;
+ }
+ p[0] = '1';
+ memset (p + 1, '0', SIZE);
+ memcpy (p + 1 + SIZE, EXPONENT, sizeof (EXPONENT));
+ double d = strtod (p, NULL);
+ if (d != 0)
+ {
+ printf ("strtod returned wrong value: %a\n", d);
+ return 1;
+ }
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#define TIMEOUT 30
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod-round-data b/REORG.TODO/stdlib/tst-strtod-round-data
new file mode 100644
index 0000000000..cb908036fd
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-round-data
@@ -0,0 +1,150 @@
+3.518437208883201171875E+013
+1.00000005960464477550
+1.0000000596046447755
+1.000000059604644776
+1.000000059604644775
+1.00000005960464478
+1.0000000596046448
+1.000000059604645
+1.00000005960464
+1.0000000596046
+1.000000059605
+1.00000005960
+1.0000000596
+1.000000060
+1.00000006
+1.0000001
+1.000000
+1.00000000000000011113
+1.00000000000000011103
+1.00000000000000011102
+1.00000000000000011101
+1.0000000000000001111
+1.000000000000000111
+1.00000000000000011
+1.0000000000000001
+3929201589819414e-25
+0.000000000000000000000000000000000000000000002101947696487225606385594374934874196920392912814773657635602425834686624028790902229957282543182373046875
+1.00000005960464477539062499
+1.000000059604644775390625
+1.00000005960464477539062501
+1.00000011920928955078125
+1.00000017881393432617187499
+1.000000178813934326171875
+1.00000017881393432617187501
+1.0000002384185791015625
+1.08420217248550443400745280086994171142578125e-19
+1.0842022371089897897127399001987457793916291848290711641311645507812499e-19
+1.08420223710898978971273990019874577939162918482907116413116455078125e-19
+1.0842022371089897897127399001987457793916291848290711641311645507812501e-19
+1.0842023017324751454180269995275498473574771196581423282623291015625e-19
+1.0842023663559605011233140988563539153233250544872134923934936523437499e-19
+1.08420236635596050112331409885635391532332505448721349239349365234375e-19
+1.0842023663559605011233140988563539153233250544872134923934936523437501e-19
+1.084202430979445856828601198185157983289172989316284656524658203125e-19
+7.52316384526264005099991383822237233803945956334136013765601092018187046051025390625e-37
+7.5231642936781486349413765338158389908126215730251815381410578824437213052434003657253924757242202758789062499e-37
+7.52316429367814863494137653381583899081262157302518153814105788244372130524340036572539247572422027587890625e-37
+7.5231642936781486349413765338158389908126215730251815381410578824437213052434003657253924757242202758789062501e-37
+7.5231647420936572188828392294093056435857835827090029386261048447055721499765468252007849514484405517578125e-37
+7.5231651905091658028243019250027722963589455923928243391111518069674229947096932846761774271726608276367187499e-37
+7.52316519050916580282430192500277229635894559239282433911115180696742299470969328467617742717266082763671875e-37
+7.5231651905091658028243019250027722963589455923928243391111518069674229947096932846761774271726608276367187501e-37
+7.523165638924674386765764620596238949132107602076645739596198769229273839442839744151569902896881103515625e-37
+340282356779733661637539395458142568447.999
+340282356779733661637539395458142568448
+340282356779733661637539395458142568448.001
+-340282356779733661637539395458142568447.999
+-340282356779733661637539395458142568448
+-340282356779733661637539395458142568448.001
+179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497791.999
+179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792
+179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792.001
+-179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497791.999
+-179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792
+-179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792.001
+1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918527.999
+1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918528
+1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918528.001
+-1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918527.999
+-1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918528
+-1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918528.001
+1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715391.999
+1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715392
+1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715392.001
+-1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715391.999
+-1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715392
+-1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715392.001
+2.10194769648722560638559437493487419692039291281477365763560242583468662402879090222995728254318237304687499e-45
+2.101947696487225606385594374934874196920392912814773657635602425834686624028790902229957282543182373046875e-45
+2.10194769648722560638559437493487419692039291281477365763560242583468662402879090222995728254318237304687501e-45
+-2.10194769648722560638559437493487419692039291281477365763560242583468662402879090222995728254318237304687499e-45
+-2.101947696487225606385594374934874196920392912814773657635602425834686624028790902229957282543182373046875e-45
+-2.10194769648722560638559437493487419692039291281477365763560242583468662402879090222995728254318237304687501e-45
+3.50324616081204267730932395822479032820065485469128942939267070972447770671465150371659547090530395507812499e-45
+3.503246160812042677309323958224790328200654854691289429392670709724477706714651503716595470905303955078125e-45
+3.50324616081204267730932395822479032820065485469128942939267070972447770671465150371659547090530395507812501e-45
+-3.50324616081204267730932395822479032820065485469128942939267070972447770671465150371659547090530395507812499e-45
+-3.503246160812042677309323958224790328200654854691289429392670709724477706714651503716595470905303955078125e-45
+-3.50324616081204267730932395822479032820065485469128942939267070972447770671465150371659547090530395507812501e-45
+7.410984687618698162648531893023320585475897039214871466383785237510132609053131277979497545424539885696948470431685765963899850655339096945981621940161728171894510697854671067917687257517734731555330779540854980960845750095811137303474765809687100959097544227100475730780971111893578483867565399878350301522805593404659373979179073872386829939581848166016912201945649993128979841136206248449867871357218035220901702390328579173252022052897402080290685402160661237554998340267130003581248647904138574340187552090159017259254714629617513415977493871857473787096164563890871811984127167305601704549300470526959016576377688490826798697257336652176556794107250876433756084600398490497214911746308553955635418864151316847843631308023759629577398300170898437499e-324
+7.4109846876186981626485318930233205854758970392148714663837852375101326090531312779794975454245398856969484704316857659638998506553390969459816219401617281718945106978546710679176872575177347315553307795408549809608457500958111373034747658096871009590975442271004757307809711118935784838675653998783503015228055934046593739791790738723868299395818481660169122019456499931289798411362062484498678713572180352209017023903285791732520220528974020802906854021606612375549983402671300035812486479041385743401875520901590172592547146296175134159774938718574737870961645638908718119841271673056017045493004705269590165763776884908267986972573366521765567941072508764337560846003984904972149117463085539556354188641513168478436313080237596295773983001708984375e-324
+7.410984687618698162648531893023320585475897039214871466383785237510132609053131277979497545424539885696948470431685765963899850655339096945981621940161728171894510697854671067917687257517734731555330779540854980960845750095811137303474765809687100959097544227100475730780971111893578483867565399878350301522805593404659373979179073872386829939581848166016912201945649993128979841136206248449867871357218035220901702390328579173252022052897402080290685402160661237554998340267130003581248647904138574340187552090159017259254714629617513415977493871857473787096164563890871811984127167305601704549300470526959016576377688490826798697257336652176556794107250876433756084600398490497214911746308553955635418864151316847843631308023759629577398300170898437501e-324
+-7.410984687618698162648531893023320585475897039214871466383785237510132609053131277979497545424539885696948470431685765963899850655339096945981621940161728171894510697854671067917687257517734731555330779540854980960845750095811137303474765809687100959097544227100475730780971111893578483867565399878350301522805593404659373979179073872386829939581848166016912201945649993128979841136206248449867871357218035220901702390328579173252022052897402080290685402160661237554998340267130003581248647904138574340187552090159017259254714629617513415977493871857473787096164563890871811984127167305601704549300470526959016576377688490826798697257336652176556794107250876433756084600398490497214911746308553955635418864151316847843631308023759629577398300170898437499e-324
+-7.4109846876186981626485318930233205854758970392148714663837852375101326090531312779794975454245398856969484704316857659638998506553390969459816219401617281718945106978546710679176872575177347315553307795408549809608457500958111373034747658096871009590975442271004757307809711118935784838675653998783503015228055934046593739791790738723868299395818481660169122019456499931289798411362062484498678713572180352209017023903285791732520220528974020802906854021606612375549983402671300035812486479041385743401875520901590172592547146296175134159774938718574737870961645638908718119841271673056017045493004705269590165763776884908267986972573366521765567941072508764337560846003984904972149117463085539556354188641513168478436313080237596295773983001708984375e-324
+-7.410984687618698162648531893023320585475897039214871466383785237510132609053131277979497545424539885696948470431685765963899850655339096945981621940161728171894510697854671067917687257517734731555330779540854980960845750095811137303474765809687100959097544227100475730780971111893578483867565399878350301522805593404659373979179073872386829939581848166016912201945649993128979841136206248449867871357218035220901702390328579173252022052897402080290685402160661237554998340267130003581248647904138574340187552090159017259254714629617513415977493871857473787096164563890871811984127167305601704549300470526959016576377688490826798697257336652176556794107250876433756084600398490497214911746308553955635418864151316847843631308023759629577398300170898437501e-324
+5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687499e-4951
+5.46779929782371190379260890042912972459857622354034501558147073054255753295009660521434106293874080779587102102080529665295047844893304825496026211338471350822573387176689751785383789570845033963493234384897511609341047969033029090288686119993125921652327780757456908215307313367394295878957740232139393310129853319126610211888963060953233950845785422003199631793594071800032514400843804841615045854626840829469327828294881838298175674523144370769439505327077912524046992686788101985028712502357968555779098305597496288175991948375220290368919956488030568463545206536359579198829053635210070171697414632960443922662694334080526864190176997186277619487638560405926908417212393004914459916660510317558023267203296664540665686303143487355117536394182579842533190638252470657276648523287454223056426260916178239688724389624700924406883725156778322327128669248001067971134780240835161999919912749368941130062333775184713893949842620045030584554856591000906652415254548036281829022414017017836373531792968500569736393059459388134289532878925936202911959860111289900618887987637185487890257175376747802810055833471650478460459250779148245153313351312860635744071818212363779076932092244234906632899168786207255077931639313903720118757997293301622787489850525574323330053349895193815663640653261384657614561732314168448072640907418419722475454249088439281362536533088134879943284462483896082614443915736191774429072907311631885819175882194201070472653674851414139198108859096891122440647971063242952915458929379913214790617434914900609409461282745336576821301251695869305718994035511225062977631807957323251343409893311558937242893589182127073929977680322999972072084511129714257799395078371652632557642689712118195363229932217741231347266655794602658713781865895628587618356133445842690980622757869697298305457864854014077743134149549581616770960047019414114115927554858644718705151733262444646312957015720874401831783399876629267632412206980788226617090546010735234775446535427950204682560784093064091008748868287818605298248793439879457512520813143459903135506837923488146278624413240301557305921665812510099227873245904315487345753286636286503807226030243834125646514462721175610422077384131141310997310167289350231522394313116195338483765836875091084530867301962551116953524641866782219275647577303198252230493416188536313334782412272272680845833966884362299362668540114271927670393635174916595231338524725341041244411123466156968910970701214636522586812703780765383816975942646584796378630871592938388807529281755454082628134037935686954169983885723045287488247562656656838905184226961694223388061375323047846826624482079286817404761883437391178335259163868151357930349068061174131050087191978828376147382620503202915394941049520564716066454820461766340754590215525559595903549562621278099530136795125074514242718392219467940568610559805583630337329057723569860511809664741164231921947415724386492152042297812796203704453738513487869185273997856308082426571227053818066616162711321820177977936612440784457475475356233845487698185296555392790365032340724558109915880751818176959751731101364826598545575062030580805510188732031382604511098551005267200735661262096661256044824137056119967967779273328271035688633522914992613122903551437420180422544707071078472935932052340497748391917547810304969780910060995596752409667301101676249036106564732671055561556337835940895462611076531105318082794457577243991861203875486751486321760491907016803052102243880722619748067919226364128975269527936779466226741495770848035680512429340764509429270927056845470429154903231124579718536587607255881903776664771069031066938472788476460322012930233295033487307239472187974104523339108479138928271958145518583355195189390314460933853291828207141736579466617460059018668855897329226526045739728421972311873652633819589252279700383580649872482332717064626876511433504720180433213145347598195242033084909143585968861500534066295124347881553551091005403198578135356959232734262569115529775393942099186306684666328819296619712127724446251513719534288754911396839196870087240104752172553479156988209602152172573903085602353234630969464420805480187541663697061615897052158736871663656287877965014700568701277294647143621722168024410452769115970094432811353897291302226031856656464346619476276280777232193768927273861205192875774054105101149361515027529971227502627819113726259972234152835169954792656314857994567825617347666484628496410640971818182042794985528278253841862020655169993625733881361630774771266021694104359050140770498084974090253693257957652720666502780042003578789909113749828579771084884825283544063138938642114971057650305046009822534888054745317987421433744650802400305823700866991679376510383079097061393271193254188545464782857356545416354777903469647826173542650507678783352302721948966801419867450746302258931065735595588435458411860251695316041515884813891649489148235939442871333362636803581913695403219306498244714254851377779848235254021151511710933136132513506853438248590522201268915519660183559208727757248071287690032431294868087337963504976682551164851571910118588306438983236282234720992802435831644343483470149103980044398219705082804408727593958279432709850087691435623519380914762150835481641373335418838088700191162340990134529298079501516522974364360061496849397757812346609541561544786426941760385242778104838331497986813457080891521791939794631694023406117934862723018080732675346126855938595967878668842110313414179033917498253204546635083703852518317784773110170897293611521619288153898185799835444909828917340811313123097443309606660312914517408855034585438849563676549437992646003145318154279326911078747823286547592935758034819293619617810739585020754384990706331937996993116942871832994234753398176556080587247232218670875630645576361123808295145013820732577370224728666082441643103852052135237029107871824725171250301064910318448715931417597297739077195100440493528574265929367637279694961039405916019750786028596604786141194054282128301344907317062205837882653447288187668851269775881511119842904443216489319071880803360647138732888340962292032766761198105218517261333777006163413042578229757889674721527422550419125841970454230312985062190118002401201824458385906966474162853345156310197990075156820042500608570209040122153751704798004826805544998060107661096550615074217477224611806173614025750822946789256052710835878978453907682264056485085181035257786386181957751285160739592729901482394153462634869665739345774507872436670632443783818831158272076058561748763500450868853206266693313118805937759162696436463954232205499407904769897092430274201583908061356909751493847146842199649381827199629139314649794586391855195314900094376198383063623654537548076548847041634904692964444271447785937256873584370873901519906946675162792020243324948282106576182619520385972302637994125842758516674039106573708797071810533658185026800374315600912099826417389956527932358515693723141301076471660852356156972570942691331009141357831788562803921393250013528417186104846166274481895569136218377916506998203230597087664208101335848418267186316816833817435119742641262509842148123971199782739179038898658917188367922633778880524581892387460749864560166810987228694195882740201814306527328178587284738493695393674639171713173248820998049990430544672477855920384647234422762398960664315801237564285400749454724277525689811714006217058533748758859430726006925769147904672059052723725947401879880819003174931850051429136071633807200697867867820953318408936940737783251194718335284929170810085473034145093815636178641952577515465395754614358036259938883256478835410391923683669874002630496812188314777763451185185037095888408590233797624565610306839281153499423939631856771230553247716937842149249317370437936795460514548456241502709554506083187473957557289508327546112770413596023012051385091755433135227727865041410075526919022495723751757317409236187691973046528983526943866654482600334585753232528142338680982794761667642582849114342880722431789416983473659854276969831295794960590320328412811499235180870848768851143690332277365212457405547117714234927198999823577119102255454804246883221953362404922531362818578378084917959937881991252055552221165810711344767874684305393079096174421066851595190710538449873436664524942803177201535670543641172447751413365584060985488039245094960522618251980431402726553036253156053265695302528858549918222892192012183135907454120104466422471117039019915913380626933201571806187365694399692832452794303126511926687883400336268251942602962629598842585977035848887708019612096528229823223761223035861698616851060438205104442934328562512103956932612648678239801726833527961417722103017259976523738041525250371628522914038044559973313673784636324377732429055180750654147242958574602882254000616086649616491964000793596226737706078983952690750565966271161482894910424917641709240148851061582354827747784181341232939744368770519956736186837511153538087714349842044477361747583160630962450473112798415799955781866094028642440427514431285362784534306334231186628526883742296008944189588248424594505408261764521458293892861035227741011955560296507532542444335659379385268289908931497662989977383599138871788886071907657098670524708807859379351100914247434499663534978656817538413802460756120940336174886746762968225700770270762668795579136738393410120995580438064423487980539512392749133346315224095644617704348757904022300228726475684361770186580686970717318793991803745609634927267145287292242089385899402725157478883791184616177022716940750874196341472980767647757457070269344429082366644005572655279514534821916845976742736919782536786909511787772395739254104386790993747006099739201282014223813291082365753694036759607652383337781270170965742961483210755669592850422218371597998001335632399639696386108726803932103001801520206130516134145471637137725126177572779559798958663675717764562685641910924770276501358322003764402397837265405526948517172695984892888515296609750277756395652297345967262058326684349793545419433450629778911871465610501181181082233237352108436811286154136010912220079123505369597771143065415145113323689360785609297881437988143912215075223706486467673642091321473124070149531135323798381957284911285369782859180669910409931530643561799038859520279527137496536045020535123554499166808872342387738555816361724795948668717650945139401032841679141101967202611108127167764242601545073950503805754528504207308184129947310793073435383768802801240193210401980387235587845444085843444660909828020673265290009315620489328754690798749565951805953953470932851402791654679655963183657497015358123843332409682836407213440034420026916137720567620990980257393327159139701862251764595634841341397466479401705379002753504804904688514393007719499151947030805766110225906703998449318676097774175289034547319222063789321414647554026294200742938163492700383513394191467684738513531716291539122387971419059201430360641317052304217623052328615038567995111559365651690059167118453891355809281625119124385312041561384477751207895486661436002934120657671671068885091725680035306685394605882483165133926525678562246026972962033289200733544259940449566248313469794588468375979500641518671645837492034339425921785288689813115753318489415974924704367823875026875326490930964983153474039774360013999821020308467636989947850546175232414631869808983945042114307636178253068950656615360454314979037591180079348391228818858630917694698835398768405435212957063159198557844932356038662689259817026902702028295957943508009182579139917444559226833433740466716699302196502685546875e-4951
+5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687501e-4951
+-5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687499e-4951
+-5.46779929782371190379260890042912972459857622354034501558147073054255753295009660521434106293874080779587102102080529665295047844893304825496026211338471350822573387176689751785383789570845033963493234384897511609341047969033029090288686119993125921652327780757456908215307313367394295878957740232139393310129853319126610211888963060953233950845785422003199631793594071800032514400843804841615045854626840829469327828294881838298175674523144370769439505327077912524046992686788101985028712502357968555779098305597496288175991948375220290368919956488030568463545206536359579198829053635210070171697414632960443922662694334080526864190176997186277619487638560405926908417212393004914459916660510317558023267203296664540665686303143487355117536394182579842533190638252470657276648523287454223056426260916178239688724389624700924406883725156778322327128669248001067971134780240835161999919912749368941130062333775184713893949842620045030584554856591000906652415254548036281829022414017017836373531792968500569736393059459388134289532878925936202911959860111289900618887987637185487890257175376747802810055833471650478460459250779148245153313351312860635744071818212363779076932092244234906632899168786207255077931639313903720118757997293301622787489850525574323330053349895193815663640653261384657614561732314168448072640907418419722475454249088439281362536533088134879943284462483896082614443915736191774429072907311631885819175882194201070472653674851414139198108859096891122440647971063242952915458929379913214790617434914900609409461282745336576821301251695869305718994035511225062977631807957323251343409893311558937242893589182127073929977680322999972072084511129714257799395078371652632557642689712118195363229932217741231347266655794602658713781865895628587618356133445842690980622757869697298305457864854014077743134149549581616770960047019414114115927554858644718705151733262444646312957015720874401831783399876629267632412206980788226617090546010735234775446535427950204682560784093064091008748868287818605298248793439879457512520813143459903135506837923488146278624413240301557305921665812510099227873245904315487345753286636286503807226030243834125646514462721175610422077384131141310997310167289350231522394313116195338483765836875091084530867301962551116953524641866782219275647577303198252230493416188536313334782412272272680845833966884362299362668540114271927670393635174916595231338524725341041244411123466156968910970701214636522586812703780765383816975942646584796378630871592938388807529281755454082628134037935686954169983885723045287488247562656656838905184226961694223388061375323047846826624482079286817404761883437391178335259163868151357930349068061174131050087191978828376147382620503202915394941049520564716066454820461766340754590215525559595903549562621278099530136795125074514242718392219467940568610559805583630337329057723569860511809664741164231921947415724386492152042297812796203704453738513487869185273997856308082426571227053818066616162711321820177977936612440784457475475356233845487698185296555392790365032340724558109915880751818176959751731101364826598545575062030580805510188732031382604511098551005267200735661262096661256044824137056119967967779273328271035688633522914992613122903551437420180422544707071078472935932052340497748391917547810304969780910060995596752409667301101676249036106564732671055561556337835940895462611076531105318082794457577243991861203875486751486321760491907016803052102243880722619748067919226364128975269527936779466226741495770848035680512429340764509429270927056845470429154903231124579718536587607255881903776664771069031066938472788476460322012930233295033487307239472187974104523339108479138928271958145518583355195189390314460933853291828207141736579466617460059018668855897329226526045739728421972311873652633819589252279700383580649872482332717064626876511433504720180433213145347598195242033084909143585968861500534066295124347881553551091005403198578135356959232734262569115529775393942099186306684666328819296619712127724446251513719534288754911396839196870087240104752172553479156988209602152172573903085602353234630969464420805480187541663697061615897052158736871663656287877965014700568701277294647143621722168024410452769115970094432811353897291302226031856656464346619476276280777232193768927273861205192875774054105101149361515027529971227502627819113726259972234152835169954792656314857994567825617347666484628496410640971818182042794985528278253841862020655169993625733881361630774771266021694104359050140770498084974090253693257957652720666502780042003578789909113749828579771084884825283544063138938642114971057650305046009822534888054745317987421433744650802400305823700866991679376510383079097061393271193254188545464782857356545416354777903469647826173542650507678783352302721948966801419867450746302258931065735595588435458411860251695316041515884813891649489148235939442871333362636803581913695403219306498244714254851377779848235254021151511710933136132513506853438248590522201268915519660183559208727757248071287690032431294868087337963504976682551164851571910118588306438983236282234720992802435831644343483470149103980044398219705082804408727593958279432709850087691435623519380914762150835481641373335418838088700191162340990134529298079501516522974364360061496849397757812346609541561544786426941760385242778104838331497986813457080891521791939794631694023406117934862723018080732675346126855938595967878668842110313414179033917498253204546635083703852518317784773110170897293611521619288153898185799835444909828917340811313123097443309606660312914517408855034585438849563676549437992646003145318154279326911078747823286547592935758034819293619617810739585020754384990706331937996993116942871832994234753398176556080587247232218670875630645576361123808295145013820732577370224728666082441643103852052135237029107871824725171250301064910318448715931417597297739077195100440493528574265929367637279694961039405916019750786028596604786141194054282128301344907317062205837882653447288187668851269775881511119842904443216489319071880803360647138732888340962292032766761198105218517261333777006163413042578229757889674721527422550419125841970454230312985062190118002401201824458385906966474162853345156310197990075156820042500608570209040122153751704798004826805544998060107661096550615074217477224611806173614025750822946789256052710835878978453907682264056485085181035257786386181957751285160739592729901482394153462634869665739345774507872436670632443783818831158272076058561748763500450868853206266693313118805937759162696436463954232205499407904769897092430274201583908061356909751493847146842199649381827199629139314649794586391855195314900094376198383063623654537548076548847041634904692964444271447785937256873584370873901519906946675162792020243324948282106576182619520385972302637994125842758516674039106573708797071810533658185026800374315600912099826417389956527932358515693723141301076471660852356156972570942691331009141357831788562803921393250013528417186104846166274481895569136218377916506998203230597087664208101335848418267186316816833817435119742641262509842148123971199782739179038898658917188367922633778880524581892387460749864560166810987228694195882740201814306527328178587284738493695393674639171713173248820998049990430544672477855920384647234422762398960664315801237564285400749454724277525689811714006217058533748758859430726006925769147904672059052723725947401879880819003174931850051429136071633807200697867867820953318408936940737783251194718335284929170810085473034145093815636178641952577515465395754614358036259938883256478835410391923683669874002630496812188314777763451185185037095888408590233797624565610306839281153499423939631856771230553247716937842149249317370437936795460514548456241502709554506083187473957557289508327546112770413596023012051385091755433135227727865041410075526919022495723751757317409236187691973046528983526943866654482600334585753232528142338680982794761667642582849114342880722431789416983473659854276969831295794960590320328412811499235180870848768851143690332277365212457405547117714234927198999823577119102255454804246883221953362404922531362818578378084917959937881991252055552221165810711344767874684305393079096174421066851595190710538449873436664524942803177201535670543641172447751413365584060985488039245094960522618251980431402726553036253156053265695302528858549918222892192012183135907454120104466422471117039019915913380626933201571806187365694399692832452794303126511926687883400336268251942602962629598842585977035848887708019612096528229823223761223035861698616851060438205104442934328562512103956932612648678239801726833527961417722103017259976523738041525250371628522914038044559973313673784636324377732429055180750654147242958574602882254000616086649616491964000793596226737706078983952690750565966271161482894910424917641709240148851061582354827747784181341232939744368770519956736186837511153538087714349842044477361747583160630962450473112798415799955781866094028642440427514431285362784534306334231186628526883742296008944189588248424594505408261764521458293892861035227741011955560296507532542444335659379385268289908931497662989977383599138871788886071907657098670524708807859379351100914247434499663534978656817538413802460756120940336174886746762968225700770270762668795579136738393410120995580438064423487980539512392749133346315224095644617704348757904022300228726475684361770186580686970717318793991803745609634927267145287292242089385899402725157478883791184616177022716940750874196341472980767647757457070269344429082366644005572655279514534821916845976742736919782536786909511787772395739254104386790993747006099739201282014223813291082365753694036759607652383337781270170965742961483210755669592850422218371597998001335632399639696386108726803932103001801520206130516134145471637137725126177572779559798958663675717764562685641910924770276501358322003764402397837265405526948517172695984892888515296609750277756395652297345967262058326684349793545419433450629778911871465610501181181082233237352108436811286154136010912220079123505369597771143065415145113323689360785609297881437988143912215075223706486467673642091321473124070149531135323798381957284911285369782859180669910409931530643561799038859520279527137496536045020535123554499166808872342387738555816361724795948668717650945139401032841679141101967202611108127167764242601545073950503805754528504207308184129947310793073435383768802801240193210401980387235587845444085843444660909828020673265290009315620489328754690798749565951805953953470932851402791654679655963183657497015358123843332409682836407213440034420026916137720567620990980257393327159139701862251764595634841341397466479401705379002753504804904688514393007719499151947030805766110225906703998449318676097774175289034547319222063789321414647554026294200742938163492700383513394191467684738513531716291539122387971419059201430360641317052304217623052328615038567995111559365651690059167118453891355809281625119124385312041561384477751207895486661436002934120657671671068885091725680035306685394605882483165133926525678562246026972962033289200733544259940449566248313469794588468375979500641518671645837492034339425921785288689813115753318489415974924704367823875026875326490930964983153474039774360013999821020308467636989947850546175232414631869808983945042114307636178253068950656615360454314979037591180079348391228818858630917694698835398768405435212957063159198557844932356038662689259817026902702028295957943508009182579139917444559226833433740466716699302196502685546875e-4951
+-5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687501e-4951
+5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687499e-4951
+5.46779929782371190379260890042912972459857622354034501558147073054255753295009660521434106293874080779587102102080529665295047844893304825496026211338471350822573387176689751785383789570845033963493234384897511609341047969033029090288686119993125921652327780757456908215307313367394295878957740232139393310129853319126610211888963060953233950845785422003199631793594071800032514400843804841615045854626840829469327828294881838298175674523144370769439505327077912524046992686788101985028712502357968555779098305597496288175991948375220290368919956488030568463545206536359579198829053635210070171697414632960443922662694334080526864190176997186277619487638560405926908417212393004914459916660510317558023267203296664540665686303143487355117536394182579842533190638252470657276648523287454223056426260916178239688724389624700924406883725156778322327128669248001067971134780240835161999919912749368941130062333775184713893949842620045030584554856591000906652415254548036281829022414017017836373531792968500569736393059459388134289532878925936202911959860111289900618887987637185487890257175376747802810055833471650478460459250779148245153313351312860635744071818212363779076932092244234906632899168786207255077931639313903720118757997293301622787489850525574323330053349895193815663640653261384657614561732314168448072640907418419722475454249088439281362536533088134879943284462483896082614443915736191774429072907311631885819175882194201070472653674851414139198108859096891122440647971063242952915458929379913214790617434914900609409461282745336576821301251695869305718994035511225062977631807957323251343409893311558937242893589182127073929977680322999972072084511129714257799395078371652632557642689712118195363229932217741231347266655794602658713781865895628587618356133445842690980622757869697298305457864854014077743134149549581616770960047019414114115927554858644718705151733262444646312957015720874401831783399876629267632412206980788226617090546010735234775446535427950204682560784093064091008748868287818605298248793439879457512520813143459903135506837923488146278624413240301557305921665812510099227873245904315487345753286636286503807226030243834125646514462721175610422077384131141310997310167289350231522394313116195338483765836875091084530867301962551116953524641866782219275647577303198252230493416188536313334782412272272680845833966884362299362668540114271927670393635174916595231338524725341041244411123466156968910970701214636522586812703780765383816975942646584796378630871592938388807529281755454082628134037935686954169983885723045287488247562656656838905184226961694223388061375323047846826624482079286817404761883437391178335259163868151357930349068061174131050087191978828376147382620503202915394941049520564716066454820461766340754590215525559595903549562621278099530136795125074514242718392219467940568610559805583630337329057723569860511809664741164231921947415724386492152042297812796203704453738513487869185273997856308082426571227053818066616162711321820177977936612440784457475475356233845487698185296555392790365032340724558109915880751818176959751731101364826598545575062030580805510188732031382604511098551005267200735661262096661256044824137056119967967779273328271035688633522914992613122903551437420180422544707071078472935932052340497748391917547810304969780910060995596752409667301101676249036106564732671055561556337835940895462611076531105318082794457577243991861203875486751486321760491907016803052102243880722619748067919226364128975269527936779466226741495770848035680512429340764509429270927056845470429154903231124579718536587607255881903776664771069031066938472788476460322012930233295033487307239472187974104523339108479138928271958145518583355195189390314460933853291828207141736579466617460059018668855897329226526045739728421972311873652633819589252279700383580649872482332717064626876511433504720180433213145347598195242033084909143585968861500534066295124347881553551091005403198578135356959232734262569115529775393942099186306684666328819296619712127724446251513719534288754911396839196870087240104752172553479156988209602152172573903085602353234630969464420805480187541663697061615897052158736871663656287877965014700568701277294647143621722168024410452769115970094432811353897291302226031856656464346619476276280777232193768927273861205192875774054105101149361515027529971227502627819113726259972234152835169954792656314857994567825617347666484628496410640971818182042794985528278253841862020655169993625733881361630774771266021694104359050140770498084974090253693257957652720666502780042003578789909113749828579771084884825283544063138938642114971057650305046009822534888054745317987421433744650802400305823700866991679376510383079097061393271193254188545464782857356545416354777903469647826173542650507678783352302721948966801419867450746302258931065735595588435458411860251695316041515884813891649489148235939442871333362636803581913695403219306498244714254851377779848235254021151511710933136132513506853438248590522201268915519660183559208727757248071287690032431294868087337963504976682551164851571910118588306438983236282234720992802435831644343483470149103980044398219705082804408727593958279432709850087691435623519380914762150835481641373335418838088700191162340990134529298079501516522974364360061496849397757812346609541561544786426941760385242778104838331497986813457080891521791939794631694023406117934862723018080732675346126855938595967878668842110313414179033917498253204546635083703852518317784773110170897293611521619288153898185799835444909828917340811313123097443309606660312914517408855034585438849563676549437992646003145318154279326911078747823286547592935758034819293619617810739585020754384990706331937996993116942871832994234753398176556080587247232218670875630645576361123808295145013820732577370224728666082441643103852052135237029107871824725171250301064910318448715931417597297739077195100440493528574265929367637279694961039405916019750786028596604786141194054282128301344907317062205837882653447288187668851269775881511119842904443216489319071880803360647138732888340962292032766761198105218517261333777006163413042578229757889674721527422550419125841970454230312985062190118002401201824458385906966474162853345156310197990075156820042500608570209040122153751704798004826805544998060107661096550615074217477224611806173614025750822946789256052710835878978453907682264056485085181035257786386181957751285160739592729901482394153462634869665739345774507872436670632443783818831158272076058561748763500450868853206266693313118805937759162696436463954232205499407904769897092430274201583908061356909751493847146842199649381827199629139314649794586391855195314900094376198383063623654537548076548847041634904692964444271447785937256873584370873901519906946675162792020243324948282106576182619520385972302637994125842758516674039106573708797071810533658185026800374315600912099826417389956527932358515693723141301076471660852356156972570942691331009141357831788562803921393250013528417186104846166274481895569136218377916506998203230597087664208101335848418267186316816833817435119742641262509842148123971199782739179038898658917188367922633778880524581892387460749864560166810987228694195882740201814306527328178587284738493695393674639171713173248820998049990430544672477855920384647234422762398960664315801237564285400749454724277525689811714006217058533748758859430726006925769147904672059052723725947401879880819003174931850051429136071633807200697867867820953318408936940737783251194718335284929170810085473034145093815636178641952577515465395754614358036259938883256478835410391923683669874002630496812188314777763451185185037095888408590233797624565610306839281153499423939631856771230553247716937842149249317370437936795460514548456241502709554506083187473957557289508327546112770413596023012051385091755433135227727865041410075526919022495723751757317409236187691973046528983526943866654482600334585753232528142338680982794761667642582849114342880722431789416983473659854276969831295794960590320328412811499235180870848768851143690332277365212457405547117714234927198999823577119102255454804246883221953362404922531362818578378084917959937881991252055552221165810711344767874684305393079096174421066851595190710538449873436664524942803177201535670543641172447751413365584060985488039245094960522618251980431402726553036253156053265695302528858549918222892192012183135907454120104466422471117039019915913380626933201571806187365694399692832452794303126511926687883400336268251942602962629598842585977035848887708019612096528229823223761223035861698616851060438205104442934328562512103956932612648678239801726833527961417722103017259976523738041525250371628522914038044559973313673784636324377732429055180750654147242958574602882254000616086649616491964000793596226737706078983952690750565966271161482894910424917641709240148851061582354827747784181341232939744368770519956736186837511153538087714349842044477361747583160630962450473112798415799955781866094028642440427514431285362784534306334231186628526883742296008944189588248424594505408261764521458293892861035227741011955560296507532542444335659379385268289908931497662989977383599138871788886071907657098670524708807859379351100914247434499663534978656817538413802460756120940336174886746762968225700770270762668795579136738393410120995580438064423487980539512392749133346315224095644617704348757904022300228726475684361770186580686970717318793991803745609634927267145287292242089385899402725157478883791184616177022716940750874196341472980767647757457070269344429082366644005572655279514534821916845976742736919782536786909511787772395739254104386790993747006099739201282014223813291082365753694036759607652383337781270170965742961483210755669592850422218371597998001335632399639696386108726803932103001801520206130516134145471637137725126177572779559798958663675717764562685641910924770276501358322003764402397837265405526948517172695984892888515296609750277756395652297345967262058326684349793545419433450629778911871465610501181181082233237352108436811286154136010912220079123505369597771143065415145113323689360785609297881437988143912215075223706486467673642091321473124070149531135323798381957284911285369782859180669910409931530643561799038859520279527137496536045020535123554499166808872342387738555816361724795948668717650945139401032841679141101967202611108127167764242601545073950503805754528504207308184129947310793073435383768802801240193210401980387235587845444085843444660909828020673265290009315620489328754690798749565951805953953470932851402791654679655963183657497015358123843332409682836407213440034420026916137720567620990980257393327159139701862251764595634841341397466479401705379002753504804904688514393007719499151947030805766110225906703998449318676097774175289034547319222063789321414647554026294200742938163492700383513394191467684738513531716291539122387971419059201430360641317052304217623052328615038567995111559365651690059167118453891355809281625119124385312041561384477751207895486661436002934120657671671068885091725680035306685394605882483165133926525678562246026972962033289200733544259940449566248313469794588468375979500641518671645837492034339425921785288689813115753318489415974924704367823875026875326490930964983153474039774360013999821020308467636989947850546175232414631869808983945042114307636178253068950656615360454314979037591180079348391228818858630917694698835398768405435212957063159198557844932356038662689259817026902702028295957943508009182579139917444559226833433740466716699302196502685546875e-4951
+5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687501e-4951
+-5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687499e-4951
+-5.46779929782371190379260890042912972459857622354034501558147073054255753295009660521434106293874080779587102102080529665295047844893304825496026211338471350822573387176689751785383789570845033963493234384897511609341047969033029090288686119993125921652327780757456908215307313367394295878957740232139393310129853319126610211888963060953233950845785422003199631793594071800032514400843804841615045854626840829469327828294881838298175674523144370769439505327077912524046992686788101985028712502357968555779098305597496288175991948375220290368919956488030568463545206536359579198829053635210070171697414632960443922662694334080526864190176997186277619487638560405926908417212393004914459916660510317558023267203296664540665686303143487355117536394182579842533190638252470657276648523287454223056426260916178239688724389624700924406883725156778322327128669248001067971134780240835161999919912749368941130062333775184713893949842620045030584554856591000906652415254548036281829022414017017836373531792968500569736393059459388134289532878925936202911959860111289900618887987637185487890257175376747802810055833471650478460459250779148245153313351312860635744071818212363779076932092244234906632899168786207255077931639313903720118757997293301622787489850525574323330053349895193815663640653261384657614561732314168448072640907418419722475454249088439281362536533088134879943284462483896082614443915736191774429072907311631885819175882194201070472653674851414139198108859096891122440647971063242952915458929379913214790617434914900609409461282745336576821301251695869305718994035511225062977631807957323251343409893311558937242893589182127073929977680322999972072084511129714257799395078371652632557642689712118195363229932217741231347266655794602658713781865895628587618356133445842690980622757869697298305457864854014077743134149549581616770960047019414114115927554858644718705151733262444646312957015720874401831783399876629267632412206980788226617090546010735234775446535427950204682560784093064091008748868287818605298248793439879457512520813143459903135506837923488146278624413240301557305921665812510099227873245904315487345753286636286503807226030243834125646514462721175610422077384131141310997310167289350231522394313116195338483765836875091084530867301962551116953524641866782219275647577303198252230493416188536313334782412272272680845833966884362299362668540114271927670393635174916595231338524725341041244411123466156968910970701214636522586812703780765383816975942646584796378630871592938388807529281755454082628134037935686954169983885723045287488247562656656838905184226961694223388061375323047846826624482079286817404761883437391178335259163868151357930349068061174131050087191978828376147382620503202915394941049520564716066454820461766340754590215525559595903549562621278099530136795125074514242718392219467940568610559805583630337329057723569860511809664741164231921947415724386492152042297812796203704453738513487869185273997856308082426571227053818066616162711321820177977936612440784457475475356233845487698185296555392790365032340724558109915880751818176959751731101364826598545575062030580805510188732031382604511098551005267200735661262096661256044824137056119967967779273328271035688633522914992613122903551437420180422544707071078472935932052340497748391917547810304969780910060995596752409667301101676249036106564732671055561556337835940895462611076531105318082794457577243991861203875486751486321760491907016803052102243880722619748067919226364128975269527936779466226741495770848035680512429340764509429270927056845470429154903231124579718536587607255881903776664771069031066938472788476460322012930233295033487307239472187974104523339108479138928271958145518583355195189390314460933853291828207141736579466617460059018668855897329226526045739728421972311873652633819589252279700383580649872482332717064626876511433504720180433213145347598195242033084909143585968861500534066295124347881553551091005403198578135356959232734262569115529775393942099186306684666328819296619712127724446251513719534288754911396839196870087240104752172553479156988209602152172573903085602353234630969464420805480187541663697061615897052158736871663656287877965014700568701277294647143621722168024410452769115970094432811353897291302226031856656464346619476276280777232193768927273861205192875774054105101149361515027529971227502627819113726259972234152835169954792656314857994567825617347666484628496410640971818182042794985528278253841862020655169993625733881361630774771266021694104359050140770498084974090253693257957652720666502780042003578789909113749828579771084884825283544063138938642114971057650305046009822534888054745317987421433744650802400305823700866991679376510383079097061393271193254188545464782857356545416354777903469647826173542650507678783352302721948966801419867450746302258931065735595588435458411860251695316041515884813891649489148235939442871333362636803581913695403219306498244714254851377779848235254021151511710933136132513506853438248590522201268915519660183559208727757248071287690032431294868087337963504976682551164851571910118588306438983236282234720992802435831644343483470149103980044398219705082804408727593958279432709850087691435623519380914762150835481641373335418838088700191162340990134529298079501516522974364360061496849397757812346609541561544786426941760385242778104838331497986813457080891521791939794631694023406117934862723018080732675346126855938595967878668842110313414179033917498253204546635083703852518317784773110170897293611521619288153898185799835444909828917340811313123097443309606660312914517408855034585438849563676549437992646003145318154279326911078747823286547592935758034819293619617810739585020754384990706331937996993116942871832994234753398176556080587247232218670875630645576361123808295145013820732577370224728666082441643103852052135237029107871824725171250301064910318448715931417597297739077195100440493528574265929367637279694961039405916019750786028596604786141194054282128301344907317062205837882653447288187668851269775881511119842904443216489319071880803360647138732888340962292032766761198105218517261333777006163413042578229757889674721527422550419125841970454230312985062190118002401201824458385906966474162853345156310197990075156820042500608570209040122153751704798004826805544998060107661096550615074217477224611806173614025750822946789256052710835878978453907682264056485085181035257786386181957751285160739592729901482394153462634869665739345774507872436670632443783818831158272076058561748763500450868853206266693313118805937759162696436463954232205499407904769897092430274201583908061356909751493847146842199649381827199629139314649794586391855195314900094376198383063623654537548076548847041634904692964444271447785937256873584370873901519906946675162792020243324948282106576182619520385972302637994125842758516674039106573708797071810533658185026800374315600912099826417389956527932358515693723141301076471660852356156972570942691331009141357831788562803921393250013528417186104846166274481895569136218377916506998203230597087664208101335848418267186316816833817435119742641262509842148123971199782739179038898658917188367922633778880524581892387460749864560166810987228694195882740201814306527328178587284738493695393674639171713173248820998049990430544672477855920384647234422762398960664315801237564285400749454724277525689811714006217058533748758859430726006925769147904672059052723725947401879880819003174931850051429136071633807200697867867820953318408936940737783251194718335284929170810085473034145093815636178641952577515465395754614358036259938883256478835410391923683669874002630496812188314777763451185185037095888408590233797624565610306839281153499423939631856771230553247716937842149249317370437936795460514548456241502709554506083187473957557289508327546112770413596023012051385091755433135227727865041410075526919022495723751757317409236187691973046528983526943866654482600334585753232528142338680982794761667642582849114342880722431789416983473659854276969831295794960590320328412811499235180870848768851143690332277365212457405547117714234927198999823577119102255454804246883221953362404922531362818578378084917959937881991252055552221165810711344767874684305393079096174421066851595190710538449873436664524942803177201535670543641172447751413365584060985488039245094960522618251980431402726553036253156053265695302528858549918222892192012183135907454120104466422471117039019915913380626933201571806187365694399692832452794303126511926687883400336268251942602962629598842585977035848887708019612096528229823223761223035861698616851060438205104442934328562512103956932612648678239801726833527961417722103017259976523738041525250371628522914038044559973313673784636324377732429055180750654147242958574602882254000616086649616491964000793596226737706078983952690750565966271161482894910424917641709240148851061582354827747784181341232939744368770519956736186837511153538087714349842044477361747583160630962450473112798415799955781866094028642440427514431285362784534306334231186628526883742296008944189588248424594505408261764521458293892861035227741011955560296507532542444335659379385268289908931497662989977383599138871788886071907657098670524708807859379351100914247434499663534978656817538413802460756120940336174886746762968225700770270762668795579136738393410120995580438064423487980539512392749133346315224095644617704348757904022300228726475684361770186580686970717318793991803745609634927267145287292242089385899402725157478883791184616177022716940750874196341472980767647757457070269344429082366644005572655279514534821916845976742736919782536786909511787772395739254104386790993747006099739201282014223813291082365753694036759607652383337781270170965742961483210755669592850422218371597998001335632399639696386108726803932103001801520206130516134145471637137725126177572779559798958663675717764562685641910924770276501358322003764402397837265405526948517172695984892888515296609750277756395652297345967262058326684349793545419433450629778911871465610501181181082233237352108436811286154136010912220079123505369597771143065415145113323689360785609297881437988143912215075223706486467673642091321473124070149531135323798381957284911285369782859180669910409931530643561799038859520279527137496536045020535123554499166808872342387738555816361724795948668717650945139401032841679141101967202611108127167764242601545073950503805754528504207308184129947310793073435383768802801240193210401980387235587845444085843444660909828020673265290009315620489328754690798749565951805953953470932851402791654679655963183657497015358123843332409682836407213440034420026916137720567620990980257393327159139701862251764595634841341397466479401705379002753504804904688514393007719499151947030805766110225906703998449318676097774175289034547319222063789321414647554026294200742938163492700383513394191467684738513531716291539122387971419059201430360641317052304217623052328615038567995111559365651690059167118453891355809281625119124385312041561384477751207895486661436002934120657671671068885091725680035306685394605882483165133926525678562246026972962033289200733544259940449566248313469794588468375979500641518671645837492034339425921785288689813115753318489415974924704367823875026875326490930964983153474039774360013999821020308467636989947850546175232414631869808983945042114307636178253068950656615360454314979037591180079348391228818858630917694698835398768405435212957063159198557844932356038662689259817026902702028295957943508009182579139917444559226833433740466716699302196502685546875e-4951
+-5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687501e-4951
+-0x0.7p-149
+-0x0.7p-1074
+-0x0.7p-16445
+-0x0.7p-16494
+0x1p-150
+0x1p-1075
+0x1p-16446
+0x1p-16495
+-0x1p-150
+-0x1p-1075
+-0x1p-16446
+-0x1p-16495
+.70064923216240853546186479164495807e-45
+7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015624e-46
+7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015625e-46
+7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015626e-46
+-7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015624e-46
+-7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015625e-46
+-7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015626e-46
+2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328124e-324
+2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328125e-324
+2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328126e-324
+-2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328124e-324
+-2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328125e-324
+-2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328126e-324
+1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515624e-4951
+1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515625e-4951
+1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515626e-4951
+-1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515624e-4951
+-1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515625e-4951
+-1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515626e-4951
+9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578124e-4952
+9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578125e-4952
+9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578126e-4952
+-9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578124e-4952
+-9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578125e-4952
+-9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578126e-4952
+3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578124e-4966
+3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578125e-4966
+3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578126e-4966
+-3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578124e-4966
+-3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578125e-4966
+-3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578126e-4966
diff --git a/REORG.TODO/stdlib/tst-strtod-round-data.h b/REORG.TODO/stdlib/tst-strtod-round-data.h
new file mode 100644
index 0000000000..fc09bc9117
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-round-data.h
@@ -0,0 +1,11584 @@
+/* This file was generated by gen-tst-strtod-round.c from tst-strtod-round-data. */
+static const struct test tests[] = {
+ TEST ("3.518437208883201171875E+013",
+ false,
+ 0x2p+44,
+ 0x2p+44,
+ 0x2p+44,
+ 0x2.000004p+44,
+ false,
+ 0x2.0000000000002p+44,
+ 0x2.0000000000004p+44,
+ 0x2.0000000000002p+44,
+ 0x2.0000000000004p+44,
+ true,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ true,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ true,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ true,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44),
+ TEST ("1.00000005960464477550",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.0000010000001p+0,
+ false,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000004p+0,
+ false,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000004p+0,
+ false,
+ 0x1.0000010000000002048242f2ffp+0,
+ 0x1.0000010000000002048242f2ff8p+0,
+ 0x1.0000010000000002048242f2ffp+0,
+ 0x1.0000010000000002048242f2ff8p+0,
+ false,
+ 0x1.0000010000000002048242f2ff66p+0,
+ 0x1.0000010000000002048242f2ff67p+0,
+ 0x1.0000010000000002048242f2ff66p+0,
+ 0x1.0000010000000002048242f2ff67p+0),
+ TEST ("1.0000000596046447755",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.0000010000001p+0,
+ false,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000004p+0,
+ false,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000004p+0,
+ false,
+ 0x1.0000010000000002048242f2ffp+0,
+ 0x1.0000010000000002048242f2ff8p+0,
+ 0x1.0000010000000002048242f2ffp+0,
+ 0x1.0000010000000002048242f2ff8p+0,
+ false,
+ 0x1.0000010000000002048242f2ff66p+0,
+ 0x1.0000010000000002048242f2ff67p+0,
+ 0x1.0000010000000002048242f2ff66p+0,
+ 0x1.0000010000000002048242f2ff67p+0),
+ TEST ("1.000000059604644776",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.0000010000001p+0,
+ false,
+ 0x1.000001000000000ap+0,
+ 0x1.000001000000000cp+0,
+ 0x1.000001000000000ap+0,
+ 0x1.000001000000000cp+0,
+ false,
+ 0x1.000001000000000ap+0,
+ 0x1.000001000000000cp+0,
+ 0x1.000001000000000ap+0,
+ 0x1.000001000000000cp+0,
+ false,
+ 0x1.000001000000000b3db12bdc21p+0,
+ 0x1.000001000000000b3db12bdc21p+0,
+ 0x1.000001000000000b3db12bdc21p+0,
+ 0x1.000001000000000b3db12bdc218p+0,
+ false,
+ 0x1.000001000000000b3db12bdc213cp+0,
+ 0x1.000001000000000b3db12bdc213dp+0,
+ 0x1.000001000000000b3db12bdc213cp+0,
+ 0x1.000001000000000b3db12bdc213dp+0),
+ TEST ("1.000000059604644775",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000000fffffffp+0,
+ 0x1.000001p+0,
+ 0x1.000000fffffffp+0,
+ 0x1.000001p+0,
+ false,
+ 0x1.000000fffffffff8p+0,
+ 0x1.000000fffffffff8p+0,
+ 0x1.000000fffffffff8p+0,
+ 0x1.000000fffffffffap+0,
+ false,
+ 0x1.000000fffffffff8p+0,
+ 0x1.000000fffffffff8p+0,
+ 0x1.000000fffffffff8p+0,
+ 0x1.000000fffffffffap+0,
+ false,
+ 0x1.000000fffffffff8cb535a09dd8p+0,
+ 0x1.000000fffffffff8cb535a09dd8p+0,
+ 0x1.000000fffffffff8cb535a09dd8p+0,
+ 0x1.000000fffffffff8cb535a09dep+0,
+ false,
+ 0x1.000000fffffffff8cb535a09dd9p+0,
+ 0x1.000000fffffffff8cb535a09dd91p+0,
+ 0x1.000000fffffffff8cb535a09dd9p+0,
+ 0x1.000000fffffffff8cb535a09dd91p+0),
+ TEST ("1.00000005960464478",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.0000010000001p+0,
+ false,
+ 0x1.0000010000000054p+0,
+ 0x1.0000010000000056p+0,
+ 0x1.0000010000000054p+0,
+ 0x1.0000010000000056p+0,
+ false,
+ 0x1.0000010000000054p+0,
+ 0x1.0000010000000056p+0,
+ 0x1.0000010000000054p+0,
+ 0x1.0000010000000056p+0,
+ false,
+ 0x1.0000010000000055072873252f8p+0,
+ 0x1.0000010000000055072873253p+0,
+ 0x1.0000010000000055072873252f8p+0,
+ 0x1.0000010000000055072873253p+0,
+ false,
+ 0x1.0000010000000055072873252febp+0,
+ 0x1.0000010000000055072873252febp+0,
+ 0x1.0000010000000055072873252febp+0,
+ 0x1.0000010000000055072873252fecp+0),
+ TEST ("1.0000000596046448",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.0000010000001p+0,
+ false,
+ 0x1.00000100000001c4p+0,
+ 0x1.00000100000001c6p+0,
+ 0x1.00000100000001c4p+0,
+ 0x1.00000100000001c6p+0,
+ false,
+ 0x1.00000100000001c4p+0,
+ 0x1.00000100000001c6p+0,
+ 0x1.00000100000001c4p+0,
+ 0x1.00000100000001c6p+0,
+ false,
+ 0x1.00000100000001c5f67cd79279p+0,
+ 0x1.00000100000001c5f67cd792798p+0,
+ 0x1.00000100000001c5f67cd79279p+0,
+ 0x1.00000100000001c5f67cd792798p+0,
+ false,
+ 0x1.00000100000001c5f67cd7927953p+0,
+ 0x1.00000100000001c5f67cd7927954p+0,
+ 0x1.00000100000001c5f67cd7927953p+0,
+ 0x1.00000100000001c5f67cd7927954p+0),
+ TEST ("1.000000059604645",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.0000010000001p+0,
+ 0x1.0000010000001p+0,
+ 0x1.0000010000001p+0,
+ 0x1.0000010000002p+0,
+ false,
+ 0x1.000001000000102ep+0,
+ 0x1.000001000000103p+0,
+ 0x1.000001000000102ep+0,
+ 0x1.000001000000103p+0,
+ false,
+ 0x1.000001000000102ep+0,
+ 0x1.000001000000103p+0,
+ 0x1.000001000000102ep+0,
+ 0x1.000001000000103p+0,
+ false,
+ 0x1.000001000000102f4fc8c3d757p+0,
+ 0x1.000001000000102f4fc8c3d7578p+0,
+ 0x1.000001000000102f4fc8c3d757p+0,
+ 0x1.000001000000102f4fc8c3d7578p+0,
+ false,
+ 0x1.000001000000102f4fc8c3d75769p+0,
+ 0x1.000001000000102f4fc8c3d75769p+0,
+ 0x1.000001000000102f4fc8c3d75769p+0,
+ 0x1.000001000000102f4fc8c3d7576ap+0),
+ TEST ("1.00000005960464",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000000fffffeap+0,
+ 0x1.000000fffffeap+0,
+ 0x1.000000fffffeap+0,
+ 0x1.000000fffffebp+0,
+ false,
+ 0x1.000000fffffea7e4p+0,
+ 0x1.000000fffffea7e6p+0,
+ 0x1.000000fffffea7e4p+0,
+ 0x1.000000fffffea7e6p+0,
+ false,
+ 0x1.000000fffffea7e4p+0,
+ 0x1.000000fffffea7e6p+0,
+ 0x1.000000fffffea7e4p+0,
+ 0x1.000000fffffea7e6p+0,
+ false,
+ 0x1.000000fffffea7e5975eb11da7p+0,
+ 0x1.000000fffffea7e5975eb11da78p+0,
+ 0x1.000000fffffea7e5975eb11da7p+0,
+ 0x1.000000fffffea7e5975eb11da78p+0,
+ false,
+ 0x1.000000fffffea7e5975eb11da74ap+0,
+ 0x1.000000fffffea7e5975eb11da74bp+0,
+ 0x1.000000fffffea7e5975eb11da74ap+0,
+ 0x1.000000fffffea7e5975eb11da74bp+0),
+ TEST ("1.0000000596046",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000000fffff36p+0,
+ 0x1.000000fffff36p+0,
+ 0x1.000000fffff36p+0,
+ 0x1.000000fffff37p+0,
+ false,
+ 0x1.000000fffff36596p+0,
+ 0x1.000000fffff36598p+0,
+ 0x1.000000fffff36596p+0,
+ 0x1.000000fffff36598p+0,
+ false,
+ 0x1.000000fffff36596p+0,
+ 0x1.000000fffff36598p+0,
+ 0x1.000000fffff36596p+0,
+ 0x1.000000fffff36598p+0,
+ false,
+ 0x1.000000fffff36597d40e1b5026p+0,
+ 0x1.000000fffff36597d40e1b50268p+0,
+ 0x1.000000fffff36597d40e1b5026p+0,
+ 0x1.000000fffff36597d40e1b50268p+0,
+ false,
+ 0x1.000000fffff36597d40e1b502655p+0,
+ 0x1.000000fffff36597d40e1b502656p+0,
+ 0x1.000000fffff36597d40e1b502655p+0,
+ 0x1.000000fffff36597d40e1b502656p+0),
+ TEST ("1.000000059605",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000001000063fp+0,
+ 0x1.000001000064p+0,
+ 0x1.000001000063fp+0,
+ 0x1.000001000064p+0,
+ false,
+ 0x1.000001000063fcap+0,
+ 0x1.000001000063fca2p+0,
+ 0x1.000001000063fcap+0,
+ 0x1.000001000063fca2p+0,
+ false,
+ 0x1.000001000063fcap+0,
+ 0x1.000001000063fca2p+0,
+ 0x1.000001000063fcap+0,
+ 0x1.000001000063fca2p+0,
+ false,
+ 0x1.000001000063fca17533f5572f8p+0,
+ 0x1.000001000063fca17533f5573p+0,
+ 0x1.000001000063fca17533f5572f8p+0,
+ 0x1.000001000063fca17533f5573p+0,
+ false,
+ 0x1.000001000063fca17533f5572fe9p+0,
+ 0x1.000001000063fca17533f5572feap+0,
+ 0x1.000001000063fca17533f5572fe9p+0,
+ 0x1.000001000063fca17533f5572feap+0),
+ TEST ("1.00000005960",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000000fffae49p+0,
+ 0x1.000000fffae4ap+0,
+ 0x1.000000fffae49p+0,
+ 0x1.000000fffae4ap+0,
+ false,
+ 0x1.000000fffae49ca8p+0,
+ 0x1.000000fffae49caap+0,
+ 0x1.000000fffae49ca8p+0,
+ 0x1.000000fffae49caap+0,
+ false,
+ 0x1.000000fffae49ca8p+0,
+ 0x1.000000fffae49caap+0,
+ 0x1.000000fffae49ca8p+0,
+ 0x1.000000fffae49caap+0,
+ false,
+ 0x1.000000fffae49ca916dacfff38p+0,
+ 0x1.000000fffae49ca916dacfff38p+0,
+ 0x1.000000fffae49ca916dacfff38p+0,
+ 0x1.000000fffae49ca916dacfff388p+0,
+ false,
+ 0x1.000000fffae49ca916dacfff382dp+0,
+ 0x1.000000fffae49ca916dacfff382dp+0,
+ 0x1.000000fffae49ca916dacfff382dp+0,
+ 0x1.000000fffae49ca916dacfff382ep+0),
+ TEST ("1.0000000596",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000000fffae49p+0,
+ 0x1.000000fffae4ap+0,
+ 0x1.000000fffae49p+0,
+ 0x1.000000fffae4ap+0,
+ false,
+ 0x1.000000fffae49ca8p+0,
+ 0x1.000000fffae49caap+0,
+ 0x1.000000fffae49ca8p+0,
+ 0x1.000000fffae49caap+0,
+ false,
+ 0x1.000000fffae49ca8p+0,
+ 0x1.000000fffae49caap+0,
+ 0x1.000000fffae49ca8p+0,
+ 0x1.000000fffae49caap+0,
+ false,
+ 0x1.000000fffae49ca916dacfff38p+0,
+ 0x1.000000fffae49ca916dacfff38p+0,
+ 0x1.000000fffae49ca916dacfff38p+0,
+ 0x1.000000fffae49ca916dacfff388p+0,
+ false,
+ 0x1.000000fffae49ca916dacfff382dp+0,
+ 0x1.000000fffae49ca916dacfff382dp+0,
+ 0x1.000000fffae49ca916dacfff382dp+0,
+ 0x1.000000fffae49ca916dacfff382ep+0),
+ TEST ("1.000000060",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.00000101b2b29p+0,
+ 0x1.00000101b2b2ap+0,
+ 0x1.00000101b2b29p+0,
+ 0x1.00000101b2b2ap+0,
+ false,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a48p+0,
+ false,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a48p+0,
+ false,
+ 0x1.00000101b2b29a4692b67b7ca3p+0,
+ 0x1.00000101b2b29a4692b67b7ca3p+0,
+ 0x1.00000101b2b29a4692b67b7ca3p+0,
+ 0x1.00000101b2b29a4692b67b7ca38p+0,
+ false,
+ 0x1.00000101b2b29a4692b67b7ca313p+0,
+ 0x1.00000101b2b29a4692b67b7ca314p+0,
+ 0x1.00000101b2b29a4692b67b7ca313p+0,
+ 0x1.00000101b2b29a4692b67b7ca314p+0),
+ TEST ("1.00000006",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.00000101b2b29p+0,
+ 0x1.00000101b2b2ap+0,
+ 0x1.00000101b2b29p+0,
+ 0x1.00000101b2b2ap+0,
+ false,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a48p+0,
+ false,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a48p+0,
+ false,
+ 0x1.00000101b2b29a4692b67b7ca3p+0,
+ 0x1.00000101b2b29a4692b67b7ca3p+0,
+ 0x1.00000101b2b29a4692b67b7ca3p+0,
+ 0x1.00000101b2b29a4692b67b7ca38p+0,
+ false,
+ 0x1.00000101b2b29a4692b67b7ca313p+0,
+ 0x1.00000101b2b29a4692b67b7ca314p+0,
+ 0x1.00000101b2b29a4692b67b7ca313p+0,
+ 0x1.00000101b2b29a4692b67b7ca314p+0),
+ TEST ("1.0000001",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000001ad7f29ap+0,
+ 0x1.000001ad7f29bp+0,
+ 0x1.000001ad7f29ap+0,
+ 0x1.000001ad7f29bp+0,
+ false,
+ 0x1.000001ad7f29abcap+0,
+ 0x1.000001ad7f29abcap+0,
+ 0x1.000001ad7f29abcap+0,
+ 0x1.000001ad7f29abccp+0,
+ false,
+ 0x1.000001ad7f29abcap+0,
+ 0x1.000001ad7f29abcap+0,
+ 0x1.000001ad7f29abcap+0,
+ 0x1.000001ad7f29abccp+0,
+ false,
+ 0x1.000001ad7f29abcaf485787a65p+0,
+ 0x1.000001ad7f29abcaf485787a65p+0,
+ 0x1.000001ad7f29abcaf485787a65p+0,
+ 0x1.000001ad7f29abcaf485787a658p+0,
+ false,
+ 0x1.000001ad7f29abcaf485787a652p+0,
+ 0x1.000001ad7f29abcaf485787a6521p+0,
+ 0x1.000001ad7f29abcaf485787a652p+0,
+ 0x1.000001ad7f29abcaf485787a6521p+0),
+ TEST ("1.000000",
+ true,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ true,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ true,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ true,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ true,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ true,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0),
+ TEST ("1.00000000000000011113",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ false,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ false,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ false,
+ 0x1.0000000000000801fc96557232p+0,
+ 0x1.0000000000000801fc96557232p+0,
+ 0x1.0000000000000801fc96557232p+0,
+ 0x1.0000000000000801fc965572328p+0,
+ false,
+ 0x1.0000000000000801fc9655723222p+0,
+ 0x1.0000000000000801fc9655723222p+0,
+ 0x1.0000000000000801fc9655723222p+0,
+ 0x1.0000000000000801fc9655723223p+0),
+ TEST ("1.00000000000000011103",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ false,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ false,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ false,
+ 0x1.00000000000008002459c076c48p+0,
+ 0x1.00000000000008002459c076c5p+0,
+ 0x1.00000000000008002459c076c48p+0,
+ 0x1.00000000000008002459c076c5p+0,
+ false,
+ 0x1.00000000000008002459c076c4f7p+0,
+ 0x1.00000000000008002459c076c4f8p+0,
+ 0x1.00000000000008002459c076c4f7p+0,
+ 0x1.00000000000008002459c076c4f8p+0),
+ TEST ("1.00000000000000011102",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ false,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ false,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ false,
+ 0x1.00000000000007fff5207e5dap+0,
+ 0x1.00000000000007fff5207e5da08p+0,
+ 0x1.00000000000007fff5207e5dap+0,
+ 0x1.00000000000007fff5207e5da08p+0,
+ false,
+ 0x1.00000000000007fff5207e5da073p+0,
+ 0x1.00000000000007fff5207e5da073p+0,
+ 0x1.00000000000007fff5207e5da073p+0,
+ 0x1.00000000000007fff5207e5da074p+0),
+ TEST ("1.00000000000000011101",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ false,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ false,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ false,
+ 0x1.00000000000007ffc5e73c447b8p+0,
+ 0x1.00000000000007ffc5e73c447cp+0,
+ 0x1.00000000000007ffc5e73c447b8p+0,
+ 0x1.00000000000007ffc5e73c447cp+0,
+ false,
+ 0x1.00000000000007ffc5e73c447befp+0,
+ 0x1.00000000000007ffc5e73c447befp+0,
+ 0x1.00000000000007ffc5e73c447befp+0,
+ 0x1.00000000000007ffc5e73c447bfp+0),
+ TEST ("1.0000000000000001111",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ false,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ false,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ false,
+ 0x1.00000000000008016eea8f26c48p+0,
+ 0x1.00000000000008016eea8f26c48p+0,
+ 0x1.00000000000008016eea8f26c48p+0,
+ 0x1.00000000000008016eea8f26c5p+0,
+ false,
+ 0x1.00000000000008016eea8f26c495p+0,
+ 0x1.00000000000008016eea8f26c496p+0,
+ 0x1.00000000000008016eea8f26c495p+0,
+ 0x1.00000000000008016eea8f26c496p+0),
+ TEST ("1.000000000000000111",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ false,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ false,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ false,
+ 0x1.00000000000007ff96adfa2b57p+0,
+ 0x1.00000000000007ff96adfa2b578p+0,
+ 0x1.00000000000007ff96adfa2b57p+0,
+ 0x1.00000000000007ff96adfa2b578p+0,
+ false,
+ 0x1.00000000000007ff96adfa2b576ap+0,
+ 0x1.00000000000007ff96adfa2b576bp+0,
+ 0x1.00000000000007ff96adfa2b576ap+0,
+ 0x1.00000000000007ff96adfa2b576bp+0),
+ TEST ("1.00000000000000011",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ false,
+ 0x1.00000000000007ecp+0,
+ 0x1.00000000000007eep+0,
+ 0x1.00000000000007ecp+0,
+ 0x1.00000000000007eep+0,
+ false,
+ 0x1.00000000000007ecp+0,
+ 0x1.00000000000007eep+0,
+ 0x1.00000000000007ecp+0,
+ 0x1.00000000000007eep+0,
+ false,
+ 0x1.00000000000007ed24502859138p+0,
+ 0x1.00000000000007ed24502859138p+0,
+ 0x1.00000000000007ed24502859138p+0,
+ 0x1.00000000000007ed2450285914p+0,
+ false,
+ 0x1.00000000000007ed2450285913bfp+0,
+ 0x1.00000000000007ed2450285913bfp+0,
+ 0x1.00000000000007ed2450285913bfp+0,
+ 0x1.00000000000007ed2450285913cp+0),
+ TEST ("1.0000000000000001",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ false,
+ 0x1.0000000000000734p+0,
+ 0x1.0000000000000734p+0,
+ 0x1.0000000000000734p+0,
+ 0x1.0000000000000736p+0,
+ false,
+ 0x1.0000000000000734p+0,
+ 0x1.0000000000000734p+0,
+ 0x1.0000000000000734p+0,
+ 0x1.0000000000000736p+0,
+ false,
+ 0x1.0000000000000734aca5f6226fp+0,
+ 0x1.0000000000000734aca5f6226fp+0,
+ 0x1.0000000000000734aca5f6226fp+0,
+ 0x1.0000000000000734aca5f6226f8p+0,
+ false,
+ 0x1.0000000000000734aca5f6226f0ap+0,
+ 0x1.0000000000000734aca5f6226f0bp+0,
+ 0x1.0000000000000734aca5f6226f0ap+0,
+ 0x1.0000000000000734aca5f6226f0bp+0),
+ TEST ("3929201589819414e-25",
+ false,
+ 0x1.b0053p-32,
+ 0x1.b00532p-32,
+ 0x1.b0053p-32,
+ 0x1.b00532p-32,
+ false,
+ 0x1.b005314e2421ep-32,
+ 0x1.b005314e2421ep-32,
+ 0x1.b005314e2421ep-32,
+ 0x1.b005314e2421fp-32,
+ false,
+ 0x1.b005314e2421e7fep-32,
+ 0x1.b005314e2421e8p-32,
+ 0x1.b005314e2421e7fep-32,
+ 0x1.b005314e2421e8p-32,
+ false,
+ 0x1.b005314e2421e7fep-32,
+ 0x1.b005314e2421e8p-32,
+ 0x1.b005314e2421e7fep-32,
+ 0x1.b005314e2421e8p-32,
+ false,
+ 0x1.b005314e2421e7ffb472840c5ap-32,
+ 0x1.b005314e2421e7ffb472840c5a8p-32,
+ 0x1.b005314e2421e7ffb472840c5ap-32,
+ 0x1.b005314e2421e7ffb472840c5a8p-32,
+ false,
+ 0x1.b005314e2421e7ffb472840c5a6ep-32,
+ 0x1.b005314e2421e7ffb472840c5a6fp-32,
+ 0x1.b005314e2421e7ffb472840c5a6ep-32,
+ 0x1.b005314e2421e7ffb472840c5a6fp-32),
+ TEST ("0.0000000000000000000000000000000000000000000021019476964872"
+ "256063855943749348741969203929128147736576356024258346866240"
+ "28790902229957282543182373046875",
+ false,
+ 0x8p-152,
+ 0x1p-148,
+ 0x8p-152,
+ 0x1p-148,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152),
+ TEST ("1.00000005960464477539062499",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000000fffffffp+0,
+ 0x1.000001p+0,
+ 0x1.000000fffffffp+0,
+ 0x1.000001p+0,
+ false,
+ 0x1.000000fffffffffep+0,
+ 0x1.000001p+0,
+ 0x1.000000fffffffffep+0,
+ 0x1.000001p+0,
+ false,
+ 0x1.000000fffffffffep+0,
+ 0x1.000001p+0,
+ 0x1.000000fffffffffep+0,
+ 0x1.000001p+0,
+ false,
+ 0x1.000000fffffffffffffffce7b78p+0,
+ 0x1.000000fffffffffffffffce7b8p+0,
+ 0x1.000000fffffffffffffffce7b78p+0,
+ 0x1.000000fffffffffffffffce7b8p+0,
+ false,
+ 0x1.000000fffffffffffffffce7b7e7p+0,
+ 0x1.000000fffffffffffffffce7b7e7p+0,
+ 0x1.000000fffffffffffffffce7b7e7p+0,
+ 0x1.000000fffffffffffffffce7b7e8p+0),
+ TEST ("1.000000059604644775390625",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ true,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ true,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ true,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ true,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ true,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0),
+ TEST ("1.00000005960464477539062501",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.0000010000001p+0,
+ false,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.0000010000000002p+0,
+ false,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.0000010000000002p+0,
+ false,
+ 0x1.00000100000000000000031848p+0,
+ 0x1.00000100000000000000031848p+0,
+ 0x1.00000100000000000000031848p+0,
+ 0x1.000001000000000000000318488p+0,
+ false,
+ 0x1.0000010000000000000003184818p+0,
+ 0x1.0000010000000000000003184819p+0,
+ 0x1.0000010000000000000003184818p+0,
+ 0x1.0000010000000000000003184819p+0),
+ TEST ("1.00000011920928955078125",
+ true,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ true,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ true,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ true,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ true,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ true,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0),
+ TEST ("1.00000017881393432617187499",
+ false,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000004p+0,
+ false,
+ 0x1.000002fffffffp+0,
+ 0x1.000003p+0,
+ 0x1.000002fffffffp+0,
+ 0x1.000003p+0,
+ false,
+ 0x1.000002fffffffffep+0,
+ 0x1.000003p+0,
+ 0x1.000002fffffffffep+0,
+ 0x1.000003p+0,
+ false,
+ 0x1.000002fffffffffep+0,
+ 0x1.000003p+0,
+ 0x1.000002fffffffffep+0,
+ 0x1.000003p+0,
+ false,
+ 0x1.000002fffffffffffffffce7b78p+0,
+ 0x1.000002fffffffffffffffce7b8p+0,
+ 0x1.000002fffffffffffffffce7b78p+0,
+ 0x1.000002fffffffffffffffce7b8p+0,
+ false,
+ 0x1.000002fffffffffffffffce7b7e7p+0,
+ 0x1.000002fffffffffffffffce7b7e7p+0,
+ 0x1.000002fffffffffffffffce7b7e7p+0,
+ 0x1.000002fffffffffffffffce7b7e8p+0),
+ TEST ("1.000000178813934326171875",
+ false,
+ 0x1.000002p+0,
+ 0x1.000004p+0,
+ 0x1.000002p+0,
+ 0x1.000004p+0,
+ true,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ true,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ true,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ true,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ true,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0),
+ TEST ("1.00000017881393432617187501",
+ false,
+ 0x1.000002p+0,
+ 0x1.000004p+0,
+ 0x1.000002p+0,
+ 0x1.000004p+0,
+ false,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.0000030000001p+0,
+ false,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.0000030000000002p+0,
+ false,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.0000030000000002p+0,
+ false,
+ 0x1.00000300000000000000031848p+0,
+ 0x1.00000300000000000000031848p+0,
+ 0x1.00000300000000000000031848p+0,
+ 0x1.000003000000000000000318488p+0,
+ false,
+ 0x1.0000030000000000000003184818p+0,
+ 0x1.0000030000000000000003184819p+0,
+ 0x1.0000030000000000000003184818p+0,
+ 0x1.0000030000000000000003184819p+0),
+ TEST ("1.0000002384185791015625",
+ true,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ true,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ true,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ true,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ true,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ true,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0),
+ TEST ("1.08420217248550443400745280086994171142578125e-19",
+ true,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ true,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ true,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ true,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ true,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ true,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64),
+ TEST ("1.0842022371089897897127399001987457793916291848290711641311"
+ "645507812499e-19",
+ false,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2.000004p-64,
+ false,
+ 0x2.000001ffffffep-64,
+ 0x2.000002p-64,
+ 0x2.000001ffffffep-64,
+ 0x2.000002p-64,
+ false,
+ 0x2.000001fffffffffcp-64,
+ 0x2.000002p-64,
+ 0x2.000001fffffffffcp-64,
+ 0x2.000002p-64,
+ false,
+ 0x2.000001fffffffffcp-64,
+ 0x2.000002p-64,
+ 0x2.000001fffffffffcp-64,
+ 0x2.000002p-64,
+ false,
+ 0x2.000001ffffffffffffffffffffp-64,
+ 0x2.000002p-64,
+ 0x2.000001ffffffffffffffffffffp-64,
+ 0x2.000002p-64,
+ false,
+ 0x2.000001fffffffffffffffffffffep-64,
+ 0x2.000002p-64,
+ 0x2.000001fffffffffffffffffffffep-64,
+ 0x2.000002p-64),
+ TEST ("1.0842022371089897897127399001987457793916291848290711641311"
+ "6455078125e-19",
+ false,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2.000004p-64,
+ true,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ true,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ true,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ true,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ true,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64),
+ TEST ("1.0842022371089897897127399001987457793916291848290711641311"
+ "645507812501e-19",
+ false,
+ 0x2p-64,
+ 0x2.000004p-64,
+ 0x2p-64,
+ 0x2.000004p-64,
+ false,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.0000020000002p-64,
+ false,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.0000020000000004p-64,
+ false,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.0000020000000004p-64,
+ false,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.00000200000000000000000001p-64,
+ false,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.0000020000000000000000000002p-64),
+ TEST ("1.0842023017324751454180269995275498473574771196581423282623"
+ "291015625e-19",
+ true,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ true,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ true,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ true,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ true,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ true,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64),
+ TEST ("1.0842023663559605011233140988563539153233250544872134923934"
+ "936523437499e-19",
+ false,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000008p-64,
+ false,
+ 0x2.000005ffffffep-64,
+ 0x2.000006p-64,
+ 0x2.000005ffffffep-64,
+ 0x2.000006p-64,
+ false,
+ 0x2.000005fffffffffcp-64,
+ 0x2.000006p-64,
+ 0x2.000005fffffffffcp-64,
+ 0x2.000006p-64,
+ false,
+ 0x2.000005fffffffffcp-64,
+ 0x2.000006p-64,
+ 0x2.000005fffffffffcp-64,
+ 0x2.000006p-64,
+ false,
+ 0x2.000005ffffffffffffffffffffp-64,
+ 0x2.000006p-64,
+ 0x2.000005ffffffffffffffffffffp-64,
+ 0x2.000006p-64,
+ false,
+ 0x2.000005fffffffffffffffffffffep-64,
+ 0x2.000006p-64,
+ 0x2.000005fffffffffffffffffffffep-64,
+ 0x2.000006p-64),
+ TEST ("1.0842023663559605011233140988563539153233250544872134923934"
+ "9365234375e-19",
+ false,
+ 0x2.000004p-64,
+ 0x2.000008p-64,
+ 0x2.000004p-64,
+ 0x2.000008p-64,
+ true,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ true,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ true,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ true,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ true,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64),
+ TEST ("1.0842023663559605011233140988563539153233250544872134923934"
+ "936523437501e-19",
+ false,
+ 0x2.000004p-64,
+ 0x2.000008p-64,
+ 0x2.000004p-64,
+ 0x2.000008p-64,
+ false,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.0000060000002p-64,
+ false,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.0000060000000004p-64,
+ false,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.0000060000000004p-64,
+ false,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.00000600000000000000000001p-64,
+ false,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.0000060000000000000000000002p-64),
+ TEST ("1.0842024309794458568286011981851579832891729893162846565246"
+ "58203125e-19",
+ true,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ true,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ true,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ true,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ true,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ true,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64),
+ TEST ("7.5231638452626400509999138382223723380394595633413601376560"
+ "1092018187046051025390625e-37",
+ true,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ true,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ true,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ true,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ true,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ true,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120),
+ TEST ("7.5231642936781486349413765338158389908126215730251815381410"
+ "578824437213052434003657253924757242202758789062499e-37",
+ false,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1.000002p-120,
+ false,
+ 0x1.000000fffffffp-120,
+ 0x1.000001p-120,
+ 0x1.000000fffffffp-120,
+ 0x1.000001p-120,
+ false,
+ 0x1.000000fffffffffep-120,
+ 0x1.000001p-120,
+ 0x1.000000fffffffffep-120,
+ 0x1.000001p-120,
+ false,
+ 0x1.000000fffffffffep-120,
+ 0x1.000001p-120,
+ 0x1.000000fffffffffep-120,
+ 0x1.000001p-120,
+ false,
+ 0x1.000000ffffffffffffffffffff8p-120,
+ 0x1.000001p-120,
+ 0x1.000000ffffffffffffffffffff8p-120,
+ 0x1.000001p-120,
+ false,
+ 0x1.000000ffffffffffffffffffffffp-120,
+ 0x1.000001p-120,
+ 0x1.000000ffffffffffffffffffffffp-120,
+ 0x1.000001p-120),
+ TEST ("7.5231642936781486349413765338158389908126215730251815381410"
+ "5788244372130524340036572539247572422027587890625e-37",
+ false,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1.000002p-120,
+ true,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ true,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ true,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ true,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ true,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120),
+ TEST ("7.5231642936781486349413765338158389908126215730251815381410"
+ "578824437213052434003657253924757242202758789062501e-37",
+ false,
+ 0x1p-120,
+ 0x1.000002p-120,
+ 0x1p-120,
+ 0x1.000002p-120,
+ false,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.0000010000001p-120,
+ false,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.0000010000000002p-120,
+ false,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.0000010000000002p-120,
+ false,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001000000000000000000008p-120,
+ false,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.0000010000000000000000000001p-120),
+ TEST ("7.5231647420936572188828392294093056435857835827090029386261"
+ "048447055721499765468252007849514484405517578125e-37",
+ true,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ true,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ true,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ true,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ true,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ true,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120),
+ TEST ("7.5231651905091658028243019250027722963589455923928243391111"
+ "518069674229947096932846761774271726608276367187499e-37",
+ false,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000004p-120,
+ false,
+ 0x1.000002fffffffp-120,
+ 0x1.000003p-120,
+ 0x1.000002fffffffp-120,
+ 0x1.000003p-120,
+ false,
+ 0x1.000002fffffffffep-120,
+ 0x1.000003p-120,
+ 0x1.000002fffffffffep-120,
+ 0x1.000003p-120,
+ false,
+ 0x1.000002fffffffffep-120,
+ 0x1.000003p-120,
+ 0x1.000002fffffffffep-120,
+ 0x1.000003p-120,
+ false,
+ 0x1.000002ffffffffffffffffffff8p-120,
+ 0x1.000003p-120,
+ 0x1.000002ffffffffffffffffffff8p-120,
+ 0x1.000003p-120,
+ false,
+ 0x1.000002ffffffffffffffffffffffp-120,
+ 0x1.000003p-120,
+ 0x1.000002ffffffffffffffffffffffp-120,
+ 0x1.000003p-120),
+ TEST ("7.5231651905091658028243019250027722963589455923928243391111"
+ "5180696742299470969328467617742717266082763671875e-37",
+ false,
+ 0x1.000002p-120,
+ 0x1.000004p-120,
+ 0x1.000002p-120,
+ 0x1.000004p-120,
+ true,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ true,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ true,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ true,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ true,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120),
+ TEST ("7.5231651905091658028243019250027722963589455923928243391111"
+ "518069674229947096932846761774271726608276367187501e-37",
+ false,
+ 0x1.000002p-120,
+ 0x1.000004p-120,
+ 0x1.000002p-120,
+ 0x1.000004p-120,
+ false,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.0000030000001p-120,
+ false,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.0000030000000002p-120,
+ false,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.0000030000000002p-120,
+ false,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003000000000000000000008p-120,
+ false,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.0000030000000000000000000001p-120),
+ TEST ("7.5231656389246743867657646205962389491321076020766457395961"
+ "98769229273839442839744151569902896881103515625e-37",
+ true,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ true,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ true,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ true,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ true,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ true,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120),
+ TEST ("340282356779733661637539395458142568447.999",
+ false,
+ 0xf.fffffp+124,
+ 0xf.fffffp+124,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.fffff7ffffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff7ffffff8p+124,
+ 0xf.fffff8p+124,
+ false,
+ 0xf.fffff7fffffffffp+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff7fffffffffp+124,
+ 0xf.fffff8p+124,
+ false,
+ 0xf.fffff7fffffffffp+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff7fffffffffp+124,
+ 0xf.fffff8p+124,
+ false,
+ 0xf.fffff7fffffffffffffffffffcp+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff7fffffffffffffffffffcp+124,
+ 0xf.fffff8p+124,
+ false,
+ 0xf.fffff7fffffffffffffffffffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff7fffffffffffffffffffff8p+124,
+ 0xf.fffff8p+124),
+ TEST ("340282356779733661637539395458142568448",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ true,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ true,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ true,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ true,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ true,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124),
+ TEST ("340282356779733661637539395458142568448.001",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff80000008p+124,
+ false,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8000000001p+124,
+ false,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8000000001p+124,
+ false,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff800000000000000000004p+124,
+ false,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff80000000000000000000008p+124),
+ TEST ("-340282356779733661637539395458142568447.999",
+ false,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff7ffffff8p+124,
+ -0xf.fffff7ffffff8p+124,
+ false,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff7fffffffffp+124,
+ -0xf.fffff7fffffffffp+124,
+ false,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff7fffffffffp+124,
+ -0xf.fffff7fffffffffp+124,
+ false,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff7fffffffffffffffffffcp+124,
+ -0xf.fffff7fffffffffffffffffffcp+124,
+ false,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff7fffffffffffffffffffff8p+124,
+ -0xf.fffff7fffffffffffffffffffff8p+124),
+ TEST ("-340282356779733661637539395458142568448",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ true,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ true,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ true,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ true,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ true,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124),
+ TEST ("-340282356779733661637539395458142568448.001",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -0xf.fffff80000008p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ false,
+ -0xf.fffff8000000001p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ false,
+ -0xf.fffff8000000001p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ false,
+ -0xf.fffff800000000000000000004p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ false,
+ -0xf.fffff80000000000000000000008p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124),
+ TEST ("179769313486231580793728971405303415079934132710037826936173"
+ "778980444968292764750946649017977587207096330286416692887910"
+ "946555547851940402630657488671505820681908902000708383676273"
+ "854845817711531764475730270069855571366959622842914819860834"
+ "936475292719074168444365510704342711559699508093042880177904"
+ "174497791.999",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ 0xf.ffffffffffff8p+1020,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ false,
+ 0xf.ffffffffffffbffp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffbffp+1020,
+ 0xf.ffffffffffffcp+1020,
+ false,
+ 0xf.ffffffffffffbffp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffbffp+1020,
+ 0xf.ffffffffffffcp+1020,
+ false,
+ 0xf.ffffffffffffbffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffbffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ false,
+ 0xf.ffffffffffffbffffffffffffff8p+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffbffffffffffffff8p+1020,
+ 0xf.ffffffffffffcp+1020),
+ TEST ("179769313486231580793728971405303415079934132710037826936173"
+ "778980444968292764750946649017977587207096330286416692887910"
+ "946555547851940402630657488671505820681908902000708383676273"
+ "854845817711531764475730270069855571366959622842914819860834"
+ "936475292719074168444365510704342711559699508093042880177904"
+ "174497792",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ true,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ true,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ false,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ true,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020),
+ TEST ("179769313486231580793728971405303415079934132710037826936173"
+ "778980444968292764750946649017977587207096330286416692887910"
+ "946555547851940402630657488671505820681908902000708383676273"
+ "854845817711531764475730270069855571366959622842914819860834"
+ "936475292719074168444365510704342711559699508093042880177904"
+ "174497792.001",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ false,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffc01p+1020,
+ false,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffc01p+1020,
+ false,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffc0000000000004p+1020,
+ false,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffc000000000000008p+1020),
+ TEST ("-17976931348623158079372897140530341507993413271003782693617"
+ "377898044496829276475094664901797758720709633028641669288791"
+ "094655554785194040263065748867150582068190890200070838367627"
+ "385484581771153176447573027006985557136695962284291481986083"
+ "493647529271907416844436551070434271155969950809304288017790"
+ "4174497791.999",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ false,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffbffp+1020,
+ -0xf.ffffffffffffbffp+1020,
+ false,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffbffp+1020,
+ -0xf.ffffffffffffbffp+1020,
+ false,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffbffffffffffffcp+1020,
+ -0xf.ffffffffffffbffffffffffffcp+1020,
+ false,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffbffffffffffffff8p+1020,
+ -0xf.ffffffffffffbffffffffffffff8p+1020),
+ TEST ("-17976931348623158079372897140530341507993413271003782693617"
+ "377898044496829276475094664901797758720709633028641669288791"
+ "094655554785194040263065748867150582068190890200070838367627"
+ "385484581771153176447573027006985557136695962284291481986083"
+ "493647529271907416844436551070434271155969950809304288017790"
+ "4174497792",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ true,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ true,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ false,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ true,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020),
+ TEST ("-17976931348623158079372897140530341507993413271003782693617"
+ "377898044496829276475094664901797758720709633028641669288791"
+ "094655554785194040263065748867150582068190890200070838367627"
+ "385484581771153176447573027006985557136695962284291481986083"
+ "493647529271907416844436551070434271155969950809304288017790"
+ "4174497792.001",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ false,
+ -0xf.ffffffffffffc01p+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ false,
+ -0xf.ffffffffffffc01p+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ false,
+ -0xf.ffffffffffffc0000000000004p+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ false,
+ -0xf.ffffffffffffc000000000000008p+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020),
+ TEST ("118973149535723176505351158982948866796625400469556721895649"
+ "927756249918185172720476044944290457046138433056764616744328"
+ "666255526748948793023632513609765434237723241753648908036202"
+ "958495124648560574092817813661123067421904850038181180520787"
+ "720310726881239888580817051703268776757919551260442611296993"
+ "969730906497042135737359373754818979106457807539652027804156"
+ "491987771033211787185996492320631117543475322122625353433719"
+ "930462950413766867781210335973022293561007134342532563356262"
+ "609267460063335819387905541393759243547993474715549691352074"
+ "891450084783459970660481689991674771307443551458551137274603"
+ "094678907537177579699931235422786658780337099286207273033150"
+ "295133847635735008945346069635452157254692607776538304457707"
+ "598289220004738023060594798392660507455937428888763514661408"
+ "758068906506527143720723156203739676372818578090840614216621"
+ "704787774611256823213431325634056809505691175988424606654072"
+ "823115950827627377808673574181547198668714142143234447550206"
+ "269197545774263993130119778810659043621312707109068433886162"
+ "877222844491518930341896313561238988520360803607534987178305"
+ "043520937299838173444083502027340452162582038296009574808809"
+ "658742434897860755961343752419543802653239216337103370292742"
+ "935497502474626454559729017094560234867236701379230234809843"
+ "263739640909561388493227725171983531003154799850580375254640"
+ "686684370650275318316632539920970969803838872914424760535111"
+ "444864748847573042963569291679400178896696862026500700279826"
+ "635302471702206627303799047632971460017199544567373231610376"
+ "256879987134317934150014443436145710546137924490489525241523"
+ "018271239906743645663976778059895127442517397682525944430951"
+ "907648109952479454685655581652571021331761401038962049122047"
+ "111009185757383743827811254014770944602713378187451095200132"
+ "611700632386420792585207954137064426995712656449343534120120"
+ "770857498813673742586478583964512406030930704197486727636333"
+ "837001863610516286928300891774383071105022919314408502968809"
+ "463848377324668014115592383521324785361676372582468085716775"
+ "183709078048790084022838728361454734650904480489014369184979"
+ "256497738392744524915616501449487520501300124861778269881261"
+ "335544037735715125808986359728419859776521586683035924100574"
+ "850554368935873803132428446524362913648833348768663733118103"
+ "918959060412499201797234385239260504905744357611987327994540"
+ "083286019952793692265006211633524675976369938866409689573287"
+ "599490442761701229217689614343727392339547174221615984024864"
+ "635625680108391566720681134647098412863051374760613506003971"
+ "759070209697293081442875903240426975910170967179075646317814"
+ "394978762382183679266247724762405284284971833355044962214065"
+ "895558105408175131247181971272672247996246595857705695208092"
+ "816044125822560989770526261449460733912621692806952140652061"
+ "911968824328747339453822511902787546522099225623311147726504"
+ "972617425102845212076162056723650625826928778132002074035405"
+ "250631109426611640681070927283430486232053929420514345435713"
+ "131387967949326001734866894273047449417824913738789829732833"
+ "683358900903818016968127085077418070951770702999663693968324"
+ "004781728763310108379440442854174041581191669623267749855519"
+ "774427387794278666183504498843857475877442235608736818515722"
+ "862733587905866015455830953591207040129558473662150426884726"
+ "759522376583586317425575669726781893104752341432891868770513"
+ "406836036136374264038296610854599454591170582569741798904328"
+ "676755131072831974295435585611673171096113833795735888591844"
+ "569864166955969416680807491722688418115891753669917660968752"
+ "228842669182040018336152355940915579955628386232949747891257"
+ "526145783057949776122896048841308261113063674538553146663451"
+ "574384023903569848640351704415703922683108552880537081027404"
+ "397775617608412295293311763789489900990611859125572525530349"
+ "278319943261304784125553748811339225969956465404836696490782"
+ "500903694674135036899321686023782466034636817818347651623601"
+ "663129318574761269352028560641266614840108083315301260274558"
+ "575087296910384815285134460531715154639604115052348665171547"
+ "251609075784863196403541944155425166776423403472211742139313"
+ "210299896884252707306862499895115691675551238140467142819537"
+ "867343414276518703858928008759955391140729958278175965217739"
+ "826511218924463113077693598006228365514899236789515147503266"
+ "616268809617626228164916917150602464494142485507467876173251"
+ "398398846807079309227567538802476335624194115637802439400050"
+ "221934368975949846684026462252790745597563393487879954351820"
+ "652138303761879543933808642920064500206512003954563931569820"
+ "114768348051593629274325149906343853129692245386396887281599"
+ "735312588117968646270517005121997466606469447530616465384255"
+ "826304380842850779833108567141643769616400809617173972138187"
+ "711971431230616321035038259922624655396612597024040812967444"
+ "207673594478417900666764580589685104809363813759667069693701"
+ "069921295791929938093722225050956280798177934138468414654728"
+ "631498256418191041953123619406060363406390776140155709737059"
+ "125898120366007955506160309553860446596202876233728025871625"
+ "578031503869424406179027994752890226443351619365453243328968"
+ "8740976918527.999",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ 0xf.fffffffffffffffp+16380,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ 0xf.fffffffffffffffp+16380,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffff7fffffffffff8p+16380,
+ 0xf.fffffffffffffff8p+16380,
+ 0xf.fffffffffffffff7fffffffffff8p+16380,
+ 0xf.fffffffffffffff8p+16380),
+ TEST ("118973149535723176505351158982948866796625400469556721895649"
+ "927756249918185172720476044944290457046138433056764616744328"
+ "666255526748948793023632513609765434237723241753648908036202"
+ "958495124648560574092817813661123067421904850038181180520787"
+ "720310726881239888580817051703268776757919551260442611296993"
+ "969730906497042135737359373754818979106457807539652027804156"
+ "491987771033211787185996492320631117543475322122625353433719"
+ "930462950413766867781210335973022293561007134342532563356262"
+ "609267460063335819387905541393759243547993474715549691352074"
+ "891450084783459970660481689991674771307443551458551137274603"
+ "094678907537177579699931235422786658780337099286207273033150"
+ "295133847635735008945346069635452157254692607776538304457707"
+ "598289220004738023060594798392660507455937428888763514661408"
+ "758068906506527143720723156203739676372818578090840614216621"
+ "704787774611256823213431325634056809505691175988424606654072"
+ "823115950827627377808673574181547198668714142143234447550206"
+ "269197545774263993130119778810659043621312707109068433886162"
+ "877222844491518930341896313561238988520360803607534987178305"
+ "043520937299838173444083502027340452162582038296009574808809"
+ "658742434897860755961343752419543802653239216337103370292742"
+ "935497502474626454559729017094560234867236701379230234809843"
+ "263739640909561388493227725171983531003154799850580375254640"
+ "686684370650275318316632539920970969803838872914424760535111"
+ "444864748847573042963569291679400178896696862026500700279826"
+ "635302471702206627303799047632971460017199544567373231610376"
+ "256879987134317934150014443436145710546137924490489525241523"
+ "018271239906743645663976778059895127442517397682525944430951"
+ "907648109952479454685655581652571021331761401038962049122047"
+ "111009185757383743827811254014770944602713378187451095200132"
+ "611700632386420792585207954137064426995712656449343534120120"
+ "770857498813673742586478583964512406030930704197486727636333"
+ "837001863610516286928300891774383071105022919314408502968809"
+ "463848377324668014115592383521324785361676372582468085716775"
+ "183709078048790084022838728361454734650904480489014369184979"
+ "256497738392744524915616501449487520501300124861778269881261"
+ "335544037735715125808986359728419859776521586683035924100574"
+ "850554368935873803132428446524362913648833348768663733118103"
+ "918959060412499201797234385239260504905744357611987327994540"
+ "083286019952793692265006211633524675976369938866409689573287"
+ "599490442761701229217689614343727392339547174221615984024864"
+ "635625680108391566720681134647098412863051374760613506003971"
+ "759070209697293081442875903240426975910170967179075646317814"
+ "394978762382183679266247724762405284284971833355044962214065"
+ "895558105408175131247181971272672247996246595857705695208092"
+ "816044125822560989770526261449460733912621692806952140652061"
+ "911968824328747339453822511902787546522099225623311147726504"
+ "972617425102845212076162056723650625826928778132002074035405"
+ "250631109426611640681070927283430486232053929420514345435713"
+ "131387967949326001734866894273047449417824913738789829732833"
+ "683358900903818016968127085077418070951770702999663693968324"
+ "004781728763310108379440442854174041581191669623267749855519"
+ "774427387794278666183504498843857475877442235608736818515722"
+ "862733587905866015455830953591207040129558473662150426884726"
+ "759522376583586317425575669726781893104752341432891868770513"
+ "406836036136374264038296610854599454591170582569741798904328"
+ "676755131072831974295435585611673171096113833795735888591844"
+ "569864166955969416680807491722688418115891753669917660968752"
+ "228842669182040018336152355940915579955628386232949747891257"
+ "526145783057949776122896048841308261113063674538553146663451"
+ "574384023903569848640351704415703922683108552880537081027404"
+ "397775617608412295293311763789489900990611859125572525530349"
+ "278319943261304784125553748811339225969956465404836696490782"
+ "500903694674135036899321686023782466034636817818347651623601"
+ "663129318574761269352028560641266614840108083315301260274558"
+ "575087296910384815285134460531715154639604115052348665171547"
+ "251609075784863196403541944155425166776423403472211742139313"
+ "210299896884252707306862499895115691675551238140467142819537"
+ "867343414276518703858928008759955391140729958278175965217739"
+ "826511218924463113077693598006228365514899236789515147503266"
+ "616268809617626228164916917150602464494142485507467876173251"
+ "398398846807079309227567538802476335624194115637802439400050"
+ "221934368975949846684026462252790745597563393487879954351820"
+ "652138303761879543933808642920064500206512003954563931569820"
+ "114768348051593629274325149906343853129692245386396887281599"
+ "735312588117968646270517005121997466606469447530616465384255"
+ "826304380842850779833108567141643769616400809617173972138187"
+ "711971431230616321035038259922624655396612597024040812967444"
+ "207673594478417900666764580589685104809363813759667069693701"
+ "069921295791929938093722225050956280798177934138468414654728"
+ "631498256418191041953123619406060363406390776140155709737059"
+ "125898120366007955506160309553860446596202876233728025871625"
+ "578031503869424406179027994752890226443351619365453243328968"
+ "8740976918528",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ true,
+ 0xf.fffffffffffffff8p+16380,
+ 0xf.fffffffffffffff8p+16380,
+ 0xf.fffffffffffffff8p+16380,
+ 0xf.fffffffffffffff8p+16380),
+ TEST ("118973149535723176505351158982948866796625400469556721895649"
+ "927756249918185172720476044944290457046138433056764616744328"
+ "666255526748948793023632513609765434237723241753648908036202"
+ "958495124648560574092817813661123067421904850038181180520787"
+ "720310726881239888580817051703268776757919551260442611296993"
+ "969730906497042135737359373754818979106457807539652027804156"
+ "491987771033211787185996492320631117543475322122625353433719"
+ "930462950413766867781210335973022293561007134342532563356262"
+ "609267460063335819387905541393759243547993474715549691352074"
+ "891450084783459970660481689991674771307443551458551137274603"
+ "094678907537177579699931235422786658780337099286207273033150"
+ "295133847635735008945346069635452157254692607776538304457707"
+ "598289220004738023060594798392660507455937428888763514661408"
+ "758068906506527143720723156203739676372818578090840614216621"
+ "704787774611256823213431325634056809505691175988424606654072"
+ "823115950827627377808673574181547198668714142143234447550206"
+ "269197545774263993130119778810659043621312707109068433886162"
+ "877222844491518930341896313561238988520360803607534987178305"
+ "043520937299838173444083502027340452162582038296009574808809"
+ "658742434897860755961343752419543802653239216337103370292742"
+ "935497502474626454559729017094560234867236701379230234809843"
+ "263739640909561388493227725171983531003154799850580375254640"
+ "686684370650275318316632539920970969803838872914424760535111"
+ "444864748847573042963569291679400178896696862026500700279826"
+ "635302471702206627303799047632971460017199544567373231610376"
+ "256879987134317934150014443436145710546137924490489525241523"
+ "018271239906743645663976778059895127442517397682525944430951"
+ "907648109952479454685655581652571021331761401038962049122047"
+ "111009185757383743827811254014770944602713378187451095200132"
+ "611700632386420792585207954137064426995712656449343534120120"
+ "770857498813673742586478583964512406030930704197486727636333"
+ "837001863610516286928300891774383071105022919314408502968809"
+ "463848377324668014115592383521324785361676372582468085716775"
+ "183709078048790084022838728361454734650904480489014369184979"
+ "256497738392744524915616501449487520501300124861778269881261"
+ "335544037735715125808986359728419859776521586683035924100574"
+ "850554368935873803132428446524362913648833348768663733118103"
+ "918959060412499201797234385239260504905744357611987327994540"
+ "083286019952793692265006211633524675976369938866409689573287"
+ "599490442761701229217689614343727392339547174221615984024864"
+ "635625680108391566720681134647098412863051374760613506003971"
+ "759070209697293081442875903240426975910170967179075646317814"
+ "394978762382183679266247724762405284284971833355044962214065"
+ "895558105408175131247181971272672247996246595857705695208092"
+ "816044125822560989770526261449460733912621692806952140652061"
+ "911968824328747339453822511902787546522099225623311147726504"
+ "972617425102845212076162056723650625826928778132002074035405"
+ "250631109426611640681070927283430486232053929420514345435713"
+ "131387967949326001734866894273047449417824913738789829732833"
+ "683358900903818016968127085077418070951770702999663693968324"
+ "004781728763310108379440442854174041581191669623267749855519"
+ "774427387794278666183504498843857475877442235608736818515722"
+ "862733587905866015455830953591207040129558473662150426884726"
+ "759522376583586317425575669726781893104752341432891868770513"
+ "406836036136374264038296610854599454591170582569741798904328"
+ "676755131072831974295435585611673171096113833795735888591844"
+ "569864166955969416680807491722688418115891753669917660968752"
+ "228842669182040018336152355940915579955628386232949747891257"
+ "526145783057949776122896048841308261113063674538553146663451"
+ "574384023903569848640351704415703922683108552880537081027404"
+ "397775617608412295293311763789489900990611859125572525530349"
+ "278319943261304784125553748811339225969956465404836696490782"
+ "500903694674135036899321686023782466034636817818347651623601"
+ "663129318574761269352028560641266614840108083315301260274558"
+ "575087296910384815285134460531715154639604115052348665171547"
+ "251609075784863196403541944155425166776423403472211742139313"
+ "210299896884252707306862499895115691675551238140467142819537"
+ "867343414276518703858928008759955391140729958278175965217739"
+ "826511218924463113077693598006228365514899236789515147503266"
+ "616268809617626228164916917150602464494142485507467876173251"
+ "398398846807079309227567538802476335624194115637802439400050"
+ "221934368975949846684026462252790745597563393487879954351820"
+ "652138303761879543933808642920064500206512003954563931569820"
+ "114768348051593629274325149906343853129692245386396887281599"
+ "735312588117968646270517005121997466606469447530616465384255"
+ "826304380842850779833108567141643769616400809617173972138187"
+ "711971431230616321035038259922624655396612597024040812967444"
+ "207673594478417900666764580589685104809363813759667069693701"
+ "069921295791929938093722225050956280798177934138468414654728"
+ "631498256418191041953123619406060363406390776140155709737059"
+ "125898120366007955506160309553860446596202876233728025871625"
+ "578031503869424406179027994752890226443351619365453243328968"
+ "8740976918528.001",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffff8p+16380,
+ 0xf.fffffffffffffff8p+16380,
+ 0xf.fffffffffffffff8p+16380,
+ 0xf.fffffffffffffff8000000000008p+16380),
+ TEST ("-11897314953572317650535115898294886679662540046955672189564"
+ "992775624991818517272047604494429045704613843305676461674432"
+ "866625552674894879302363251360976543423772324175364890803620"
+ "295849512464856057409281781366112306742190485003818118052078"
+ "772031072688123988858081705170326877675791955126044261129699"
+ "396973090649704213573735937375481897910645780753965202780415"
+ "649198777103321178718599649232063111754347532212262535343371"
+ "993046295041376686778121033597302229356100713434253256335626"
+ "260926746006333581938790554139375924354799347471554969135207"
+ "489145008478345997066048168999167477130744355145855113727460"
+ "309467890753717757969993123542278665878033709928620727303315"
+ "029513384763573500894534606963545215725469260777653830445770"
+ "759828922000473802306059479839266050745593742888876351466140"
+ "875806890650652714372072315620373967637281857809084061421662"
+ "170478777461125682321343132563405680950569117598842460665407"
+ "282311595082762737780867357418154719866871414214323444755020"
+ "626919754577426399313011977881065904362131270710906843388616"
+ "287722284449151893034189631356123898852036080360753498717830"
+ "504352093729983817344408350202734045216258203829600957480880"
+ "965874243489786075596134375241954380265323921633710337029274"
+ "293549750247462645455972901709456023486723670137923023480984"
+ "326373964090956138849322772517198353100315479985058037525464"
+ "068668437065027531831663253992097096980383887291442476053511"
+ "144486474884757304296356929167940017889669686202650070027982"
+ "663530247170220662730379904763297146001719954456737323161037"
+ "625687998713431793415001444343614571054613792449048952524152"
+ "301827123990674364566397677805989512744251739768252594443095"
+ "190764810995247945468565558165257102133176140103896204912204"
+ "711100918575738374382781125401477094460271337818745109520013"
+ "261170063238642079258520795413706442699571265644934353412012"
+ "077085749881367374258647858396451240603093070419748672763633"
+ "383700186361051628692830089177438307110502291931440850296880"
+ "946384837732466801411559238352132478536167637258246808571677"
+ "518370907804879008402283872836145473465090448048901436918497"
+ "925649773839274452491561650144948752050130012486177826988126"
+ "133554403773571512580898635972841985977652158668303592410057"
+ "485055436893587380313242844652436291364883334876866373311810"
+ "391895906041249920179723438523926050490574435761198732799454"
+ "008328601995279369226500621163352467597636993886640968957328"
+ "759949044276170122921768961434372739233954717422161598402486"
+ "463562568010839156672068113464709841286305137476061350600397"
+ "175907020969729308144287590324042697591017096717907564631781"
+ "439497876238218367926624772476240528428497183335504496221406"
+ "589555810540817513124718197127267224799624659585770569520809"
+ "281604412582256098977052626144946073391262169280695214065206"
+ "191196882432874733945382251190278754652209922562331114772650"
+ "497261742510284521207616205672365062582692877813200207403540"
+ "525063110942661164068107092728343048623205392942051434543571"
+ "313138796794932600173486689427304744941782491373878982973283"
+ "368335890090381801696812708507741807095177070299966369396832"
+ "400478172876331010837944044285417404158119166962326774985551"
+ "977442738779427866618350449884385747587744223560873681851572"
+ "286273358790586601545583095359120704012955847366215042688472"
+ "675952237658358631742557566972678189310475234143289186877051"
+ "340683603613637426403829661085459945459117058256974179890432"
+ "867675513107283197429543558561167317109611383379573588859184"
+ "456986416695596941668080749172268841811589175366991766096875"
+ "222884266918204001833615235594091557995562838623294974789125"
+ "752614578305794977612289604884130826111306367453855314666345"
+ "157438402390356984864035170441570392268310855288053708102740"
+ "439777561760841229529331176378948990099061185912557252553034"
+ "927831994326130478412555374881133922596995646540483669649078"
+ "250090369467413503689932168602378246603463681781834765162360"
+ "166312931857476126935202856064126661484010808331530126027455"
+ "857508729691038481528513446053171515463960411505234866517154"
+ "725160907578486319640354194415542516677642340347221174213931"
+ "321029989688425270730686249989511569167555123814046714281953"
+ "786734341427651870385892800875995539114072995827817596521773"
+ "982651121892446311307769359800622836551489923678951514750326"
+ "661626880961762622816491691715060246449414248550746787617325"
+ "139839884680707930922756753880247633562419411563780243940005"
+ "022193436897594984668402646225279074559756339348787995435182"
+ "065213830376187954393380864292006450020651200395456393156982"
+ "011476834805159362927432514990634385312969224538639688728159"
+ "973531258811796864627051700512199746660646944753061646538425"
+ "582630438084285077983310856714164376961640080961717397213818"
+ "771197143123061632103503825992262465539661259702404081296744"
+ "420767359447841790066676458058968510480936381375966706969370"
+ "106992129579192993809372222505095628079817793413846841465472"
+ "863149825641819104195312361940606036340639077614015570973705"
+ "912589812036600795550616030955386044659620287623372802587162"
+ "557803150386942440617902799475289022644335161936545324332896"
+ "88740976918527.999",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ false,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ false,
+ -0xf.fffffffffffffff8p+16380,
+ -0xf.fffffffffffffff8p+16380,
+ -0xf.fffffffffffffff7fffffffffff8p+16380,
+ -0xf.fffffffffffffff7fffffffffff8p+16380),
+ TEST ("-11897314953572317650535115898294886679662540046955672189564"
+ "992775624991818517272047604494429045704613843305676461674432"
+ "866625552674894879302363251360976543423772324175364890803620"
+ "295849512464856057409281781366112306742190485003818118052078"
+ "772031072688123988858081705170326877675791955126044261129699"
+ "396973090649704213573735937375481897910645780753965202780415"
+ "649198777103321178718599649232063111754347532212262535343371"
+ "993046295041376686778121033597302229356100713434253256335626"
+ "260926746006333581938790554139375924354799347471554969135207"
+ "489145008478345997066048168999167477130744355145855113727460"
+ "309467890753717757969993123542278665878033709928620727303315"
+ "029513384763573500894534606963545215725469260777653830445770"
+ "759828922000473802306059479839266050745593742888876351466140"
+ "875806890650652714372072315620373967637281857809084061421662"
+ "170478777461125682321343132563405680950569117598842460665407"
+ "282311595082762737780867357418154719866871414214323444755020"
+ "626919754577426399313011977881065904362131270710906843388616"
+ "287722284449151893034189631356123898852036080360753498717830"
+ "504352093729983817344408350202734045216258203829600957480880"
+ "965874243489786075596134375241954380265323921633710337029274"
+ "293549750247462645455972901709456023486723670137923023480984"
+ "326373964090956138849322772517198353100315479985058037525464"
+ "068668437065027531831663253992097096980383887291442476053511"
+ "144486474884757304296356929167940017889669686202650070027982"
+ "663530247170220662730379904763297146001719954456737323161037"
+ "625687998713431793415001444343614571054613792449048952524152"
+ "301827123990674364566397677805989512744251739768252594443095"
+ "190764810995247945468565558165257102133176140103896204912204"
+ "711100918575738374382781125401477094460271337818745109520013"
+ "261170063238642079258520795413706442699571265644934353412012"
+ "077085749881367374258647858396451240603093070419748672763633"
+ "383700186361051628692830089177438307110502291931440850296880"
+ "946384837732466801411559238352132478536167637258246808571677"
+ "518370907804879008402283872836145473465090448048901436918497"
+ "925649773839274452491561650144948752050130012486177826988126"
+ "133554403773571512580898635972841985977652158668303592410057"
+ "485055436893587380313242844652436291364883334876866373311810"
+ "391895906041249920179723438523926050490574435761198732799454"
+ "008328601995279369226500621163352467597636993886640968957328"
+ "759949044276170122921768961434372739233954717422161598402486"
+ "463562568010839156672068113464709841286305137476061350600397"
+ "175907020969729308144287590324042697591017096717907564631781"
+ "439497876238218367926624772476240528428497183335504496221406"
+ "589555810540817513124718197127267224799624659585770569520809"
+ "281604412582256098977052626144946073391262169280695214065206"
+ "191196882432874733945382251190278754652209922562331114772650"
+ "497261742510284521207616205672365062582692877813200207403540"
+ "525063110942661164068107092728343048623205392942051434543571"
+ "313138796794932600173486689427304744941782491373878982973283"
+ "368335890090381801696812708507741807095177070299966369396832"
+ "400478172876331010837944044285417404158119166962326774985551"
+ "977442738779427866618350449884385747587744223560873681851572"
+ "286273358790586601545583095359120704012955847366215042688472"
+ "675952237658358631742557566972678189310475234143289186877051"
+ "340683603613637426403829661085459945459117058256974179890432"
+ "867675513107283197429543558561167317109611383379573588859184"
+ "456986416695596941668080749172268841811589175366991766096875"
+ "222884266918204001833615235594091557995562838623294974789125"
+ "752614578305794977612289604884130826111306367453855314666345"
+ "157438402390356984864035170441570392268310855288053708102740"
+ "439777561760841229529331176378948990099061185912557252553034"
+ "927831994326130478412555374881133922596995646540483669649078"
+ "250090369467413503689932168602378246603463681781834765162360"
+ "166312931857476126935202856064126661484010808331530126027455"
+ "857508729691038481528513446053171515463960411505234866517154"
+ "725160907578486319640354194415542516677642340347221174213931"
+ "321029989688425270730686249989511569167555123814046714281953"
+ "786734341427651870385892800875995539114072995827817596521773"
+ "982651121892446311307769359800622836551489923678951514750326"
+ "661626880961762622816491691715060246449414248550746787617325"
+ "139839884680707930922756753880247633562419411563780243940005"
+ "022193436897594984668402646225279074559756339348787995435182"
+ "065213830376187954393380864292006450020651200395456393156982"
+ "011476834805159362927432514990634385312969224538639688728159"
+ "973531258811796864627051700512199746660646944753061646538425"
+ "582630438084285077983310856714164376961640080961717397213818"
+ "771197143123061632103503825992262465539661259702404081296744"
+ "420767359447841790066676458058968510480936381375966706969370"
+ "106992129579192993809372222505095628079817793413846841465472"
+ "863149825641819104195312361940606036340639077614015570973705"
+ "912589812036600795550616030955386044659620287623372802587162"
+ "557803150386942440617902799475289022644335161936545324332896"
+ "88740976918528",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ true,
+ -0xf.fffffffffffffff8p+16380,
+ -0xf.fffffffffffffff8p+16380,
+ -0xf.fffffffffffffff8p+16380,
+ -0xf.fffffffffffffff8p+16380),
+ TEST ("-11897314953572317650535115898294886679662540046955672189564"
+ "992775624991818517272047604494429045704613843305676461674432"
+ "866625552674894879302363251360976543423772324175364890803620"
+ "295849512464856057409281781366112306742190485003818118052078"
+ "772031072688123988858081705170326877675791955126044261129699"
+ "396973090649704213573735937375481897910645780753965202780415"
+ "649198777103321178718599649232063111754347532212262535343371"
+ "993046295041376686778121033597302229356100713434253256335626"
+ "260926746006333581938790554139375924354799347471554969135207"
+ "489145008478345997066048168999167477130744355145855113727460"
+ "309467890753717757969993123542278665878033709928620727303315"
+ "029513384763573500894534606963545215725469260777653830445770"
+ "759828922000473802306059479839266050745593742888876351466140"
+ "875806890650652714372072315620373967637281857809084061421662"
+ "170478777461125682321343132563405680950569117598842460665407"
+ "282311595082762737780867357418154719866871414214323444755020"
+ "626919754577426399313011977881065904362131270710906843388616"
+ "287722284449151893034189631356123898852036080360753498717830"
+ "504352093729983817344408350202734045216258203829600957480880"
+ "965874243489786075596134375241954380265323921633710337029274"
+ "293549750247462645455972901709456023486723670137923023480984"
+ "326373964090956138849322772517198353100315479985058037525464"
+ "068668437065027531831663253992097096980383887291442476053511"
+ "144486474884757304296356929167940017889669686202650070027982"
+ "663530247170220662730379904763297146001719954456737323161037"
+ "625687998713431793415001444343614571054613792449048952524152"
+ "301827123990674364566397677805989512744251739768252594443095"
+ "190764810995247945468565558165257102133176140103896204912204"
+ "711100918575738374382781125401477094460271337818745109520013"
+ "261170063238642079258520795413706442699571265644934353412012"
+ "077085749881367374258647858396451240603093070419748672763633"
+ "383700186361051628692830089177438307110502291931440850296880"
+ "946384837732466801411559238352132478536167637258246808571677"
+ "518370907804879008402283872836145473465090448048901436918497"
+ "925649773839274452491561650144948752050130012486177826988126"
+ "133554403773571512580898635972841985977652158668303592410057"
+ "485055436893587380313242844652436291364883334876866373311810"
+ "391895906041249920179723438523926050490574435761198732799454"
+ "008328601995279369226500621163352467597636993886640968957328"
+ "759949044276170122921768961434372739233954717422161598402486"
+ "463562568010839156672068113464709841286305137476061350600397"
+ "175907020969729308144287590324042697591017096717907564631781"
+ "439497876238218367926624772476240528428497183335504496221406"
+ "589555810540817513124718197127267224799624659585770569520809"
+ "281604412582256098977052626144946073391262169280695214065206"
+ "191196882432874733945382251190278754652209922562331114772650"
+ "497261742510284521207616205672365062582692877813200207403540"
+ "525063110942661164068107092728343048623205392942051434543571"
+ "313138796794932600173486689427304744941782491373878982973283"
+ "368335890090381801696812708507741807095177070299966369396832"
+ "400478172876331010837944044285417404158119166962326774985551"
+ "977442738779427866618350449884385747587744223560873681851572"
+ "286273358790586601545583095359120704012955847366215042688472"
+ "675952237658358631742557566972678189310475234143289186877051"
+ "340683603613637426403829661085459945459117058256974179890432"
+ "867675513107283197429543558561167317109611383379573588859184"
+ "456986416695596941668080749172268841811589175366991766096875"
+ "222884266918204001833615235594091557995562838623294974789125"
+ "752614578305794977612289604884130826111306367453855314666345"
+ "157438402390356984864035170441570392268310855288053708102740"
+ "439777561760841229529331176378948990099061185912557252553034"
+ "927831994326130478412555374881133922596995646540483669649078"
+ "250090369467413503689932168602378246603463681781834765162360"
+ "166312931857476126935202856064126661484010808331530126027455"
+ "857508729691038481528513446053171515463960411505234866517154"
+ "725160907578486319640354194415542516677642340347221174213931"
+ "321029989688425270730686249989511569167555123814046714281953"
+ "786734341427651870385892800875995539114072995827817596521773"
+ "982651121892446311307769359800622836551489923678951514750326"
+ "661626880961762622816491691715060246449414248550746787617325"
+ "139839884680707930922756753880247633562419411563780243940005"
+ "022193436897594984668402646225279074559756339348787995435182"
+ "065213830376187954393380864292006450020651200395456393156982"
+ "011476834805159362927432514990634385312969224538639688728159"
+ "973531258811796864627051700512199746660646944753061646538425"
+ "582630438084285077983310856714164376961640080961717397213818"
+ "771197143123061632103503825992262465539661259702404081296744"
+ "420767359447841790066676458058968510480936381375966706969370"
+ "106992129579192993809372222505095628079817793413846841465472"
+ "863149825641819104195312361940606036340639077614015570973705"
+ "912589812036600795550616030955386044659620287623372802587162"
+ "557803150386942440617902799475289022644335161936545324332896"
+ "88740976918528.001",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ false,
+ -0xf.fffffffffffffff8000000000008p+16380,
+ -0xf.fffffffffffffff8p+16380,
+ -0xf.fffffffffffffff8p+16380,
+ -0xf.fffffffffffffff8p+16380),
+ TEST ("118973149535723176508575932662800707347995686986910214150118"
+ "685272271246896789803961473130416053705672050873552479421805"
+ "932646640744124594447361172514341324846716679654551308018400"
+ "452551246797021031695590308415421099521962856162050274568841"
+ "297915828747574343774874752902176710049525787625138678906010"
+ "048638212027057374683542842282633896097240913572043788690878"
+ "561421008447838407815393303366617352859876685151925036335142"
+ "606462825839541908847139311166770091872983498508632067665424"
+ "131663456011801988221011933744533095583591952713287509471572"
+ "005635584655570174753698625195967118200265238753375268656404"
+ "300638718932246773699829720984119713851462400809295266529707"
+ "450603039675996477317034685632764277790214944500590950459817"
+ "905458649624723235138950801408157339866516893477731877579183"
+ "713595679581558427625325833939652897845282019149923069371763"
+ "621014587926698827182969408373803807712292191282429102445352"
+ "493434039402290243933941906906661090602900960765874258303002"
+ "994639315656152078708796474719793763077934223746582725715380"
+ "546621026022818892467551940977566283266498758568504813830755"
+ "715585325649227824857891916443381390920079346240984072859876"
+ "394789650127468861490822526766717770136680743866932662343305"
+ "821821344306240809967537078707691232937387041140557168161956"
+ "672595323950666742010786584275766171661791973302251394804664"
+ "351065107886557299707326005651230394674710597929211000345040"
+ "748992483614253006562424867893567074606589931788062200063807"
+ "336740036940230215831403322125165368742446805152078682411506"
+ "081843753974005583111391605547148303480887461773984314393817"
+ "233328426227146997925421743280885595916487699461777590949432"
+ "536021389649845214065322016198143547250143861460313408300535"
+ "800647014276175548485543791298383644643679669618879907720347"
+ "361578030001247419574448359597988425487829219851305162204925"
+ "876422580754230478244492592334149461342828532046897137732862"
+ "560405101567370570895662663174689131741739602970845694214086"
+ "383402465037069569640956912385125748139813888875258203003486"
+ "978747055202810394072908580324008598756993885667142200558137"
+ "216665049755676940757442911860295559656788759871904662758651"
+ "106796978788783386988295123326864580419821595430891867179378"
+ "372968821128698879468814267529461494723425453808822356093436"
+ "114567635804621183162768389034017821036515461700163537265334"
+ "837042272659885702600247792917728828912373907035369136531164"
+ "551871575024551077026080114197652598224677403885378544255851"
+ "452142889211152237506343909351748731538683443195842912801950"
+ "740929058503113127929421291089844021925400931905939216271347"
+ "501989193058654389516377770771439860033940981826669939750630"
+ "966060749188986231404992238674933998516958950824840538996637"
+ "227947236848099456610159878061379742621311380927234118601003"
+ "068752002060437285024623575047782086630607224900910789188204"
+ "422115342157245494745974521832782208601602710639261482504706"
+ "793704189474198047840288064399210243702202724597107455534275"
+ "321401119382263147115748905050195256886082040192083380490209"
+ "648570353905656303876661710430922155024620842080323610266391"
+ "819853291160589645614945256684769911320943457402697573094119"
+ "430125589389298495428377185239916427991844172165080029177729"
+ "625180644077484441695092005844026411665118679537869781924378"
+ "377060887769389297625907410934020531742739577183152327119791"
+ "567636713426904553654134937766951789571845662564530364234831"
+ "655818811851573018210173773037253988893680153247404060131255"
+ "432297982534770778617218088583998040670598195597843579610890"
+ "315316606725381521608825464438386306376596459107591134507541"
+ "153403024199191222328259713530472683187873517955642380703639"
+ "029816037096049042094836437281075965243968431839386959736989"
+ "889027924230006904683050305965712585804355337311372959487108"
+ "794286031594805559334414767793211932142402860019029250966461"
+ "933621763149049802791695077716375242516443825235146860078555"
+ "453142397983479144560015010889077242726183149587493050950967"
+ "941488752366197740591478464591650201477772717579831983405962"
+ "171742164889284586217913115136227964861078958766284010901639"
+ "781256012341028188155836968476480842715858962105341815444164"
+ "696766584018508513610260777540911573496315580383328678958350"
+ "148157337222619548467971967434956296433870815461340134721800"
+ "205755114983399523323106573720732056659216468891205124203527"
+ "449961814733926916757607468806003312492414061695431041238453"
+ "023522795690830184799840657478014435335788410588338795921829"
+ "674102072285495410088727730494748054715270026371111466557692"
+ "092596172401951206117443077191868585496116051853795368595736"
+ "003882511620497061598923985774687093334185939744167238203676"
+ "453052472980823976562293117120372063945943890666325365061961"
+ "022928215929070357135085816756816486043117613837876554929621"
+ "856269743752885605649447338817178927896144473776360438797900"
+ "366212779802747593450564030114752479071739585723270865632758"
+ "495434839556211713523098602573445161475191311400514062427097"
+ "780117858230840648695846140902244217544683559565818359212130"
+ "972233447491583165728635513802591543441145939539353470970452"
+ "5536550715391.999",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffff8p+16380,
+ 0xf.fffffffffffffffffffffffffff8p+16380,
+ 0xf.fffffffffffffffffffffffffff8p+16380,
+ INF),
+ TEST ("118973149535723176508575932662800707347995686986910214150118"
+ "685272271246896789803961473130416053705672050873552479421805"
+ "932646640744124594447361172514341324846716679654551308018400"
+ "452551246797021031695590308415421099521962856162050274568841"
+ "297915828747574343774874752902176710049525787625138678906010"
+ "048638212027057374683542842282633896097240913572043788690878"
+ "561421008447838407815393303366617352859876685151925036335142"
+ "606462825839541908847139311166770091872983498508632067665424"
+ "131663456011801988221011933744533095583591952713287509471572"
+ "005635584655570174753698625195967118200265238753375268656404"
+ "300638718932246773699829720984119713851462400809295266529707"
+ "450603039675996477317034685632764277790214944500590950459817"
+ "905458649624723235138950801408157339866516893477731877579183"
+ "713595679581558427625325833939652897845282019149923069371763"
+ "621014587926698827182969408373803807712292191282429102445352"
+ "493434039402290243933941906906661090602900960765874258303002"
+ "994639315656152078708796474719793763077934223746582725715380"
+ "546621026022818892467551940977566283266498758568504813830755"
+ "715585325649227824857891916443381390920079346240984072859876"
+ "394789650127468861490822526766717770136680743866932662343305"
+ "821821344306240809967537078707691232937387041140557168161956"
+ "672595323950666742010786584275766171661791973302251394804664"
+ "351065107886557299707326005651230394674710597929211000345040"
+ "748992483614253006562424867893567074606589931788062200063807"
+ "336740036940230215831403322125165368742446805152078682411506"
+ "081843753974005583111391605547148303480887461773984314393817"
+ "233328426227146997925421743280885595916487699461777590949432"
+ "536021389649845214065322016198143547250143861460313408300535"
+ "800647014276175548485543791298383644643679669618879907720347"
+ "361578030001247419574448359597988425487829219851305162204925"
+ "876422580754230478244492592334149461342828532046897137732862"
+ "560405101567370570895662663174689131741739602970845694214086"
+ "383402465037069569640956912385125748139813888875258203003486"
+ "978747055202810394072908580324008598756993885667142200558137"
+ "216665049755676940757442911860295559656788759871904662758651"
+ "106796978788783386988295123326864580419821595430891867179378"
+ "372968821128698879468814267529461494723425453808822356093436"
+ "114567635804621183162768389034017821036515461700163537265334"
+ "837042272659885702600247792917728828912373907035369136531164"
+ "551871575024551077026080114197652598224677403885378544255851"
+ "452142889211152237506343909351748731538683443195842912801950"
+ "740929058503113127929421291089844021925400931905939216271347"
+ "501989193058654389516377770771439860033940981826669939750630"
+ "966060749188986231404992238674933998516958950824840538996637"
+ "227947236848099456610159878061379742621311380927234118601003"
+ "068752002060437285024623575047782086630607224900910789188204"
+ "422115342157245494745974521832782208601602710639261482504706"
+ "793704189474198047840288064399210243702202724597107455534275"
+ "321401119382263147115748905050195256886082040192083380490209"
+ "648570353905656303876661710430922155024620842080323610266391"
+ "819853291160589645614945256684769911320943457402697573094119"
+ "430125589389298495428377185239916427991844172165080029177729"
+ "625180644077484441695092005844026411665118679537869781924378"
+ "377060887769389297625907410934020531742739577183152327119791"
+ "567636713426904553654134937766951789571845662564530364234831"
+ "655818811851573018210173773037253988893680153247404060131255"
+ "432297982534770778617218088583998040670598195597843579610890"
+ "315316606725381521608825464438386306376596459107591134507541"
+ "153403024199191222328259713530472683187873517955642380703639"
+ "029816037096049042094836437281075965243968431839386959736989"
+ "889027924230006904683050305965712585804355337311372959487108"
+ "794286031594805559334414767793211932142402860019029250966461"
+ "933621763149049802791695077716375242516443825235146860078555"
+ "453142397983479144560015010889077242726183149587493050950967"
+ "941488752366197740591478464591650201477772717579831983405962"
+ "171742164889284586217913115136227964861078958766284010901639"
+ "781256012341028188155836968476480842715858962105341815444164"
+ "696766584018508513610260777540911573496315580383328678958350"
+ "148157337222619548467971967434956296433870815461340134721800"
+ "205755114983399523323106573720732056659216468891205124203527"
+ "449961814733926916757607468806003312492414061695431041238453"
+ "023522795690830184799840657478014435335788410588338795921829"
+ "674102072285495410088727730494748054715270026371111466557692"
+ "092596172401951206117443077191868585496116051853795368595736"
+ "003882511620497061598923985774687093334185939744167238203676"
+ "453052472980823976562293117120372063945943890666325365061961"
+ "022928215929070357135085816756816486043117613837876554929621"
+ "856269743752885605649447338817178927896144473776360438797900"
+ "366212779802747593450564030114752479071739585723270865632758"
+ "495434839556211713523098602573445161475191311400514062427097"
+ "780117858230840648695846140902244217544683559565818359212130"
+ "972233447491583165728635513802591543441145939539353470970452"
+ "5536550715392",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffff8p+16380,
+ INF,
+ 0xf.fffffffffffffffffffffffffff8p+16380,
+ INF),
+ TEST ("118973149535723176508575932662800707347995686986910214150118"
+ "685272271246896789803961473130416053705672050873552479421805"
+ "932646640744124594447361172514341324846716679654551308018400"
+ "452551246797021031695590308415421099521962856162050274568841"
+ "297915828747574343774874752902176710049525787625138678906010"
+ "048638212027057374683542842282633896097240913572043788690878"
+ "561421008447838407815393303366617352859876685151925036335142"
+ "606462825839541908847139311166770091872983498508632067665424"
+ "131663456011801988221011933744533095583591952713287509471572"
+ "005635584655570174753698625195967118200265238753375268656404"
+ "300638718932246773699829720984119713851462400809295266529707"
+ "450603039675996477317034685632764277790214944500590950459817"
+ "905458649624723235138950801408157339866516893477731877579183"
+ "713595679581558427625325833939652897845282019149923069371763"
+ "621014587926698827182969408373803807712292191282429102445352"
+ "493434039402290243933941906906661090602900960765874258303002"
+ "994639315656152078708796474719793763077934223746582725715380"
+ "546621026022818892467551940977566283266498758568504813830755"
+ "715585325649227824857891916443381390920079346240984072859876"
+ "394789650127468861490822526766717770136680743866932662343305"
+ "821821344306240809967537078707691232937387041140557168161956"
+ "672595323950666742010786584275766171661791973302251394804664"
+ "351065107886557299707326005651230394674710597929211000345040"
+ "748992483614253006562424867893567074606589931788062200063807"
+ "336740036940230215831403322125165368742446805152078682411506"
+ "081843753974005583111391605547148303480887461773984314393817"
+ "233328426227146997925421743280885595916487699461777590949432"
+ "536021389649845214065322016198143547250143861460313408300535"
+ "800647014276175548485543791298383644643679669618879907720347"
+ "361578030001247419574448359597988425487829219851305162204925"
+ "876422580754230478244492592334149461342828532046897137732862"
+ "560405101567370570895662663174689131741739602970845694214086"
+ "383402465037069569640956912385125748139813888875258203003486"
+ "978747055202810394072908580324008598756993885667142200558137"
+ "216665049755676940757442911860295559656788759871904662758651"
+ "106796978788783386988295123326864580419821595430891867179378"
+ "372968821128698879468814267529461494723425453808822356093436"
+ "114567635804621183162768389034017821036515461700163537265334"
+ "837042272659885702600247792917728828912373907035369136531164"
+ "551871575024551077026080114197652598224677403885378544255851"
+ "452142889211152237506343909351748731538683443195842912801950"
+ "740929058503113127929421291089844021925400931905939216271347"
+ "501989193058654389516377770771439860033940981826669939750630"
+ "966060749188986231404992238674933998516958950824840538996637"
+ "227947236848099456610159878061379742621311380927234118601003"
+ "068752002060437285024623575047782086630607224900910789188204"
+ "422115342157245494745974521832782208601602710639261482504706"
+ "793704189474198047840288064399210243702202724597107455534275"
+ "321401119382263147115748905050195256886082040192083380490209"
+ "648570353905656303876661710430922155024620842080323610266391"
+ "819853291160589645614945256684769911320943457402697573094119"
+ "430125589389298495428377185239916427991844172165080029177729"
+ "625180644077484441695092005844026411665118679537869781924378"
+ "377060887769389297625907410934020531742739577183152327119791"
+ "567636713426904553654134937766951789571845662564530364234831"
+ "655818811851573018210173773037253988893680153247404060131255"
+ "432297982534770778617218088583998040670598195597843579610890"
+ "315316606725381521608825464438386306376596459107591134507541"
+ "153403024199191222328259713530472683187873517955642380703639"
+ "029816037096049042094836437281075965243968431839386959736989"
+ "889027924230006904683050305965712585804355337311372959487108"
+ "794286031594805559334414767793211932142402860019029250966461"
+ "933621763149049802791695077716375242516443825235146860078555"
+ "453142397983479144560015010889077242726183149587493050950967"
+ "941488752366197740591478464591650201477772717579831983405962"
+ "171742164889284586217913115136227964861078958766284010901639"
+ "781256012341028188155836968476480842715858962105341815444164"
+ "696766584018508513610260777540911573496315580383328678958350"
+ "148157337222619548467971967434956296433870815461340134721800"
+ "205755114983399523323106573720732056659216468891205124203527"
+ "449961814733926916757607468806003312492414061695431041238453"
+ "023522795690830184799840657478014435335788410588338795921829"
+ "674102072285495410088727730494748054715270026371111466557692"
+ "092596172401951206117443077191868585496116051853795368595736"
+ "003882511620497061598923985774687093334185939744167238203676"
+ "453052472980823976562293117120372063945943890666325365061961"
+ "022928215929070357135085816756816486043117613837876554929621"
+ "856269743752885605649447338817178927896144473776360438797900"
+ "366212779802747593450564030114752479071739585723270865632758"
+ "495434839556211713523098602573445161475191311400514062427097"
+ "780117858230840648695846140902244217544683559565818359212130"
+ "972233447491583165728635513802591543441145939539353470970452"
+ "5536550715392.001",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffff8p+16380,
+ INF,
+ 0xf.fffffffffffffffffffffffffff8p+16380,
+ INF),
+ TEST ("-11897314953572317650857593266280070734799568698691021415011"
+ "868527227124689678980396147313041605370567205087355247942180"
+ "593264664074412459444736117251434132484671667965455130801840"
+ "045255124679702103169559030841542109952196285616205027456884"
+ "129791582874757434377487475290217671004952578762513867890601"
+ "004863821202705737468354284228263389609724091357204378869087"
+ "856142100844783840781539330336661735285987668515192503633514"
+ "260646282583954190884713931116677009187298349850863206766542"
+ "413166345601180198822101193374453309558359195271328750947157"
+ "200563558465557017475369862519596711820026523875337526865640"
+ "430063871893224677369982972098411971385146240080929526652970"
+ "745060303967599647731703468563276427779021494450059095045981"
+ "790545864962472323513895080140815733986651689347773187757918"
+ "371359567958155842762532583393965289784528201914992306937176"
+ "362101458792669882718296940837380380771229219128242910244535"
+ "249343403940229024393394190690666109060290096076587425830300"
+ "299463931565615207870879647471979376307793422374658272571538"
+ "054662102602281889246755194097756628326649875856850481383075"
+ "571558532564922782485789191644338139092007934624098407285987"
+ "639478965012746886149082252676671777013668074386693266234330"
+ "582182134430624080996753707870769123293738704114055716816195"
+ "667259532395066674201078658427576617166179197330225139480466"
+ "435106510788655729970732600565123039467471059792921100034504"
+ "074899248361425300656242486789356707460658993178806220006380"
+ "733674003694023021583140332212516536874244680515207868241150"
+ "608184375397400558311139160554714830348088746177398431439381"
+ "723332842622714699792542174328088559591648769946177759094943"
+ "253602138964984521406532201619814354725014386146031340830053"
+ "580064701427617554848554379129838364464367966961887990772034"
+ "736157803000124741957444835959798842548782921985130516220492"
+ "587642258075423047824449259233414946134282853204689713773286"
+ "256040510156737057089566266317468913174173960297084569421408"
+ "638340246503706956964095691238512574813981388887525820300348"
+ "697874705520281039407290858032400859875699388566714220055813"
+ "721666504975567694075744291186029555965678875987190466275865"
+ "110679697878878338698829512332686458041982159543089186717937"
+ "837296882112869887946881426752946149472342545380882235609343"
+ "611456763580462118316276838903401782103651546170016353726533"
+ "483704227265988570260024779291772882891237390703536913653116"
+ "455187157502455107702608011419765259822467740388537854425585"
+ "145214288921115223750634390935174873153868344319584291280195"
+ "074092905850311312792942129108984402192540093190593921627134"
+ "750198919305865438951637777077143986003394098182666993975063"
+ "096606074918898623140499223867493399851695895082484053899663"
+ "722794723684809945661015987806137974262131138092723411860100"
+ "306875200206043728502462357504778208663060722490091078918820"
+ "442211534215724549474597452183278220860160271063926148250470"
+ "679370418947419804784028806439921024370220272459710745553427"
+ "532140111938226314711574890505019525688608204019208338049020"
+ "964857035390565630387666171043092215502462084208032361026639"
+ "181985329116058964561494525668476991132094345740269757309411"
+ "943012558938929849542837718523991642799184417216508002917772"
+ "962518064407748444169509200584402641166511867953786978192437"
+ "837706088776938929762590741093402053174273957718315232711979"
+ "156763671342690455365413493776695178957184566256453036423483"
+ "165581881185157301821017377303725398889368015324740406013125"
+ "543229798253477077861721808858399804067059819559784357961089"
+ "031531660672538152160882546443838630637659645910759113450754"
+ "115340302419919122232825971353047268318787351795564238070363"
+ "902981603709604904209483643728107596524396843183938695973698"
+ "988902792423000690468305030596571258580435533731137295948710"
+ "879428603159480555933441476779321193214240286001902925096646"
+ "193362176314904980279169507771637524251644382523514686007855"
+ "545314239798347914456001501088907724272618314958749305095096"
+ "794148875236619774059147846459165020147777271757983198340596"
+ "217174216488928458621791311513622796486107895876628401090163"
+ "978125601234102818815583696847648084271585896210534181544416"
+ "469676658401850851361026077754091157349631558038332867895835"
+ "014815733722261954846797196743495629643387081546134013472180"
+ "020575511498339952332310657372073205665921646889120512420352"
+ "744996181473392691675760746880600331249241406169543104123845"
+ "302352279569083018479984065747801443533578841058833879592182"
+ "967410207228549541008872773049474805471527002637111146655769"
+ "209259617240195120611744307719186858549611605185379536859573"
+ "600388251162049706159892398577468709333418593974416723820367"
+ "645305247298082397656229311712037206394594389066632536506196"
+ "102292821592907035713508581675681648604311761383787655492962"
+ "185626974375288560564944733881717892789614447377636043879790"
+ "036621277980274759345056403011475247907173958572327086563275"
+ "849543483955621171352309860257344516147519131140051406242709"
+ "778011785823084064869584614090224421754468355956581835921213"
+ "097223344749158316572863551380259154344114593953935347097045"
+ "25536550715391.999",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ false,
+ -INF,
+ -0xf.fffffffffffffffffffffffffff8p+16380,
+ -0xf.fffffffffffffffffffffffffff8p+16380,
+ -0xf.fffffffffffffffffffffffffff8p+16380),
+ TEST ("-11897314953572317650857593266280070734799568698691021415011"
+ "868527227124689678980396147313041605370567205087355247942180"
+ "593264664074412459444736117251434132484671667965455130801840"
+ "045255124679702103169559030841542109952196285616205027456884"
+ "129791582874757434377487475290217671004952578762513867890601"
+ "004863821202705737468354284228263389609724091357204378869087"
+ "856142100844783840781539330336661735285987668515192503633514"
+ "260646282583954190884713931116677009187298349850863206766542"
+ "413166345601180198822101193374453309558359195271328750947157"
+ "200563558465557017475369862519596711820026523875337526865640"
+ "430063871893224677369982972098411971385146240080929526652970"
+ "745060303967599647731703468563276427779021494450059095045981"
+ "790545864962472323513895080140815733986651689347773187757918"
+ "371359567958155842762532583393965289784528201914992306937176"
+ "362101458792669882718296940837380380771229219128242910244535"
+ "249343403940229024393394190690666109060290096076587425830300"
+ "299463931565615207870879647471979376307793422374658272571538"
+ "054662102602281889246755194097756628326649875856850481383075"
+ "571558532564922782485789191644338139092007934624098407285987"
+ "639478965012746886149082252676671777013668074386693266234330"
+ "582182134430624080996753707870769123293738704114055716816195"
+ "667259532395066674201078658427576617166179197330225139480466"
+ "435106510788655729970732600565123039467471059792921100034504"
+ "074899248361425300656242486789356707460658993178806220006380"
+ "733674003694023021583140332212516536874244680515207868241150"
+ "608184375397400558311139160554714830348088746177398431439381"
+ "723332842622714699792542174328088559591648769946177759094943"
+ "253602138964984521406532201619814354725014386146031340830053"
+ "580064701427617554848554379129838364464367966961887990772034"
+ "736157803000124741957444835959798842548782921985130516220492"
+ "587642258075423047824449259233414946134282853204689713773286"
+ "256040510156737057089566266317468913174173960297084569421408"
+ "638340246503706956964095691238512574813981388887525820300348"
+ "697874705520281039407290858032400859875699388566714220055813"
+ "721666504975567694075744291186029555965678875987190466275865"
+ "110679697878878338698829512332686458041982159543089186717937"
+ "837296882112869887946881426752946149472342545380882235609343"
+ "611456763580462118316276838903401782103651546170016353726533"
+ "483704227265988570260024779291772882891237390703536913653116"
+ "455187157502455107702608011419765259822467740388537854425585"
+ "145214288921115223750634390935174873153868344319584291280195"
+ "074092905850311312792942129108984402192540093190593921627134"
+ "750198919305865438951637777077143986003394098182666993975063"
+ "096606074918898623140499223867493399851695895082484053899663"
+ "722794723684809945661015987806137974262131138092723411860100"
+ "306875200206043728502462357504778208663060722490091078918820"
+ "442211534215724549474597452183278220860160271063926148250470"
+ "679370418947419804784028806439921024370220272459710745553427"
+ "532140111938226314711574890505019525688608204019208338049020"
+ "964857035390565630387666171043092215502462084208032361026639"
+ "181985329116058964561494525668476991132094345740269757309411"
+ "943012558938929849542837718523991642799184417216508002917772"
+ "962518064407748444169509200584402641166511867953786978192437"
+ "837706088776938929762590741093402053174273957718315232711979"
+ "156763671342690455365413493776695178957184566256453036423483"
+ "165581881185157301821017377303725398889368015324740406013125"
+ "543229798253477077861721808858399804067059819559784357961089"
+ "031531660672538152160882546443838630637659645910759113450754"
+ "115340302419919122232825971353047268318787351795564238070363"
+ "902981603709604904209483643728107596524396843183938695973698"
+ "988902792423000690468305030596571258580435533731137295948710"
+ "879428603159480555933441476779321193214240286001902925096646"
+ "193362176314904980279169507771637524251644382523514686007855"
+ "545314239798347914456001501088907724272618314958749305095096"
+ "794148875236619774059147846459165020147777271757983198340596"
+ "217174216488928458621791311513622796486107895876628401090163"
+ "978125601234102818815583696847648084271585896210534181544416"
+ "469676658401850851361026077754091157349631558038332867895835"
+ "014815733722261954846797196743495629643387081546134013472180"
+ "020575511498339952332310657372073205665921646889120512420352"
+ "744996181473392691675760746880600331249241406169543104123845"
+ "302352279569083018479984065747801443533578841058833879592182"
+ "967410207228549541008872773049474805471527002637111146655769"
+ "209259617240195120611744307719186858549611605185379536859573"
+ "600388251162049706159892398577468709333418593974416723820367"
+ "645305247298082397656229311712037206394594389066632536506196"
+ "102292821592907035713508581675681648604311761383787655492962"
+ "185626974375288560564944733881717892789614447377636043879790"
+ "036621277980274759345056403011475247907173958572327086563275"
+ "849543483955621171352309860257344516147519131140051406242709"
+ "778011785823084064869584614090224421754468355956581835921213"
+ "097223344749158316572863551380259154344114593953935347097045"
+ "25536550715392",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffffffffffffff8p+16380,
+ -0xf.fffffffffffffffffffffffffff8p+16380),
+ TEST ("-11897314953572317650857593266280070734799568698691021415011"
+ "868527227124689678980396147313041605370567205087355247942180"
+ "593264664074412459444736117251434132484671667965455130801840"
+ "045255124679702103169559030841542109952196285616205027456884"
+ "129791582874757434377487475290217671004952578762513867890601"
+ "004863821202705737468354284228263389609724091357204378869087"
+ "856142100844783840781539330336661735285987668515192503633514"
+ "260646282583954190884713931116677009187298349850863206766542"
+ "413166345601180198822101193374453309558359195271328750947157"
+ "200563558465557017475369862519596711820026523875337526865640"
+ "430063871893224677369982972098411971385146240080929526652970"
+ "745060303967599647731703468563276427779021494450059095045981"
+ "790545864962472323513895080140815733986651689347773187757918"
+ "371359567958155842762532583393965289784528201914992306937176"
+ "362101458792669882718296940837380380771229219128242910244535"
+ "249343403940229024393394190690666109060290096076587425830300"
+ "299463931565615207870879647471979376307793422374658272571538"
+ "054662102602281889246755194097756628326649875856850481383075"
+ "571558532564922782485789191644338139092007934624098407285987"
+ "639478965012746886149082252676671777013668074386693266234330"
+ "582182134430624080996753707870769123293738704114055716816195"
+ "667259532395066674201078658427576617166179197330225139480466"
+ "435106510788655729970732600565123039467471059792921100034504"
+ "074899248361425300656242486789356707460658993178806220006380"
+ "733674003694023021583140332212516536874244680515207868241150"
+ "608184375397400558311139160554714830348088746177398431439381"
+ "723332842622714699792542174328088559591648769946177759094943"
+ "253602138964984521406532201619814354725014386146031340830053"
+ "580064701427617554848554379129838364464367966961887990772034"
+ "736157803000124741957444835959798842548782921985130516220492"
+ "587642258075423047824449259233414946134282853204689713773286"
+ "256040510156737057089566266317468913174173960297084569421408"
+ "638340246503706956964095691238512574813981388887525820300348"
+ "697874705520281039407290858032400859875699388566714220055813"
+ "721666504975567694075744291186029555965678875987190466275865"
+ "110679697878878338698829512332686458041982159543089186717937"
+ "837296882112869887946881426752946149472342545380882235609343"
+ "611456763580462118316276838903401782103651546170016353726533"
+ "483704227265988570260024779291772882891237390703536913653116"
+ "455187157502455107702608011419765259822467740388537854425585"
+ "145214288921115223750634390935174873153868344319584291280195"
+ "074092905850311312792942129108984402192540093190593921627134"
+ "750198919305865438951637777077143986003394098182666993975063"
+ "096606074918898623140499223867493399851695895082484053899663"
+ "722794723684809945661015987806137974262131138092723411860100"
+ "306875200206043728502462357504778208663060722490091078918820"
+ "442211534215724549474597452183278220860160271063926148250470"
+ "679370418947419804784028806439921024370220272459710745553427"
+ "532140111938226314711574890505019525688608204019208338049020"
+ "964857035390565630387666171043092215502462084208032361026639"
+ "181985329116058964561494525668476991132094345740269757309411"
+ "943012558938929849542837718523991642799184417216508002917772"
+ "962518064407748444169509200584402641166511867953786978192437"
+ "837706088776938929762590741093402053174273957718315232711979"
+ "156763671342690455365413493776695178957184566256453036423483"
+ "165581881185157301821017377303725398889368015324740406013125"
+ "543229798253477077861721808858399804067059819559784357961089"
+ "031531660672538152160882546443838630637659645910759113450754"
+ "115340302419919122232825971353047268318787351795564238070363"
+ "902981603709604904209483643728107596524396843183938695973698"
+ "988902792423000690468305030596571258580435533731137295948710"
+ "879428603159480555933441476779321193214240286001902925096646"
+ "193362176314904980279169507771637524251644382523514686007855"
+ "545314239798347914456001501088907724272618314958749305095096"
+ "794148875236619774059147846459165020147777271757983198340596"
+ "217174216488928458621791311513622796486107895876628401090163"
+ "978125601234102818815583696847648084271585896210534181544416"
+ "469676658401850851361026077754091157349631558038332867895835"
+ "014815733722261954846797196743495629643387081546134013472180"
+ "020575511498339952332310657372073205665921646889120512420352"
+ "744996181473392691675760746880600331249241406169543104123845"
+ "302352279569083018479984065747801443533578841058833879592182"
+ "967410207228549541008872773049474805471527002637111146655769"
+ "209259617240195120611744307719186858549611605185379536859573"
+ "600388251162049706159892398577468709333418593974416723820367"
+ "645305247298082397656229311712037206394594389066632536506196"
+ "102292821592907035713508581675681648604311761383787655492962"
+ "185626974375288560564944733881717892789614447377636043879790"
+ "036621277980274759345056403011475247907173958572327086563275"
+ "849543483955621171352309860257344516147519131140051406242709"
+ "778011785823084064869584614090224421754468355956581835921213"
+ "097223344749158316572863551380259154344114593953935347097045"
+ "25536550715392.001",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffffffffffffff8p+16380,
+ -0xf.fffffffffffffffffffffffffff8p+16380),
+ TEST ("2.1019476964872256063855943749348741969203929128147736576356"
+ "0242583468662402879090222995728254318237304687499e-45",
+ false,
+ 0x8p-152,
+ 0x8p-152,
+ 0x8p-152,
+ 0x1p-148,
+ false,
+ 0xb.ffffffffffff8p-152,
+ 0xcp-152,
+ 0xb.ffffffffffff8p-152,
+ 0xcp-152,
+ false,
+ 0xb.fffffffffffffffp-152,
+ 0xcp-152,
+ 0xb.fffffffffffffffp-152,
+ 0xcp-152,
+ false,
+ 0xb.fffffffffffffffp-152,
+ 0xcp-152,
+ 0xb.fffffffffffffffp-152,
+ 0xcp-152,
+ false,
+ 0xb.fffffffffffffffffffffffffcp-152,
+ 0xcp-152,
+ 0xb.fffffffffffffffffffffffffcp-152,
+ 0xcp-152,
+ false,
+ 0xb.fffffffffffffffffffffffffff8p-152,
+ 0xcp-152,
+ 0xb.fffffffffffffffffffffffffff8p-152,
+ 0xcp-152),
+ TEST ("2.1019476964872256063855943749348741969203929128147736576356"
+ "02425834686624028790902229957282543182373046875e-45",
+ false,
+ 0x8p-152,
+ 0x1p-148,
+ 0x8p-152,
+ 0x1p-148,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152),
+ TEST ("2.1019476964872256063855943749348741969203929128147736576356"
+ "0242583468662402879090222995728254318237304687501e-45",
+ false,
+ 0x8p-152,
+ 0x1p-148,
+ 0x8p-152,
+ 0x1p-148,
+ false,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xc.0000000000008p-152,
+ false,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xc.000000000000001p-152,
+ false,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xc.000000000000001p-152,
+ false,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xc.00000000000000000000000004p-152,
+ false,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xc.0000000000000000000000000008p-152),
+ TEST ("-2.101947696487225606385594374934874196920392912814773657635"
+ "60242583468662402879090222995728254318237304687499e-45",
+ false,
+ -0x1p-148,
+ -0x8p-152,
+ -0x8p-152,
+ -0x8p-152,
+ false,
+ -0xcp-152,
+ -0xcp-152,
+ -0xb.ffffffffffff8p-152,
+ -0xb.ffffffffffff8p-152,
+ false,
+ -0xcp-152,
+ -0xcp-152,
+ -0xb.fffffffffffffffp-152,
+ -0xb.fffffffffffffffp-152,
+ false,
+ -0xcp-152,
+ -0xcp-152,
+ -0xb.fffffffffffffffp-152,
+ -0xb.fffffffffffffffp-152,
+ false,
+ -0xcp-152,
+ -0xcp-152,
+ -0xb.fffffffffffffffffffffffffcp-152,
+ -0xb.fffffffffffffffffffffffffcp-152,
+ false,
+ -0xcp-152,
+ -0xcp-152,
+ -0xb.fffffffffffffffffffffffffff8p-152,
+ -0xb.fffffffffffffffffffffffffff8p-152),
+ TEST ("-2.101947696487225606385594374934874196920392912814773657635"
+ "602425834686624028790902229957282543182373046875e-45",
+ false,
+ -0x1p-148,
+ -0x1p-148,
+ -0x8p-152,
+ -0x8p-152,
+ true,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ true,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ true,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ true,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ true,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152),
+ TEST ("-2.101947696487225606385594374934874196920392912814773657635"
+ "60242583468662402879090222995728254318237304687501e-45",
+ false,
+ -0x1p-148,
+ -0x1p-148,
+ -0x8p-152,
+ -0x8p-152,
+ false,
+ -0xc.0000000000008p-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ false,
+ -0xc.000000000000001p-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ false,
+ -0xc.000000000000001p-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ false,
+ -0xc.00000000000000000000000004p-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ false,
+ -0xc.0000000000000000000000000008p-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152),
+ TEST ("3.5032461608120426773093239582247903282006548546912894293926"
+ "7070972447770671465150371659547090530395507812499e-45",
+ false,
+ 0x1p-148,
+ 0x1p-148,
+ 0x1p-148,
+ 0x1.8p-148,
+ false,
+ 0x1.3ffffffffffffp-148,
+ 0x1.4p-148,
+ 0x1.3ffffffffffffp-148,
+ 0x1.4p-148,
+ false,
+ 0x1.3ffffffffffffffep-148,
+ 0x1.4p-148,
+ 0x1.3ffffffffffffffep-148,
+ 0x1.4p-148,
+ false,
+ 0x1.3ffffffffffffffep-148,
+ 0x1.4p-148,
+ 0x1.3ffffffffffffffep-148,
+ 0x1.4p-148,
+ false,
+ 0x1.3fffffffffffffffffffffffff8p-148,
+ 0x1.4p-148,
+ 0x1.3fffffffffffffffffffffffff8p-148,
+ 0x1.4p-148,
+ false,
+ 0x1.3fffffffffffffffffffffffffffp-148,
+ 0x1.4p-148,
+ 0x1.3fffffffffffffffffffffffffffp-148,
+ 0x1.4p-148),
+ TEST ("3.5032461608120426773093239582247903282006548546912894293926"
+ "70709724477706714651503716595470905303955078125e-45",
+ false,
+ 0x1p-148,
+ 0x1p-148,
+ 0x1p-148,
+ 0x1.8p-148,
+ true,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ true,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ true,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ true,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ true,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148),
+ TEST ("3.5032461608120426773093239582247903282006548546912894293926"
+ "7070972447770671465150371659547090530395507812501e-45",
+ false,
+ 0x1p-148,
+ 0x1.8p-148,
+ 0x1p-148,
+ 0x1.8p-148,
+ false,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4000000000001p-148,
+ false,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4000000000000002p-148,
+ false,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4000000000000002p-148,
+ false,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.400000000000000000000000008p-148,
+ false,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4000000000000000000000000001p-148),
+ TEST ("-3.503246160812042677309323958224790328200654854691289429392"
+ "67070972447770671465150371659547090530395507812499e-45",
+ false,
+ -0x1.8p-148,
+ -0x1p-148,
+ -0x1p-148,
+ -0x1p-148,
+ false,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.3ffffffffffffp-148,
+ -0x1.3ffffffffffffp-148,
+ false,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.3ffffffffffffffep-148,
+ -0x1.3ffffffffffffffep-148,
+ false,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.3ffffffffffffffep-148,
+ -0x1.3ffffffffffffffep-148,
+ false,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.3fffffffffffffffffffffffff8p-148,
+ -0x1.3fffffffffffffffffffffffff8p-148,
+ false,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.3fffffffffffffffffffffffffffp-148,
+ -0x1.3fffffffffffffffffffffffffffp-148),
+ TEST ("-3.503246160812042677309323958224790328200654854691289429392"
+ "670709724477706714651503716595470905303955078125e-45",
+ false,
+ -0x1.8p-148,
+ -0x1p-148,
+ -0x1p-148,
+ -0x1p-148,
+ true,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ true,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ true,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ true,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ true,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148),
+ TEST ("-3.503246160812042677309323958224790328200654854691289429392"
+ "67070972447770671465150371659547090530395507812501e-45",
+ false,
+ -0x1.8p-148,
+ -0x1.8p-148,
+ -0x1p-148,
+ -0x1p-148,
+ false,
+ -0x1.4000000000001p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ false,
+ -0x1.4000000000000002p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ false,
+ -0x1.4000000000000002p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ false,
+ -0x1.400000000000000000000000008p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ false,
+ -0x1.4000000000000000000000000001p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148),
+ TEST ("7.4109846876186981626485318930233205854758970392148714663837"
+ "852375101326090531312779794975454245398856969484704316857659"
+ "638998506553390969459816219401617281718945106978546710679176"
+ "872575177347315553307795408549809608457500958111373034747658"
+ "096871009590975442271004757307809711118935784838675653998783"
+ "503015228055934046593739791790738723868299395818481660169122"
+ "019456499931289798411362062484498678713572180352209017023903"
+ "285791732520220528974020802906854021606612375549983402671300"
+ "035812486479041385743401875520901590172592547146296175134159"
+ "774938718574737870961645638908718119841271673056017045493004"
+ "705269590165763776884908267986972573366521765567941072508764"
+ "337560846003984904972149117463085539556354188641513168478436"
+ "31308023759629577398300170898437499e-324",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x4p-1076,
+ 0x4p-1076,
+ 0x4p-1076,
+ 0x8p-1076,
+ false,
+ 0x5.fffffffffffffff8p-1076,
+ 0x6p-1076,
+ 0x5.fffffffffffffff8p-1076,
+ 0x6p-1076,
+ false,
+ 0x5.fffffffffffffff8p-1076,
+ 0x6p-1076,
+ 0x5.fffffffffffffff8p-1076,
+ 0x6p-1076,
+ false,
+ 0x4p-1076,
+ 0x4p-1076,
+ 0x4p-1076,
+ 0x8p-1076,
+ false,
+ 0x5.fffffffffffffffffffffffffffcp-1076,
+ 0x6p-1076,
+ 0x5.fffffffffffffffffffffffffffcp-1076,
+ 0x6p-1076),
+ TEST ("7.4109846876186981626485318930233205854758970392148714663837"
+ "852375101326090531312779794975454245398856969484704316857659"
+ "638998506553390969459816219401617281718945106978546710679176"
+ "872575177347315553307795408549809608457500958111373034747658"
+ "096871009590975442271004757307809711118935784838675653998783"
+ "503015228055934046593739791790738723868299395818481660169122"
+ "019456499931289798411362062484498678713572180352209017023903"
+ "285791732520220528974020802906854021606612375549983402671300"
+ "035812486479041385743401875520901590172592547146296175134159"
+ "774938718574737870961645638908718119841271673056017045493004"
+ "705269590165763776884908267986972573366521765567941072508764"
+ "337560846003984904972149117463085539556354188641513168478436"
+ "313080237596295773983001708984375e-324",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x4p-1076,
+ 0x8p-1076,
+ 0x4p-1076,
+ 0x8p-1076,
+ true,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076,
+ true,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076,
+ false,
+ 0x4p-1076,
+ 0x8p-1076,
+ 0x4p-1076,
+ 0x8p-1076,
+ true,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076),
+ TEST ("7.4109846876186981626485318930233205854758970392148714663837"
+ "852375101326090531312779794975454245398856969484704316857659"
+ "638998506553390969459816219401617281718945106978546710679176"
+ "872575177347315553307795408549809608457500958111373034747658"
+ "096871009590975442271004757307809711118935784838675653998783"
+ "503015228055934046593739791790738723868299395818481660169122"
+ "019456499931289798411362062484498678713572180352209017023903"
+ "285791732520220528974020802906854021606612375549983402671300"
+ "035812486479041385743401875520901590172592547146296175134159"
+ "774938718574737870961645638908718119841271673056017045493004"
+ "705269590165763776884908267986972573366521765567941072508764"
+ "337560846003984904972149117463085539556354188641513168478436"
+ "31308023759629577398300170898437501e-324",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x4p-1076,
+ 0x8p-1076,
+ 0x4p-1076,
+ 0x8p-1076,
+ false,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6.0000000000000008p-1076,
+ false,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6.0000000000000008p-1076,
+ false,
+ 0x4p-1076,
+ 0x8p-1076,
+ 0x4p-1076,
+ 0x8p-1076,
+ false,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6.0000000000000000000000000004p-1076),
+ TEST ("-7.410984687618698162648531893023320585475897039214871466383"
+ "785237510132609053131277979497545424539885696948470431685765"
+ "963899850655339096945981621940161728171894510697854671067917"
+ "687257517734731555330779540854980960845750095811137303474765"
+ "809687100959097544227100475730780971111893578483867565399878"
+ "350301522805593404659373979179073872386829939581848166016912"
+ "201945649993128979841136206248449867871357218035220901702390"
+ "328579173252022052897402080290685402160661237554998340267130"
+ "003581248647904138574340187552090159017259254714629617513415"
+ "977493871857473787096164563890871811984127167305601704549300"
+ "470526959016576377688490826798697257336652176556794107250876"
+ "433756084600398490497214911746308553955635418864151316847843"
+ "631308023759629577398300170898437499e-324",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-1076,
+ -0x4p-1076,
+ -0x4p-1076,
+ -0x4p-1076,
+ false,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x5.fffffffffffffff8p-1076,
+ -0x5.fffffffffffffff8p-1076,
+ false,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x5.fffffffffffffff8p-1076,
+ -0x5.fffffffffffffff8p-1076,
+ false,
+ -0x8p-1076,
+ -0x4p-1076,
+ -0x4p-1076,
+ -0x4p-1076,
+ false,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x5.fffffffffffffffffffffffffffcp-1076,
+ -0x5.fffffffffffffffffffffffffffcp-1076),
+ TEST ("-7.410984687618698162648531893023320585475897039214871466383"
+ "785237510132609053131277979497545424539885696948470431685765"
+ "963899850655339096945981621940161728171894510697854671067917"
+ "687257517734731555330779540854980960845750095811137303474765"
+ "809687100959097544227100475730780971111893578483867565399878"
+ "350301522805593404659373979179073872386829939581848166016912"
+ "201945649993128979841136206248449867871357218035220901702390"
+ "328579173252022052897402080290685402160661237554998340267130"
+ "003581248647904138574340187552090159017259254714629617513415"
+ "977493871857473787096164563890871811984127167305601704549300"
+ "470526959016576377688490826798697257336652176556794107250876"
+ "433756084600398490497214911746308553955635418864151316847843"
+ "6313080237596295773983001708984375e-324",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-1076,
+ -0x8p-1076,
+ -0x4p-1076,
+ -0x4p-1076,
+ true,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ true,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ false,
+ -0x8p-1076,
+ -0x8p-1076,
+ -0x4p-1076,
+ -0x4p-1076,
+ true,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076),
+ TEST ("-7.410984687618698162648531893023320585475897039214871466383"
+ "785237510132609053131277979497545424539885696948470431685765"
+ "963899850655339096945981621940161728171894510697854671067917"
+ "687257517734731555330779540854980960845750095811137303474765"
+ "809687100959097544227100475730780971111893578483867565399878"
+ "350301522805593404659373979179073872386829939581848166016912"
+ "201945649993128979841136206248449867871357218035220901702390"
+ "328579173252022052897402080290685402160661237554998340267130"
+ "003581248647904138574340187552090159017259254714629617513415"
+ "977493871857473787096164563890871811984127167305601704549300"
+ "470526959016576377688490826798697257336652176556794107250876"
+ "433756084600398490497214911746308553955635418864151316847843"
+ "631308023759629577398300170898437501e-324",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-1076,
+ -0x8p-1076,
+ -0x4p-1076,
+ -0x4p-1076,
+ false,
+ -0x6.0000000000000008p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ false,
+ -0x6.0000000000000008p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ false,
+ -0x8p-1076,
+ -0x8p-1076,
+ -0x4p-1076,
+ -0x4p-1076,
+ false,
+ -0x6.0000000000000000000000000004p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076),
+ TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+ "707305425575329500966052143410629387408077958710210208052966"
+ "529504784489330482549602621133847135082257338717668975178538"
+ "378957084503396349323438489751160934104796903302909028868611"
+ "999312592165232778075745690821530731336739429587895774023213"
+ "939331012985331912661021188896306095323395084578542200319963"
+ "179359407180003251440084380484161504585462684082946932782829"
+ "488183829817567452314437076943950532707791252404699268678810"
+ "198502871250235796855577909830559749628817599194837522029036"
+ "891995648803056846354520653635957919882905363521007017169741"
+ "463296044392266269433408052686419017699718627761948763856040"
+ "592690841721239300491445991666051031755802326720329666454066"
+ "568630314348735511753639418257984253319063825247065727664852"
+ "328745422305642626091617823968872438962470092440688372515677"
+ "832232712866924800106797113478024083516199991991274936894113"
+ "006233377518471389394984262004503058455485659100090665241525"
+ "454803628182902241401701783637353179296850056973639305945938"
+ "813428953287892593620291195986011128990061888798763718548789"
+ "025717537674780281005583347165047846045925077914824515331335"
+ "131286063574407181821236377907693209224423490663289916878620"
+ "725507793163931390372011875799729330162278748985052557432333"
+ "005334989519381566364065326138465761456173231416844807264090"
+ "741841972247545424908843928136253653308813487994328446248389"
+ "608261444391573619177442907290731163188581917588219420107047"
+ "265367485141413919810885909689112244064797106324295291545892"
+ "937991321479061743491490060940946128274533657682130125169586"
+ "930571899403551122506297763180795732325134340989331155893724"
+ "289358918212707392997768032299997207208451112971425779939507"
+ "837165263255764268971211819536322993221774123134726665579460"
+ "265871378186589562858761835613344584269098062275786969729830"
+ "545786485401407774313414954958161677096004701941411411592755"
+ "485864471870515173326244464631295701572087440183178339987662"
+ "926763241220698078822661709054601073523477544653542795020468"
+ "256078409306409100874886828781860529824879343987945751252081"
+ "314345990313550683792348814627862441324030155730592166581251"
+ "009922787324590431548734575328663628650380722603024383412564"
+ "651446272117561042207738413114131099731016728935023152239431"
+ "311619533848376583687509108453086730196255111695352464186678"
+ "221927564757730319825223049341618853631333478241227227268084"
+ "583396688436229936266854011427192767039363517491659523133852"
+ "472534104124441112346615696891097070121463652258681270378076"
+ "538381697594264658479637863087159293838880752928175545408262"
+ "813403793568695416998388572304528748824756265665683890518422"
+ "696169422338806137532304784682662448207928681740476188343739"
+ "117833525916386815135793034906806117413105008719197882837614"
+ "738262050320291539494104952056471606645482046176634075459021"
+ "552555959590354956262127809953013679512507451424271839221946"
+ "794056861055980558363033732905772356986051180966474116423192"
+ "194741572438649215204229781279620370445373851348786918527399"
+ "785630808242657122705381806661616271132182017797793661244078"
+ "445747547535623384548769818529655539279036503234072455810991"
+ "588075181817695975173110136482659854557506203058080551018873"
+ "203138260451109855100526720073566126209666125604482413705611"
+ "996796777927332827103568863352291499261312290355143742018042"
+ "254470707107847293593205234049774839191754781030496978091006"
+ "099559675240966730110167624903610656473267105556155633783594"
+ "089546261107653110531808279445757724399186120387548675148632"
+ "176049190701680305210224388072261974806791922636412897526952"
+ "793677946622674149577084803568051242934076450942927092705684"
+ "547042915490323112457971853658760725588190377666477106903106"
+ "693847278847646032201293023329503348730723947218797410452333"
+ "910847913892827195814551858335519518939031446093385329182820"
+ "714173657946661746005901866885589732922652604573972842197231"
+ "187365263381958925227970038358064987248233271706462687651143"
+ "350472018043321314534759819524203308490914358596886150053406"
+ "629512434788155355109100540319857813535695923273426256911552"
+ "977539394209918630668466632881929661971212772444625151371953"
+ "428875491139683919687008724010475217255347915698820960215217"
+ "257390308560235323463096946442080548018754166369706161589705"
+ "215873687166365628787796501470056870127729464714362172216802"
+ "441045276911597009443281135389729130222603185665646434661947"
+ "627628077723219376892727386120519287577405410510114936151502"
+ "752997122750262781911372625997223415283516995479265631485799"
+ "456782561734766648462849641064097181818204279498552827825384"
+ "186202065516999362573388136163077477126602169410435905014077"
+ "049808497409025369325795765272066650278004200357878990911374"
+ "982857977108488482528354406313893864211497105765030504600982"
+ "253488805474531798742143374465080240030582370086699167937651"
+ "038307909706139327119325418854546478285735654541635477790346"
+ "964782617354265050767878335230272194896680141986745074630225"
+ "893106573559558843545841186025169531604151588481389164948914"
+ "823593944287133336263680358191369540321930649824471425485137"
+ "777984823525402115151171093313613251350685343824859052220126"
+ "891551966018355920872775724807128769003243129486808733796350"
+ "497668255116485157191011858830643898323628223472099280243583"
+ "164434348347014910398004439821970508280440872759395827943270"
+ "985008769143562351938091476215083548164137333541883808870019"
+ "116234099013452929807950151652297436436006149684939775781234"
+ "660954156154478642694176038524277810483833149798681345708089"
+ "152179193979463169402340611793486272301808073267534612685593"
+ "859596787866884211031341417903391749825320454663508370385251"
+ "831778477311017089729361152161928815389818579983544490982891"
+ "734081131312309744330960666031291451740885503458543884956367"
+ "654943799264600314531815427932691107874782328654759293575803"
+ "481929361961781073958502075438499070633193799699311694287183"
+ "299423475339817655608058724723221867087563064557636112380829"
+ "514501382073257737022472866608244164310385205213523702910787"
+ "182472517125030106491031844871593141759729773907719510044049"
+ "352857426592936763727969496103940591601975078602859660478614"
+ "119405428212830134490731706220583788265344728818766885126977"
+ "588151111984290444321648931907188080336064713873288834096229"
+ "203276676119810521851726133377700616341304257822975788967472"
+ "152742255041912584197045423031298506219011800240120182445838"
+ "590696647416285334515631019799007515682004250060857020904012"
+ "215375170479800482680554499806010766109655061507421747722461"
+ "180617361402575082294678925605271083587897845390768226405648"
+ "508518103525778638618195775128516073959272990148239415346263"
+ "486966573934577450787243667063244378381883115827207605856174"
+ "876350045086885320626669331311880593775916269643646395423220"
+ "549940790476989709243027420158390806135690975149384714684219"
+ "964938182719962913931464979458639185519531490009437619838306"
+ "362365453754807654884704163490469296444427144778593725687358"
+ "437087390151990694667516279202024332494828210657618261952038"
+ "597230263799412584275851667403910657370879707181053365818502"
+ "680037431560091209982641738995652793235851569372314130107647"
+ "166085235615697257094269133100914135783178856280392139325001"
+ "352841718610484616627448189556913621837791650699820323059708"
+ "766420810133584841826718631681683381743511974264126250984214"
+ "812397119978273917903889865891718836792263377888052458189238"
+ "746074986456016681098722869419588274020181430652732817858728"
+ "473849369539367463917171317324882099804999043054467247785592"
+ "038464723442276239896066431580123756428540074945472427752568"
+ "981171400621705853374875885943072600692576914790467205905272"
+ "372594740187988081900317493185005142913607163380720069786786"
+ "782095331840893694073778325119471833528492917081008547303414"
+ "509381563617864195257751546539575461435803625993888325647883"
+ "541039192368366987400263049681218831477776345118518503709588"
+ "840859023379762456561030683928115349942393963185677123055324"
+ "771693784214924931737043793679546051454845624150270955450608"
+ "318747395755728950832754611277041359602301205138509175543313"
+ "522772786504141007552691902249572375175731740923618769197304"
+ "652898352694386665448260033458575323252814233868098279476166"
+ "764258284911434288072243178941698347365985427696983129579496"
+ "059032032841281149923518087084876885114369033227736521245740"
+ "554711771423492719899982357711910225545480424688322195336240"
+ "492253136281857837808491795993788199125205555222116581071134"
+ "476787468430539307909617442106685159519071053844987343666452"
+ "494280317720153567054364117244775141336558406098548803924509"
+ "496052261825198043140272655303625315605326569530252885854991"
+ "822289219201218313590745412010446642247111703901991591338062"
+ "693320157180618736569439969283245279430312651192668788340033"
+ "626825194260296262959884258597703584888770801961209652822982"
+ "322376122303586169861685106043820510444293432856251210395693"
+ "261264867823980172683352796141772210301725997652373804152525"
+ "037162852291403804455997331367378463632437773242905518075065"
+ "414724295857460288225400061608664961649196400079359622673770"
+ "607898395269075056596627116148289491042491764170924014885106"
+ "158235482774778418134123293974436877051995673618683751115353"
+ "808771434984204447736174758316063096245047311279841579995578"
+ "186609402864244042751443128536278453430633423118662852688374"
+ "229600894418958824842459450540826176452145829389286103522774"
+ "101195556029650753254244433565937938526828990893149766298997"
+ "738359913887178888607190765709867052470880785937935110091424"
+ "743449966353497865681753841380246075612094033617488674676296"
+ "822570077027076266879557913673839341012099558043806442348798"
+ "053951239274913334631522409564461770434875790402230022872647"
+ "568436177018658068697071731879399180374560963492726714528729"
+ "224208938589940272515747888379118461617702271694075087419634"
+ "147298076764775745707026934442908236664400557265527951453482"
+ "191684597674273691978253678690951178777239573925410438679099"
+ "374700609973920128201422381329108236575369403675960765238333"
+ "778127017096574296148321075566959285042221837159799800133563"
+ "239963969638610872680393210300180152020613051613414547163713"
+ "772512617757277955979895866367571776456268564191092477027650"
+ "135832200376440239783726540552694851717269598489288851529660"
+ "975027775639565229734596726205832668434979354541943345062977"
+ "891187146561050118118108223323735210843681128615413601091222"
+ "007912350536959777114306541514511332368936078560929788143798"
+ "814391221507522370648646767364209132147312407014953113532379"
+ "838195728491128536978285918066991040993153064356179903885952"
+ "027952713749653604502053512355449916680887234238773855581636"
+ "172479594866871765094513940103284167914110196720261110812716"
+ "776424260154507395050380575452850420730818412994731079307343"
+ "538376880280124019321040198038723558784544408584344466090982"
+ "802067326529000931562048932875469079874956595180595395347093"
+ "285140279165467965596318365749701535812384333240968283640721"
+ "344003442002691613772056762099098025739332715913970186225176"
+ "459563484134139746647940170537900275350480490468851439300771"
+ "949915194703080576611022590670399844931867609777417528903454"
+ "731922206378932141464755402629420074293816349270038351339419"
+ "146768473851353171629153912238797141905920143036064131705230"
+ "421762305232861503856799511155936565169005916711845389135580"
+ "928162511912438531204156138447775120789548666143600293412065"
+ "767167106888509172568003530668539460588248316513392652567856"
+ "224602697296203328920073354425994044956624831346979458846837"
+ "597950064151867164583749203433942592178528868981311575331848"
+ "941597492470436782387502687532649093096498315347403977436001"
+ "399982102030846763698994785054617523241463186980898394504211"
+ "430763617825306895065661536045431497903759118007934839122881"
+ "885863091769469883539876840543521295706315919855784493235603"
+ "866268925981702690270202829595794350800918257913991744455922"
+ "683343374046671669930219650268554687499e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x8p-16448,
+ 0x8p-16448,
+ 0x8p-16448,
+ 0x1p-16444,
+ false,
+ 0x8p-16448,
+ 0xcp-16448,
+ 0x8p-16448,
+ 0xcp-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0xb.fffffffffffcp-16448,
+ 0xcp-16448,
+ 0xb.fffffffffffcp-16448,
+ 0xcp-16448),
+ TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+ "707305425575329500966052143410629387408077958710210208052966"
+ "529504784489330482549602621133847135082257338717668975178538"
+ "378957084503396349323438489751160934104796903302909028868611"
+ "999312592165232778075745690821530731336739429587895774023213"
+ "939331012985331912661021188896306095323395084578542200319963"
+ "179359407180003251440084380484161504585462684082946932782829"
+ "488183829817567452314437076943950532707791252404699268678810"
+ "198502871250235796855577909830559749628817599194837522029036"
+ "891995648803056846354520653635957919882905363521007017169741"
+ "463296044392266269433408052686419017699718627761948763856040"
+ "592690841721239300491445991666051031755802326720329666454066"
+ "568630314348735511753639418257984253319063825247065727664852"
+ "328745422305642626091617823968872438962470092440688372515677"
+ "832232712866924800106797113478024083516199991991274936894113"
+ "006233377518471389394984262004503058455485659100090665241525"
+ "454803628182902241401701783637353179296850056973639305945938"
+ "813428953287892593620291195986011128990061888798763718548789"
+ "025717537674780281005583347165047846045925077914824515331335"
+ "131286063574407181821236377907693209224423490663289916878620"
+ "725507793163931390372011875799729330162278748985052557432333"
+ "005334989519381566364065326138465761456173231416844807264090"
+ "741841972247545424908843928136253653308813487994328446248389"
+ "608261444391573619177442907290731163188581917588219420107047"
+ "265367485141413919810885909689112244064797106324295291545892"
+ "937991321479061743491490060940946128274533657682130125169586"
+ "930571899403551122506297763180795732325134340989331155893724"
+ "289358918212707392997768032299997207208451112971425779939507"
+ "837165263255764268971211819536322993221774123134726665579460"
+ "265871378186589562858761835613344584269098062275786969729830"
+ "545786485401407774313414954958161677096004701941411411592755"
+ "485864471870515173326244464631295701572087440183178339987662"
+ "926763241220698078822661709054601073523477544653542795020468"
+ "256078409306409100874886828781860529824879343987945751252081"
+ "314345990313550683792348814627862441324030155730592166581251"
+ "009922787324590431548734575328663628650380722603024383412564"
+ "651446272117561042207738413114131099731016728935023152239431"
+ "311619533848376583687509108453086730196255111695352464186678"
+ "221927564757730319825223049341618853631333478241227227268084"
+ "583396688436229936266854011427192767039363517491659523133852"
+ "472534104124441112346615696891097070121463652258681270378076"
+ "538381697594264658479637863087159293838880752928175545408262"
+ "813403793568695416998388572304528748824756265665683890518422"
+ "696169422338806137532304784682662448207928681740476188343739"
+ "117833525916386815135793034906806117413105008719197882837614"
+ "738262050320291539494104952056471606645482046176634075459021"
+ "552555959590354956262127809953013679512507451424271839221946"
+ "794056861055980558363033732905772356986051180966474116423192"
+ "194741572438649215204229781279620370445373851348786918527399"
+ "785630808242657122705381806661616271132182017797793661244078"
+ "445747547535623384548769818529655539279036503234072455810991"
+ "588075181817695975173110136482659854557506203058080551018873"
+ "203138260451109855100526720073566126209666125604482413705611"
+ "996796777927332827103568863352291499261312290355143742018042"
+ "254470707107847293593205234049774839191754781030496978091006"
+ "099559675240966730110167624903610656473267105556155633783594"
+ "089546261107653110531808279445757724399186120387548675148632"
+ "176049190701680305210224388072261974806791922636412897526952"
+ "793677946622674149577084803568051242934076450942927092705684"
+ "547042915490323112457971853658760725588190377666477106903106"
+ "693847278847646032201293023329503348730723947218797410452333"
+ "910847913892827195814551858335519518939031446093385329182820"
+ "714173657946661746005901866885589732922652604573972842197231"
+ "187365263381958925227970038358064987248233271706462687651143"
+ "350472018043321314534759819524203308490914358596886150053406"
+ "629512434788155355109100540319857813535695923273426256911552"
+ "977539394209918630668466632881929661971212772444625151371953"
+ "428875491139683919687008724010475217255347915698820960215217"
+ "257390308560235323463096946442080548018754166369706161589705"
+ "215873687166365628787796501470056870127729464714362172216802"
+ "441045276911597009443281135389729130222603185665646434661947"
+ "627628077723219376892727386120519287577405410510114936151502"
+ "752997122750262781911372625997223415283516995479265631485799"
+ "456782561734766648462849641064097181818204279498552827825384"
+ "186202065516999362573388136163077477126602169410435905014077"
+ "049808497409025369325795765272066650278004200357878990911374"
+ "982857977108488482528354406313893864211497105765030504600982"
+ "253488805474531798742143374465080240030582370086699167937651"
+ "038307909706139327119325418854546478285735654541635477790346"
+ "964782617354265050767878335230272194896680141986745074630225"
+ "893106573559558843545841186025169531604151588481389164948914"
+ "823593944287133336263680358191369540321930649824471425485137"
+ "777984823525402115151171093313613251350685343824859052220126"
+ "891551966018355920872775724807128769003243129486808733796350"
+ "497668255116485157191011858830643898323628223472099280243583"
+ "164434348347014910398004439821970508280440872759395827943270"
+ "985008769143562351938091476215083548164137333541883808870019"
+ "116234099013452929807950151652297436436006149684939775781234"
+ "660954156154478642694176038524277810483833149798681345708089"
+ "152179193979463169402340611793486272301808073267534612685593"
+ "859596787866884211031341417903391749825320454663508370385251"
+ "831778477311017089729361152161928815389818579983544490982891"
+ "734081131312309744330960666031291451740885503458543884956367"
+ "654943799264600314531815427932691107874782328654759293575803"
+ "481929361961781073958502075438499070633193799699311694287183"
+ "299423475339817655608058724723221867087563064557636112380829"
+ "514501382073257737022472866608244164310385205213523702910787"
+ "182472517125030106491031844871593141759729773907719510044049"
+ "352857426592936763727969496103940591601975078602859660478614"
+ "119405428212830134490731706220583788265344728818766885126977"
+ "588151111984290444321648931907188080336064713873288834096229"
+ "203276676119810521851726133377700616341304257822975788967472"
+ "152742255041912584197045423031298506219011800240120182445838"
+ "590696647416285334515631019799007515682004250060857020904012"
+ "215375170479800482680554499806010766109655061507421747722461"
+ "180617361402575082294678925605271083587897845390768226405648"
+ "508518103525778638618195775128516073959272990148239415346263"
+ "486966573934577450787243667063244378381883115827207605856174"
+ "876350045086885320626669331311880593775916269643646395423220"
+ "549940790476989709243027420158390806135690975149384714684219"
+ "964938182719962913931464979458639185519531490009437619838306"
+ "362365453754807654884704163490469296444427144778593725687358"
+ "437087390151990694667516279202024332494828210657618261952038"
+ "597230263799412584275851667403910657370879707181053365818502"
+ "680037431560091209982641738995652793235851569372314130107647"
+ "166085235615697257094269133100914135783178856280392139325001"
+ "352841718610484616627448189556913621837791650699820323059708"
+ "766420810133584841826718631681683381743511974264126250984214"
+ "812397119978273917903889865891718836792263377888052458189238"
+ "746074986456016681098722869419588274020181430652732817858728"
+ "473849369539367463917171317324882099804999043054467247785592"
+ "038464723442276239896066431580123756428540074945472427752568"
+ "981171400621705853374875885943072600692576914790467205905272"
+ "372594740187988081900317493185005142913607163380720069786786"
+ "782095331840893694073778325119471833528492917081008547303414"
+ "509381563617864195257751546539575461435803625993888325647883"
+ "541039192368366987400263049681218831477776345118518503709588"
+ "840859023379762456561030683928115349942393963185677123055324"
+ "771693784214924931737043793679546051454845624150270955450608"
+ "318747395755728950832754611277041359602301205138509175543313"
+ "522772786504141007552691902249572375175731740923618769197304"
+ "652898352694386665448260033458575323252814233868098279476166"
+ "764258284911434288072243178941698347365985427696983129579496"
+ "059032032841281149923518087084876885114369033227736521245740"
+ "554711771423492719899982357711910225545480424688322195336240"
+ "492253136281857837808491795993788199125205555222116581071134"
+ "476787468430539307909617442106685159519071053844987343666452"
+ "494280317720153567054364117244775141336558406098548803924509"
+ "496052261825198043140272655303625315605326569530252885854991"
+ "822289219201218313590745412010446642247111703901991591338062"
+ "693320157180618736569439969283245279430312651192668788340033"
+ "626825194260296262959884258597703584888770801961209652822982"
+ "322376122303586169861685106043820510444293432856251210395693"
+ "261264867823980172683352796141772210301725997652373804152525"
+ "037162852291403804455997331367378463632437773242905518075065"
+ "414724295857460288225400061608664961649196400079359622673770"
+ "607898395269075056596627116148289491042491764170924014885106"
+ "158235482774778418134123293974436877051995673618683751115353"
+ "808771434984204447736174758316063096245047311279841579995578"
+ "186609402864244042751443128536278453430633423118662852688374"
+ "229600894418958824842459450540826176452145829389286103522774"
+ "101195556029650753254244433565937938526828990893149766298997"
+ "738359913887178888607190765709867052470880785937935110091424"
+ "743449966353497865681753841380246075612094033617488674676296"
+ "822570077027076266879557913673839341012099558043806442348798"
+ "053951239274913334631522409564461770434875790402230022872647"
+ "568436177018658068697071731879399180374560963492726714528729"
+ "224208938589940272515747888379118461617702271694075087419634"
+ "147298076764775745707026934442908236664400557265527951453482"
+ "191684597674273691978253678690951178777239573925410438679099"
+ "374700609973920128201422381329108236575369403675960765238333"
+ "778127017096574296148321075566959285042221837159799800133563"
+ "239963969638610872680393210300180152020613051613414547163713"
+ "772512617757277955979895866367571776456268564191092477027650"
+ "135832200376440239783726540552694851717269598489288851529660"
+ "975027775639565229734596726205832668434979354541943345062977"
+ "891187146561050118118108223323735210843681128615413601091222"
+ "007912350536959777114306541514511332368936078560929788143798"
+ "814391221507522370648646767364209132147312407014953113532379"
+ "838195728491128536978285918066991040993153064356179903885952"
+ "027952713749653604502053512355449916680887234238773855581636"
+ "172479594866871765094513940103284167914110196720261110812716"
+ "776424260154507395050380575452850420730818412994731079307343"
+ "538376880280124019321040198038723558784544408584344466090982"
+ "802067326529000931562048932875469079874956595180595395347093"
+ "285140279165467965596318365749701535812384333240968283640721"
+ "344003442002691613772056762099098025739332715913970186225176"
+ "459563484134139746647940170537900275350480490468851439300771"
+ "949915194703080576611022590670399844931867609777417528903454"
+ "731922206378932141464755402629420074293816349270038351339419"
+ "146768473851353171629153912238797141905920143036064131705230"
+ "421762305232861503856799511155936565169005916711845389135580"
+ "928162511912438531204156138447775120789548666143600293412065"
+ "767167106888509172568003530668539460588248316513392652567856"
+ "224602697296203328920073354425994044956624831346979458846837"
+ "597950064151867164583749203433942592178528868981311575331848"
+ "941597492470436782387502687532649093096498315347403977436001"
+ "399982102030846763698994785054617523241463186980898394504211"
+ "430763617825306895065661536045431497903759118007934839122881"
+ "885863091769469883539876840543521295706315919855784493235603"
+ "866268925981702690270202829595794350800918257913991744455922"
+ "6833433740466716699302196502685546875e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x8p-16448,
+ 0x1p-16444,
+ 0x8p-16448,
+ 0x1p-16444,
+ true,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448),
+ TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+ "707305425575329500966052143410629387408077958710210208052966"
+ "529504784489330482549602621133847135082257338717668975178538"
+ "378957084503396349323438489751160934104796903302909028868611"
+ "999312592165232778075745690821530731336739429587895774023213"
+ "939331012985331912661021188896306095323395084578542200319963"
+ "179359407180003251440084380484161504585462684082946932782829"
+ "488183829817567452314437076943950532707791252404699268678810"
+ "198502871250235796855577909830559749628817599194837522029036"
+ "891995648803056846354520653635957919882905363521007017169741"
+ "463296044392266269433408052686419017699718627761948763856040"
+ "592690841721239300491445991666051031755802326720329666454066"
+ "568630314348735511753639418257984253319063825247065727664852"
+ "328745422305642626091617823968872438962470092440688372515677"
+ "832232712866924800106797113478024083516199991991274936894113"
+ "006233377518471389394984262004503058455485659100090665241525"
+ "454803628182902241401701783637353179296850056973639305945938"
+ "813428953287892593620291195986011128990061888798763718548789"
+ "025717537674780281005583347165047846045925077914824515331335"
+ "131286063574407181821236377907693209224423490663289916878620"
+ "725507793163931390372011875799729330162278748985052557432333"
+ "005334989519381566364065326138465761456173231416844807264090"
+ "741841972247545424908843928136253653308813487994328446248389"
+ "608261444391573619177442907290731163188581917588219420107047"
+ "265367485141413919810885909689112244064797106324295291545892"
+ "937991321479061743491490060940946128274533657682130125169586"
+ "930571899403551122506297763180795732325134340989331155893724"
+ "289358918212707392997768032299997207208451112971425779939507"
+ "837165263255764268971211819536322993221774123134726665579460"
+ "265871378186589562858761835613344584269098062275786969729830"
+ "545786485401407774313414954958161677096004701941411411592755"
+ "485864471870515173326244464631295701572087440183178339987662"
+ "926763241220698078822661709054601073523477544653542795020468"
+ "256078409306409100874886828781860529824879343987945751252081"
+ "314345990313550683792348814627862441324030155730592166581251"
+ "009922787324590431548734575328663628650380722603024383412564"
+ "651446272117561042207738413114131099731016728935023152239431"
+ "311619533848376583687509108453086730196255111695352464186678"
+ "221927564757730319825223049341618853631333478241227227268084"
+ "583396688436229936266854011427192767039363517491659523133852"
+ "472534104124441112346615696891097070121463652258681270378076"
+ "538381697594264658479637863087159293838880752928175545408262"
+ "813403793568695416998388572304528748824756265665683890518422"
+ "696169422338806137532304784682662448207928681740476188343739"
+ "117833525916386815135793034906806117413105008719197882837614"
+ "738262050320291539494104952056471606645482046176634075459021"
+ "552555959590354956262127809953013679512507451424271839221946"
+ "794056861055980558363033732905772356986051180966474116423192"
+ "194741572438649215204229781279620370445373851348786918527399"
+ "785630808242657122705381806661616271132182017797793661244078"
+ "445747547535623384548769818529655539279036503234072455810991"
+ "588075181817695975173110136482659854557506203058080551018873"
+ "203138260451109855100526720073566126209666125604482413705611"
+ "996796777927332827103568863352291499261312290355143742018042"
+ "254470707107847293593205234049774839191754781030496978091006"
+ "099559675240966730110167624903610656473267105556155633783594"
+ "089546261107653110531808279445757724399186120387548675148632"
+ "176049190701680305210224388072261974806791922636412897526952"
+ "793677946622674149577084803568051242934076450942927092705684"
+ "547042915490323112457971853658760725588190377666477106903106"
+ "693847278847646032201293023329503348730723947218797410452333"
+ "910847913892827195814551858335519518939031446093385329182820"
+ "714173657946661746005901866885589732922652604573972842197231"
+ "187365263381958925227970038358064987248233271706462687651143"
+ "350472018043321314534759819524203308490914358596886150053406"
+ "629512434788155355109100540319857813535695923273426256911552"
+ "977539394209918630668466632881929661971212772444625151371953"
+ "428875491139683919687008724010475217255347915698820960215217"
+ "257390308560235323463096946442080548018754166369706161589705"
+ "215873687166365628787796501470056870127729464714362172216802"
+ "441045276911597009443281135389729130222603185665646434661947"
+ "627628077723219376892727386120519287577405410510114936151502"
+ "752997122750262781911372625997223415283516995479265631485799"
+ "456782561734766648462849641064097181818204279498552827825384"
+ "186202065516999362573388136163077477126602169410435905014077"
+ "049808497409025369325795765272066650278004200357878990911374"
+ "982857977108488482528354406313893864211497105765030504600982"
+ "253488805474531798742143374465080240030582370086699167937651"
+ "038307909706139327119325418854546478285735654541635477790346"
+ "964782617354265050767878335230272194896680141986745074630225"
+ "893106573559558843545841186025169531604151588481389164948914"
+ "823593944287133336263680358191369540321930649824471425485137"
+ "777984823525402115151171093313613251350685343824859052220126"
+ "891551966018355920872775724807128769003243129486808733796350"
+ "497668255116485157191011858830643898323628223472099280243583"
+ "164434348347014910398004439821970508280440872759395827943270"
+ "985008769143562351938091476215083548164137333541883808870019"
+ "116234099013452929807950151652297436436006149684939775781234"
+ "660954156154478642694176038524277810483833149798681345708089"
+ "152179193979463169402340611793486272301808073267534612685593"
+ "859596787866884211031341417903391749825320454663508370385251"
+ "831778477311017089729361152161928815389818579983544490982891"
+ "734081131312309744330960666031291451740885503458543884956367"
+ "654943799264600314531815427932691107874782328654759293575803"
+ "481929361961781073958502075438499070633193799699311694287183"
+ "299423475339817655608058724723221867087563064557636112380829"
+ "514501382073257737022472866608244164310385205213523702910787"
+ "182472517125030106491031844871593141759729773907719510044049"
+ "352857426592936763727969496103940591601975078602859660478614"
+ "119405428212830134490731706220583788265344728818766885126977"
+ "588151111984290444321648931907188080336064713873288834096229"
+ "203276676119810521851726133377700616341304257822975788967472"
+ "152742255041912584197045423031298506219011800240120182445838"
+ "590696647416285334515631019799007515682004250060857020904012"
+ "215375170479800482680554499806010766109655061507421747722461"
+ "180617361402575082294678925605271083587897845390768226405648"
+ "508518103525778638618195775128516073959272990148239415346263"
+ "486966573934577450787243667063244378381883115827207605856174"
+ "876350045086885320626669331311880593775916269643646395423220"
+ "549940790476989709243027420158390806135690975149384714684219"
+ "964938182719962913931464979458639185519531490009437619838306"
+ "362365453754807654884704163490469296444427144778593725687358"
+ "437087390151990694667516279202024332494828210657618261952038"
+ "597230263799412584275851667403910657370879707181053365818502"
+ "680037431560091209982641738995652793235851569372314130107647"
+ "166085235615697257094269133100914135783178856280392139325001"
+ "352841718610484616627448189556913621837791650699820323059708"
+ "766420810133584841826718631681683381743511974264126250984214"
+ "812397119978273917903889865891718836792263377888052458189238"
+ "746074986456016681098722869419588274020181430652732817858728"
+ "473849369539367463917171317324882099804999043054467247785592"
+ "038464723442276239896066431580123756428540074945472427752568"
+ "981171400621705853374875885943072600692576914790467205905272"
+ "372594740187988081900317493185005142913607163380720069786786"
+ "782095331840893694073778325119471833528492917081008547303414"
+ "509381563617864195257751546539575461435803625993888325647883"
+ "541039192368366987400263049681218831477776345118518503709588"
+ "840859023379762456561030683928115349942393963185677123055324"
+ "771693784214924931737043793679546051454845624150270955450608"
+ "318747395755728950832754611277041359602301205138509175543313"
+ "522772786504141007552691902249572375175731740923618769197304"
+ "652898352694386665448260033458575323252814233868098279476166"
+ "764258284911434288072243178941698347365985427696983129579496"
+ "059032032841281149923518087084876885114369033227736521245740"
+ "554711771423492719899982357711910225545480424688322195336240"
+ "492253136281857837808491795993788199125205555222116581071134"
+ "476787468430539307909617442106685159519071053844987343666452"
+ "494280317720153567054364117244775141336558406098548803924509"
+ "496052261825198043140272655303625315605326569530252885854991"
+ "822289219201218313590745412010446642247111703901991591338062"
+ "693320157180618736569439969283245279430312651192668788340033"
+ "626825194260296262959884258597703584888770801961209652822982"
+ "322376122303586169861685106043820510444293432856251210395693"
+ "261264867823980172683352796141772210301725997652373804152525"
+ "037162852291403804455997331367378463632437773242905518075065"
+ "414724295857460288225400061608664961649196400079359622673770"
+ "607898395269075056596627116148289491042491764170924014885106"
+ "158235482774778418134123293974436877051995673618683751115353"
+ "808771434984204447736174758316063096245047311279841579995578"
+ "186609402864244042751443128536278453430633423118662852688374"
+ "229600894418958824842459450540826176452145829389286103522774"
+ "101195556029650753254244433565937938526828990893149766298997"
+ "738359913887178888607190765709867052470880785937935110091424"
+ "743449966353497865681753841380246075612094033617488674676296"
+ "822570077027076266879557913673839341012099558043806442348798"
+ "053951239274913334631522409564461770434875790402230022872647"
+ "568436177018658068697071731879399180374560963492726714528729"
+ "224208938589940272515747888379118461617702271694075087419634"
+ "147298076764775745707026934442908236664400557265527951453482"
+ "191684597674273691978253678690951178777239573925410438679099"
+ "374700609973920128201422381329108236575369403675960765238333"
+ "778127017096574296148321075566959285042221837159799800133563"
+ "239963969638610872680393210300180152020613051613414547163713"
+ "772512617757277955979895866367571776456268564191092477027650"
+ "135832200376440239783726540552694851717269598489288851529660"
+ "975027775639565229734596726205832668434979354541943345062977"
+ "891187146561050118118108223323735210843681128615413601091222"
+ "007912350536959777114306541514511332368936078560929788143798"
+ "814391221507522370648646767364209132147312407014953113532379"
+ "838195728491128536978285918066991040993153064356179903885952"
+ "027952713749653604502053512355449916680887234238773855581636"
+ "172479594866871765094513940103284167914110196720261110812716"
+ "776424260154507395050380575452850420730818412994731079307343"
+ "538376880280124019321040198038723558784544408584344466090982"
+ "802067326529000931562048932875469079874956595180595395347093"
+ "285140279165467965596318365749701535812384333240968283640721"
+ "344003442002691613772056762099098025739332715913970186225176"
+ "459563484134139746647940170537900275350480490468851439300771"
+ "949915194703080576611022590670399844931867609777417528903454"
+ "731922206378932141464755402629420074293816349270038351339419"
+ "146768473851353171629153912238797141905920143036064131705230"
+ "421762305232861503856799511155936565169005916711845389135580"
+ "928162511912438531204156138447775120789548666143600293412065"
+ "767167106888509172568003530668539460588248316513392652567856"
+ "224602697296203328920073354425994044956624831346979458846837"
+ "597950064151867164583749203433942592178528868981311575331848"
+ "941597492470436782387502687532649093096498315347403977436001"
+ "399982102030846763698994785054617523241463186980898394504211"
+ "430763617825306895065661536045431497903759118007934839122881"
+ "885863091769469883539876840543521295706315919855784493235603"
+ "866268925981702690270202829595794350800918257913991744455922"
+ "683343374046671669930219650268554687501e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x8p-16448,
+ 0x1p-16444,
+ 0x8p-16448,
+ 0x1p-16444,
+ false,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0x1p-16444,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xc.000000000004p-16448),
+ TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+ "470730542557532950096605214341062938740807795871021020805296"
+ "652950478448933048254960262113384713508225733871766897517853"
+ "837895708450339634932343848975116093410479690330290902886861"
+ "199931259216523277807574569082153073133673942958789577402321"
+ "393933101298533191266102118889630609532339508457854220031996"
+ "317935940718000325144008438048416150458546268408294693278282"
+ "948818382981756745231443707694395053270779125240469926867881"
+ "019850287125023579685557790983055974962881759919483752202903"
+ "689199564880305684635452065363595791988290536352100701716974"
+ "146329604439226626943340805268641901769971862776194876385604"
+ "059269084172123930049144599166605103175580232672032966645406"
+ "656863031434873551175363941825798425331906382524706572766485"
+ "232874542230564262609161782396887243896247009244068837251567"
+ "783223271286692480010679711347802408351619999199127493689411"
+ "300623337751847138939498426200450305845548565910009066524152"
+ "545480362818290224140170178363735317929685005697363930594593"
+ "881342895328789259362029119598601112899006188879876371854878"
+ "902571753767478028100558334716504784604592507791482451533133"
+ "513128606357440718182123637790769320922442349066328991687862"
+ "072550779316393139037201187579972933016227874898505255743233"
+ "300533498951938156636406532613846576145617323141684480726409"
+ "074184197224754542490884392813625365330881348799432844624838"
+ "960826144439157361917744290729073116318858191758821942010704"
+ "726536748514141391981088590968911224406479710632429529154589"
+ "293799132147906174349149006094094612827453365768213012516958"
+ "693057189940355112250629776318079573232513434098933115589372"
+ "428935891821270739299776803229999720720845111297142577993950"
+ "783716526325576426897121181953632299322177412313472666557946"
+ "026587137818658956285876183561334458426909806227578696972983"
+ "054578648540140777431341495495816167709600470194141141159275"
+ "548586447187051517332624446463129570157208744018317833998766"
+ "292676324122069807882266170905460107352347754465354279502046"
+ "825607840930640910087488682878186052982487934398794575125208"
+ "131434599031355068379234881462786244132403015573059216658125"
+ "100992278732459043154873457532866362865038072260302438341256"
+ "465144627211756104220773841311413109973101672893502315223943"
+ "131161953384837658368750910845308673019625511169535246418667"
+ "822192756475773031982522304934161885363133347824122722726808"
+ "458339668843622993626685401142719276703936351749165952313385"
+ "247253410412444111234661569689109707012146365225868127037807"
+ "653838169759426465847963786308715929383888075292817554540826"
+ "281340379356869541699838857230452874882475626566568389051842"
+ "269616942233880613753230478468266244820792868174047618834373"
+ "911783352591638681513579303490680611741310500871919788283761"
+ "473826205032029153949410495205647160664548204617663407545902"
+ "155255595959035495626212780995301367951250745142427183922194"
+ "679405686105598055836303373290577235698605118096647411642319"
+ "219474157243864921520422978127962037044537385134878691852739"
+ "978563080824265712270538180666161627113218201779779366124407"
+ "844574754753562338454876981852965553927903650323407245581099"
+ "158807518181769597517311013648265985455750620305808055101887"
+ "320313826045110985510052672007356612620966612560448241370561"
+ "199679677792733282710356886335229149926131229035514374201804"
+ "225447070710784729359320523404977483919175478103049697809100"
+ "609955967524096673011016762490361065647326710555615563378359"
+ "408954626110765311053180827944575772439918612038754867514863"
+ "217604919070168030521022438807226197480679192263641289752695"
+ "279367794662267414957708480356805124293407645094292709270568"
+ "454704291549032311245797185365876072558819037766647710690310"
+ "669384727884764603220129302332950334873072394721879741045233"
+ "391084791389282719581455185833551951893903144609338532918282"
+ "071417365794666174600590186688558973292265260457397284219723"
+ "118736526338195892522797003835806498724823327170646268765114"
+ "335047201804332131453475981952420330849091435859688615005340"
+ "662951243478815535510910054031985781353569592327342625691155"
+ "297753939420991863066846663288192966197121277244462515137195"
+ "342887549113968391968700872401047521725534791569882096021521"
+ "725739030856023532346309694644208054801875416636970616158970"
+ "521587368716636562878779650147005687012772946471436217221680"
+ "244104527691159700944328113538972913022260318566564643466194"
+ "762762807772321937689272738612051928757740541051011493615150"
+ "275299712275026278191137262599722341528351699547926563148579"
+ "945678256173476664846284964106409718181820427949855282782538"
+ "418620206551699936257338813616307747712660216941043590501407"
+ "704980849740902536932579576527206665027800420035787899091137"
+ "498285797710848848252835440631389386421149710576503050460098"
+ "225348880547453179874214337446508024003058237008669916793765"
+ "103830790970613932711932541885454647828573565454163547779034"
+ "696478261735426505076787833523027219489668014198674507463022"
+ "589310657355955884354584118602516953160415158848138916494891"
+ "482359394428713333626368035819136954032193064982447142548513"
+ "777798482352540211515117109331361325135068534382485905222012"
+ "689155196601835592087277572480712876900324312948680873379635"
+ "049766825511648515719101185883064389832362822347209928024358"
+ "316443434834701491039800443982197050828044087275939582794327"
+ "098500876914356235193809147621508354816413733354188380887001"
+ "911623409901345292980795015165229743643600614968493977578123"
+ "466095415615447864269417603852427781048383314979868134570808"
+ "915217919397946316940234061179348627230180807326753461268559"
+ "385959678786688421103134141790339174982532045466350837038525"
+ "183177847731101708972936115216192881538981857998354449098289"
+ "173408113131230974433096066603129145174088550345854388495636"
+ "765494379926460031453181542793269110787478232865475929357580"
+ "348192936196178107395850207543849907063319379969931169428718"
+ "329942347533981765560805872472322186708756306455763611238082"
+ "951450138207325773702247286660824416431038520521352370291078"
+ "718247251712503010649103184487159314175972977390771951004404"
+ "935285742659293676372796949610394059160197507860285966047861"
+ "411940542821283013449073170622058378826534472881876688512697"
+ "758815111198429044432164893190718808033606471387328883409622"
+ "920327667611981052185172613337770061634130425782297578896747"
+ "215274225504191258419704542303129850621901180024012018244583"
+ "859069664741628533451563101979900751568200425006085702090401"
+ "221537517047980048268055449980601076610965506150742174772246"
+ "118061736140257508229467892560527108358789784539076822640564"
+ "850851810352577863861819577512851607395927299014823941534626"
+ "348696657393457745078724366706324437838188311582720760585617"
+ "487635004508688532062666933131188059377591626964364639542322"
+ "054994079047698970924302742015839080613569097514938471468421"
+ "996493818271996291393146497945863918551953149000943761983830"
+ "636236545375480765488470416349046929644442714477859372568735"
+ "843708739015199069466751627920202433249482821065761826195203"
+ "859723026379941258427585166740391065737087970718105336581850"
+ "268003743156009120998264173899565279323585156937231413010764"
+ "716608523561569725709426913310091413578317885628039213932500"
+ "135284171861048461662744818955691362183779165069982032305970"
+ "876642081013358484182671863168168338174351197426412625098421"
+ "481239711997827391790388986589171883679226337788805245818923"
+ "874607498645601668109872286941958827402018143065273281785872"
+ "847384936953936746391717131732488209980499904305446724778559"
+ "203846472344227623989606643158012375642854007494547242775256"
+ "898117140062170585337487588594307260069257691479046720590527"
+ "237259474018798808190031749318500514291360716338072006978678"
+ "678209533184089369407377832511947183352849291708100854730341"
+ "450938156361786419525775154653957546143580362599388832564788"
+ "354103919236836698740026304968121883147777634511851850370958"
+ "884085902337976245656103068392811534994239396318567712305532"
+ "477169378421492493173704379367954605145484562415027095545060"
+ "831874739575572895083275461127704135960230120513850917554331"
+ "352277278650414100755269190224957237517573174092361876919730"
+ "465289835269438666544826003345857532325281423386809827947616"
+ "676425828491143428807224317894169834736598542769698312957949"
+ "605903203284128114992351808708487688511436903322773652124574"
+ "055471177142349271989998235771191022554548042468832219533624"
+ "049225313628185783780849179599378819912520555522211658107113"
+ "447678746843053930790961744210668515951907105384498734366645"
+ "249428031772015356705436411724477514133655840609854880392450"
+ "949605226182519804314027265530362531560532656953025288585499"
+ "182228921920121831359074541201044664224711170390199159133806"
+ "269332015718061873656943996928324527943031265119266878834003"
+ "362682519426029626295988425859770358488877080196120965282298"
+ "232237612230358616986168510604382051044429343285625121039569"
+ "326126486782398017268335279614177221030172599765237380415252"
+ "503716285229140380445599733136737846363243777324290551807506"
+ "541472429585746028822540006160866496164919640007935962267377"
+ "060789839526907505659662711614828949104249176417092401488510"
+ "615823548277477841813412329397443687705199567361868375111535"
+ "380877143498420444773617475831606309624504731127984157999557"
+ "818660940286424404275144312853627845343063342311866285268837"
+ "422960089441895882484245945054082617645214582938928610352277"
+ "410119555602965075325424443356593793852682899089314976629899"
+ "773835991388717888860719076570986705247088078593793511009142"
+ "474344996635349786568175384138024607561209403361748867467629"
+ "682257007702707626687955791367383934101209955804380644234879"
+ "805395123927491333463152240956446177043487579040223002287264"
+ "756843617701865806869707173187939918037456096349272671452872"
+ "922420893858994027251574788837911846161770227169407508741963"
+ "414729807676477574570702693444290823666440055726552795145348"
+ "219168459767427369197825367869095117877723957392541043867909"
+ "937470060997392012820142238132910823657536940367596076523833"
+ "377812701709657429614832107556695928504222183715979980013356"
+ "323996396963861087268039321030018015202061305161341454716371"
+ "377251261775727795597989586636757177645626856419109247702765"
+ "013583220037644023978372654055269485171726959848928885152966"
+ "097502777563956522973459672620583266843497935454194334506297"
+ "789118714656105011811810822332373521084368112861541360109122"
+ "200791235053695977711430654151451133236893607856092978814379"
+ "881439122150752237064864676736420913214731240701495311353237"
+ "983819572849112853697828591806699104099315306435617990388595"
+ "202795271374965360450205351235544991668088723423877385558163"
+ "617247959486687176509451394010328416791411019672026111081271"
+ "677642426015450739505038057545285042073081841299473107930734"
+ "353837688028012401932104019803872355878454440858434446609098"
+ "280206732652900093156204893287546907987495659518059539534709"
+ "328514027916546796559631836574970153581238433324096828364072"
+ "134400344200269161377205676209909802573933271591397018622517"
+ "645956348413413974664794017053790027535048049046885143930077"
+ "194991519470308057661102259067039984493186760977741752890345"
+ "473192220637893214146475540262942007429381634927003835133941"
+ "914676847385135317162915391223879714190592014303606413170523"
+ "042176230523286150385679951115593656516900591671184538913558"
+ "092816251191243853120415613844777512078954866614360029341206"
+ "576716710688850917256800353066853946058824831651339265256785"
+ "622460269729620332892007335442599404495662483134697945884683"
+ "759795006415186716458374920343394259217852886898131157533184"
+ "894159749247043678238750268753264909309649831534740397743600"
+ "139998210203084676369899478505461752324146318698089839450421"
+ "143076361782530689506566153604543149790375911800793483912288"
+ "188586309176946988353987684054352129570631591985578449323560"
+ "386626892598170269027020282959579435080091825791399174445592"
+ "2683343374046671669930219650268554687499e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x1p-16444,
+ -0x8p-16448,
+ -0x8p-16448,
+ -0x8p-16448,
+ false,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0x8p-16448,
+ -0x8p-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xb.fffffffffffcp-16448,
+ -0xb.fffffffffffcp-16448),
+ TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+ "470730542557532950096605214341062938740807795871021020805296"
+ "652950478448933048254960262113384713508225733871766897517853"
+ "837895708450339634932343848975116093410479690330290902886861"
+ "199931259216523277807574569082153073133673942958789577402321"
+ "393933101298533191266102118889630609532339508457854220031996"
+ "317935940718000325144008438048416150458546268408294693278282"
+ "948818382981756745231443707694395053270779125240469926867881"
+ "019850287125023579685557790983055974962881759919483752202903"
+ "689199564880305684635452065363595791988290536352100701716974"
+ "146329604439226626943340805268641901769971862776194876385604"
+ "059269084172123930049144599166605103175580232672032966645406"
+ "656863031434873551175363941825798425331906382524706572766485"
+ "232874542230564262609161782396887243896247009244068837251567"
+ "783223271286692480010679711347802408351619999199127493689411"
+ "300623337751847138939498426200450305845548565910009066524152"
+ "545480362818290224140170178363735317929685005697363930594593"
+ "881342895328789259362029119598601112899006188879876371854878"
+ "902571753767478028100558334716504784604592507791482451533133"
+ "513128606357440718182123637790769320922442349066328991687862"
+ "072550779316393139037201187579972933016227874898505255743233"
+ "300533498951938156636406532613846576145617323141684480726409"
+ "074184197224754542490884392813625365330881348799432844624838"
+ "960826144439157361917744290729073116318858191758821942010704"
+ "726536748514141391981088590968911224406479710632429529154589"
+ "293799132147906174349149006094094612827453365768213012516958"
+ "693057189940355112250629776318079573232513434098933115589372"
+ "428935891821270739299776803229999720720845111297142577993950"
+ "783716526325576426897121181953632299322177412313472666557946"
+ "026587137818658956285876183561334458426909806227578696972983"
+ "054578648540140777431341495495816167709600470194141141159275"
+ "548586447187051517332624446463129570157208744018317833998766"
+ "292676324122069807882266170905460107352347754465354279502046"
+ "825607840930640910087488682878186052982487934398794575125208"
+ "131434599031355068379234881462786244132403015573059216658125"
+ "100992278732459043154873457532866362865038072260302438341256"
+ "465144627211756104220773841311413109973101672893502315223943"
+ "131161953384837658368750910845308673019625511169535246418667"
+ "822192756475773031982522304934161885363133347824122722726808"
+ "458339668843622993626685401142719276703936351749165952313385"
+ "247253410412444111234661569689109707012146365225868127037807"
+ "653838169759426465847963786308715929383888075292817554540826"
+ "281340379356869541699838857230452874882475626566568389051842"
+ "269616942233880613753230478468266244820792868174047618834373"
+ "911783352591638681513579303490680611741310500871919788283761"
+ "473826205032029153949410495205647160664548204617663407545902"
+ "155255595959035495626212780995301367951250745142427183922194"
+ "679405686105598055836303373290577235698605118096647411642319"
+ "219474157243864921520422978127962037044537385134878691852739"
+ "978563080824265712270538180666161627113218201779779366124407"
+ "844574754753562338454876981852965553927903650323407245581099"
+ "158807518181769597517311013648265985455750620305808055101887"
+ "320313826045110985510052672007356612620966612560448241370561"
+ "199679677792733282710356886335229149926131229035514374201804"
+ "225447070710784729359320523404977483919175478103049697809100"
+ "609955967524096673011016762490361065647326710555615563378359"
+ "408954626110765311053180827944575772439918612038754867514863"
+ "217604919070168030521022438807226197480679192263641289752695"
+ "279367794662267414957708480356805124293407645094292709270568"
+ "454704291549032311245797185365876072558819037766647710690310"
+ "669384727884764603220129302332950334873072394721879741045233"
+ "391084791389282719581455185833551951893903144609338532918282"
+ "071417365794666174600590186688558973292265260457397284219723"
+ "118736526338195892522797003835806498724823327170646268765114"
+ "335047201804332131453475981952420330849091435859688615005340"
+ "662951243478815535510910054031985781353569592327342625691155"
+ "297753939420991863066846663288192966197121277244462515137195"
+ "342887549113968391968700872401047521725534791569882096021521"
+ "725739030856023532346309694644208054801875416636970616158970"
+ "521587368716636562878779650147005687012772946471436217221680"
+ "244104527691159700944328113538972913022260318566564643466194"
+ "762762807772321937689272738612051928757740541051011493615150"
+ "275299712275026278191137262599722341528351699547926563148579"
+ "945678256173476664846284964106409718181820427949855282782538"
+ "418620206551699936257338813616307747712660216941043590501407"
+ "704980849740902536932579576527206665027800420035787899091137"
+ "498285797710848848252835440631389386421149710576503050460098"
+ "225348880547453179874214337446508024003058237008669916793765"
+ "103830790970613932711932541885454647828573565454163547779034"
+ "696478261735426505076787833523027219489668014198674507463022"
+ "589310657355955884354584118602516953160415158848138916494891"
+ "482359394428713333626368035819136954032193064982447142548513"
+ "777798482352540211515117109331361325135068534382485905222012"
+ "689155196601835592087277572480712876900324312948680873379635"
+ "049766825511648515719101185883064389832362822347209928024358"
+ "316443434834701491039800443982197050828044087275939582794327"
+ "098500876914356235193809147621508354816413733354188380887001"
+ "911623409901345292980795015165229743643600614968493977578123"
+ "466095415615447864269417603852427781048383314979868134570808"
+ "915217919397946316940234061179348627230180807326753461268559"
+ "385959678786688421103134141790339174982532045466350837038525"
+ "183177847731101708972936115216192881538981857998354449098289"
+ "173408113131230974433096066603129145174088550345854388495636"
+ "765494379926460031453181542793269110787478232865475929357580"
+ "348192936196178107395850207543849907063319379969931169428718"
+ "329942347533981765560805872472322186708756306455763611238082"
+ "951450138207325773702247286660824416431038520521352370291078"
+ "718247251712503010649103184487159314175972977390771951004404"
+ "935285742659293676372796949610394059160197507860285966047861"
+ "411940542821283013449073170622058378826534472881876688512697"
+ "758815111198429044432164893190718808033606471387328883409622"
+ "920327667611981052185172613337770061634130425782297578896747"
+ "215274225504191258419704542303129850621901180024012018244583"
+ "859069664741628533451563101979900751568200425006085702090401"
+ "221537517047980048268055449980601076610965506150742174772246"
+ "118061736140257508229467892560527108358789784539076822640564"
+ "850851810352577863861819577512851607395927299014823941534626"
+ "348696657393457745078724366706324437838188311582720760585617"
+ "487635004508688532062666933131188059377591626964364639542322"
+ "054994079047698970924302742015839080613569097514938471468421"
+ "996493818271996291393146497945863918551953149000943761983830"
+ "636236545375480765488470416349046929644442714477859372568735"
+ "843708739015199069466751627920202433249482821065761826195203"
+ "859723026379941258427585166740391065737087970718105336581850"
+ "268003743156009120998264173899565279323585156937231413010764"
+ "716608523561569725709426913310091413578317885628039213932500"
+ "135284171861048461662744818955691362183779165069982032305970"
+ "876642081013358484182671863168168338174351197426412625098421"
+ "481239711997827391790388986589171883679226337788805245818923"
+ "874607498645601668109872286941958827402018143065273281785872"
+ "847384936953936746391717131732488209980499904305446724778559"
+ "203846472344227623989606643158012375642854007494547242775256"
+ "898117140062170585337487588594307260069257691479046720590527"
+ "237259474018798808190031749318500514291360716338072006978678"
+ "678209533184089369407377832511947183352849291708100854730341"
+ "450938156361786419525775154653957546143580362599388832564788"
+ "354103919236836698740026304968121883147777634511851850370958"
+ "884085902337976245656103068392811534994239396318567712305532"
+ "477169378421492493173704379367954605145484562415027095545060"
+ "831874739575572895083275461127704135960230120513850917554331"
+ "352277278650414100755269190224957237517573174092361876919730"
+ "465289835269438666544826003345857532325281423386809827947616"
+ "676425828491143428807224317894169834736598542769698312957949"
+ "605903203284128114992351808708487688511436903322773652124574"
+ "055471177142349271989998235771191022554548042468832219533624"
+ "049225313628185783780849179599378819912520555522211658107113"
+ "447678746843053930790961744210668515951907105384498734366645"
+ "249428031772015356705436411724477514133655840609854880392450"
+ "949605226182519804314027265530362531560532656953025288585499"
+ "182228921920121831359074541201044664224711170390199159133806"
+ "269332015718061873656943996928324527943031265119266878834003"
+ "362682519426029626295988425859770358488877080196120965282298"
+ "232237612230358616986168510604382051044429343285625121039569"
+ "326126486782398017268335279614177221030172599765237380415252"
+ "503716285229140380445599733136737846363243777324290551807506"
+ "541472429585746028822540006160866496164919640007935962267377"
+ "060789839526907505659662711614828949104249176417092401488510"
+ "615823548277477841813412329397443687705199567361868375111535"
+ "380877143498420444773617475831606309624504731127984157999557"
+ "818660940286424404275144312853627845343063342311866285268837"
+ "422960089441895882484245945054082617645214582938928610352277"
+ "410119555602965075325424443356593793852682899089314976629899"
+ "773835991388717888860719076570986705247088078593793511009142"
+ "474344996635349786568175384138024607561209403361748867467629"
+ "682257007702707626687955791367383934101209955804380644234879"
+ "805395123927491333463152240956446177043487579040223002287264"
+ "756843617701865806869707173187939918037456096349272671452872"
+ "922420893858994027251574788837911846161770227169407508741963"
+ "414729807676477574570702693444290823666440055726552795145348"
+ "219168459767427369197825367869095117877723957392541043867909"
+ "937470060997392012820142238132910823657536940367596076523833"
+ "377812701709657429614832107556695928504222183715979980013356"
+ "323996396963861087268039321030018015202061305161341454716371"
+ "377251261775727795597989586636757177645626856419109247702765"
+ "013583220037644023978372654055269485171726959848928885152966"
+ "097502777563956522973459672620583266843497935454194334506297"
+ "789118714656105011811810822332373521084368112861541360109122"
+ "200791235053695977711430654151451133236893607856092978814379"
+ "881439122150752237064864676736420913214731240701495311353237"
+ "983819572849112853697828591806699104099315306435617990388595"
+ "202795271374965360450205351235544991668088723423877385558163"
+ "617247959486687176509451394010328416791411019672026111081271"
+ "677642426015450739505038057545285042073081841299473107930734"
+ "353837688028012401932104019803872355878454440858434446609098"
+ "280206732652900093156204893287546907987495659518059539534709"
+ "328514027916546796559631836574970153581238433324096828364072"
+ "134400344200269161377205676209909802573933271591397018622517"
+ "645956348413413974664794017053790027535048049046885143930077"
+ "194991519470308057661102259067039984493186760977741752890345"
+ "473192220637893214146475540262942007429381634927003835133941"
+ "914676847385135317162915391223879714190592014303606413170523"
+ "042176230523286150385679951115593656516900591671184538913558"
+ "092816251191243853120415613844777512078954866614360029341206"
+ "576716710688850917256800353066853946058824831651339265256785"
+ "622460269729620332892007335442599404495662483134697945884683"
+ "759795006415186716458374920343394259217852886898131157533184"
+ "894159749247043678238750268753264909309649831534740397743600"
+ "139998210203084676369899478505461752324146318698089839450421"
+ "143076361782530689506566153604543149790375911800793483912288"
+ "188586309176946988353987684054352129570631591985578449323560"
+ "386626892598170269027020282959579435080091825791399174445592"
+ "26833433740466716699302196502685546875e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x1p-16444,
+ -0x1p-16444,
+ -0x8p-16448,
+ -0x8p-16448,
+ true,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448),
+ TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+ "470730542557532950096605214341062938740807795871021020805296"
+ "652950478448933048254960262113384713508225733871766897517853"
+ "837895708450339634932343848975116093410479690330290902886861"
+ "199931259216523277807574569082153073133673942958789577402321"
+ "393933101298533191266102118889630609532339508457854220031996"
+ "317935940718000325144008438048416150458546268408294693278282"
+ "948818382981756745231443707694395053270779125240469926867881"
+ "019850287125023579685557790983055974962881759919483752202903"
+ "689199564880305684635452065363595791988290536352100701716974"
+ "146329604439226626943340805268641901769971862776194876385604"
+ "059269084172123930049144599166605103175580232672032966645406"
+ "656863031434873551175363941825798425331906382524706572766485"
+ "232874542230564262609161782396887243896247009244068837251567"
+ "783223271286692480010679711347802408351619999199127493689411"
+ "300623337751847138939498426200450305845548565910009066524152"
+ "545480362818290224140170178363735317929685005697363930594593"
+ "881342895328789259362029119598601112899006188879876371854878"
+ "902571753767478028100558334716504784604592507791482451533133"
+ "513128606357440718182123637790769320922442349066328991687862"
+ "072550779316393139037201187579972933016227874898505255743233"
+ "300533498951938156636406532613846576145617323141684480726409"
+ "074184197224754542490884392813625365330881348799432844624838"
+ "960826144439157361917744290729073116318858191758821942010704"
+ "726536748514141391981088590968911224406479710632429529154589"
+ "293799132147906174349149006094094612827453365768213012516958"
+ "693057189940355112250629776318079573232513434098933115589372"
+ "428935891821270739299776803229999720720845111297142577993950"
+ "783716526325576426897121181953632299322177412313472666557946"
+ "026587137818658956285876183561334458426909806227578696972983"
+ "054578648540140777431341495495816167709600470194141141159275"
+ "548586447187051517332624446463129570157208744018317833998766"
+ "292676324122069807882266170905460107352347754465354279502046"
+ "825607840930640910087488682878186052982487934398794575125208"
+ "131434599031355068379234881462786244132403015573059216658125"
+ "100992278732459043154873457532866362865038072260302438341256"
+ "465144627211756104220773841311413109973101672893502315223943"
+ "131161953384837658368750910845308673019625511169535246418667"
+ "822192756475773031982522304934161885363133347824122722726808"
+ "458339668843622993626685401142719276703936351749165952313385"
+ "247253410412444111234661569689109707012146365225868127037807"
+ "653838169759426465847963786308715929383888075292817554540826"
+ "281340379356869541699838857230452874882475626566568389051842"
+ "269616942233880613753230478468266244820792868174047618834373"
+ "911783352591638681513579303490680611741310500871919788283761"
+ "473826205032029153949410495205647160664548204617663407545902"
+ "155255595959035495626212780995301367951250745142427183922194"
+ "679405686105598055836303373290577235698605118096647411642319"
+ "219474157243864921520422978127962037044537385134878691852739"
+ "978563080824265712270538180666161627113218201779779366124407"
+ "844574754753562338454876981852965553927903650323407245581099"
+ "158807518181769597517311013648265985455750620305808055101887"
+ "320313826045110985510052672007356612620966612560448241370561"
+ "199679677792733282710356886335229149926131229035514374201804"
+ "225447070710784729359320523404977483919175478103049697809100"
+ "609955967524096673011016762490361065647326710555615563378359"
+ "408954626110765311053180827944575772439918612038754867514863"
+ "217604919070168030521022438807226197480679192263641289752695"
+ "279367794662267414957708480356805124293407645094292709270568"
+ "454704291549032311245797185365876072558819037766647710690310"
+ "669384727884764603220129302332950334873072394721879741045233"
+ "391084791389282719581455185833551951893903144609338532918282"
+ "071417365794666174600590186688558973292265260457397284219723"
+ "118736526338195892522797003835806498724823327170646268765114"
+ "335047201804332131453475981952420330849091435859688615005340"
+ "662951243478815535510910054031985781353569592327342625691155"
+ "297753939420991863066846663288192966197121277244462515137195"
+ "342887549113968391968700872401047521725534791569882096021521"
+ "725739030856023532346309694644208054801875416636970616158970"
+ "521587368716636562878779650147005687012772946471436217221680"
+ "244104527691159700944328113538972913022260318566564643466194"
+ "762762807772321937689272738612051928757740541051011493615150"
+ "275299712275026278191137262599722341528351699547926563148579"
+ "945678256173476664846284964106409718181820427949855282782538"
+ "418620206551699936257338813616307747712660216941043590501407"
+ "704980849740902536932579576527206665027800420035787899091137"
+ "498285797710848848252835440631389386421149710576503050460098"
+ "225348880547453179874214337446508024003058237008669916793765"
+ "103830790970613932711932541885454647828573565454163547779034"
+ "696478261735426505076787833523027219489668014198674507463022"
+ "589310657355955884354584118602516953160415158848138916494891"
+ "482359394428713333626368035819136954032193064982447142548513"
+ "777798482352540211515117109331361325135068534382485905222012"
+ "689155196601835592087277572480712876900324312948680873379635"
+ "049766825511648515719101185883064389832362822347209928024358"
+ "316443434834701491039800443982197050828044087275939582794327"
+ "098500876914356235193809147621508354816413733354188380887001"
+ "911623409901345292980795015165229743643600614968493977578123"
+ "466095415615447864269417603852427781048383314979868134570808"
+ "915217919397946316940234061179348627230180807326753461268559"
+ "385959678786688421103134141790339174982532045466350837038525"
+ "183177847731101708972936115216192881538981857998354449098289"
+ "173408113131230974433096066603129145174088550345854388495636"
+ "765494379926460031453181542793269110787478232865475929357580"
+ "348192936196178107395850207543849907063319379969931169428718"
+ "329942347533981765560805872472322186708756306455763611238082"
+ "951450138207325773702247286660824416431038520521352370291078"
+ "718247251712503010649103184487159314175972977390771951004404"
+ "935285742659293676372796949610394059160197507860285966047861"
+ "411940542821283013449073170622058378826534472881876688512697"
+ "758815111198429044432164893190718808033606471387328883409622"
+ "920327667611981052185172613337770061634130425782297578896747"
+ "215274225504191258419704542303129850621901180024012018244583"
+ "859069664741628533451563101979900751568200425006085702090401"
+ "221537517047980048268055449980601076610965506150742174772246"
+ "118061736140257508229467892560527108358789784539076822640564"
+ "850851810352577863861819577512851607395927299014823941534626"
+ "348696657393457745078724366706324437838188311582720760585617"
+ "487635004508688532062666933131188059377591626964364639542322"
+ "054994079047698970924302742015839080613569097514938471468421"
+ "996493818271996291393146497945863918551953149000943761983830"
+ "636236545375480765488470416349046929644442714477859372568735"
+ "843708739015199069466751627920202433249482821065761826195203"
+ "859723026379941258427585166740391065737087970718105336581850"
+ "268003743156009120998264173899565279323585156937231413010764"
+ "716608523561569725709426913310091413578317885628039213932500"
+ "135284171861048461662744818955691362183779165069982032305970"
+ "876642081013358484182671863168168338174351197426412625098421"
+ "481239711997827391790388986589171883679226337788805245818923"
+ "874607498645601668109872286941958827402018143065273281785872"
+ "847384936953936746391717131732488209980499904305446724778559"
+ "203846472344227623989606643158012375642854007494547242775256"
+ "898117140062170585337487588594307260069257691479046720590527"
+ "237259474018798808190031749318500514291360716338072006978678"
+ "678209533184089369407377832511947183352849291708100854730341"
+ "450938156361786419525775154653957546143580362599388832564788"
+ "354103919236836698740026304968121883147777634511851850370958"
+ "884085902337976245656103068392811534994239396318567712305532"
+ "477169378421492493173704379367954605145484562415027095545060"
+ "831874739575572895083275461127704135960230120513850917554331"
+ "352277278650414100755269190224957237517573174092361876919730"
+ "465289835269438666544826003345857532325281423386809827947616"
+ "676425828491143428807224317894169834736598542769698312957949"
+ "605903203284128114992351808708487688511436903322773652124574"
+ "055471177142349271989998235771191022554548042468832219533624"
+ "049225313628185783780849179599378819912520555522211658107113"
+ "447678746843053930790961744210668515951907105384498734366645"
+ "249428031772015356705436411724477514133655840609854880392450"
+ "949605226182519804314027265530362531560532656953025288585499"
+ "182228921920121831359074541201044664224711170390199159133806"
+ "269332015718061873656943996928324527943031265119266878834003"
+ "362682519426029626295988425859770358488877080196120965282298"
+ "232237612230358616986168510604382051044429343285625121039569"
+ "326126486782398017268335279614177221030172599765237380415252"
+ "503716285229140380445599733136737846363243777324290551807506"
+ "541472429585746028822540006160866496164919640007935962267377"
+ "060789839526907505659662711614828949104249176417092401488510"
+ "615823548277477841813412329397443687705199567361868375111535"
+ "380877143498420444773617475831606309624504731127984157999557"
+ "818660940286424404275144312853627845343063342311866285268837"
+ "422960089441895882484245945054082617645214582938928610352277"
+ "410119555602965075325424443356593793852682899089314976629899"
+ "773835991388717888860719076570986705247088078593793511009142"
+ "474344996635349786568175384138024607561209403361748867467629"
+ "682257007702707626687955791367383934101209955804380644234879"
+ "805395123927491333463152240956446177043487579040223002287264"
+ "756843617701865806869707173187939918037456096349272671452872"
+ "922420893858994027251574788837911846161770227169407508741963"
+ "414729807676477574570702693444290823666440055726552795145348"
+ "219168459767427369197825367869095117877723957392541043867909"
+ "937470060997392012820142238132910823657536940367596076523833"
+ "377812701709657429614832107556695928504222183715979980013356"
+ "323996396963861087268039321030018015202061305161341454716371"
+ "377251261775727795597989586636757177645626856419109247702765"
+ "013583220037644023978372654055269485171726959848928885152966"
+ "097502777563956522973459672620583266843497935454194334506297"
+ "789118714656105011811810822332373521084368112861541360109122"
+ "200791235053695977711430654151451133236893607856092978814379"
+ "881439122150752237064864676736420913214731240701495311353237"
+ "983819572849112853697828591806699104099315306435617990388595"
+ "202795271374965360450205351235544991668088723423877385558163"
+ "617247959486687176509451394010328416791411019672026111081271"
+ "677642426015450739505038057545285042073081841299473107930734"
+ "353837688028012401932104019803872355878454440858434446609098"
+ "280206732652900093156204893287546907987495659518059539534709"
+ "328514027916546796559631836574970153581238433324096828364072"
+ "134400344200269161377205676209909802573933271591397018622517"
+ "645956348413413974664794017053790027535048049046885143930077"
+ "194991519470308057661102259067039984493186760977741752890345"
+ "473192220637893214146475540262942007429381634927003835133941"
+ "914676847385135317162915391223879714190592014303606413170523"
+ "042176230523286150385679951115593656516900591671184538913558"
+ "092816251191243853120415613844777512078954866614360029341206"
+ "576716710688850917256800353066853946058824831651339265256785"
+ "622460269729620332892007335442599404495662483134697945884683"
+ "759795006415186716458374920343394259217852886898131157533184"
+ "894159749247043678238750268753264909309649831534740397743600"
+ "139998210203084676369899478505461752324146318698089839450421"
+ "143076361782530689506566153604543149790375911800793483912288"
+ "188586309176946988353987684054352129570631591985578449323560"
+ "386626892598170269027020282959579435080091825791399174445592"
+ "2683343374046671669930219650268554687501e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x1p-16444,
+ -0x1p-16444,
+ -0x8p-16448,
+ -0x8p-16448,
+ false,
+ -0x1p-16444,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0xc.000000000004p-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448),
+ TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+ "707305425575329500966052143410629387408077958710210208052966"
+ "529504784489330482549602621133847135082257338717668975178538"
+ "378957084503396349323438489751160934104796903302909028868611"
+ "999312592165232778075745690821530731336739429587895774023213"
+ "939331012985331912661021188896306095323395084578542200319963"
+ "179359407180003251440084380484161504585462684082946932782829"
+ "488183829817567452314437076943950532707791252404699268678810"
+ "198502871250235796855577909830559749628817599194837522029036"
+ "891995648803056846354520653635957919882905363521007017169741"
+ "463296044392266269433408052686419017699718627761948763856040"
+ "592690841721239300491445991666051031755802326720329666454066"
+ "568630314348735511753639418257984253319063825247065727664852"
+ "328745422305642626091617823968872438962470092440688372515677"
+ "832232712866924800106797113478024083516199991991274936894113"
+ "006233377518471389394984262004503058455485659100090665241525"
+ "454803628182902241401701783637353179296850056973639305945938"
+ "813428953287892593620291195986011128990061888798763718548789"
+ "025717537674780281005583347165047846045925077914824515331335"
+ "131286063574407181821236377907693209224423490663289916878620"
+ "725507793163931390372011875799729330162278748985052557432333"
+ "005334989519381566364065326138465761456173231416844807264090"
+ "741841972247545424908843928136253653308813487994328446248389"
+ "608261444391573619177442907290731163188581917588219420107047"
+ "265367485141413919810885909689112244064797106324295291545892"
+ "937991321479061743491490060940946128274533657682130125169586"
+ "930571899403551122506297763180795732325134340989331155893724"
+ "289358918212707392997768032299997207208451112971425779939507"
+ "837165263255764268971211819536322993221774123134726665579460"
+ "265871378186589562858761835613344584269098062275786969729830"
+ "545786485401407774313414954958161677096004701941411411592755"
+ "485864471870515173326244464631295701572087440183178339987662"
+ "926763241220698078822661709054601073523477544653542795020468"
+ "256078409306409100874886828781860529824879343987945751252081"
+ "314345990313550683792348814627862441324030155730592166581251"
+ "009922787324590431548734575328663628650380722603024383412564"
+ "651446272117561042207738413114131099731016728935023152239431"
+ "311619533848376583687509108453086730196255111695352464186678"
+ "221927564757730319825223049341618853631333478241227227268084"
+ "583396688436229936266854011427192767039363517491659523133852"
+ "472534104124441112346615696891097070121463652258681270378076"
+ "538381697594264658479637863087159293838880752928175545408262"
+ "813403793568695416998388572304528748824756265665683890518422"
+ "696169422338806137532304784682662448207928681740476188343739"
+ "117833525916386815135793034906806117413105008719197882837614"
+ "738262050320291539494104952056471606645482046176634075459021"
+ "552555959590354956262127809953013679512507451424271839221946"
+ "794056861055980558363033732905772356986051180966474116423192"
+ "194741572438649215204229781279620370445373851348786918527399"
+ "785630808242657122705381806661616271132182017797793661244078"
+ "445747547535623384548769818529655539279036503234072455810991"
+ "588075181817695975173110136482659854557506203058080551018873"
+ "203138260451109855100526720073566126209666125604482413705611"
+ "996796777927332827103568863352291499261312290355143742018042"
+ "254470707107847293593205234049774839191754781030496978091006"
+ "099559675240966730110167624903610656473267105556155633783594"
+ "089546261107653110531808279445757724399186120387548675148632"
+ "176049190701680305210224388072261974806791922636412897526952"
+ "793677946622674149577084803568051242934076450942927092705684"
+ "547042915490323112457971853658760725588190377666477106903106"
+ "693847278847646032201293023329503348730723947218797410452333"
+ "910847913892827195814551858335519518939031446093385329182820"
+ "714173657946661746005901866885589732922652604573972842197231"
+ "187365263381958925227970038358064987248233271706462687651143"
+ "350472018043321314534759819524203308490914358596886150053406"
+ "629512434788155355109100540319857813535695923273426256911552"
+ "977539394209918630668466632881929661971212772444625151371953"
+ "428875491139683919687008724010475217255347915698820960215217"
+ "257390308560235323463096946442080548018754166369706161589705"
+ "215873687166365628787796501470056870127729464714362172216802"
+ "441045276911597009443281135389729130222603185665646434661947"
+ "627628077723219376892727386120519287577405410510114936151502"
+ "752997122750262781911372625997223415283516995479265631485799"
+ "456782561734766648462849641064097181818204279498552827825384"
+ "186202065516999362573388136163077477126602169410435905014077"
+ "049808497409025369325795765272066650278004200357878990911374"
+ "982857977108488482528354406313893864211497105765030504600982"
+ "253488805474531798742143374465080240030582370086699167937651"
+ "038307909706139327119325418854546478285735654541635477790346"
+ "964782617354265050767878335230272194896680141986745074630225"
+ "893106573559558843545841186025169531604151588481389164948914"
+ "823593944287133336263680358191369540321930649824471425485137"
+ "777984823525402115151171093313613251350685343824859052220126"
+ "891551966018355920872775724807128769003243129486808733796350"
+ "497668255116485157191011858830643898323628223472099280243583"
+ "164434348347014910398004439821970508280440872759395827943270"
+ "985008769143562351938091476215083548164137333541883808870019"
+ "116234099013452929807950151652297436436006149684939775781234"
+ "660954156154478642694176038524277810483833149798681345708089"
+ "152179193979463169402340611793486272301808073267534612685593"
+ "859596787866884211031341417903391749825320454663508370385251"
+ "831778477311017089729361152161928815389818579983544490982891"
+ "734081131312309744330960666031291451740885503458543884956367"
+ "654943799264600314531815427932691107874782328654759293575803"
+ "481929361961781073958502075438499070633193799699311694287183"
+ "299423475339817655608058724723221867087563064557636112380829"
+ "514501382073257737022472866608244164310385205213523702910787"
+ "182472517125030106491031844871593141759729773907719510044049"
+ "352857426592936763727969496103940591601975078602859660478614"
+ "119405428212830134490731706220583788265344728818766885126977"
+ "588151111984290444321648931907188080336064713873288834096229"
+ "203276676119810521851726133377700616341304257822975788967472"
+ "152742255041912584197045423031298506219011800240120182445838"
+ "590696647416285334515631019799007515682004250060857020904012"
+ "215375170479800482680554499806010766109655061507421747722461"
+ "180617361402575082294678925605271083587897845390768226405648"
+ "508518103525778638618195775128516073959272990148239415346263"
+ "486966573934577450787243667063244378381883115827207605856174"
+ "876350045086885320626669331311880593775916269643646395423220"
+ "549940790476989709243027420158390806135690975149384714684219"
+ "964938182719962913931464979458639185519531490009437619838306"
+ "362365453754807654884704163490469296444427144778593725687358"
+ "437087390151990694667516279202024332494828210657618261952038"
+ "597230263799412584275851667403910657370879707181053365818502"
+ "680037431560091209982641738995652793235851569372314130107647"
+ "166085235615697257094269133100914135783178856280392139325001"
+ "352841718610484616627448189556913621837791650699820323059708"
+ "766420810133584841826718631681683381743511974264126250984214"
+ "812397119978273917903889865891718836792263377888052458189238"
+ "746074986456016681098722869419588274020181430652732817858728"
+ "473849369539367463917171317324882099804999043054467247785592"
+ "038464723442276239896066431580123756428540074945472427752568"
+ "981171400621705853374875885943072600692576914790467205905272"
+ "372594740187988081900317493185005142913607163380720069786786"
+ "782095331840893694073778325119471833528492917081008547303414"
+ "509381563617864195257751546539575461435803625993888325647883"
+ "541039192368366987400263049681218831477776345118518503709588"
+ "840859023379762456561030683928115349942393963185677123055324"
+ "771693784214924931737043793679546051454845624150270955450608"
+ "318747395755728950832754611277041359602301205138509175543313"
+ "522772786504141007552691902249572375175731740923618769197304"
+ "652898352694386665448260033458575323252814233868098279476166"
+ "764258284911434288072243178941698347365985427696983129579496"
+ "059032032841281149923518087084876885114369033227736521245740"
+ "554711771423492719899982357711910225545480424688322195336240"
+ "492253136281857837808491795993788199125205555222116581071134"
+ "476787468430539307909617442106685159519071053844987343666452"
+ "494280317720153567054364117244775141336558406098548803924509"
+ "496052261825198043140272655303625315605326569530252885854991"
+ "822289219201218313590745412010446642247111703901991591338062"
+ "693320157180618736569439969283245279430312651192668788340033"
+ "626825194260296262959884258597703584888770801961209652822982"
+ "322376122303586169861685106043820510444293432856251210395693"
+ "261264867823980172683352796141772210301725997652373804152525"
+ "037162852291403804455997331367378463632437773242905518075065"
+ "414724295857460288225400061608664961649196400079359622673770"
+ "607898395269075056596627116148289491042491764170924014885106"
+ "158235482774778418134123293974436877051995673618683751115353"
+ "808771434984204447736174758316063096245047311279841579995578"
+ "186609402864244042751443128536278453430633423118662852688374"
+ "229600894418958824842459450540826176452145829389286103522774"
+ "101195556029650753254244433565937938526828990893149766298997"
+ "738359913887178888607190765709867052470880785937935110091424"
+ "743449966353497865681753841380246075612094033617488674676296"
+ "822570077027076266879557913673839341012099558043806442348798"
+ "053951239274913334631522409564461770434875790402230022872647"
+ "568436177018658068697071731879399180374560963492726714528729"
+ "224208938589940272515747888379118461617702271694075087419634"
+ "147298076764775745707026934442908236664400557265527951453482"
+ "191684597674273691978253678690951178777239573925410438679099"
+ "374700609973920128201422381329108236575369403675960765238333"
+ "778127017096574296148321075566959285042221837159799800133563"
+ "239963969638610872680393210300180152020613051613414547163713"
+ "772512617757277955979895866367571776456268564191092477027650"
+ "135832200376440239783726540552694851717269598489288851529660"
+ "975027775639565229734596726205832668434979354541943345062977"
+ "891187146561050118118108223323735210843681128615413601091222"
+ "007912350536959777114306541514511332368936078560929788143798"
+ "814391221507522370648646767364209132147312407014953113532379"
+ "838195728491128536978285918066991040993153064356179903885952"
+ "027952713749653604502053512355449916680887234238773855581636"
+ "172479594866871765094513940103284167914110196720261110812716"
+ "776424260154507395050380575452850420730818412994731079307343"
+ "538376880280124019321040198038723558784544408584344466090982"
+ "802067326529000931562048932875469079874956595180595395347093"
+ "285140279165467965596318365749701535812384333240968283640721"
+ "344003442002691613772056762099098025739332715913970186225176"
+ "459563484134139746647940170537900275350480490468851439300771"
+ "949915194703080576611022590670399844931867609777417528903454"
+ "731922206378932141464755402629420074293816349270038351339419"
+ "146768473851353171629153912238797141905920143036064131705230"
+ "421762305232861503856799511155936565169005916711845389135580"
+ "928162511912438531204156138447775120789548666143600293412065"
+ "767167106888509172568003530668539460588248316513392652567856"
+ "224602697296203328920073354425994044956624831346979458846837"
+ "597950064151867164583749203433942592178528868981311575331848"
+ "941597492470436782387502687532649093096498315347403977436001"
+ "399982102030846763698994785054617523241463186980898394504211"
+ "430763617825306895065661536045431497903759118007934839122881"
+ "885863091769469883539876840543521295706315919855784493235603"
+ "866268925981702690270202829595794350800918257913991744455922"
+ "683343374046671669930219650268554687499e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x8p-16448,
+ 0x8p-16448,
+ 0x8p-16448,
+ 0x1p-16444,
+ false,
+ 0x8p-16448,
+ 0xcp-16448,
+ 0x8p-16448,
+ 0xcp-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0xb.fffffffffffcp-16448,
+ 0xcp-16448,
+ 0xb.fffffffffffcp-16448,
+ 0xcp-16448),
+ TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+ "707305425575329500966052143410629387408077958710210208052966"
+ "529504784489330482549602621133847135082257338717668975178538"
+ "378957084503396349323438489751160934104796903302909028868611"
+ "999312592165232778075745690821530731336739429587895774023213"
+ "939331012985331912661021188896306095323395084578542200319963"
+ "179359407180003251440084380484161504585462684082946932782829"
+ "488183829817567452314437076943950532707791252404699268678810"
+ "198502871250235796855577909830559749628817599194837522029036"
+ "891995648803056846354520653635957919882905363521007017169741"
+ "463296044392266269433408052686419017699718627761948763856040"
+ "592690841721239300491445991666051031755802326720329666454066"
+ "568630314348735511753639418257984253319063825247065727664852"
+ "328745422305642626091617823968872438962470092440688372515677"
+ "832232712866924800106797113478024083516199991991274936894113"
+ "006233377518471389394984262004503058455485659100090665241525"
+ "454803628182902241401701783637353179296850056973639305945938"
+ "813428953287892593620291195986011128990061888798763718548789"
+ "025717537674780281005583347165047846045925077914824515331335"
+ "131286063574407181821236377907693209224423490663289916878620"
+ "725507793163931390372011875799729330162278748985052557432333"
+ "005334989519381566364065326138465761456173231416844807264090"
+ "741841972247545424908843928136253653308813487994328446248389"
+ "608261444391573619177442907290731163188581917588219420107047"
+ "265367485141413919810885909689112244064797106324295291545892"
+ "937991321479061743491490060940946128274533657682130125169586"
+ "930571899403551122506297763180795732325134340989331155893724"
+ "289358918212707392997768032299997207208451112971425779939507"
+ "837165263255764268971211819536322993221774123134726665579460"
+ "265871378186589562858761835613344584269098062275786969729830"
+ "545786485401407774313414954958161677096004701941411411592755"
+ "485864471870515173326244464631295701572087440183178339987662"
+ "926763241220698078822661709054601073523477544653542795020468"
+ "256078409306409100874886828781860529824879343987945751252081"
+ "314345990313550683792348814627862441324030155730592166581251"
+ "009922787324590431548734575328663628650380722603024383412564"
+ "651446272117561042207738413114131099731016728935023152239431"
+ "311619533848376583687509108453086730196255111695352464186678"
+ "221927564757730319825223049341618853631333478241227227268084"
+ "583396688436229936266854011427192767039363517491659523133852"
+ "472534104124441112346615696891097070121463652258681270378076"
+ "538381697594264658479637863087159293838880752928175545408262"
+ "813403793568695416998388572304528748824756265665683890518422"
+ "696169422338806137532304784682662448207928681740476188343739"
+ "117833525916386815135793034906806117413105008719197882837614"
+ "738262050320291539494104952056471606645482046176634075459021"
+ "552555959590354956262127809953013679512507451424271839221946"
+ "794056861055980558363033732905772356986051180966474116423192"
+ "194741572438649215204229781279620370445373851348786918527399"
+ "785630808242657122705381806661616271132182017797793661244078"
+ "445747547535623384548769818529655539279036503234072455810991"
+ "588075181817695975173110136482659854557506203058080551018873"
+ "203138260451109855100526720073566126209666125604482413705611"
+ "996796777927332827103568863352291499261312290355143742018042"
+ "254470707107847293593205234049774839191754781030496978091006"
+ "099559675240966730110167624903610656473267105556155633783594"
+ "089546261107653110531808279445757724399186120387548675148632"
+ "176049190701680305210224388072261974806791922636412897526952"
+ "793677946622674149577084803568051242934076450942927092705684"
+ "547042915490323112457971853658760725588190377666477106903106"
+ "693847278847646032201293023329503348730723947218797410452333"
+ "910847913892827195814551858335519518939031446093385329182820"
+ "714173657946661746005901866885589732922652604573972842197231"
+ "187365263381958925227970038358064987248233271706462687651143"
+ "350472018043321314534759819524203308490914358596886150053406"
+ "629512434788155355109100540319857813535695923273426256911552"
+ "977539394209918630668466632881929661971212772444625151371953"
+ "428875491139683919687008724010475217255347915698820960215217"
+ "257390308560235323463096946442080548018754166369706161589705"
+ "215873687166365628787796501470056870127729464714362172216802"
+ "441045276911597009443281135389729130222603185665646434661947"
+ "627628077723219376892727386120519287577405410510114936151502"
+ "752997122750262781911372625997223415283516995479265631485799"
+ "456782561734766648462849641064097181818204279498552827825384"
+ "186202065516999362573388136163077477126602169410435905014077"
+ "049808497409025369325795765272066650278004200357878990911374"
+ "982857977108488482528354406313893864211497105765030504600982"
+ "253488805474531798742143374465080240030582370086699167937651"
+ "038307909706139327119325418854546478285735654541635477790346"
+ "964782617354265050767878335230272194896680141986745074630225"
+ "893106573559558843545841186025169531604151588481389164948914"
+ "823593944287133336263680358191369540321930649824471425485137"
+ "777984823525402115151171093313613251350685343824859052220126"
+ "891551966018355920872775724807128769003243129486808733796350"
+ "497668255116485157191011858830643898323628223472099280243583"
+ "164434348347014910398004439821970508280440872759395827943270"
+ "985008769143562351938091476215083548164137333541883808870019"
+ "116234099013452929807950151652297436436006149684939775781234"
+ "660954156154478642694176038524277810483833149798681345708089"
+ "152179193979463169402340611793486272301808073267534612685593"
+ "859596787866884211031341417903391749825320454663508370385251"
+ "831778477311017089729361152161928815389818579983544490982891"
+ "734081131312309744330960666031291451740885503458543884956367"
+ "654943799264600314531815427932691107874782328654759293575803"
+ "481929361961781073958502075438499070633193799699311694287183"
+ "299423475339817655608058724723221867087563064557636112380829"
+ "514501382073257737022472866608244164310385205213523702910787"
+ "182472517125030106491031844871593141759729773907719510044049"
+ "352857426592936763727969496103940591601975078602859660478614"
+ "119405428212830134490731706220583788265344728818766885126977"
+ "588151111984290444321648931907188080336064713873288834096229"
+ "203276676119810521851726133377700616341304257822975788967472"
+ "152742255041912584197045423031298506219011800240120182445838"
+ "590696647416285334515631019799007515682004250060857020904012"
+ "215375170479800482680554499806010766109655061507421747722461"
+ "180617361402575082294678925605271083587897845390768226405648"
+ "508518103525778638618195775128516073959272990148239415346263"
+ "486966573934577450787243667063244378381883115827207605856174"
+ "876350045086885320626669331311880593775916269643646395423220"
+ "549940790476989709243027420158390806135690975149384714684219"
+ "964938182719962913931464979458639185519531490009437619838306"
+ "362365453754807654884704163490469296444427144778593725687358"
+ "437087390151990694667516279202024332494828210657618261952038"
+ "597230263799412584275851667403910657370879707181053365818502"
+ "680037431560091209982641738995652793235851569372314130107647"
+ "166085235615697257094269133100914135783178856280392139325001"
+ "352841718610484616627448189556913621837791650699820323059708"
+ "766420810133584841826718631681683381743511974264126250984214"
+ "812397119978273917903889865891718836792263377888052458189238"
+ "746074986456016681098722869419588274020181430652732817858728"
+ "473849369539367463917171317324882099804999043054467247785592"
+ "038464723442276239896066431580123756428540074945472427752568"
+ "981171400621705853374875885943072600692576914790467205905272"
+ "372594740187988081900317493185005142913607163380720069786786"
+ "782095331840893694073778325119471833528492917081008547303414"
+ "509381563617864195257751546539575461435803625993888325647883"
+ "541039192368366987400263049681218831477776345118518503709588"
+ "840859023379762456561030683928115349942393963185677123055324"
+ "771693784214924931737043793679546051454845624150270955450608"
+ "318747395755728950832754611277041359602301205138509175543313"
+ "522772786504141007552691902249572375175731740923618769197304"
+ "652898352694386665448260033458575323252814233868098279476166"
+ "764258284911434288072243178941698347365985427696983129579496"
+ "059032032841281149923518087084876885114369033227736521245740"
+ "554711771423492719899982357711910225545480424688322195336240"
+ "492253136281857837808491795993788199125205555222116581071134"
+ "476787468430539307909617442106685159519071053844987343666452"
+ "494280317720153567054364117244775141336558406098548803924509"
+ "496052261825198043140272655303625315605326569530252885854991"
+ "822289219201218313590745412010446642247111703901991591338062"
+ "693320157180618736569439969283245279430312651192668788340033"
+ "626825194260296262959884258597703584888770801961209652822982"
+ "322376122303586169861685106043820510444293432856251210395693"
+ "261264867823980172683352796141772210301725997652373804152525"
+ "037162852291403804455997331367378463632437773242905518075065"
+ "414724295857460288225400061608664961649196400079359622673770"
+ "607898395269075056596627116148289491042491764170924014885106"
+ "158235482774778418134123293974436877051995673618683751115353"
+ "808771434984204447736174758316063096245047311279841579995578"
+ "186609402864244042751443128536278453430633423118662852688374"
+ "229600894418958824842459450540826176452145829389286103522774"
+ "101195556029650753254244433565937938526828990893149766298997"
+ "738359913887178888607190765709867052470880785937935110091424"
+ "743449966353497865681753841380246075612094033617488674676296"
+ "822570077027076266879557913673839341012099558043806442348798"
+ "053951239274913334631522409564461770434875790402230022872647"
+ "568436177018658068697071731879399180374560963492726714528729"
+ "224208938589940272515747888379118461617702271694075087419634"
+ "147298076764775745707026934442908236664400557265527951453482"
+ "191684597674273691978253678690951178777239573925410438679099"
+ "374700609973920128201422381329108236575369403675960765238333"
+ "778127017096574296148321075566959285042221837159799800133563"
+ "239963969638610872680393210300180152020613051613414547163713"
+ "772512617757277955979895866367571776456268564191092477027650"
+ "135832200376440239783726540552694851717269598489288851529660"
+ "975027775639565229734596726205832668434979354541943345062977"
+ "891187146561050118118108223323735210843681128615413601091222"
+ "007912350536959777114306541514511332368936078560929788143798"
+ "814391221507522370648646767364209132147312407014953113532379"
+ "838195728491128536978285918066991040993153064356179903885952"
+ "027952713749653604502053512355449916680887234238773855581636"
+ "172479594866871765094513940103284167914110196720261110812716"
+ "776424260154507395050380575452850420730818412994731079307343"
+ "538376880280124019321040198038723558784544408584344466090982"
+ "802067326529000931562048932875469079874956595180595395347093"
+ "285140279165467965596318365749701535812384333240968283640721"
+ "344003442002691613772056762099098025739332715913970186225176"
+ "459563484134139746647940170537900275350480490468851439300771"
+ "949915194703080576611022590670399844931867609777417528903454"
+ "731922206378932141464755402629420074293816349270038351339419"
+ "146768473851353171629153912238797141905920143036064131705230"
+ "421762305232861503856799511155936565169005916711845389135580"
+ "928162511912438531204156138447775120789548666143600293412065"
+ "767167106888509172568003530668539460588248316513392652567856"
+ "224602697296203328920073354425994044956624831346979458846837"
+ "597950064151867164583749203433942592178528868981311575331848"
+ "941597492470436782387502687532649093096498315347403977436001"
+ "399982102030846763698994785054617523241463186980898394504211"
+ "430763617825306895065661536045431497903759118007934839122881"
+ "885863091769469883539876840543521295706315919855784493235603"
+ "866268925981702690270202829595794350800918257913991744455922"
+ "6833433740466716699302196502685546875e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x8p-16448,
+ 0x1p-16444,
+ 0x8p-16448,
+ 0x1p-16444,
+ true,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448),
+ TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+ "707305425575329500966052143410629387408077958710210208052966"
+ "529504784489330482549602621133847135082257338717668975178538"
+ "378957084503396349323438489751160934104796903302909028868611"
+ "999312592165232778075745690821530731336739429587895774023213"
+ "939331012985331912661021188896306095323395084578542200319963"
+ "179359407180003251440084380484161504585462684082946932782829"
+ "488183829817567452314437076943950532707791252404699268678810"
+ "198502871250235796855577909830559749628817599194837522029036"
+ "891995648803056846354520653635957919882905363521007017169741"
+ "463296044392266269433408052686419017699718627761948763856040"
+ "592690841721239300491445991666051031755802326720329666454066"
+ "568630314348735511753639418257984253319063825247065727664852"
+ "328745422305642626091617823968872438962470092440688372515677"
+ "832232712866924800106797113478024083516199991991274936894113"
+ "006233377518471389394984262004503058455485659100090665241525"
+ "454803628182902241401701783637353179296850056973639305945938"
+ "813428953287892593620291195986011128990061888798763718548789"
+ "025717537674780281005583347165047846045925077914824515331335"
+ "131286063574407181821236377907693209224423490663289916878620"
+ "725507793163931390372011875799729330162278748985052557432333"
+ "005334989519381566364065326138465761456173231416844807264090"
+ "741841972247545424908843928136253653308813487994328446248389"
+ "608261444391573619177442907290731163188581917588219420107047"
+ "265367485141413919810885909689112244064797106324295291545892"
+ "937991321479061743491490060940946128274533657682130125169586"
+ "930571899403551122506297763180795732325134340989331155893724"
+ "289358918212707392997768032299997207208451112971425779939507"
+ "837165263255764268971211819536322993221774123134726665579460"
+ "265871378186589562858761835613344584269098062275786969729830"
+ "545786485401407774313414954958161677096004701941411411592755"
+ "485864471870515173326244464631295701572087440183178339987662"
+ "926763241220698078822661709054601073523477544653542795020468"
+ "256078409306409100874886828781860529824879343987945751252081"
+ "314345990313550683792348814627862441324030155730592166581251"
+ "009922787324590431548734575328663628650380722603024383412564"
+ "651446272117561042207738413114131099731016728935023152239431"
+ "311619533848376583687509108453086730196255111695352464186678"
+ "221927564757730319825223049341618853631333478241227227268084"
+ "583396688436229936266854011427192767039363517491659523133852"
+ "472534104124441112346615696891097070121463652258681270378076"
+ "538381697594264658479637863087159293838880752928175545408262"
+ "813403793568695416998388572304528748824756265665683890518422"
+ "696169422338806137532304784682662448207928681740476188343739"
+ "117833525916386815135793034906806117413105008719197882837614"
+ "738262050320291539494104952056471606645482046176634075459021"
+ "552555959590354956262127809953013679512507451424271839221946"
+ "794056861055980558363033732905772356986051180966474116423192"
+ "194741572438649215204229781279620370445373851348786918527399"
+ "785630808242657122705381806661616271132182017797793661244078"
+ "445747547535623384548769818529655539279036503234072455810991"
+ "588075181817695975173110136482659854557506203058080551018873"
+ "203138260451109855100526720073566126209666125604482413705611"
+ "996796777927332827103568863352291499261312290355143742018042"
+ "254470707107847293593205234049774839191754781030496978091006"
+ "099559675240966730110167624903610656473267105556155633783594"
+ "089546261107653110531808279445757724399186120387548675148632"
+ "176049190701680305210224388072261974806791922636412897526952"
+ "793677946622674149577084803568051242934076450942927092705684"
+ "547042915490323112457971853658760725588190377666477106903106"
+ "693847278847646032201293023329503348730723947218797410452333"
+ "910847913892827195814551858335519518939031446093385329182820"
+ "714173657946661746005901866885589732922652604573972842197231"
+ "187365263381958925227970038358064987248233271706462687651143"
+ "350472018043321314534759819524203308490914358596886150053406"
+ "629512434788155355109100540319857813535695923273426256911552"
+ "977539394209918630668466632881929661971212772444625151371953"
+ "428875491139683919687008724010475217255347915698820960215217"
+ "257390308560235323463096946442080548018754166369706161589705"
+ "215873687166365628787796501470056870127729464714362172216802"
+ "441045276911597009443281135389729130222603185665646434661947"
+ "627628077723219376892727386120519287577405410510114936151502"
+ "752997122750262781911372625997223415283516995479265631485799"
+ "456782561734766648462849641064097181818204279498552827825384"
+ "186202065516999362573388136163077477126602169410435905014077"
+ "049808497409025369325795765272066650278004200357878990911374"
+ "982857977108488482528354406313893864211497105765030504600982"
+ "253488805474531798742143374465080240030582370086699167937651"
+ "038307909706139327119325418854546478285735654541635477790346"
+ "964782617354265050767878335230272194896680141986745074630225"
+ "893106573559558843545841186025169531604151588481389164948914"
+ "823593944287133336263680358191369540321930649824471425485137"
+ "777984823525402115151171093313613251350685343824859052220126"
+ "891551966018355920872775724807128769003243129486808733796350"
+ "497668255116485157191011858830643898323628223472099280243583"
+ "164434348347014910398004439821970508280440872759395827943270"
+ "985008769143562351938091476215083548164137333541883808870019"
+ "116234099013452929807950151652297436436006149684939775781234"
+ "660954156154478642694176038524277810483833149798681345708089"
+ "152179193979463169402340611793486272301808073267534612685593"
+ "859596787866884211031341417903391749825320454663508370385251"
+ "831778477311017089729361152161928815389818579983544490982891"
+ "734081131312309744330960666031291451740885503458543884956367"
+ "654943799264600314531815427932691107874782328654759293575803"
+ "481929361961781073958502075438499070633193799699311694287183"
+ "299423475339817655608058724723221867087563064557636112380829"
+ "514501382073257737022472866608244164310385205213523702910787"
+ "182472517125030106491031844871593141759729773907719510044049"
+ "352857426592936763727969496103940591601975078602859660478614"
+ "119405428212830134490731706220583788265344728818766885126977"
+ "588151111984290444321648931907188080336064713873288834096229"
+ "203276676119810521851726133377700616341304257822975788967472"
+ "152742255041912584197045423031298506219011800240120182445838"
+ "590696647416285334515631019799007515682004250060857020904012"
+ "215375170479800482680554499806010766109655061507421747722461"
+ "180617361402575082294678925605271083587897845390768226405648"
+ "508518103525778638618195775128516073959272990148239415346263"
+ "486966573934577450787243667063244378381883115827207605856174"
+ "876350045086885320626669331311880593775916269643646395423220"
+ "549940790476989709243027420158390806135690975149384714684219"
+ "964938182719962913931464979458639185519531490009437619838306"
+ "362365453754807654884704163490469296444427144778593725687358"
+ "437087390151990694667516279202024332494828210657618261952038"
+ "597230263799412584275851667403910657370879707181053365818502"
+ "680037431560091209982641738995652793235851569372314130107647"
+ "166085235615697257094269133100914135783178856280392139325001"
+ "352841718610484616627448189556913621837791650699820323059708"
+ "766420810133584841826718631681683381743511974264126250984214"
+ "812397119978273917903889865891718836792263377888052458189238"
+ "746074986456016681098722869419588274020181430652732817858728"
+ "473849369539367463917171317324882099804999043054467247785592"
+ "038464723442276239896066431580123756428540074945472427752568"
+ "981171400621705853374875885943072600692576914790467205905272"
+ "372594740187988081900317493185005142913607163380720069786786"
+ "782095331840893694073778325119471833528492917081008547303414"
+ "509381563617864195257751546539575461435803625993888325647883"
+ "541039192368366987400263049681218831477776345118518503709588"
+ "840859023379762456561030683928115349942393963185677123055324"
+ "771693784214924931737043793679546051454845624150270955450608"
+ "318747395755728950832754611277041359602301205138509175543313"
+ "522772786504141007552691902249572375175731740923618769197304"
+ "652898352694386665448260033458575323252814233868098279476166"
+ "764258284911434288072243178941698347365985427696983129579496"
+ "059032032841281149923518087084876885114369033227736521245740"
+ "554711771423492719899982357711910225545480424688322195336240"
+ "492253136281857837808491795993788199125205555222116581071134"
+ "476787468430539307909617442106685159519071053844987343666452"
+ "494280317720153567054364117244775141336558406098548803924509"
+ "496052261825198043140272655303625315605326569530252885854991"
+ "822289219201218313590745412010446642247111703901991591338062"
+ "693320157180618736569439969283245279430312651192668788340033"
+ "626825194260296262959884258597703584888770801961209652822982"
+ "322376122303586169861685106043820510444293432856251210395693"
+ "261264867823980172683352796141772210301725997652373804152525"
+ "037162852291403804455997331367378463632437773242905518075065"
+ "414724295857460288225400061608664961649196400079359622673770"
+ "607898395269075056596627116148289491042491764170924014885106"
+ "158235482774778418134123293974436877051995673618683751115353"
+ "808771434984204447736174758316063096245047311279841579995578"
+ "186609402864244042751443128536278453430633423118662852688374"
+ "229600894418958824842459450540826176452145829389286103522774"
+ "101195556029650753254244433565937938526828990893149766298997"
+ "738359913887178888607190765709867052470880785937935110091424"
+ "743449966353497865681753841380246075612094033617488674676296"
+ "822570077027076266879557913673839341012099558043806442348798"
+ "053951239274913334631522409564461770434875790402230022872647"
+ "568436177018658068697071731879399180374560963492726714528729"
+ "224208938589940272515747888379118461617702271694075087419634"
+ "147298076764775745707026934442908236664400557265527951453482"
+ "191684597674273691978253678690951178777239573925410438679099"
+ "374700609973920128201422381329108236575369403675960765238333"
+ "778127017096574296148321075566959285042221837159799800133563"
+ "239963969638610872680393210300180152020613051613414547163713"
+ "772512617757277955979895866367571776456268564191092477027650"
+ "135832200376440239783726540552694851717269598489288851529660"
+ "975027775639565229734596726205832668434979354541943345062977"
+ "891187146561050118118108223323735210843681128615413601091222"
+ "007912350536959777114306541514511332368936078560929788143798"
+ "814391221507522370648646767364209132147312407014953113532379"
+ "838195728491128536978285918066991040993153064356179903885952"
+ "027952713749653604502053512355449916680887234238773855581636"
+ "172479594866871765094513940103284167914110196720261110812716"
+ "776424260154507395050380575452850420730818412994731079307343"
+ "538376880280124019321040198038723558784544408584344466090982"
+ "802067326529000931562048932875469079874956595180595395347093"
+ "285140279165467965596318365749701535812384333240968283640721"
+ "344003442002691613772056762099098025739332715913970186225176"
+ "459563484134139746647940170537900275350480490468851439300771"
+ "949915194703080576611022590670399844931867609777417528903454"
+ "731922206378932141464755402629420074293816349270038351339419"
+ "146768473851353171629153912238797141905920143036064131705230"
+ "421762305232861503856799511155936565169005916711845389135580"
+ "928162511912438531204156138447775120789548666143600293412065"
+ "767167106888509172568003530668539460588248316513392652567856"
+ "224602697296203328920073354425994044956624831346979458846837"
+ "597950064151867164583749203433942592178528868981311575331848"
+ "941597492470436782387502687532649093096498315347403977436001"
+ "399982102030846763698994785054617523241463186980898394504211"
+ "430763617825306895065661536045431497903759118007934839122881"
+ "885863091769469883539876840543521295706315919855784493235603"
+ "866268925981702690270202829595794350800918257913991744455922"
+ "683343374046671669930219650268554687501e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x8p-16448,
+ 0x1p-16444,
+ 0x8p-16448,
+ 0x1p-16444,
+ false,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0x1p-16444,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xc.000000000004p-16448),
+ TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+ "470730542557532950096605214341062938740807795871021020805296"
+ "652950478448933048254960262113384713508225733871766897517853"
+ "837895708450339634932343848975116093410479690330290902886861"
+ "199931259216523277807574569082153073133673942958789577402321"
+ "393933101298533191266102118889630609532339508457854220031996"
+ "317935940718000325144008438048416150458546268408294693278282"
+ "948818382981756745231443707694395053270779125240469926867881"
+ "019850287125023579685557790983055974962881759919483752202903"
+ "689199564880305684635452065363595791988290536352100701716974"
+ "146329604439226626943340805268641901769971862776194876385604"
+ "059269084172123930049144599166605103175580232672032966645406"
+ "656863031434873551175363941825798425331906382524706572766485"
+ "232874542230564262609161782396887243896247009244068837251567"
+ "783223271286692480010679711347802408351619999199127493689411"
+ "300623337751847138939498426200450305845548565910009066524152"
+ "545480362818290224140170178363735317929685005697363930594593"
+ "881342895328789259362029119598601112899006188879876371854878"
+ "902571753767478028100558334716504784604592507791482451533133"
+ "513128606357440718182123637790769320922442349066328991687862"
+ "072550779316393139037201187579972933016227874898505255743233"
+ "300533498951938156636406532613846576145617323141684480726409"
+ "074184197224754542490884392813625365330881348799432844624838"
+ "960826144439157361917744290729073116318858191758821942010704"
+ "726536748514141391981088590968911224406479710632429529154589"
+ "293799132147906174349149006094094612827453365768213012516958"
+ "693057189940355112250629776318079573232513434098933115589372"
+ "428935891821270739299776803229999720720845111297142577993950"
+ "783716526325576426897121181953632299322177412313472666557946"
+ "026587137818658956285876183561334458426909806227578696972983"
+ "054578648540140777431341495495816167709600470194141141159275"
+ "548586447187051517332624446463129570157208744018317833998766"
+ "292676324122069807882266170905460107352347754465354279502046"
+ "825607840930640910087488682878186052982487934398794575125208"
+ "131434599031355068379234881462786244132403015573059216658125"
+ "100992278732459043154873457532866362865038072260302438341256"
+ "465144627211756104220773841311413109973101672893502315223943"
+ "131161953384837658368750910845308673019625511169535246418667"
+ "822192756475773031982522304934161885363133347824122722726808"
+ "458339668843622993626685401142719276703936351749165952313385"
+ "247253410412444111234661569689109707012146365225868127037807"
+ "653838169759426465847963786308715929383888075292817554540826"
+ "281340379356869541699838857230452874882475626566568389051842"
+ "269616942233880613753230478468266244820792868174047618834373"
+ "911783352591638681513579303490680611741310500871919788283761"
+ "473826205032029153949410495205647160664548204617663407545902"
+ "155255595959035495626212780995301367951250745142427183922194"
+ "679405686105598055836303373290577235698605118096647411642319"
+ "219474157243864921520422978127962037044537385134878691852739"
+ "978563080824265712270538180666161627113218201779779366124407"
+ "844574754753562338454876981852965553927903650323407245581099"
+ "158807518181769597517311013648265985455750620305808055101887"
+ "320313826045110985510052672007356612620966612560448241370561"
+ "199679677792733282710356886335229149926131229035514374201804"
+ "225447070710784729359320523404977483919175478103049697809100"
+ "609955967524096673011016762490361065647326710555615563378359"
+ "408954626110765311053180827944575772439918612038754867514863"
+ "217604919070168030521022438807226197480679192263641289752695"
+ "279367794662267414957708480356805124293407645094292709270568"
+ "454704291549032311245797185365876072558819037766647710690310"
+ "669384727884764603220129302332950334873072394721879741045233"
+ "391084791389282719581455185833551951893903144609338532918282"
+ "071417365794666174600590186688558973292265260457397284219723"
+ "118736526338195892522797003835806498724823327170646268765114"
+ "335047201804332131453475981952420330849091435859688615005340"
+ "662951243478815535510910054031985781353569592327342625691155"
+ "297753939420991863066846663288192966197121277244462515137195"
+ "342887549113968391968700872401047521725534791569882096021521"
+ "725739030856023532346309694644208054801875416636970616158970"
+ "521587368716636562878779650147005687012772946471436217221680"
+ "244104527691159700944328113538972913022260318566564643466194"
+ "762762807772321937689272738612051928757740541051011493615150"
+ "275299712275026278191137262599722341528351699547926563148579"
+ "945678256173476664846284964106409718181820427949855282782538"
+ "418620206551699936257338813616307747712660216941043590501407"
+ "704980849740902536932579576527206665027800420035787899091137"
+ "498285797710848848252835440631389386421149710576503050460098"
+ "225348880547453179874214337446508024003058237008669916793765"
+ "103830790970613932711932541885454647828573565454163547779034"
+ "696478261735426505076787833523027219489668014198674507463022"
+ "589310657355955884354584118602516953160415158848138916494891"
+ "482359394428713333626368035819136954032193064982447142548513"
+ "777798482352540211515117109331361325135068534382485905222012"
+ "689155196601835592087277572480712876900324312948680873379635"
+ "049766825511648515719101185883064389832362822347209928024358"
+ "316443434834701491039800443982197050828044087275939582794327"
+ "098500876914356235193809147621508354816413733354188380887001"
+ "911623409901345292980795015165229743643600614968493977578123"
+ "466095415615447864269417603852427781048383314979868134570808"
+ "915217919397946316940234061179348627230180807326753461268559"
+ "385959678786688421103134141790339174982532045466350837038525"
+ "183177847731101708972936115216192881538981857998354449098289"
+ "173408113131230974433096066603129145174088550345854388495636"
+ "765494379926460031453181542793269110787478232865475929357580"
+ "348192936196178107395850207543849907063319379969931169428718"
+ "329942347533981765560805872472322186708756306455763611238082"
+ "951450138207325773702247286660824416431038520521352370291078"
+ "718247251712503010649103184487159314175972977390771951004404"
+ "935285742659293676372796949610394059160197507860285966047861"
+ "411940542821283013449073170622058378826534472881876688512697"
+ "758815111198429044432164893190718808033606471387328883409622"
+ "920327667611981052185172613337770061634130425782297578896747"
+ "215274225504191258419704542303129850621901180024012018244583"
+ "859069664741628533451563101979900751568200425006085702090401"
+ "221537517047980048268055449980601076610965506150742174772246"
+ "118061736140257508229467892560527108358789784539076822640564"
+ "850851810352577863861819577512851607395927299014823941534626"
+ "348696657393457745078724366706324437838188311582720760585617"
+ "487635004508688532062666933131188059377591626964364639542322"
+ "054994079047698970924302742015839080613569097514938471468421"
+ "996493818271996291393146497945863918551953149000943761983830"
+ "636236545375480765488470416349046929644442714477859372568735"
+ "843708739015199069466751627920202433249482821065761826195203"
+ "859723026379941258427585166740391065737087970718105336581850"
+ "268003743156009120998264173899565279323585156937231413010764"
+ "716608523561569725709426913310091413578317885628039213932500"
+ "135284171861048461662744818955691362183779165069982032305970"
+ "876642081013358484182671863168168338174351197426412625098421"
+ "481239711997827391790388986589171883679226337788805245818923"
+ "874607498645601668109872286941958827402018143065273281785872"
+ "847384936953936746391717131732488209980499904305446724778559"
+ "203846472344227623989606643158012375642854007494547242775256"
+ "898117140062170585337487588594307260069257691479046720590527"
+ "237259474018798808190031749318500514291360716338072006978678"
+ "678209533184089369407377832511947183352849291708100854730341"
+ "450938156361786419525775154653957546143580362599388832564788"
+ "354103919236836698740026304968121883147777634511851850370958"
+ "884085902337976245656103068392811534994239396318567712305532"
+ "477169378421492493173704379367954605145484562415027095545060"
+ "831874739575572895083275461127704135960230120513850917554331"
+ "352277278650414100755269190224957237517573174092361876919730"
+ "465289835269438666544826003345857532325281423386809827947616"
+ "676425828491143428807224317894169834736598542769698312957949"
+ "605903203284128114992351808708487688511436903322773652124574"
+ "055471177142349271989998235771191022554548042468832219533624"
+ "049225313628185783780849179599378819912520555522211658107113"
+ "447678746843053930790961744210668515951907105384498734366645"
+ "249428031772015356705436411724477514133655840609854880392450"
+ "949605226182519804314027265530362531560532656953025288585499"
+ "182228921920121831359074541201044664224711170390199159133806"
+ "269332015718061873656943996928324527943031265119266878834003"
+ "362682519426029626295988425859770358488877080196120965282298"
+ "232237612230358616986168510604382051044429343285625121039569"
+ "326126486782398017268335279614177221030172599765237380415252"
+ "503716285229140380445599733136737846363243777324290551807506"
+ "541472429585746028822540006160866496164919640007935962267377"
+ "060789839526907505659662711614828949104249176417092401488510"
+ "615823548277477841813412329397443687705199567361868375111535"
+ "380877143498420444773617475831606309624504731127984157999557"
+ "818660940286424404275144312853627845343063342311866285268837"
+ "422960089441895882484245945054082617645214582938928610352277"
+ "410119555602965075325424443356593793852682899089314976629899"
+ "773835991388717888860719076570986705247088078593793511009142"
+ "474344996635349786568175384138024607561209403361748867467629"
+ "682257007702707626687955791367383934101209955804380644234879"
+ "805395123927491333463152240956446177043487579040223002287264"
+ "756843617701865806869707173187939918037456096349272671452872"
+ "922420893858994027251574788837911846161770227169407508741963"
+ "414729807676477574570702693444290823666440055726552795145348"
+ "219168459767427369197825367869095117877723957392541043867909"
+ "937470060997392012820142238132910823657536940367596076523833"
+ "377812701709657429614832107556695928504222183715979980013356"
+ "323996396963861087268039321030018015202061305161341454716371"
+ "377251261775727795597989586636757177645626856419109247702765"
+ "013583220037644023978372654055269485171726959848928885152966"
+ "097502777563956522973459672620583266843497935454194334506297"
+ "789118714656105011811810822332373521084368112861541360109122"
+ "200791235053695977711430654151451133236893607856092978814379"
+ "881439122150752237064864676736420913214731240701495311353237"
+ "983819572849112853697828591806699104099315306435617990388595"
+ "202795271374965360450205351235544991668088723423877385558163"
+ "617247959486687176509451394010328416791411019672026111081271"
+ "677642426015450739505038057545285042073081841299473107930734"
+ "353837688028012401932104019803872355878454440858434446609098"
+ "280206732652900093156204893287546907987495659518059539534709"
+ "328514027916546796559631836574970153581238433324096828364072"
+ "134400344200269161377205676209909802573933271591397018622517"
+ "645956348413413974664794017053790027535048049046885143930077"
+ "194991519470308057661102259067039984493186760977741752890345"
+ "473192220637893214146475540262942007429381634927003835133941"
+ "914676847385135317162915391223879714190592014303606413170523"
+ "042176230523286150385679951115593656516900591671184538913558"
+ "092816251191243853120415613844777512078954866614360029341206"
+ "576716710688850917256800353066853946058824831651339265256785"
+ "622460269729620332892007335442599404495662483134697945884683"
+ "759795006415186716458374920343394259217852886898131157533184"
+ "894159749247043678238750268753264909309649831534740397743600"
+ "139998210203084676369899478505461752324146318698089839450421"
+ "143076361782530689506566153604543149790375911800793483912288"
+ "188586309176946988353987684054352129570631591985578449323560"
+ "386626892598170269027020282959579435080091825791399174445592"
+ "2683343374046671669930219650268554687499e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x1p-16444,
+ -0x8p-16448,
+ -0x8p-16448,
+ -0x8p-16448,
+ false,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0x8p-16448,
+ -0x8p-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xb.fffffffffffcp-16448,
+ -0xb.fffffffffffcp-16448),
+ TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+ "470730542557532950096605214341062938740807795871021020805296"
+ "652950478448933048254960262113384713508225733871766897517853"
+ "837895708450339634932343848975116093410479690330290902886861"
+ "199931259216523277807574569082153073133673942958789577402321"
+ "393933101298533191266102118889630609532339508457854220031996"
+ "317935940718000325144008438048416150458546268408294693278282"
+ "948818382981756745231443707694395053270779125240469926867881"
+ "019850287125023579685557790983055974962881759919483752202903"
+ "689199564880305684635452065363595791988290536352100701716974"
+ "146329604439226626943340805268641901769971862776194876385604"
+ "059269084172123930049144599166605103175580232672032966645406"
+ "656863031434873551175363941825798425331906382524706572766485"
+ "232874542230564262609161782396887243896247009244068837251567"
+ "783223271286692480010679711347802408351619999199127493689411"
+ "300623337751847138939498426200450305845548565910009066524152"
+ "545480362818290224140170178363735317929685005697363930594593"
+ "881342895328789259362029119598601112899006188879876371854878"
+ "902571753767478028100558334716504784604592507791482451533133"
+ "513128606357440718182123637790769320922442349066328991687862"
+ "072550779316393139037201187579972933016227874898505255743233"
+ "300533498951938156636406532613846576145617323141684480726409"
+ "074184197224754542490884392813625365330881348799432844624838"
+ "960826144439157361917744290729073116318858191758821942010704"
+ "726536748514141391981088590968911224406479710632429529154589"
+ "293799132147906174349149006094094612827453365768213012516958"
+ "693057189940355112250629776318079573232513434098933115589372"
+ "428935891821270739299776803229999720720845111297142577993950"
+ "783716526325576426897121181953632299322177412313472666557946"
+ "026587137818658956285876183561334458426909806227578696972983"
+ "054578648540140777431341495495816167709600470194141141159275"
+ "548586447187051517332624446463129570157208744018317833998766"
+ "292676324122069807882266170905460107352347754465354279502046"
+ "825607840930640910087488682878186052982487934398794575125208"
+ "131434599031355068379234881462786244132403015573059216658125"
+ "100992278732459043154873457532866362865038072260302438341256"
+ "465144627211756104220773841311413109973101672893502315223943"
+ "131161953384837658368750910845308673019625511169535246418667"
+ "822192756475773031982522304934161885363133347824122722726808"
+ "458339668843622993626685401142719276703936351749165952313385"
+ "247253410412444111234661569689109707012146365225868127037807"
+ "653838169759426465847963786308715929383888075292817554540826"
+ "281340379356869541699838857230452874882475626566568389051842"
+ "269616942233880613753230478468266244820792868174047618834373"
+ "911783352591638681513579303490680611741310500871919788283761"
+ "473826205032029153949410495205647160664548204617663407545902"
+ "155255595959035495626212780995301367951250745142427183922194"
+ "679405686105598055836303373290577235698605118096647411642319"
+ "219474157243864921520422978127962037044537385134878691852739"
+ "978563080824265712270538180666161627113218201779779366124407"
+ "844574754753562338454876981852965553927903650323407245581099"
+ "158807518181769597517311013648265985455750620305808055101887"
+ "320313826045110985510052672007356612620966612560448241370561"
+ "199679677792733282710356886335229149926131229035514374201804"
+ "225447070710784729359320523404977483919175478103049697809100"
+ "609955967524096673011016762490361065647326710555615563378359"
+ "408954626110765311053180827944575772439918612038754867514863"
+ "217604919070168030521022438807226197480679192263641289752695"
+ "279367794662267414957708480356805124293407645094292709270568"
+ "454704291549032311245797185365876072558819037766647710690310"
+ "669384727884764603220129302332950334873072394721879741045233"
+ "391084791389282719581455185833551951893903144609338532918282"
+ "071417365794666174600590186688558973292265260457397284219723"
+ "118736526338195892522797003835806498724823327170646268765114"
+ "335047201804332131453475981952420330849091435859688615005340"
+ "662951243478815535510910054031985781353569592327342625691155"
+ "297753939420991863066846663288192966197121277244462515137195"
+ "342887549113968391968700872401047521725534791569882096021521"
+ "725739030856023532346309694644208054801875416636970616158970"
+ "521587368716636562878779650147005687012772946471436217221680"
+ "244104527691159700944328113538972913022260318566564643466194"
+ "762762807772321937689272738612051928757740541051011493615150"
+ "275299712275026278191137262599722341528351699547926563148579"
+ "945678256173476664846284964106409718181820427949855282782538"
+ "418620206551699936257338813616307747712660216941043590501407"
+ "704980849740902536932579576527206665027800420035787899091137"
+ "498285797710848848252835440631389386421149710576503050460098"
+ "225348880547453179874214337446508024003058237008669916793765"
+ "103830790970613932711932541885454647828573565454163547779034"
+ "696478261735426505076787833523027219489668014198674507463022"
+ "589310657355955884354584118602516953160415158848138916494891"
+ "482359394428713333626368035819136954032193064982447142548513"
+ "777798482352540211515117109331361325135068534382485905222012"
+ "689155196601835592087277572480712876900324312948680873379635"
+ "049766825511648515719101185883064389832362822347209928024358"
+ "316443434834701491039800443982197050828044087275939582794327"
+ "098500876914356235193809147621508354816413733354188380887001"
+ "911623409901345292980795015165229743643600614968493977578123"
+ "466095415615447864269417603852427781048383314979868134570808"
+ "915217919397946316940234061179348627230180807326753461268559"
+ "385959678786688421103134141790339174982532045466350837038525"
+ "183177847731101708972936115216192881538981857998354449098289"
+ "173408113131230974433096066603129145174088550345854388495636"
+ "765494379926460031453181542793269110787478232865475929357580"
+ "348192936196178107395850207543849907063319379969931169428718"
+ "329942347533981765560805872472322186708756306455763611238082"
+ "951450138207325773702247286660824416431038520521352370291078"
+ "718247251712503010649103184487159314175972977390771951004404"
+ "935285742659293676372796949610394059160197507860285966047861"
+ "411940542821283013449073170622058378826534472881876688512697"
+ "758815111198429044432164893190718808033606471387328883409622"
+ "920327667611981052185172613337770061634130425782297578896747"
+ "215274225504191258419704542303129850621901180024012018244583"
+ "859069664741628533451563101979900751568200425006085702090401"
+ "221537517047980048268055449980601076610965506150742174772246"
+ "118061736140257508229467892560527108358789784539076822640564"
+ "850851810352577863861819577512851607395927299014823941534626"
+ "348696657393457745078724366706324437838188311582720760585617"
+ "487635004508688532062666933131188059377591626964364639542322"
+ "054994079047698970924302742015839080613569097514938471468421"
+ "996493818271996291393146497945863918551953149000943761983830"
+ "636236545375480765488470416349046929644442714477859372568735"
+ "843708739015199069466751627920202433249482821065761826195203"
+ "859723026379941258427585166740391065737087970718105336581850"
+ "268003743156009120998264173899565279323585156937231413010764"
+ "716608523561569725709426913310091413578317885628039213932500"
+ "135284171861048461662744818955691362183779165069982032305970"
+ "876642081013358484182671863168168338174351197426412625098421"
+ "481239711997827391790388986589171883679226337788805245818923"
+ "874607498645601668109872286941958827402018143065273281785872"
+ "847384936953936746391717131732488209980499904305446724778559"
+ "203846472344227623989606643158012375642854007494547242775256"
+ "898117140062170585337487588594307260069257691479046720590527"
+ "237259474018798808190031749318500514291360716338072006978678"
+ "678209533184089369407377832511947183352849291708100854730341"
+ "450938156361786419525775154653957546143580362599388832564788"
+ "354103919236836698740026304968121883147777634511851850370958"
+ "884085902337976245656103068392811534994239396318567712305532"
+ "477169378421492493173704379367954605145484562415027095545060"
+ "831874739575572895083275461127704135960230120513850917554331"
+ "352277278650414100755269190224957237517573174092361876919730"
+ "465289835269438666544826003345857532325281423386809827947616"
+ "676425828491143428807224317894169834736598542769698312957949"
+ "605903203284128114992351808708487688511436903322773652124574"
+ "055471177142349271989998235771191022554548042468832219533624"
+ "049225313628185783780849179599378819912520555522211658107113"
+ "447678746843053930790961744210668515951907105384498734366645"
+ "249428031772015356705436411724477514133655840609854880392450"
+ "949605226182519804314027265530362531560532656953025288585499"
+ "182228921920121831359074541201044664224711170390199159133806"
+ "269332015718061873656943996928324527943031265119266878834003"
+ "362682519426029626295988425859770358488877080196120965282298"
+ "232237612230358616986168510604382051044429343285625121039569"
+ "326126486782398017268335279614177221030172599765237380415252"
+ "503716285229140380445599733136737846363243777324290551807506"
+ "541472429585746028822540006160866496164919640007935962267377"
+ "060789839526907505659662711614828949104249176417092401488510"
+ "615823548277477841813412329397443687705199567361868375111535"
+ "380877143498420444773617475831606309624504731127984157999557"
+ "818660940286424404275144312853627845343063342311866285268837"
+ "422960089441895882484245945054082617645214582938928610352277"
+ "410119555602965075325424443356593793852682899089314976629899"
+ "773835991388717888860719076570986705247088078593793511009142"
+ "474344996635349786568175384138024607561209403361748867467629"
+ "682257007702707626687955791367383934101209955804380644234879"
+ "805395123927491333463152240956446177043487579040223002287264"
+ "756843617701865806869707173187939918037456096349272671452872"
+ "922420893858994027251574788837911846161770227169407508741963"
+ "414729807676477574570702693444290823666440055726552795145348"
+ "219168459767427369197825367869095117877723957392541043867909"
+ "937470060997392012820142238132910823657536940367596076523833"
+ "377812701709657429614832107556695928504222183715979980013356"
+ "323996396963861087268039321030018015202061305161341454716371"
+ "377251261775727795597989586636757177645626856419109247702765"
+ "013583220037644023978372654055269485171726959848928885152966"
+ "097502777563956522973459672620583266843497935454194334506297"
+ "789118714656105011811810822332373521084368112861541360109122"
+ "200791235053695977711430654151451133236893607856092978814379"
+ "881439122150752237064864676736420913214731240701495311353237"
+ "983819572849112853697828591806699104099315306435617990388595"
+ "202795271374965360450205351235544991668088723423877385558163"
+ "617247959486687176509451394010328416791411019672026111081271"
+ "677642426015450739505038057545285042073081841299473107930734"
+ "353837688028012401932104019803872355878454440858434446609098"
+ "280206732652900093156204893287546907987495659518059539534709"
+ "328514027916546796559631836574970153581238433324096828364072"
+ "134400344200269161377205676209909802573933271591397018622517"
+ "645956348413413974664794017053790027535048049046885143930077"
+ "194991519470308057661102259067039984493186760977741752890345"
+ "473192220637893214146475540262942007429381634927003835133941"
+ "914676847385135317162915391223879714190592014303606413170523"
+ "042176230523286150385679951115593656516900591671184538913558"
+ "092816251191243853120415613844777512078954866614360029341206"
+ "576716710688850917256800353066853946058824831651339265256785"
+ "622460269729620332892007335442599404495662483134697945884683"
+ "759795006415186716458374920343394259217852886898131157533184"
+ "894159749247043678238750268753264909309649831534740397743600"
+ "139998210203084676369899478505461752324146318698089839450421"
+ "143076361782530689506566153604543149790375911800793483912288"
+ "188586309176946988353987684054352129570631591985578449323560"
+ "386626892598170269027020282959579435080091825791399174445592"
+ "26833433740466716699302196502685546875e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x1p-16444,
+ -0x1p-16444,
+ -0x8p-16448,
+ -0x8p-16448,
+ true,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448),
+ TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+ "470730542557532950096605214341062938740807795871021020805296"
+ "652950478448933048254960262113384713508225733871766897517853"
+ "837895708450339634932343848975116093410479690330290902886861"
+ "199931259216523277807574569082153073133673942958789577402321"
+ "393933101298533191266102118889630609532339508457854220031996"
+ "317935940718000325144008438048416150458546268408294693278282"
+ "948818382981756745231443707694395053270779125240469926867881"
+ "019850287125023579685557790983055974962881759919483752202903"
+ "689199564880305684635452065363595791988290536352100701716974"
+ "146329604439226626943340805268641901769971862776194876385604"
+ "059269084172123930049144599166605103175580232672032966645406"
+ "656863031434873551175363941825798425331906382524706572766485"
+ "232874542230564262609161782396887243896247009244068837251567"
+ "783223271286692480010679711347802408351619999199127493689411"
+ "300623337751847138939498426200450305845548565910009066524152"
+ "545480362818290224140170178363735317929685005697363930594593"
+ "881342895328789259362029119598601112899006188879876371854878"
+ "902571753767478028100558334716504784604592507791482451533133"
+ "513128606357440718182123637790769320922442349066328991687862"
+ "072550779316393139037201187579972933016227874898505255743233"
+ "300533498951938156636406532613846576145617323141684480726409"
+ "074184197224754542490884392813625365330881348799432844624838"
+ "960826144439157361917744290729073116318858191758821942010704"
+ "726536748514141391981088590968911224406479710632429529154589"
+ "293799132147906174349149006094094612827453365768213012516958"
+ "693057189940355112250629776318079573232513434098933115589372"
+ "428935891821270739299776803229999720720845111297142577993950"
+ "783716526325576426897121181953632299322177412313472666557946"
+ "026587137818658956285876183561334458426909806227578696972983"
+ "054578648540140777431341495495816167709600470194141141159275"
+ "548586447187051517332624446463129570157208744018317833998766"
+ "292676324122069807882266170905460107352347754465354279502046"
+ "825607840930640910087488682878186052982487934398794575125208"
+ "131434599031355068379234881462786244132403015573059216658125"
+ "100992278732459043154873457532866362865038072260302438341256"
+ "465144627211756104220773841311413109973101672893502315223943"
+ "131161953384837658368750910845308673019625511169535246418667"
+ "822192756475773031982522304934161885363133347824122722726808"
+ "458339668843622993626685401142719276703936351749165952313385"
+ "247253410412444111234661569689109707012146365225868127037807"
+ "653838169759426465847963786308715929383888075292817554540826"
+ "281340379356869541699838857230452874882475626566568389051842"
+ "269616942233880613753230478468266244820792868174047618834373"
+ "911783352591638681513579303490680611741310500871919788283761"
+ "473826205032029153949410495205647160664548204617663407545902"
+ "155255595959035495626212780995301367951250745142427183922194"
+ "679405686105598055836303373290577235698605118096647411642319"
+ "219474157243864921520422978127962037044537385134878691852739"
+ "978563080824265712270538180666161627113218201779779366124407"
+ "844574754753562338454876981852965553927903650323407245581099"
+ "158807518181769597517311013648265985455750620305808055101887"
+ "320313826045110985510052672007356612620966612560448241370561"
+ "199679677792733282710356886335229149926131229035514374201804"
+ "225447070710784729359320523404977483919175478103049697809100"
+ "609955967524096673011016762490361065647326710555615563378359"
+ "408954626110765311053180827944575772439918612038754867514863"
+ "217604919070168030521022438807226197480679192263641289752695"
+ "279367794662267414957708480356805124293407645094292709270568"
+ "454704291549032311245797185365876072558819037766647710690310"
+ "669384727884764603220129302332950334873072394721879741045233"
+ "391084791389282719581455185833551951893903144609338532918282"
+ "071417365794666174600590186688558973292265260457397284219723"
+ "118736526338195892522797003835806498724823327170646268765114"
+ "335047201804332131453475981952420330849091435859688615005340"
+ "662951243478815535510910054031985781353569592327342625691155"
+ "297753939420991863066846663288192966197121277244462515137195"
+ "342887549113968391968700872401047521725534791569882096021521"
+ "725739030856023532346309694644208054801875416636970616158970"
+ "521587368716636562878779650147005687012772946471436217221680"
+ "244104527691159700944328113538972913022260318566564643466194"
+ "762762807772321937689272738612051928757740541051011493615150"
+ "275299712275026278191137262599722341528351699547926563148579"
+ "945678256173476664846284964106409718181820427949855282782538"
+ "418620206551699936257338813616307747712660216941043590501407"
+ "704980849740902536932579576527206665027800420035787899091137"
+ "498285797710848848252835440631389386421149710576503050460098"
+ "225348880547453179874214337446508024003058237008669916793765"
+ "103830790970613932711932541885454647828573565454163547779034"
+ "696478261735426505076787833523027219489668014198674507463022"
+ "589310657355955884354584118602516953160415158848138916494891"
+ "482359394428713333626368035819136954032193064982447142548513"
+ "777798482352540211515117109331361325135068534382485905222012"
+ "689155196601835592087277572480712876900324312948680873379635"
+ "049766825511648515719101185883064389832362822347209928024358"
+ "316443434834701491039800443982197050828044087275939582794327"
+ "098500876914356235193809147621508354816413733354188380887001"
+ "911623409901345292980795015165229743643600614968493977578123"
+ "466095415615447864269417603852427781048383314979868134570808"
+ "915217919397946316940234061179348627230180807326753461268559"
+ "385959678786688421103134141790339174982532045466350837038525"
+ "183177847731101708972936115216192881538981857998354449098289"
+ "173408113131230974433096066603129145174088550345854388495636"
+ "765494379926460031453181542793269110787478232865475929357580"
+ "348192936196178107395850207543849907063319379969931169428718"
+ "329942347533981765560805872472322186708756306455763611238082"
+ "951450138207325773702247286660824416431038520521352370291078"
+ "718247251712503010649103184487159314175972977390771951004404"
+ "935285742659293676372796949610394059160197507860285966047861"
+ "411940542821283013449073170622058378826534472881876688512697"
+ "758815111198429044432164893190718808033606471387328883409622"
+ "920327667611981052185172613337770061634130425782297578896747"
+ "215274225504191258419704542303129850621901180024012018244583"
+ "859069664741628533451563101979900751568200425006085702090401"
+ "221537517047980048268055449980601076610965506150742174772246"
+ "118061736140257508229467892560527108358789784539076822640564"
+ "850851810352577863861819577512851607395927299014823941534626"
+ "348696657393457745078724366706324437838188311582720760585617"
+ "487635004508688532062666933131188059377591626964364639542322"
+ "054994079047698970924302742015839080613569097514938471468421"
+ "996493818271996291393146497945863918551953149000943761983830"
+ "636236545375480765488470416349046929644442714477859372568735"
+ "843708739015199069466751627920202433249482821065761826195203"
+ "859723026379941258427585166740391065737087970718105336581850"
+ "268003743156009120998264173899565279323585156937231413010764"
+ "716608523561569725709426913310091413578317885628039213932500"
+ "135284171861048461662744818955691362183779165069982032305970"
+ "876642081013358484182671863168168338174351197426412625098421"
+ "481239711997827391790388986589171883679226337788805245818923"
+ "874607498645601668109872286941958827402018143065273281785872"
+ "847384936953936746391717131732488209980499904305446724778559"
+ "203846472344227623989606643158012375642854007494547242775256"
+ "898117140062170585337487588594307260069257691479046720590527"
+ "237259474018798808190031749318500514291360716338072006978678"
+ "678209533184089369407377832511947183352849291708100854730341"
+ "450938156361786419525775154653957546143580362599388832564788"
+ "354103919236836698740026304968121883147777634511851850370958"
+ "884085902337976245656103068392811534994239396318567712305532"
+ "477169378421492493173704379367954605145484562415027095545060"
+ "831874739575572895083275461127704135960230120513850917554331"
+ "352277278650414100755269190224957237517573174092361876919730"
+ "465289835269438666544826003345857532325281423386809827947616"
+ "676425828491143428807224317894169834736598542769698312957949"
+ "605903203284128114992351808708487688511436903322773652124574"
+ "055471177142349271989998235771191022554548042468832219533624"
+ "049225313628185783780849179599378819912520555522211658107113"
+ "447678746843053930790961744210668515951907105384498734366645"
+ "249428031772015356705436411724477514133655840609854880392450"
+ "949605226182519804314027265530362531560532656953025288585499"
+ "182228921920121831359074541201044664224711170390199159133806"
+ "269332015718061873656943996928324527943031265119266878834003"
+ "362682519426029626295988425859770358488877080196120965282298"
+ "232237612230358616986168510604382051044429343285625121039569"
+ "326126486782398017268335279614177221030172599765237380415252"
+ "503716285229140380445599733136737846363243777324290551807506"
+ "541472429585746028822540006160866496164919640007935962267377"
+ "060789839526907505659662711614828949104249176417092401488510"
+ "615823548277477841813412329397443687705199567361868375111535"
+ "380877143498420444773617475831606309624504731127984157999557"
+ "818660940286424404275144312853627845343063342311866285268837"
+ "422960089441895882484245945054082617645214582938928610352277"
+ "410119555602965075325424443356593793852682899089314976629899"
+ "773835991388717888860719076570986705247088078593793511009142"
+ "474344996635349786568175384138024607561209403361748867467629"
+ "682257007702707626687955791367383934101209955804380644234879"
+ "805395123927491333463152240956446177043487579040223002287264"
+ "756843617701865806869707173187939918037456096349272671452872"
+ "922420893858994027251574788837911846161770227169407508741963"
+ "414729807676477574570702693444290823666440055726552795145348"
+ "219168459767427369197825367869095117877723957392541043867909"
+ "937470060997392012820142238132910823657536940367596076523833"
+ "377812701709657429614832107556695928504222183715979980013356"
+ "323996396963861087268039321030018015202061305161341454716371"
+ "377251261775727795597989586636757177645626856419109247702765"
+ "013583220037644023978372654055269485171726959848928885152966"
+ "097502777563956522973459672620583266843497935454194334506297"
+ "789118714656105011811810822332373521084368112861541360109122"
+ "200791235053695977711430654151451133236893607856092978814379"
+ "881439122150752237064864676736420913214731240701495311353237"
+ "983819572849112853697828591806699104099315306435617990388595"
+ "202795271374965360450205351235544991668088723423877385558163"
+ "617247959486687176509451394010328416791411019672026111081271"
+ "677642426015450739505038057545285042073081841299473107930734"
+ "353837688028012401932104019803872355878454440858434446609098"
+ "280206732652900093156204893287546907987495659518059539534709"
+ "328514027916546796559631836574970153581238433324096828364072"
+ "134400344200269161377205676209909802573933271591397018622517"
+ "645956348413413974664794017053790027535048049046885143930077"
+ "194991519470308057661102259067039984493186760977741752890345"
+ "473192220637893214146475540262942007429381634927003835133941"
+ "914676847385135317162915391223879714190592014303606413170523"
+ "042176230523286150385679951115593656516900591671184538913558"
+ "092816251191243853120415613844777512078954866614360029341206"
+ "576716710688850917256800353066853946058824831651339265256785"
+ "622460269729620332892007335442599404495662483134697945884683"
+ "759795006415186716458374920343394259217852886898131157533184"
+ "894159749247043678238750268753264909309649831534740397743600"
+ "139998210203084676369899478505461752324146318698089839450421"
+ "143076361782530689506566153604543149790375911800793483912288"
+ "188586309176946988353987684054352129570631591985578449323560"
+ "386626892598170269027020282959579435080091825791399174445592"
+ "2683343374046671669930219650268554687501e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x1p-16444,
+ -0x1p-16444,
+ -0x8p-16448,
+ -0x8p-16448,
+ false,
+ -0x1p-16444,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0xc.000000000004p-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448),
+ TEST ("-0x0.7p-149",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ true,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ true,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ true,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ true,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152),
+ TEST ("-0x0.7p-1074",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x1.cp-1076,
+ -0x1.cp-1076,
+ -0x1.cp-1076,
+ -0x1.cp-1076,
+ true,
+ -0x1.cp-1076,
+ -0x1.cp-1076,
+ -0x1.cp-1076,
+ -0x1.cp-1076,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x1.cp-1076,
+ -0x1.cp-1076,
+ -0x1.cp-1076,
+ -0x1.cp-1076),
+ TEST ("-0x0.7p-16445",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x3.8p-16448,
+ -0x3.8p-16448,
+ -0x3.8p-16448,
+ -0x3.8p-16448),
+ TEST ("-0x0.7p-16494",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16496,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0),
+ TEST ("0x1p-150",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152),
+ TEST ("0x1p-1075",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ true,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076),
+ TEST ("0x1p-16446",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ true,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448),
+ TEST ("0x1p-16495",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16496),
+ TEST ("-0x1p-150",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152),
+ TEST ("-0x1p-1075",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ true,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076),
+ TEST ("-0x1p-16446",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448),
+ TEST ("-0x1p-16495",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16496,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0),
+ TEST (".70064923216240853546186479164495807e-45",
+ false,
+ 0x0p+0,
+ 0x8p-152,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.0000000000004p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.0000000000000008p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.0000000000000008p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.00000000000000000000000002p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.0000000000000000000000000004p-152),
+ TEST ("7.0064923216240853546186479164495806564013097093825788587853"
+ "4141944895541342930300743319094181060791015624e-46",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x3.ffffffffffffep-152,
+ 0x4p-152,
+ 0x3.ffffffffffffep-152,
+ 0x4p-152,
+ false,
+ 0x3.fffffffffffffffcp-152,
+ 0x4p-152,
+ 0x3.fffffffffffffffcp-152,
+ 0x4p-152,
+ false,
+ 0x3.fffffffffffffffcp-152,
+ 0x4p-152,
+ 0x3.fffffffffffffffcp-152,
+ 0x4p-152,
+ false,
+ 0x3.ffffffffffffffffffffffffffp-152,
+ 0x4p-152,
+ 0x3.ffffffffffffffffffffffffffp-152,
+ 0x4p-152,
+ false,
+ 0x3.fffffffffffffffffffffffffffep-152,
+ 0x4p-152,
+ 0x3.fffffffffffffffffffffffffffep-152,
+ 0x4p-152),
+ TEST ("7.0064923216240853546186479164495806564013097093825788587853"
+ "4141944895541342930300743319094181060791015625e-46",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152),
+ TEST ("7.0064923216240853546186479164495806564013097093825788587853"
+ "4141944895541342930300743319094181060791015626e-46",
+ false,
+ 0x0p+0,
+ 0x8p-152,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.0000000000004p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.0000000000000008p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.0000000000000008p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.00000000000000000000000002p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.0000000000000000000000000004p-152),
+ TEST ("-7.006492321624085354618647916449580656401309709382578858785"
+ "34141944895541342930300743319094181060791015624e-46",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-152,
+ -0x4p-152,
+ -0x3.ffffffffffffep-152,
+ -0x3.ffffffffffffep-152,
+ false,
+ -0x4p-152,
+ -0x4p-152,
+ -0x3.fffffffffffffffcp-152,
+ -0x3.fffffffffffffffcp-152,
+ false,
+ -0x4p-152,
+ -0x4p-152,
+ -0x3.fffffffffffffffcp-152,
+ -0x3.fffffffffffffffcp-152,
+ false,
+ -0x4p-152,
+ -0x4p-152,
+ -0x3.ffffffffffffffffffffffffffp-152,
+ -0x3.ffffffffffffffffffffffffffp-152,
+ false,
+ -0x4p-152,
+ -0x4p-152,
+ -0x3.fffffffffffffffffffffffffffep-152,
+ -0x3.fffffffffffffffffffffffffffep-152),
+ TEST ("-7.006492321624085354618647916449580656401309709382578858785"
+ "34141944895541342930300743319094181060791015625e-46",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152),
+ TEST ("-7.006492321624085354618647916449580656401309709382578858785"
+ "34141944895541342930300743319094181060791015626e-46",
+ false,
+ -0x8p-152,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4.0000000000004p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ false,
+ -0x4.0000000000000008p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ false,
+ -0x4.0000000000000008p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ false,
+ -0x4.00000000000000000000000002p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ false,
+ -0x4.0000000000000000000000000004p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152),
+ TEST ("2.4703282292062327208828439643411068618252990130716238221279"
+ "284125033775363510437593264991818081799618989828234772285886"
+ "546332835517796989819938739800539093906315035659515570226392"
+ "290858392449105184435931802849936536152500319370457678249219"
+ "365623669863658480757001585769269903706311928279558551332927"
+ "834338409351978015531246597263579574622766465272827220056374"
+ "006485499977096599470454020828166226237857393450736339007967"
+ "761930577506740176324673600968951340535537458516661134223766"
+ "678604162159680461914467291840300530057530849048765391711386"
+ "591646239524912623653881879636239373280423891018672348497668"
+ "235089863388587925628302755995657524455507255189313690836254"
+ "779186948667994968324049705821028513185451396213837722826145"
+ "437693412532098591327667236328124e-324",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x1.fffffffffffffffep-1076,
+ 0x2p-1076,
+ 0x1.fffffffffffffffep-1076,
+ 0x2p-1076,
+ false,
+ 0x1.fffffffffffffffep-1076,
+ 0x2p-1076,
+ 0x1.fffffffffffffffep-1076,
+ 0x2p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x1.ffffffffffffffffffffffffffffp-1076,
+ 0x2p-1076,
+ 0x1.ffffffffffffffffffffffffffffp-1076,
+ 0x2p-1076),
+ TEST ("2.4703282292062327208828439643411068618252990130716238221279"
+ "284125033775363510437593264991818081799618989828234772285886"
+ "546332835517796989819938739800539093906315035659515570226392"
+ "290858392449105184435931802849936536152500319370457678249219"
+ "365623669863658480757001585769269903706311928279558551332927"
+ "834338409351978015531246597263579574622766465272827220056374"
+ "006485499977096599470454020828166226237857393450736339007967"
+ "761930577506740176324673600968951340535537458516661134223766"
+ "678604162159680461914467291840300530057530849048765391711386"
+ "591646239524912623653881879636239373280423891018672348497668"
+ "235089863388587925628302755995657524455507255189313690836254"
+ "779186948667994968324049705821028513185451396213837722826145"
+ "437693412532098591327667236328125e-324",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ true,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076),
+ TEST ("2.4703282292062327208828439643411068618252990130716238221279"
+ "284125033775363510437593264991818081799618989828234772285886"
+ "546332835517796989819938739800539093906315035659515570226392"
+ "290858392449105184435931802849936536152500319370457678249219"
+ "365623669863658480757001585769269903706311928279558551332927"
+ "834338409351978015531246597263579574622766465272827220056374"
+ "006485499977096599470454020828166226237857393450736339007967"
+ "761930577506740176324673600968951340535537458516661134223766"
+ "678604162159680461914467291840300530057530849048765391711386"
+ "591646239524912623653881879636239373280423891018672348497668"
+ "235089863388587925628302755995657524455507255189313690836254"
+ "779186948667994968324049705821028513185451396213837722826145"
+ "437693412532098591327667236328126e-324",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x4p-1076,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2.0000000000000004p-1076,
+ false,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2.0000000000000004p-1076,
+ false,
+ 0x0p+0,
+ 0x4p-1076,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2.0000000000000000000000000002p-1076),
+ TEST ("-2.470328229206232720882843964341106861825299013071623822127"
+ "928412503377536351043759326499181808179961898982823477228588"
+ "654633283551779698981993873980053909390631503565951557022639"
+ "229085839244910518443593180284993653615250031937045767824921"
+ "936562366986365848075700158576926990370631192827955855133292"
+ "783433840935197801553124659726357957462276646527282722005637"
+ "400648549997709659947045402082816622623785739345073633900796"
+ "776193057750674017632467360096895134053553745851666113422376"
+ "667860416215968046191446729184030053005753084904876539171138"
+ "659164623952491262365388187963623937328042389101867234849766"
+ "823508986338858792562830275599565752445550725518931369083625"
+ "477918694866799496832404970582102851318545139621383772282614"
+ "5437693412532098591327667236328124e-324",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x1.fffffffffffffffep-1076,
+ -0x1.fffffffffffffffep-1076,
+ false,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x1.fffffffffffffffep-1076,
+ -0x1.fffffffffffffffep-1076,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x1.ffffffffffffffffffffffffffffp-1076,
+ -0x1.ffffffffffffffffffffffffffffp-1076),
+ TEST ("-2.470328229206232720882843964341106861825299013071623822127"
+ "928412503377536351043759326499181808179961898982823477228588"
+ "654633283551779698981993873980053909390631503565951557022639"
+ "229085839244910518443593180284993653615250031937045767824921"
+ "936562366986365848075700158576926990370631192827955855133292"
+ "783433840935197801553124659726357957462276646527282722005637"
+ "400648549997709659947045402082816622623785739345073633900796"
+ "776193057750674017632467360096895134053553745851666113422376"
+ "667860416215968046191446729184030053005753084904876539171138"
+ "659164623952491262365388187963623937328042389101867234849766"
+ "823508986338858792562830275599565752445550725518931369083625"
+ "477918694866799496832404970582102851318545139621383772282614"
+ "5437693412532098591327667236328125e-324",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ true,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076),
+ TEST ("-2.470328229206232720882843964341106861825299013071623822127"
+ "928412503377536351043759326499181808179961898982823477228588"
+ "654633283551779698981993873980053909390631503565951557022639"
+ "229085839244910518443593180284993653615250031937045767824921"
+ "936562366986365848075700158576926990370631192827955855133292"
+ "783433840935197801553124659726357957462276646527282722005637"
+ "400648549997709659947045402082816622623785739345073633900796"
+ "776193057750674017632467360096895134053553745851666113422376"
+ "667860416215968046191446729184030053005753084904876539171138"
+ "659164623952491262365388187963623937328042389101867234849766"
+ "823508986338858792562830275599565752445550725518931369083625"
+ "477918694866799496832404970582102851318545139621383772282614"
+ "5437693412532098591327667236328126e-324",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x2.0000000000000004p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ false,
+ -0x2.0000000000000004p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ false,
+ -0x4p-1076,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x2.0000000000000000000000000002p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076),
+ TEST ("1.8225997659412373012642029668097099081995254078467816718604"
+ "902435141858443166988684047803543129136025986236736736017655"
+ "509834928163110160849867540377949045027419112905889658392846"
+ "126319028167798783107812829917053644701598967767636342956203"
+ "999770864055077592691915230273843577112246476529298591341071"
+ "313110337661777304220340396298768698441131694859514066773321"
+ "059786469060001083813361460161387168195154228027648977594276"
+ "496061276605855817438145692314650177569263750801566422892936"
+ "732834290416745265618525969943519916542939199731612507343012"
+ "297331882934352282118173551211985973294301787840335672389913"
+ "821098681464088756477802684228806339233239542587316254618680"
+ "197563613907079766830481997222017010585267442240109888818022"
+ "189543438116245170584546472752661417773021275082355242554950"
+ "776248474101880875363872607989624146320823364146896124171892"
+ "610744237622308266702265704492674694505399997330424978964704"
+ "335411125839490463131661420668167686151828553033363555080508"
+ "484934542727634080467233927879117726432283352324546435315312"
+ "937809651095964197873430398662003709663353962932921239516263"
+ "008572512558260093668527782388349282015308359304941505110445"
+ "043762021191469060607078792635897736408141163554429972292873"
+ "575169264387977130124003958599909776720759582995017519144111"
+ "001778329839793855454688442046155253818724410472281602421363"
+ "580613990749181808302947976045417884436271162664776148749463"
+ "202753814797191206392480969096910387729527305862739806702349"
+ "088455828380471306603628636563037414688265702108098430515297"
+ "645997107159687247830496686980315376091511219227376708389862"
+ "310190633134517040835432587726931910775044780329777051964574"
+ "763119639404235797665922677433332402402817037657141926646502"
+ "612388421085254756323737273178774331073924707711575555193153"
+ "421957126062196520952920611871114861423032687425262323243276"
+ "848595495133802591437804984986053892365334900647137137197585"
+ "161954823956838391108748154877098567190695813394392779995887"
+ "642254413740232692940887236351533691174492514884514265006822"
+ "752026136435469700291628942927286843274959781329315250417360"
+ "438115330104516894597449604875954147108010051910197388860417"
+ "003307595774863477182911525109554542883460240867674794470854"
+ "883815424039187014069246137704710366577005576311674384079810"
+ "437206511282792194562503036151028910065418370565117488062226"
+ "073975854919243439941741016447206284543777826080409075756028"
+ "194465562812076645422284670475730922346454505830553174377950"
+ "824178034708147037448871898963699023373821217419560423459358"
+ "846127232531421552826545954362386431279626917642725181802754"
+ "271134597856231805666129524101509582941585421888561296839474"
+ "232056474112935379177434928227554149402642893913492062781246"
+ "372611175305462271711931011635602039137701669573065960945871"
+ "579420683440097179831368317352157202215160682058878025153007"
+ "184185319863451652087375936651004559837502483808090613073982"
+ "264685620351993519454344577635257452328683726988824705474397"
+ "398247190812883071734743260426540123481791283782928972842466"
+ "595210269414219040901793935553872090377394005932597887081359"
+ "481915849178541128182923272843218513093012167744690818603663"
+ "862691727272565325057703378827553284852502067686026850339624"
+ "401046086817036618366842240024522042069888708534827471235203"
+ "998932259309110942367856287784097166420437430118381247339347"
+ "418156902369282431197735078016591613063918260343498992697002"
+ "033186558413655576703389208301203552157755701852051877927864"
+ "696515420369217703510602759815252574799728706795849558382877"
+ "392016396900560101736741462690753991602263974212137632508984"
+ "264559315540891383192361601189350414311358816980975697568561"
+ "515680971830107704152657284552920241862730125888825702301035"
+ "564615759615882010733764341109834449576907982406265803484111"
+ "303615971297609065271517286111839839646343815364461776394273"
+ "571391219315553915335300622295196577640884201524657614065743"
+ "729121754460652975075990012786021662416077757235487562550381"
+ "116824006014440438178253273174734436163638119532295383351135"
+ "543170811596051785036366846773285937845231974424475418970517"
+ "659179798069972876889488877627309887323737590814875050457317"
+ "809625163713227973229002908003491739085115971899606986738405"
+ "752463436186745107821032315480693516006251388789902053863235"
+ "071957895722121876262598833823352290042576488238120724072267"
+ "480348425637199003147760378463243043407534395221882144887315"
+ "875876025907739792297575795373506429192468470170038312050500"
+ "917665707583420927303790875332407805094505665159755210495266"
+ "485594187244922216154283213688032393939401426499517609275128"
+ "062067355172333120857796045387692492375534056470145301671359"
+ "016602832469675123108598588424022216759334733452626330303791"
+ "660952659036162827509451468771297954737165701921676834866994"
+ "084496268491510599580714458155026746676860790028899722645883"
+ "679435969902046442373108472951515492761911884847211825930115"
+ "654927539118088350255959445076757398298893380662248358210075"
+ "297702191186519614515280395341723177201383862827129721649638"
+ "274531314762377778754560119397123180107310216608157141828379"
+ "259328274508467371717057031104537750450228447941619684073375"
+ "630517322006118640290925241602376256334414376495602911265450"
+ "165889418372161719063670619610214632774542741157366426747861"
+ "054811449449004970132668146607323502760146957586465275981090"
+ "328336256381187450646030492071694516054712444513961269623339"
+ "705411366337817643269316717217432478812002049894979925260411"
+ "553651385384826214231392012841425936827944383266227115236029"
+ "717393064659821056467446870597828757433936024422511537561864"
+ "619865595955628070343780472634463916608440151554502790128417"
+ "277259492437005696576453717387309605129939526661181496994297"
+ "244693710437436581443653555343763817246961834486181294985455"
+ "884981266421533438177271809310897035958260776218253097858601"
+ "160643120653927024652834025146166356877731266566437231429061"
+ "099807825113272551869352908241073955695854354852545370793609"
+ "838167127357752579007490955536081388103461735071174567636929"
+ "060824172375010035497010614957197713919909924635906503348016"
+ "450952475530978921242656498701313530533991692867619886826204"
+ "706468476070943378163577235406861262755114909606255628375659"
+ "196050370661430148107216310635729360112021571291096278032076"
+ "401092225373270173950575377792566872113768085940991929655824"
+ "050914085013970861399015141010432835406337266746706727481946"
+ "196898882472095111505210339933002505227334750020285673634670"
+ "738458390159933494226851499935336922036551687169140582574153"
+ "726872453800858360764892975201757027862632615130256075468549"
+ "502839367841926212872731925042838691319757663382746471782087"
+ "828988857978192483595747889021081459460627705275735868618724"
+ "958783348362295106875556443770626864591972089881215465141073"
+ "516646930158996569747675806719463602045230325049794904894739"
+ "988312727573320971310488326486213061839843830003145873279435"
+ "454121817918269218294901387830156432148142381592864575229119"
+ "479029130050663564889172093067341444164942736885872753984012"
+ "865743421266470861425283889134636885790293235727017788606167"
+ "560012477186697069994213912998550931078617189790771376702549"
+ "055361745205232419031423044366971378594392952093464046441667"
+ "117613906203494872209149396518971207279263883566606774353236"
+ "255473603377861613942239543893894460581170658088042083661404"
+ "937465706659424639301296621963906278930754459296017486063079"
+ "582024995485338893699574289806529424673393810217577605952909"
+ "491283123179789154639057105774960699934999681018155749261864"
+ "012821574480758746632022143860041252142846691648490809250856"
+ "327057133540568617791625295314357533564192304930155735301757"
+ "457531580062662693966772497728335047637869054460240023262262"
+ "260698443946964564691259441706490611176164305693669515767804"
+ "836460521205954731752583848846525153811934541997962775215961"
+ "180346397456122329133421016560406277159258781706172834569862"
+ "946953007793254152187010227976038449980797987728559041018441"
+ "590564594738308310579014597893182017151615208050090318483536"
+ "106249131918576316944251537092347119867433735046169725181104"
+ "507590928834713669184230634083190791725243913641206256399101"
+ "550966117564795555149420011152858441084271411289366093158722"
+ "254752761637144762690747726313899449121995142565661043193165"
+ "353010677613760383307839362361625628371456344409245507081913"
+ "518237257141164239966660785903970075181826808229440731778746"
+ "830751045427285945936163931997929399708401851740705527023711"
+ "492262489476846435969872480702228386506357017948329114555484"
+ "164760105906717855684788039081591713778852802032849601308169"
+ "832017420608399347713424218434541771868442189843417628618330"
+ "607429739733739437863581804003482214082370567967330530446020"
+ "897773385726872912189813323094415093143437550397556262780011"
+ "208941731420098754319961419532567861629590267320403217607660"
+ "774125374101195389953895035347940170148097810952083736798564"
+ "420421622607993390894450932047257403433908665884124601384175"
+ "012387617430467934818665777122459487877479257747635172691688"
+ "471574765285820096075133353869554987216398800026453207557923"
+ "535966131756358352198875705382763163680830588056974671628368"
+ "719411827591592806044707764658145625683998557872894583705117"
+ "936257144994734815912058252772021032081682437093280526665192"
+ "728869800954748014250481042845426151143544474372887617562791"
+ "409866964806319608280819816846942058817381943129762034507591"
+ "367065185343216917751414811188645979508942996964383255432999"
+ "246119971295726296202396921903289017490293595312645036697141"
+ "581149988784499288560584613793415358537364677872496224892098"
+ "940856692342358755626519304557946447004033186014602147449599"
+ "351317079758304444877174136521487256811625263467410007624215"
+ "856145392339552689565690577293133060124853654497575571509576"
+ "408069646196646757505249296126372820539234090564691695806544"
+ "715766025588258581902342311480969412221466852421842650484494"
+ "063894865891424563992751226230317059592413191308470146226366"
+ "458233536657973376067140793776369412191789801225320255079444"
+ "592709005698858098716107025188986428347407279053266600044521"
+ "079987989879536957560131070100060050673537683871138182387904"
+ "590837539252425985326631955455857258818756188063697492342550"
+ "045277400125480079927908846850898283905756532829762950509886"
+ "991675925213188409911532242068610889478326451513981115020992"
+ "630395715520350039372702741107911736947893709538471200363740"
+ "669304116845653259038102180504837110789645359520309929381266"
+ "271463740502507456882882255788069710715770802338317704510793"
+ "279398576163709512326095306022330346997717688118726634628650"
+ "675984237916551201500684504118483305560295744746257951860545"
+ "390826531622290588364837980034428055971370065573420370270905"
+ "592141420051502465016793525150950140243606137664910359769114"
+ "512792293426708006440346732679574519594848136194781488696994"
+ "267355775509666977187349644291823026624985531726865131782364"
+ "428380093055155988532106121916567178604128111080322761213573"
+ "781334480667563871257352254033032675246444238637990062075058"
+ "819854494711379915549313390179300091783493496822950479766923"
+ "983305064901026858870340863556799948310622536592472509634484"
+ "910640735459644047154918467543140024764605449756679450446473"
+ "048922824617117723876384637412932380635306714345354710568410"
+ "140587435077620501285599837051978855056335305570615129711860"
+ "309387503970812843734718712815925040263182888714533431137355"
+ "255722368962836390856001176889513153529416105504464217522618"
+ "741534232432067776306691118141998014985541610448993152948945"
+ "865983354717289054861249734477980864059509622993770525110616"
+ "313865830823478927462500895844216364365499438449134659145333"
+ "799994034010282254566331595018205841080487728993632798168070"
+ "476921205941768965021887178681810499301253039335978279707627"
+ "295287697256489961179958946847840431902105306618594831078534"
+ "622089641993900896756734276531931450266972752637997248151974"
+ "2277811246822238899767398834228515624e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x4p-16448,
+ 0x0p+0,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x3.fffffffffffcp-16448,
+ 0x4p-16448,
+ 0x3.fffffffffffcp-16448,
+ 0x4p-16448),
+ TEST ("1.8225997659412373012642029668097099081995254078467816718604"
+ "902435141858443166988684047803543129136025986236736736017655"
+ "509834928163110160849867540377949045027419112905889658392846"
+ "126319028167798783107812829917053644701598967767636342956203"
+ "999770864055077592691915230273843577112246476529298591341071"
+ "313110337661777304220340396298768698441131694859514066773321"
+ "059786469060001083813361460161387168195154228027648977594276"
+ "496061276605855817438145692314650177569263750801566422892936"
+ "732834290416745265618525969943519916542939199731612507343012"
+ "297331882934352282118173551211985973294301787840335672389913"
+ "821098681464088756477802684228806339233239542587316254618680"
+ "197563613907079766830481997222017010585267442240109888818022"
+ "189543438116245170584546472752661417773021275082355242554950"
+ "776248474101880875363872607989624146320823364146896124171892"
+ "610744237622308266702265704492674694505399997330424978964704"
+ "335411125839490463131661420668167686151828553033363555080508"
+ "484934542727634080467233927879117726432283352324546435315312"
+ "937809651095964197873430398662003709663353962932921239516263"
+ "008572512558260093668527782388349282015308359304941505110445"
+ "043762021191469060607078792635897736408141163554429972292873"
+ "575169264387977130124003958599909776720759582995017519144111"
+ "001778329839793855454688442046155253818724410472281602421363"
+ "580613990749181808302947976045417884436271162664776148749463"
+ "202753814797191206392480969096910387729527305862739806702349"
+ "088455828380471306603628636563037414688265702108098430515297"
+ "645997107159687247830496686980315376091511219227376708389862"
+ "310190633134517040835432587726931910775044780329777051964574"
+ "763119639404235797665922677433332402402817037657141926646502"
+ "612388421085254756323737273178774331073924707711575555193153"
+ "421957126062196520952920611871114861423032687425262323243276"
+ "848595495133802591437804984986053892365334900647137137197585"
+ "161954823956838391108748154877098567190695813394392779995887"
+ "642254413740232692940887236351533691174492514884514265006822"
+ "752026136435469700291628942927286843274959781329315250417360"
+ "438115330104516894597449604875954147108010051910197388860417"
+ "003307595774863477182911525109554542883460240867674794470854"
+ "883815424039187014069246137704710366577005576311674384079810"
+ "437206511282792194562503036151028910065418370565117488062226"
+ "073975854919243439941741016447206284543777826080409075756028"
+ "194465562812076645422284670475730922346454505830553174377950"
+ "824178034708147037448871898963699023373821217419560423459358"
+ "846127232531421552826545954362386431279626917642725181802754"
+ "271134597856231805666129524101509582941585421888561296839474"
+ "232056474112935379177434928227554149402642893913492062781246"
+ "372611175305462271711931011635602039137701669573065960945871"
+ "579420683440097179831368317352157202215160682058878025153007"
+ "184185319863451652087375936651004559837502483808090613073982"
+ "264685620351993519454344577635257452328683726988824705474397"
+ "398247190812883071734743260426540123481791283782928972842466"
+ "595210269414219040901793935553872090377394005932597887081359"
+ "481915849178541128182923272843218513093012167744690818603663"
+ "862691727272565325057703378827553284852502067686026850339624"
+ "401046086817036618366842240024522042069888708534827471235203"
+ "998932259309110942367856287784097166420437430118381247339347"
+ "418156902369282431197735078016591613063918260343498992697002"
+ "033186558413655576703389208301203552157755701852051877927864"
+ "696515420369217703510602759815252574799728706795849558382877"
+ "392016396900560101736741462690753991602263974212137632508984"
+ "264559315540891383192361601189350414311358816980975697568561"
+ "515680971830107704152657284552920241862730125888825702301035"
+ "564615759615882010733764341109834449576907982406265803484111"
+ "303615971297609065271517286111839839646343815364461776394273"
+ "571391219315553915335300622295196577640884201524657614065743"
+ "729121754460652975075990012786021662416077757235487562550381"
+ "116824006014440438178253273174734436163638119532295383351135"
+ "543170811596051785036366846773285937845231974424475418970517"
+ "659179798069972876889488877627309887323737590814875050457317"
+ "809625163713227973229002908003491739085115971899606986738405"
+ "752463436186745107821032315480693516006251388789902053863235"
+ "071957895722121876262598833823352290042576488238120724072267"
+ "480348425637199003147760378463243043407534395221882144887315"
+ "875876025907739792297575795373506429192468470170038312050500"
+ "917665707583420927303790875332407805094505665159755210495266"
+ "485594187244922216154283213688032393939401426499517609275128"
+ "062067355172333120857796045387692492375534056470145301671359"
+ "016602832469675123108598588424022216759334733452626330303791"
+ "660952659036162827509451468771297954737165701921676834866994"
+ "084496268491510599580714458155026746676860790028899722645883"
+ "679435969902046442373108472951515492761911884847211825930115"
+ "654927539118088350255959445076757398298893380662248358210075"
+ "297702191186519614515280395341723177201383862827129721649638"
+ "274531314762377778754560119397123180107310216608157141828379"
+ "259328274508467371717057031104537750450228447941619684073375"
+ "630517322006118640290925241602376256334414376495602911265450"
+ "165889418372161719063670619610214632774542741157366426747861"
+ "054811449449004970132668146607323502760146957586465275981090"
+ "328336256381187450646030492071694516054712444513961269623339"
+ "705411366337817643269316717217432478812002049894979925260411"
+ "553651385384826214231392012841425936827944383266227115236029"
+ "717393064659821056467446870597828757433936024422511537561864"
+ "619865595955628070343780472634463916608440151554502790128417"
+ "277259492437005696576453717387309605129939526661181496994297"
+ "244693710437436581443653555343763817246961834486181294985455"
+ "884981266421533438177271809310897035958260776218253097858601"
+ "160643120653927024652834025146166356877731266566437231429061"
+ "099807825113272551869352908241073955695854354852545370793609"
+ "838167127357752579007490955536081388103461735071174567636929"
+ "060824172375010035497010614957197713919909924635906503348016"
+ "450952475530978921242656498701313530533991692867619886826204"
+ "706468476070943378163577235406861262755114909606255628375659"
+ "196050370661430148107216310635729360112021571291096278032076"
+ "401092225373270173950575377792566872113768085940991929655824"
+ "050914085013970861399015141010432835406337266746706727481946"
+ "196898882472095111505210339933002505227334750020285673634670"
+ "738458390159933494226851499935336922036551687169140582574153"
+ "726872453800858360764892975201757027862632615130256075468549"
+ "502839367841926212872731925042838691319757663382746471782087"
+ "828988857978192483595747889021081459460627705275735868618724"
+ "958783348362295106875556443770626864591972089881215465141073"
+ "516646930158996569747675806719463602045230325049794904894739"
+ "988312727573320971310488326486213061839843830003145873279435"
+ "454121817918269218294901387830156432148142381592864575229119"
+ "479029130050663564889172093067341444164942736885872753984012"
+ "865743421266470861425283889134636885790293235727017788606167"
+ "560012477186697069994213912998550931078617189790771376702549"
+ "055361745205232419031423044366971378594392952093464046441667"
+ "117613906203494872209149396518971207279263883566606774353236"
+ "255473603377861613942239543893894460581170658088042083661404"
+ "937465706659424639301296621963906278930754459296017486063079"
+ "582024995485338893699574289806529424673393810217577605952909"
+ "491283123179789154639057105774960699934999681018155749261864"
+ "012821574480758746632022143860041252142846691648490809250856"
+ "327057133540568617791625295314357533564192304930155735301757"
+ "457531580062662693966772497728335047637869054460240023262262"
+ "260698443946964564691259441706490611176164305693669515767804"
+ "836460521205954731752583848846525153811934541997962775215961"
+ "180346397456122329133421016560406277159258781706172834569862"
+ "946953007793254152187010227976038449980797987728559041018441"
+ "590564594738308310579014597893182017151615208050090318483536"
+ "106249131918576316944251537092347119867433735046169725181104"
+ "507590928834713669184230634083190791725243913641206256399101"
+ "550966117564795555149420011152858441084271411289366093158722"
+ "254752761637144762690747726313899449121995142565661043193165"
+ "353010677613760383307839362361625628371456344409245507081913"
+ "518237257141164239966660785903970075181826808229440731778746"
+ "830751045427285945936163931997929399708401851740705527023711"
+ "492262489476846435969872480702228386506357017948329114555484"
+ "164760105906717855684788039081591713778852802032849601308169"
+ "832017420608399347713424218434541771868442189843417628618330"
+ "607429739733739437863581804003482214082370567967330530446020"
+ "897773385726872912189813323094415093143437550397556262780011"
+ "208941731420098754319961419532567861629590267320403217607660"
+ "774125374101195389953895035347940170148097810952083736798564"
+ "420421622607993390894450932047257403433908665884124601384175"
+ "012387617430467934818665777122459487877479257747635172691688"
+ "471574765285820096075133353869554987216398800026453207557923"
+ "535966131756358352198875705382763163680830588056974671628368"
+ "719411827591592806044707764658145625683998557872894583705117"
+ "936257144994734815912058252772021032081682437093280526665192"
+ "728869800954748014250481042845426151143544474372887617562791"
+ "409866964806319608280819816846942058817381943129762034507591"
+ "367065185343216917751414811188645979508942996964383255432999"
+ "246119971295726296202396921903289017490293595312645036697141"
+ "581149988784499288560584613793415358537364677872496224892098"
+ "940856692342358755626519304557946447004033186014602147449599"
+ "351317079758304444877174136521487256811625263467410007624215"
+ "856145392339552689565690577293133060124853654497575571509576"
+ "408069646196646757505249296126372820539234090564691695806544"
+ "715766025588258581902342311480969412221466852421842650484494"
+ "063894865891424563992751226230317059592413191308470146226366"
+ "458233536657973376067140793776369412191789801225320255079444"
+ "592709005698858098716107025188986428347407279053266600044521"
+ "079987989879536957560131070100060050673537683871138182387904"
+ "590837539252425985326631955455857258818756188063697492342550"
+ "045277400125480079927908846850898283905756532829762950509886"
+ "991675925213188409911532242068610889478326451513981115020992"
+ "630395715520350039372702741107911736947893709538471200363740"
+ "669304116845653259038102180504837110789645359520309929381266"
+ "271463740502507456882882255788069710715770802338317704510793"
+ "279398576163709512326095306022330346997717688118726634628650"
+ "675984237916551201500684504118483305560295744746257951860545"
+ "390826531622290588364837980034428055971370065573420370270905"
+ "592141420051502465016793525150950140243606137664910359769114"
+ "512792293426708006440346732679574519594848136194781488696994"
+ "267355775509666977187349644291823026624985531726865131782364"
+ "428380093055155988532106121916567178604128111080322761213573"
+ "781334480667563871257352254033032675246444238637990062075058"
+ "819854494711379915549313390179300091783493496822950479766923"
+ "983305064901026858870340863556799948310622536592472509634484"
+ "910640735459644047154918467543140024764605449756679450446473"
+ "048922824617117723876384637412932380635306714345354710568410"
+ "140587435077620501285599837051978855056335305570615129711860"
+ "309387503970812843734718712815925040263182888714533431137355"
+ "255722368962836390856001176889513153529416105504464217522618"
+ "741534232432067776306691118141998014985541610448993152948945"
+ "865983354717289054861249734477980864059509622993770525110616"
+ "313865830823478927462500895844216364365499438449134659145333"
+ "799994034010282254566331595018205841080487728993632798168070"
+ "476921205941768965021887178681810499301253039335978279707627"
+ "295287697256489961179958946847840431902105306618594831078534"
+ "622089641993900896756734276531931450266972752637997248151974"
+ "2277811246822238899767398834228515625e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ true,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448),
+ TEST ("1.8225997659412373012642029668097099081995254078467816718604"
+ "902435141858443166988684047803543129136025986236736736017655"
+ "509834928163110160849867540377949045027419112905889658392846"
+ "126319028167798783107812829917053644701598967767636342956203"
+ "999770864055077592691915230273843577112246476529298591341071"
+ "313110337661777304220340396298768698441131694859514066773321"
+ "059786469060001083813361460161387168195154228027648977594276"
+ "496061276605855817438145692314650177569263750801566422892936"
+ "732834290416745265618525969943519916542939199731612507343012"
+ "297331882934352282118173551211985973294301787840335672389913"
+ "821098681464088756477802684228806339233239542587316254618680"
+ "197563613907079766830481997222017010585267442240109888818022"
+ "189543438116245170584546472752661417773021275082355242554950"
+ "776248474101880875363872607989624146320823364146896124171892"
+ "610744237622308266702265704492674694505399997330424978964704"
+ "335411125839490463131661420668167686151828553033363555080508"
+ "484934542727634080467233927879117726432283352324546435315312"
+ "937809651095964197873430398662003709663353962932921239516263"
+ "008572512558260093668527782388349282015308359304941505110445"
+ "043762021191469060607078792635897736408141163554429972292873"
+ "575169264387977130124003958599909776720759582995017519144111"
+ "001778329839793855454688442046155253818724410472281602421363"
+ "580613990749181808302947976045417884436271162664776148749463"
+ "202753814797191206392480969096910387729527305862739806702349"
+ "088455828380471306603628636563037414688265702108098430515297"
+ "645997107159687247830496686980315376091511219227376708389862"
+ "310190633134517040835432587726931910775044780329777051964574"
+ "763119639404235797665922677433332402402817037657141926646502"
+ "612388421085254756323737273178774331073924707711575555193153"
+ "421957126062196520952920611871114861423032687425262323243276"
+ "848595495133802591437804984986053892365334900647137137197585"
+ "161954823956838391108748154877098567190695813394392779995887"
+ "642254413740232692940887236351533691174492514884514265006822"
+ "752026136435469700291628942927286843274959781329315250417360"
+ "438115330104516894597449604875954147108010051910197388860417"
+ "003307595774863477182911525109554542883460240867674794470854"
+ "883815424039187014069246137704710366577005576311674384079810"
+ "437206511282792194562503036151028910065418370565117488062226"
+ "073975854919243439941741016447206284543777826080409075756028"
+ "194465562812076645422284670475730922346454505830553174377950"
+ "824178034708147037448871898963699023373821217419560423459358"
+ "846127232531421552826545954362386431279626917642725181802754"
+ "271134597856231805666129524101509582941585421888561296839474"
+ "232056474112935379177434928227554149402642893913492062781246"
+ "372611175305462271711931011635602039137701669573065960945871"
+ "579420683440097179831368317352157202215160682058878025153007"
+ "184185319863451652087375936651004559837502483808090613073982"
+ "264685620351993519454344577635257452328683726988824705474397"
+ "398247190812883071734743260426540123481791283782928972842466"
+ "595210269414219040901793935553872090377394005932597887081359"
+ "481915849178541128182923272843218513093012167744690818603663"
+ "862691727272565325057703378827553284852502067686026850339624"
+ "401046086817036618366842240024522042069888708534827471235203"
+ "998932259309110942367856287784097166420437430118381247339347"
+ "418156902369282431197735078016591613063918260343498992697002"
+ "033186558413655576703389208301203552157755701852051877927864"
+ "696515420369217703510602759815252574799728706795849558382877"
+ "392016396900560101736741462690753991602263974212137632508984"
+ "264559315540891383192361601189350414311358816980975697568561"
+ "515680971830107704152657284552920241862730125888825702301035"
+ "564615759615882010733764341109834449576907982406265803484111"
+ "303615971297609065271517286111839839646343815364461776394273"
+ "571391219315553915335300622295196577640884201524657614065743"
+ "729121754460652975075990012786021662416077757235487562550381"
+ "116824006014440438178253273174734436163638119532295383351135"
+ "543170811596051785036366846773285937845231974424475418970517"
+ "659179798069972876889488877627309887323737590814875050457317"
+ "809625163713227973229002908003491739085115971899606986738405"
+ "752463436186745107821032315480693516006251388789902053863235"
+ "071957895722121876262598833823352290042576488238120724072267"
+ "480348425637199003147760378463243043407534395221882144887315"
+ "875876025907739792297575795373506429192468470170038312050500"
+ "917665707583420927303790875332407805094505665159755210495266"
+ "485594187244922216154283213688032393939401426499517609275128"
+ "062067355172333120857796045387692492375534056470145301671359"
+ "016602832469675123108598588424022216759334733452626330303791"
+ "660952659036162827509451468771297954737165701921676834866994"
+ "084496268491510599580714458155026746676860790028899722645883"
+ "679435969902046442373108472951515492761911884847211825930115"
+ "654927539118088350255959445076757398298893380662248358210075"
+ "297702191186519614515280395341723177201383862827129721649638"
+ "274531314762377778754560119397123180107310216608157141828379"
+ "259328274508467371717057031104537750450228447941619684073375"
+ "630517322006118640290925241602376256334414376495602911265450"
+ "165889418372161719063670619610214632774542741157366426747861"
+ "054811449449004970132668146607323502760146957586465275981090"
+ "328336256381187450646030492071694516054712444513961269623339"
+ "705411366337817643269316717217432478812002049894979925260411"
+ "553651385384826214231392012841425936827944383266227115236029"
+ "717393064659821056467446870597828757433936024422511537561864"
+ "619865595955628070343780472634463916608440151554502790128417"
+ "277259492437005696576453717387309605129939526661181496994297"
+ "244693710437436581443653555343763817246961834486181294985455"
+ "884981266421533438177271809310897035958260776218253097858601"
+ "160643120653927024652834025146166356877731266566437231429061"
+ "099807825113272551869352908241073955695854354852545370793609"
+ "838167127357752579007490955536081388103461735071174567636929"
+ "060824172375010035497010614957197713919909924635906503348016"
+ "450952475530978921242656498701313530533991692867619886826204"
+ "706468476070943378163577235406861262755114909606255628375659"
+ "196050370661430148107216310635729360112021571291096278032076"
+ "401092225373270173950575377792566872113768085940991929655824"
+ "050914085013970861399015141010432835406337266746706727481946"
+ "196898882472095111505210339933002505227334750020285673634670"
+ "738458390159933494226851499935336922036551687169140582574153"
+ "726872453800858360764892975201757027862632615130256075468549"
+ "502839367841926212872731925042838691319757663382746471782087"
+ "828988857978192483595747889021081459460627705275735868618724"
+ "958783348362295106875556443770626864591972089881215465141073"
+ "516646930158996569747675806719463602045230325049794904894739"
+ "988312727573320971310488326486213061839843830003145873279435"
+ "454121817918269218294901387830156432148142381592864575229119"
+ "479029130050663564889172093067341444164942736885872753984012"
+ "865743421266470861425283889134636885790293235727017788606167"
+ "560012477186697069994213912998550931078617189790771376702549"
+ "055361745205232419031423044366971378594392952093464046441667"
+ "117613906203494872209149396518971207279263883566606774353236"
+ "255473603377861613942239543893894460581170658088042083661404"
+ "937465706659424639301296621963906278930754459296017486063079"
+ "582024995485338893699574289806529424673393810217577605952909"
+ "491283123179789154639057105774960699934999681018155749261864"
+ "012821574480758746632022143860041252142846691648490809250856"
+ "327057133540568617791625295314357533564192304930155735301757"
+ "457531580062662693966772497728335047637869054460240023262262"
+ "260698443946964564691259441706490611176164305693669515767804"
+ "836460521205954731752583848846525153811934541997962775215961"
+ "180346397456122329133421016560406277159258781706172834569862"
+ "946953007793254152187010227976038449980797987728559041018441"
+ "590564594738308310579014597893182017151615208050090318483536"
+ "106249131918576316944251537092347119867433735046169725181104"
+ "507590928834713669184230634083190791725243913641206256399101"
+ "550966117564795555149420011152858441084271411289366093158722"
+ "254752761637144762690747726313899449121995142565661043193165"
+ "353010677613760383307839362361625628371456344409245507081913"
+ "518237257141164239966660785903970075181826808229440731778746"
+ "830751045427285945936163931997929399708401851740705527023711"
+ "492262489476846435969872480702228386506357017948329114555484"
+ "164760105906717855684788039081591713778852802032849601308169"
+ "832017420608399347713424218434541771868442189843417628618330"
+ "607429739733739437863581804003482214082370567967330530446020"
+ "897773385726872912189813323094415093143437550397556262780011"
+ "208941731420098754319961419532567861629590267320403217607660"
+ "774125374101195389953895035347940170148097810952083736798564"
+ "420421622607993390894450932047257403433908665884124601384175"
+ "012387617430467934818665777122459487877479257747635172691688"
+ "471574765285820096075133353869554987216398800026453207557923"
+ "535966131756358352198875705382763163680830588056974671628368"
+ "719411827591592806044707764658145625683998557872894583705117"
+ "936257144994734815912058252772021032081682437093280526665192"
+ "728869800954748014250481042845426151143544474372887617562791"
+ "409866964806319608280819816846942058817381943129762034507591"
+ "367065185343216917751414811188645979508942996964383255432999"
+ "246119971295726296202396921903289017490293595312645036697141"
+ "581149988784499288560584613793415358537364677872496224892098"
+ "940856692342358755626519304557946447004033186014602147449599"
+ "351317079758304444877174136521487256811625263467410007624215"
+ "856145392339552689565690577293133060124853654497575571509576"
+ "408069646196646757505249296126372820539234090564691695806544"
+ "715766025588258581902342311480969412221466852421842650484494"
+ "063894865891424563992751226230317059592413191308470146226366"
+ "458233536657973376067140793776369412191789801225320255079444"
+ "592709005698858098716107025188986428347407279053266600044521"
+ "079987989879536957560131070100060050673537683871138182387904"
+ "590837539252425985326631955455857258818756188063697492342550"
+ "045277400125480079927908846850898283905756532829762950509886"
+ "991675925213188409911532242068610889478326451513981115020992"
+ "630395715520350039372702741107911736947893709538471200363740"
+ "669304116845653259038102180504837110789645359520309929381266"
+ "271463740502507456882882255788069710715770802338317704510793"
+ "279398576163709512326095306022330346997717688118726634628650"
+ "675984237916551201500684504118483305560295744746257951860545"
+ "390826531622290588364837980034428055971370065573420370270905"
+ "592141420051502465016793525150950140243606137664910359769114"
+ "512792293426708006440346732679574519594848136194781488696994"
+ "267355775509666977187349644291823026624985531726865131782364"
+ "428380093055155988532106121916567178604128111080322761213573"
+ "781334480667563871257352254033032675246444238637990062075058"
+ "819854494711379915549313390179300091783493496822950479766923"
+ "983305064901026858870340863556799948310622536592472509634484"
+ "910640735459644047154918467543140024764605449756679450446473"
+ "048922824617117723876384637412932380635306714345354710568410"
+ "140587435077620501285599837051978855056335305570615129711860"
+ "309387503970812843734718712815925040263182888714533431137355"
+ "255722368962836390856001176889513153529416105504464217522618"
+ "741534232432067776306691118141998014985541610448993152948945"
+ "865983354717289054861249734477980864059509622993770525110616"
+ "313865830823478927462500895844216364365499438449134659145333"
+ "799994034010282254566331595018205841080487728993632798168070"
+ "476921205941768965021887178681810499301253039335978279707627"
+ "295287697256489961179958946847840431902105306618594831078534"
+ "622089641993900896756734276531931450266972752637997248151974"
+ "2277811246822238899767398834228515626e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x8p-16448,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4.000000000004p-16448),
+ TEST ("-1.822599765941237301264202966809709908199525407846781671860"
+ "490243514185844316698868404780354312913602598623673673601765"
+ "550983492816311016084986754037794904502741911290588965839284"
+ "612631902816779878310781282991705364470159896776763634295620"
+ "399977086405507759269191523027384357711224647652929859134107"
+ "131311033766177730422034039629876869844113169485951406677332"
+ "105978646906000108381336146016138716819515422802764897759427"
+ "649606127660585581743814569231465017756926375080156642289293"
+ "673283429041674526561852596994351991654293919973161250734301"
+ "229733188293435228211817355121198597329430178784033567238991"
+ "382109868146408875647780268422880633923323954258731625461868"
+ "019756361390707976683048199722201701058526744224010988881802"
+ "218954343811624517058454647275266141777302127508235524255495"
+ "077624847410188087536387260798962414632082336414689612417189"
+ "261074423762230826670226570449267469450539999733042497896470"
+ "433541112583949046313166142066816768615182855303336355508050"
+ "848493454272763408046723392787911772643228335232454643531531"
+ "293780965109596419787343039866200370966335396293292123951626"
+ "300857251255826009366852778238834928201530835930494150511044"
+ "504376202119146906060707879263589773640814116355442997229287"
+ "357516926438797713012400395859990977672075958299501751914411"
+ "100177832983979385545468844204615525381872441047228160242136"
+ "358061399074918180830294797604541788443627116266477614874946"
+ "320275381479719120639248096909691038772952730586273980670234"
+ "908845582838047130660362863656303741468826570210809843051529"
+ "764599710715968724783049668698031537609151121922737670838986"
+ "231019063313451704083543258772693191077504478032977705196457"
+ "476311963940423579766592267743333240240281703765714192664650"
+ "261238842108525475632373727317877433107392470771157555519315"
+ "342195712606219652095292061187111486142303268742526232324327"
+ "684859549513380259143780498498605389236533490064713713719758"
+ "516195482395683839110874815487709856719069581339439277999588"
+ "764225441374023269294088723635153369117449251488451426500682"
+ "275202613643546970029162894292728684327495978132931525041736"
+ "043811533010451689459744960487595414710801005191019738886041"
+ "700330759577486347718291152510955454288346024086767479447085"
+ "488381542403918701406924613770471036657700557631167438407981"
+ "043720651128279219456250303615102891006541837056511748806222"
+ "607397585491924343994174101644720628454377782608040907575602"
+ "819446556281207664542228467047573092234645450583055317437795"
+ "082417803470814703744887189896369902337382121741956042345935"
+ "884612723253142155282654595436238643127962691764272518180275"
+ "427113459785623180566612952410150958294158542188856129683947"
+ "423205647411293537917743492822755414940264289391349206278124"
+ "637261117530546227171193101163560203913770166957306596094587"
+ "157942068344009717983136831735215720221516068205887802515300"
+ "718418531986345165208737593665100455983750248380809061307398"
+ "226468562035199351945434457763525745232868372698882470547439"
+ "739824719081288307173474326042654012348179128378292897284246"
+ "659521026941421904090179393555387209037739400593259788708135"
+ "948191584917854112818292327284321851309301216774469081860366"
+ "386269172727256532505770337882755328485250206768602685033962"
+ "440104608681703661836684224002452204206988870853482747123520"
+ "399893225930911094236785628778409716642043743011838124733934"
+ "741815690236928243119773507801659161306391826034349899269700"
+ "203318655841365557670338920830120355215775570185205187792786"
+ "469651542036921770351060275981525257479972870679584955838287"
+ "739201639690056010173674146269075399160226397421213763250898"
+ "426455931554089138319236160118935041431135881698097569756856"
+ "151568097183010770415265728455292024186273012588882570230103"
+ "556461575961588201073376434110983444957690798240626580348411"
+ "130361597129760906527151728611183983964634381536446177639427"
+ "357139121931555391533530062229519657764088420152465761406574"
+ "372912175446065297507599001278602166241607775723548756255038"
+ "111682400601444043817825327317473443616363811953229538335113"
+ "554317081159605178503636684677328593784523197442447541897051"
+ "765917979806997287688948887762730988732373759081487505045731"
+ "780962516371322797322900290800349173908511597189960698673840"
+ "575246343618674510782103231548069351600625138878990205386323"
+ "507195789572212187626259883382335229004257648823812072407226"
+ "748034842563719900314776037846324304340753439522188214488731"
+ "587587602590773979229757579537350642919246847017003831205050"
+ "091766570758342092730379087533240780509450566515975521049526"
+ "648559418724492221615428321368803239393940142649951760927512"
+ "806206735517233312085779604538769249237553405647014530167135"
+ "901660283246967512310859858842402221675933473345262633030379"
+ "166095265903616282750945146877129795473716570192167683486699"
+ "408449626849151059958071445815502674667686079002889972264588"
+ "367943596990204644237310847295151549276191188484721182593011"
+ "565492753911808835025595944507675739829889338066224835821007"
+ "529770219118651961451528039534172317720138386282712972164963"
+ "827453131476237777875456011939712318010731021660815714182837"
+ "925932827450846737171705703110453775045022844794161968407337"
+ "563051732200611864029092524160237625633441437649560291126545"
+ "016588941837216171906367061961021463277454274115736642674786"
+ "105481144944900497013266814660732350276014695758646527598109"
+ "032833625638118745064603049207169451605471244451396126962333"
+ "970541136633781764326931671721743247881200204989497992526041"
+ "155365138538482621423139201284142593682794438326622711523602"
+ "971739306465982105646744687059782875743393602442251153756186"
+ "461986559595562807034378047263446391660844015155450279012841"
+ "727725949243700569657645371738730960512993952666118149699429"
+ "724469371043743658144365355534376381724696183448618129498545"
+ "588498126642153343817727180931089703595826077621825309785860"
+ "116064312065392702465283402514616635687773126656643723142906"
+ "109980782511327255186935290824107395569585435485254537079360"
+ "983816712735775257900749095553608138810346173507117456763692"
+ "906082417237501003549701061495719771391990992463590650334801"
+ "645095247553097892124265649870131353053399169286761988682620"
+ "470646847607094337816357723540686126275511490960625562837565"
+ "919605037066143014810721631063572936011202157129109627803207"
+ "640109222537327017395057537779256687211376808594099192965582"
+ "405091408501397086139901514101043283540633726674670672748194"
+ "619689888247209511150521033993300250522733475002028567363467"
+ "073845839015993349422685149993533692203655168716914058257415"
+ "372687245380085836076489297520175702786263261513025607546854"
+ "950283936784192621287273192504283869131975766338274647178208"
+ "782898885797819248359574788902108145946062770527573586861872"
+ "495878334836229510687555644377062686459197208988121546514107"
+ "351664693015899656974767580671946360204523032504979490489473"
+ "998831272757332097131048832648621306183984383000314587327943"
+ "545412181791826921829490138783015643214814238159286457522911"
+ "947902913005066356488917209306734144416494273688587275398401"
+ "286574342126647086142528388913463688579029323572701778860616"
+ "756001247718669706999421391299855093107861718979077137670254"
+ "905536174520523241903142304436697137859439295209346404644166"
+ "711761390620349487220914939651897120727926388356660677435323"
+ "625547360337786161394223954389389446058117065808804208366140"
+ "493746570665942463930129662196390627893075445929601748606307"
+ "958202499548533889369957428980652942467339381021757760595290"
+ "949128312317978915463905710577496069993499968101815574926186"
+ "401282157448075874663202214386004125214284669164849080925085"
+ "632705713354056861779162529531435753356419230493015573530175"
+ "745753158006266269396677249772833504763786905446024002326226"
+ "226069844394696456469125944170649061117616430569366951576780"
+ "483646052120595473175258384884652515381193454199796277521596"
+ "118034639745612232913342101656040627715925878170617283456986"
+ "294695300779325415218701022797603844998079798772855904101844"
+ "159056459473830831057901459789318201715161520805009031848353"
+ "610624913191857631694425153709234711986743373504616972518110"
+ "450759092883471366918423063408319079172524391364120625639910"
+ "155096611756479555514942001115285844108427141128936609315872"
+ "225475276163714476269074772631389944912199514256566104319316"
+ "535301067761376038330783936236162562837145634440924550708191"
+ "351823725714116423996666078590397007518182680822944073177874"
+ "683075104542728594593616393199792939970840185174070552702371"
+ "149226248947684643596987248070222838650635701794832911455548"
+ "416476010590671785568478803908159171377885280203284960130816"
+ "983201742060839934771342421843454177186844218984341762861833"
+ "060742973973373943786358180400348221408237056796733053044602"
+ "089777338572687291218981332309441509314343755039755626278001"
+ "120894173142009875431996141953256786162959026732040321760766"
+ "077412537410119538995389503534794017014809781095208373679856"
+ "442042162260799339089445093204725740343390866588412460138417"
+ "501238761743046793481866577712245948787747925774763517269168"
+ "847157476528582009607513335386955498721639880002645320755792"
+ "353596613175635835219887570538276316368083058805697467162836"
+ "871941182759159280604470776465814562568399855787289458370511"
+ "793625714499473481591205825277202103208168243709328052666519"
+ "272886980095474801425048104284542615114354447437288761756279"
+ "140986696480631960828081981684694205881738194312976203450759"
+ "136706518534321691775141481118864597950894299696438325543299"
+ "924611997129572629620239692190328901749029359531264503669714"
+ "158114998878449928856058461379341535853736467787249622489209"
+ "894085669234235875562651930455794644700403318601460214744959"
+ "935131707975830444487717413652148725681162526346741000762421"
+ "585614539233955268956569057729313306012485365449757557150957"
+ "640806964619664675750524929612637282053923409056469169580654"
+ "471576602558825858190234231148096941222146685242184265048449"
+ "406389486589142456399275122623031705959241319130847014622636"
+ "645823353665797337606714079377636941219178980122532025507944"
+ "459270900569885809871610702518898642834740727905326660004452"
+ "107998798987953695756013107010006005067353768387113818238790"
+ "459083753925242598532663195545585725881875618806369749234255"
+ "004527740012548007992790884685089828390575653282976295050988"
+ "699167592521318840991153224206861088947832645151398111502099"
+ "263039571552035003937270274110791173694789370953847120036374"
+ "066930411684565325903810218050483711078964535952030992938126"
+ "627146374050250745688288225578806971071577080233831770451079"
+ "327939857616370951232609530602233034699771768811872663462865"
+ "067598423791655120150068450411848330556029574474625795186054"
+ "539082653162229058836483798003442805597137006557342037027090"
+ "559214142005150246501679352515095014024360613766491035976911"
+ "451279229342670800644034673267957451959484813619478148869699"
+ "426735577550966697718734964429182302662498553172686513178236"
+ "442838009305515598853210612191656717860412811108032276121357"
+ "378133448066756387125735225403303267524644423863799006207505"
+ "881985449471137991554931339017930009178349349682295047976692"
+ "398330506490102685887034086355679994831062253659247250963448"
+ "491064073545964404715491846754314002476460544975667945044647"
+ "304892282461711772387638463741293238063530671434535471056841"
+ "014058743507762050128559983705197885505633530557061512971186"
+ "030938750397081284373471871281592504026318288871453343113735"
+ "525572236896283639085600117688951315352941610550446421752261"
+ "874153423243206777630669111814199801498554161044899315294894"
+ "586598335471728905486124973447798086405950962299377052511061"
+ "631386583082347892746250089584421636436549943844913465914533"
+ "379999403401028225456633159501820584108048772899363279816807"
+ "047692120594176896502188717868181049930125303933597827970762"
+ "729528769725648996117995894684784043190210530661859483107853"
+ "462208964199390089675673427653193145026697275263799724815197"
+ "42277811246822238899767398834228515624e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x3.fffffffffffcp-16448,
+ -0x3.fffffffffffcp-16448),
+ TEST ("-1.822599765941237301264202966809709908199525407846781671860"
+ "490243514185844316698868404780354312913602598623673673601765"
+ "550983492816311016084986754037794904502741911290588965839284"
+ "612631902816779878310781282991705364470159896776763634295620"
+ "399977086405507759269191523027384357711224647652929859134107"
+ "131311033766177730422034039629876869844113169485951406677332"
+ "105978646906000108381336146016138716819515422802764897759427"
+ "649606127660585581743814569231465017756926375080156642289293"
+ "673283429041674526561852596994351991654293919973161250734301"
+ "229733188293435228211817355121198597329430178784033567238991"
+ "382109868146408875647780268422880633923323954258731625461868"
+ "019756361390707976683048199722201701058526744224010988881802"
+ "218954343811624517058454647275266141777302127508235524255495"
+ "077624847410188087536387260798962414632082336414689612417189"
+ "261074423762230826670226570449267469450539999733042497896470"
+ "433541112583949046313166142066816768615182855303336355508050"
+ "848493454272763408046723392787911772643228335232454643531531"
+ "293780965109596419787343039866200370966335396293292123951626"
+ "300857251255826009366852778238834928201530835930494150511044"
+ "504376202119146906060707879263589773640814116355442997229287"
+ "357516926438797713012400395859990977672075958299501751914411"
+ "100177832983979385545468844204615525381872441047228160242136"
+ "358061399074918180830294797604541788443627116266477614874946"
+ "320275381479719120639248096909691038772952730586273980670234"
+ "908845582838047130660362863656303741468826570210809843051529"
+ "764599710715968724783049668698031537609151121922737670838986"
+ "231019063313451704083543258772693191077504478032977705196457"
+ "476311963940423579766592267743333240240281703765714192664650"
+ "261238842108525475632373727317877433107392470771157555519315"
+ "342195712606219652095292061187111486142303268742526232324327"
+ "684859549513380259143780498498605389236533490064713713719758"
+ "516195482395683839110874815487709856719069581339439277999588"
+ "764225441374023269294088723635153369117449251488451426500682"
+ "275202613643546970029162894292728684327495978132931525041736"
+ "043811533010451689459744960487595414710801005191019738886041"
+ "700330759577486347718291152510955454288346024086767479447085"
+ "488381542403918701406924613770471036657700557631167438407981"
+ "043720651128279219456250303615102891006541837056511748806222"
+ "607397585491924343994174101644720628454377782608040907575602"
+ "819446556281207664542228467047573092234645450583055317437795"
+ "082417803470814703744887189896369902337382121741956042345935"
+ "884612723253142155282654595436238643127962691764272518180275"
+ "427113459785623180566612952410150958294158542188856129683947"
+ "423205647411293537917743492822755414940264289391349206278124"
+ "637261117530546227171193101163560203913770166957306596094587"
+ "157942068344009717983136831735215720221516068205887802515300"
+ "718418531986345165208737593665100455983750248380809061307398"
+ "226468562035199351945434457763525745232868372698882470547439"
+ "739824719081288307173474326042654012348179128378292897284246"
+ "659521026941421904090179393555387209037739400593259788708135"
+ "948191584917854112818292327284321851309301216774469081860366"
+ "386269172727256532505770337882755328485250206768602685033962"
+ "440104608681703661836684224002452204206988870853482747123520"
+ "399893225930911094236785628778409716642043743011838124733934"
+ "741815690236928243119773507801659161306391826034349899269700"
+ "203318655841365557670338920830120355215775570185205187792786"
+ "469651542036921770351060275981525257479972870679584955838287"
+ "739201639690056010173674146269075399160226397421213763250898"
+ "426455931554089138319236160118935041431135881698097569756856"
+ "151568097183010770415265728455292024186273012588882570230103"
+ "556461575961588201073376434110983444957690798240626580348411"
+ "130361597129760906527151728611183983964634381536446177639427"
+ "357139121931555391533530062229519657764088420152465761406574"
+ "372912175446065297507599001278602166241607775723548756255038"
+ "111682400601444043817825327317473443616363811953229538335113"
+ "554317081159605178503636684677328593784523197442447541897051"
+ "765917979806997287688948887762730988732373759081487505045731"
+ "780962516371322797322900290800349173908511597189960698673840"
+ "575246343618674510782103231548069351600625138878990205386323"
+ "507195789572212187626259883382335229004257648823812072407226"
+ "748034842563719900314776037846324304340753439522188214488731"
+ "587587602590773979229757579537350642919246847017003831205050"
+ "091766570758342092730379087533240780509450566515975521049526"
+ "648559418724492221615428321368803239393940142649951760927512"
+ "806206735517233312085779604538769249237553405647014530167135"
+ "901660283246967512310859858842402221675933473345262633030379"
+ "166095265903616282750945146877129795473716570192167683486699"
+ "408449626849151059958071445815502674667686079002889972264588"
+ "367943596990204644237310847295151549276191188484721182593011"
+ "565492753911808835025595944507675739829889338066224835821007"
+ "529770219118651961451528039534172317720138386282712972164963"
+ "827453131476237777875456011939712318010731021660815714182837"
+ "925932827450846737171705703110453775045022844794161968407337"
+ "563051732200611864029092524160237625633441437649560291126545"
+ "016588941837216171906367061961021463277454274115736642674786"
+ "105481144944900497013266814660732350276014695758646527598109"
+ "032833625638118745064603049207169451605471244451396126962333"
+ "970541136633781764326931671721743247881200204989497992526041"
+ "155365138538482621423139201284142593682794438326622711523602"
+ "971739306465982105646744687059782875743393602442251153756186"
+ "461986559595562807034378047263446391660844015155450279012841"
+ "727725949243700569657645371738730960512993952666118149699429"
+ "724469371043743658144365355534376381724696183448618129498545"
+ "588498126642153343817727180931089703595826077621825309785860"
+ "116064312065392702465283402514616635687773126656643723142906"
+ "109980782511327255186935290824107395569585435485254537079360"
+ "983816712735775257900749095553608138810346173507117456763692"
+ "906082417237501003549701061495719771391990992463590650334801"
+ "645095247553097892124265649870131353053399169286761988682620"
+ "470646847607094337816357723540686126275511490960625562837565"
+ "919605037066143014810721631063572936011202157129109627803207"
+ "640109222537327017395057537779256687211376808594099192965582"
+ "405091408501397086139901514101043283540633726674670672748194"
+ "619689888247209511150521033993300250522733475002028567363467"
+ "073845839015993349422685149993533692203655168716914058257415"
+ "372687245380085836076489297520175702786263261513025607546854"
+ "950283936784192621287273192504283869131975766338274647178208"
+ "782898885797819248359574788902108145946062770527573586861872"
+ "495878334836229510687555644377062686459197208988121546514107"
+ "351664693015899656974767580671946360204523032504979490489473"
+ "998831272757332097131048832648621306183984383000314587327943"
+ "545412181791826921829490138783015643214814238159286457522911"
+ "947902913005066356488917209306734144416494273688587275398401"
+ "286574342126647086142528388913463688579029323572701778860616"
+ "756001247718669706999421391299855093107861718979077137670254"
+ "905536174520523241903142304436697137859439295209346404644166"
+ "711761390620349487220914939651897120727926388356660677435323"
+ "625547360337786161394223954389389446058117065808804208366140"
+ "493746570665942463930129662196390627893075445929601748606307"
+ "958202499548533889369957428980652942467339381021757760595290"
+ "949128312317978915463905710577496069993499968101815574926186"
+ "401282157448075874663202214386004125214284669164849080925085"
+ "632705713354056861779162529531435753356419230493015573530175"
+ "745753158006266269396677249772833504763786905446024002326226"
+ "226069844394696456469125944170649061117616430569366951576780"
+ "483646052120595473175258384884652515381193454199796277521596"
+ "118034639745612232913342101656040627715925878170617283456986"
+ "294695300779325415218701022797603844998079798772855904101844"
+ "159056459473830831057901459789318201715161520805009031848353"
+ "610624913191857631694425153709234711986743373504616972518110"
+ "450759092883471366918423063408319079172524391364120625639910"
+ "155096611756479555514942001115285844108427141128936609315872"
+ "225475276163714476269074772631389944912199514256566104319316"
+ "535301067761376038330783936236162562837145634440924550708191"
+ "351823725714116423996666078590397007518182680822944073177874"
+ "683075104542728594593616393199792939970840185174070552702371"
+ "149226248947684643596987248070222838650635701794832911455548"
+ "416476010590671785568478803908159171377885280203284960130816"
+ "983201742060839934771342421843454177186844218984341762861833"
+ "060742973973373943786358180400348221408237056796733053044602"
+ "089777338572687291218981332309441509314343755039755626278001"
+ "120894173142009875431996141953256786162959026732040321760766"
+ "077412537410119538995389503534794017014809781095208373679856"
+ "442042162260799339089445093204725740343390866588412460138417"
+ "501238761743046793481866577712245948787747925774763517269168"
+ "847157476528582009607513335386955498721639880002645320755792"
+ "353596613175635835219887570538276316368083058805697467162836"
+ "871941182759159280604470776465814562568399855787289458370511"
+ "793625714499473481591205825277202103208168243709328052666519"
+ "272886980095474801425048104284542615114354447437288761756279"
+ "140986696480631960828081981684694205881738194312976203450759"
+ "136706518534321691775141481118864597950894299696438325543299"
+ "924611997129572629620239692190328901749029359531264503669714"
+ "158114998878449928856058461379341535853736467787249622489209"
+ "894085669234235875562651930455794644700403318601460214744959"
+ "935131707975830444487717413652148725681162526346741000762421"
+ "585614539233955268956569057729313306012485365449757557150957"
+ "640806964619664675750524929612637282053923409056469169580654"
+ "471576602558825858190234231148096941222146685242184265048449"
+ "406389486589142456399275122623031705959241319130847014622636"
+ "645823353665797337606714079377636941219178980122532025507944"
+ "459270900569885809871610702518898642834740727905326660004452"
+ "107998798987953695756013107010006005067353768387113818238790"
+ "459083753925242598532663195545585725881875618806369749234255"
+ "004527740012548007992790884685089828390575653282976295050988"
+ "699167592521318840991153224206861088947832645151398111502099"
+ "263039571552035003937270274110791173694789370953847120036374"
+ "066930411684565325903810218050483711078964535952030992938126"
+ "627146374050250745688288225578806971071577080233831770451079"
+ "327939857616370951232609530602233034699771768811872663462865"
+ "067598423791655120150068450411848330556029574474625795186054"
+ "539082653162229058836483798003442805597137006557342037027090"
+ "559214142005150246501679352515095014024360613766491035976911"
+ "451279229342670800644034673267957451959484813619478148869699"
+ "426735577550966697718734964429182302662498553172686513178236"
+ "442838009305515598853210612191656717860412811108032276121357"
+ "378133448066756387125735225403303267524644423863799006207505"
+ "881985449471137991554931339017930009178349349682295047976692"
+ "398330506490102685887034086355679994831062253659247250963448"
+ "491064073545964404715491846754314002476460544975667945044647"
+ "304892282461711772387638463741293238063530671434535471056841"
+ "014058743507762050128559983705197885505633530557061512971186"
+ "030938750397081284373471871281592504026318288871453343113735"
+ "525572236896283639085600117688951315352941610550446421752261"
+ "874153423243206777630669111814199801498554161044899315294894"
+ "586598335471728905486124973447798086405950962299377052511061"
+ "631386583082347892746250089584421636436549943844913465914533"
+ "379999403401028225456633159501820584108048772899363279816807"
+ "047692120594176896502188717868181049930125303933597827970762"
+ "729528769725648996117995894684784043190210530661859483107853"
+ "462208964199390089675673427653193145026697275263799724815197"
+ "42277811246822238899767398834228515625e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448),
+ TEST ("-1.822599765941237301264202966809709908199525407846781671860"
+ "490243514185844316698868404780354312913602598623673673601765"
+ "550983492816311016084986754037794904502741911290588965839284"
+ "612631902816779878310781282991705364470159896776763634295620"
+ "399977086405507759269191523027384357711224647652929859134107"
+ "131311033766177730422034039629876869844113169485951406677332"
+ "105978646906000108381336146016138716819515422802764897759427"
+ "649606127660585581743814569231465017756926375080156642289293"
+ "673283429041674526561852596994351991654293919973161250734301"
+ "229733188293435228211817355121198597329430178784033567238991"
+ "382109868146408875647780268422880633923323954258731625461868"
+ "019756361390707976683048199722201701058526744224010988881802"
+ "218954343811624517058454647275266141777302127508235524255495"
+ "077624847410188087536387260798962414632082336414689612417189"
+ "261074423762230826670226570449267469450539999733042497896470"
+ "433541112583949046313166142066816768615182855303336355508050"
+ "848493454272763408046723392787911772643228335232454643531531"
+ "293780965109596419787343039866200370966335396293292123951626"
+ "300857251255826009366852778238834928201530835930494150511044"
+ "504376202119146906060707879263589773640814116355442997229287"
+ "357516926438797713012400395859990977672075958299501751914411"
+ "100177832983979385545468844204615525381872441047228160242136"
+ "358061399074918180830294797604541788443627116266477614874946"
+ "320275381479719120639248096909691038772952730586273980670234"
+ "908845582838047130660362863656303741468826570210809843051529"
+ "764599710715968724783049668698031537609151121922737670838986"
+ "231019063313451704083543258772693191077504478032977705196457"
+ "476311963940423579766592267743333240240281703765714192664650"
+ "261238842108525475632373727317877433107392470771157555519315"
+ "342195712606219652095292061187111486142303268742526232324327"
+ "684859549513380259143780498498605389236533490064713713719758"
+ "516195482395683839110874815487709856719069581339439277999588"
+ "764225441374023269294088723635153369117449251488451426500682"
+ "275202613643546970029162894292728684327495978132931525041736"
+ "043811533010451689459744960487595414710801005191019738886041"
+ "700330759577486347718291152510955454288346024086767479447085"
+ "488381542403918701406924613770471036657700557631167438407981"
+ "043720651128279219456250303615102891006541837056511748806222"
+ "607397585491924343994174101644720628454377782608040907575602"
+ "819446556281207664542228467047573092234645450583055317437795"
+ "082417803470814703744887189896369902337382121741956042345935"
+ "884612723253142155282654595436238643127962691764272518180275"
+ "427113459785623180566612952410150958294158542188856129683947"
+ "423205647411293537917743492822755414940264289391349206278124"
+ "637261117530546227171193101163560203913770166957306596094587"
+ "157942068344009717983136831735215720221516068205887802515300"
+ "718418531986345165208737593665100455983750248380809061307398"
+ "226468562035199351945434457763525745232868372698882470547439"
+ "739824719081288307173474326042654012348179128378292897284246"
+ "659521026941421904090179393555387209037739400593259788708135"
+ "948191584917854112818292327284321851309301216774469081860366"
+ "386269172727256532505770337882755328485250206768602685033962"
+ "440104608681703661836684224002452204206988870853482747123520"
+ "399893225930911094236785628778409716642043743011838124733934"
+ "741815690236928243119773507801659161306391826034349899269700"
+ "203318655841365557670338920830120355215775570185205187792786"
+ "469651542036921770351060275981525257479972870679584955838287"
+ "739201639690056010173674146269075399160226397421213763250898"
+ "426455931554089138319236160118935041431135881698097569756856"
+ "151568097183010770415265728455292024186273012588882570230103"
+ "556461575961588201073376434110983444957690798240626580348411"
+ "130361597129760906527151728611183983964634381536446177639427"
+ "357139121931555391533530062229519657764088420152465761406574"
+ "372912175446065297507599001278602166241607775723548756255038"
+ "111682400601444043817825327317473443616363811953229538335113"
+ "554317081159605178503636684677328593784523197442447541897051"
+ "765917979806997287688948887762730988732373759081487505045731"
+ "780962516371322797322900290800349173908511597189960698673840"
+ "575246343618674510782103231548069351600625138878990205386323"
+ "507195789572212187626259883382335229004257648823812072407226"
+ "748034842563719900314776037846324304340753439522188214488731"
+ "587587602590773979229757579537350642919246847017003831205050"
+ "091766570758342092730379087533240780509450566515975521049526"
+ "648559418724492221615428321368803239393940142649951760927512"
+ "806206735517233312085779604538769249237553405647014530167135"
+ "901660283246967512310859858842402221675933473345262633030379"
+ "166095265903616282750945146877129795473716570192167683486699"
+ "408449626849151059958071445815502674667686079002889972264588"
+ "367943596990204644237310847295151549276191188484721182593011"
+ "565492753911808835025595944507675739829889338066224835821007"
+ "529770219118651961451528039534172317720138386282712972164963"
+ "827453131476237777875456011939712318010731021660815714182837"
+ "925932827450846737171705703110453775045022844794161968407337"
+ "563051732200611864029092524160237625633441437649560291126545"
+ "016588941837216171906367061961021463277454274115736642674786"
+ "105481144944900497013266814660732350276014695758646527598109"
+ "032833625638118745064603049207169451605471244451396126962333"
+ "970541136633781764326931671721743247881200204989497992526041"
+ "155365138538482621423139201284142593682794438326622711523602"
+ "971739306465982105646744687059782875743393602442251153756186"
+ "461986559595562807034378047263446391660844015155450279012841"
+ "727725949243700569657645371738730960512993952666118149699429"
+ "724469371043743658144365355534376381724696183448618129498545"
+ "588498126642153343817727180931089703595826077621825309785860"
+ "116064312065392702465283402514616635687773126656643723142906"
+ "109980782511327255186935290824107395569585435485254537079360"
+ "983816712735775257900749095553608138810346173507117456763692"
+ "906082417237501003549701061495719771391990992463590650334801"
+ "645095247553097892124265649870131353053399169286761988682620"
+ "470646847607094337816357723540686126275511490960625562837565"
+ "919605037066143014810721631063572936011202157129109627803207"
+ "640109222537327017395057537779256687211376808594099192965582"
+ "405091408501397086139901514101043283540633726674670672748194"
+ "619689888247209511150521033993300250522733475002028567363467"
+ "073845839015993349422685149993533692203655168716914058257415"
+ "372687245380085836076489297520175702786263261513025607546854"
+ "950283936784192621287273192504283869131975766338274647178208"
+ "782898885797819248359574788902108145946062770527573586861872"
+ "495878334836229510687555644377062686459197208988121546514107"
+ "351664693015899656974767580671946360204523032504979490489473"
+ "998831272757332097131048832648621306183984383000314587327943"
+ "545412181791826921829490138783015643214814238159286457522911"
+ "947902913005066356488917209306734144416494273688587275398401"
+ "286574342126647086142528388913463688579029323572701778860616"
+ "756001247718669706999421391299855093107861718979077137670254"
+ "905536174520523241903142304436697137859439295209346404644166"
+ "711761390620349487220914939651897120727926388356660677435323"
+ "625547360337786161394223954389389446058117065808804208366140"
+ "493746570665942463930129662196390627893075445929601748606307"
+ "958202499548533889369957428980652942467339381021757760595290"
+ "949128312317978915463905710577496069993499968101815574926186"
+ "401282157448075874663202214386004125214284669164849080925085"
+ "632705713354056861779162529531435753356419230493015573530175"
+ "745753158006266269396677249772833504763786905446024002326226"
+ "226069844394696456469125944170649061117616430569366951576780"
+ "483646052120595473175258384884652515381193454199796277521596"
+ "118034639745612232913342101656040627715925878170617283456986"
+ "294695300779325415218701022797603844998079798772855904101844"
+ "159056459473830831057901459789318201715161520805009031848353"
+ "610624913191857631694425153709234711986743373504616972518110"
+ "450759092883471366918423063408319079172524391364120625639910"
+ "155096611756479555514942001115285844108427141128936609315872"
+ "225475276163714476269074772631389944912199514256566104319316"
+ "535301067761376038330783936236162562837145634440924550708191"
+ "351823725714116423996666078590397007518182680822944073177874"
+ "683075104542728594593616393199792939970840185174070552702371"
+ "149226248947684643596987248070222838650635701794832911455548"
+ "416476010590671785568478803908159171377885280203284960130816"
+ "983201742060839934771342421843454177186844218984341762861833"
+ "060742973973373943786358180400348221408237056796733053044602"
+ "089777338572687291218981332309441509314343755039755626278001"
+ "120894173142009875431996141953256786162959026732040321760766"
+ "077412537410119538995389503534794017014809781095208373679856"
+ "442042162260799339089445093204725740343390866588412460138417"
+ "501238761743046793481866577712245948787747925774763517269168"
+ "847157476528582009607513335386955498721639880002645320755792"
+ "353596613175635835219887570538276316368083058805697467162836"
+ "871941182759159280604470776465814562568399855787289458370511"
+ "793625714499473481591205825277202103208168243709328052666519"
+ "272886980095474801425048104284542615114354447437288761756279"
+ "140986696480631960828081981684694205881738194312976203450759"
+ "136706518534321691775141481118864597950894299696438325543299"
+ "924611997129572629620239692190328901749029359531264503669714"
+ "158114998878449928856058461379341535853736467787249622489209"
+ "894085669234235875562651930455794644700403318601460214744959"
+ "935131707975830444487717413652148725681162526346741000762421"
+ "585614539233955268956569057729313306012485365449757557150957"
+ "640806964619664675750524929612637282053923409056469169580654"
+ "471576602558825858190234231148096941222146685242184265048449"
+ "406389486589142456399275122623031705959241319130847014622636"
+ "645823353665797337606714079377636941219178980122532025507944"
+ "459270900569885809871610702518898642834740727905326660004452"
+ "107998798987953695756013107010006005067353768387113818238790"
+ "459083753925242598532663195545585725881875618806369749234255"
+ "004527740012548007992790884685089828390575653282976295050988"
+ "699167592521318840991153224206861088947832645151398111502099"
+ "263039571552035003937270274110791173694789370953847120036374"
+ "066930411684565325903810218050483711078964535952030992938126"
+ "627146374050250745688288225578806971071577080233831770451079"
+ "327939857616370951232609530602233034699771768811872663462865"
+ "067598423791655120150068450411848330556029574474625795186054"
+ "539082653162229058836483798003442805597137006557342037027090"
+ "559214142005150246501679352515095014024360613766491035976911"
+ "451279229342670800644034673267957451959484813619478148869699"
+ "426735577550966697718734964429182302662498553172686513178236"
+ "442838009305515598853210612191656717860412811108032276121357"
+ "378133448066756387125735225403303267524644423863799006207505"
+ "881985449471137991554931339017930009178349349682295047976692"
+ "398330506490102685887034086355679994831062253659247250963448"
+ "491064073545964404715491846754314002476460544975667945044647"
+ "304892282461711772387638463741293238063530671434535471056841"
+ "014058743507762050128559983705197885505633530557061512971186"
+ "030938750397081284373471871281592504026318288871453343113735"
+ "525572236896283639085600117688951315352941610550446421752261"
+ "874153423243206777630669111814199801498554161044899315294894"
+ "586598335471728905486124973447798086405950962299377052511061"
+ "631386583082347892746250089584421636436549943844913465914533"
+ "379999403401028225456633159501820584108048772899363279816807"
+ "047692120594176896502188717868181049930125303933597827970762"
+ "729528769725648996117995894684784043190210530661859483107853"
+ "462208964199390089675673427653193145026697275263799724815197"
+ "42277811246822238899767398834228515626e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4.000000000004p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448),
+ TEST ("9.1129988297061865063210148340485495409976270392339083593024"
+ "512175709292215834943420239017715645680129931183683680088277"
+ "549174640815550804249337701889745225137095564529448291964230"
+ "631595140838993915539064149585268223507994838838181714781019"
+ "998854320275387963459576151369217885561232382646492956705356"
+ "565551688308886521101701981493843492205658474297570333866605"
+ "298932345300005419066807300806935840975771140138244887971382"
+ "480306383029279087190728461573250887846318754007832114464683"
+ "664171452083726328092629849717599582714695998658062536715061"
+ "486659414671761410590867756059929866471508939201678361949569"
+ "105493407320443782389013421144031696166197712936581273093400"
+ "987818069535398834152409986110085052926337211200549444090110"
+ "947717190581225852922732363763307088865106375411776212774753"
+ "881242370509404376819363039948120731604116820734480620859463"
+ "053721188111541333511328522463373472526999986652124894823521"
+ "677055629197452315658307103340838430759142765166817775402542"
+ "424672713638170402336169639395588632161416761622732176576564"
+ "689048255479820989367151993310018548316769814664606197581315"
+ "042862562791300468342638911941746410076541796524707525552225"
+ "218810105957345303035393963179488682040705817772149861464367"
+ "875846321939885650620019792999548883603797914975087595720555"
+ "008891649198969277273442210230776269093622052361408012106817"
+ "903069953745909041514739880227089422181355813323880743747316"
+ "013769073985956031962404845484551938647636529313699033511745"
+ "442279141902356533018143182815187073441328510540492152576488"
+ "229985535798436239152483434901576880457556096136883541949311"
+ "550953165672585204177162938634659553875223901648885259822873"
+ "815598197021178988329613387166662012014085188285709633232513"
+ "061942105426273781618686365893871655369623538557877775965767"
+ "109785630310982604764603059355574307115163437126311616216384"
+ "242977475669012957189024924930269461826674503235685685987925"
+ "809774119784191955543740774385492835953479066971963899979438"
+ "211272068701163464704436181757668455872462574422571325034113"
+ "760130682177348501458144714636434216374798906646576252086802"
+ "190576650522584472987248024379770735540050259550986944302085"
+ "016537978874317385914557625547772714417301204338373972354274"
+ "419077120195935070346230688523551832885027881558371920399052"
+ "186032556413960972812515180755144550327091852825587440311130"
+ "369879274596217199708705082236031422718889130402045378780140"
+ "972327814060383227111423352378654611732272529152765871889754"
+ "120890173540735187244359494818495116869106087097802117296794"
+ "230636162657107764132729771811932156398134588213625909013771"
+ "355672989281159028330647620507547914707927109442806484197371"
+ "160282370564676895887174641137770747013214469567460313906231"
+ "863055876527311358559655058178010195688508347865329804729357"
+ "897103417200485899156841586760786011075803410294390125765035"
+ "920926599317258260436879683255022799187512419040453065369911"
+ "323428101759967597271722888176287261643418634944123527371986"
+ "991235954064415358673716302132700617408956418914644864212332"
+ "976051347071095204508969677769360451886970029662989435406797"
+ "409579245892705640914616364216092565465060838723454093018319"
+ "313458636362826625288516894137766424262510338430134251698122"
+ "005230434085183091834211200122610210349443542674137356176019"
+ "994661296545554711839281438920485832102187150591906236696737"
+ "090784511846412155988675390082958065319591301717494963485010"
+ "165932792068277883516946041506017760788778509260259389639323"
+ "482577101846088517553013799076262873998643533979247791914386"
+ "960081984502800508683707313453769958011319871060688162544921"
+ "322796577704456915961808005946752071556794084904878487842807"
+ "578404859150538520763286422764601209313650629444128511505177"
+ "823078798079410053668821705549172247884539912031329017420556"
+ "518079856488045326357586430559199198231719076822308881971367"
+ "856956096577769576676503111475982888204421007623288070328718"
+ "645608772303264875379950063930108312080388786177437812751905"
+ "584120030072202190891266365873672180818190597661476916755677"
+ "715854057980258925181834233866429689226159872122377094852588"
+ "295898990349864384447444388136549436618687954074375252286589"
+ "048125818566139866145014540017458695425579859498034933692028"
+ "762317180933725539105161577403467580031256943949510269316175"
+ "359789478610609381312994169116761450212882441190603620361337"
+ "401742128185995015738801892316215217037671976109410724436579"
+ "379380129538698961487878976867532145962342350850191560252504"
+ "588328537917104636518954376662039025472528325798776052476332"
+ "427970936224611080771416068440161969697007132497588046375640"
+ "310336775861665604288980226938462461877670282350726508356795"
+ "083014162348375615542992942120111083796673667263131651518958"
+ "304763295180814137547257343856489773685828509608384174334970"
+ "422481342457552997903572290775133733384303950144498613229418"
+ "397179849510232211865542364757577463809559424236059129650578"
+ "274637695590441751279797225383786991494466903311241791050376"
+ "488510955932598072576401976708615886006919314135648608248191"
+ "372656573811888893772800596985615900536551083040785709141896"
+ "296641372542336858585285155522688752251142239708098420366878"
+ "152586610030593201454626208011881281672071882478014556327250"
+ "829447091860808595318353098051073163872713705786832133739305"
+ "274057247245024850663340733036617513800734787932326379905451"
+ "641681281905937253230152460358472580273562222569806348116698"
+ "527056831689088216346583586087162394060010249474899626302057"
+ "768256926924131071156960064207129684139721916331135576180148"
+ "586965323299105282337234352989143787169680122112557687809323"
+ "099327979778140351718902363172319583042200757772513950642086"
+ "386297462185028482882268586936548025649697633305907484971486"
+ "223468552187182907218267776718819086234809172430906474927279"
+ "424906332107667190886359046554485179791303881091265489293005"
+ "803215603269635123264170125730831784388656332832186157145305"
+ "499039125566362759346764541205369778479271774262726853968049"
+ "190835636788762895037454777680406940517308675355872838184645"
+ "304120861875050177485053074785988569599549623179532516740082"
+ "254762377654894606213282493506567652669958464338099434131023"
+ "532342380354716890817886177034306313775574548031278141878295"
+ "980251853307150740536081553178646800560107856455481390160382"
+ "005461126866350869752876888962834360568840429704959648279120"
+ "254570425069854306995075705052164177031686333733533637409730"
+ "984494412360475557526051699665012526136673750101428368173353"
+ "692291950799667471134257499676684610182758435845702912870768"
+ "634362269004291803824464876008785139313163075651280377342747"
+ "514196839209631064363659625214193456598788316913732358910439"
+ "144944289890962417978739445105407297303138526378679343093624"
+ "793916741811475534377782218853134322959860449406077325705367"
+ "583234650794982848738379033597318010226151625248974524473699"
+ "941563637866604856552441632431065309199219150015729366397177"
+ "270609089591346091474506939150782160740711907964322876145597"
+ "395145650253317824445860465336707220824713684429363769920064"
+ "328717106332354307126419445673184428951466178635088943030837"
+ "800062385933485349971069564992754655393085948953856883512745"
+ "276808726026162095157115221834856892971964760467320232208335"
+ "588069531017474361045746982594856036396319417833033871766181"
+ "277368016889308069711197719469472302905853290440210418307024"
+ "687328533297123196506483109819531394653772296480087430315397"
+ "910124977426694468497871449032647123366969051087888029764547"
+ "456415615898945773195285528874803499674998405090778746309320"
+ "064107872403793733160110719300206260714233458242454046254281"
+ "635285667702843088958126476571787667820961524650778676508787"
+ "287657900313313469833862488641675238189345272301200116311311"
+ "303492219734822823456297208532453055880821528468347578839024"
+ "182302606029773658762919244232625769059672709989813876079805"
+ "901731987280611645667105082802031385796293908530864172849314"
+ "734765038966270760935051139880192249903989938642795205092207"
+ "952822973691541552895072989465910085758076040250451592417680"
+ "531245659592881584721257685461735599337168675230848625905522"
+ "537954644173568345921153170415953958626219568206031281995507"
+ "754830587823977775747100055764292205421357056446830465793611"
+ "273763808185723813453738631569497245609975712828305215965826"
+ "765053388068801916539196811808128141857281722046227535409567"
+ "591186285705821199833303929519850375909134041147203658893734"
+ "153755227136429729680819659989646998542009258703527635118557"
+ "461312447384232179849362403511141932531785089741645572777420"
+ "823800529533589278423940195407958568894264010164248006540849"
+ "160087103041996738567121092172708859342210949217088143091653"
+ "037148698668697189317909020017411070411852839836652652230104"
+ "488866928634364560949066615472075465717187751987781313900056"
+ "044708657100493771599807097662839308147951336602016088038303"
+ "870626870505976949769475176739700850740489054760418683992822"
+ "102108113039966954472254660236287017169543329420623006920875"
+ "061938087152339674093328885612297439387396288738175863458442"
+ "357873826429100480375666769347774936081994000132266037789617"
+ "679830658781791760994378526913815818404152940284873358141843"
+ "597059137957964030223538823290728128419992789364472918525589"
+ "681285724973674079560291263860105160408412185466402633325963"
+ "644349004773740071252405214227130755717722371864438087813957"
+ "049334824031598041404099084234710294086909715648810172537956"
+ "835325926716084588757074055943229897544714984821916277164996"
+ "230599856478631481011984609516445087451467976563225183485707"
+ "905749943922496442802923068967076792686823389362481124460494"
+ "704283461711793778132596522789732235020165930073010737247996"
+ "756585398791522224385870682607436284058126317337050038121079"
+ "280726961697763447828452886465665300624268272487877857547882"
+ "040348230983233787526246480631864102696170452823458479032723"
+ "578830127941292909511711557404847061107334262109213252422470"
+ "319474329457122819963756131151585297962065956542350731131832"
+ "291167683289866880335703968881847060958949006126601275397222"
+ "963545028494290493580535125944932141737036395266333000222605"
+ "399939949397684787800655350500300253367688419355690911939522"
+ "954187696262129926633159777279286294093780940318487461712750"
+ "226387000627400399639544234254491419528782664148814752549434"
+ "958379626065942049557661210343054447391632257569905575104963"
+ "151978577601750196863513705539558684739468547692356001818703"
+ "346520584228266295190510902524185553948226797601549646906331"
+ "357318702512537284414411278940348553578854011691588522553966"
+ "396992880818547561630476530111651734988588440593633173143253"
+ "379921189582756007503422520592416527801478723731289759302726"
+ "954132658111452941824189900172140279856850327867101851354527"
+ "960707100257512325083967625754750701218030688324551798845572"
+ "563961467133540032201733663397872597974240680973907443484971"
+ "336778877548334885936748221459115133124927658634325658911822"
+ "141900465275779942660530609582835893020640555401613806067868"
+ "906672403337819356286761270165163376232221193189950310375294"
+ "099272473556899577746566950896500458917467484114752398834619"
+ "916525324505134294351704317783999741553112682962362548172424"
+ "553203677298220235774592337715700123823027248783397252232365"
+ "244614123085588619381923187064661903176533571726773552842050"
+ "702937175388102506427999185259894275281676527853075648559301"
+ "546937519854064218673593564079625201315914443572667155686776"
+ "278611844814181954280005884447565767647080527522321087613093"
+ "707671162160338881533455590709990074927708052244965764744729"
+ "329916773586445274306248672389904320297548114968852625553081"
+ "569329154117394637312504479221081821827497192245673295726668"
+ "999970170051411272831657975091029205402438644968163990840352"
+ "384606029708844825109435893409052496506265196679891398538136"
+ "476438486282449805899794734239202159510526533092974155392673"
+ "110448209969504483783671382659657251334863763189986240759871"
+ "1389056234111194498836994171142578124e-4952",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x1.fffffffffffcp-16448,
+ 0x2p-16448,
+ 0x1.fffffffffffcp-16448,
+ 0x2p-16448),
+ TEST ("9.1129988297061865063210148340485495409976270392339083593024"
+ "512175709292215834943420239017715645680129931183683680088277"
+ "549174640815550804249337701889745225137095564529448291964230"
+ "631595140838993915539064149585268223507994838838181714781019"
+ "998854320275387963459576151369217885561232382646492956705356"
+ "565551688308886521101701981493843492205658474297570333866605"
+ "298932345300005419066807300806935840975771140138244887971382"
+ "480306383029279087190728461573250887846318754007832114464683"
+ "664171452083726328092629849717599582714695998658062536715061"
+ "486659414671761410590867756059929866471508939201678361949569"
+ "105493407320443782389013421144031696166197712936581273093400"
+ "987818069535398834152409986110085052926337211200549444090110"
+ "947717190581225852922732363763307088865106375411776212774753"
+ "881242370509404376819363039948120731604116820734480620859463"
+ "053721188111541333511328522463373472526999986652124894823521"
+ "677055629197452315658307103340838430759142765166817775402542"
+ "424672713638170402336169639395588632161416761622732176576564"
+ "689048255479820989367151993310018548316769814664606197581315"
+ "042862562791300468342638911941746410076541796524707525552225"
+ "218810105957345303035393963179488682040705817772149861464367"
+ "875846321939885650620019792999548883603797914975087595720555"
+ "008891649198969277273442210230776269093622052361408012106817"
+ "903069953745909041514739880227089422181355813323880743747316"
+ "013769073985956031962404845484551938647636529313699033511745"
+ "442279141902356533018143182815187073441328510540492152576488"
+ "229985535798436239152483434901576880457556096136883541949311"
+ "550953165672585204177162938634659553875223901648885259822873"
+ "815598197021178988329613387166662012014085188285709633232513"
+ "061942105426273781618686365893871655369623538557877775965767"
+ "109785630310982604764603059355574307115163437126311616216384"
+ "242977475669012957189024924930269461826674503235685685987925"
+ "809774119784191955543740774385492835953479066971963899979438"
+ "211272068701163464704436181757668455872462574422571325034113"
+ "760130682177348501458144714636434216374798906646576252086802"
+ "190576650522584472987248024379770735540050259550986944302085"
+ "016537978874317385914557625547772714417301204338373972354274"
+ "419077120195935070346230688523551832885027881558371920399052"
+ "186032556413960972812515180755144550327091852825587440311130"
+ "369879274596217199708705082236031422718889130402045378780140"
+ "972327814060383227111423352378654611732272529152765871889754"
+ "120890173540735187244359494818495116869106087097802117296794"
+ "230636162657107764132729771811932156398134588213625909013771"
+ "355672989281159028330647620507547914707927109442806484197371"
+ "160282370564676895887174641137770747013214469567460313906231"
+ "863055876527311358559655058178010195688508347865329804729357"
+ "897103417200485899156841586760786011075803410294390125765035"
+ "920926599317258260436879683255022799187512419040453065369911"
+ "323428101759967597271722888176287261643418634944123527371986"
+ "991235954064415358673716302132700617408956418914644864212332"
+ "976051347071095204508969677769360451886970029662989435406797"
+ "409579245892705640914616364216092565465060838723454093018319"
+ "313458636362826625288516894137766424262510338430134251698122"
+ "005230434085183091834211200122610210349443542674137356176019"
+ "994661296545554711839281438920485832102187150591906236696737"
+ "090784511846412155988675390082958065319591301717494963485010"
+ "165932792068277883516946041506017760788778509260259389639323"
+ "482577101846088517553013799076262873998643533979247791914386"
+ "960081984502800508683707313453769958011319871060688162544921"
+ "322796577704456915961808005946752071556794084904878487842807"
+ "578404859150538520763286422764601209313650629444128511505177"
+ "823078798079410053668821705549172247884539912031329017420556"
+ "518079856488045326357586430559199198231719076822308881971367"
+ "856956096577769576676503111475982888204421007623288070328718"
+ "645608772303264875379950063930108312080388786177437812751905"
+ "584120030072202190891266365873672180818190597661476916755677"
+ "715854057980258925181834233866429689226159872122377094852588"
+ "295898990349864384447444388136549436618687954074375252286589"
+ "048125818566139866145014540017458695425579859498034933692028"
+ "762317180933725539105161577403467580031256943949510269316175"
+ "359789478610609381312994169116761450212882441190603620361337"
+ "401742128185995015738801892316215217037671976109410724436579"
+ "379380129538698961487878976867532145962342350850191560252504"
+ "588328537917104636518954376662039025472528325798776052476332"
+ "427970936224611080771416068440161969697007132497588046375640"
+ "310336775861665604288980226938462461877670282350726508356795"
+ "083014162348375615542992942120111083796673667263131651518958"
+ "304763295180814137547257343856489773685828509608384174334970"
+ "422481342457552997903572290775133733384303950144498613229418"
+ "397179849510232211865542364757577463809559424236059129650578"
+ "274637695590441751279797225383786991494466903311241791050376"
+ "488510955932598072576401976708615886006919314135648608248191"
+ "372656573811888893772800596985615900536551083040785709141896"
+ "296641372542336858585285155522688752251142239708098420366878"
+ "152586610030593201454626208011881281672071882478014556327250"
+ "829447091860808595318353098051073163872713705786832133739305"
+ "274057247245024850663340733036617513800734787932326379905451"
+ "641681281905937253230152460358472580273562222569806348116698"
+ "527056831689088216346583586087162394060010249474899626302057"
+ "768256926924131071156960064207129684139721916331135576180148"
+ "586965323299105282337234352989143787169680122112557687809323"
+ "099327979778140351718902363172319583042200757772513950642086"
+ "386297462185028482882268586936548025649697633305907484971486"
+ "223468552187182907218267776718819086234809172430906474927279"
+ "424906332107667190886359046554485179791303881091265489293005"
+ "803215603269635123264170125730831784388656332832186157145305"
+ "499039125566362759346764541205369778479271774262726853968049"
+ "190835636788762895037454777680406940517308675355872838184645"
+ "304120861875050177485053074785988569599549623179532516740082"
+ "254762377654894606213282493506567652669958464338099434131023"
+ "532342380354716890817886177034306313775574548031278141878295"
+ "980251853307150740536081553178646800560107856455481390160382"
+ "005461126866350869752876888962834360568840429704959648279120"
+ "254570425069854306995075705052164177031686333733533637409730"
+ "984494412360475557526051699665012526136673750101428368173353"
+ "692291950799667471134257499676684610182758435845702912870768"
+ "634362269004291803824464876008785139313163075651280377342747"
+ "514196839209631064363659625214193456598788316913732358910439"
+ "144944289890962417978739445105407297303138526378679343093624"
+ "793916741811475534377782218853134322959860449406077325705367"
+ "583234650794982848738379033597318010226151625248974524473699"
+ "941563637866604856552441632431065309199219150015729366397177"
+ "270609089591346091474506939150782160740711907964322876145597"
+ "395145650253317824445860465336707220824713684429363769920064"
+ "328717106332354307126419445673184428951466178635088943030837"
+ "800062385933485349971069564992754655393085948953856883512745"
+ "276808726026162095157115221834856892971964760467320232208335"
+ "588069531017474361045746982594856036396319417833033871766181"
+ "277368016889308069711197719469472302905853290440210418307024"
+ "687328533297123196506483109819531394653772296480087430315397"
+ "910124977426694468497871449032647123366969051087888029764547"
+ "456415615898945773195285528874803499674998405090778746309320"
+ "064107872403793733160110719300206260714233458242454046254281"
+ "635285667702843088958126476571787667820961524650778676508787"
+ "287657900313313469833862488641675238189345272301200116311311"
+ "303492219734822823456297208532453055880821528468347578839024"
+ "182302606029773658762919244232625769059672709989813876079805"
+ "901731987280611645667105082802031385796293908530864172849314"
+ "734765038966270760935051139880192249903989938642795205092207"
+ "952822973691541552895072989465910085758076040250451592417680"
+ "531245659592881584721257685461735599337168675230848625905522"
+ "537954644173568345921153170415953958626219568206031281995507"
+ "754830587823977775747100055764292205421357056446830465793611"
+ "273763808185723813453738631569497245609975712828305215965826"
+ "765053388068801916539196811808128141857281722046227535409567"
+ "591186285705821199833303929519850375909134041147203658893734"
+ "153755227136429729680819659989646998542009258703527635118557"
+ "461312447384232179849362403511141932531785089741645572777420"
+ "823800529533589278423940195407958568894264010164248006540849"
+ "160087103041996738567121092172708859342210949217088143091653"
+ "037148698668697189317909020017411070411852839836652652230104"
+ "488866928634364560949066615472075465717187751987781313900056"
+ "044708657100493771599807097662839308147951336602016088038303"
+ "870626870505976949769475176739700850740489054760418683992822"
+ "102108113039966954472254660236287017169543329420623006920875"
+ "061938087152339674093328885612297439387396288738175863458442"
+ "357873826429100480375666769347774936081994000132266037789617"
+ "679830658781791760994378526913815818404152940284873358141843"
+ "597059137957964030223538823290728128419992789364472918525589"
+ "681285724973674079560291263860105160408412185466402633325963"
+ "644349004773740071252405214227130755717722371864438087813957"
+ "049334824031598041404099084234710294086909715648810172537956"
+ "835325926716084588757074055943229897544714984821916277164996"
+ "230599856478631481011984609516445087451467976563225183485707"
+ "905749943922496442802923068967076792686823389362481124460494"
+ "704283461711793778132596522789732235020165930073010737247996"
+ "756585398791522224385870682607436284058126317337050038121079"
+ "280726961697763447828452886465665300624268272487877857547882"
+ "040348230983233787526246480631864102696170452823458479032723"
+ "578830127941292909511711557404847061107334262109213252422470"
+ "319474329457122819963756131151585297962065956542350731131832"
+ "291167683289866880335703968881847060958949006126601275397222"
+ "963545028494290493580535125944932141737036395266333000222605"
+ "399939949397684787800655350500300253367688419355690911939522"
+ "954187696262129926633159777279286294093780940318487461712750"
+ "226387000627400399639544234254491419528782664148814752549434"
+ "958379626065942049557661210343054447391632257569905575104963"
+ "151978577601750196863513705539558684739468547692356001818703"
+ "346520584228266295190510902524185553948226797601549646906331"
+ "357318702512537284414411278940348553578854011691588522553966"
+ "396992880818547561630476530111651734988588440593633173143253"
+ "379921189582756007503422520592416527801478723731289759302726"
+ "954132658111452941824189900172140279856850327867101851354527"
+ "960707100257512325083967625754750701218030688324551798845572"
+ "563961467133540032201733663397872597974240680973907443484971"
+ "336778877548334885936748221459115133124927658634325658911822"
+ "141900465275779942660530609582835893020640555401613806067868"
+ "906672403337819356286761270165163376232221193189950310375294"
+ "099272473556899577746566950896500458917467484114752398834619"
+ "916525324505134294351704317783999741553112682962362548172424"
+ "553203677298220235774592337715700123823027248783397252232365"
+ "244614123085588619381923187064661903176533571726773552842050"
+ "702937175388102506427999185259894275281676527853075648559301"
+ "546937519854064218673593564079625201315914443572667155686776"
+ "278611844814181954280005884447565767647080527522321087613093"
+ "707671162160338881533455590709990074927708052244965764744729"
+ "329916773586445274306248672389904320297548114968852625553081"
+ "569329154117394637312504479221081821827497192245673295726668"
+ "999970170051411272831657975091029205402438644968163990840352"
+ "384606029708844825109435893409052496506265196679891398538136"
+ "476438486282449805899794734239202159510526533092974155392673"
+ "110448209969504483783671382659657251334863763189986240759871"
+ "1389056234111194498836994171142578125e-4952",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0x2p-16448,
+ 0x2p-16448,
+ 0x2p-16448,
+ 0x2p-16448),
+ TEST ("9.1129988297061865063210148340485495409976270392339083593024"
+ "512175709292215834943420239017715645680129931183683680088277"
+ "549174640815550804249337701889745225137095564529448291964230"
+ "631595140838993915539064149585268223507994838838181714781019"
+ "998854320275387963459576151369217885561232382646492956705356"
+ "565551688308886521101701981493843492205658474297570333866605"
+ "298932345300005419066807300806935840975771140138244887971382"
+ "480306383029279087190728461573250887846318754007832114464683"
+ "664171452083726328092629849717599582714695998658062536715061"
+ "486659414671761410590867756059929866471508939201678361949569"
+ "105493407320443782389013421144031696166197712936581273093400"
+ "987818069535398834152409986110085052926337211200549444090110"
+ "947717190581225852922732363763307088865106375411776212774753"
+ "881242370509404376819363039948120731604116820734480620859463"
+ "053721188111541333511328522463373472526999986652124894823521"
+ "677055629197452315658307103340838430759142765166817775402542"
+ "424672713638170402336169639395588632161416761622732176576564"
+ "689048255479820989367151993310018548316769814664606197581315"
+ "042862562791300468342638911941746410076541796524707525552225"
+ "218810105957345303035393963179488682040705817772149861464367"
+ "875846321939885650620019792999548883603797914975087595720555"
+ "008891649198969277273442210230776269093622052361408012106817"
+ "903069953745909041514739880227089422181355813323880743747316"
+ "013769073985956031962404845484551938647636529313699033511745"
+ "442279141902356533018143182815187073441328510540492152576488"
+ "229985535798436239152483434901576880457556096136883541949311"
+ "550953165672585204177162938634659553875223901648885259822873"
+ "815598197021178988329613387166662012014085188285709633232513"
+ "061942105426273781618686365893871655369623538557877775965767"
+ "109785630310982604764603059355574307115163437126311616216384"
+ "242977475669012957189024924930269461826674503235685685987925"
+ "809774119784191955543740774385492835953479066971963899979438"
+ "211272068701163464704436181757668455872462574422571325034113"
+ "760130682177348501458144714636434216374798906646576252086802"
+ "190576650522584472987248024379770735540050259550986944302085"
+ "016537978874317385914557625547772714417301204338373972354274"
+ "419077120195935070346230688523551832885027881558371920399052"
+ "186032556413960972812515180755144550327091852825587440311130"
+ "369879274596217199708705082236031422718889130402045378780140"
+ "972327814060383227111423352378654611732272529152765871889754"
+ "120890173540735187244359494818495116869106087097802117296794"
+ "230636162657107764132729771811932156398134588213625909013771"
+ "355672989281159028330647620507547914707927109442806484197371"
+ "160282370564676895887174641137770747013214469567460313906231"
+ "863055876527311358559655058178010195688508347865329804729357"
+ "897103417200485899156841586760786011075803410294390125765035"
+ "920926599317258260436879683255022799187512419040453065369911"
+ "323428101759967597271722888176287261643418634944123527371986"
+ "991235954064415358673716302132700617408956418914644864212332"
+ "976051347071095204508969677769360451886970029662989435406797"
+ "409579245892705640914616364216092565465060838723454093018319"
+ "313458636362826625288516894137766424262510338430134251698122"
+ "005230434085183091834211200122610210349443542674137356176019"
+ "994661296545554711839281438920485832102187150591906236696737"
+ "090784511846412155988675390082958065319591301717494963485010"
+ "165932792068277883516946041506017760788778509260259389639323"
+ "482577101846088517553013799076262873998643533979247791914386"
+ "960081984502800508683707313453769958011319871060688162544921"
+ "322796577704456915961808005946752071556794084904878487842807"
+ "578404859150538520763286422764601209313650629444128511505177"
+ "823078798079410053668821705549172247884539912031329017420556"
+ "518079856488045326357586430559199198231719076822308881971367"
+ "856956096577769576676503111475982888204421007623288070328718"
+ "645608772303264875379950063930108312080388786177437812751905"
+ "584120030072202190891266365873672180818190597661476916755677"
+ "715854057980258925181834233866429689226159872122377094852588"
+ "295898990349864384447444388136549436618687954074375252286589"
+ "048125818566139866145014540017458695425579859498034933692028"
+ "762317180933725539105161577403467580031256943949510269316175"
+ "359789478610609381312994169116761450212882441190603620361337"
+ "401742128185995015738801892316215217037671976109410724436579"
+ "379380129538698961487878976867532145962342350850191560252504"
+ "588328537917104636518954376662039025472528325798776052476332"
+ "427970936224611080771416068440161969697007132497588046375640"
+ "310336775861665604288980226938462461877670282350726508356795"
+ "083014162348375615542992942120111083796673667263131651518958"
+ "304763295180814137547257343856489773685828509608384174334970"
+ "422481342457552997903572290775133733384303950144498613229418"
+ "397179849510232211865542364757577463809559424236059129650578"
+ "274637695590441751279797225383786991494466903311241791050376"
+ "488510955932598072576401976708615886006919314135648608248191"
+ "372656573811888893772800596985615900536551083040785709141896"
+ "296641372542336858585285155522688752251142239708098420366878"
+ "152586610030593201454626208011881281672071882478014556327250"
+ "829447091860808595318353098051073163872713705786832133739305"
+ "274057247245024850663340733036617513800734787932326379905451"
+ "641681281905937253230152460358472580273562222569806348116698"
+ "527056831689088216346583586087162394060010249474899626302057"
+ "768256926924131071156960064207129684139721916331135576180148"
+ "586965323299105282337234352989143787169680122112557687809323"
+ "099327979778140351718902363172319583042200757772513950642086"
+ "386297462185028482882268586936548025649697633305907484971486"
+ "223468552187182907218267776718819086234809172430906474927279"
+ "424906332107667190886359046554485179791303881091265489293005"
+ "803215603269635123264170125730831784388656332832186157145305"
+ "499039125566362759346764541205369778479271774262726853968049"
+ "190835636788762895037454777680406940517308675355872838184645"
+ "304120861875050177485053074785988569599549623179532516740082"
+ "254762377654894606213282493506567652669958464338099434131023"
+ "532342380354716890817886177034306313775574548031278141878295"
+ "980251853307150740536081553178646800560107856455481390160382"
+ "005461126866350869752876888962834360568840429704959648279120"
+ "254570425069854306995075705052164177031686333733533637409730"
+ "984494412360475557526051699665012526136673750101428368173353"
+ "692291950799667471134257499676684610182758435845702912870768"
+ "634362269004291803824464876008785139313163075651280377342747"
+ "514196839209631064363659625214193456598788316913732358910439"
+ "144944289890962417978739445105407297303138526378679343093624"
+ "793916741811475534377782218853134322959860449406077325705367"
+ "583234650794982848738379033597318010226151625248974524473699"
+ "941563637866604856552441632431065309199219150015729366397177"
+ "270609089591346091474506939150782160740711907964322876145597"
+ "395145650253317824445860465336707220824713684429363769920064"
+ "328717106332354307126419445673184428951466178635088943030837"
+ "800062385933485349971069564992754655393085948953856883512745"
+ "276808726026162095157115221834856892971964760467320232208335"
+ "588069531017474361045746982594856036396319417833033871766181"
+ "277368016889308069711197719469472302905853290440210418307024"
+ "687328533297123196506483109819531394653772296480087430315397"
+ "910124977426694468497871449032647123366969051087888029764547"
+ "456415615898945773195285528874803499674998405090778746309320"
+ "064107872403793733160110719300206260714233458242454046254281"
+ "635285667702843088958126476571787667820961524650778676508787"
+ "287657900313313469833862488641675238189345272301200116311311"
+ "303492219734822823456297208532453055880821528468347578839024"
+ "182302606029773658762919244232625769059672709989813876079805"
+ "901731987280611645667105082802031385796293908530864172849314"
+ "734765038966270760935051139880192249903989938642795205092207"
+ "952822973691541552895072989465910085758076040250451592417680"
+ "531245659592881584721257685461735599337168675230848625905522"
+ "537954644173568345921153170415953958626219568206031281995507"
+ "754830587823977775747100055764292205421357056446830465793611"
+ "273763808185723813453738631569497245609975712828305215965826"
+ "765053388068801916539196811808128141857281722046227535409567"
+ "591186285705821199833303929519850375909134041147203658893734"
+ "153755227136429729680819659989646998542009258703527635118557"
+ "461312447384232179849362403511141932531785089741645572777420"
+ "823800529533589278423940195407958568894264010164248006540849"
+ "160087103041996738567121092172708859342210949217088143091653"
+ "037148698668697189317909020017411070411852839836652652230104"
+ "488866928634364560949066615472075465717187751987781313900056"
+ "044708657100493771599807097662839308147951336602016088038303"
+ "870626870505976949769475176739700850740489054760418683992822"
+ "102108113039966954472254660236287017169543329420623006920875"
+ "061938087152339674093328885612297439387396288738175863458442"
+ "357873826429100480375666769347774936081994000132266037789617"
+ "679830658781791760994378526913815818404152940284873358141843"
+ "597059137957964030223538823290728128419992789364472918525589"
+ "681285724973674079560291263860105160408412185466402633325963"
+ "644349004773740071252405214227130755717722371864438087813957"
+ "049334824031598041404099084234710294086909715648810172537956"
+ "835325926716084588757074055943229897544714984821916277164996"
+ "230599856478631481011984609516445087451467976563225183485707"
+ "905749943922496442802923068967076792686823389362481124460494"
+ "704283461711793778132596522789732235020165930073010737247996"
+ "756585398791522224385870682607436284058126317337050038121079"
+ "280726961697763447828452886465665300624268272487877857547882"
+ "040348230983233787526246480631864102696170452823458479032723"
+ "578830127941292909511711557404847061107334262109213252422470"
+ "319474329457122819963756131151585297962065956542350731131832"
+ "291167683289866880335703968881847060958949006126601275397222"
+ "963545028494290493580535125944932141737036395266333000222605"
+ "399939949397684787800655350500300253367688419355690911939522"
+ "954187696262129926633159777279286294093780940318487461712750"
+ "226387000627400399639544234254491419528782664148814752549434"
+ "958379626065942049557661210343054447391632257569905575104963"
+ "151978577601750196863513705539558684739468547692356001818703"
+ "346520584228266295190510902524185553948226797601549646906331"
+ "357318702512537284414411278940348553578854011691588522553966"
+ "396992880818547561630476530111651734988588440593633173143253"
+ "379921189582756007503422520592416527801478723731289759302726"
+ "954132658111452941824189900172140279856850327867101851354527"
+ "960707100257512325083967625754750701218030688324551798845572"
+ "563961467133540032201733663397872597974240680973907443484971"
+ "336778877548334885936748221459115133124927658634325658911822"
+ "141900465275779942660530609582835893020640555401613806067868"
+ "906672403337819356286761270165163376232221193189950310375294"
+ "099272473556899577746566950896500458917467484114752398834619"
+ "916525324505134294351704317783999741553112682962362548172424"
+ "553203677298220235774592337715700123823027248783397252232365"
+ "244614123085588619381923187064661903176533571726773552842050"
+ "702937175388102506427999185259894275281676527853075648559301"
+ "546937519854064218673593564079625201315914443572667155686776"
+ "278611844814181954280005884447565767647080527522321087613093"
+ "707671162160338881533455590709990074927708052244965764744729"
+ "329916773586445274306248672389904320297548114968852625553081"
+ "569329154117394637312504479221081821827497192245673295726668"
+ "999970170051411272831657975091029205402438644968163990840352"
+ "384606029708844825109435893409052496506265196679891398538136"
+ "476438486282449805899794734239202159510526533092974155392673"
+ "110448209969504483783671382659657251334863763189986240759871"
+ "1389056234111194498836994171142578126e-4952",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x4p-16448,
+ 0x0p+0,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x2p-16448,
+ 0x2p-16448,
+ 0x2p-16448,
+ 0x2.000000000004p-16448),
+ TEST ("-9.112998829706186506321014834048549540997627039233908359302"
+ "451217570929221583494342023901771564568012993118368368008827"
+ "754917464081555080424933770188974522513709556452944829196423"
+ "063159514083899391553906414958526822350799483883818171478101"
+ "999885432027538796345957615136921788556123238264649295670535"
+ "656555168830888652110170198149384349220565847429757033386660"
+ "529893234530000541906680730080693584097577114013824488797138"
+ "248030638302927908719072846157325088784631875400783211446468"
+ "366417145208372632809262984971759958271469599865806253671506"
+ "148665941467176141059086775605992986647150893920167836194956"
+ "910549340732044378238901342114403169616619771293658127309340"
+ "098781806953539883415240998611008505292633721120054944409011"
+ "094771719058122585292273236376330708886510637541177621277475"
+ "388124237050940437681936303994812073160411682073448062085946"
+ "305372118811154133351132852246337347252699998665212489482352"
+ "167705562919745231565830710334083843075914276516681777540254"
+ "242467271363817040233616963939558863216141676162273217657656"
+ "468904825547982098936715199331001854831676981466460619758131"
+ "504286256279130046834263891194174641007654179652470752555222"
+ "521881010595734530303539396317948868204070581777214986146436"
+ "787584632193988565062001979299954888360379791497508759572055"
+ "500889164919896927727344221023077626909362205236140801210681"
+ "790306995374590904151473988022708942218135581332388074374731"
+ "601376907398595603196240484548455193864763652931369903351174"
+ "544227914190235653301814318281518707344132851054049215257648"
+ "822998553579843623915248343490157688045755609613688354194931"
+ "155095316567258520417716293863465955387522390164888525982287"
+ "381559819702117898832961338716666201201408518828570963323251"
+ "306194210542627378161868636589387165536962353855787777596576"
+ "710978563031098260476460305935557430711516343712631161621638"
+ "424297747566901295718902492493026946182667450323568568598792"
+ "580977411978419195554374077438549283595347906697196389997943"
+ "821127206870116346470443618175766845587246257442257132503411"
+ "376013068217734850145814471463643421637479890664657625208680"
+ "219057665052258447298724802437977073554005025955098694430208"
+ "501653797887431738591455762554777271441730120433837397235427"
+ "441907712019593507034623068852355183288502788155837192039905"
+ "218603255641396097281251518075514455032709185282558744031113"
+ "036987927459621719970870508223603142271888913040204537878014"
+ "097232781406038322711142335237865461173227252915276587188975"
+ "412089017354073518724435949481849511686910608709780211729679"
+ "423063616265710776413272977181193215639813458821362590901377"
+ "135567298928115902833064762050754791470792710944280648419737"
+ "116028237056467689588717464113777074701321446956746031390623"
+ "186305587652731135855965505817801019568850834786532980472935"
+ "789710341720048589915684158676078601107580341029439012576503"
+ "592092659931725826043687968325502279918751241904045306536991"
+ "132342810175996759727172288817628726164341863494412352737198"
+ "699123595406441535867371630213270061740895641891464486421233"
+ "297605134707109520450896967776936045188697002966298943540679"
+ "740957924589270564091461636421609256546506083872345409301831"
+ "931345863636282662528851689413776642426251033843013425169812"
+ "200523043408518309183421120012261021034944354267413735617601"
+ "999466129654555471183928143892048583210218715059190623669673"
+ "709078451184641215598867539008295806531959130171749496348501"
+ "016593279206827788351694604150601776078877850926025938963932"
+ "348257710184608851755301379907626287399864353397924779191438"
+ "696008198450280050868370731345376995801131987106068816254492"
+ "132279657770445691596180800594675207155679408490487848784280"
+ "757840485915053852076328642276460120931365062944412851150517"
+ "782307879807941005366882170554917224788453991203132901742055"
+ "651807985648804532635758643055919919823171907682230888197136"
+ "785695609657776957667650311147598288820442100762328807032871"
+ "864560877230326487537995006393010831208038878617743781275190"
+ "558412003007220219089126636587367218081819059766147691675567"
+ "771585405798025892518183423386642968922615987212237709485258"
+ "829589899034986438444744438813654943661868795407437525228658"
+ "904812581856613986614501454001745869542557985949803493369202"
+ "876231718093372553910516157740346758003125694394951026931617"
+ "535978947861060938131299416911676145021288244119060362036133"
+ "740174212818599501573880189231621521703767197610941072443657"
+ "937938012953869896148787897686753214596234235085019156025250"
+ "458832853791710463651895437666203902547252832579877605247633"
+ "242797093622461108077141606844016196969700713249758804637564"
+ "031033677586166560428898022693846246187767028235072650835679"
+ "508301416234837561554299294212011108379667366726313165151895"
+ "830476329518081413754725734385648977368582850960838417433497"
+ "042248134245755299790357229077513373338430395014449861322941"
+ "839717984951023221186554236475757746380955942423605912965057"
+ "827463769559044175127979722538378699149446690331124179105037"
+ "648851095593259807257640197670861588600691931413564860824819"
+ "137265657381188889377280059698561590053655108304078570914189"
+ "629664137254233685858528515552268875225114223970809842036687"
+ "815258661003059320145462620801188128167207188247801455632725"
+ "082944709186080859531835309805107316387271370578683213373930"
+ "527405724724502485066334073303661751380073478793232637990545"
+ "164168128190593725323015246035847258027356222256980634811669"
+ "852705683168908821634658358608716239406001024947489962630205"
+ "776825692692413107115696006420712968413972191633113557618014"
+ "858696532329910528233723435298914378716968012211255768780932"
+ "309932797977814035171890236317231958304220075777251395064208"
+ "638629746218502848288226858693654802564969763330590748497148"
+ "622346855218718290721826777671881908623480917243090647492727"
+ "942490633210766719088635904655448517979130388109126548929300"
+ "580321560326963512326417012573083178438865633283218615714530"
+ "549903912556636275934676454120536977847927177426272685396804"
+ "919083563678876289503745477768040694051730867535587283818464"
+ "530412086187505017748505307478598856959954962317953251674008"
+ "225476237765489460621328249350656765266995846433809943413102"
+ "353234238035471689081788617703430631377557454803127814187829"
+ "598025185330715074053608155317864680056010785645548139016038"
+ "200546112686635086975287688896283436056884042970495964827912"
+ "025457042506985430699507570505216417703168633373353363740973"
+ "098449441236047555752605169966501252613667375010142836817335"
+ "369229195079966747113425749967668461018275843584570291287076"
+ "863436226900429180382446487600878513931316307565128037734274"
+ "751419683920963106436365962521419345659878831691373235891043"
+ "914494428989096241797873944510540729730313852637867934309362"
+ "479391674181147553437778221885313432295986044940607732570536"
+ "758323465079498284873837903359731801022615162524897452447369"
+ "994156363786660485655244163243106530919921915001572936639717"
+ "727060908959134609147450693915078216074071190796432287614559"
+ "739514565025331782444586046533670722082471368442936376992006"
+ "432871710633235430712641944567318442895146617863508894303083"
+ "780006238593348534997106956499275465539308594895385688351274"
+ "527680872602616209515711522183485689297196476046732023220833"
+ "558806953101747436104574698259485603639631941783303387176618"
+ "127736801688930806971119771946947230290585329044021041830702"
+ "468732853329712319650648310981953139465377229648008743031539"
+ "791012497742669446849787144903264712336696905108788802976454"
+ "745641561589894577319528552887480349967499840509077874630932"
+ "006410787240379373316011071930020626071423345824245404625428"
+ "163528566770284308895812647657178766782096152465077867650878"
+ "728765790031331346983386248864167523818934527230120011631131"
+ "130349221973482282345629720853245305588082152846834757883902"
+ "418230260602977365876291924423262576905967270998981387607980"
+ "590173198728061164566710508280203138579629390853086417284931"
+ "473476503896627076093505113988019224990398993864279520509220"
+ "795282297369154155289507298946591008575807604025045159241768"
+ "053124565959288158472125768546173559933716867523084862590552"
+ "253795464417356834592115317041595395862621956820603128199550"
+ "775483058782397777574710005576429220542135705644683046579361"
+ "127376380818572381345373863156949724560997571282830521596582"
+ "676505338806880191653919681180812814185728172204622753540956"
+ "759118628570582119983330392951985037590913404114720365889373"
+ "415375522713642972968081965998964699854200925870352763511855"
+ "746131244738423217984936240351114193253178508974164557277742"
+ "082380052953358927842394019540795856889426401016424800654084"
+ "916008710304199673856712109217270885934221094921708814309165"
+ "303714869866869718931790902001741107041185283983665265223010"
+ "448886692863436456094906661547207546571718775198778131390005"
+ "604470865710049377159980709766283930814795133660201608803830"
+ "387062687050597694976947517673970085074048905476041868399282"
+ "210210811303996695447225466023628701716954332942062300692087"
+ "506193808715233967409332888561229743938739628873817586345844"
+ "235787382642910048037566676934777493608199400013226603778961"
+ "767983065878179176099437852691381581840415294028487335814184"
+ "359705913795796403022353882329072812841999278936447291852558"
+ "968128572497367407956029126386010516040841218546640263332596"
+ "364434900477374007125240521422713075571772237186443808781395"
+ "704933482403159804140409908423471029408690971564881017253795"
+ "683532592671608458875707405594322989754471498482191627716499"
+ "623059985647863148101198460951644508745146797656322518348570"
+ "790574994392249644280292306896707679268682338936248112446049"
+ "470428346171179377813259652278973223502016593007301073724799"
+ "675658539879152222438587068260743628405812631733705003812107"
+ "928072696169776344782845288646566530062426827248787785754788"
+ "204034823098323378752624648063186410269617045282345847903272"
+ "357883012794129290951171155740484706110733426210921325242247"
+ "031947432945712281996375613115158529796206595654235073113183"
+ "229116768328986688033570396888184706095894900612660127539722"
+ "296354502849429049358053512594493214173703639526633300022260"
+ "539993994939768478780065535050030025336768841935569091193952"
+ "295418769626212992663315977727928629409378094031848746171275"
+ "022638700062740039963954423425449141952878266414881475254943"
+ "495837962606594204955766121034305444739163225756990557510496"
+ "315197857760175019686351370553955868473946854769235600181870"
+ "334652058422826629519051090252418555394822679760154964690633"
+ "135731870251253728441441127894034855357885401169158852255396"
+ "639699288081854756163047653011165173498858844059363317314325"
+ "337992118958275600750342252059241652780147872373128975930272"
+ "695413265811145294182418990017214027985685032786710185135452"
+ "796070710025751232508396762575475070121803068832455179884557"
+ "256396146713354003220173366339787259797424068097390744348497"
+ "133677887754833488593674822145911513312492765863432565891182"
+ "214190046527577994266053060958283589302064055540161380606786"
+ "890667240333781935628676127016516337623222119318995031037529"
+ "409927247355689957774656695089650045891746748411475239883461"
+ "991652532450513429435170431778399974155311268296236254817242"
+ "455320367729822023577459233771570012382302724878339725223236"
+ "524461412308558861938192318706466190317653357172677355284205"
+ "070293717538810250642799918525989427528167652785307564855930"
+ "154693751985406421867359356407962520131591444357266715568677"
+ "627861184481418195428000588444756576764708052752232108761309"
+ "370767116216033888153345559070999007492770805224496576474472"
+ "932991677358644527430624867238990432029754811496885262555308"
+ "156932915411739463731250447922108182182749719224567329572666"
+ "899997017005141127283165797509102920540243864496816399084035"
+ "238460602970884482510943589340905249650626519667989139853813"
+ "647643848628244980589979473423920215951052653309297415539267"
+ "311044820996950448378367138265965725133486376318998624075987"
+ "11389056234111194498836994171142578124e-4952",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x2p-16448,
+ -0x2p-16448,
+ -0x1.fffffffffffcp-16448,
+ -0x1.fffffffffffcp-16448),
+ TEST ("-9.112998829706186506321014834048549540997627039233908359302"
+ "451217570929221583494342023901771564568012993118368368008827"
+ "754917464081555080424933770188974522513709556452944829196423"
+ "063159514083899391553906414958526822350799483883818171478101"
+ "999885432027538796345957615136921788556123238264649295670535"
+ "656555168830888652110170198149384349220565847429757033386660"
+ "529893234530000541906680730080693584097577114013824488797138"
+ "248030638302927908719072846157325088784631875400783211446468"
+ "366417145208372632809262984971759958271469599865806253671506"
+ "148665941467176141059086775605992986647150893920167836194956"
+ "910549340732044378238901342114403169616619771293658127309340"
+ "098781806953539883415240998611008505292633721120054944409011"
+ "094771719058122585292273236376330708886510637541177621277475"
+ "388124237050940437681936303994812073160411682073448062085946"
+ "305372118811154133351132852246337347252699998665212489482352"
+ "167705562919745231565830710334083843075914276516681777540254"
+ "242467271363817040233616963939558863216141676162273217657656"
+ "468904825547982098936715199331001854831676981466460619758131"
+ "504286256279130046834263891194174641007654179652470752555222"
+ "521881010595734530303539396317948868204070581777214986146436"
+ "787584632193988565062001979299954888360379791497508759572055"
+ "500889164919896927727344221023077626909362205236140801210681"
+ "790306995374590904151473988022708942218135581332388074374731"
+ "601376907398595603196240484548455193864763652931369903351174"
+ "544227914190235653301814318281518707344132851054049215257648"
+ "822998553579843623915248343490157688045755609613688354194931"
+ "155095316567258520417716293863465955387522390164888525982287"
+ "381559819702117898832961338716666201201408518828570963323251"
+ "306194210542627378161868636589387165536962353855787777596576"
+ "710978563031098260476460305935557430711516343712631161621638"
+ "424297747566901295718902492493026946182667450323568568598792"
+ "580977411978419195554374077438549283595347906697196389997943"
+ "821127206870116346470443618175766845587246257442257132503411"
+ "376013068217734850145814471463643421637479890664657625208680"
+ "219057665052258447298724802437977073554005025955098694430208"
+ "501653797887431738591455762554777271441730120433837397235427"
+ "441907712019593507034623068852355183288502788155837192039905"
+ "218603255641396097281251518075514455032709185282558744031113"
+ "036987927459621719970870508223603142271888913040204537878014"
+ "097232781406038322711142335237865461173227252915276587188975"
+ "412089017354073518724435949481849511686910608709780211729679"
+ "423063616265710776413272977181193215639813458821362590901377"
+ "135567298928115902833064762050754791470792710944280648419737"
+ "116028237056467689588717464113777074701321446956746031390623"
+ "186305587652731135855965505817801019568850834786532980472935"
+ "789710341720048589915684158676078601107580341029439012576503"
+ "592092659931725826043687968325502279918751241904045306536991"
+ "132342810175996759727172288817628726164341863494412352737198"
+ "699123595406441535867371630213270061740895641891464486421233"
+ "297605134707109520450896967776936045188697002966298943540679"
+ "740957924589270564091461636421609256546506083872345409301831"
+ "931345863636282662528851689413776642426251033843013425169812"
+ "200523043408518309183421120012261021034944354267413735617601"
+ "999466129654555471183928143892048583210218715059190623669673"
+ "709078451184641215598867539008295806531959130171749496348501"
+ "016593279206827788351694604150601776078877850926025938963932"
+ "348257710184608851755301379907626287399864353397924779191438"
+ "696008198450280050868370731345376995801131987106068816254492"
+ "132279657770445691596180800594675207155679408490487848784280"
+ "757840485915053852076328642276460120931365062944412851150517"
+ "782307879807941005366882170554917224788453991203132901742055"
+ "651807985648804532635758643055919919823171907682230888197136"
+ "785695609657776957667650311147598288820442100762328807032871"
+ "864560877230326487537995006393010831208038878617743781275190"
+ "558412003007220219089126636587367218081819059766147691675567"
+ "771585405798025892518183423386642968922615987212237709485258"
+ "829589899034986438444744438813654943661868795407437525228658"
+ "904812581856613986614501454001745869542557985949803493369202"
+ "876231718093372553910516157740346758003125694394951026931617"
+ "535978947861060938131299416911676145021288244119060362036133"
+ "740174212818599501573880189231621521703767197610941072443657"
+ "937938012953869896148787897686753214596234235085019156025250"
+ "458832853791710463651895437666203902547252832579877605247633"
+ "242797093622461108077141606844016196969700713249758804637564"
+ "031033677586166560428898022693846246187767028235072650835679"
+ "508301416234837561554299294212011108379667366726313165151895"
+ "830476329518081413754725734385648977368582850960838417433497"
+ "042248134245755299790357229077513373338430395014449861322941"
+ "839717984951023221186554236475757746380955942423605912965057"
+ "827463769559044175127979722538378699149446690331124179105037"
+ "648851095593259807257640197670861588600691931413564860824819"
+ "137265657381188889377280059698561590053655108304078570914189"
+ "629664137254233685858528515552268875225114223970809842036687"
+ "815258661003059320145462620801188128167207188247801455632725"
+ "082944709186080859531835309805107316387271370578683213373930"
+ "527405724724502485066334073303661751380073478793232637990545"
+ "164168128190593725323015246035847258027356222256980634811669"
+ "852705683168908821634658358608716239406001024947489962630205"
+ "776825692692413107115696006420712968413972191633113557618014"
+ "858696532329910528233723435298914378716968012211255768780932"
+ "309932797977814035171890236317231958304220075777251395064208"
+ "638629746218502848288226858693654802564969763330590748497148"
+ "622346855218718290721826777671881908623480917243090647492727"
+ "942490633210766719088635904655448517979130388109126548929300"
+ "580321560326963512326417012573083178438865633283218615714530"
+ "549903912556636275934676454120536977847927177426272685396804"
+ "919083563678876289503745477768040694051730867535587283818464"
+ "530412086187505017748505307478598856959954962317953251674008"
+ "225476237765489460621328249350656765266995846433809943413102"
+ "353234238035471689081788617703430631377557454803127814187829"
+ "598025185330715074053608155317864680056010785645548139016038"
+ "200546112686635086975287688896283436056884042970495964827912"
+ "025457042506985430699507570505216417703168633373353363740973"
+ "098449441236047555752605169966501252613667375010142836817335"
+ "369229195079966747113425749967668461018275843584570291287076"
+ "863436226900429180382446487600878513931316307565128037734274"
+ "751419683920963106436365962521419345659878831691373235891043"
+ "914494428989096241797873944510540729730313852637867934309362"
+ "479391674181147553437778221885313432295986044940607732570536"
+ "758323465079498284873837903359731801022615162524897452447369"
+ "994156363786660485655244163243106530919921915001572936639717"
+ "727060908959134609147450693915078216074071190796432287614559"
+ "739514565025331782444586046533670722082471368442936376992006"
+ "432871710633235430712641944567318442895146617863508894303083"
+ "780006238593348534997106956499275465539308594895385688351274"
+ "527680872602616209515711522183485689297196476046732023220833"
+ "558806953101747436104574698259485603639631941783303387176618"
+ "127736801688930806971119771946947230290585329044021041830702"
+ "468732853329712319650648310981953139465377229648008743031539"
+ "791012497742669446849787144903264712336696905108788802976454"
+ "745641561589894577319528552887480349967499840509077874630932"
+ "006410787240379373316011071930020626071423345824245404625428"
+ "163528566770284308895812647657178766782096152465077867650878"
+ "728765790031331346983386248864167523818934527230120011631131"
+ "130349221973482282345629720853245305588082152846834757883902"
+ "418230260602977365876291924423262576905967270998981387607980"
+ "590173198728061164566710508280203138579629390853086417284931"
+ "473476503896627076093505113988019224990398993864279520509220"
+ "795282297369154155289507298946591008575807604025045159241768"
+ "053124565959288158472125768546173559933716867523084862590552"
+ "253795464417356834592115317041595395862621956820603128199550"
+ "775483058782397777574710005576429220542135705644683046579361"
+ "127376380818572381345373863156949724560997571282830521596582"
+ "676505338806880191653919681180812814185728172204622753540956"
+ "759118628570582119983330392951985037590913404114720365889373"
+ "415375522713642972968081965998964699854200925870352763511855"
+ "746131244738423217984936240351114193253178508974164557277742"
+ "082380052953358927842394019540795856889426401016424800654084"
+ "916008710304199673856712109217270885934221094921708814309165"
+ "303714869866869718931790902001741107041185283983665265223010"
+ "448886692863436456094906661547207546571718775198778131390005"
+ "604470865710049377159980709766283930814795133660201608803830"
+ "387062687050597694976947517673970085074048905476041868399282"
+ "210210811303996695447225466023628701716954332942062300692087"
+ "506193808715233967409332888561229743938739628873817586345844"
+ "235787382642910048037566676934777493608199400013226603778961"
+ "767983065878179176099437852691381581840415294028487335814184"
+ "359705913795796403022353882329072812841999278936447291852558"
+ "968128572497367407956029126386010516040841218546640263332596"
+ "364434900477374007125240521422713075571772237186443808781395"
+ "704933482403159804140409908423471029408690971564881017253795"
+ "683532592671608458875707405594322989754471498482191627716499"
+ "623059985647863148101198460951644508745146797656322518348570"
+ "790574994392249644280292306896707679268682338936248112446049"
+ "470428346171179377813259652278973223502016593007301073724799"
+ "675658539879152222438587068260743628405812631733705003812107"
+ "928072696169776344782845288646566530062426827248787785754788"
+ "204034823098323378752624648063186410269617045282345847903272"
+ "357883012794129290951171155740484706110733426210921325242247"
+ "031947432945712281996375613115158529796206595654235073113183"
+ "229116768328986688033570396888184706095894900612660127539722"
+ "296354502849429049358053512594493214173703639526633300022260"
+ "539993994939768478780065535050030025336768841935569091193952"
+ "295418769626212992663315977727928629409378094031848746171275"
+ "022638700062740039963954423425449141952878266414881475254943"
+ "495837962606594204955766121034305444739163225756990557510496"
+ "315197857760175019686351370553955868473946854769235600181870"
+ "334652058422826629519051090252418555394822679760154964690633"
+ "135731870251253728441441127894034855357885401169158852255396"
+ "639699288081854756163047653011165173498858844059363317314325"
+ "337992118958275600750342252059241652780147872373128975930272"
+ "695413265811145294182418990017214027985685032786710185135452"
+ "796070710025751232508396762575475070121803068832455179884557"
+ "256396146713354003220173366339787259797424068097390744348497"
+ "133677887754833488593674822145911513312492765863432565891182"
+ "214190046527577994266053060958283589302064055540161380606786"
+ "890667240333781935628676127016516337623222119318995031037529"
+ "409927247355689957774656695089650045891746748411475239883461"
+ "991652532450513429435170431778399974155311268296236254817242"
+ "455320367729822023577459233771570012382302724878339725223236"
+ "524461412308558861938192318706466190317653357172677355284205"
+ "070293717538810250642799918525989427528167652785307564855930"
+ "154693751985406421867359356407962520131591444357266715568677"
+ "627861184481418195428000588444756576764708052752232108761309"
+ "370767116216033888153345559070999007492770805224496576474472"
+ "932991677358644527430624867238990432029754811496885262555308"
+ "156932915411739463731250447922108182182749719224567329572666"
+ "899997017005141127283165797509102920540243864496816399084035"
+ "238460602970884482510943589340905249650626519667989139853813"
+ "647643848628244980589979473423920215951052653309297415539267"
+ "311044820996950448378367138265965725133486376318998624075987"
+ "11389056234111194498836994171142578125e-4952",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x2p-16448,
+ -0x2p-16448,
+ -0x2p-16448,
+ -0x2p-16448),
+ TEST ("-9.112998829706186506321014834048549540997627039233908359302"
+ "451217570929221583494342023901771564568012993118368368008827"
+ "754917464081555080424933770188974522513709556452944829196423"
+ "063159514083899391553906414958526822350799483883818171478101"
+ "999885432027538796345957615136921788556123238264649295670535"
+ "656555168830888652110170198149384349220565847429757033386660"
+ "529893234530000541906680730080693584097577114013824488797138"
+ "248030638302927908719072846157325088784631875400783211446468"
+ "366417145208372632809262984971759958271469599865806253671506"
+ "148665941467176141059086775605992986647150893920167836194956"
+ "910549340732044378238901342114403169616619771293658127309340"
+ "098781806953539883415240998611008505292633721120054944409011"
+ "094771719058122585292273236376330708886510637541177621277475"
+ "388124237050940437681936303994812073160411682073448062085946"
+ "305372118811154133351132852246337347252699998665212489482352"
+ "167705562919745231565830710334083843075914276516681777540254"
+ "242467271363817040233616963939558863216141676162273217657656"
+ "468904825547982098936715199331001854831676981466460619758131"
+ "504286256279130046834263891194174641007654179652470752555222"
+ "521881010595734530303539396317948868204070581777214986146436"
+ "787584632193988565062001979299954888360379791497508759572055"
+ "500889164919896927727344221023077626909362205236140801210681"
+ "790306995374590904151473988022708942218135581332388074374731"
+ "601376907398595603196240484548455193864763652931369903351174"
+ "544227914190235653301814318281518707344132851054049215257648"
+ "822998553579843623915248343490157688045755609613688354194931"
+ "155095316567258520417716293863465955387522390164888525982287"
+ "381559819702117898832961338716666201201408518828570963323251"
+ "306194210542627378161868636589387165536962353855787777596576"
+ "710978563031098260476460305935557430711516343712631161621638"
+ "424297747566901295718902492493026946182667450323568568598792"
+ "580977411978419195554374077438549283595347906697196389997943"
+ "821127206870116346470443618175766845587246257442257132503411"
+ "376013068217734850145814471463643421637479890664657625208680"
+ "219057665052258447298724802437977073554005025955098694430208"
+ "501653797887431738591455762554777271441730120433837397235427"
+ "441907712019593507034623068852355183288502788155837192039905"
+ "218603255641396097281251518075514455032709185282558744031113"
+ "036987927459621719970870508223603142271888913040204537878014"
+ "097232781406038322711142335237865461173227252915276587188975"
+ "412089017354073518724435949481849511686910608709780211729679"
+ "423063616265710776413272977181193215639813458821362590901377"
+ "135567298928115902833064762050754791470792710944280648419737"
+ "116028237056467689588717464113777074701321446956746031390623"
+ "186305587652731135855965505817801019568850834786532980472935"
+ "789710341720048589915684158676078601107580341029439012576503"
+ "592092659931725826043687968325502279918751241904045306536991"
+ "132342810175996759727172288817628726164341863494412352737198"
+ "699123595406441535867371630213270061740895641891464486421233"
+ "297605134707109520450896967776936045188697002966298943540679"
+ "740957924589270564091461636421609256546506083872345409301831"
+ "931345863636282662528851689413776642426251033843013425169812"
+ "200523043408518309183421120012261021034944354267413735617601"
+ "999466129654555471183928143892048583210218715059190623669673"
+ "709078451184641215598867539008295806531959130171749496348501"
+ "016593279206827788351694604150601776078877850926025938963932"
+ "348257710184608851755301379907626287399864353397924779191438"
+ "696008198450280050868370731345376995801131987106068816254492"
+ "132279657770445691596180800594675207155679408490487848784280"
+ "757840485915053852076328642276460120931365062944412851150517"
+ "782307879807941005366882170554917224788453991203132901742055"
+ "651807985648804532635758643055919919823171907682230888197136"
+ "785695609657776957667650311147598288820442100762328807032871"
+ "864560877230326487537995006393010831208038878617743781275190"
+ "558412003007220219089126636587367218081819059766147691675567"
+ "771585405798025892518183423386642968922615987212237709485258"
+ "829589899034986438444744438813654943661868795407437525228658"
+ "904812581856613986614501454001745869542557985949803493369202"
+ "876231718093372553910516157740346758003125694394951026931617"
+ "535978947861060938131299416911676145021288244119060362036133"
+ "740174212818599501573880189231621521703767197610941072443657"
+ "937938012953869896148787897686753214596234235085019156025250"
+ "458832853791710463651895437666203902547252832579877605247633"
+ "242797093622461108077141606844016196969700713249758804637564"
+ "031033677586166560428898022693846246187767028235072650835679"
+ "508301416234837561554299294212011108379667366726313165151895"
+ "830476329518081413754725734385648977368582850960838417433497"
+ "042248134245755299790357229077513373338430395014449861322941"
+ "839717984951023221186554236475757746380955942423605912965057"
+ "827463769559044175127979722538378699149446690331124179105037"
+ "648851095593259807257640197670861588600691931413564860824819"
+ "137265657381188889377280059698561590053655108304078570914189"
+ "629664137254233685858528515552268875225114223970809842036687"
+ "815258661003059320145462620801188128167207188247801455632725"
+ "082944709186080859531835309805107316387271370578683213373930"
+ "527405724724502485066334073303661751380073478793232637990545"
+ "164168128190593725323015246035847258027356222256980634811669"
+ "852705683168908821634658358608716239406001024947489962630205"
+ "776825692692413107115696006420712968413972191633113557618014"
+ "858696532329910528233723435298914378716968012211255768780932"
+ "309932797977814035171890236317231958304220075777251395064208"
+ "638629746218502848288226858693654802564969763330590748497148"
+ "622346855218718290721826777671881908623480917243090647492727"
+ "942490633210766719088635904655448517979130388109126548929300"
+ "580321560326963512326417012573083178438865633283218615714530"
+ "549903912556636275934676454120536977847927177426272685396804"
+ "919083563678876289503745477768040694051730867535587283818464"
+ "530412086187505017748505307478598856959954962317953251674008"
+ "225476237765489460621328249350656765266995846433809943413102"
+ "353234238035471689081788617703430631377557454803127814187829"
+ "598025185330715074053608155317864680056010785645548139016038"
+ "200546112686635086975287688896283436056884042970495964827912"
+ "025457042506985430699507570505216417703168633373353363740973"
+ "098449441236047555752605169966501252613667375010142836817335"
+ "369229195079966747113425749967668461018275843584570291287076"
+ "863436226900429180382446487600878513931316307565128037734274"
+ "751419683920963106436365962521419345659878831691373235891043"
+ "914494428989096241797873944510540729730313852637867934309362"
+ "479391674181147553437778221885313432295986044940607732570536"
+ "758323465079498284873837903359731801022615162524897452447369"
+ "994156363786660485655244163243106530919921915001572936639717"
+ "727060908959134609147450693915078216074071190796432287614559"
+ "739514565025331782444586046533670722082471368442936376992006"
+ "432871710633235430712641944567318442895146617863508894303083"
+ "780006238593348534997106956499275465539308594895385688351274"
+ "527680872602616209515711522183485689297196476046732023220833"
+ "558806953101747436104574698259485603639631941783303387176618"
+ "127736801688930806971119771946947230290585329044021041830702"
+ "468732853329712319650648310981953139465377229648008743031539"
+ "791012497742669446849787144903264712336696905108788802976454"
+ "745641561589894577319528552887480349967499840509077874630932"
+ "006410787240379373316011071930020626071423345824245404625428"
+ "163528566770284308895812647657178766782096152465077867650878"
+ "728765790031331346983386248864167523818934527230120011631131"
+ "130349221973482282345629720853245305588082152846834757883902"
+ "418230260602977365876291924423262576905967270998981387607980"
+ "590173198728061164566710508280203138579629390853086417284931"
+ "473476503896627076093505113988019224990398993864279520509220"
+ "795282297369154155289507298946591008575807604025045159241768"
+ "053124565959288158472125768546173559933716867523084862590552"
+ "253795464417356834592115317041595395862621956820603128199550"
+ "775483058782397777574710005576429220542135705644683046579361"
+ "127376380818572381345373863156949724560997571282830521596582"
+ "676505338806880191653919681180812814185728172204622753540956"
+ "759118628570582119983330392951985037590913404114720365889373"
+ "415375522713642972968081965998964699854200925870352763511855"
+ "746131244738423217984936240351114193253178508974164557277742"
+ "082380052953358927842394019540795856889426401016424800654084"
+ "916008710304199673856712109217270885934221094921708814309165"
+ "303714869866869718931790902001741107041185283983665265223010"
+ "448886692863436456094906661547207546571718775198778131390005"
+ "604470865710049377159980709766283930814795133660201608803830"
+ "387062687050597694976947517673970085074048905476041868399282"
+ "210210811303996695447225466023628701716954332942062300692087"
+ "506193808715233967409332888561229743938739628873817586345844"
+ "235787382642910048037566676934777493608199400013226603778961"
+ "767983065878179176099437852691381581840415294028487335814184"
+ "359705913795796403022353882329072812841999278936447291852558"
+ "968128572497367407956029126386010516040841218546640263332596"
+ "364434900477374007125240521422713075571772237186443808781395"
+ "704933482403159804140409908423471029408690971564881017253795"
+ "683532592671608458875707405594322989754471498482191627716499"
+ "623059985647863148101198460951644508745146797656322518348570"
+ "790574994392249644280292306896707679268682338936248112446049"
+ "470428346171179377813259652278973223502016593007301073724799"
+ "675658539879152222438587068260743628405812631733705003812107"
+ "928072696169776344782845288646566530062426827248787785754788"
+ "204034823098323378752624648063186410269617045282345847903272"
+ "357883012794129290951171155740484706110733426210921325242247"
+ "031947432945712281996375613115158529796206595654235073113183"
+ "229116768328986688033570396888184706095894900612660127539722"
+ "296354502849429049358053512594493214173703639526633300022260"
+ "539993994939768478780065535050030025336768841935569091193952"
+ "295418769626212992663315977727928629409378094031848746171275"
+ "022638700062740039963954423425449141952878266414881475254943"
+ "495837962606594204955766121034305444739163225756990557510496"
+ "315197857760175019686351370553955868473946854769235600181870"
+ "334652058422826629519051090252418555394822679760154964690633"
+ "135731870251253728441441127894034855357885401169158852255396"
+ "639699288081854756163047653011165173498858844059363317314325"
+ "337992118958275600750342252059241652780147872373128975930272"
+ "695413265811145294182418990017214027985685032786710185135452"
+ "796070710025751232508396762575475070121803068832455179884557"
+ "256396146713354003220173366339787259797424068097390744348497"
+ "133677887754833488593674822145911513312492765863432565891182"
+ "214190046527577994266053060958283589302064055540161380606786"
+ "890667240333781935628676127016516337623222119318995031037529"
+ "409927247355689957774656695089650045891746748411475239883461"
+ "991652532450513429435170431778399974155311268296236254817242"
+ "455320367729822023577459233771570012382302724878339725223236"
+ "524461412308558861938192318706466190317653357172677355284205"
+ "070293717538810250642799918525989427528167652785307564855930"
+ "154693751985406421867359356407962520131591444357266715568677"
+ "627861184481418195428000588444756576764708052752232108761309"
+ "370767116216033888153345559070999007492770805224496576474472"
+ "932991677358644527430624867238990432029754811496885262555308"
+ "156932915411739463731250447922108182182749719224567329572666"
+ "899997017005141127283165797509102920540243864496816399084035"
+ "238460602970884482510943589340905249650626519667989139853813"
+ "647643848628244980589979473423920215951052653309297415539267"
+ "311044820996950448378367138265965725133486376318998624075987"
+ "11389056234111194498836994171142578126e-4952",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x2.000000000004p-16448,
+ -0x2p-16448,
+ -0x2p-16448,
+ -0x2p-16448),
+ TEST ("3.2375875597190125554622194791138232762497846690173405048449"
+ "421945985197700620596855088357456383249701279390707384240598"
+ "382936099431912710233425550359863089915213963553756674672083"
+ "673128192358701197242632527769951957277781260855740340354110"
+ "173441284912381364143945515141786687806740155311932822963199"
+ "131134959539539338316310328556057915323285980341541664226172"
+ "265348802632447238304822896568757017013159021750199744350376"
+ "278243566840330589397015778833566517337174685312047058426075"
+ "688036665697114219175258344917835835984013214761767520398571"
+ "735519302688914468501077605843338555214753050109407568139932"
+ "147308502166696009676987494125921676927574464221699654264839"
+ "192243410627511520570610765229732327315423820550872393685221"
+ "676561948307418196052769717057382723931306989375320957256133"
+ "838073129463951849807075348034900035402513943244599879584009"
+ "391110011261908615236154859382854977144106096407982738165117"
+ "693915685918231984764157652755343417097983676870433731452629"
+ "339981084526616826599425863049784138127555181662391766144738"
+ "159400253422795753041594932607700680306368857466952063923782"
+ "760519487592638820793893796669403574411398166619131986561877"
+ "034635197232626532239192571857518274939275861531537920777299"
+ "133535479548088762634002006634954143608168633852204577195463"
+ "389533233992867620995583241321034602255800668175356808869060"
+ "608582640890741203603916133682748118680676374951545690715916"
+ "241859799379894025137504643469040366684778763795442214328000"
+ "375999444991619403217748350277527106812175542863660436614910"
+ "135938862296156144947361864759321605496309393905421651264941"
+ "669606814994816518612155298709843817262034769175075602668866"
+ "926449523554218142013501373514352370369126244144449924971423"
+ "038024236058971106053649565799145071085840022305247663313482"
+ "714565918140785997808209749619683146844964283106915422726638"
+ "184861327711776708749278315100024436584176080783836115268999"
+ "055336294569042349971163039294272620322160728879610722678506"
+ "182344928526064885227397447578450046944618127903428943538029"
+ "386719288345854473283987116842451647036255801966780244103035"
+ "425445345127067921349083698736056197567752071915587544133815"
+ "717564310032485290205726480489464589999677885266171263493459"
+ "668963623768410922688414177814149693150024191921819721215688"
+ "114324591287371281400636455584825253000890602388603923710921"
+ "026880979879158388608823700222683123228822356907857261909150"
+ "626993825760416437415551396973489279578569909699853422995997"
+ "974315036153120383930698087773157253674975950409660938084071"
+ "173163693891122166282318691732176374528554627905530306369204"
+ "877964658806333996327938827344733821685425961846791581492287"
+ "250044047142934607523718654369478552373072400018635730811749"
+ "291666457582760812726851561001954207941547404866373158231367"
+ "986951247388733285659455982411993350593989550494594498447410"
+ "984783303191128659803467713819821511544998464785455306500918"
+ "241648925913966507036336000231915215026183799886938007038845"
+ "551916478649593272604688927931953165785101738164060543643192"
+ "949066412847647883846835866623820426428526541564774787007791"
+ "235843699657232847114093617412355486871810526396392792853731"
+ "390841657984518997639795008374280777823099107035223998600103"
+ "103211166230289241182380237703814248941627178152962100972452"
+ "217697144954497443279450919433943252592977710901289696002698"
+ "225209041938801190947812141758873162203113090284565687499100"
+ "109623665868340184032428667217835198069330185880779776269137"
+ "742366802202585247113480377505916462865316253065105837519292"
+ "805411191872195967066157363040364443666632564266439033866945"
+ "366496486863801221986778957510023272290593640187551645170603"
+ "215150911733580059874983597994671388176488814794186236946834"
+ "548816837468411497151813344980969677026131105901402313456769"
+ "561412278508799050185582199844418197980544632067644131002512"
+ "557755358307705356209461595354064971347590431926479961905129"
+ "785864961996560707071051177738535042777950247546470241655891"
+ "294428226271478689174637951663865529219133988782700199051475"
+ "108495188941141025360733690471601309904116260484264378352956"
+ "830972782977747351810451586166745640802378131466232692150196"
+ "132319386267589275314909450293562079332893638471814389025392"
+ "970579695249613486078445695214422379148991006996109216699215"
+ "721671648754881325271879493185438097033881789311707997697928"
+ "860866812849648616086569281093053695399558469641977866770538"
+ "476039621947215238679930485285585513808236992918733520331110"
+ "962448142457896209307561142289713638388281085340301520317159"
+ "297224995464365477734040179470355969363384621039467975256670"
+ "339354334892926205316491997244008324897517881293654265688813"
+ "283579663372924392043825371743576754041055802440187836850412"
+ "247984570221893156921757872572872036331343007592090605703195"
+ "088864753777199111760713027328198781654685927174063882187275"
+ "850263521274368447629947228263907797373221137688424821608129"
+ "731003236738630502344377228987961455961818623205503012858619"
+ "800521948637807438081069469400793496307826769301971342062597"
+ "391253779410607511754278887744936774785938056823221738917303"
+ "119592848951788560393540150358649310736020595310015728915288"
+ "289821678102453433273888879288862086153270028346900686360943"
+ "250522514297816412678213672667152836436597491522644579383191"
+ "851483036048273636234050603745735057899230038434384361744893"
+ "838050985090837220507663282503497932038372021626246900935334"
+ "781144388106031405650705176699646299475436084049881780196520"
+ "881623075256119318210664937469946410480660118598143375898298"
+ "965497205621170906772915413181530577151676241283182977713765"
+ "317889730886996471681592298058774155948285325398399674640645"
+ "566475947058303746531133735308766583802401453804232106737787"
+ "768035926272312574958173945816077962772826443125107145322971"
+ "087220172175473177449006473180221085709470643042801004189714"
+ "505520073568915195232936144169440163547568663500508335014169"
+ "425050712038101167190534305435310279534374364467455668392421"
+ "298604104431988622194699721632249712583483143417550152131186"
+ "288827131347662976240916448058011869761525369135147129192405"
+ "037216807405860168320999468074663117771890506566769628495813"
+ "837909047220874786467663205170561835819702362482274133227483"
+ "041342457179876653773960112367066273208176545656826800069574"
+ "547599816180234764485446735080683694920665668954370505715843"
+ "455110709594838989387382250502925336743830916124954071268053"
+ "817964873658921319164268375226716232666274830656557657055342"
+ "393552148933959057023293404027940528842591460490646295820755"
+ "765633076707491896621769767253619370462005760078938144396953"
+ "018925287611875441613896820035092167912718365454954166761481"
+ "511451950826683236776211829914518353242818636196417736206010"
+ "145109509967467266157037719712666871515644277723594273405669"
+ "093518586548079997818085130346801040781966074621669280188633"
+ "856299289656492439545033914935979634179552686396067914528336"
+ "924678729357419403624798426886422277256625046946795576781709"
+ "298737741510378578072199383561520569978396254537274419476511"
+ "983161908266152660163477408756159700314280122283281906103567"
+ "067156627222418787671312246698375736071215395722993294041012"
+ "744631560602983489316782773611740570974847045870362276861106"
+ "774130949410119612624380274679529647271294627526939490197641"
+ "645383447755544661714281218489998189691140343327976729279891"
+ "077101372792811842951182338559423852563331641533781432796742"
+ "873181364582071661749961126386895359760476172215209100274274"
+ "851619657020388051618654944574445941780637669570374280535432"
+ "399157923698778110534174856844986671232161320063786308144771"
+ "068130888985636449091787794632959555876880672773686838364706"
+ "122084832995722603440165161942472322987408003421165899848443"
+ "566885769845535074102932500939450142098799833145629484519298"
+ "622410092757836842296697186410137365818568152771850732591405"
+ "340248509247875448717161746544246407280913725135059228268131"
+ "453903691495906528862410006254958805237716723952273129715780"
+ "425223305517882562616830806755498203755676925741529569939445"
+ "043490046171854709456730491532189688306135861932534903184518"
+ "717706426178028900836080044604143054210332610482947502104703"
+ "032028463320549525316174330585387581543470878545616097381416"
+ "151451037487775797335749896735101048367502483255117772375025"
+ "269956476872153642623856062175536913321594213515989059505375"
+ "135183515207096576145781316398544325320022366962008554087665"
+ "201050763789833457082359181807492731245904330245198691471329"
+ "319324627030678762142685799400660305214140453863665517807185"
+ "105354694177602424937823924511789133225030926924236498557565"
+ "212794565582753399214908928688568628950225640472058381324292"
+ "866007645368390366981937596341868992912741319342960598330486"
+ "905946276235953206760977215407164729909506118583728562718724"
+ "235732515062300426080741679038098122641980345051854359908213"
+ "563779664847422505775922437272989231878912994048540484468227"
+ "199282393172540734295329890896755037903724644870572648941076"
+ "132423009124870700536763793881894969000042397318202298868940"
+ "530196108237639578098191879486398269734335286831689173606327"
+ "500405178476864790935386838169242131756729797688220656276969"
+ "434749140204830563840068728357383111109865861495106613619153"
+ "421725274090787422508800568671498311491210197298472420373359"
+ "044400631309819996507004167876832936101195902219429743174557"
+ "163362274547892397934880322990633165889175059124060202200452"
+ "648684577182821651588921716304707095995039972827781680978274"
+ "973838841958209215836456212939412000456040621743349981715350"
+ "305133662772937143899882197561295808685181679238411733642697"
+ "748892466944352640514849114619882270112386610376024527101889"
+ "119004382703622803911212700216792471528793241950356942780714"
+ "774957204475130171711488773121937363663487116301055073658645"
+ "980695862570269762957141239436916216723776945522480189876803"
+ "386123827956059851911061129713987960026363403936931196519733"
+ "447116468545744829997003979525368783485129837821983305137448"
+ "031689360764270759437872004895754351479890333865299565515706"
+ "690471030702230767978923298480584997256328135245813726407464"
+ "159230169328539541524724878662873185450510653764301207480799"
+ "488602832618557388369552461881286225098286358672257087829660"
+ "174231705350465091313887538950130611513878400895128618426154"
+ "417299623157313010877679890009181366178705821415173309356192"
+ "686429159835537275875876767919535369607142366878476025895389"
+ "279625854409611312402187942369446302119309705461187450803468"
+ "606366203101933821675974655441744883993796837164178911391575"
+ "751463591650231265941242686108002052587760190005508737394014"
+ "453031299745602214380618917954427803281262300931789525045703"
+ "809571995929933387196864877982754748535701000330924817431298"
+ "365273697561943437891318220691072831562717726798635382168915"
+ "187137325209768346284183473712613689334546294053718697897526"
+ "843398053681374508250012035211936425982389543291022583173280"
+ "985811169783438836113209408147936547458073361625570571955232"
+ "746103236016857123149307991441916732438322836596693687161268"
+ "151183603534413030099360835441935243365729307681545065674775"
+ "655582111435085683962037818795920337874290127531069511296530"
+ "746308404963763022896682861683252995925040540038039172626001"
+ "958340013361801588367655990575379797454237110701588716509764"
+ "759243657077584013289594787913434812509790293636440469725564"
+ "222946985585616708175959944099853232059130350099233608207347"
+ "955460820122006976717445739825352919058005528371183277021250"
+ "186916447745609162301667393077050176560656798672598371789181"
+ "232542195795945358691713761483976100058707499929103557275695"
+ "937295677892604799308353051124627278706035295473126217205599"
+ "530746756205492173148619619059839609108464715691924592576481"
+ "382126740168148453274964955074129767533813576349605298268179"
+ "068244338581354855186516322703199278802275718580352103754433"
+ "240982354636196477238624205575823556321375833700666021556412"
+ "182358152808745703724362178773168996492870519432472065091133"
+ "11767578124e-4966",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16496),
+ TEST ("3.2375875597190125554622194791138232762497846690173405048449"
+ "421945985197700620596855088357456383249701279390707384240598"
+ "382936099431912710233425550359863089915213963553756674672083"
+ "673128192358701197242632527769951957277781260855740340354110"
+ "173441284912381364143945515141786687806740155311932822963199"
+ "131134959539539338316310328556057915323285980341541664226172"
+ "265348802632447238304822896568757017013159021750199744350376"
+ "278243566840330589397015778833566517337174685312047058426075"
+ "688036665697114219175258344917835835984013214761767520398571"
+ "735519302688914468501077605843338555214753050109407568139932"
+ "147308502166696009676987494125921676927574464221699654264839"
+ "192243410627511520570610765229732327315423820550872393685221"
+ "676561948307418196052769717057382723931306989375320957256133"
+ "838073129463951849807075348034900035402513943244599879584009"
+ "391110011261908615236154859382854977144106096407982738165117"
+ "693915685918231984764157652755343417097983676870433731452629"
+ "339981084526616826599425863049784138127555181662391766144738"
+ "159400253422795753041594932607700680306368857466952063923782"
+ "760519487592638820793893796669403574411398166619131986561877"
+ "034635197232626532239192571857518274939275861531537920777299"
+ "133535479548088762634002006634954143608168633852204577195463"
+ "389533233992867620995583241321034602255800668175356808869060"
+ "608582640890741203603916133682748118680676374951545690715916"
+ "241859799379894025137504643469040366684778763795442214328000"
+ "375999444991619403217748350277527106812175542863660436614910"
+ "135938862296156144947361864759321605496309393905421651264941"
+ "669606814994816518612155298709843817262034769175075602668866"
+ "926449523554218142013501373514352370369126244144449924971423"
+ "038024236058971106053649565799145071085840022305247663313482"
+ "714565918140785997808209749619683146844964283106915422726638"
+ "184861327711776708749278315100024436584176080783836115268999"
+ "055336294569042349971163039294272620322160728879610722678506"
+ "182344928526064885227397447578450046944618127903428943538029"
+ "386719288345854473283987116842451647036255801966780244103035"
+ "425445345127067921349083698736056197567752071915587544133815"
+ "717564310032485290205726480489464589999677885266171263493459"
+ "668963623768410922688414177814149693150024191921819721215688"
+ "114324591287371281400636455584825253000890602388603923710921"
+ "026880979879158388608823700222683123228822356907857261909150"
+ "626993825760416437415551396973489279578569909699853422995997"
+ "974315036153120383930698087773157253674975950409660938084071"
+ "173163693891122166282318691732176374528554627905530306369204"
+ "877964658806333996327938827344733821685425961846791581492287"
+ "250044047142934607523718654369478552373072400018635730811749"
+ "291666457582760812726851561001954207941547404866373158231367"
+ "986951247388733285659455982411993350593989550494594498447410"
+ "984783303191128659803467713819821511544998464785455306500918"
+ "241648925913966507036336000231915215026183799886938007038845"
+ "551916478649593272604688927931953165785101738164060543643192"
+ "949066412847647883846835866623820426428526541564774787007791"
+ "235843699657232847114093617412355486871810526396392792853731"
+ "390841657984518997639795008374280777823099107035223998600103"
+ "103211166230289241182380237703814248941627178152962100972452"
+ "217697144954497443279450919433943252592977710901289696002698"
+ "225209041938801190947812141758873162203113090284565687499100"
+ "109623665868340184032428667217835198069330185880779776269137"
+ "742366802202585247113480377505916462865316253065105837519292"
+ "805411191872195967066157363040364443666632564266439033866945"
+ "366496486863801221986778957510023272290593640187551645170603"
+ "215150911733580059874983597994671388176488814794186236946834"
+ "548816837468411497151813344980969677026131105901402313456769"
+ "561412278508799050185582199844418197980544632067644131002512"
+ "557755358307705356209461595354064971347590431926479961905129"
+ "785864961996560707071051177738535042777950247546470241655891"
+ "294428226271478689174637951663865529219133988782700199051475"
+ "108495188941141025360733690471601309904116260484264378352956"
+ "830972782977747351810451586166745640802378131466232692150196"
+ "132319386267589275314909450293562079332893638471814389025392"
+ "970579695249613486078445695214422379148991006996109216699215"
+ "721671648754881325271879493185438097033881789311707997697928"
+ "860866812849648616086569281093053695399558469641977866770538"
+ "476039621947215238679930485285585513808236992918733520331110"
+ "962448142457896209307561142289713638388281085340301520317159"
+ "297224995464365477734040179470355969363384621039467975256670"
+ "339354334892926205316491997244008324897517881293654265688813"
+ "283579663372924392043825371743576754041055802440187836850412"
+ "247984570221893156921757872572872036331343007592090605703195"
+ "088864753777199111760713027328198781654685927174063882187275"
+ "850263521274368447629947228263907797373221137688424821608129"
+ "731003236738630502344377228987961455961818623205503012858619"
+ "800521948637807438081069469400793496307826769301971342062597"
+ "391253779410607511754278887744936774785938056823221738917303"
+ "119592848951788560393540150358649310736020595310015728915288"
+ "289821678102453433273888879288862086153270028346900686360943"
+ "250522514297816412678213672667152836436597491522644579383191"
+ "851483036048273636234050603745735057899230038434384361744893"
+ "838050985090837220507663282503497932038372021626246900935334"
+ "781144388106031405650705176699646299475436084049881780196520"
+ "881623075256119318210664937469946410480660118598143375898298"
+ "965497205621170906772915413181530577151676241283182977713765"
+ "317889730886996471681592298058774155948285325398399674640645"
+ "566475947058303746531133735308766583802401453804232106737787"
+ "768035926272312574958173945816077962772826443125107145322971"
+ "087220172175473177449006473180221085709470643042801004189714"
+ "505520073568915195232936144169440163547568663500508335014169"
+ "425050712038101167190534305435310279534374364467455668392421"
+ "298604104431988622194699721632249712583483143417550152131186"
+ "288827131347662976240916448058011869761525369135147129192405"
+ "037216807405860168320999468074663117771890506566769628495813"
+ "837909047220874786467663205170561835819702362482274133227483"
+ "041342457179876653773960112367066273208176545656826800069574"
+ "547599816180234764485446735080683694920665668954370505715843"
+ "455110709594838989387382250502925336743830916124954071268053"
+ "817964873658921319164268375226716232666274830656557657055342"
+ "393552148933959057023293404027940528842591460490646295820755"
+ "765633076707491896621769767253619370462005760078938144396953"
+ "018925287611875441613896820035092167912718365454954166761481"
+ "511451950826683236776211829914518353242818636196417736206010"
+ "145109509967467266157037719712666871515644277723594273405669"
+ "093518586548079997818085130346801040781966074621669280188633"
+ "856299289656492439545033914935979634179552686396067914528336"
+ "924678729357419403624798426886422277256625046946795576781709"
+ "298737741510378578072199383561520569978396254537274419476511"
+ "983161908266152660163477408756159700314280122283281906103567"
+ "067156627222418787671312246698375736071215395722993294041012"
+ "744631560602983489316782773611740570974847045870362276861106"
+ "774130949410119612624380274679529647271294627526939490197641"
+ "645383447755544661714281218489998189691140343327976729279891"
+ "077101372792811842951182338559423852563331641533781432796742"
+ "873181364582071661749961126386895359760476172215209100274274"
+ "851619657020388051618654944574445941780637669570374280535432"
+ "399157923698778110534174856844986671232161320063786308144771"
+ "068130888985636449091787794632959555876880672773686838364706"
+ "122084832995722603440165161942472322987408003421165899848443"
+ "566885769845535074102932500939450142098799833145629484519298"
+ "622410092757836842296697186410137365818568152771850732591405"
+ "340248509247875448717161746544246407280913725135059228268131"
+ "453903691495906528862410006254958805237716723952273129715780"
+ "425223305517882562616830806755498203755676925741529569939445"
+ "043490046171854709456730491532189688306135861932534903184518"
+ "717706426178028900836080044604143054210332610482947502104703"
+ "032028463320549525316174330585387581543470878545616097381416"
+ "151451037487775797335749896735101048367502483255117772375025"
+ "269956476872153642623856062175536913321594213515989059505375"
+ "135183515207096576145781316398544325320022366962008554087665"
+ "201050763789833457082359181807492731245904330245198691471329"
+ "319324627030678762142685799400660305214140453863665517807185"
+ "105354694177602424937823924511789133225030926924236498557565"
+ "212794565582753399214908928688568628950225640472058381324292"
+ "866007645368390366981937596341868992912741319342960598330486"
+ "905946276235953206760977215407164729909506118583728562718724"
+ "235732515062300426080741679038098122641980345051854359908213"
+ "563779664847422505775922437272989231878912994048540484468227"
+ "199282393172540734295329890896755037903724644870572648941076"
+ "132423009124870700536763793881894969000042397318202298868940"
+ "530196108237639578098191879486398269734335286831689173606327"
+ "500405178476864790935386838169242131756729797688220656276969"
+ "434749140204830563840068728357383111109865861495106613619153"
+ "421725274090787422508800568671498311491210197298472420373359"
+ "044400631309819996507004167876832936101195902219429743174557"
+ "163362274547892397934880322990633165889175059124060202200452"
+ "648684577182821651588921716304707095995039972827781680978274"
+ "973838841958209215836456212939412000456040621743349981715350"
+ "305133662772937143899882197561295808685181679238411733642697"
+ "748892466944352640514849114619882270112386610376024527101889"
+ "119004382703622803911212700216792471528793241950356942780714"
+ "774957204475130171711488773121937363663487116301055073658645"
+ "980695862570269762957141239436916216723776945522480189876803"
+ "386123827956059851911061129713987960026363403936931196519733"
+ "447116468545744829997003979525368783485129837821983305137448"
+ "031689360764270759437872004895754351479890333865299565515706"
+ "690471030702230767978923298480584997256328135245813726407464"
+ "159230169328539541524724878662873185450510653764301207480799"
+ "488602832618557388369552461881286225098286358672257087829660"
+ "174231705350465091313887538950130611513878400895128618426154"
+ "417299623157313010877679890009181366178705821415173309356192"
+ "686429159835537275875876767919535369607142366878476025895389"
+ "279625854409611312402187942369446302119309705461187450803468"
+ "606366203101933821675974655441744883993796837164178911391575"
+ "751463591650231265941242686108002052587760190005508737394014"
+ "453031299745602214380618917954427803281262300931789525045703"
+ "809571995929933387196864877982754748535701000330924817431298"
+ "365273697561943437891318220691072831562717726798635382168915"
+ "187137325209768346284183473712613689334546294053718697897526"
+ "843398053681374508250012035211936425982389543291022583173280"
+ "985811169783438836113209408147936547458073361625570571955232"
+ "746103236016857123149307991441916732438322836596693687161268"
+ "151183603534413030099360835441935243365729307681545065674775"
+ "655582111435085683962037818795920337874290127531069511296530"
+ "746308404963763022896682861683252995925040540038039172626001"
+ "958340013361801588367655990575379797454237110701588716509764"
+ "759243657077584013289594787913434812509790293636440469725564"
+ "222946985585616708175959944099853232059130350099233608207347"
+ "955460820122006976717445739825352919058005528371183277021250"
+ "186916447745609162301667393077050176560656798672598371789181"
+ "232542195795945358691713761483976100058707499929103557275695"
+ "937295677892604799308353051124627278706035295473126217205599"
+ "530746756205492173148619619059839609108464715691924592576481"
+ "382126740168148453274964955074129767533813576349605298268179"
+ "068244338581354855186516322703199278802275718580352103754433"
+ "240982354636196477238624205575823556321375833700666021556412"
+ "182358152808745703724362178773168996492870519432472065091133"
+ "11767578125e-4966",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16496),
+ TEST ("3.2375875597190125554622194791138232762497846690173405048449"
+ "421945985197700620596855088357456383249701279390707384240598"
+ "382936099431912710233425550359863089915213963553756674672083"
+ "673128192358701197242632527769951957277781260855740340354110"
+ "173441284912381364143945515141786687806740155311932822963199"
+ "131134959539539338316310328556057915323285980341541664226172"
+ "265348802632447238304822896568757017013159021750199744350376"
+ "278243566840330589397015778833566517337174685312047058426075"
+ "688036665697114219175258344917835835984013214761767520398571"
+ "735519302688914468501077605843338555214753050109407568139932"
+ "147308502166696009676987494125921676927574464221699654264839"
+ "192243410627511520570610765229732327315423820550872393685221"
+ "676561948307418196052769717057382723931306989375320957256133"
+ "838073129463951849807075348034900035402513943244599879584009"
+ "391110011261908615236154859382854977144106096407982738165117"
+ "693915685918231984764157652755343417097983676870433731452629"
+ "339981084526616826599425863049784138127555181662391766144738"
+ "159400253422795753041594932607700680306368857466952063923782"
+ "760519487592638820793893796669403574411398166619131986561877"
+ "034635197232626532239192571857518274939275861531537920777299"
+ "133535479548088762634002006634954143608168633852204577195463"
+ "389533233992867620995583241321034602255800668175356808869060"
+ "608582640890741203603916133682748118680676374951545690715916"
+ "241859799379894025137504643469040366684778763795442214328000"
+ "375999444991619403217748350277527106812175542863660436614910"
+ "135938862296156144947361864759321605496309393905421651264941"
+ "669606814994816518612155298709843817262034769175075602668866"
+ "926449523554218142013501373514352370369126244144449924971423"
+ "038024236058971106053649565799145071085840022305247663313482"
+ "714565918140785997808209749619683146844964283106915422726638"
+ "184861327711776708749278315100024436584176080783836115268999"
+ "055336294569042349971163039294272620322160728879610722678506"
+ "182344928526064885227397447578450046944618127903428943538029"
+ "386719288345854473283987116842451647036255801966780244103035"
+ "425445345127067921349083698736056197567752071915587544133815"
+ "717564310032485290205726480489464589999677885266171263493459"
+ "668963623768410922688414177814149693150024191921819721215688"
+ "114324591287371281400636455584825253000890602388603923710921"
+ "026880979879158388608823700222683123228822356907857261909150"
+ "626993825760416437415551396973489279578569909699853422995997"
+ "974315036153120383930698087773157253674975950409660938084071"
+ "173163693891122166282318691732176374528554627905530306369204"
+ "877964658806333996327938827344733821685425961846791581492287"
+ "250044047142934607523718654369478552373072400018635730811749"
+ "291666457582760812726851561001954207941547404866373158231367"
+ "986951247388733285659455982411993350593989550494594498447410"
+ "984783303191128659803467713819821511544998464785455306500918"
+ "241648925913966507036336000231915215026183799886938007038845"
+ "551916478649593272604688927931953165785101738164060543643192"
+ "949066412847647883846835866623820426428526541564774787007791"
+ "235843699657232847114093617412355486871810526396392792853731"
+ "390841657984518997639795008374280777823099107035223998600103"
+ "103211166230289241182380237703814248941627178152962100972452"
+ "217697144954497443279450919433943252592977710901289696002698"
+ "225209041938801190947812141758873162203113090284565687499100"
+ "109623665868340184032428667217835198069330185880779776269137"
+ "742366802202585247113480377505916462865316253065105837519292"
+ "805411191872195967066157363040364443666632564266439033866945"
+ "366496486863801221986778957510023272290593640187551645170603"
+ "215150911733580059874983597994671388176488814794186236946834"
+ "548816837468411497151813344980969677026131105901402313456769"
+ "561412278508799050185582199844418197980544632067644131002512"
+ "557755358307705356209461595354064971347590431926479961905129"
+ "785864961996560707071051177738535042777950247546470241655891"
+ "294428226271478689174637951663865529219133988782700199051475"
+ "108495188941141025360733690471601309904116260484264378352956"
+ "830972782977747351810451586166745640802378131466232692150196"
+ "132319386267589275314909450293562079332893638471814389025392"
+ "970579695249613486078445695214422379148991006996109216699215"
+ "721671648754881325271879493185438097033881789311707997697928"
+ "860866812849648616086569281093053695399558469641977866770538"
+ "476039621947215238679930485285585513808236992918733520331110"
+ "962448142457896209307561142289713638388281085340301520317159"
+ "297224995464365477734040179470355969363384621039467975256670"
+ "339354334892926205316491997244008324897517881293654265688813"
+ "283579663372924392043825371743576754041055802440187836850412"
+ "247984570221893156921757872572872036331343007592090605703195"
+ "088864753777199111760713027328198781654685927174063882187275"
+ "850263521274368447629947228263907797373221137688424821608129"
+ "731003236738630502344377228987961455961818623205503012858619"
+ "800521948637807438081069469400793496307826769301971342062597"
+ "391253779410607511754278887744936774785938056823221738917303"
+ "119592848951788560393540150358649310736020595310015728915288"
+ "289821678102453433273888879288862086153270028346900686360943"
+ "250522514297816412678213672667152836436597491522644579383191"
+ "851483036048273636234050603745735057899230038434384361744893"
+ "838050985090837220507663282503497932038372021626246900935334"
+ "781144388106031405650705176699646299475436084049881780196520"
+ "881623075256119318210664937469946410480660118598143375898298"
+ "965497205621170906772915413181530577151676241283182977713765"
+ "317889730886996471681592298058774155948285325398399674640645"
+ "566475947058303746531133735308766583802401453804232106737787"
+ "768035926272312574958173945816077962772826443125107145322971"
+ "087220172175473177449006473180221085709470643042801004189714"
+ "505520073568915195232936144169440163547568663500508335014169"
+ "425050712038101167190534305435310279534374364467455668392421"
+ "298604104431988622194699721632249712583483143417550152131186"
+ "288827131347662976240916448058011869761525369135147129192405"
+ "037216807405860168320999468074663117771890506566769628495813"
+ "837909047220874786467663205170561835819702362482274133227483"
+ "041342457179876653773960112367066273208176545656826800069574"
+ "547599816180234764485446735080683694920665668954370505715843"
+ "455110709594838989387382250502925336743830916124954071268053"
+ "817964873658921319164268375226716232666274830656557657055342"
+ "393552148933959057023293404027940528842591460490646295820755"
+ "765633076707491896621769767253619370462005760078938144396953"
+ "018925287611875441613896820035092167912718365454954166761481"
+ "511451950826683236776211829914518353242818636196417736206010"
+ "145109509967467266157037719712666871515644277723594273405669"
+ "093518586548079997818085130346801040781966074621669280188633"
+ "856299289656492439545033914935979634179552686396067914528336"
+ "924678729357419403624798426886422277256625046946795576781709"
+ "298737741510378578072199383561520569978396254537274419476511"
+ "983161908266152660163477408756159700314280122283281906103567"
+ "067156627222418787671312246698375736071215395722993294041012"
+ "744631560602983489316782773611740570974847045870362276861106"
+ "774130949410119612624380274679529647271294627526939490197641"
+ "645383447755544661714281218489998189691140343327976729279891"
+ "077101372792811842951182338559423852563331641533781432796742"
+ "873181364582071661749961126386895359760476172215209100274274"
+ "851619657020388051618654944574445941780637669570374280535432"
+ "399157923698778110534174856844986671232161320063786308144771"
+ "068130888985636449091787794632959555876880672773686838364706"
+ "122084832995722603440165161942472322987408003421165899848443"
+ "566885769845535074102932500939450142098799833145629484519298"
+ "622410092757836842296697186410137365818568152771850732591405"
+ "340248509247875448717161746544246407280913725135059228268131"
+ "453903691495906528862410006254958805237716723952273129715780"
+ "425223305517882562616830806755498203755676925741529569939445"
+ "043490046171854709456730491532189688306135861932534903184518"
+ "717706426178028900836080044604143054210332610482947502104703"
+ "032028463320549525316174330585387581543470878545616097381416"
+ "151451037487775797335749896735101048367502483255117772375025"
+ "269956476872153642623856062175536913321594213515989059505375"
+ "135183515207096576145781316398544325320022366962008554087665"
+ "201050763789833457082359181807492731245904330245198691471329"
+ "319324627030678762142685799400660305214140453863665517807185"
+ "105354694177602424937823924511789133225030926924236498557565"
+ "212794565582753399214908928688568628950225640472058381324292"
+ "866007645368390366981937596341868992912741319342960598330486"
+ "905946276235953206760977215407164729909506118583728562718724"
+ "235732515062300426080741679038098122641980345051854359908213"
+ "563779664847422505775922437272989231878912994048540484468227"
+ "199282393172540734295329890896755037903724644870572648941076"
+ "132423009124870700536763793881894969000042397318202298868940"
+ "530196108237639578098191879486398269734335286831689173606327"
+ "500405178476864790935386838169242131756729797688220656276969"
+ "434749140204830563840068728357383111109865861495106613619153"
+ "421725274090787422508800568671498311491210197298472420373359"
+ "044400631309819996507004167876832936101195902219429743174557"
+ "163362274547892397934880322990633165889175059124060202200452"
+ "648684577182821651588921716304707095995039972827781680978274"
+ "973838841958209215836456212939412000456040621743349981715350"
+ "305133662772937143899882197561295808685181679238411733642697"
+ "748892466944352640514849114619882270112386610376024527101889"
+ "119004382703622803911212700216792471528793241950356942780714"
+ "774957204475130171711488773121937363663487116301055073658645"
+ "980695862570269762957141239436916216723776945522480189876803"
+ "386123827956059851911061129713987960026363403936931196519733"
+ "447116468545744829997003979525368783485129837821983305137448"
+ "031689360764270759437872004895754351479890333865299565515706"
+ "690471030702230767978923298480584997256328135245813726407464"
+ "159230169328539541524724878662873185450510653764301207480799"
+ "488602832618557388369552461881286225098286358672257087829660"
+ "174231705350465091313887538950130611513878400895128618426154"
+ "417299623157313010877679890009181366178705821415173309356192"
+ "686429159835537275875876767919535369607142366878476025895389"
+ "279625854409611312402187942369446302119309705461187450803468"
+ "606366203101933821675974655441744883993796837164178911391575"
+ "751463591650231265941242686108002052587760190005508737394014"
+ "453031299745602214380618917954427803281262300931789525045703"
+ "809571995929933387196864877982754748535701000330924817431298"
+ "365273697561943437891318220691072831562717726798635382168915"
+ "187137325209768346284183473712613689334546294053718697897526"
+ "843398053681374508250012035211936425982389543291022583173280"
+ "985811169783438836113209408147936547458073361625570571955232"
+ "746103236016857123149307991441916732438322836596693687161268"
+ "151183603534413030099360835441935243365729307681545065674775"
+ "655582111435085683962037818795920337874290127531069511296530"
+ "746308404963763022896682861683252995925040540038039172626001"
+ "958340013361801588367655990575379797454237110701588716509764"
+ "759243657077584013289594787913434812509790293636440469725564"
+ "222946985585616708175959944099853232059130350099233608207347"
+ "955460820122006976717445739825352919058005528371183277021250"
+ "186916447745609162301667393077050176560656798672598371789181"
+ "232542195795945358691713761483976100058707499929103557275695"
+ "937295677892604799308353051124627278706035295473126217205599"
+ "530746756205492173148619619059839609108464715691924592576481"
+ "382126740168148453274964955074129767533813576349605298268179"
+ "068244338581354855186516322703199278802275718580352103754433"
+ "240982354636196477238624205575823556321375833700666021556412"
+ "182358152808745703724362178773168996492870519432472065091133"
+ "11767578126e-4966",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x4p-16496,
+ 0x0p+0,
+ 0x4p-16496),
+ TEST ("-3.237587559719012555462219479113823276249784669017340504844"
+ "942194598519770062059685508835745638324970127939070738424059"
+ "838293609943191271023342555035986308991521396355375667467208"
+ "367312819235870119724263252776995195727778126085574034035411"
+ "017344128491238136414394551514178668780674015531193282296319"
+ "913113495953953933831631032855605791532328598034154166422617"
+ "226534880263244723830482289656875701701315902175019974435037"
+ "627824356684033058939701577883356651733717468531204705842607"
+ "568803666569711421917525834491783583598401321476176752039857"
+ "173551930268891446850107760584333855521475305010940756813993"
+ "214730850216669600967698749412592167692757446422169965426483"
+ "919224341062751152057061076522973232731542382055087239368522"
+ "167656194830741819605276971705738272393130698937532095725613"
+ "383807312946395184980707534803490003540251394324459987958400"
+ "939111001126190861523615485938285497714410609640798273816511"
+ "769391568591823198476415765275534341709798367687043373145262"
+ "933998108452661682659942586304978413812755518166239176614473"
+ "815940025342279575304159493260770068030636885746695206392378"
+ "276051948759263882079389379666940357441139816661913198656187"
+ "703463519723262653223919257185751827493927586153153792077729"
+ "913353547954808876263400200663495414360816863385220457719546"
+ "338953323399286762099558324132103460225580066817535680886906"
+ "060858264089074120360391613368274811868067637495154569071591"
+ "624185979937989402513750464346904036668477876379544221432800"
+ "037599944499161940321774835027752710681217554286366043661491"
+ "013593886229615614494736186475932160549630939390542165126494"
+ "166960681499481651861215529870984381726203476917507560266886"
+ "692644952355421814201350137351435237036912624414444992497142"
+ "303802423605897110605364956579914507108584002230524766331348"
+ "271456591814078599780820974961968314684496428310691542272663"
+ "818486132771177670874927831510002443658417608078383611526899"
+ "905533629456904234997116303929427262032216072887961072267850"
+ "618234492852606488522739744757845004694461812790342894353802"
+ "938671928834585447328398711684245164703625580196678024410303"
+ "542544534512706792134908369873605619756775207191558754413381"
+ "571756431003248529020572648048946458999967788526617126349345"
+ "966896362376841092268841417781414969315002419192181972121568"
+ "811432459128737128140063645558482525300089060238860392371092"
+ "102688097987915838860882370022268312322882235690785726190915"
+ "062699382576041643741555139697348927957856990969985342299599"
+ "797431503615312038393069808777315725367497595040966093808407"
+ "117316369389112216628231869173217637452855462790553030636920"
+ "487796465880633399632793882734473382168542596184679158149228"
+ "725004404714293460752371865436947855237307240001863573081174"
+ "929166645758276081272685156100195420794154740486637315823136"
+ "798695124738873328565945598241199335059398955049459449844741"
+ "098478330319112865980346771381982151154499846478545530650091"
+ "824164892591396650703633600023191521502618379988693800703884"
+ "555191647864959327260468892793195316578510173816406054364319"
+ "294906641284764788384683586662382042642852654156477478700779"
+ "123584369965723284711409361741235548687181052639639279285373"
+ "139084165798451899763979500837428077782309910703522399860010"
+ "310321116623028924118238023770381424894162717815296210097245"
+ "221769714495449744327945091943394325259297771090128969600269"
+ "822520904193880119094781214175887316220311309028456568749910"
+ "010962366586834018403242866721783519806933018588077977626913"
+ "774236680220258524711348037750591646286531625306510583751929"
+ "280541119187219596706615736304036444366663256426643903386694"
+ "536649648686380122198677895751002327229059364018755164517060"
+ "321515091173358005987498359799467138817648881479418623694683"
+ "454881683746841149715181334498096967702613110590140231345676"
+ "956141227850879905018558219984441819798054463206764413100251"
+ "255775535830770535620946159535406497134759043192647996190512"
+ "978586496199656070707105117773853504277795024754647024165589"
+ "129442822627147868917463795166386552921913398878270019905147"
+ "510849518894114102536073369047160130990411626048426437835295"
+ "683097278297774735181045158616674564080237813146623269215019"
+ "613231938626758927531490945029356207933289363847181438902539"
+ "297057969524961348607844569521442237914899100699610921669921"
+ "572167164875488132527187949318543809703388178931170799769792"
+ "886086681284964861608656928109305369539955846964197786677053"
+ "847603962194721523867993048528558551380823699291873352033111"
+ "096244814245789620930756114228971363838828108534030152031715"
+ "929722499546436547773404017947035596936338462103946797525667"
+ "033935433489292620531649199724400832489751788129365426568881"
+ "328357966337292439204382537174357675404105580244018783685041"
+ "224798457022189315692175787257287203633134300759209060570319"
+ "508886475377719911176071302732819878165468592717406388218727"
+ "585026352127436844762994722826390779737322113768842482160812"
+ "973100323673863050234437722898796145596181862320550301285861"
+ "980052194863780743808106946940079349630782676930197134206259"
+ "739125377941060751175427888774493677478593805682322173891730"
+ "311959284895178856039354015035864931073602059531001572891528"
+ "828982167810245343327388887928886208615327002834690068636094"
+ "325052251429781641267821367266715283643659749152264457938319"
+ "185148303604827363623405060374573505789923003843438436174489"
+ "383805098509083722050766328250349793203837202162624690093533"
+ "478114438810603140565070517669964629947543608404988178019652"
+ "088162307525611931821066493746994641048066011859814337589829"
+ "896549720562117090677291541318153057715167624128318297771376"
+ "531788973088699647168159229805877415594828532539839967464064"
+ "556647594705830374653113373530876658380240145380423210673778"
+ "776803592627231257495817394581607796277282644312510714532297"
+ "108722017217547317744900647318022108570947064304280100418971"
+ "450552007356891519523293614416944016354756866350050833501416"
+ "942505071203810116719053430543531027953437436446745566839242"
+ "129860410443198862219469972163224971258348314341755015213118"
+ "628882713134766297624091644805801186976152536913514712919240"
+ "503721680740586016832099946807466311777189050656676962849581"
+ "383790904722087478646766320517056183581970236248227413322748"
+ "304134245717987665377396011236706627320817654565682680006957"
+ "454759981618023476448544673508068369492066566895437050571584"
+ "345511070959483898938738225050292533674383091612495407126805"
+ "381796487365892131916426837522671623266627483065655765705534"
+ "239355214893395905702329340402794052884259146049064629582075"
+ "576563307670749189662176976725361937046200576007893814439695"
+ "301892528761187544161389682003509216791271836545495416676148"
+ "151145195082668323677621182991451835324281863619641773620601"
+ "014510950996746726615703771971266687151564427772359427340566"
+ "909351858654807999781808513034680104078196607462166928018863"
+ "385629928965649243954503391493597963417955268639606791452833"
+ "692467872935741940362479842688642227725662504694679557678170"
+ "929873774151037857807219938356152056997839625453727441947651"
+ "198316190826615266016347740875615970031428012228328190610356"
+ "706715662722241878767131224669837573607121539572299329404101"
+ "274463156060298348931678277361174057097484704587036227686110"
+ "677413094941011961262438027467952964727129462752693949019764"
+ "164538344775554466171428121848999818969114034332797672927989"
+ "107710137279281184295118233855942385256333164153378143279674"
+ "287318136458207166174996112638689535976047617221520910027427"
+ "485161965702038805161865494457444594178063766957037428053543"
+ "239915792369877811053417485684498667123216132006378630814477"
+ "106813088898563644909178779463295955587688067277368683836470"
+ "612208483299572260344016516194247232298740800342116589984844"
+ "356688576984553507410293250093945014209879983314562948451929"
+ "862241009275783684229669718641013736581856815277185073259140"
+ "534024850924787544871716174654424640728091372513505922826813"
+ "145390369149590652886241000625495880523771672395227312971578"
+ "042522330551788256261683080675549820375567692574152956993944"
+ "504349004617185470945673049153218968830613586193253490318451"
+ "871770642617802890083608004460414305421033261048294750210470"
+ "303202846332054952531617433058538758154347087854561609738141"
+ "615145103748777579733574989673510104836750248325511777237502"
+ "526995647687215364262385606217553691332159421351598905950537"
+ "513518351520709657614578131639854432532002236696200855408766"
+ "520105076378983345708235918180749273124590433024519869147132"
+ "931932462703067876214268579940066030521414045386366551780718"
+ "510535469417760242493782392451178913322503092692423649855756"
+ "521279456558275339921490892868856862895022564047205838132429"
+ "286600764536839036698193759634186899291274131934296059833048"
+ "690594627623595320676097721540716472990950611858372856271872"
+ "423573251506230042608074167903809812264198034505185435990821"
+ "356377966484742250577592243727298923187891299404854048446822"
+ "719928239317254073429532989089675503790372464487057264894107"
+ "613242300912487070053676379388189496900004239731820229886894"
+ "053019610823763957809819187948639826973433528683168917360632"
+ "750040517847686479093538683816924213175672979768822065627696"
+ "943474914020483056384006872835738311110986586149510661361915"
+ "342172527409078742250880056867149831149121019729847242037335"
+ "904440063130981999650700416787683293610119590221942974317455"
+ "716336227454789239793488032299063316588917505912406020220045"
+ "264868457718282165158892171630470709599503997282778168097827"
+ "497383884195820921583645621293941200045604062174334998171535"
+ "030513366277293714389988219756129580868518167923841173364269"
+ "774889246694435264051484911461988227011238661037602452710188"
+ "911900438270362280391121270021679247152879324195035694278071"
+ "477495720447513017171148877312193736366348711630105507365864"
+ "598069586257026976295714123943691621672377694552248018987680"
+ "338612382795605985191106112971398796002636340393693119651973"
+ "344711646854574482999700397952536878348512983782198330513744"
+ "803168936076427075943787200489575435147989033386529956551570"
+ "669047103070223076797892329848058499725632813524581372640746"
+ "415923016932853954152472487866287318545051065376430120748079"
+ "948860283261855738836955246188128622509828635867225708782966"
+ "017423170535046509131388753895013061151387840089512861842615"
+ "441729962315731301087767989000918136617870582141517330935619"
+ "268642915983553727587587676791953536960714236687847602589538"
+ "927962585440961131240218794236944630211930970546118745080346"
+ "860636620310193382167597465544174488399379683716417891139157"
+ "575146359165023126594124268610800205258776019000550873739401"
+ "445303129974560221438061891795442780328126230093178952504570"
+ "380957199592993338719686487798275474853570100033092481743129"
+ "836527369756194343789131822069107283156271772679863538216891"
+ "518713732520976834628418347371261368933454629405371869789752"
+ "684339805368137450825001203521193642598238954329102258317328"
+ "098581116978343883611320940814793654745807336162557057195523"
+ "274610323601685712314930799144191673243832283659669368716126"
+ "815118360353441303009936083544193524336572930768154506567477"
+ "565558211143508568396203781879592033787429012753106951129653"
+ "074630840496376302289668286168325299592504054003803917262600"
+ "195834001336180158836765599057537979745423711070158871650976"
+ "475924365707758401328959478791343481250979029363644046972556"
+ "422294698558561670817595994409985323205913035009923360820734"
+ "795546082012200697671744573982535291905800552837118327702125"
+ "018691644774560916230166739307705017656065679867259837178918"
+ "123254219579594535869171376148397610005870749992910355727569"
+ "593729567789260479930835305112462727870603529547312621720559"
+ "953074675620549217314861961905983960910846471569192459257648"
+ "138212674016814845327496495507412976753381357634960529826817"
+ "906824433858135485518651632270319927880227571858035210375443"
+ "324098235463619647723862420557582355632137583370066602155641"
+ "218235815280874570372436217877316899649287051943247206509113"
+ "311767578124e-4966",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16496,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0),
+ TEST ("-3.237587559719012555462219479113823276249784669017340504844"
+ "942194598519770062059685508835745638324970127939070738424059"
+ "838293609943191271023342555035986308991521396355375667467208"
+ "367312819235870119724263252776995195727778126085574034035411"
+ "017344128491238136414394551514178668780674015531193282296319"
+ "913113495953953933831631032855605791532328598034154166422617"
+ "226534880263244723830482289656875701701315902175019974435037"
+ "627824356684033058939701577883356651733717468531204705842607"
+ "568803666569711421917525834491783583598401321476176752039857"
+ "173551930268891446850107760584333855521475305010940756813993"
+ "214730850216669600967698749412592167692757446422169965426483"
+ "919224341062751152057061076522973232731542382055087239368522"
+ "167656194830741819605276971705738272393130698937532095725613"
+ "383807312946395184980707534803490003540251394324459987958400"
+ "939111001126190861523615485938285497714410609640798273816511"
+ "769391568591823198476415765275534341709798367687043373145262"
+ "933998108452661682659942586304978413812755518166239176614473"
+ "815940025342279575304159493260770068030636885746695206392378"
+ "276051948759263882079389379666940357441139816661913198656187"
+ "703463519723262653223919257185751827493927586153153792077729"
+ "913353547954808876263400200663495414360816863385220457719546"
+ "338953323399286762099558324132103460225580066817535680886906"
+ "060858264089074120360391613368274811868067637495154569071591"
+ "624185979937989402513750464346904036668477876379544221432800"
+ "037599944499161940321774835027752710681217554286366043661491"
+ "013593886229615614494736186475932160549630939390542165126494"
+ "166960681499481651861215529870984381726203476917507560266886"
+ "692644952355421814201350137351435237036912624414444992497142"
+ "303802423605897110605364956579914507108584002230524766331348"
+ "271456591814078599780820974961968314684496428310691542272663"
+ "818486132771177670874927831510002443658417608078383611526899"
+ "905533629456904234997116303929427262032216072887961072267850"
+ "618234492852606488522739744757845004694461812790342894353802"
+ "938671928834585447328398711684245164703625580196678024410303"
+ "542544534512706792134908369873605619756775207191558754413381"
+ "571756431003248529020572648048946458999967788526617126349345"
+ "966896362376841092268841417781414969315002419192181972121568"
+ "811432459128737128140063645558482525300089060238860392371092"
+ "102688097987915838860882370022268312322882235690785726190915"
+ "062699382576041643741555139697348927957856990969985342299599"
+ "797431503615312038393069808777315725367497595040966093808407"
+ "117316369389112216628231869173217637452855462790553030636920"
+ "487796465880633399632793882734473382168542596184679158149228"
+ "725004404714293460752371865436947855237307240001863573081174"
+ "929166645758276081272685156100195420794154740486637315823136"
+ "798695124738873328565945598241199335059398955049459449844741"
+ "098478330319112865980346771381982151154499846478545530650091"
+ "824164892591396650703633600023191521502618379988693800703884"
+ "555191647864959327260468892793195316578510173816406054364319"
+ "294906641284764788384683586662382042642852654156477478700779"
+ "123584369965723284711409361741235548687181052639639279285373"
+ "139084165798451899763979500837428077782309910703522399860010"
+ "310321116623028924118238023770381424894162717815296210097245"
+ "221769714495449744327945091943394325259297771090128969600269"
+ "822520904193880119094781214175887316220311309028456568749910"
+ "010962366586834018403242866721783519806933018588077977626913"
+ "774236680220258524711348037750591646286531625306510583751929"
+ "280541119187219596706615736304036444366663256426643903386694"
+ "536649648686380122198677895751002327229059364018755164517060"
+ "321515091173358005987498359799467138817648881479418623694683"
+ "454881683746841149715181334498096967702613110590140231345676"
+ "956141227850879905018558219984441819798054463206764413100251"
+ "255775535830770535620946159535406497134759043192647996190512"
+ "978586496199656070707105117773853504277795024754647024165589"
+ "129442822627147868917463795166386552921913398878270019905147"
+ "510849518894114102536073369047160130990411626048426437835295"
+ "683097278297774735181045158616674564080237813146623269215019"
+ "613231938626758927531490945029356207933289363847181438902539"
+ "297057969524961348607844569521442237914899100699610921669921"
+ "572167164875488132527187949318543809703388178931170799769792"
+ "886086681284964861608656928109305369539955846964197786677053"
+ "847603962194721523867993048528558551380823699291873352033111"
+ "096244814245789620930756114228971363838828108534030152031715"
+ "929722499546436547773404017947035596936338462103946797525667"
+ "033935433489292620531649199724400832489751788129365426568881"
+ "328357966337292439204382537174357675404105580244018783685041"
+ "224798457022189315692175787257287203633134300759209060570319"
+ "508886475377719911176071302732819878165468592717406388218727"
+ "585026352127436844762994722826390779737322113768842482160812"
+ "973100323673863050234437722898796145596181862320550301285861"
+ "980052194863780743808106946940079349630782676930197134206259"
+ "739125377941060751175427888774493677478593805682322173891730"
+ "311959284895178856039354015035864931073602059531001572891528"
+ "828982167810245343327388887928886208615327002834690068636094"
+ "325052251429781641267821367266715283643659749152264457938319"
+ "185148303604827363623405060374573505789923003843438436174489"
+ "383805098509083722050766328250349793203837202162624690093533"
+ "478114438810603140565070517669964629947543608404988178019652"
+ "088162307525611931821066493746994641048066011859814337589829"
+ "896549720562117090677291541318153057715167624128318297771376"
+ "531788973088699647168159229805877415594828532539839967464064"
+ "556647594705830374653113373530876658380240145380423210673778"
+ "776803592627231257495817394581607796277282644312510714532297"
+ "108722017217547317744900647318022108570947064304280100418971"
+ "450552007356891519523293614416944016354756866350050833501416"
+ "942505071203810116719053430543531027953437436446745566839242"
+ "129860410443198862219469972163224971258348314341755015213118"
+ "628882713134766297624091644805801186976152536913514712919240"
+ "503721680740586016832099946807466311777189050656676962849581"
+ "383790904722087478646766320517056183581970236248227413322748"
+ "304134245717987665377396011236706627320817654565682680006957"
+ "454759981618023476448544673508068369492066566895437050571584"
+ "345511070959483898938738225050292533674383091612495407126805"
+ "381796487365892131916426837522671623266627483065655765705534"
+ "239355214893395905702329340402794052884259146049064629582075"
+ "576563307670749189662176976725361937046200576007893814439695"
+ "301892528761187544161389682003509216791271836545495416676148"
+ "151145195082668323677621182991451835324281863619641773620601"
+ "014510950996746726615703771971266687151564427772359427340566"
+ "909351858654807999781808513034680104078196607462166928018863"
+ "385629928965649243954503391493597963417955268639606791452833"
+ "692467872935741940362479842688642227725662504694679557678170"
+ "929873774151037857807219938356152056997839625453727441947651"
+ "198316190826615266016347740875615970031428012228328190610356"
+ "706715662722241878767131224669837573607121539572299329404101"
+ "274463156060298348931678277361174057097484704587036227686110"
+ "677413094941011961262438027467952964727129462752693949019764"
+ "164538344775554466171428121848999818969114034332797672927989"
+ "107710137279281184295118233855942385256333164153378143279674"
+ "287318136458207166174996112638689535976047617221520910027427"
+ "485161965702038805161865494457444594178063766957037428053543"
+ "239915792369877811053417485684498667123216132006378630814477"
+ "106813088898563644909178779463295955587688067277368683836470"
+ "612208483299572260344016516194247232298740800342116589984844"
+ "356688576984553507410293250093945014209879983314562948451929"
+ "862241009275783684229669718641013736581856815277185073259140"
+ "534024850924787544871716174654424640728091372513505922826813"
+ "145390369149590652886241000625495880523771672395227312971578"
+ "042522330551788256261683080675549820375567692574152956993944"
+ "504349004617185470945673049153218968830613586193253490318451"
+ "871770642617802890083608004460414305421033261048294750210470"
+ "303202846332054952531617433058538758154347087854561609738141"
+ "615145103748777579733574989673510104836750248325511777237502"
+ "526995647687215364262385606217553691332159421351598905950537"
+ "513518351520709657614578131639854432532002236696200855408766"
+ "520105076378983345708235918180749273124590433024519869147132"
+ "931932462703067876214268579940066030521414045386366551780718"
+ "510535469417760242493782392451178913322503092692423649855756"
+ "521279456558275339921490892868856862895022564047205838132429"
+ "286600764536839036698193759634186899291274131934296059833048"
+ "690594627623595320676097721540716472990950611858372856271872"
+ "423573251506230042608074167903809812264198034505185435990821"
+ "356377966484742250577592243727298923187891299404854048446822"
+ "719928239317254073429532989089675503790372464487057264894107"
+ "613242300912487070053676379388189496900004239731820229886894"
+ "053019610823763957809819187948639826973433528683168917360632"
+ "750040517847686479093538683816924213175672979768822065627696"
+ "943474914020483056384006872835738311110986586149510661361915"
+ "342172527409078742250880056867149831149121019729847242037335"
+ "904440063130981999650700416787683293610119590221942974317455"
+ "716336227454789239793488032299063316588917505912406020220045"
+ "264868457718282165158892171630470709599503997282778168097827"
+ "497383884195820921583645621293941200045604062174334998171535"
+ "030513366277293714389988219756129580868518167923841173364269"
+ "774889246694435264051484911461988227011238661037602452710188"
+ "911900438270362280391121270021679247152879324195035694278071"
+ "477495720447513017171148877312193736366348711630105507365864"
+ "598069586257026976295714123943691621672377694552248018987680"
+ "338612382795605985191106112971398796002636340393693119651973"
+ "344711646854574482999700397952536878348512983782198330513744"
+ "803168936076427075943787200489575435147989033386529956551570"
+ "669047103070223076797892329848058499725632813524581372640746"
+ "415923016932853954152472487866287318545051065376430120748079"
+ "948860283261855738836955246188128622509828635867225708782966"
+ "017423170535046509131388753895013061151387840089512861842615"
+ "441729962315731301087767989000918136617870582141517330935619"
+ "268642915983553727587587676791953536960714236687847602589538"
+ "927962585440961131240218794236944630211930970546118745080346"
+ "860636620310193382167597465544174488399379683716417891139157"
+ "575146359165023126594124268610800205258776019000550873739401"
+ "445303129974560221438061891795442780328126230093178952504570"
+ "380957199592993338719686487798275474853570100033092481743129"
+ "836527369756194343789131822069107283156271772679863538216891"
+ "518713732520976834628418347371261368933454629405371869789752"
+ "684339805368137450825001203521193642598238954329102258317328"
+ "098581116978343883611320940814793654745807336162557057195523"
+ "274610323601685712314930799144191673243832283659669368716126"
+ "815118360353441303009936083544193524336572930768154506567477"
+ "565558211143508568396203781879592033787429012753106951129653"
+ "074630840496376302289668286168325299592504054003803917262600"
+ "195834001336180158836765599057537979745423711070158871650976"
+ "475924365707758401328959478791343481250979029363644046972556"
+ "422294698558561670817595994409985323205913035009923360820734"
+ "795546082012200697671744573982535291905800552837118327702125"
+ "018691644774560916230166739307705017656065679867259837178918"
+ "123254219579594535869171376148397610005870749992910355727569"
+ "593729567789260479930835305112462727870603529547312621720559"
+ "953074675620549217314861961905983960910846471569192459257648"
+ "138212674016814845327496495507412976753381357634960529826817"
+ "906824433858135485518651632270319927880227571858035210375443"
+ "324098235463619647723862420557582355632137583370066602155641"
+ "218235815280874570372436217877316899649287051943247206509113"
+ "311767578125e-4966",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16496,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0),
+ TEST ("-3.237587559719012555462219479113823276249784669017340504844"
+ "942194598519770062059685508835745638324970127939070738424059"
+ "838293609943191271023342555035986308991521396355375667467208"
+ "367312819235870119724263252776995195727778126085574034035411"
+ "017344128491238136414394551514178668780674015531193282296319"
+ "913113495953953933831631032855605791532328598034154166422617"
+ "226534880263244723830482289656875701701315902175019974435037"
+ "627824356684033058939701577883356651733717468531204705842607"
+ "568803666569711421917525834491783583598401321476176752039857"
+ "173551930268891446850107760584333855521475305010940756813993"
+ "214730850216669600967698749412592167692757446422169965426483"
+ "919224341062751152057061076522973232731542382055087239368522"
+ "167656194830741819605276971705738272393130698937532095725613"
+ "383807312946395184980707534803490003540251394324459987958400"
+ "939111001126190861523615485938285497714410609640798273816511"
+ "769391568591823198476415765275534341709798367687043373145262"
+ "933998108452661682659942586304978413812755518166239176614473"
+ "815940025342279575304159493260770068030636885746695206392378"
+ "276051948759263882079389379666940357441139816661913198656187"
+ "703463519723262653223919257185751827493927586153153792077729"
+ "913353547954808876263400200663495414360816863385220457719546"
+ "338953323399286762099558324132103460225580066817535680886906"
+ "060858264089074120360391613368274811868067637495154569071591"
+ "624185979937989402513750464346904036668477876379544221432800"
+ "037599944499161940321774835027752710681217554286366043661491"
+ "013593886229615614494736186475932160549630939390542165126494"
+ "166960681499481651861215529870984381726203476917507560266886"
+ "692644952355421814201350137351435237036912624414444992497142"
+ "303802423605897110605364956579914507108584002230524766331348"
+ "271456591814078599780820974961968314684496428310691542272663"
+ "818486132771177670874927831510002443658417608078383611526899"
+ "905533629456904234997116303929427262032216072887961072267850"
+ "618234492852606488522739744757845004694461812790342894353802"
+ "938671928834585447328398711684245164703625580196678024410303"
+ "542544534512706792134908369873605619756775207191558754413381"
+ "571756431003248529020572648048946458999967788526617126349345"
+ "966896362376841092268841417781414969315002419192181972121568"
+ "811432459128737128140063645558482525300089060238860392371092"
+ "102688097987915838860882370022268312322882235690785726190915"
+ "062699382576041643741555139697348927957856990969985342299599"
+ "797431503615312038393069808777315725367497595040966093808407"
+ "117316369389112216628231869173217637452855462790553030636920"
+ "487796465880633399632793882734473382168542596184679158149228"
+ "725004404714293460752371865436947855237307240001863573081174"
+ "929166645758276081272685156100195420794154740486637315823136"
+ "798695124738873328565945598241199335059398955049459449844741"
+ "098478330319112865980346771381982151154499846478545530650091"
+ "824164892591396650703633600023191521502618379988693800703884"
+ "555191647864959327260468892793195316578510173816406054364319"
+ "294906641284764788384683586662382042642852654156477478700779"
+ "123584369965723284711409361741235548687181052639639279285373"
+ "139084165798451899763979500837428077782309910703522399860010"
+ "310321116623028924118238023770381424894162717815296210097245"
+ "221769714495449744327945091943394325259297771090128969600269"
+ "822520904193880119094781214175887316220311309028456568749910"
+ "010962366586834018403242866721783519806933018588077977626913"
+ "774236680220258524711348037750591646286531625306510583751929"
+ "280541119187219596706615736304036444366663256426643903386694"
+ "536649648686380122198677895751002327229059364018755164517060"
+ "321515091173358005987498359799467138817648881479418623694683"
+ "454881683746841149715181334498096967702613110590140231345676"
+ "956141227850879905018558219984441819798054463206764413100251"
+ "255775535830770535620946159535406497134759043192647996190512"
+ "978586496199656070707105117773853504277795024754647024165589"
+ "129442822627147868917463795166386552921913398878270019905147"
+ "510849518894114102536073369047160130990411626048426437835295"
+ "683097278297774735181045158616674564080237813146623269215019"
+ "613231938626758927531490945029356207933289363847181438902539"
+ "297057969524961348607844569521442237914899100699610921669921"
+ "572167164875488132527187949318543809703388178931170799769792"
+ "886086681284964861608656928109305369539955846964197786677053"
+ "847603962194721523867993048528558551380823699291873352033111"
+ "096244814245789620930756114228971363838828108534030152031715"
+ "929722499546436547773404017947035596936338462103946797525667"
+ "033935433489292620531649199724400832489751788129365426568881"
+ "328357966337292439204382537174357675404105580244018783685041"
+ "224798457022189315692175787257287203633134300759209060570319"
+ "508886475377719911176071302732819878165468592717406388218727"
+ "585026352127436844762994722826390779737322113768842482160812"
+ "973100323673863050234437722898796145596181862320550301285861"
+ "980052194863780743808106946940079349630782676930197134206259"
+ "739125377941060751175427888774493677478593805682322173891730"
+ "311959284895178856039354015035864931073602059531001572891528"
+ "828982167810245343327388887928886208615327002834690068636094"
+ "325052251429781641267821367266715283643659749152264457938319"
+ "185148303604827363623405060374573505789923003843438436174489"
+ "383805098509083722050766328250349793203837202162624690093533"
+ "478114438810603140565070517669964629947543608404988178019652"
+ "088162307525611931821066493746994641048066011859814337589829"
+ "896549720562117090677291541318153057715167624128318297771376"
+ "531788973088699647168159229805877415594828532539839967464064"
+ "556647594705830374653113373530876658380240145380423210673778"
+ "776803592627231257495817394581607796277282644312510714532297"
+ "108722017217547317744900647318022108570947064304280100418971"
+ "450552007356891519523293614416944016354756866350050833501416"
+ "942505071203810116719053430543531027953437436446745566839242"
+ "129860410443198862219469972163224971258348314341755015213118"
+ "628882713134766297624091644805801186976152536913514712919240"
+ "503721680740586016832099946807466311777189050656676962849581"
+ "383790904722087478646766320517056183581970236248227413322748"
+ "304134245717987665377396011236706627320817654565682680006957"
+ "454759981618023476448544673508068369492066566895437050571584"
+ "345511070959483898938738225050292533674383091612495407126805"
+ "381796487365892131916426837522671623266627483065655765705534"
+ "239355214893395905702329340402794052884259146049064629582075"
+ "576563307670749189662176976725361937046200576007893814439695"
+ "301892528761187544161389682003509216791271836545495416676148"
+ "151145195082668323677621182991451835324281863619641773620601"
+ "014510950996746726615703771971266687151564427772359427340566"
+ "909351858654807999781808513034680104078196607462166928018863"
+ "385629928965649243954503391493597963417955268639606791452833"
+ "692467872935741940362479842688642227725662504694679557678170"
+ "929873774151037857807219938356152056997839625453727441947651"
+ "198316190826615266016347740875615970031428012228328190610356"
+ "706715662722241878767131224669837573607121539572299329404101"
+ "274463156060298348931678277361174057097484704587036227686110"
+ "677413094941011961262438027467952964727129462752693949019764"
+ "164538344775554466171428121848999818969114034332797672927989"
+ "107710137279281184295118233855942385256333164153378143279674"
+ "287318136458207166174996112638689535976047617221520910027427"
+ "485161965702038805161865494457444594178063766957037428053543"
+ "239915792369877811053417485684498667123216132006378630814477"
+ "106813088898563644909178779463295955587688067277368683836470"
+ "612208483299572260344016516194247232298740800342116589984844"
+ "356688576984553507410293250093945014209879983314562948451929"
+ "862241009275783684229669718641013736581856815277185073259140"
+ "534024850924787544871716174654424640728091372513505922826813"
+ "145390369149590652886241000625495880523771672395227312971578"
+ "042522330551788256261683080675549820375567692574152956993944"
+ "504349004617185470945673049153218968830613586193253490318451"
+ "871770642617802890083608004460414305421033261048294750210470"
+ "303202846332054952531617433058538758154347087854561609738141"
+ "615145103748777579733574989673510104836750248325511777237502"
+ "526995647687215364262385606217553691332159421351598905950537"
+ "513518351520709657614578131639854432532002236696200855408766"
+ "520105076378983345708235918180749273124590433024519869147132"
+ "931932462703067876214268579940066030521414045386366551780718"
+ "510535469417760242493782392451178913322503092692423649855756"
+ "521279456558275339921490892868856862895022564047205838132429"
+ "286600764536839036698193759634186899291274131934296059833048"
+ "690594627623595320676097721540716472990950611858372856271872"
+ "423573251506230042608074167903809812264198034505185435990821"
+ "356377966484742250577592243727298923187891299404854048446822"
+ "719928239317254073429532989089675503790372464487057264894107"
+ "613242300912487070053676379388189496900004239731820229886894"
+ "053019610823763957809819187948639826973433528683168917360632"
+ "750040517847686479093538683816924213175672979768822065627696"
+ "943474914020483056384006872835738311110986586149510661361915"
+ "342172527409078742250880056867149831149121019729847242037335"
+ "904440063130981999650700416787683293610119590221942974317455"
+ "716336227454789239793488032299063316588917505912406020220045"
+ "264868457718282165158892171630470709599503997282778168097827"
+ "497383884195820921583645621293941200045604062174334998171535"
+ "030513366277293714389988219756129580868518167923841173364269"
+ "774889246694435264051484911461988227011238661037602452710188"
+ "911900438270362280391121270021679247152879324195035694278071"
+ "477495720447513017171148877312193736366348711630105507365864"
+ "598069586257026976295714123943691621672377694552248018987680"
+ "338612382795605985191106112971398796002636340393693119651973"
+ "344711646854574482999700397952536878348512983782198330513744"
+ "803168936076427075943787200489575435147989033386529956551570"
+ "669047103070223076797892329848058499725632813524581372640746"
+ "415923016932853954152472487866287318545051065376430120748079"
+ "948860283261855738836955246188128622509828635867225708782966"
+ "017423170535046509131388753895013061151387840089512861842615"
+ "441729962315731301087767989000918136617870582141517330935619"
+ "268642915983553727587587676791953536960714236687847602589538"
+ "927962585440961131240218794236944630211930970546118745080346"
+ "860636620310193382167597465544174488399379683716417891139157"
+ "575146359165023126594124268610800205258776019000550873739401"
+ "445303129974560221438061891795442780328126230093178952504570"
+ "380957199592993338719686487798275474853570100033092481743129"
+ "836527369756194343789131822069107283156271772679863538216891"
+ "518713732520976834628418347371261368933454629405371869789752"
+ "684339805368137450825001203521193642598238954329102258317328"
+ "098581116978343883611320940814793654745807336162557057195523"
+ "274610323601685712314930799144191673243832283659669368716126"
+ "815118360353441303009936083544193524336572930768154506567477"
+ "565558211143508568396203781879592033787429012753106951129653"
+ "074630840496376302289668286168325299592504054003803917262600"
+ "195834001336180158836765599057537979745423711070158871650976"
+ "475924365707758401328959478791343481250979029363644046972556"
+ "422294698558561670817595994409985323205913035009923360820734"
+ "795546082012200697671744573982535291905800552837118327702125"
+ "018691644774560916230166739307705017656065679867259837178918"
+ "123254219579594535869171376148397610005870749992910355727569"
+ "593729567789260479930835305112462727870603529547312621720559"
+ "953074675620549217314861961905983960910846471569192459257648"
+ "138212674016814845327496495507412976753381357634960529826817"
+ "906824433858135485518651632270319927880227571858035210375443"
+ "324098235463619647723862420557582355632137583370066602155641"
+ "218235815280874570372436217877316899649287051943247206509113"
+ "311767578126e-4966",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16496,
+ -0x4p-16496,
+ -0x0p+0,
+ -0x0p+0),
+};
diff --git a/REORG.TODO/stdlib/tst-strtod-round-skeleton.c b/REORG.TODO/stdlib/tst-strtod-round-skeleton.c
new file mode 100644
index 0000000000..73603e6158
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-round-skeleton.c
@@ -0,0 +1,252 @@
+/* Test for correct rounding of results of strtod and related
+ functions.
+ Copyright (C) 2012-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Defining _LIBC_TEST ensures long double math functions are
+ declared in the headers. */
+#define _LIBC_TEST 1
+#include <fenv.h>
+#include <float.h>
+#include <math.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math-tests.h>
+
+#include "tst-strtod.h"
+
+/* Non-standard macros expected to be externally defined:
+
+ L_(str): Pastes the appropriate modifier to a string literal str.
+
+ FNPFX: Expands to the correct prefix for the strtod equivalent
+ of type CHAR. (e.g str or wcs).
+
+ CHAR: Expands to the string type being tested (e.g wchar_t or char).
+
+ STRM: Expands to a string literal suitable for printing CHAR* via
+ printf (e.g "%s" or "%ls"). */
+
+#define _CONCAT(a, b) a ## b
+#define CONCAT(a, b) _CONCAT (a, b)
+
+#define STRTO(x) CONCAT (CONCAT (FNPFX, to), x)
+
+#if LDBL_MANT_DIG == 106 && LDBL_MAX_EXP == 1024
+/* This is a stupid hack for IBM long double. This test ignores
+ inexact values for long double due to the limitations of the
+ format. This ensures rounding tests are ignored. */
+# undef ROUNDING_TESTS_long_double
+# define ROUNDING_TESTS_long_double(x) 0
+#endif
+
+/* Generator to create an FTYPE member variabled named FSUF
+ used to populate struct member variables. */
+#define FTYPE_MEMBER(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
+ FTYPE FSUF;
+
+/* Likewise, but each member is of type bool. */
+#define BOOL_MEMBER(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
+ bool FSUF;
+
+#define STRUCT_FOREACH_FLOAT_FTYPE GEN_TEST_STRTOD_FOREACH (FTYPE_MEMBER)
+#define STRUCT_FOREACH_FLOAT_BOOL GEN_TEST_STRTOD_FOREACH (BOOL_MEMBER)
+
+/* Define the long double choose (CHOOSE_ld) macro
+ to select the appropriate generated long double
+ value from the generated test data. */
+#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
+/* This is for the long double == double format. */
+# define CHOOSE_ld(f,d,...) d
+#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 && LDBL_MIN_EXP == -16381
+/* This is for the Intel extended float format. */
+# define CHOOSE_ld(f,d,ld64i,...) ld64i
+#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 && LDBL_MIN_EXP == -16382
+/* This is for the Motorola extended float format. */
+# define CHOOSE_ld(f,d,ld64i,ld64m,...) ld64m
+#elif LDBL_MANT_DIG == 106 && LDBL_MAX_EXP == 1024
+/* This is for the IBM extended double format. */
+# define CHOOSE_ld(f,d,ld64i,ld64m,ld106,...) ld106
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+/* This is for the IEEE binary128 format. */
+# define CHOOSE_ld(f,d,ld64i,ld64m,ld106,ld113,...) ld113
+#else
+# error "unknown long double format"
+#endif
+
+/* Add type specific choosing macros below. */
+#define CHOOSE_f(f,...) f
+#define CHOOSE_d(f,d,...) d
+/* long double is special, and handled above. */
+
+/* Selector for expected result field of a given type. */
+#define _ENTRY(FSUF, FTYPE, FTOSTR, LSUF, CSUF, ...) \
+ CONCAT (CHOOSE_ ## FSUF (__VA_ARGS__), LSUF),
+#define ENTRY(...) \
+ GEN_TEST_STRTOD_FOREACH (_ENTRY, __VA_ARGS__)
+
+/* Selector for boolean exact tag of expected results. */
+#define _XNTRY(FSUF, FTYPE, FTOSTR, LSUF, CSUF, ...) \
+ CHOOSE_ ## FSUF (__VA_ARGS__),
+#define XNTRY(...) \
+ GEN_TEST_STRTOD_FOREACH (_XNTRY, __VA_ARGS__)
+
+/* This is hacky way around the seemingly unavoidable macro
+ expansion of the INFINITY or HUGE_VAL like macros in the
+ above. It is assumed the compiler will implicitly convert
+ the infinity correctly. */
+#define INF INFINITY + 0.0
+
+/* This macro is used in conjunction with the output from the
+ gen-tst-strtod-round utility to select the appropriately
+ rounded long double value for a given format. */
+#define TEST(s, \
+ fx, fd, fn, fz, fu, \
+ dx, dd, dn, dz, du, \
+ ld64ix, ld64id, ld64in, ld64iz, ld64iu, \
+ ld64mx, ld64md, ld64mn, ld64mz, ld64mu, \
+ ld106x, ld106d, ld106n, ld106z, ld106u, \
+ ld113x, ld113d, ld113n, ld113z, ld113u) \
+ { \
+ L_ (s), \
+ { XNTRY (fx, dx, ld64ix, ld64mx, ld106x, ld113x) }, \
+ { \
+ { ENTRY (fn, dn, ld64in, ld64mn, ld106n, ld113n) }, \
+ { ENTRY (fd, dd, ld64id, ld64md, ld106d, ld113d) }, \
+ { ENTRY (fz, dz, ld64iz, ld64mz, ld106z, ld113z) }, \
+ { ENTRY (fu, du, ld64iu, ld64mu, ld106u, ld113u) } \
+ } \
+ }
+
+struct test_exactness
+ {
+ STRUCT_FOREACH_FLOAT_BOOL
+ };
+
+struct test_results
+ {
+ STRUCT_FOREACH_FLOAT_FTYPE
+ };
+
+struct test {
+ const CHAR *s;
+ struct test_exactness exact;
+ struct test_results r[4];
+};
+
+/* Include the generated test data. */
+#include "tst-strtod-round-data.h"
+
+#define STRX(x) #x
+#define STR(x) STRX (x)
+#define FNPFXS STR (FNPFX)
+
+#ifndef FE_INEXACT
+# define FE_INEXACT 0
+#endif
+
+#define GEN_ONE_TEST(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
+{ \
+ feclearexcept (FE_INEXACT); \
+ FTYPE f = STRTO (FSUF) (s, NULL); \
+ if (f != expected->FSUF \
+ || (copysign ## CSUF) (1.0 ## LSUF, f) \
+ != (copysign ## CSUF) (1.0 ## LSUF, expected->FSUF)) \
+ { \
+ char efstr[FSTRLENMAX]; \
+ char fstr[FSTRLENMAX]; \
+ FTOSTR (efstr, FSTRLENMAX, "%a", expected->FSUF); \
+ FTOSTR (fstr, FSTRLENMAX, "%a", f); \
+ printf (FNPFXS "to" #FSUF " (" STRM ") returned %s not " \
+ "%s (%s)\n", s, fstr, efstr, mode_name); \
+ if (ROUNDING_TESTS (FTYPE, rnd_mode) || exact->FSUF) \
+ result = 1; \
+ else \
+ printf ("ignoring this inexact result\n"); \
+ } \
+ else if (FE_INEXACT != 0) \
+ { \
+ bool inexact_raised = fetestexcept (FE_INEXACT) != 0; \
+ if (inexact_raised != !exact->FSUF) \
+ { \
+ printf (FNPFXS "to" #FSUF " (" STRM ") inexact %d " \
+ "not %d\n", s, inexact_raised, !exact->FSUF); \
+ if (EXCEPTION_TESTS (FTYPE)) \
+ result = 1; \
+ else \
+ printf ("ignoring this exception error\n"); \
+ } \
+ } \
+}
+
+static int
+test_in_one_mode (const CHAR *s, const struct test_results *expected,
+ const struct test_exactness *exact, const char *mode_name,
+ int rnd_mode)
+{
+ int result = 0;
+ GEN_TEST_STRTOD_FOREACH (GEN_ONE_TEST)
+ return result;
+}
+
+static const struct fetestmodes
+ {
+ const char *mode_name;
+ int rnd_mode;
+ int rnd_i; /* Corresponding index into r array of struct test. */
+ } modes[] = {
+ { "default rounding mode", FE_TONEAREST, 0 },
+#ifdef FE_DOWNWARD
+ { "FE_DOWNWARD", FE_DOWNWARD, 1 },
+#endif
+#ifdef FE_TOWARDZERO
+ { "FE_TOWARDZERO", FE_TOWARDZERO, 2 },
+#endif
+#ifdef FE_UPWARD
+ { "FE_UPWARD", FE_UPWARD, 3 },
+#endif
+ {}
+};
+
+static int
+do_test (void)
+{
+ int save_round_mode __attribute__ ((unused)) = fegetround ();
+ int result = 0;
+ for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)
+ {
+ result |= test_in_one_mode (tests[i].s, &tests[i].r[modes[0].rnd_i],
+ &tests[i].exact, modes[0].mode_name,
+ modes[0].rnd_mode);
+ for (const struct fetestmodes *m = &modes[1]; m->mode_name != NULL; m++)
+ {
+ if (!fesetround (m->rnd_mode))
+ {
+ result |= test_in_one_mode (tests[i].s, &tests[i].r[m->rnd_i],
+ &tests[i].exact, m->mode_name,
+ m->rnd_mode);
+ fesetround (save_round_mode);
+ }
+ }
+ }
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod-round.c b/REORG.TODO/stdlib/tst-strtod-round.c
new file mode 100644
index 0000000000..2990d544d4
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-round.c
@@ -0,0 +1,24 @@
+/* char shim for tst-strtod-round-skeleton.c.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define L_(str) str
+#define FNPFX str
+#define CHAR char
+#define STRM "%s"
+
+#include <tst-strtod-round-skeleton.c>
diff --git a/REORG.TODO/stdlib/tst-strtod-underflow.c b/REORG.TODO/stdlib/tst-strtod-underflow.c
new file mode 100644
index 0000000000..f623a6be90
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-underflow.c
@@ -0,0 +1,225 @@
+/* Test for strtod handling of arguments that may cause floating-point
+ underflow.
+ Copyright (C) 2012-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <fenv.h>
+#include <float.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <tininess.h>
+
+enum underflow_case
+ {
+ /* Result is exact or outside the subnormal range. */
+ UNDERFLOW_NONE,
+ /* Result has magnitude at most half way between the largest
+ subnormal value and the smallest positive normal value, and is
+ not exact, so underflows in all rounding modes and independent
+ of how tininess is detected. */
+ UNDERFLOW_ALWAYS,
+ /* Result is positive, with magnitude larger than half way between
+ the largest subnormal value and the least positive normal
+ value, but would underflow when rounded to nearest to normal
+ precision, so underflows after rounding in all modes except
+ rounding upward. */
+ UNDERFLOW_EXCEPT_UPWARD,
+ /* Likewise, for a negative result, underflowing after rounding
+ except when rounding downward. */
+ UNDERFLOW_EXCEPT_DOWNWARD,
+ /* Result is positive, with magnitude at least three quarters of
+ the way from the largest subnormal value to the smallest
+ positive normal value, so underflows after rounding only when
+ rounding downward or toward zero. */
+ UNDERFLOW_ONLY_DOWNWARD_ZERO,
+ /* Likewise, for a negative result, underflowing after rounding
+ only when rounding upward or toward zero. */
+ UNDERFLOW_ONLY_UPWARD_ZERO,
+ };
+
+struct test
+{
+ const char *s;
+ enum underflow_case c;
+};
+
+static const struct test tests[] =
+ {
+ { "0x1p-1022", UNDERFLOW_NONE },
+ { "-0x1p-1022", UNDERFLOW_NONE },
+ { "0x0p-10000000000000000000000000", UNDERFLOW_NONE },
+ { "-0x0p-10000000000000000000000000", UNDERFLOW_NONE },
+ { "0x1p-10000000000000000000000000", UNDERFLOW_ALWAYS },
+ { "-0x1p-10000000000000000000000000", UNDERFLOW_ALWAYS },
+ { "0x1.000000000000000000001p-1022", UNDERFLOW_NONE },
+ { "-0x1.000000000000000000001p-1022", UNDERFLOW_NONE },
+ { "0x1p-1075", UNDERFLOW_ALWAYS },
+ { "-0x1p-1075", UNDERFLOW_ALWAYS },
+ { "0x1p-1023", UNDERFLOW_NONE },
+ { "-0x1p-1023", UNDERFLOW_NONE },
+ { "0x1p-1074", UNDERFLOW_NONE },
+ { "-0x1p-1074", UNDERFLOW_NONE },
+ { "0x1.ffffffffffffep-1023", UNDERFLOW_NONE },
+ { "-0x1.ffffffffffffep-1023", UNDERFLOW_NONE },
+ { "0x1.fffffffffffffp-1023", UNDERFLOW_ALWAYS },
+ { "-0x1.fffffffffffffp-1023", UNDERFLOW_ALWAYS },
+ { "0x1.fffffffffffff0001p-1023", UNDERFLOW_EXCEPT_UPWARD },
+ { "-0x1.fffffffffffff0001p-1023", UNDERFLOW_EXCEPT_DOWNWARD },
+ { "0x1.fffffffffffff7fffp-1023", UNDERFLOW_EXCEPT_UPWARD },
+ { "-0x1.fffffffffffff7fffp-1023", UNDERFLOW_EXCEPT_DOWNWARD },
+ { "0x1.fffffffffffff8p-1023", UNDERFLOW_ONLY_DOWNWARD_ZERO },
+ { "-0x1.fffffffffffff8p-1023", UNDERFLOW_ONLY_UPWARD_ZERO },
+ { "0x1.fffffffffffffffffp-1023", UNDERFLOW_ONLY_DOWNWARD_ZERO },
+ { "-0x1.fffffffffffffffffp-1023", UNDERFLOW_ONLY_UPWARD_ZERO },
+ };
+
+/* Return whether to expect underflow from a particular testcase, in a
+ given rounding mode. */
+
+static bool
+expect_underflow (enum underflow_case c, int rm)
+{
+ if (c == UNDERFLOW_NONE)
+ return false;
+ if (c == UNDERFLOW_ALWAYS)
+ return true;
+ if (TININESS_AFTER_ROUNDING)
+ {
+ switch (rm)
+ {
+#ifdef FE_DOWNWARD
+ case FE_DOWNWARD:
+ return (c == UNDERFLOW_EXCEPT_UPWARD
+ || c == UNDERFLOW_ONLY_DOWNWARD_ZERO);
+#endif
+
+#ifdef FE_TOWARDZERO
+ case FE_TOWARDZERO:
+ return true;
+#endif
+
+#ifdef FE_UPWARD
+ case FE_UPWARD:
+ return (c == UNDERFLOW_EXCEPT_DOWNWARD
+ || c == UNDERFLOW_ONLY_UPWARD_ZERO);
+#endif
+
+ default:
+ return (c == UNDERFLOW_EXCEPT_UPWARD
+ || c == UNDERFLOW_EXCEPT_DOWNWARD);
+ }
+ }
+ else
+ return true;
+}
+
+static bool support_underflow_exception = false;
+volatile double d = DBL_MIN;
+volatile double dd;
+
+static int
+test_in_one_mode (const char *s, enum underflow_case c, int rm,
+ const char *mode_name)
+{
+ int result = 0;
+ feclearexcept (FE_ALL_EXCEPT);
+ errno = 0;
+ double d = strtod (s, NULL);
+ int got_errno = errno;
+#ifdef FE_UNDERFLOW
+ bool got_fe_underflow = fetestexcept (FE_UNDERFLOW) != 0;
+#else
+ bool got_fe_underflow = false;
+#endif
+ printf ("strtod (%s) (%s) returned %a, errno = %d, %sunderflow exception\n",
+ s, mode_name, d, got_errno, got_fe_underflow ? "" : "no ");
+ bool this_expect_underflow = expect_underflow (c, rm);
+ if (got_errno != 0 && got_errno != ERANGE)
+ {
+ puts ("FAIL: errno neither 0 nor ERANGE");
+ result = 1;
+ }
+ else if (this_expect_underflow != (errno == ERANGE))
+ {
+ puts ("FAIL: underflow from errno differs from expectations");
+ result = 1;
+ }
+ if (support_underflow_exception && got_fe_underflow != this_expect_underflow)
+ {
+ puts ("FAIL: underflow from exceptions differs from expectations");
+ result = 1;
+ }
+ return result;
+}
+
+static int
+do_test (void)
+{
+ int save_round_mode __attribute__ ((unused)) = fegetround ();
+ int result = 0;
+#ifdef FE_TONEAREST
+ const int fe_tonearest = FE_TONEAREST;
+#else
+ const int fe_tonearest = 0;
+# if defined FE_DOWNWARD || defined FE_TOWARDZERO || defined FE_UPWARD
+# error "FE_TONEAREST not defined, but another rounding mode is"
+# endif
+#endif
+#ifdef FE_UNDERFLOW
+ feclearexcept (FE_ALL_EXCEPT);
+ dd = d * d;
+ if (fetestexcept (FE_UNDERFLOW))
+ support_underflow_exception = true;
+ else
+ puts ("underflow exception not supported at runtime, only testing errno");
+#endif
+ for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)
+ {
+ result |= test_in_one_mode (tests[i].s, tests[i].c, fe_tonearest,
+ "default rounding mode");
+#ifdef FE_DOWNWARD
+ if (!fesetround (FE_DOWNWARD))
+ {
+ result |= test_in_one_mode (tests[i].s, tests[i].c, FE_DOWNWARD,
+ "FE_DOWNWARD");
+ fesetround (save_round_mode);
+ }
+#endif
+#ifdef FE_TOWARDZERO
+ if (!fesetround (FE_TOWARDZERO))
+ {
+ result |= test_in_one_mode (tests[i].s, tests[i].c, FE_TOWARDZERO,
+ "FE_TOWARDZERO");
+ fesetround (save_round_mode);
+ }
+#endif
+#ifdef FE_UPWARD
+ if (!fesetround (FE_UPWARD))
+ {
+ result |= test_in_one_mode (tests[i].s, tests[i].c, FE_UPWARD,
+ "FE_UPWARD");
+ fesetround (save_round_mode);
+ }
+#endif
+ }
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod.c b/REORG.TODO/stdlib/tst-strtod.c
new file mode 100644
index 0000000000..1ab7f8a5aa
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod.c
@@ -0,0 +1,218 @@
+/* Basic tests for strtod.
+ Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <ctype.h>
+#include <locale.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <math.h>
+
+struct ltest
+ {
+ const char *str; /* Convert this. */
+ double expect; /* To get this. */
+ char left; /* With this left over. */
+ int err; /* And this in errno. */
+ };
+static const struct ltest tests[] =
+ {
+ { "12.345", 12.345, '\0', 0 },
+ { "12.345e19", 12.345e19, '\0', 0 },
+ { "-.1e+9", -.1e+9, '\0', 0 },
+ { ".125", .125, '\0', 0 },
+ { "1e20", 1e20, '\0', 0 },
+ { "0e-19", 0, '\0', 0 },
+ { "4\00012", 4.0, '\0', 0 },
+ { "5.9e-76", 5.9e-76, '\0', 0 },
+ { "0x1.4p+3", 10.0, '\0', 0 },
+ { "0xAp0", 10.0, '\0', 0 },
+ { "0x0Ap0", 10.0, '\0', 0 },
+ { "0x0A", 10.0, '\0', 0 },
+ { "0xA0", 160.0, '\0', 0 },
+ { "0x0.A0p8", 160.0, '\0', 0 },
+ { "0x0.50p9", 160.0, '\0', 0 },
+ { "0x0.28p10", 160.0, '\0', 0 },
+ { "0x0.14p11", 160.0, '\0', 0 },
+ { "0x0.0A0p12", 160.0, '\0', 0 },
+ { "0x0.050p13", 160.0, '\0', 0 },
+ { "0x0.028p14", 160.0, '\0', 0 },
+ { "0x0.014p15", 160.0, '\0', 0 },
+ { "0x00.00A0p16", 160.0, '\0', 0 },
+ { "0x00.0050p17", 160.0, '\0', 0 },
+ { "0x00.0028p18", 160.0, '\0', 0 },
+ { "0x00.0014p19", 160.0, '\0', 0 },
+ { "0x1p-1023",
+ 1.11253692925360069154511635866620203210960799023116591527666e-308,
+ '\0', 0 },
+ { "0x0.8p-1022",
+ 1.11253692925360069154511635866620203210960799023116591527666e-308,
+ '\0', 0 },
+ { "Inf", HUGE_VAL, '\0', 0 },
+ { "-Inf", -HUGE_VAL, '\0', 0 },
+ { "+InFiNiTy", HUGE_VAL, '\0', 0 },
+ { "0x80000Ap-23", 0x80000Ap-23, '\0', 0 },
+ { "1e-324", 0, '\0', ERANGE },
+ { "0x100000000000008p0", 0x1p56, '\0', 0 },
+ { "0x100000000000008.p0", 0x1p56, '\0', 0 },
+ { "0x100000000000008.00p0", 0x1p56, '\0', 0 },
+ { "0x10000000000000800p0", 0x1p64, '\0', 0 },
+ { "0x10000000000000801p0", 0x1.0000000000001p64, '\0', 0 },
+ { NULL, 0, '\0', 0 }
+ };
+
+static void expand (char *dst, int c);
+static int long_dbl (void);
+
+static int
+do_test (void)
+{
+ char buf[100];
+ const struct ltest *lt;
+ char *ep;
+ int status = 0;
+ int save_errno;
+
+ for (lt = tests; lt->str != NULL; ++lt)
+ {
+ double d;
+
+ errno = 0;
+ d = strtod(lt->str, &ep);
+ save_errno = errno;
+ printf ("strtod (\"%s\") test %u",
+ lt->str, (unsigned int) (lt - tests));
+ if (d == lt->expect && *ep == lt->left && save_errno == lt->err)
+ puts ("\tOK");
+ else
+ {
+ puts ("\tBAD");
+ if (d != lt->expect)
+ printf (" returns %.60g, expected %.60g\n", d, lt->expect);
+ if (lt->left != *ep)
+ {
+ char exp1[5], exp2[5];
+ expand (exp1, *ep);
+ expand (exp2, lt->left);
+ printf (" leaves '%s', expected '%s'\n", exp1, exp2);
+ }
+ if (save_errno != lt->err)
+ printf (" errno %d (%s) instead of %d (%s)\n",
+ save_errno, strerror (save_errno),
+ lt->err, strerror (lt->err));
+ status = 1;
+ }
+ }
+
+ sprintf (buf, "%f", strtod ("-0.0", NULL));
+ if (strcmp (buf, "-0.000000") != 0)
+ {
+ printf (" strtod (\"-0.0\", NULL) returns \"%s\"\n", buf);
+ status = 1;
+ }
+
+ const char input[] = "3752432815e-39";
+
+ float f1 = strtold (input, NULL);
+ float f2;
+ float f3 = strtof (input, NULL);
+ sscanf (input, "%g", &f2);
+
+ if (f1 != f2)
+ {
+ printf ("f1 = %a != f2 = %a\n", f1, f2);
+ status = 1;
+ }
+ if (f1 != f3)
+ {
+ printf ("f1 = %a != f3 = %a\n", f1, f3);
+ status = 1;
+ }
+ if (f2 != f3)
+ {
+ printf ("f2 = %a != f3 = %a\n", f2, f3);
+ status = 1;
+ }
+
+ const char input2[] = "+1.000000000116415321826934814453125";
+ if (strtold (input2, NULL) != +1.000000000116415321826934814453125L)
+ {
+ printf ("input2: %La != %La\n", strtold (input2, NULL),
+ +1.000000000116415321826934814453125L);
+ status = 1;
+ }
+
+ static struct { const char *str; long double l; } ltests[] =
+ {
+ { "42.0000000000000000001", 42.0000000000000000001L },
+ { "42.00000000000000000001", 42.00000000000000000001L },
+ { "42.000000000000000000001", 42.000000000000000000001L }
+ };
+ int n;
+ for (n = 0; n < sizeof (ltests) / sizeof (ltests[0]); ++n)
+ if (strtold (ltests[n].str, NULL) != ltests[n].l)
+ {
+ printf ("ltests[%d]: %La != %La\n", n,
+ strtold (ltests[n].str, NULL), ltests[n].l);
+ status = 1;
+ }
+
+ status |= long_dbl ();
+
+ return status ? EXIT_FAILURE : EXIT_SUCCESS;
+}
+
+static void
+expand (char *dst, int c)
+{
+ if (isprint (c))
+ {
+ dst[0] = c;
+ dst[1] = '\0';
+ }
+ else
+ (void) sprintf (dst, "%#.3o", (unsigned int) c);
+}
+
+static int
+long_dbl (void)
+{
+ /* Regenerate this string using
+
+ echo '(2^53-1)*2^(1024-53)' | bc | sed 's/\([^\]*\)\\*$/ "\1"/'
+
+ */
+ static const char longestdbl[] =
+ "17976931348623157081452742373170435679807056752584499659891747680315"
+ "72607800285387605895586327668781715404589535143824642343213268894641"
+ "82768467546703537516986049910576551282076245490090389328944075868508"
+ "45513394230458323690322294816580855933212334827479782620414472316873"
+ "8177180919299881250404026184124858368";
+ double d = strtod (longestdbl, NULL);
+
+ printf ("strtod (\"%s\", NULL) = %g\n", longestdbl, d);
+
+ if (d != 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000)
+ return 1;
+
+ return 0;
+}
+
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-strtod.h b/REORG.TODO/stdlib/tst-strtod.h
new file mode 100644
index 0000000000..bf5f90138f
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod.h
@@ -0,0 +1,49 @@
+/* Common utilities for testing strtod and its derivatives.
+ This file is part of the GNU C Library.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _TST_STRTOD_H
+#define _TST_STRTOD_H
+
+#define FSTRLENMAX 128
+
+/* Splat n variants of the same test for the various strtod functions. */
+#define GEN_TEST_STRTOD_FOREACH(mfunc, ...) \
+ mfunc ( f, float, strfromf, f, f, ##__VA_ARGS__) \
+ mfunc ( d, double, strfromd, , , ##__VA_ARGS__) \
+ mfunc ( ld, long double, strfroml, L, l, ##__VA_ARGS__)
+/* The arguments to the generated macros are:
+ FSUF - Function suffix
+ FTYPE - float type
+ FTOSTR - float to string func
+ LSUF - Literal suffix
+ CSUF - C standardish suffix for many of the math functions
+*/
+
+
+
+#define STRTOD_TEST_FOREACH(mfunc, ...) \
+({ \
+ int result = 0; \
+ result |= mfunc ## f (__VA_ARGS__); \
+ result |= mfunc ## d (__VA_ARGS__); \
+ result |= mfunc ## ld (__VA_ARGS__); \
+ result; \
+})
+
+
+#endif
diff --git a/REORG.TODO/stdlib/tst-strtod1i.c b/REORG.TODO/stdlib/tst-strtod1i.c
new file mode 100644
index 0000000000..6f79425667
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod1i.c
@@ -0,0 +1,84 @@
+/* Basic tests for __strtod_internal.
+ Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <ctype.h>
+#include <locale.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <math.h>
+
+/* Perform a few tests in a locale with thousands separators. */
+static int
+do_test (void)
+{
+ static const struct
+ {
+ const char *loc;
+ const char *str;
+ double exp;
+ ptrdiff_t nread;
+ } tests[] =
+ {
+ { "de_DE.UTF-8", "1,5", 1.5, 3 },
+ { "de_DE.UTF-8", "1.5", 1.0, 1 },
+ { "de_DE.UTF-8", "1.500", 1500.0, 5 },
+ { "de_DE.UTF-8", "36.893.488.147.419.103.232", 0x1.0p65, 26 }
+ };
+#define ntests (sizeof (tests) / sizeof (tests[0]))
+ size_t n;
+ int result = 0;
+
+ puts ("\nLocale tests");
+
+ for (n = 0; n < ntests; ++n)
+ {
+ double d;
+ char *endp;
+
+ if (setlocale (LC_ALL, tests[n].loc) == NULL)
+ {
+ printf ("cannot set locale %s\n", tests[n].loc);
+ result = 1;
+ continue;
+ }
+
+ d = __strtod_internal (tests[n].str, &endp, 1);
+ if (d != tests[n].exp)
+ {
+ printf ("strtod(\"%s\") returns %g and not %g\n",
+ tests[n].str, d, tests[n].exp);
+ result = 1;
+ }
+ else if (endp - tests[n].str != tests[n].nread)
+ {
+ printf ("strtod(\"%s\") read %td bytes and not %td\n",
+ tests[n].str, endp - tests[n].str, tests[n].nread);
+ result = 1;
+ }
+ }
+
+ if (result == 0)
+ puts ("all OK");
+
+ return result ? EXIT_FAILURE : EXIT_SUCCESS;
+}
+
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-strtod2.c b/REORG.TODO/stdlib/tst-strtod2.c
new file mode 100644
index 0000000000..a7df82ebbd
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod2.c
@@ -0,0 +1,44 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+struct test
+{
+ const char *str;
+ double result;
+ size_t offset;
+} tests[] =
+{
+ { "0xy", 0.0, 1 },
+ { "0x.y", 0.0, 1 },
+ { "0x0.y", 0.0, 4 },
+ { "0x.0y", 0.0, 4 },
+ { ".y", 0.0, 0 },
+ { "0.y", 0.0, 2 },
+ { ".0y", 0.0, 2 }
+};
+
+static int
+do_test (void)
+{
+ int status = 0;
+ for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)
+ {
+ char *ep;
+ double r = strtod (tests[i].str, &ep);
+ if (r != tests[i].result)
+ {
+ printf ("test %zu r = %g, expect %g\n", i, r, tests[i].result);
+ status = 1;
+ }
+ if (ep != tests[i].str + tests[i].offset)
+ {
+ printf ("test %zu strtod parsed %tu characters, expected %zu\n",
+ i, ep - tests[i].str, tests[i].offset);
+ status = 1;
+ }
+ }
+ return status;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod3.c b/REORG.TODO/stdlib/tst-strtod3.c
new file mode 100644
index 0000000000..23abec1896
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod3.c
@@ -0,0 +1,55 @@
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static const struct
+{
+ const char *in;
+ const char *out;
+ double expected;
+} tests[] =
+ {
+ { "000,,,e1", ",,,e1", 0.0 },
+ { "000e1", "", 0.0 },
+ { "000,1e1", ",1e1", 0.0 }
+ };
+#define NTESTS (sizeof (tests) / sizeof (tests[0]))
+
+
+static int
+do_test (void)
+{
+ if (setlocale (LC_ALL, "en_US.ISO-8859-1") == NULL)
+ {
+ puts ("could not set locale");
+ return 1;
+ }
+
+ int status = 0;
+
+ for (int i = 0; i < NTESTS; ++i)
+ {
+ char *ep;
+ double r = __strtod_internal (tests[i].in, &ep, 1);
+
+ if (strcmp (ep, tests[i].out) != 0)
+ {
+ printf ("%d: got rest string \"%s\", expected \"%s\"\n",
+ i, ep, tests[i].out);
+ status = 1;
+ }
+
+ if (r != tests[i].expected)
+ {
+ printf ("%d: got wrong results %g, expected %g\n",
+ i, r, tests[i].expected);
+ status = 1;
+ }
+ }
+
+ return status;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod4.c b/REORG.TODO/stdlib/tst-strtod4.c
new file mode 100644
index 0000000000..2d9d54c944
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod4.c
@@ -0,0 +1,56 @@
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define NBSP "\xc2\xa0"
+
+static const struct
+{
+ const char *in;
+ const char *out;
+ double expected;
+} tests[] =
+ {
+ { "000"NBSP"000"NBSP"000", "", 0.0 },
+ { "1"NBSP"000"NBSP"000,5x", "x", 1000000.5 }
+ };
+#define NTESTS (sizeof (tests) / sizeof (tests[0]))
+
+
+static int
+do_test (void)
+{
+ if (setlocale (LC_ALL, "cs_CZ.UTF-8") == NULL)
+ {
+ puts ("could not set locale");
+ return 1;
+ }
+
+ int status = 0;
+
+ for (int i = 0; i < NTESTS; ++i)
+ {
+ char *ep;
+ double r = __strtod_internal (tests[i].in, &ep, 1);
+
+ if (strcmp (ep, tests[i].out) != 0)
+ {
+ printf ("%d: got rest string \"%s\", expected \"%s\"\n",
+ i, ep, tests[i].out);
+ status = 1;
+ }
+
+ if (r != tests[i].expected)
+ {
+ printf ("%d: got wrong results %g, expected %g\n",
+ i, r, tests[i].expected);
+ status = 1;
+ }
+ }
+
+ return status;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod5.c b/REORG.TODO/stdlib/tst-strtod5.c
new file mode 100644
index 0000000000..8976e39a58
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod5.c
@@ -0,0 +1,89 @@
+/* Tests of strtod in a locale using decimal comma.
+ Copyright (C) 2007-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#define NBSP "\xc2\xa0"
+
+static const struct
+{
+ const char *in;
+ double expected;
+} tests[] =
+ {
+ { "0", 0.0 },
+ { "000", 0.0 },
+ { "-0", -0.0 },
+ { "-000", -0.0 },
+ { "0,", 0.0 },
+ { "-0,", -0.0 },
+ { "0,0", 0.0 },
+ { "-0,0", -0.0 },
+ { "0e-10", 0.0 },
+ { "-0e-10", -0.0 },
+ { "0,e-10", 0.0 },
+ { "-0,e-10", -0.0 },
+ { "0,0e-10", 0.0 },
+ { "-0,0e-10", -0.0 },
+ { "0e-1000000", 0.0 },
+ { "-0e-1000000", -0.0 },
+ { "0,0e-1000000", 0.0 },
+ { "-0,0e-1000000", -0.0 },
+ };
+#define NTESTS (sizeof (tests) / sizeof (tests[0]))
+
+
+static int
+do_test (void)
+{
+ if (setlocale (LC_ALL, "cs_CZ.UTF-8") == NULL)
+ {
+ puts ("could not set locale");
+ return 1;
+ }
+
+ int status = 0;
+
+ for (int i = 0; i < NTESTS; ++i)
+ {
+ char *ep;
+ double r = strtod (tests[i].in, &ep);
+
+ if (*ep != '\0')
+ {
+ printf ("%d: got rest string \"%s\", expected \"\"\n", i, ep);
+ status = 1;
+ }
+
+ if (r != tests[i].expected
+ || copysign (10.0, r) != copysign (10.0, tests[i].expected))
+ {
+ printf ("%d: got wrong results %g, expected %g\n",
+ i, r, tests[i].expected);
+ status = 1;
+ }
+ }
+
+ return status;
+}
+
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-strtod5i.c b/REORG.TODO/stdlib/tst-strtod5i.c
new file mode 100644
index 0000000000..7e319585bb
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod5i.c
@@ -0,0 +1,100 @@
+/* Tests of __strtod_internal in a locale using decimal comma.
+ Copyright (C) 2007-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#define NBSP "\xc2\xa0"
+
+static const struct
+{
+ const char *in;
+ int group;
+ double expected;
+} tests[] =
+ {
+ { "0", 0, 0.0 },
+ { "000", 0, 0.0 },
+ { "-0", 0, -0.0 },
+ { "-000", 0, -0.0 },
+ { "0,", 0, 0.0 },
+ { "-0,", 0, -0.0 },
+ { "0,0", 0, 0.0 },
+ { "-0,0", 0, -0.0 },
+ { "0e-10", 0, 0.0 },
+ { "-0e-10", 0, -0.0 },
+ { "0,e-10", 0, 0.0 },
+ { "-0,e-10", 0, -0.0 },
+ { "0,0e-10", 0, 0.0 },
+ { "-0,0e-10", 0, -0.0 },
+ { "0e-1000000", 0, 0.0 },
+ { "-0e-1000000", 0, -0.0 },
+ { "0,0e-1000000", 0, 0.0 },
+ { "-0,0e-1000000", 0, -0.0 },
+ { "0", 1, 0.0 },
+ { "000", 1, 0.0 },
+ { "-0", 1, -0.0 },
+ { "-000", 1, -0.0 },
+ { "0e-10", 1, 0.0 },
+ { "-0e-10", 1, -0.0 },
+ { "0e-1000000", 1, 0.0 },
+ { "-0e-1000000", 1, -0.0 },
+ { "000"NBSP"000"NBSP"000", 1, 0.0 },
+ { "-000"NBSP"000"NBSP"000", 1, -0.0 }
+ };
+#define NTESTS (sizeof (tests) / sizeof (tests[0]))
+
+
+static int
+do_test (void)
+{
+ if (setlocale (LC_ALL, "cs_CZ.UTF-8") == NULL)
+ {
+ puts ("could not set locale");
+ return 1;
+ }
+
+ int status = 0;
+
+ for (int i = 0; i < NTESTS; ++i)
+ {
+ char *ep;
+ double r = __strtod_internal (tests[i].in, &ep, tests[i].group);
+
+ if (*ep != '\0')
+ {
+ printf ("%d: got rest string \"%s\", expected \"\"\n", i, ep);
+ status = 1;
+ }
+
+ if (r != tests[i].expected
+ || copysign (10.0, r) != copysign (10.0, tests[i].expected))
+ {
+ printf ("%d: got wrong results %g, expected %g\n",
+ i, r, tests[i].expected);
+ status = 1;
+ }
+ }
+
+ return status;
+}
+
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-strtod6.c b/REORG.TODO/stdlib/tst-strtod6.c
new file mode 100644
index 0000000000..9bfbdc2b38
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod6.c
@@ -0,0 +1,57 @@
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "tst-strtod.h"
+
+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
+static int \
+test_strto ## FSUF (const char str[]) \
+{ \
+ char *endp; \
+ int result = 0; \
+ puts (str); \
+ FTYPE d = strto ## FSUF (str, &endp); \
+ if (!isnan (d)) \
+ { \
+ puts ("strto" #FSUF " did not return NAN"); \
+ result = 1; \
+ } \
+ if (issignaling (d)) \
+ { \
+ puts ("strto" #FSUF " returned a sNAN"); \
+ result = 1; \
+ } \
+ if (strcmp (endp, "something") != 0) \
+ { \
+ puts ("strto" #FSUF " set incorrect end pointer"); \
+ result = 1; \
+ } \
+ return result; \
+}
+
+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD);
+
+static int
+do_test (void)
+{
+ int result = 0;
+
+ result |= STRTOD_TEST_FOREACH (test_strto, "NaN(blabla)something");
+ result |= STRTOD_TEST_FOREACH (test_strto, "NaN(1234)something");
+ /* UINT32_MAX. */
+ result |= STRTOD_TEST_FOREACH (test_strto, "NaN(4294967295)something");
+ /* UINT64_MAX. */
+ result |= STRTOD_TEST_FOREACH (test_strto,
+ "NaN(18446744073709551615)something");
+ /* The case of zero is special in that "something" has to be done to make the
+ mantissa different from zero, which would mean infinity instead of
+ NaN. */
+ result |= STRTOD_TEST_FOREACH (test_strto, "NaN(0)something");
+
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtol-locale-main.c b/REORG.TODO/stdlib/tst-strtol-locale-main.c
new file mode 100644
index 0000000000..5de61e7b16
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtol-locale-main.c
@@ -0,0 +1,87 @@
+/* Test strtol functions work with all ASCII letters in Turkish
+ locales (bug 19242).
+ Copyright (C) 2015-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <wchar.h>
+
+#define STR_(X) #X
+#define STR(X) STR_(X)
+#define FNPFXS STR (FNPFX)
+#define CONCAT_(X, Y) X ## Y
+#define CONCAT(X, Y) CONCAT_ (X, Y)
+#define FNX(FN) CONCAT (FNPFX, FN)
+
+#define TEST(LOC, STR, EXP_VAL, FN, TYPE, FMT) \
+ do \
+ { \
+ CHAR *ep; \
+ TYPE val = FNX (FN) (STR, &ep, 36); \
+ printf ("%s: " FNPFXS #FN " (" SFMT ") == " FMT "\n", LOC, STR, val); \
+ if (val == (TYPE) (EXP_VAL) && *ep == 0) \
+ printf ("PASS: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR); \
+ else \
+ { \
+ printf ("FAIL: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR); \
+ result = 1; \
+ } \
+ } \
+ while (0)
+
+static int
+test_one_locale (const char *loc)
+{
+ if (setlocale (LC_ALL, loc) == NULL)
+ {
+ printf ("setlocale (LC_ALL, \"%s\") failed\n", loc);
+ return 1;
+ }
+ int result = 0;
+ for (int i = 10; i < 36; i++)
+ {
+ CHAR s[2];
+ s[0] = L_('A') + i - 10;
+ s[1] = 0;
+ TEST (loc, s, i, l, long int, "%ld");
+ TEST (loc, s, i, ul, unsigned long int, "%lu");
+ TEST (loc, s, i, ll, long long int, "%lld");
+ TEST (loc, s, i, ull, unsigned long long int, "%llu");
+ s[0] = L_('a') + i - 10;
+ s[1] = 0;
+ TEST (loc, s, i, l, long int, "%ld");
+ TEST (loc, s, i, ul, unsigned long int, "%lu");
+ TEST (loc, s, i, ll, long long int, "%lld");
+ TEST (loc, s, i, ull, unsigned long long int, "%llu");
+ }
+ return result;
+}
+
+static int
+do_test (void)
+{
+ int result = 0;
+ result |= test_one_locale ("C");
+ result |= test_one_locale ("tr_TR.UTF-8");
+ result |= test_one_locale ("tr_TR.ISO-8859-9");
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtol-locale.c b/REORG.TODO/stdlib/tst-strtol-locale.c
new file mode 100644
index 0000000000..1d5092ba84
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtol-locale.c
@@ -0,0 +1,25 @@
+/* Test strtol functions work with all ASCII letters in Turkish
+ locales (bug 19242). Narrow string version.
+ Copyright (C) 2015-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define CHAR char
+#define SFMT "\"%s\""
+#define FNPFX strto
+#define L_(C) C
+
+#include <tst-strtol-locale-main.c>
diff --git a/REORG.TODO/stdlib/tst-strtol.c b/REORG.TODO/stdlib/tst-strtol.c
new file mode 100644
index 0000000000..5b80622e07
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtol.c
@@ -0,0 +1,626 @@
+/* My bet is this was written by Chris Torek.
+ I reformatted and ansidecl-ized it, and tweaked it a little. */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+struct ltest
+ {
+ const char *str; /* Convert this. */
+ unsigned long int expect; /* To get this. */
+ int base; /* Use this base. */
+ char left; /* With this left over. */
+ int err; /* And this in errno. */
+ };
+static const struct ltest tests[] =
+ {
+ /* First, signed numbers: */
+ /* simple... */
+ {"123", 123, 0, 0, 0},
+ {"+123", 123, 0, 0, 0},
+ {" 123", 123, 0, 0, 0},
+ {" 123 ", 123, 0, ' ', 0},
+ {" -17", -17, 0, 0, 0},
+
+ /* implicit base... */
+ {"0123", 0123, 0, 0, 0},
+ {"0123a", 0123, 0, 'a', 0},
+ {"01239", 0123, 0, '9', 0},
+ {"0x123", 0x123, 0, 0, 0},
+ {"-0x123", -0x123, 0, 0, 0},
+ {"0x0xc", 0, 0, 'x', 0},
+ {" +0x123fg", 0x123f, 0, 'g', 0},
+
+ /* explicit base... */
+ {"123", 0x123, 16, 0, 0},
+ {"0x123", 0x123, 16, 0, 0},
+ {"123", 0123, 8, 0, 0},
+ {"0123", 0123, 8, 0, 0},
+ {"0123", 123, 10, 0, 0},
+ {"0x123", 0, 10, 'x', 0},
+
+ /* case insensitivity... */
+ {"abcd", 0xabcd, 16, 0, 0},
+ {"AbCd", 0xabcd, 16, 0, 0},
+ {"0xABCD", 0xabcd, 16, 0, 0},
+ {"0Xabcd", 0xabcd, 16, 0, 0},
+
+ /* odd bases... */
+ {"0xyz", 33 * 35 + 34, 35, 'z', 0},
+ {"yz!", 34 * 36 + 35, 36, '!', 0},
+ {"-yz", -(34*36 + 35), 36, 0, 0},
+ {"GhI4", ((16*20 + 17)*20 + 18)*20 + 4, 20, 0, 0},
+
+ /* extremes... */
+#if LONG_MAX == 0x7fffffff
+ {"2147483647", 2147483647, 0, 0, 0},
+ {"2147483648", 2147483647, 0, 0, ERANGE},
+ {"214748364888", 2147483647, 0, 0, ERANGE},
+ {"2147483650", 2147483647, 0, 0, ERANGE},
+ {"-2147483648", 0x80000000, 0, 0, 0},
+ {"-2147483649", 0x80000000, 0, 0, ERANGE},
+ {"0x1122334455z", 2147483647, 16, 'z', ERANGE},
+
+ {"1111111111111111111111111111111", 2147483647, 2, 0, 0},
+ {"10000000000000000000000000000000", 2147483647, 2, 0, ERANGE},
+ {"12112122212110202101", 2147483647, 3, 0, 0},
+ {"12112122212110202102", 2147483647, 3, 0, ERANGE},
+ {"1333333333333333", 2147483647, 4, 0, 0},
+ {"2000000000000000", 2147483647, 4, 0, ERANGE},
+ {"13344223434042", 2147483647, 5, 0, 0},
+ {"13344223434043", 2147483647, 5, 0, ERANGE},
+ {"553032005531", 2147483647, 6, 0, 0},
+ {"553032005532", 2147483647, 6, 0, ERANGE},
+ {"104134211161", 2147483647, 7, 0, 0},
+ {"104134211162", 2147483647, 7, 0, ERANGE},
+ {"17777777777", 2147483647, 8, 0, 0},
+ {"20000000000", 2147483647, 8, 0, ERANGE},
+ {"5478773671", 2147483647, 9, 0, 0},
+ {"5478773672", 2147483647, 9, 0, ERANGE},
+ {"2147483647", 2147483647, 10, 0, 0},
+ {"2147483648", 2147483647, 10, 0, ERANGE},
+ {"a02220281", 2147483647, 11, 0, 0},
+ {"a02220282", 2147483647, 11, 0, ERANGE},
+ {"4bb2308a7", 2147483647, 12, 0, 0},
+ {"4bb2308a8", 2147483647, 12, 0, ERANGE},
+ {"282ba4aaa", 2147483647, 13, 0, 0},
+ {"282ba4aab", 2147483647, 13, 0, ERANGE},
+ {"1652ca931", 2147483647, 14, 0, 0},
+ {"1652ca932", 2147483647, 14, 0, ERANGE},
+ {"c87e66b7", 2147483647, 15, 0, 0},
+ {"c87e66b8", 2147483647, 15, 0, ERANGE},
+ {"7fffffff", 2147483647, 16, 0, 0},
+ {"80000000", 2147483647, 16, 0, ERANGE},
+ {"53g7f548", 2147483647, 17, 0, 0},
+ {"53g7f549", 2147483647, 17, 0, ERANGE},
+ {"3928g3h1", 2147483647, 18, 0, 0},
+ {"3928g3h2", 2147483647, 18, 0, ERANGE},
+ {"27c57h32", 2147483647, 19, 0, 0},
+ {"27c57h33", 2147483647, 19, 0, ERANGE},
+ {"1db1f927", 2147483647, 20, 0, 0},
+ {"1db1f928", 2147483647, 20, 0, ERANGE},
+ {"140h2d91", 2147483647, 21, 0, 0},
+ {"140h2d92", 2147483647, 21, 0, ERANGE},
+ {"ikf5bf1", 2147483647, 22, 0, 0},
+ {"ikf5bf2", 2147483647, 22, 0, ERANGE},
+ {"ebelf95", 2147483647, 23, 0, 0},
+ {"ebelf96", 2147483647, 23, 0, ERANGE},
+ {"b5gge57", 2147483647, 24, 0, 0},
+ {"b5gge58", 2147483647, 24, 0, ERANGE},
+ {"8jmdnkm", 2147483647, 25, 0, 0},
+ {"8jmdnkn", 2147483647, 25, 0, ERANGE},
+ {"6oj8ion", 2147483647, 26, 0, 0},
+ {"6oj8ioo", 2147483647, 26, 0, ERANGE},
+ {"5ehncka", 2147483647, 27, 0, 0},
+ {"5ehnckb", 2147483647, 27, 0, ERANGE},
+ {"4clm98f", 2147483647, 28, 0, 0},
+ {"4clm98g", 2147483647, 28, 0, ERANGE},
+ {"3hk7987", 2147483647, 29, 0, 0},
+ {"3hk7988", 2147483647, 29, 0, ERANGE},
+ {"2sb6cs7", 2147483647, 30, 0, 0},
+ {"2sb6cs8", 2147483647, 30, 0, ERANGE},
+ {"2d09uc1", 2147483647, 31, 0, 0},
+ {"2d09uc2", 2147483647, 31, 0, ERANGE},
+ {"1vvvvvv", 2147483647, 32, 0, 0},
+ {"2000000", 2147483647, 32, 0, ERANGE},
+ {"1lsqtl1", 2147483647, 33, 0, 0},
+ {"1lsqtl2", 2147483647, 33, 0, ERANGE},
+ {"1d8xqrp", 2147483647, 34, 0, 0},
+ {"1d8xqrq", 2147483647, 34, 0, ERANGE},
+ {"15v22um", 2147483647, 35, 0, 0},
+ {"15v22un", 2147483647, 35, 0, ERANGE},
+ {"zik0zj", 2147483647, 36, 0, 0},
+ {"zik0zk", 2147483647, 36, 0, ERANGE},
+
+ {"-10000000000000000000000000000000", -2147483648, 2, 0, 0},
+ {"-10000000000000000000000000000001", -2147483648, 2, 0, ERANGE},
+ {"-12112122212110202102", -2147483648, 3, 0, 0},
+ {"-12112122212110202110", -2147483648, 3, 0, ERANGE},
+ {"-2000000000000000", -2147483648, 4, 0, 0},
+ {"-2000000000000001", -2147483648, 4, 0, ERANGE},
+ {"-13344223434043", -2147483648, 5, 0, 0},
+ {"-13344223434044", -2147483648, 5, 0, ERANGE},
+ {"-553032005532", -2147483648, 6, 0, 0},
+ {"-553032005533", -2147483648, 6, 0, ERANGE},
+ {"-104134211162", -2147483648, 7, 0, 0},
+ {"-104134211163", -2147483648, 7, 0, ERANGE},
+ {"-20000000000", -2147483648, 8, 0, },
+ {"-20000000001", -2147483648, 8, 0, ERANGE},
+ {"-5478773672", -2147483648, 9, 0, 0},
+ {"-5478773673", -2147483648, 9, 0, ERANGE},
+ {"-2147483648", -2147483648, 10, 0, 0},
+ {"-2147483649", -2147483648, 10, 0, ERANGE},
+ {"-a02220282", -2147483648, 11, 0, 0},
+ {"-a02220283", -2147483648, 11, 0, ERANGE},
+ {"-4bb2308a8", -2147483648, 12, 0, 0},
+ {"-4bb2308a9", -2147483648, 12, 0, ERANGE},
+ {"-282ba4aab", -2147483648, 13, 0, 0},
+ {"-282ba4aac", -2147483648, 13, 0, ERANGE},
+ {"-1652ca932", -2147483648, 14, 0, 0},
+ {"-1652ca933", -2147483648, 14, 0, ERANGE},
+ {"-c87e66b8", -2147483648, 15, 0, 0},
+ {"-c87e66b9", -2147483648, 15, 0, ERANGE},
+ {"-80000000", -2147483648, 16, 0, 0},
+ {"-80000001", -2147483648, 16, 0, ERANGE},
+ {"-53g7f549", -2147483648, 17, 0, 0},
+ {"-53g7f54a", -2147483648, 17, 0, ERANGE},
+ {"-3928g3h2", -2147483648, 18, 0, 0},
+ {"-3928g3h3", -2147483648, 18, 0, ERANGE},
+ {"-27c57h33", -2147483648, 19, 0, 0},
+ {"-27c57h34", -2147483648, 19, 0, ERANGE},
+ {"-1db1f928", -2147483648, 20, 0, 0},
+ {"-1db1f929", -2147483648, 20, 0, ERANGE},
+ {"-140h2d92", -2147483648, 21, 0, 0},
+ {"-140h2d93", -2147483648, 21, 0, ERANGE},
+ {"-ikf5bf2", -2147483648, 22, 0, 0},
+ {"-ikf5bf3", -2147483648, 22, 0, ERANGE},
+ {"-ebelf96", -2147483648, 23, 0, 0},
+ {"-ebelf97", -2147483648, 23, 0, ERANGE},
+ {"-b5gge58", -2147483648, 24, 0, 0},
+ {"-b5gge59", -2147483648, 24, 0, ERANGE},
+ {"-8jmdnkn", -2147483648, 25, 0, 0},
+ {"-8jmdnko", -2147483648, 25, 0, ERANGE},
+ {"-6oj8ioo", -2147483648, 26, 0, 0},
+ {"-6oj8iop", -2147483648, 26, 0, ERANGE},
+ {"-5ehnckb", -2147483648, 27, 0, 0},
+ {"-5ehnckc", -2147483648, 27, 0, ERANGE},
+ {"-4clm98g", -2147483648, 28, 0, 0},
+ {"-4clm98h", -2147483648, 28, 0, ERANGE},
+ {"-3hk7988", -2147483648, 29, 0, 0},
+ {"-3hk7989", -2147483648, 29, 0, ERANGE},
+ {"-2sb6cs8", -2147483648, 30, 0, 0},
+ {"-2sb6cs9", -2147483648, 30, 0, ERANGE},
+ {"-2d09uc2", -2147483648, 31, 0, 0},
+ {"-2d09uc3", -2147483648, 31, 0, ERANGE},
+ {"-2000000", -2147483648, 32, 0, 0},
+ {"-2000001", -2147483648, 32, 0, ERANGE},
+ {"-1lsqtl2", -2147483648, 33, 0, 0},
+ {"-1lsqtl3", -2147483648, 33, 0, ERANGE},
+ {"-1d8xqrq", -2147483648, 34, 0, 0},
+ {"-1d8xqrr", -2147483648, 34, 0, ERANGE},
+ {"-15v22un", -2147483648, 35, 0, 0},
+ {"-15v22uo", -2147483648, 35, 0, ERANGE},
+ {"-zik0zk", -2147483648, 36, 0, 0},
+ {"-zik0zl", -2147483648, 36, 0, ERANGE},
+#else
+ {"9223372036854775807", 9223372036854775807, 0, 0, 0},
+ {"9223372036854775808", 9223372036854775807, 0, 0, ERANGE},
+ {"922337203685477580777", 9223372036854775807, 0, 0, ERANGE},
+ {"9223372036854775810", 9223372036854775807, 0, 0, ERANGE},
+ {"-2147483648", -2147483648, 0, 0, 0},
+ {"-9223372036854775808", 0x8000000000000000, 0, 0, 0},
+ {"-9223372036854775809", 0x8000000000000000, 0, 0, ERANGE},
+ {"0x112233445566778899z", 9223372036854775807, 16, 'z', ERANGE},
+ {"0xFFFFFFFFFFFF00FF" , 9223372036854775807, 0, 0, ERANGE},
+
+ {"111111111111111111111111111111111111111111111111111111111111111",
+ 9223372036854775807, 2, 0, 0},
+ {"1000000000000000000000000000000000000000000000000000000000000000",
+ 9223372036854775807, 2, 0, ERANGE},
+ {"2021110011022210012102010021220101220221",
+ 9223372036854775807, 3, 0, 0},
+ {"2021110011022210012102010021220101220222",
+ 9223372036854775807, 3, 0, ERANGE},
+ {"13333333333333333333333333333333", 9223372036854775807, 4, 0, 0},
+ {"20000000000000000000000000000000", 9223372036854775807, 4, 0, ERANGE},
+ {"1104332401304422434310311212", 9223372036854775807, 5, 0, 0},
+ {"1104332401304422434310311213", 9223372036854775807, 5, 0, ERANGE},
+ {"1540241003031030222122211", 9223372036854775807, 6, 0, 0},
+ {"1540241003031030222122212", 9223372036854775807, 6, 0, ERANGE},
+ {"22341010611245052052300", 9223372036854775807, 7, 0, 0},
+ {"22341010611245052052301", 9223372036854775807, 7, 0, ERANGE},
+ {"777777777777777777777", 9223372036854775807, 8, 0, 0},
+ {"1000000000000000000000", 9223372036854775807, 8, 0, ERANGE},
+ {"67404283172107811827", 9223372036854775807, 9, 0, 0},
+ {"67404283172107811828", 9223372036854775807, 9, 0, ERANGE},
+ {"9223372036854775807", 9223372036854775807, 10, 0, 0},
+ {"9223372036854775808", 9223372036854775807, 10, 0, ERANGE},
+ {"1728002635214590697", 9223372036854775807, 11, 0, 0},
+ {"1728002635214590698", 9223372036854775807, 11, 0, ERANGE},
+ {"41a792678515120367", 9223372036854775807, 12, 0, 0},
+ {"41a792678515120368", 9223372036854775807, 12, 0, ERANGE},
+ {"10b269549075433c37", 9223372036854775807, 13, 0, 0},
+ {"10b269549075433c38", 9223372036854775807, 13, 0, ERANGE},
+ {"4340724c6c71dc7a7", 9223372036854775807, 14, 0, 0},
+ {"4340724c6c71dc7a8", 9223372036854775807, 14, 0, ERANGE},
+ {"160e2ad3246366807", 9223372036854775807, 15, 0, 0},
+ {"160e2ad3246366808", 9223372036854775807, 15, 0, ERANGE},
+ {"7fffffffffffffff", 9223372036854775807, 16, 0, 0},
+ {"8000000000000000", 9223372036854775807, 16, 0, ERANGE},
+ {"33d3d8307b214008", 9223372036854775807, 17, 0, 0},
+ {"33d3d8307b214009", 9223372036854775807, 17, 0, ERANGE},
+ {"16agh595df825fa7", 9223372036854775807, 18, 0, 0},
+ {"16agh595df825fa8", 9223372036854775807, 18, 0, ERANGE},
+ {"ba643dci0ffeehh", 9223372036854775807, 19, 0, 0},
+ {"ba643dci0ffeehi", 9223372036854775807, 19, 0, ERANGE},
+ {"5cbfjia3fh26ja7", 9223372036854775807, 20, 0, 0},
+ {"5cbfjia3fh26ja8", 9223372036854775807, 20, 0, ERANGE},
+ {"2heiciiie82dh97", 9223372036854775807, 21, 0, 0},
+ {"2heiciiie82dh98", 9223372036854775807, 21, 0, ERANGE},
+ {"1adaibb21dckfa7", 9223372036854775807, 22, 0, 0},
+ {"1adaibb21dckfa8", 9223372036854775807, 22, 0, ERANGE},
+ {"i6k448cf4192c2", 9223372036854775807, 23, 0, 0},
+ {"i6k448cf4192c3", 9223372036854775807, 23, 0, ERANGE},
+ {"acd772jnc9l0l7", 9223372036854775807, 24, 0, 0},
+ {"acd772jnc9l0l8", 9223372036854775807, 24, 0, ERANGE},
+ {"64ie1focnn5g77", 9223372036854775807, 25, 0, 0},
+ {"64ie1focnn5g78", 9223372036854775807, 25, 0, ERANGE},
+ {"3igoecjbmca687", 9223372036854775807, 26, 0, 0},
+ {"3igoecjbmca688", 9223372036854775807, 26, 0, ERANGE},
+ {"27c48l5b37oaop", 9223372036854775807, 27, 0, 0},
+ {"27c48l5b37oaoq", 9223372036854775807, 27, 0, ERANGE},
+ {"1bk39f3ah3dmq7", 9223372036854775807, 28, 0, 0},
+ {"1bk39f3ah3dmq8", 9223372036854775807, 28, 0, ERANGE},
+ {"q1se8f0m04isb", 9223372036854775807, 29, 0, 0},
+ {"q1se8f0m04isc", 9223372036854775807, 29, 0, ERANGE},
+ {"hajppbc1fc207", 9223372036854775807, 30, 0, 0},
+ {"hajppbc1fc208", 9223372036854775807, 30, 0, ERANGE},
+ {"bm03i95hia437", 9223372036854775807, 31, 0, 0},
+ {"bm03i95hia438", 9223372036854775807, 31, 0, ERANGE},
+ {"7vvvvvvvvvvvv", 9223372036854775807, 32, 0, 0},
+ {"8000000000000", 9223372036854775807, 32, 0, ERANGE},
+ {"5hg4ck9jd4u37", 9223372036854775807, 33, 0, 0},
+ {"5hg4ck9jd4u38", 9223372036854775807, 33, 0, ERANGE},
+ {"3tdtk1v8j6tpp", 9223372036854775807, 34, 0, 0},
+ {"3tdtk1v8j6tpq", 9223372036854775807, 34, 0, ERANGE},
+ {"2pijmikexrxp7", 9223372036854775807, 35, 0, 0},
+ {"2pijmikexrxp8", 9223372036854775807, 35, 0, ERANGE},
+ {"1y2p0ij32e8e7", 9223372036854775807, 36, 0, 0},
+ {"1y2p0ij32e8e8", 9223372036854775807, 36, 0, ERANGE},
+
+ {"-1000000000000000000000000000000000000000000000000000000000000000",
+ -9223372036854775808ull, 2, 0, 0},
+ {"-1000000000000000000000000000000000000000000000000000000000000001",
+ -9223372036854775808ull, 2, 0, ERANGE},
+ {"-2021110011022210012102010021220101220222",
+ -9223372036854775808ull, 3, 0, 0},
+ {"-2021110011022210012102010021220101221000",
+ -9223372036854775808ull, 3, 0, ERANGE},
+ {"-20000000000000000000000000000000", -9223372036854775808ull, 4, 0, 0},
+ {"-20000000000000000000000000000001", -9223372036854775808ull, 4, 0, ERANGE},
+ {"-1104332401304422434310311213", -9223372036854775808ull, 5, 0, 0},
+ {"-1104332401304422434310311214", -9223372036854775808ull, 5, 0, ERANGE},
+ {"-1540241003031030222122212", -9223372036854775808ull, 6, 0, 0},
+ {"-1540241003031030222122213", -9223372036854775808ull, 6, 0, ERANGE},
+ {"-22341010611245052052301", -9223372036854775808ull, 7, 0, 0},
+ {"-22341010611245052052302", -9223372036854775808ull, 7, 0, ERANGE},
+ {"-1000000000000000000000", -9223372036854775808ull, 8, 0, 0},
+ {"-1000000000000000000001", -9223372036854775808ull, 8, 0, ERANGE},
+ {"-67404283172107811828", -9223372036854775808ull, 9, 0, 0},
+ {"-67404283172107811830", -9223372036854775808ull, 9, 0, ERANGE},
+ {"-9223372036854775808", -9223372036854775808ull, 10, 0, 0},
+ {"-9223372036854775809", -9223372036854775808ull, 10, 0, ERANGE},
+ {"-1728002635214590698", -9223372036854775808ull, 11, 0, 0},
+ {"-1728002635214590699", -9223372036854775808ull, 11, 0, ERANGE},
+ {"-41a792678515120368", -9223372036854775808ull, 12, 0, 0},
+ {"-41a792678515120369", -9223372036854775808ull, 12, 0, ERANGE},
+ {"-10b269549075433c38", -9223372036854775808ull, 13, 0, 0},
+ {"-10b269549075433c39", -9223372036854775808ull, 13, 0, ERANGE},
+ {"-4340724c6c71dc7a8", -9223372036854775808ull, 14, 0, 0},
+ {"-4340724c6c71dc7a9", -9223372036854775808ull, 14, 0, ERANGE},
+ {"-160e2ad3246366808", -9223372036854775808ull, 15, 0, 0},
+ {"-160e2ad3246366809", -9223372036854775808ull, 15, 0, ERANGE},
+ {"-8000000000000000", -9223372036854775808ull, 16, 0, 0},
+ {"-8000000000000001", -9223372036854775808ull, 16, 0, ERANGE},
+ {"-33d3d8307b214009", -9223372036854775808ull, 17, 0, 0},
+ {"-33d3d8307b21400a", -9223372036854775808ull, 17, 0, ERANGE},
+ {"-16agh595df825fa8", -9223372036854775808ull, 18, 0, 0},
+ {"-16agh595df825fa9", -9223372036854775808ull, 18, 0, ERANGE},
+ {"-ba643dci0ffeehi", -9223372036854775808ull, 19, 0, 0},
+ {"-ba643dci0ffeei0", -9223372036854775808ull, 19, 0, ERANGE},
+ {"-5cbfjia3fh26ja8", -9223372036854775808ull, 20, 0, 0},
+ {"-5cbfjia3fh26ja9", -9223372036854775808ull, 20, 0, ERANGE},
+ {"-2heiciiie82dh98", -9223372036854775808ull, 21, 0, 0},
+ {"-2heiciiie82dh99", -9223372036854775808ull, 21, 0, ERANGE},
+ {"-1adaibb21dckfa8", -9223372036854775808ull, 22, 0, 0},
+ {"-1adaibb21dckfa9", -9223372036854775808ull, 22, 0, ERANGE},
+ {"-i6k448cf4192c3", -9223372036854775808ull, 23, 0, 0},
+ {"-i6k448cf4192c4", -9223372036854775808ull, 23, 0, ERANGE},
+ {"-acd772jnc9l0l8", -9223372036854775808ull, 24, 0, 0},
+ {"-acd772jnc9l0l9", -9223372036854775808ull, 24, 0, ERANGE},
+ {"-64ie1focnn5g78", -9223372036854775808ull, 25, 0, 0},
+ {"-64ie1focnn5g79", -9223372036854775808ull, 25, 0, ERANGE},
+ {"-3igoecjbmca688", -9223372036854775808ull, 26, 0, 0},
+ {"-3igoecjbmca689", -9223372036854775808ull, 26, 0, ERANGE},
+ {"-27c48l5b37oaoq", -9223372036854775808ull, 27, 0, 0},
+ {"-27c48l5b37oap0", -9223372036854775808ull, 27, 0, ERANGE},
+ {"-1bk39f3ah3dmq8", -9223372036854775808ull, 28, 0, 0},
+ {"-1bk39f3ah3dmq9", -9223372036854775808ull, 28, 0, ERANGE},
+ {"-q1se8f0m04isc", -9223372036854775808ull, 29, 0, 0},
+ {"-q1se8f0m04isd", -9223372036854775808ull, 29, 0, ERANGE},
+ {"-hajppbc1fc208", -9223372036854775808ull, 30, 0, 0},
+ {"-hajppbc1fc209", -9223372036854775808ull, 30, 0, ERANGE},
+ {"-bm03i95hia438", -9223372036854775808ull, 31, 0, 0},
+ {"-bm03i95hia439", -9223372036854775808ull, 31, 0, ERANGE},
+ {"-8000000000000", -9223372036854775808ull, 32, 0, 0},
+ {"-8000000000001", -9223372036854775808ull, 32, 0, ERANGE},
+ {"-5hg4ck9jd4u38", -9223372036854775808ull, 33, 0, 0},
+ {"-5hg4ck9jd4u39", -9223372036854775808ull, 33, 0, ERANGE},
+ {"-3tdtk1v8j6tpq", -9223372036854775808ull, 34, 0, 0},
+ {"-3tdtk1v8j6tpr", -9223372036854775808ull, 34, 0, ERANGE},
+ {"-2pijmikexrxp8", -9223372036854775808ull, 35, 0, 0},
+ {"-2pijmikexrxp9", -9223372036854775808ull, 35, 0, ERANGE},
+ {"-1y2p0ij32e8e8", -9223372036854775808ull, 36, 0, 0},
+ {"-1y2p0ij32e8e9", -9223372036854775808ull, 36, 0, ERANGE},
+#endif
+ {NULL, 0, 0, 0, 0},
+
+ /* Then unsigned. */
+ {" 0", 0, 0, 0, 0},
+ {"0xffffffffg", 0xffffffff, 0, 'g', 0},
+#if LONG_MAX == 0x7fffffff
+ {"-0xfedcba98", 0x01234568, 0, 0, 0},
+ {"0xf1f2f3f4f5", 0xffffffff, 0, 0, ERANGE},
+ {"-0x123456789", 0xffffffff, 0, 0, ERANGE},
+
+ {"11111111111111111111111111111111", 0xffffffff, 2, 0, 0},
+ {"100000000000000000000000000000000", 0xffffffff, 2, 0, ERANGE},
+ {"102002022201221111210", 0xffffffff, 3, 0, 0},
+ {"102002022201221111211", 0xffffffff, 3, 0, ERANGE},
+ {"3333333333333333", 0xffffffff, 4, 0, 0},
+ {"10000000000000000", 0xffffffff, 4, 0, ERANGE},
+ {"32244002423140", 0xffffffff, 5, 0, 0},
+ {"32244002423141", 0xffffffff, 5, 0, ERANGE},
+ {"1550104015503", 0xffffffff, 6, 0, 0},
+ {"1550104015504", 0xffffffff, 6, 0, ERANGE},
+ {"211301422353", 0xffffffff, 7, 0, 0},
+ {"211301422354", 0xffffffff, 7, 0, ERANGE},
+ {"37777777777", 0xffffffff, 8, 0, 0},
+ {"40000000000", 0xffffffff, 8, 0, ERANGE},
+ {"12068657453", 0xffffffff, 9, 0, 0},
+ {"12068657454", 0xffffffff, 9, 0, ERANGE},
+ {"4294967295", 0xffffffff, 10, 0, 0},
+ {"4294967296", 0xffffffff, 10, 0, ERANGE},
+ {"1904440553", 0xffffffff, 11, 0, 0},
+ {"1904440554", 0xffffffff, 11, 0, ERANGE},
+ {"9ba461593", 0xffffffff, 12, 0, 0},
+ {"9ba461594", 0xffffffff, 12, 0, ERANGE},
+ {"535a79888", 0xffffffff, 13, 0, 0},
+ {"535a79889", 0xffffffff, 13, 0, ERANGE},
+ {"2ca5b7463", 0xffffffff, 14, 0, 0},
+ {"2ca5b7464", 0xffffffff, 14, 0, ERANGE},
+ {"1a20dcd80", 0xffffffff, 15, 0, 0},
+ {"1a20dcd81", 0xffffffff, 15, 0, ERANGE},
+ {"ffffffff", 0xffffffff, 16, 0, 0},
+ {"100000000", 0xffffffff, 16, 0, ERANGE},
+ {"a7ffda90", 0xffffffff, 17, 0, 0},
+ {"a7ffda91", 0xffffffff, 17, 0, ERANGE},
+ {"704he7g3", 0xffffffff, 18, 0, 0},
+ {"704he7g4", 0xffffffff, 18, 0, ERANGE},
+ {"4f5aff65", 0xffffffff, 19, 0, 0},
+ {"4f5aff66", 0xffffffff, 19, 0, ERANGE},
+ {"3723ai4f", 0xffffffff, 20, 0, 0},
+ {"3723ai4g", 0xffffffff, 20, 0, ERANGE},
+ {"281d55i3", 0xffffffff, 21, 0, 0},
+ {"281d55i4", 0xffffffff, 21, 0, ERANGE},
+ {"1fj8b183", 0xffffffff, 22, 0, 0},
+ {"1fj8b184", 0xffffffff, 22, 0, ERANGE},
+ {"1606k7ib", 0xffffffff, 23, 0, 0},
+ {"1606k7ic", 0xffffffff, 23, 0, ERANGE},
+ {"mb994af", 0xffffffff, 24, 0, 0},
+ {"mb994ag", 0xffffffff, 24, 0, ERANGE},
+ {"hek2mgk", 0xffffffff, 25, 0, 0},
+ {"hek2mgl", 0xffffffff, 25, 0, ERANGE},
+ {"dnchbnl", 0xffffffff, 26, 0, 0},
+ {"dnchbnm", 0xffffffff, 26, 0, ERANGE},
+ {"b28jpdl", 0xffffffff, 27, 0, 0},
+ {"b28jpdm", 0xffffffff, 27, 0, ERANGE},
+ {"8pfgih3", 0xffffffff, 28, 0, 0},
+ {"8pfgih4", 0xffffffff, 28, 0, ERANGE},
+ {"76beigf", 0xffffffff, 29, 0, 0},
+ {"76beigg", 0xffffffff, 29, 0, ERANGE},
+ {"5qmcpqf", 0xffffffff, 30, 0, 0},
+ {"5qmcpqg", 0xffffffff, 30, 0, ERANGE},
+ {"4q0jto3", 0xffffffff, 31, 0, 0},
+ {"4q0jto4", 0xffffffff, 31, 0, ERANGE},
+ {"3vvvvvv", 0xffffffff, 32, 0, 0},
+ {"4000000", 0xffffffff, 32, 0, ERANGE},
+ {"3aokq93", 0xffffffff, 33, 0, 0},
+ {"3aokq94", 0xffffffff, 33, 0, ERANGE},
+ {"2qhxjlh", 0xffffffff, 34, 0, 0},
+ {"2qhxjli", 0xffffffff, 34, 0, ERANGE},
+ {"2br45qa", 0xffffffff, 35, 0, 0},
+ {"2br45qb", 0xffffffff, 35, 0, ERANGE},
+ {"1z141z3", 0xffffffff, 36, 0, 0},
+ {"1z141z4", 0xffffffff, 36, 0, ERANGE},
+#else
+ {"0xffffffffffffffffg", 0xffffffffffffffff, 0, 'g', 0},
+ {"-0xfedcba987654321", 0xf0123456789abcdf, 0, 0, 0},
+ {"0xf1f2f3f4f5f6f7f8f9", 0xffffffffffffffff, 0, 0, ERANGE},
+ {"-0x123456789abcdef01", 0xffffffffffffffff, 0, 0, ERANGE},
+
+ {"1111111111111111111111111111111111111111111111111111111111111111",
+ 0xffffffffffffffff, 2, 0, 0},
+ {"10000000000000000000000000000000000000000000000000000000000000000",
+ 0xffffffffffffffff, 2, 0, ERANGE},
+ {"11112220022122120101211020120210210211220",
+ 0xffffffffffffffff, 3, 0, 0},
+ {"11112220022122120101211020120210210211221",
+ 0xffffffffffffffff, 3, 0, ERANGE},
+ {"33333333333333333333333333333333", 0xffffffffffffffff, 4, 0, 0},
+ {"100000000000000000000000000000000", 0xffffffffffffffff, 4, 0, ERANGE},
+ {"2214220303114400424121122430", 0xffffffffffffffff, 5, 0, 0},
+ {"2214220303114400424121122431", 0xffffffffffffffff, 5, 0, ERANGE},
+ {"3520522010102100444244423", 0xffffffffffffffff, 6, 0, 0},
+ {"3520522010102100444244424", 0xffffffffffffffff, 6, 0, ERANGE},
+ {"45012021522523134134601", 0xffffffffffffffff, 7, 0, 0},
+ {"45012021522523134134602", 0xffffffffffffffff, 7, 0, ERANGE},
+ {"1777777777777777777777", 0xffffffffffffffff, 8, 0, 0},
+ {"2000000000000000000000", 0xffffffffffffffff, 8, 0, ERANGE},
+ {"145808576354216723756", 0xffffffffffffffff, 9, 0, 0},
+ {"145808576354216723757", 0xffffffffffffffff, 9, 0, ERANGE},
+ {"18446744073709551615", 0xffffffffffffffff, 10, 0, 0},
+ {"18446744073709551616", 0xffffffffffffffff, 10, 0, ERANGE},
+ {"335500516a429071284", 0xffffffffffffffff, 11, 0, 0},
+ {"335500516a429071285", 0xffffffffffffffff, 11, 0, ERANGE},
+ {"839365134a2a240713", 0xffffffffffffffff, 12, 0, 0},
+ {"839365134a2a240714", 0xffffffffffffffff, 12, 0, ERANGE},
+ {"219505a9511a867b72", 0xffffffffffffffff, 13, 0, 0},
+ {"219505a9511a867b73", 0xffffffffffffffff, 13, 0, ERANGE},
+ {"8681049adb03db171", 0xffffffffffffffff, 14, 0, 0},
+ {"8681049adb03db172", 0xffffffffffffffff, 14, 0, ERANGE},
+ {"2c1d56b648c6cd110", 0xffffffffffffffff, 15, 0, 0},
+ {"2c1d56b648c6cd111", 0xffffffffffffffff, 15, 0, ERANGE},
+ {"ffffffffffffffff", 0xffffffffffffffff, 16, 0, 0},
+ {"10000000000000000", 0xffffffffffffffff, 16, 0, ERANGE},
+ {"67979g60f5428010", 0xffffffffffffffff, 17, 0, 0},
+ {"67979g60f5428011", 0xffffffffffffffff, 17, 0, ERANGE},
+ {"2d3fgb0b9cg4bd2f", 0xffffffffffffffff, 18, 0, 0},
+ {"2d3fgb0b9cg4bd2g", 0xffffffffffffffff, 18, 0, ERANGE},
+ {"141c8786h1ccaagg", 0xffffffffffffffff, 19, 0, 0},
+ {"141c8786h1ccaagh", 0xffffffffffffffff, 19, 0, ERANGE},
+ {"b53bjh07be4dj0f", 0xffffffffffffffff, 20, 0, 0},
+ {"b53bjh07be4dj0g", 0xffffffffffffffff, 20, 0, ERANGE},
+ {"5e8g4ggg7g56dif", 0xffffffffffffffff, 21, 0, 0},
+ {"5e8g4ggg7g56dig", 0xffffffffffffffff, 21, 0, ERANGE},
+ {"2l4lf104353j8kf", 0xffffffffffffffff, 22, 0, 0},
+ {"2l4lf104353j8kg", 0xffffffffffffffff, 22, 0, ERANGE},
+ {"1ddh88h2782i515", 0xffffffffffffffff, 23, 0, 0},
+ {"1ddh88h2782i516", 0xffffffffffffffff, 23, 0, ERANGE},
+ {"l12ee5fn0ji1if", 0xffffffffffffffff, 24, 0, 0},
+ {"l12ee5fn0ji1ig", 0xffffffffffffffff, 24, 0, ERANGE},
+ {"c9c336o0mlb7ef", 0xffffffffffffffff, 25, 0, 0},
+ {"c9c336o0mlb7eg", 0xffffffffffffffff, 25, 0, ERANGE},
+ {"7b7n2pcniokcgf", 0xffffffffffffffff, 26, 0, 0},
+ {"7b7n2pcniokcgg", 0xffffffffffffffff, 26, 0, ERANGE},
+ {"4eo8hfam6fllmo", 0xffffffffffffffff, 27, 0, 0},
+ {"4eo8hfam6fllmp", 0xffffffffffffffff, 27, 0, ERANGE},
+ {"2nc6j26l66rhof", 0xffffffffffffffff, 28, 0, 0},
+ {"2nc6j26l66rhog", 0xffffffffffffffff, 28, 0, ERANGE},
+ {"1n3rsh11f098rn", 0xffffffffffffffff, 29, 0, 0},
+ {"1n3rsh11f098ro", 0xffffffffffffffff, 29, 0, ERANGE},
+ {"14l9lkmo30o40f", 0xffffffffffffffff, 30, 0, 0},
+ {"14l9lkmo30o40g", 0xffffffffffffffff, 30, 0, ERANGE},
+ {"nd075ib45k86f", 0xffffffffffffffff, 31, 0, 0},
+ {"nd075ib45k86g", 0xffffffffffffffff, 31, 0, ERANGE},
+ {"fvvvvvvvvvvvv", 0xffffffffffffffff, 32, 0, 0},
+ {"g000000000000", 0xffffffffffffffff, 32, 0, ERANGE},
+ {"b1w8p7j5q9r6f", 0xffffffffffffffff, 33, 0, 0},
+ {"b1w8p7j5q9r6g", 0xffffffffffffffff, 33, 0, ERANGE},
+ {"7orp63sh4dphh", 0xffffffffffffffff, 34, 0, 0},
+ {"7orp63sh4dphi", 0xffffffffffffffff, 34, 0, ERANGE},
+ {"5g24a25twkwff", 0xffffffffffffffff, 35, 0, 0},
+ {"5g24a25twkwfg", 0xffffffffffffffff, 35, 0, ERANGE},
+ {"3w5e11264sgsf", 0xffffffffffffffff, 36, 0, 0},
+ {"3w5e11264sgsg", 0xffffffffffffffff, 36, 0, ERANGE},
+#endif
+ {NULL, 0, 0, 0, 0},
+ };
+
+/* Prototypes for local functions. */
+static void expand (char *dst, int c);
+
+static int
+do_test (void)
+{
+ const struct ltest *lt;
+ char *ep;
+ int status = 0;
+ int save_errno;
+
+ for (lt = tests; lt->str != NULL; ++lt)
+ {
+ long int l;
+
+ errno = 0;
+ l = strtol (lt->str, &ep, lt->base);
+ save_errno = errno;
+ printf ("strtol(\"%s\", , %d) test %u",
+ lt->str, lt->base, (unsigned int) (lt - tests));
+ if (l == (long int) lt->expect && *ep == lt->left
+ && save_errno == lt->err)
+ puts("\tOK");
+ else
+ {
+ puts("\tBAD");
+ if (l != (long int) lt->expect)
+ printf(" returns %ld, expected %ld\n",
+ l, (long int) lt->expect);
+ if (lt->left != *ep)
+ {
+ char exp1[5], exp2[5];
+ expand (exp1, *ep);
+ expand (exp2, lt->left);
+ printf (" leaves '%s', expected '%s'\n", exp1, exp2);
+ }
+ if (save_errno != lt->err)
+ printf (" errno %d (%s) instead of %d (%s)\n",
+ save_errno, strerror (save_errno),
+ lt->err, strerror (lt->err));
+ status = 1;
+ }
+ }
+
+ for (++lt; lt->str != NULL; lt++)
+ {
+ unsigned long int ul;
+
+ errno = 0;
+ ul = strtoul (lt->str, &ep, lt->base);
+ save_errno = errno;
+ printf ("strtoul(\"%s\", , %d) test %u",
+ lt->str, lt->base, (unsigned int) (lt - tests));
+ if (ul == lt->expect && *ep == lt->left && save_errno == lt->err)
+ puts("\tOK");
+ else
+ {
+ puts ("\tBAD");
+ if (ul != lt->expect)
+ printf (" returns %lu, expected %lu\n",
+ ul, lt->expect);
+ if (lt->left != *ep)
+ {
+ char exp1[5], exp2[5];
+ expand (exp1, *ep);
+ expand (exp2, lt->left);
+ printf (" leaves '%s', expected '%s'\n", exp1, exp2);
+ }
+ if (save_errno != lt->err)
+ printf (" errno %d (%s) instead of %d (%s)\n",
+ save_errno, strerror (save_errno),
+ lt->err, strerror (lt->err));
+ status = 1;
+ }
+ }
+
+ return status ? EXIT_FAILURE : EXIT_SUCCESS;
+}
+
+static void
+expand (char *dst, int c)
+{
+ if (isprint (c))
+ {
+ dst[0] = c;
+ dst[1] = '\0';
+ }
+ else
+ (void) sprintf (dst, "%#.3o", (unsigned int) c);
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtoll.c b/REORG.TODO/stdlib/tst-strtoll.c
new file mode 100644
index 0000000000..de39ee3a5e
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtoll.c
@@ -0,0 +1,401 @@
+/* My bet is this was written by Chris Torek.
+ I reformatted and ansidecl-ized it, and tweaked it a little. */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+struct ltest
+ {
+ const char *str; /* Convert this. */
+ unsigned long long int expect; /* To get this. */
+ int base; /* Use this base. */
+ char left; /* With this left over. */
+ int err; /* And this in errno. */
+ };
+static const struct ltest tests[] =
+ {
+ /* First, signed numbers: */
+ /* simple... */
+ {"123", 123, 0, 0, 0},
+ {"+123", 123, 0, 0, 0},
+ {" 123", 123, 0, 0, 0},
+ {" 123 ", 123, 0, ' ', 0},
+ {" -17", -17, 0, 0, 0},
+
+ /* implicit base... */
+ {"0123", 0123, 0, 0, 0},
+ {"0123a", 0123, 0, 'a', 0},
+ {"01239", 0123, 0, '9', 0},
+ {"0x123", 0x123, 0, 0, 0},
+ {"-0x123", -0x123, 0, 0, 0},
+ {"0x0xc", 0, 0, 'x', 0},
+ {" +0x123fg", 0x123f, 0, 'g', 0},
+
+ /* explicit base... */
+ {"123", 0x123, 16, 0, 0},
+ {"0x123", 0x123, 16, 0, 0},
+ {"123", 0123, 8, 0, 0},
+ {"0123", 0123, 8, 0, 0},
+ {"0123", 123, 10, 0, 0},
+ {"0x123", 0, 10, 'x', 0},
+
+ /* case insensitivity... */
+ {"abcd", 0xabcd, 16, 0, 0},
+ {"AbCd", 0xabcd, 16, 0, 0},
+ {"0xABCD", 0xabcd, 16, 0, 0},
+ {"0Xabcd", 0xabcd, 16, 0, 0},
+
+ /* odd bases... */
+ {"0xyz", 33 * 35 + 34, 35, 'z', 0},
+ {"yz!", 34 * 36 + 35, 36, '!', 0},
+ {"-yz", -(34*36 + 35), 36, 0, 0},
+ {"GhI4", ((16*20 + 17)*20 + 18)*20 + 4, 20, 0, 0},
+
+ /* special case for the 32-bit version of strtoll,
+ from a ncftp configure test */
+ {"99000000001", 1000000000ll * 99ll + 1ll, 0, 0},
+
+ /* extremes... */
+ {"9223372036854775807", 9223372036854775807ll, 0, 0, 0},
+ {"9223372036854775808", 9223372036854775807ll, 0, 0, ERANGE},
+ {"922337203685477580777", 9223372036854775807ll, 0, 0, ERANGE},
+ {"9223372036854775810", 9223372036854775807ll, 0, 0, ERANGE},
+ {"-2147483648", -2147483648ll, 0, 0, 0},
+ {"-9223372036854775808", -9223372036854775807ll - 1, 0, 0, 0},
+ {"-9223372036854775809", -9223372036854775807ll - 1, 0, 0, ERANGE},
+ {"0x112233445566778899z", 9223372036854775807ll, 16, 'z', ERANGE},
+ {"0xFFFFFFFFFFFF00FF" , 9223372036854775807ll, 0, 0, ERANGE},
+
+ {"111111111111111111111111111111111111111111111111111111111111111",
+ 9223372036854775807ll, 2, 0, 0},
+ {"1000000000000000000000000000000000000000000000000000000000000000",
+ 9223372036854775807ll, 2, 0, ERANGE},
+ {"2021110011022210012102010021220101220221",
+ 9223372036854775807ll, 3, 0, 0},
+ {"2021110011022210012102010021220101220222",
+ 9223372036854775807ll, 3, 0, ERANGE},
+ {"13333333333333333333333333333333", 9223372036854775807ll, 4, 0, 0},
+ {"20000000000000000000000000000000", 9223372036854775807ll, 4, 0, ERANGE},
+ {"1104332401304422434310311212", 9223372036854775807ll, 5, 0, 0},
+ {"1104332401304422434310311213", 9223372036854775807ll, 5, 0, ERANGE},
+ {"1540241003031030222122211", 9223372036854775807ll, 6, 0, 0},
+ {"1540241003031030222122212", 9223372036854775807ll, 6, 0, ERANGE},
+ {"22341010611245052052300", 9223372036854775807ll, 7, 0, 0},
+ {"22341010611245052052301", 9223372036854775807ll, 7, 0, ERANGE},
+ {"777777777777777777777", 9223372036854775807ll, 8, 0, 0},
+ {"1000000000000000000000", 9223372036854775807ll, 8, 0, ERANGE},
+ {"67404283172107811827", 9223372036854775807ll, 9, 0, 0},
+ {"67404283172107811828", 9223372036854775807ll, 9, 0, ERANGE},
+ {"9223372036854775807", 9223372036854775807ll, 10, 0, 0},
+ {"9223372036854775808", 9223372036854775807ll, 10, 0, ERANGE},
+ {"1728002635214590697", 9223372036854775807ll, 11, 0, 0},
+ {"1728002635214590698", 9223372036854775807ll, 11, 0, ERANGE},
+ {"41a792678515120367", 9223372036854775807ll, 12, 0, 0},
+ {"41a792678515120368", 9223372036854775807ll, 12, 0, ERANGE},
+ {"10b269549075433c37", 9223372036854775807ll, 13, 0, 0},
+ {"10b269549075433c38", 9223372036854775807ll, 13, 0, ERANGE},
+ {"4340724c6c71dc7a7", 9223372036854775807ll, 14, 0, 0},
+ {"4340724c6c71dc7a8", 9223372036854775807ll, 14, 0, ERANGE},
+ {"160e2ad3246366807", 9223372036854775807ll, 15, 0, 0},
+ {"160e2ad3246366808", 9223372036854775807ll, 15, 0, ERANGE},
+ {"7fffffffffffffff", 9223372036854775807ll, 16, 0, 0},
+ {"8000000000000000", 9223372036854775807ll, 16, 0, ERANGE},
+ {"33d3d8307b214008", 9223372036854775807ll, 17, 0, 0},
+ {"33d3d8307b214009", 9223372036854775807ll, 17, 0, ERANGE},
+ {"16agh595df825fa7", 9223372036854775807ll, 18, 0, 0},
+ {"16agh595df825fa8", 9223372036854775807ll, 18, 0, ERANGE},
+ {"ba643dci0ffeehh", 9223372036854775807ll, 19, 0, 0},
+ {"ba643dci0ffeehi", 9223372036854775807ll, 19, 0, ERANGE},
+ {"5cbfjia3fh26ja7", 9223372036854775807ll, 20, 0, 0},
+ {"5cbfjia3fh26ja8", 9223372036854775807ll, 20, 0, ERANGE},
+ {"2heiciiie82dh97", 9223372036854775807ll, 21, 0, 0},
+ {"2heiciiie82dh98", 9223372036854775807ll, 21, 0, ERANGE},
+ {"1adaibb21dckfa7", 9223372036854775807ll, 22, 0, 0},
+ {"1adaibb21dckfa8", 9223372036854775807ll, 22, 0, ERANGE},
+ {"i6k448cf4192c2", 9223372036854775807ll, 23, 0, 0},
+ {"i6k448cf4192c3", 9223372036854775807ll, 23, 0, ERANGE},
+ {"acd772jnc9l0l7", 9223372036854775807ll, 24, 0, 0},
+ {"acd772jnc9l0l8", 9223372036854775807ll, 24, 0, ERANGE},
+ {"64ie1focnn5g77", 9223372036854775807ll, 25, 0, 0},
+ {"64ie1focnn5g78", 9223372036854775807ll, 25, 0, ERANGE},
+ {"3igoecjbmca687", 9223372036854775807ll, 26, 0, 0},
+ {"3igoecjbmca688", 9223372036854775807ll, 26, 0, ERANGE},
+ {"27c48l5b37oaop", 9223372036854775807ll, 27, 0, 0},
+ {"27c48l5b37oaoq", 9223372036854775807ll, 27, 0, ERANGE},
+ {"1bk39f3ah3dmq7", 9223372036854775807ll, 28, 0, 0},
+ {"1bk39f3ah3dmq8", 9223372036854775807ll, 28, 0, ERANGE},
+ {"q1se8f0m04isb", 9223372036854775807ll, 29, 0, 0},
+ {"q1se8f0m04isc", 9223372036854775807ll, 29, 0, ERANGE},
+ {"hajppbc1fc207", 9223372036854775807ll, 30, 0, 0},
+ {"hajppbc1fc208", 9223372036854775807ll, 30, 0, ERANGE},
+ {"bm03i95hia437", 9223372036854775807ll, 31, 0, 0},
+ {"bm03i95hia438", 9223372036854775807ll, 31, 0, ERANGE},
+ {"7vvvvvvvvvvvv", 9223372036854775807ll, 32, 0, 0},
+ {"8000000000000", 9223372036854775807ll, 32, 0, ERANGE},
+ {"5hg4ck9jd4u37", 9223372036854775807ll, 33, 0, 0},
+ {"5hg4ck9jd4u38", 9223372036854775807ll, 33, 0, ERANGE},
+ {"3tdtk1v8j6tpp", 9223372036854775807ll, 34, 0, 0},
+ {"3tdtk1v8j6tpq", 9223372036854775807ll, 34, 0, ERANGE},
+ {"2pijmikexrxp7", 9223372036854775807ll, 35, 0, 0},
+ {"2pijmikexrxp8", 9223372036854775807ll, 35, 0, ERANGE},
+ {"1y2p0ij32e8e7", 9223372036854775807ll, 36, 0, 0},
+ {"1y2p0ij32e8e8", 9223372036854775807ll, 36, 0, ERANGE},
+
+ {"-1000000000000000000000000000000000000000000000000000000000000000",
+ -9223372036854775808ull, 2, 0, 0},
+ {"-1000000000000000000000000000000000000000000000000000000000000001",
+ -9223372036854775808ull, 2, 0, ERANGE},
+ {"-2021110011022210012102010021220101220222",
+ -9223372036854775808ull, 3, 0, 0},
+ {"-2021110011022210012102010021220101221000",
+ -9223372036854775808ull, 3, 0, ERANGE},
+ {"-20000000000000000000000000000000", -9223372036854775808ull, 4, 0, 0},
+ {"-20000000000000000000000000000001", -9223372036854775808ull, 4, 0, ERANGE},
+ {"-1104332401304422434310311213", -9223372036854775808ull, 5, 0, 0},
+ {"-1104332401304422434310311214", -9223372036854775808ull, 5, 0, ERANGE},
+ {"-1540241003031030222122212", -9223372036854775808ull, 6, 0, 0},
+ {"-1540241003031030222122213", -9223372036854775808ull, 6, 0, ERANGE},
+ {"-22341010611245052052301", -9223372036854775808ull, 7, 0, 0},
+ {"-22341010611245052052302", -9223372036854775808ull, 7, 0, ERANGE},
+ {"-1000000000000000000000", -9223372036854775808ull, 8, 0, 0},
+ {"-1000000000000000000001", -9223372036854775808ull, 8, 0, ERANGE},
+ {"-67404283172107811828", -9223372036854775808ull, 9, 0, 0},
+ {"-67404283172107811830", -9223372036854775808ull, 9, 0, ERANGE},
+ {"-9223372036854775808", -9223372036854775808ull, 10, 0, 0},
+ {"-9223372036854775809", -9223372036854775808ull, 10, 0, ERANGE},
+ {"-1728002635214590698", -9223372036854775808ull, 11, 0, 0},
+ {"-1728002635214590699", -9223372036854775808ull, 11, 0, ERANGE},
+ {"-41a792678515120368", -9223372036854775808ull, 12, 0, 0},
+ {"-41a792678515120369", -9223372036854775808ull, 12, 0, ERANGE},
+ {"-10b269549075433c38", -9223372036854775808ull, 13, 0, 0},
+ {"-10b269549075433c39", -9223372036854775808ull, 13, 0, ERANGE},
+ {"-4340724c6c71dc7a8", -9223372036854775808ull, 14, 0, 0},
+ {"-4340724c6c71dc7a9", -9223372036854775808ull, 14, 0, ERANGE},
+ {"-160e2ad3246366808", -9223372036854775808ull, 15, 0, 0},
+ {"-160e2ad3246366809", -9223372036854775808ull, 15, 0, ERANGE},
+ {"-8000000000000000", -9223372036854775808ull, 16, 0, 0},
+ {"-8000000000000001", -9223372036854775808ull, 16, 0, ERANGE},
+ {"-33d3d8307b214009", -9223372036854775808ull, 17, 0, 0},
+ {"-33d3d8307b21400a", -9223372036854775808ull, 17, 0, ERANGE},
+ {"-16agh595df825fa8", -9223372036854775808ull, 18, 0, 0},
+ {"-16agh595df825fa9", -9223372036854775808ull, 18, 0, ERANGE},
+ {"-ba643dci0ffeehi", -9223372036854775808ull, 19, 0, 0},
+ {"-ba643dci0ffeei0", -9223372036854775808ull, 19, 0, ERANGE},
+ {"-5cbfjia3fh26ja8", -9223372036854775808ull, 20, 0, 0},
+ {"-5cbfjia3fh26ja9", -9223372036854775808ull, 20, 0, ERANGE},
+ {"-2heiciiie82dh98", -9223372036854775808ull, 21, 0, 0},
+ {"-2heiciiie82dh99", -9223372036854775808ull, 21, 0, ERANGE},
+ {"-1adaibb21dckfa8", -9223372036854775808ull, 22, 0, 0},
+ {"-1adaibb21dckfa9", -9223372036854775808ull, 22, 0, ERANGE},
+ {"-i6k448cf4192c3", -9223372036854775808ull, 23, 0, 0},
+ {"-i6k448cf4192c4", -9223372036854775808ull, 23, 0, ERANGE},
+ {"-acd772jnc9l0l8", -9223372036854775808ull, 24, 0, 0},
+ {"-acd772jnc9l0l9", -9223372036854775808ull, 24, 0, ERANGE},
+ {"-64ie1focnn5g78", -9223372036854775808ull, 25, 0, 0},
+ {"-64ie1focnn5g79", -9223372036854775808ull, 25, 0, ERANGE},
+ {"-3igoecjbmca688", -9223372036854775808ull, 26, 0, 0},
+ {"-3igoecjbmca689", -9223372036854775808ull, 26, 0, ERANGE},
+ {"-27c48l5b37oaoq", -9223372036854775808ull, 27, 0, 0},
+ {"-27c48l5b37oap0", -9223372036854775808ull, 27, 0, ERANGE},
+ {"-1bk39f3ah3dmq8", -9223372036854775808ull, 28, 0, 0},
+ {"-1bk39f3ah3dmq9", -9223372036854775808ull, 28, 0, ERANGE},
+ {"-q1se8f0m04isc", -9223372036854775808ull, 29, 0, 0},
+ {"-q1se8f0m04isd", -9223372036854775808ull, 29, 0, ERANGE},
+ {"-hajppbc1fc208", -9223372036854775808ull, 30, 0, 0},
+ {"-hajppbc1fc209", -9223372036854775808ull, 30, 0, ERANGE},
+ {"-bm03i95hia438", -9223372036854775808ull, 31, 0, 0},
+ {"-bm03i95hia439", -9223372036854775808ull, 31, 0, ERANGE},
+ {"-8000000000000", -9223372036854775808ull, 32, 0, 0},
+ {"-8000000000001", -9223372036854775808ull, 32, 0, ERANGE},
+ {"-5hg4ck9jd4u38", -9223372036854775808ull, 33, 0, 0},
+ {"-5hg4ck9jd4u39", -9223372036854775808ull, 33, 0, ERANGE},
+ {"-3tdtk1v8j6tpq", -9223372036854775808ull, 34, 0, 0},
+ {"-3tdtk1v8j6tpr", -9223372036854775808ull, 34, 0, ERANGE},
+ {"-2pijmikexrxp8", -9223372036854775808ull, 35, 0, 0},
+ {"-2pijmikexrxp9", -9223372036854775808ull, 35, 0, ERANGE},
+ {"-1y2p0ij32e8e8", -9223372036854775808ull, 36, 0, 0},
+ {"-1y2p0ij32e8e9", -9223372036854775808ull, 36, 0, ERANGE},
+ {NULL, 0, 0, 0, 0},
+
+ /* Then unsigned. */
+ {" 0", 0, 0, 0, 0},
+ {"0xffffffffg", 0xffffffff, 0, 'g', 0},
+ {"0xffffffffffffffffg", 0xffffffffffffffffull, 0, 'g', 0},
+ {"-0xfedcba987654321", 0xf0123456789abcdfull, 0, 0, 0},
+ {"0xf1f2f3f4f5f6f7f8f9", 0xffffffffffffffffull, 0, 0, ERANGE},
+ {"-0x123456789abcdef01", 0xffffffffffffffffull, 0, 0, ERANGE},
+
+ {"1111111111111111111111111111111111111111111111111111111111111111",
+ 0xffffffffffffffff, 2, 0, 0},
+ {"10000000000000000000000000000000000000000000000000000000000000000",
+ 0xffffffffffffffff, 2, 0, ERANGE},
+ {"11112220022122120101211020120210210211220",
+ 0xffffffffffffffff, 3, 0, 0},
+ {"11112220022122120101211020120210210211221",
+ 0xffffffffffffffff, 3, 0, ERANGE},
+ {"33333333333333333333333333333333", 0xffffffffffffffff, 4, 0, 0},
+ {"100000000000000000000000000000000", 0xffffffffffffffff, 4, 0, ERANGE},
+ {"2214220303114400424121122430", 0xffffffffffffffff, 5, 0, 0},
+ {"2214220303114400424121122431", 0xffffffffffffffff, 5, 0, ERANGE},
+ {"3520522010102100444244423", 0xffffffffffffffff, 6, 0, 0},
+ {"3520522010102100444244424", 0xffffffffffffffff, 6, 0, ERANGE},
+ {"45012021522523134134601", 0xffffffffffffffff, 7, 0, 0},
+ {"45012021522523134134602", 0xffffffffffffffff, 7, 0, ERANGE},
+ {"1777777777777777777777", 0xffffffffffffffff, 8, 0, 0},
+ {"2000000000000000000000", 0xffffffffffffffff, 8, 0, ERANGE},
+ {"145808576354216723756", 0xffffffffffffffff, 9, 0, 0},
+ {"145808576354216723757", 0xffffffffffffffff, 9, 0, ERANGE},
+ {"18446744073709551615", 0xffffffffffffffff, 10, 0, 0},
+ {"18446744073709551616", 0xffffffffffffffff, 10, 0, ERANGE},
+ {"335500516a429071284", 0xffffffffffffffff, 11, 0, 0},
+ {"335500516a429071285", 0xffffffffffffffff, 11, 0, ERANGE},
+ {"839365134a2a240713", 0xffffffffffffffff, 12, 0, 0},
+ {"839365134a2a240714", 0xffffffffffffffff, 12, 0, ERANGE},
+ {"219505a9511a867b72", 0xffffffffffffffff, 13, 0, 0},
+ {"219505a9511a867b73", 0xffffffffffffffff, 13, 0, ERANGE},
+ {"8681049adb03db171", 0xffffffffffffffff, 14, 0, 0},
+ {"8681049adb03db172", 0xffffffffffffffff, 14, 0, ERANGE},
+ {"2c1d56b648c6cd110", 0xffffffffffffffff, 15, 0, 0},
+ {"2c1d56b648c6cd111", 0xffffffffffffffff, 15, 0, ERANGE},
+ {"ffffffffffffffff", 0xffffffffffffffff, 16, 0, 0},
+ {"10000000000000000", 0xffffffffffffffff, 16, 0, ERANGE},
+ {"67979g60f5428010", 0xffffffffffffffff, 17, 0, 0},
+ {"67979g60f5428011", 0xffffffffffffffff, 17, 0, ERANGE},
+ {"2d3fgb0b9cg4bd2f", 0xffffffffffffffff, 18, 0, 0},
+ {"2d3fgb0b9cg4bd2g", 0xffffffffffffffff, 18, 0, ERANGE},
+ {"141c8786h1ccaagg", 0xffffffffffffffff, 19, 0, 0},
+ {"141c8786h1ccaagh", 0xffffffffffffffff, 19, 0, ERANGE},
+ {"b53bjh07be4dj0f", 0xffffffffffffffff, 20, 0, 0},
+ {"b53bjh07be4dj0g", 0xffffffffffffffff, 20, 0, ERANGE},
+ {"5e8g4ggg7g56dif", 0xffffffffffffffff, 21, 0, 0},
+ {"5e8g4ggg7g56dig", 0xffffffffffffffff, 21, 0, ERANGE},
+ {"2l4lf104353j8kf", 0xffffffffffffffff, 22, 0, 0},
+ {"2l4lf104353j8kg", 0xffffffffffffffff, 22, 0, ERANGE},
+ {"1ddh88h2782i515", 0xffffffffffffffff, 23, 0, 0},
+ {"1ddh88h2782i516", 0xffffffffffffffff, 23, 0, ERANGE},
+ {"l12ee5fn0ji1if", 0xffffffffffffffff, 24, 0, 0},
+ {"l12ee5fn0ji1ig", 0xffffffffffffffff, 24, 0, ERANGE},
+ {"c9c336o0mlb7ef", 0xffffffffffffffff, 25, 0, 0},
+ {"c9c336o0mlb7eg", 0xffffffffffffffff, 25, 0, ERANGE},
+ {"7b7n2pcniokcgf", 0xffffffffffffffff, 26, 0, 0},
+ {"7b7n2pcniokcgg", 0xffffffffffffffff, 26, 0, ERANGE},
+ {"4eo8hfam6fllmo", 0xffffffffffffffff, 27, 0, 0},
+ {"4eo8hfam6fllmp", 0xffffffffffffffff, 27, 0, ERANGE},
+ {"2nc6j26l66rhof", 0xffffffffffffffff, 28, 0, 0},
+ {"2nc6j26l66rhog", 0xffffffffffffffff, 28, 0, ERANGE},
+ {"1n3rsh11f098rn", 0xffffffffffffffff, 29, 0, 0},
+ {"1n3rsh11f098ro", 0xffffffffffffffff, 29, 0, ERANGE},
+ {"14l9lkmo30o40f", 0xffffffffffffffff, 30, 0, 0},
+ {"14l9lkmo30o40g", 0xffffffffffffffff, 30, 0, ERANGE},
+ {"nd075ib45k86f", 0xffffffffffffffff, 31, 0, 0},
+ {"nd075ib45k86g", 0xffffffffffffffff, 31, 0, ERANGE},
+ {"fvvvvvvvvvvvv", 0xffffffffffffffff, 32, 0, 0},
+ {"g000000000000", 0xffffffffffffffff, 32, 0, ERANGE},
+ {"b1w8p7j5q9r6f", 0xffffffffffffffff, 33, 0, 0},
+ {"b1w8p7j5q9r6g", 0xffffffffffffffff, 33, 0, ERANGE},
+ {"7orp63sh4dphh", 0xffffffffffffffff, 34, 0, 0},
+ {"7orp63sh4dphi", 0xffffffffffffffff, 34, 0, ERANGE},
+ {"5g24a25twkwff", 0xffffffffffffffff, 35, 0, 0},
+ {"5g24a25twkwfg", 0xffffffffffffffff, 35, 0, ERANGE},
+ {"3w5e11264sgsf", 0xffffffffffffffff, 36, 0, 0},
+ {"3w5e11264sgsg", 0xffffffffffffffff, 36, 0, ERANGE},
+ {NULL, 0, 0, 0, 0},
+ };
+
+/* Prototypes for local functions. */
+static void expand (char *dst, int c);
+
+static int
+do_test (void)
+{
+ const struct ltest *lt;
+ char *ep;
+ int status = 0;
+ int save_errno;
+
+ for (lt = tests; lt->str != NULL; ++lt)
+ {
+ long long int l;
+
+ errno = 0;
+ l = strtoll (lt->str, &ep, lt->base);
+ save_errno = errno;
+ printf ("strtoll(\"%s\", , %d) test %u",
+ lt->str, lt->base, (unsigned int) (lt - tests));
+ if (l == (long long int) lt->expect && *ep == lt->left
+ && save_errno == lt->err)
+ puts("\tOK");
+ else
+ {
+ puts("\tBAD");
+ if (l != (long long int) lt->expect)
+ printf(" returns %lld, expected %lld\n",
+ l, (long long int) lt->expect);
+ if (lt->left != *ep)
+ {
+ char exp1[5], exp2[5];
+ expand (exp1, *ep);
+ expand (exp2, lt->left);
+ printf (" leaves '%s', expected '%s'\n", exp1, exp2);
+ }
+ if (save_errno != lt->err)
+ printf (" errno %d (%s) instead of %d (%s)\n",
+ save_errno, strerror (save_errno),
+ lt->err, strerror (lt->err));
+ status = 1;
+ }
+ }
+
+ for (++lt; lt->str != NULL; lt++)
+ {
+ unsigned long long int ul;
+
+ errno = 0;
+ ul = strtoull (lt->str, &ep, lt->base);
+ save_errno = errno;
+ printf ("strtoull(\"%s\", , %d) test %u",
+ lt->str, lt->base, (unsigned int) (lt - tests));
+ if (ul == lt->expect && *ep == lt->left && save_errno == lt->err)
+ puts("\tOK");
+ else
+ {
+ puts ("\tBAD");
+ if (ul != lt->expect)
+ printf (" returns %llu, expected %llu\n",
+ ul, lt->expect);
+ if (lt->left != *ep)
+ {
+ char exp1[5], exp2[5];
+ expand (exp1, *ep);
+ expand (exp2, lt->left);
+ printf (" leaves '%s', expected '%s'\n", exp1, exp2);
+ }
+ if (save_errno != lt->err)
+ printf (" errno %d (%s) instead of %d (%s)\n",
+ save_errno, strerror (save_errno),
+ lt->err, strerror (lt->err));
+ status = 1;
+ }
+ }
+
+ return status ? EXIT_FAILURE : EXIT_SUCCESS;
+}
+
+static void
+expand (char *dst, int c)
+{
+ if (isprint (c))
+ {
+ dst[0] = c;
+ dst[1] = '\0';
+ }
+ else
+ (void) sprintf (dst, "%#.3o", (unsigned int) c);
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-system.c b/REORG.TODO/stdlib/tst-system.c
new file mode 100644
index 0000000000..6cb62e1248
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-system.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 2002-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+static int
+do_test (void)
+{
+ return system (":");
+}
+
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-thread-quick_exit.cc b/REORG.TODO/stdlib/tst-thread-quick_exit.cc
new file mode 100644
index 0000000000..047df6043d
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-thread-quick_exit.cc
@@ -0,0 +1,66 @@
+/* Bug 20198: Do not call object destructors at exit.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+struct A
+{
+ ~A () { abort (); }
+};
+
+thread_local A a1;
+thread_local A a2;
+
+void
+__attribute__ ((noinline, noclone))
+optimization_barrier (A &)
+{
+}
+
+/* Call std::quick_exit from a non-main thread. */
+void *
+non_main_thread (void *)
+{
+ optimization_barrier (a1);
+ /* The C++11 standard in 18.5.12 says:
+ "Objects shall not be destroyed as a result of calling
+ quick_exit."
+ If quick_exit calls the destructors the test aborts. */
+ quick_exit (0);
+}
+
+static int
+do_test()
+{
+ optimization_barrier (a2);
+ pthread_t thr;
+ int ret = pthread_create (&thr, NULL, non_main_thread, NULL);
+ if (ret != 0)
+ {
+ errno = ret;
+ printf ("error: pthread_create: %m\n");
+ }
+ pthread_join (thr, NULL);
+ return 1;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-tininess.c b/REORG.TODO/stdlib/tst-tininess.c
new file mode 100644
index 0000000000..c032454f96
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-tininess.c
@@ -0,0 +1,69 @@
+/* Test that tininess.h is correct for this architecture.
+ Copyright (C) 2012-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <fenv.h>
+#include <float.h>
+#include <stdio.h>
+#include <tininess.h>
+
+volatile float a = 0x1.fffp-126;
+volatile float b = 0x1.0008p-1;
+volatile float c;
+volatile float m = FLT_MIN;
+volatile float mm;
+
+static int
+do_test (void)
+{
+ int result = 0;
+#ifdef FE_UNDERFLOW
+ feclearexcept (FE_ALL_EXCEPT);
+ mm = m * m;
+ if (!fetestexcept (FE_UNDERFLOW))
+ {
+ puts ("underflow exception not supported at runtime, cannot test");
+ return 0;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ c = a * b;
+ if (fetestexcept (FE_UNDERFLOW))
+ {
+ if (TININESS_AFTER_ROUNDING)
+ {
+ puts ("tininess.h says after rounding, "
+ "but detected before rounding");
+ result = 1;
+ }
+ }
+ else
+ {
+ if (!TININESS_AFTER_ROUNDING)
+ {
+ puts ("tininess.h says before rounding, "
+ "but detected after rounding");
+ result = 1;
+ }
+ }
+#else
+ puts ("underflow exception not supported at compile time, cannot test");
+#endif
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-tls-atexit-lib.c b/REORG.TODO/stdlib/tst-tls-atexit-lib.c
new file mode 100644
index 0000000000..a227e4653c
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-tls-atexit-lib.c
@@ -0,0 +1,38 @@
+/* Verify that DSO is unloaded only if its TLS objects are destroyed - the DSO.
+ Copyright (C) 2013-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+extern void *__dso_handle;
+
+typedef struct
+{
+ void *val;
+} A;
+
+/* We only care about the destructor. */
+void A_dtor (void *obj)
+{
+ ((A *)obj)->val = obj;
+}
+
+void reg_dtor (void)
+{
+ static __thread A b;
+ __cxa_thread_atexit_impl (A_dtor, &b, __dso_handle);
+}
diff --git a/REORG.TODO/stdlib/tst-tls-atexit-nodelete.c b/REORG.TODO/stdlib/tst-tls-atexit-nodelete.c
new file mode 100644
index 0000000000..2293685144
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-tls-atexit-nodelete.c
@@ -0,0 +1,24 @@
+/* Verify that a RTLD_NODELETE DSO is not unloaded even if its TLS objects are
+ destroyed.
+
+ Copyright (C) 2015-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define NO_DELETE 1
+#define H2_RTLD_FLAGS (RTLD_LAZY | RTLD_NODELETE)
+#define LOADED_IS_GOOD true
+#include "tst-tls-atexit.c"
diff --git a/REORG.TODO/stdlib/tst-tls-atexit.c b/REORG.TODO/stdlib/tst-tls-atexit.c
new file mode 100644
index 0000000000..6dbf49d460
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-tls-atexit.c
@@ -0,0 +1,156 @@
+/* Verify that DSO is unloaded only if its TLS objects are destroyed.
+ Copyright (C) 2013-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* For the default case, i.e. NO_DELETE not defined, the test dynamically loads
+ a DSO and spawns a thread that subsequently calls into the DSO to register a
+ destructor for an object in the DSO and then calls dlclose on the handle for
+ the DSO. When the thread exits, the DSO should not be unloaded or else the
+ destructor called during thread exit will crash. Further in the main
+ thread, the DSO is opened and closed again, at which point the DSO should be
+ unloaded.
+
+ When NO_DELETE is defined, the DSO is loaded twice, once with just RTLD_LAZY
+ flag and the second time with the RTLD_NODELETE flag set. The thread is
+ spawned, destructor registered and then thread exits without closing the
+ DSO. In the main thread, the first handle is then closed, followed by the
+ second handle. In the end, the DSO should remain loaded due to the
+ RTLD_NODELETE flag being set in the second dlopen call. */
+
+#include <dlfcn.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <link.h>
+#include <stdbool.h>
+
+#ifndef NO_DELETE
+# define LOADED_IS_GOOD false
+#endif
+
+#ifndef H2_RTLD_FLAGS
+# define H2_RTLD_FLAGS (RTLD_LAZY)
+#endif
+
+#define DSO_NAME "$ORIGIN/tst-tls-atexit-lib.so"
+
+/* Walk through the map in the _r_debug structure to see if our lib is still
+ loaded. */
+static bool
+is_loaded (void)
+{
+ struct link_map *lm = (struct link_map *) _r_debug.r_map;
+
+ for (; lm; lm = lm->l_next)
+ if (lm->l_type == lt_loaded && lm->l_name
+ && strcmp (basename (DSO_NAME), basename (lm->l_name)) == 0)
+ {
+ printf ("%s is still loaded\n", lm->l_name);
+ return true;
+ }
+ return false;
+}
+
+/* Accept a valid handle returned by DLOPEN, load the reg_dtor symbol to
+ register a destructor and then call dlclose on the handle. The dlclose
+ should not unload the DSO since the destructor has not been called yet. */
+static void *
+reg_dtor_and_close (void *h)
+{
+ void (*reg_dtor) (void) = (void (*) (void)) dlsym (h, "reg_dtor");
+
+ if (reg_dtor == NULL)
+ {
+ printf ("Unable to find symbol: %s\n", dlerror ());
+ return (void *) (uintptr_t) 1;
+ }
+
+ reg_dtor ();
+
+#ifndef NO_DELETE
+ dlclose (h);
+#endif
+
+ return NULL;
+}
+
+static int
+spawn_thread (void *h)
+{
+ pthread_t t;
+ int ret;
+ void *thr_ret;
+
+ if ((ret = pthread_create (&t, NULL, reg_dtor_and_close, h)) != 0)
+ {
+ printf ("pthread_create failed: %s\n", strerror (ret));
+ return 1;
+ }
+
+ if ((ret = pthread_join (t, &thr_ret)) != 0)
+ {
+ printf ("pthread_join failed: %s\n", strerror (ret));
+ return 1;
+ }
+
+ if (thr_ret != NULL)
+ return 1;
+
+ return 0;
+}
+
+static int
+do_test (void)
+{
+ /* Load the DSO. */
+ void *h1 = dlopen (DSO_NAME, RTLD_LAZY);
+ if (h1 == NULL)
+ {
+ printf ("h1: Unable to load DSO: %s\n", dlerror ());
+ return 1;
+ }
+
+#ifndef NO_DELETE
+ if (spawn_thread (h1) != 0)
+ return 1;
+#endif
+
+ void *h2 = dlopen (DSO_NAME, H2_RTLD_FLAGS);
+ if (h2 == NULL)
+ {
+ printf ("h2: Unable to load DSO: %s\n", dlerror ());
+ return 1;
+ }
+
+#ifdef NO_DELETE
+ if (spawn_thread (h1) != 0)
+ return 1;
+
+ dlclose (h1);
+#endif
+ dlclose (h2);
+
+ /* Check link maps to ensure that the DSO has unloaded. In the normal case,
+ the DSO should be unloaded if there are no uses. However, if one of the
+ dlopen calls were with RTLD_NODELETE, the DSO should remain loaded. */
+ return is_loaded () == LOADED_IS_GOOD ? 0 : 1;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-unsetenv1.c b/REORG.TODO/stdlib/tst-unsetenv1.c
new file mode 100644
index 0000000000..a2a760d241
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-unsetenv1.c
@@ -0,0 +1,12 @@
+#include <stdlib.h>
+
+static int
+do_test (void)
+{
+ clearenv ();
+ unsetenv ("FOO");
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-width-stdint.c b/REORG.TODO/stdlib/tst-width-stdint.c
new file mode 100644
index 0000000000..9a4c4167b2
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-width-stdint.c
@@ -0,0 +1,185 @@
+/* Test integer width macros in <stdint.h>.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <signal.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <wchar.h>
+
+#define CHECK_WIDTH(TYPE, MAX, WIDTH) \
+ do \
+ { \
+ if ((MAX >> ((TYPE) -1 < 0 ? (WIDTH - 2) : (WIDTH - 1))) != 1) \
+ { \
+ puts ("bad width of " #TYPE); \
+ result = 1; \
+ } \
+ else \
+ puts ("width of " #TYPE " OK"); \
+ } \
+ while (0)
+
+static int
+do_test (void)
+{
+ int result = 0;
+
+#ifndef INT8_WIDTH
+# error "missing INT8_WIDTH"
+#endif
+ CHECK_WIDTH (int8_t, INT8_MAX, INT8_WIDTH);
+#ifndef INT16_WIDTH
+# error "missing INT16_WIDTH"
+#endif
+ CHECK_WIDTH (int16_t, INT16_MAX, INT16_WIDTH);
+#ifndef INT32_WIDTH
+# error "missing INT32_WIDTH"
+#endif
+ CHECK_WIDTH (int32_t, INT32_MAX, INT32_WIDTH);
+#ifndef INT64_WIDTH
+# error "missing INT64_WIDTH"
+#endif
+ CHECK_WIDTH (int64_t, INT64_MAX, INT64_WIDTH);
+#ifndef UINT8_WIDTH
+# error "missing UINT8_WIDTH"
+#endif
+ CHECK_WIDTH (uint8_t, UINT8_MAX, UINT8_WIDTH);
+#ifndef UINT16_WIDTH
+# error "missing UINT16_WIDTH"
+#endif
+ CHECK_WIDTH (uint16_t, UINT16_MAX, UINT16_WIDTH);
+#ifndef UINT32_WIDTH
+# error "missing UINT32_WIDTH"
+#endif
+ CHECK_WIDTH (uint32_t, UINT32_MAX, UINT32_WIDTH);
+#ifndef UINT64_WIDTH
+# error "missing UINT64_WIDTH"
+#endif
+ CHECK_WIDTH (uint64_t, UINT64_MAX, UINT64_WIDTH);
+
+#ifndef INT_LEAST8_WIDTH
+# error "missing INT_LEAST8_WIDTH"
+#endif
+ CHECK_WIDTH (int_least8_t, INT_LEAST8_MAX, INT_LEAST8_WIDTH);
+#ifndef INT_LEAST16_WIDTH
+# error "missing INT_LEAST16_WIDTH"
+#endif
+ CHECK_WIDTH (int_least16_t, INT_LEAST16_MAX, INT_LEAST16_WIDTH);
+#ifndef INT_LEAST32_WIDTH
+# error "missing INT_LEAST32_WIDTH"
+#endif
+ CHECK_WIDTH (int_least32_t, INT_LEAST32_MAX, INT_LEAST32_WIDTH);
+#ifndef INT_LEAST64_WIDTH
+# error "missing INT_LEAST64_WIDTH"
+#endif
+ CHECK_WIDTH (int_least64_t, INT_LEAST64_MAX, INT_LEAST64_WIDTH);
+#ifndef UINT_LEAST8_WIDTH
+# error "missing UINT_LEAST8_WIDTH"
+#endif
+ CHECK_WIDTH (uint_least8_t, UINT_LEAST8_MAX, UINT_LEAST8_WIDTH);
+#ifndef UINT_LEAST16_WIDTH
+# error "missing UINT_LEAST16_WIDTH"
+#endif
+ CHECK_WIDTH (uint_least16_t, UINT_LEAST16_MAX, UINT_LEAST16_WIDTH);
+#ifndef UINT_LEAST32_WIDTH
+# error "missing UINT_LEAST32_WIDTH"
+#endif
+ CHECK_WIDTH (uint_least32_t, UINT_LEAST32_MAX, UINT_LEAST32_WIDTH);
+#ifndef UINT_LEAST64_WIDTH
+# error "missing UINT_LEAST64_WIDTH"
+#endif
+ CHECK_WIDTH (uint_least64_t, UINT_LEAST64_MAX, UINT_LEAST64_WIDTH);
+
+#ifndef INT_FAST8_WIDTH
+# error "missing INT_FAST8_WIDTH"
+#endif
+ CHECK_WIDTH (int_fast8_t, INT_FAST8_MAX, INT_FAST8_WIDTH);
+#ifndef INT_FAST16_WIDTH
+# error "missing INT_FAST16_WIDTH"
+#endif
+ CHECK_WIDTH (int_fast16_t, INT_FAST16_MAX, INT_FAST16_WIDTH);
+#ifndef INT_FAST32_WIDTH
+# error "missing INT_FAST32_WIDTH"
+#endif
+ CHECK_WIDTH (int_fast32_t, INT_FAST32_MAX, INT_FAST32_WIDTH);
+#ifndef INT_FAST64_WIDTH
+# error "missing INT_FAST64_WIDTH"
+#endif
+ CHECK_WIDTH (int_fast64_t, INT_FAST64_MAX, INT_FAST64_WIDTH);
+#ifndef UINT_FAST8_WIDTH
+# error "missing UINT_FAST8_WIDTH"
+#endif
+ CHECK_WIDTH (uint_fast8_t, UINT_FAST8_MAX, UINT_FAST8_WIDTH);
+#ifndef UINT_FAST16_WIDTH
+# error "missing UINT_FAST16_WIDTH"
+#endif
+ CHECK_WIDTH (uint_fast16_t, UINT_FAST16_MAX, UINT_FAST16_WIDTH);
+#ifndef UINT_FAST32_WIDTH
+# error "missing UINT_FAST32_WIDTH"
+#endif
+ CHECK_WIDTH (uint_fast32_t, UINT_FAST32_MAX, UINT_FAST32_WIDTH);
+#ifndef UINT_FAST64_WIDTH
+# error "missing UINT_FAST64_WIDTH"
+#endif
+ CHECK_WIDTH (uint_fast64_t, UINT_FAST64_MAX, UINT_FAST64_WIDTH);
+
+#ifndef INTPTR_WIDTH
+# error "missing INTPTR_WIDTH"
+#endif
+ CHECK_WIDTH (intptr_t, INTPTR_MAX, INTPTR_WIDTH);
+#ifndef UINTPTR_WIDTH
+# error "missing UINTPTR_WIDTH"
+#endif
+ CHECK_WIDTH (uintptr_t, UINTPTR_MAX, UINTPTR_WIDTH);
+
+#ifndef INTMAX_WIDTH
+# error "missing INTMAX_WIDTH"
+#endif
+ CHECK_WIDTH (intmax_t, INTMAX_MAX, INTMAX_WIDTH);
+#ifndef UINTMAX_WIDTH
+# error "missing UINTMAX_WIDTH"
+#endif
+ CHECK_WIDTH (uintmax_t, UINTMAX_MAX, UINTMAX_WIDTH);
+
+#ifndef PTRDIFF_WIDTH
+# error "missing PTRDIFF_WIDTH"
+#endif
+ CHECK_WIDTH (ptrdiff_t, PTRDIFF_MAX, PTRDIFF_WIDTH);
+#ifndef SIG_ATOMIC_WIDTH
+# error "missing SIG_ATOMIC_WIDTH"
+#endif
+ CHECK_WIDTH (sig_atomic_t, SIG_ATOMIC_MAX, SIG_ATOMIC_WIDTH);
+#ifndef SIZE_WIDTH
+# error "missing SIZE_WIDTH"
+#endif
+ CHECK_WIDTH (size_t, SIZE_MAX, SIZE_WIDTH);
+#ifndef WCHAR_WIDTH
+# error "missing WCHAR_WIDTH"
+#endif
+ CHECK_WIDTH (wchar_t, WCHAR_MAX, WCHAR_WIDTH);
+#ifndef WINT_WIDTH
+# error "missing WINT_WIDTH"
+#endif
+ CHECK_WIDTH (wint_t, WINT_MAX, WINT_WIDTH);
+
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-width.c b/REORG.TODO/stdlib/tst-width.c
new file mode 100644
index 0000000000..326bd9d37d
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-width.c
@@ -0,0 +1,87 @@
+/* Test integer width macros.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <limits.h>
+#include <stdio.h>
+
+#define CHECK_WIDTH(TYPE, MAX, WIDTH) \
+ do \
+ { \
+ if ((MAX >> ((TYPE) -1 < 0 ? (WIDTH - 2) : (WIDTH - 1))) != 1) \
+ { \
+ puts ("bad width of " #TYPE); \
+ result = 1; \
+ } \
+ else \
+ puts ("width of " #TYPE " OK"); \
+ } \
+ while (0)
+
+static int
+do_test (void)
+{
+ int result = 0;
+#ifndef CHAR_WIDTH
+# error "missing CHAR_WIDTH"
+#endif
+ CHECK_WIDTH (char, CHAR_MAX, CHAR_WIDTH);
+#ifndef SCHAR_WIDTH
+# error "missing SCHAR_WIDTH"
+#endif
+ CHECK_WIDTH (signed char, SCHAR_MAX, SCHAR_WIDTH);
+#ifndef UCHAR_WIDTH
+# error "missing UCHAR_WIDTH"
+#endif
+ CHECK_WIDTH (unsigned char, UCHAR_MAX, UCHAR_WIDTH);
+#ifndef SHRT_WIDTH
+# error "missing SHRT_WIDTH"
+#endif
+ CHECK_WIDTH (signed short, SHRT_MAX, SHRT_WIDTH);
+#ifndef USHRT_WIDTH
+# error "missing USHRT_WIDTH"
+#endif
+ CHECK_WIDTH (unsigned short, USHRT_MAX, USHRT_WIDTH);
+#ifndef INT_WIDTH
+# error "missing INT_WIDTH"
+#endif
+ CHECK_WIDTH (signed int, INT_MAX, INT_WIDTH);
+#ifndef UINT_WIDTH
+# error "missing UINT_WIDTH"
+#endif
+ CHECK_WIDTH (unsigned int, UINT_MAX, UINT_WIDTH);
+#ifndef LONG_WIDTH
+# error "missing LONG_WIDTH"
+#endif
+ CHECK_WIDTH (signed long, LONG_MAX, LONG_WIDTH);
+#ifndef ULONG_WIDTH
+# error "missing ULONG_WIDTH"
+#endif
+ CHECK_WIDTH (unsigned long, ULONG_MAX, ULONG_WIDTH);
+#ifndef LLONG_WIDTH
+# error "missing LLONG_WIDTH"
+#endif
+ CHECK_WIDTH (signed long long, LLONG_MAX, LLONG_WIDTH);
+#ifndef ULLONG_WIDTH
+# error "missing ULLONG_WIDTH"
+#endif
+ CHECK_WIDTH (unsigned long long, ULLONG_MAX, ULLONG_WIDTH);
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-xpg-basename.c b/REORG.TODO/stdlib/tst-xpg-basename.c
new file mode 100644
index 0000000000..baf5361747
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-xpg-basename.c
@@ -0,0 +1,69 @@
+/* Copyright (C) 1999-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Andreas Jaeger <aj@suse.de>, 1999.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <libgen.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static struct
+{
+ const char *path;
+ const char *file;
+} tests [] =
+{
+ { "/dir/file", "file" },
+ { "file", "file"},
+ { "/dir/file///", "file" },
+ { "../file", "file" },
+ { "/", "/" },
+ { NULL, "."},
+ { "", "."}
+};
+
+
+static int
+do_test (void)
+{
+ size_t i = 0;
+ int errors = 0;
+ char path[1024];
+ char *file;
+
+ for (i = 0; i < sizeof (tests) / sizeof (tests [0]); ++i)
+ {
+ if (tests [i].path == NULL)
+ file = __xpg_basename (NULL);
+ else
+ {
+ strcpy (path, tests [i].path);
+ file = __xpg_basename (path);
+ }
+ if (strcmp (file, tests [i].file))
+ {
+ printf ("Test with `%s' failed: Result is: `%s'.\n",
+ (tests [i].path == NULL ? "NULL" : tests [i].path), file);
+ errors = 1;
+ }
+ }
+
+ return errors;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/ucontext.h b/REORG.TODO/stdlib/ucontext.h
new file mode 100644
index 0000000000..2cef5f7869
--- /dev/null
+++ b/REORG.TODO/stdlib/ucontext.h
@@ -0,0 +1,52 @@
+/* Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* System V ABI compliant user-level context switching support. */
+
+#ifndef _UCONTEXT_H
+#define _UCONTEXT_H 1
+
+#include <features.h>
+
+/* Get machine dependent definition of data structures. */
+#include <sys/ucontext.h>
+
+__BEGIN_DECLS
+
+/* Get user context and store it in variable pointed to by UCP. */
+extern int getcontext (ucontext_t *__ucp) __THROWNL;
+
+/* Set user context from information of variable pointed to by UCP. */
+extern int setcontext (const ucontext_t *__ucp) __THROWNL;
+
+/* Save current context in context variable pointed to by OUCP and set
+ context from variable pointed to by UCP. */
+extern int swapcontext (ucontext_t *__restrict __oucp,
+ const ucontext_t *__restrict __ucp) __THROWNL;
+
+/* Manipulate user context UCP to continue with calling functions FUNC
+ and the ARGC-1 parameters following ARGC when the context is used
+ the next time in `setcontext' or `swapcontext'.
+
+ We cannot say anything about the parameters FUNC takes; `void'
+ is as good as any other choice. */
+extern void makecontext (ucontext_t *__ucp, void (*__func) (void),
+ int __argc, ...) __THROW;
+
+__END_DECLS
+
+#endif /* ucontext.h */
diff --git a/REORG.TODO/stdlib/udiv_qrnnd.c b/REORG.TODO/stdlib/udiv_qrnnd.c
new file mode 100644
index 0000000000..d32796c04d
--- /dev/null
+++ b/REORG.TODO/stdlib/udiv_qrnnd.c
@@ -0,0 +1,10 @@
+/* For some machines GNU MP needs to define an auxiliary function:
+
+ udiv_qrnnd (quotient, remainder, high_numerator, low_numerator, denominator)
+
+ Divides a two-word unsigned integer, composed by the 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. */
diff --git a/REORG.TODO/stdlib/wcstoimax.c b/REORG.TODO/stdlib/wcstoimax.c
new file mode 100644
index 0000000000..f1de70f320
--- /dev/null
+++ b/REORG.TODO/stdlib/wcstoimax.c
@@ -0,0 +1 @@
+#error "The correct implementation must be chosen based on the `intmax_t' type"
diff --git a/REORG.TODO/stdlib/wcstombs.c b/REORG.TODO/stdlib/wcstombs.c
new file mode 100644
index 0000000000..7e1667b4a1
--- /dev/null
+++ b/REORG.TODO/stdlib/wcstombs.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+
+/* Convert the `wchar_t' string in PWCS to a multibyte character string
+ in S, writing no more than N characters. Return the number of bytes
+ written, or (size_t) -1 if an invalid `wchar_t' was found. */
+size_t
+wcstombs (char *s, const wchar_t *pwcs, size_t n)
+{
+ mbstate_t state;
+
+ memset (&state, '\0', sizeof state);
+
+ /* Return how many we wrote (or maybe an error). */
+ return __wcsrtombs (s, &pwcs, n, &state);
+}
diff --git a/REORG.TODO/stdlib/wcstoumax.c b/REORG.TODO/stdlib/wcstoumax.c
new file mode 100644
index 0000000000..508cb19f8c
--- /dev/null
+++ b/REORG.TODO/stdlib/wcstoumax.c
@@ -0,0 +1 @@
+#error "The correct implementation must be chosen based on the `uintmax_t' type"
diff --git a/REORG.TODO/stdlib/wctomb.c b/REORG.TODO/stdlib/wctomb.c
new file mode 100644
index 0000000000..c14d4266ec
--- /dev/null
+++ b/REORG.TODO/stdlib/wctomb.c
@@ -0,0 +1,57 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+#include <gconv.h>
+#include <wcsmbs/wcsmbsload.h>
+
+
+/* Shared with __wctomb_chk. */
+mbstate_t __wctomb_state attribute_hidden;
+
+/* Convert WCHAR into its multibyte character representation,
+ putting this in S and returning its length.
+
+ Attention: this function should NEVER be intentionally used.
+ The interface is completely stupid. The state is shared between
+ all conversion functions. You should use instead the restartable
+ version `wcrtomb'. */
+int
+wctomb (char *s, wchar_t wchar)
+{
+ /* If S is NULL the function has to return null or not null
+ depending on the encoding having a state depending encoding or
+ not. */
+ if (s == NULL)
+ {
+ const struct gconv_fcts *fcts;
+
+ /* Get the conversion functions. */
+ fcts = get_gconv_fcts (_NL_CURRENT_DATA (LC_CTYPE));
+
+ /* This is an extension in the Unix standard which does not directly
+ violate ISO C. */
+ memset (&__wctomb_state, '\0', sizeof __wctomb_state);
+
+ return fcts->tomb->__stateful;
+ }
+
+ return __wcrtomb (s, wchar, &__wctomb_state);
+}
+libc_hidden_def (wctomb)
diff --git a/REORG.TODO/stdlib/xpg_basename.c b/REORG.TODO/stdlib/xpg_basename.c
new file mode 100644
index 0000000000..57120f9cb2
--- /dev/null
+++ b/REORG.TODO/stdlib/xpg_basename.c
@@ -0,0 +1,71 @@
+/* Return basename of given pathname according to the weird XPG specification.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <string.h>
+#include <libgen.h>
+
+
+char *
+__xpg_basename (char *filename)
+{
+ char *p;
+
+ if (filename == NULL || filename[0] == '\0')
+ /* We return a pointer to a static string containing ".". */
+ p = (char *) ".";
+ else
+ {
+ p = strrchr (filename, '/');
+
+ if (p == NULL)
+ /* There is no slash in the filename. Return the whole string. */
+ p = filename;
+ else
+ {
+ if (p[1] == '\0')
+ {
+ /* We must remove trailing '/'. */
+ while (p > filename && p[-1] == '/')
+ --p;
+
+ /* Now we can be in two situations:
+ a) the string only contains '/' characters, so we return
+ '/'
+ b) p points past the last component, but we have to remove
+ the trailing slash. */
+ if (p > filename)
+ {
+ *p-- = '\0';
+ while (p > filename && p[-1] != '/')
+ --p;
+ }
+ else
+ /* The last slash we already found is the right position
+ to return. */
+ while (p[1] != '\0')
+ ++p;
+ }
+ else
+ /* Go to the first character of the name. */
+ ++p;
+ }
+ }
+
+ return p;
+}