glibc/sysdeps/generic
Letu Ren 0cc0033ef1 stdlib/strfrom: Add copysign to fix NAN issue on riscv (BZ #29501)
According to the specification of ISO/IEC TS 18661-1:2014,

The strfromd, strfromf, and strfroml functions are equivalent to
snprintf(s, n, format, fp) (7.21.6.5), except the format string contains only
the character %, an optional precision that does not contain an asterisk *, and
one of the conversion specifiers a, A, e, E, f, F, g, or G, which applies to
the type (double, float, or long double) indicated by the function suffix
(rather than  by a length modifier). Use of these functions with any other 20
format string results in undefined behavior.

strfromf will convert the arguement with type float to double first.

According to the latest version of IEEE754 which is published in 2019,

Conversion of a quiet NaN from a narrower format to a wider format in the same
radix, and then back to the same narrower format, should not change the quiet
NaN payload in any way except to make it canonical.

When either an input or result is a NaN, this standard does not interpret the
sign of a NaN. However, operations on bit strings—copy, negate, abs,
copySign—specify the sign bit of a NaN result, sometimes based upon the sign
bit of a NaN operand. The logical predicates totalOrder and isSignMinus are
also affected by the sign bit of a NaN operand. For all other operations, this
standard does not specify the sign bit of a NaN result, even when there is only
one input NaN, or when the NaN is produced from an invalid operation.

converting NAN or -NAN with type float to double doesn't need to keep
the signbit. As a result, this test case isn't mandatory.

The problem is that according to RISC-V ISA manual in chapter 11.3 of
riscv-isa-20191213,

Except when otherwise stated, if the result of a floating-point operation is
NaN, it is the canonical NaN. The canonical NaN has a positive sign and all
significand bits clear except the MSB, a.k.a. the quiet bit. For
single-precision floating-point, this corresponds to the pattern 0x7fc00000.

which means that conversion -NAN from float to double won't keep the signbit.

Since glibc ought to be consistent here between types and architectures, this
patch adds copysign to fix this problem if the string is NAN. This patch
adds two different functions under sysdeps directory to work around the
issue.

This patch has been tested on x86_64 and riscv64.

Resolves: BZ #29501

v2: Change from macros to different inline functions.
v3: Add unlikely check to isnan.
v4: Fix wrong commit message header.
v5: Fix style: add space before parentheses.
v6: Add copyright.
Signed-off-by: Letu Ren <fantasquex@gmail.com>
Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
2022-10-28 11:35:20 -03:00
..
net Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
netinet Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
nfs Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
sys ttydefaults.h: Fix CSTATUS to control-t 2022-01-07 00:23:05 +01:00
_G_config.h
_itoa.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
a.out.h
abort-instr.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
adaptive_spin_count.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
aio_misc.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
allocalim.h
arch-fd_to_filename.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
asm-syntax.h
atomic-machine.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
c++-types.data
confstr.h
crti.S Introduce <elf-initfini.h> and ELF_INITFINI for all architectures 2020-02-18 15:12:25 +01:00
crtn.S Introduce <elf-initfini.h> and ELF_INITFINI for all architectures 2020-02-18 15:12:25 +01:00
device-nrs.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dirstream.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-audit-check.h elf: Fix runtime linker auditing on aarch64 (BZ #26643) 2022-02-01 14:49:46 -03:00
dl-auxv.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-cache.h elf: Remove ldconfig kernel version check 2022-05-16 15:03:49 -03:00
dl-debug.h elf: Add <dl-debug.h> 2022-01-03 05:16:03 -08:00
dl-dtprocnum.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-dtv.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-execve.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-fcntl.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-fileid.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-fixup-attribute.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-fptr.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-hash.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-hwcap-check.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-irel.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-isa-level.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-lookupcfg.h elf: Issue la_symbind for bind-now (BZ #23734) 2022-02-01 14:49:46 -03:00
dl-machine-rel.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-machine.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-minimal-malloc.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-mman.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-new-hash.h elf: Optimize _dl_new_hash in dl-new-hash.h 2022-05-23 10:38:40 -05:00
dl-osinfo.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-procinfo.c
dl-procinfo.h elf: Remove _dl_string_hwcap 2022-10-06 07:59:48 -03:00
dl-procruntime.c
dl-prop.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-protected.h elf: Refine direct extern access diagnostics to protected symbol 2022-06-14 13:07:27 -07:00
dl-r_debug.h elf: Add <dl-r_debug.h> 2022-01-31 07:05:48 -08:00
dl-relocate-ld.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-symbol-redir-ifunc.h elf: Remove -fno-tree-loop-distribute-patterns usage on dl-support 2022-10-10 10:32:28 -03:00
dl-sysdep.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-tls.h
dl-unistd.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-vdso-setup.c elf: Move vDSO setup to rtld (BZ#24967) 2020-01-03 11:22:07 -03:00
dl-vdso-setup.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dl-vdso.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
dwarf2.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
elf_machine_sym_no_match.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
elf-initfini.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
elf-read-prop.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
elide.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
eloop-threshold.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
entry.h
errqueue.h
fast-jitter.h sysdeps: Add 'get_fast_jitter' interace in fast-jitter.h 2022-04-27 17:17:43 -05:00
fd_to_filename.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
features-time64.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
fenv_private.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
fips-private.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
fix-float-double-convert-nan.h stdlib/strfrom: Add copysign to fix NAN issue on riscv (BZ #29501) 2022-10-28 11:35:20 -03:00
fix-fp-int-compare-invalid.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
fix-fp-int-convert-overflow.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
fix-int-fp-convert-zero.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
float128-abi.h
fork.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
fpu_control.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
framestate.c Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
gcc-compat.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
gccframe.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
get-rounding-mode.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
gmp-mparam.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
hp-timing-common.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
hp-timing.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
ifreq.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
ifunc-init.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
ifunc-sel.h
internal-signals.h Fix hurd namespace issues for internal signal functions 2022-07-04 11:10:06 -03:00
intr-msg.h
ld.abilist
ldbl-classify-compat.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
ldconfig.h elf: Remove hwcap parameter from add_to_cache signature 2022-10-06 07:59:48 -03:00
ldsodefs.h elf: Introduce to _dl_call_fini 2022-10-27 11:36:44 +02:00
libanl.abilist
libBrokenLocale.abilist
libc_malloc_debug.abilist Move malloc hooks into a compat DSO 2021-07-22 18:37:59 +05:30
libc_start_call_main.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
libc-lock-arch.h m68k: Enforce 4-byte alignment on internal locks (BZ #29537) 2022-09-20 10:56:54 -03:00
libc-lock.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
libc-mmap.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
libc-mtag.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
libc-start.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
libc-symver.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
libc-tsd.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
libc.abilist linux: Add pidfd_getfd 2022-05-17 10:33:07 -03:00
libcrypt.abilist
libdl.abilist
libm-alias-double.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
libm-alias-float128.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
libm-alias-float.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
libm-alias-ldouble.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
libm-test-ulps
libm-test-ulps-name
libm.abilist
libnsl.abilist
libnss_compat.abilist
libnss_db.abilist
libnss_dns.abilist
libnss_files.abilist
libnss_hesiod.abilist
libnss_nis.abilist
libnss_nisplus.abilist
libpthread.abilist
libresolv.abilist
librt.abilist
libutil.abilist
link_map.h Initial support for GNU_PROPERTY_1_NEEDED 2021-10-07 10:26:08 -07:00
linkmap.h
local-setxid.h
localplt.data mtrace: Wean away from malloc hooks 2021-07-22 18:38:06 +05:30
machine-gmon.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
machine-lock.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
machine-sp.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
Makefile Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
malloc-alignment.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
malloc-hugepages.c Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
malloc-hugepages.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
malloc-machine.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
malloc-size.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
malloc-sysdep.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math_ldbl_opt.h
math_ldbl.h
math_private_calls.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math_private.h math: Remove mpa files [BZ #15267] 2021-03-11 14:26:36 +00:00
math-barriers.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-nan-payload-double.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-nan-payload-float.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-narrow-alias-float128.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-narrow-alias.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-tests-arch.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-tests-exceptions.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-tests-rounding.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-tests-snan-cast.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-tests-snan-payload.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-tests-snan.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-tests-trap-force.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-tests-trap.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-tests.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-type-macros-double.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-type-macros-float128.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-type-macros-float.h math: Fix float conversion regressions with gcc-12 [BZ #28713] 2022-01-10 14:27:17 +00:00
math-type-macros-ldouble.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-type-macros.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
math-use-builtins-ceil.h math: Decompose math-use-builtins.h 2020-06-22 11:09:45 -03:00
math-use-builtins-copysign.h math: Decompose math-use-builtins.h 2020-06-22 11:09:45 -03:00
math-use-builtins-fabs.h math: Add math-use-builtins-fabs (BZ#29027) 2022-05-23 17:49:18 -03:00
math-use-builtins-floor.h math: Decompose math-use-builtins.h 2020-06-22 11:09:45 -03:00
math-use-builtins-fma.h math: Decompose math-use-builtins.h 2020-06-22 11:09:45 -03:00
math-use-builtins-fmax.h math: Add math-use-builtinds-fmax.h 2021-12-13 09:08:07 -03:00
math-use-builtins-fmin.h math: Add math-use-builtinds-fmin.h 2021-12-13 10:08:43 -03:00
math-use-builtins-nearbyint.h math: Decompose math-use-builtins.h 2020-06-22 11:09:45 -03:00
math-use-builtins-rint.h math: Decompose math-use-builtins.h 2020-06-22 11:09:45 -03:00
math-use-builtins-round.h math: Decompose math-use-builtins.h 2020-06-22 11:09:45 -03:00
math-use-builtins-roundeven.h Use GCC builtins for roundeven functions if desired. 2021-06-27 07:56:57 -07:00
math-use-builtins-sqrt.h math: Decompose math-use-builtins.h 2020-06-22 11:09:45 -03:00
math-use-builtins-trunc.h math: Decompose math-use-builtins.h 2020-06-22 11:09:45 -03:00
math-use-builtins.h math: Add math-use-builtins-fabs (BZ#29027) 2022-05-23 17:49:18 -03:00
memcopy.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
mmap_info.h
nan-high-order-bit.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
not-cancel.h arc4random: simplify design for better safety 2022-07-27 08:58:27 -03:00
not-errno.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
nscd-types.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
pagecopy.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
paths.h
pointer_guard.h Introduce <pointer_guard.h>, extracted from <sysdep.h> 2022-10-18 17:03:55 +02:00
profil-counter.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
pty-private.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
rtld_static_init.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
rtld-lowlevel.h
safe-fatal.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
set-hooks-arch.h SET_RELHOOK: merge i386 and x86_64, and move to sysdeps/mach/hurd/x86 2022-02-01 20:08:25 +00:00
setjmpP.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
sigcontextinfo.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
siglist-compat-def.h stdio: Remove the usage of $(fno-unit-at-a-time) for siglist.c 2022-05-13 10:54:41 -03:00
siglist.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
sigset-cvt-mask.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
sigsetops.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
single-thread.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
spawn_int_def.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
stackguard-macros.h
stackinfo.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
stap-probe-machine.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
startup.h elf: Remove __libc_init_secure 2022-04-19 15:52:27 -07:00
stdio-lock.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
string_private.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
struct_stat_time64.h linux: Add {f}stat{at} y2038 support 2020-10-09 17:02:07 -03:00
symbol-hacks.h Disable symbol hack in libc_nonshared.a 2021-09-27 07:46:25 -07:00
sysdep-cancel.h
sysdep.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
thread_state.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
time64-compat.h y2038: Add support for 64-bit time on legacy ABIs 2021-06-15 10:42:11 -03:00
time-clockid.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
tininess.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
tls-internal-struct.h arc4random: simplify design for better safety 2022-07-27 08:58:27 -03:00
tls-internal.c arc4random: simplify design for better safety 2022-07-27 08:58:27 -03:00
tls-internal.h stdlib: Add arc4random, arc4random_buf, and arc4random_uniform (BZ #4417) 2022-07-22 11:58:27 -03:00
tls-setup.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
tls.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
tst-audit.h
tst-file-align.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
tst-stack-align.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
unsecvars.h elf: Remove LD_USE_LOAD_BIAS 2022-02-10 09:18:15 -03:00
unwind-arch.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
unwind-dw2-fde-glibc.c Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
unwind-dw2-fde.c Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
unwind-dw2-fde.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
unwind-dw2.c Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
unwind-link.h Use PTR_MANGLE and PTR_DEMANGLE unconditionally in C sources 2022-10-18 17:04:10 +02:00
unwind-pe.c
unwind-pe.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
unwind-resume.c Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
unwind-resume.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
unwind.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
utmp-equal.h Update copyright dates with scripts/update-copyrights 2022-01-01 11:40:24 -08:00
xstatver.h Remove mknod wrapper functions, move them to symbols 2020-10-09 17:02:06 -03:00