From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from omta001.cacentral1.a.cloudfilter.net (omta001.cacentral1.a.cloudfilter.net [3.97.99.32]) by sourceware.org (Postfix) with ESMTPS id B9D583858D39 for ; Wed, 29 Dec 2021 05:10:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B9D583858D39 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=SystematicSw.ab.ca Authentication-Results: sourceware.org; spf=none smtp.mailfrom=systematicsw.ab.ca Received: from shw-obgw-4002a.ext.cloudfilter.net ([10.228.9.250]) by cmsmtp with ESMTP id 2JYinmUSPlW5q2RDtnDaeR; Wed, 29 Dec 2021 05:10:01 +0000 Received: from [192.168.1.105] ([68.147.0.90]) by cmsmtp with ESMTP id 2RDsnQfvm5liv2RDsnNKIO; Wed, 29 Dec 2021 05:10:01 +0000 X-Authority-Analysis: v=2.4 cv=IfaU5Ema c=1 sm=1 tr=0 ts=61cbeda9 a=T+ovY1NZ+FAi/xYICV7Bgg==:117 a=T+ovY1NZ+FAi/xYICV7Bgg==:17 a=r77TgQKjGQsHNAKrUKIA:9 a=2QSLavsyAAAA:8 a=uYT-Tk0qkVT609LjNaIA:9 a=QEXdDO2ut3YA:10 a=h70jUE_OEoMLUwwyeLwA:9 a=m-Z_27IZkzAA:10 a=9H_80fVQ3bbXSWzY4Kdq:22 Content-Type: multipart/mixed; boundary="------------5S9jaKU0LNo7renlSb0uiXIy" Message-ID: Date: Tue, 28 Dec 2021 22:10:00 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Reply-To: newlib@sourceware.org Subject: Re: Errors in math function man pages Content-Language: en-CA To: newlib@sourceware.org References: From: Brian Inglis Organization: Systematic Software In-Reply-To: X-CMAE-Envelope: MS4xfDTZvCrRJpP3kF9tkpbnrAB/BtmtqdrJ/BFMncXYlQLuyO/ETj1gkYtdE/F+PV6OHPK7ZrcIrA00juy2TnRRKoGlcE3+XCA9uQIGP8XC/d8JEcmnoAig RCY5z78y2D+4zFIU5YLXMzyO7OQG2lXRM5tWzXQVe9KSyh5zs8rY1T0b7+SmABxvleaqgfs1GW1ZUQsz1UhkTj708uiFDE4HSas= X-Spam-Status: No, score=-1164.7 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, NICE_REPLY_A, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=no autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Dec 2021 05:10:04 -0000 This is a multi-part message in MIME format. --------------5S9jaKU0LNo7renlSb0uiXIy Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 2021-12-28 18:57, Keith Thompson wrote: > There are two errors in the sqrt(3) man page, with similar errors in > the man pages for most or all of the other math functions specified > in . The math functions are implemented correctly as far as > I can tell, but the man pages are out of date, reflecting the language > as of the 1989 ANSI / 1999 ISO C standard. > > C89/C90 defined math functions only for type double, but C99 and > later added corresponding functions for float and long double (with > 'f' and 'l' suffixes), and also introduced a number of new functions. > > Using sqrt(3) man page as an example, it mentions sqrt and sqrtf, > but does not mention sqrtl. > > Second, it says: > >> sqrt is ANSI C. sqrtf is an extension. > > That was true as of C89/C89, but sqrt, sqrtf, and sqrtl are all defined > by ISO C 1999 and later. (And I suggest referring to "ISO C" rather > than the ambiguous "ANSI C".) > > The same problem appears in most or all of the man pages for functions > declared in . > > Another example: the man page for asinh (inverse hyperbolic sine) says: >> Neither asinh nor asinhf are ANSI C. > > As of C99 and later, asinh, asinhf, and asinhl are all ISO C. > > I *think* this is the list of source files that would need to corrected > to bring the man pages up to date: > > newlib/libm/math/s_asinh.c > newlib/libm/math/s_atan.c > newlib/libm/math/s_erf.c > newlib/libm/math/s_sin.c > newlib/libm/math/s_tanh.c > newlib/libm/math/w_acosh.c > newlib/libm/math/w_atan2.c > newlib/libm/math/w_atanh.c > newlib/libm/math/w_exp.c > newlib/libm/math/w_fmod.c > newlib/libm/math/w_gamma.c > newlib/libm/math/w_hypot.c > newlib/libm/math/w_log10.c > newlib/libm/math/w_pow.c > newlib/libm/math/w_sinh.c > newlib/libm/math/w_sqrt.c > newlib/libm/mathfp/e_acosh.c > newlib/libm/mathfp/e_atanh.c > newlib/libm/mathfp/e_hypot.c > newlib/libm/mathfp/er_lgamma.c > newlib/libm/mathfp/s_asinh.c > newlib/libm/mathfp/s_atan.c > newlib/libm/mathfp/s_atan2.c > newlib/libm/mathfp/s_atangent.c > newlib/libm/mathfp/s_erf.c > newlib/libm/mathfp/s_exp.c > newlib/libm/mathfp/s_fmod.c > newlib/libm/mathfp/s_log10.c > newlib/libm/mathfp/s_pow.c > newlib/libm/mathfp/s_sine.c > newlib/libm/mathfp/s_sineh.c > newlib/libm/mathfp/s_sqrt.c > newlib/libm/mathfp/s_tanh.c Attached is a list of what should be the C2017 math functions and macros derived from an early draft of C202X with no changes in that section, which should allow it to be quoted and used without issues. For more details, there is also: https://en.cppreference.com/w/c/numeric/math -- Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada This email may be disturbing to some readers as it contains too much technical detail. Reader discretion is advised. [Data in binary units and prefixes, physical quantities in SI.] --------------5S9jaKU0LNo7renlSb0uiXIy Content-Type: text/plain; charset=UTF-8; name="math.h-2017.txt" Content-Disposition: attachment; filename="math.h-2017.txt" Content-Transfer-Encoding: base64 Ny4xMi4xCQlUcmVhdG1lbnQgb2YgZXJyb3IgY29uZGl0aW9ucwoKNy4xMi4yCQlUaGUgRlBf Q09OVFJBQ1QgcHJhZ21hClN5bm9wc2lzCgkjaW5jbHVkZSA8bWF0aC5oPgoJI3ByYWdtYSBT VERDIEZQX0NPTlRSQUNUIG9uLW9mZi1zd2l0Y2gKCjcuMTIuMwkJQ2xhc3NpZmljYXRpb24g bWFjcm9zCgo3LjEyLjMuMSBUaGUgZnBjbGFzc2lmeSBtYWNybwpTeW5vcHNpcwoJI2luY2x1 ZGUgPG1hdGguaD4KCWludCBmcGNsYXNzaWZ5KHJlYWwtZmxvYXRpbmcgeCk7Cgo3LjEyLjMu MiBUaGUgaXNmaW5pdGUgbWFjcm8KU3lub3BzaXMKCSNpbmNsdWRlIDxtYXRoLmg+CglpbnQg aXNmaW5pdGUocmVhbC1mbG9hdGluZyB4KTsKCjcuMTIuMy4zIFRoZSBpc2luZiBtYWNybwpT eW5vcHNpcwoJI2luY2x1ZGUgPG1hdGguaD4KCWludCBpc2luZihyZWFsLWZsb2F0aW5nIHgp OwoKNy4xMi4zLjQgVGhlIGlzbmFuIG1hY3JvClN5bm9wc2lzCgkjaW5jbHVkZSA8bWF0aC5o PgoJaW50IGlzbmFuKHJlYWwtZmxvYXRpbmcgeCk7Cgo3LjEyLjMuNSBUaGUgaXNub3JtYWwg bWFjcm8KU3lub3BzaXMKCSNpbmNsdWRlIDxtYXRoLmg+CglpbnQgaXNub3JtYWwocmVhbC1m bG9hdGluZyB4KTsKCjcuMTIuMy42IFRoZSBzaWduYml0IG1hY3JvClN5bm9wc2lzCgkjaW5j bHVkZSA8bWF0aC5oPgoJaW50IHNpZ25iaXQocmVhbC1mbG9hdGluZyB4KTsKCjcuMTIuNAkJ VHJpZ29ub21ldHJpYyBmdW5jdGlvbnMKCjcuMTIuNC4xIFRoZSBhY29zIGZ1bmN0aW9ucwpT eW5vcHNpcwoJI2luY2x1ZGUgPG1hdGguaD4KCWRvdWJsZSBhY29zKGRvdWJsZSB4KTsKCWZs b2F0IGFjb3NmKGZsb2F0IHgpOwoJbG9uZyBkb3VibGUgYWNvc2wobG9uZyBkb3VibGUgeCk7 Cgo3LjEyLjQuMiBUaGUgYXNpbiBmdW5jdGlvbnMKU3lub3BzaXMKCSNpbmNsdWRlIDxtYXRo Lmg+Cglkb3VibGUgYXNpbihkb3VibGUgeCk7CglmbG9hdCBhc2luZihmbG9hdCB4KTsKCWxv bmcgZG91YmxlIGFzaW5sKGxvbmcgZG91YmxlIHgpOwoKNy4xMi40LjMgVGhlIGF0YW4gZnVu Y3Rpb25zClN5bm9wc2lzCgkjaW5jbHVkZSA8bWF0aC5oPgoJZG91YmxlIGF0YW4oZG91Ymxl IHgpOwoJZmxvYXQgYXRhbmYoZmxvYXQgeCk7Cglsb25nIGRvdWJsZSBhdGFubChsb25nIGRv dWJsZSB4KTsKCjcuMTIuNC40IFRoZSBhdGFuMiBmdW5jdGlvbnMKU3lub3BzaXMKCSNpbmNs dWRlIDxtYXRoLmg+Cglkb3VibGUgYXRhbjIoZG91YmxlIHksIGRvdWJsZSB4KTsKCWZsb2F0 IGF0YW4yZihmbG9hdCB5LCBmbG9hdCB4KTsKCWxvbmcgZG91YmxlIGF0YW4ybChsb25nIGRv dWJsZSB5LCBsb25nIGRvdWJsZSB4KTsKCjcuMTIuNC41IFRoZSBjb3MgZnVuY3Rpb25zClN5 bm9wc2lzCgkjaW5jbHVkZSA8bWF0aC5oPgoJZG91YmxlIGNvcyhkb3VibGUgeCk7CglmbG9h dCBjb3NmKGZsb2F0IHgpOwoJbG9uZyBkb3VibGUgY29zbChsb25nIGRvdWJsZSB4KTsKCjcu MTIuNC42IFRoZSBzaW4gZnVuY3Rpb25zClN5bm9wc2lzCgkjaW5jbHVkZSA8bWF0aC5oPgoJ ZG91YmxlIHNpbihkb3VibGUgeCk7CglmbG9hdCBzaW5mKGZsb2F0IHgpOwoJbG9uZyBkb3Vi bGUgc2lubChsb25nIGRvdWJsZSB4KTsKCjcuMTIuNC43IFRoZSB0YW4gZnVuY3Rpb25zClN5 bm9wc2lzCgkjaW5jbHVkZSA8bWF0aC5oPgoJZG91YmxlIHRhbihkb3VibGUgeCk7CglmbG9h dCB0YW5mKGZsb2F0IHgpOwoJbG9uZyBkb3VibGUgdGFubChsb25nIGRvdWJsZSB4KTsKCjcu MTIuNQkJSHlwZXJib2xpYyBmdW5jdGlvbnMKCjcuMTIuNS4xIFRoZSBhY29zaCBmdW5jdGlv bnMKU3lub3BzaXMKCSNpbmNsdWRlIDxtYXRoLmg+Cglkb3VibGUgYWNvc2goZG91YmxlIHgp OwoJZmxvYXQgYWNvc2hmKGZsb2F0IHgpOwoJbG9uZyBkb3VibGUgYWNvc2hsKGxvbmcgZG91 YmxlIHgpOwoKNy4xMi41LjIgVGhlIGFzaW5oIGZ1bmN0aW9ucwpTeW5vcHNpcwoJI2luY2x1 ZGUgPG1hdGguaD4KCWRvdWJsZSBhc2luaChkb3VibGUgeCk7CglmbG9hdCBhc2luaGYoZmxv YXQgeCk7Cglsb25nIGRvdWJsZSBhc2luaGwobG9uZyBkb3VibGUgeCk7Cgo3LjEyLjUuMyBU aGUgYXRhbmggZnVuY3Rpb25zClN5bm9wc2lzCgkjaW5jbHVkZSA8bWF0aC5oPgoJZG91Ymxl IGF0YW5oKGRvdWJsZSB4KTsKCWZsb2F0IGF0YW5oZihmbG9hdCB4KTsKCWxvbmcgZG91Ymxl IGF0YW5obChsb25nIGRvdWJsZSB4KTsKCjcuMTIuNS40IFRoZSBjb3NoIGZ1bmN0aW9ucwpT eW5vcHNpcwoJI2luY2x1ZGUgPG1hdGguaD4KCWRvdWJsZSBjb3NoKGRvdWJsZSB4KTsKCWZs b2F0IGNvc2hmKGZsb2F0IHgpOwoJbG9uZyBkb3VibGUgY29zaGwobG9uZyBkb3VibGUgeCk7 Cgo3LjEyLjUuNSBUaGUgc2luaCBmdW5jdGlvbnMKU3lub3BzaXMKCSNpbmNsdWRlIDxtYXRo Lmg+Cglkb3VibGUgc2luaChkb3VibGUgeCk7CglmbG9hdCBzaW5oZihmbG9hdCB4KTsKCWxv bmcgZG91YmxlIHNpbmhsKGxvbmcgZG91YmxlIHgpOwoKNy4xMi41LjYgVGhlIHRhbmggZnVu Y3Rpb25zClN5bm9wc2lzCgkjaW5jbHVkZSA8bWF0aC5oPgoJZG91YmxlIHRhbmgoZG91Ymxl IHgpOwoJZmxvYXQgdGFuaGYoZmxvYXQgeCk7Cglsb25nIGRvdWJsZSB0YW5obChsb25nIGRv dWJsZSB4KTsKCjcuMTIuNgkJRXhwb25lbnRpYWwgYW5kIGxvZ2FyaXRobWljIGZ1bmN0aW9u cwoKNy4xMi42LjEgVGhlIGV4cCBmdW5jdGlvbnMKU3lub3BzaXMKCSNpbmNsdWRlIDxtYXRo Lmg+Cglkb3VibGUgZXhwKGRvdWJsZSB4KTsKCWZsb2F0IGV4cGYoZmxvYXQgeCk7Cglsb25n IGRvdWJsZSBleHBsKGxvbmcgZG91YmxlIHgpOwoKNy4xMi42LjIgVGhlIGV4cDIgZnVuY3Rp b25zClN5bm9wc2lzCgkjaW5jbHVkZSA8bWF0aC5oPgoJZG91YmxlIGV4cDIoZG91YmxlIHgp OwoJZmxvYXQgZXhwMmYoZmxvYXQgeCk7Cglsb25nIGRvdWJsZSBleHAybChsb25nIGRvdWJs ZSB4KTsKCjcuMTIuNi4zIFRoZSBleHBtMSBmdW5jdGlvbnMKU3lub3BzaXMKCSNpbmNsdWRl IDxtYXRoLmg+Cglkb3VibGUgZXhwbTEoZG91YmxlIHgpOwoJZmxvYXQgZXhwbTFmKGZsb2F0 IHgpOwoJbG9uZyBkb3VibGUgZXhwbTFsKGxvbmcgZG91YmxlIHgpOwoKNy4xMi42LjQgVGhl IGZyZXhwIGZ1bmN0aW9ucwpTeW5vcHNpcwoJI2luY2x1ZGUgPG1hdGguaD4KCWRvdWJsZSBm cmV4cChkb3VibGUgdmFsdWUsIGludCAqZXhwKTsKCWZsb2F0IGZyZXhwZihmbG9hdCB2YWx1 ZSwgaW50ICpleHApOwoJbG9uZyBkb3VibGUgZnJleHBsKGxvbmcgZG91YmxlIHZhbHVlLCBp bnQgKmV4cCk7Cgo3LjEyLjYuNSBUaGUgaWxvZ2IgZnVuY3Rpb25zClN5bm9wc2lzCgkjaW5j bHVkZSA8bWF0aC5oPgoJaW50IGlsb2diKGRvdWJsZSB4KTsKCWludCBpbG9nYmYoZmxvYXQg eCk7CglpbnQgaWxvZ2JsKGxvbmcgZG91YmxlIHgpOwoKNy4xMi42LjYgVGhlIGxkZXhwIGZ1 bmN0aW9ucwpTeW5vcHNpcwoJI2luY2x1ZGUgPG1hdGguaD4KCWRvdWJsZSBsZGV4cChkb3Vi bGUgeCwgaW50IGV4cCk7CglmbG9hdCBsZGV4cGYoZmxvYXQgeCwgaW50IGV4cCk7Cglsb25n IGRvdWJsZSBsZGV4cGwobG9uZyBkb3VibGUgeCwgaW50IGV4cCk7Cgo3LjEyLjYuNyBUaGUg bG9nIGZ1bmN0aW9ucwpTeW5vcHNpcwoJI2luY2x1ZGUgPG1hdGguaD4KCWRvdWJsZSBsb2co ZG91YmxlIHgpOwoJZmxvYXQgbG9nZihmbG9hdCB4KTsKCWxvbmcgZG91YmxlIGxvZ2wobG9u ZyBkb3VibGUgeCk7Cgo3LjEyLjYuOCBUaGUgbG9nMTAgZnVuY3Rpb25zClN5bm9wc2lzCgkj aW5jbHVkZSA8bWF0aC5oPgoJZG91YmxlIGxvZzEwKGRvdWJsZSB4KTsKCWZsb2F0IGxvZzEw ZihmbG9hdCB4KTsKCWxvbmcgZG91YmxlIGxvZzEwbChsb25nIGRvdWJsZSB4KTsKCjcuMTIu Ni45IFRoZSBsb2cxcCBmdW5jdGlvbnMKU3lub3BzaXMKCSNpbmNsdWRlIDxtYXRoLmg+Cglk b3VibGUgbG9nMXAoZG91YmxlIHgpOwoJZmxvYXQgbG9nMXBmKGZsb2F0IHgpOwoJbG9uZyBk b3VibGUgbG9nMXBsKGxvbmcgZG91YmxlIHgpOwoKNy4xMi42LjEwIFRoZSBsb2cyIGZ1bmN0 aW9ucwpTeW5vcHNpcwoJI2luY2x1ZGUgPG1hdGguaD4KCWRvdWJsZSBsb2cyKGRvdWJsZSB4 KTsKCWZsb2F0IGxvZzJmKGZsb2F0IHgpOwoJbG9uZyBkb3VibGUgbG9nMmwobG9uZyBkb3Vi bGUgeCk7Cgo3LjEyLjYuMTEgVGhlIGxvZ2IgZnVuY3Rpb25zClN5bm9wc2lzCgkjaW5jbHVk ZSA8bWF0aC5oPgoJZG91YmxlIGxvZ2IoZG91YmxlIHgpOwoJZmxvYXQgbG9nYmYoZmxvYXQg eCk7Cglsb25nIGRvdWJsZSBsb2dibChsb25nIGRvdWJsZSB4KTsKCjcuMTIuNi4xMiBUaGUg bW9kZiBmdW5jdGlvbnMKU3lub3BzaXMKCSNpbmNsdWRlIDxtYXRoLmg+Cglkb3VibGUgbW9k Zihkb3VibGUgdmFsdWUsIGRvdWJsZSAqaXB0cik7CglmbG9hdCBtb2RmZihmbG9hdCB2YWx1 ZSwgZmxvYXQgKmlwdHIpOwoJbG9uZyBkb3VibGUgbW9kZmwobG9uZyBkb3VibGUgdmFsdWUs IGxvbmcgZG91YmxlICppcHRyKTsKCjcuMTIuNi4xMyBUaGUgc2NhbGJuIGFuZCBzY2FsYmxu IGZ1bmN0aW9ucwpTeW5vcHNpcwoJI2luY2x1ZGUgPG1hdGguaD4KCWRvdWJsZSBzY2FsYm4o ZG91YmxlIHgsIGludCBuKTsKCWZsb2F0IHNjYWxibmYoZmxvYXQgeCwgaW50IG4pOwoJbG9u ZyBkb3VibGUgc2NhbGJubChsb25nIGRvdWJsZSB4LCBpbnQgbik7Cglkb3VibGUgc2NhbGJs bihkb3VibGUgeCwgbG9uZyBpbnQgbik7CglmbG9hdCBzY2FsYmxuZihmbG9hdCB4LCBsb25n IGludCBuKTsKCWxvbmcgZG91YmxlIHNjYWxibG5sKGxvbmcgZG91YmxlIHgsIGxvbmcgaW50 IG4pOwoKNy4xMi43CQlQb3dlciBhbmQgYWJzb2x1dGUtdmFsdWUgZnVuY3Rpb25zCgo3LjEy LjcuMSBUaGUgY2JydCBmdW5jdGlvbnMKU3lub3BzaXMKCSNpbmNsdWRlIDxtYXRoLmg+Cglk b3VibGUgY2JydChkb3VibGUgeCk7CglmbG9hdCBjYnJ0ZihmbG9hdCB4KTsKCWxvbmcgZG91 YmxlIGNicnRsKGxvbmcgZG91YmxlIHgpOwoKNy4xMi43LjIgVGhlIGZhYnMgZnVuY3Rpb25z ClN5bm9wc2lzCgkjaW5jbHVkZSA8bWF0aC5oPgoJZG91YmxlIGZhYnMoZG91YmxlIHgpOwoJ ZmxvYXQgZmFic2YoZmxvYXQgeCk7Cglsb25nIGRvdWJsZSBmYWJzbChsb25nIGRvdWJsZSB4 KTsKCjcuMTIuNy4zIFRoZSBoeXBvdCBmdW5jdGlvbnMKU3lub3BzaXMKCSNpbmNsdWRlIDxt YXRoLmg+Cglkb3VibGUgaHlwb3QoZG91YmxlIHgsIGRvdWJsZSB5KTsKCWZsb2F0IGh5cG90 ZihmbG9hdCB4LCBmbG9hdCB5KTsKCWxvbmcgZG91YmxlIGh5cG90bChsb25nIGRvdWJsZSB4 LCBsb25nIGRvdWJsZSB5KTsKCjcuMTIuNy40IFRoZSBwb3cgZnVuY3Rpb25zClN5bm9wc2lz CgkjaW5jbHVkZSA8bWF0aC5oPgoJZG91YmxlIHBvdyhkb3VibGUgeCwgZG91YmxlIHkpOwoJ ZmxvYXQgcG93ZihmbG9hdCB4LCBmbG9hdCB5KTsKCWxvbmcgZG91YmxlIHBvd2wobG9uZyBk b3VibGUgeCwgbG9uZyBkb3VibGUgeSk7Cgo3LjEyLjcuNSBUaGUgc3FydCBmdW5jdGlvbnMK U3lub3BzaXMKCSNpbmNsdWRlIDxtYXRoLmg+Cglkb3VibGUgc3FydChkb3VibGUgeCk7Cglm bG9hdCBzcXJ0ZihmbG9hdCB4KTsKCWxvbmcgZG91YmxlIHNxcnRsKGxvbmcgZG91YmxlIHgp OwoKNy4xMi44CQlFcnJvciBhbmQgZ2FtbWEgZnVuY3Rpb25zCgo3LjEyLjguMSBUaGUgZXJm IGZ1bmN0aW9ucwpTeW5vcHNpcwoJI2luY2x1ZGUgPG1hdGguaD4KCWRvdWJsZSBlcmYoZG91 YmxlIHgpOwoJZmxvYXQgZXJmZihmbG9hdCB4KTsKCWxvbmcgZG91YmxlIGVyZmwobG9uZyBk b3VibGUgeCk7Cgo3LjEyLjguMiBUaGUgZXJmYyBmdW5jdGlvbnMKU3lub3BzaXMKCSNpbmNs dWRlIDxtYXRoLmg+Cglkb3VibGUgZXJmYyhkb3VibGUgeCk7CglmbG9hdCBlcmZjZihmbG9h dCB4KTsKCWxvbmcgZG91YmxlIGVyZmNsKGxvbmcgZG91YmxlIHgpOwoKNy4xMi44LjMgVGhl IGxnYW1tYSBmdW5jdGlvbnMKU3lub3BzaXMKCSNpbmNsdWRlIDxtYXRoLmg+Cglkb3VibGUg bGdhbW1hKGRvdWJsZSB4KTsKCWZsb2F0IGxnYW1tYWYoZmxvYXQgeCk7Cglsb25nIGRvdWJs ZSBsZ2FtbWFsKGxvbmcgZG91YmxlIHgpOwoKNy4xMi44LjQgVGhlIHRnYW1tYSBmdW5jdGlv bnMKU3lub3BzaXMKCSNpbmNsdWRlIDxtYXRoLmg+Cglkb3VibGUgdGdhbW1hKGRvdWJsZSB4 KTsKCWZsb2F0IHRnYW1tYWYoZmxvYXQgeCk7Cglsb25nIGRvdWJsZSB0Z2FtbWFsKGxvbmcg ZG91YmxlIHgpOwoKNy4xMi45CQlOZWFyZXN0IGludGVnZXIgZnVuY3Rpb25zCgo3LjEyLjku MSBUaGUgY2VpbCBmdW5jdGlvbnMKU3lub3BzaXMKCSNpbmNsdWRlIDxtYXRoLmg+Cglkb3Vi bGUgY2VpbChkb3VibGUgeCk7CglmbG9hdCBjZWlsZihmbG9hdCB4KTsKCWxvbmcgZG91Ymxl IGNlaWxsKGxvbmcgZG91YmxlIHgpOwoKNy4xMi45LjIgVGhlIGZsb29yIGZ1bmN0aW9ucwpT eW5vcHNpcwoJI2luY2x1ZGUgPG1hdGguaD4KCWRvdWJsZSBmbG9vcihkb3VibGUgeCk7Cglm bG9hdCBmbG9vcmYoZmxvYXQgeCk7Cglsb25nIGRvdWJsZSBmbG9vcmwobG9uZyBkb3VibGUg eCk7Cgo3LjEyLjkuMyBUaGUgbmVhcmJ5aW50IGZ1bmN0aW9ucwpTeW5vcHNpcwoJI2luY2x1 ZGUgPG1hdGguaD4KCWRvdWJsZSBuZWFyYnlpbnQoZG91YmxlIHgpOwoJZmxvYXQgbmVhcmJ5 aW50ZihmbG9hdCB4KTsKCWxvbmcgZG91YmxlIG5lYXJieWludGwobG9uZyBkb3VibGUgeCk7 Cgo3LjEyLjkuNCBUaGUgcmludCBmdW5jdGlvbnMKU3lub3BzaXMKCSNpbmNsdWRlIDxtYXRo Lmg+Cglkb3VibGUgcmludChkb3VibGUgeCk7CglmbG9hdCByaW50ZihmbG9hdCB4KTsKCWxv bmcgZG91YmxlIHJpbnRsKGxvbmcgZG91YmxlIHgpOwoKNy4xMi45LjUgVGhlIGxyaW50IGFu ZCBsbHJpbnQgZnVuY3Rpb25zClN5bm9wc2lzCgkjaW5jbHVkZSA8bWF0aC5oPgoJbG9uZyBp bnQgbHJpbnQoZG91YmxlIHgpOwoJbG9uZyBpbnQgbHJpbnRmKGZsb2F0IHgpOwoJbG9uZyBp bnQgbHJpbnRsKGxvbmcgZG91YmxlIHgpOwoJbG9uZyBsb25nIGludCBsbHJpbnQoZG91Ymxl IHgpOwoJbG9uZyBsb25nIGludCBsbHJpbnRmKGZsb2F0IHgpOwoJbG9uZyBsb25nIGludCBs bHJpbnRsKGxvbmcgZG91YmxlIHgpOwoKNy4xMi45LjYgVGhlIHJvdW5kIGZ1bmN0aW9ucwpT eW5vcHNpcwoJI2luY2x1ZGUgPG1hdGguaD4KCWRvdWJsZSByb3VuZChkb3VibGUgeCk7Cglm bG9hdCByb3VuZGYoZmxvYXQgeCk7Cglsb25nIGRvdWJsZSByb3VuZGwobG9uZyBkb3VibGUg eCk7Cgo3LjEyLjkuNyBUaGUgbHJvdW5kIGFuZCBsbHJvdW5kIGZ1bmN0aW9ucwpTeW5vcHNp cwoJI2luY2x1ZGUgPG1hdGguaD4KCWxvbmcgaW50IGxyb3VuZChkb3VibGUgeCk7Cglsb25n IGludCBscm91bmRmKGZsb2F0IHgpOwoKNy4xMi45LjggVGhlIHRydW5jIGZ1bmN0aW9ucwpT eW5vcHNpcwoJI2luY2x1ZGUgPG1hdGguaD4KCWRvdWJsZSB0cnVuYyhkb3VibGUgeCk7Cglm bG9hdCB0cnVuY2YoZmxvYXQgeCk7Cglsb25nIGRvdWJsZSB0cnVuY2wobG9uZyBkb3VibGUg eCk7Cgo3LjEyLjEwCQlSZW1haW5kZXIgZnVuY3Rpb25zCgo3LjEyLjEwLjEgVGhlIGZtb2Qg ZnVuY3Rpb25zClN5bm9wc2lzCgkjaW5jbHVkZSA8bWF0aC5oPgoJZG91YmxlIGZtb2QoZG91 YmxlIHgsIGRvdWJsZSB5KTsKCWZsb2F0IGZtb2RmKGZsb2F0IHgsIGZsb2F0IHkpOwoJbG9u ZyBkb3VibGUgZm1vZGwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSk7Cgo3LjEyLjEw LjIgVGhlIHJlbWFpbmRlciBmdW5jdGlvbnMKU3lub3BzaXMKCSNpbmNsdWRlIDxtYXRoLmg+ Cglkb3VibGUgcmVtYWluZGVyKGRvdWJsZSB4LCBkb3VibGUgeSk7CglmbG9hdCByZW1haW5k ZXJmKGZsb2F0IHgsIGZsb2F0IHkpOwoJbG9uZyBkb3VibGUgcmVtYWluZGVybChsb25nIGRv dWJsZSB4LCBsb25nIGRvdWJsZSB5KTsKCjcuMTIuMTAuMyBUaGUgcmVtcXVvIGZ1bmN0aW9u cwpTeW5vcHNpcwoJI2luY2x1ZGUgPG1hdGguaD4KCWRvdWJsZSByZW1xdW8oZG91YmxlIHgs IGRvdWJsZSB5LCBpbnQgKnF1byk7CglmbG9hdCByZW1xdW9mKGZsb2F0IHgsIGZsb2F0IHks IGludCAqcXVvKTsKCWxvbmcgZG91YmxlIHJlbXF1b2wobG9uZyBkb3VibGUgeCwgbG9uZyBk b3VibGUgeSwgaW50ICpxdW8pOwoKNy4xMi4xMQkJTWFuaXB1bGF0aW9uIGZ1bmN0aW9ucwoK Ny4xMi4xMS4xIFRoZSBjb3B5c2lnbiBmdW5jdGlvbnMKU3lub3BzaXMKCSNpbmNsdWRlIDxt YXRoLmg+Cglkb3VibGUgY29weXNpZ24oZG91YmxlIHgsIGRvdWJsZSB5KTsKCWZsb2F0IGNv cHlzaWduZihmbG9hdCB4LCBmbG9hdCB5KTsKCWxvbmcgZG91YmxlIGNvcHlzaWdubChsb25n IGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KTsKCjcuMTIuMTEuMiBUaGUgbmFuIGZ1bmN0aW9u cwpTeW5vcHNpcwoJI2luY2x1ZGUgPG1hdGguaD4KCWRvdWJsZSBuYW4oY29uc3QgY2hhciAq dGFncCk7CglmbG9hdCBuYW5mKGNvbnN0IGNoYXIgKnRhZ3ApOwoJbG9uZyBkb3VibGUgbmFu bChjb25zdCBjaGFyICp0YWdwKTsKCjcuMTIuMTEuMyBUaGUgbmV4dGFmdGVyIGZ1bmN0aW9u cwpTeW5vcHNpcwoJI2luY2x1ZGUgPG1hdGguaD4KCWRvdWJsZSBuZXh0YWZ0ZXIoZG91Ymxl IHgsIGRvdWJsZSB5KTsKCWZsb2F0IG5leHRhZnRlcmYoZmxvYXQgeCwgZmxvYXQgeSk7Cgls b25nIGRvdWJsZSBuZXh0YWZ0ZXJsKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpOwoK Ny4xMi4xMS40IFRoZSBuZXh0dG93YXJkIGZ1bmN0aW9ucwpTeW5vcHNpcwoJI2luY2x1ZGUg PG1hdGguaD4KCWRvdWJsZSBuZXh0dG93YXJkKGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KTsK CWZsb2F0IG5leHR0b3dhcmRmKGZsb2F0IHgsIGxvbmcgZG91YmxlIHkpOwoJbG9uZyBkb3Vi bGUgbmV4dHRvd2FyZGwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSk7Cgo3LjEyLjEy CQlNYXhpbXVtLCBtaW5pbXVtLCBhbmQgcG9zaXRpdmUgZGlmZmVyZW5jZSBmdW5jdGlvbnMK CjcuMTIuMTIuMSBUaGUgZmRpbSBmdW5jdGlvbnMKU3lub3BzaXMKCSNpbmNsdWRlIDxtYXRo Lmg+Cglkb3VibGUgZmRpbShkb3VibGUgeCwgZG91YmxlIHkpOwoJZmxvYXQgZmRpbWYoZmxv YXQgeCwgZmxvYXQgeSk7Cglsb25nIGRvdWJsZSBmZGltbChsb25nIGRvdWJsZSB4LCBsb25n IGRvdWJsZSB5KTsKCjcuMTIuMTIuMiBUaGUgZm1heCBmdW5jdGlvbnMKU3lub3BzaXMKCSNp bmNsdWRlIDxtYXRoLmg+Cglkb3VibGUgZm1heChkb3VibGUgeCwgZG91YmxlIHkpOwoJZmxv YXQgZm1heGYoZmxvYXQgeCwgZmxvYXQgeSk7Cglsb25nIGRvdWJsZSBmbWF4bChsb25nIGRv dWJsZSB4LCBsb25nIGRvdWJsZSB5KTsKCjcuMTIuMTIuMyBUaGUgZm1pbiBmdW5jdGlvbnMK U3lub3BzaXMKCSNpbmNsdWRlIDxtYXRoLmg+Cglkb3VibGUgZm1pbihkb3VibGUgeCwgZG91 YmxlIHkpOwoJZmxvYXQgZm1pbmYoZmxvYXQgeCwgZmxvYXQgeSk7Cglsb25nIGRvdWJsZSBm bWlubChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KTsKCjcuMTIuMTMJCUZsb2F0aW5n IG11bHRpcGx5LWFkZAoKNy4xMi4xMy4xIFRoZSBmbWEgZnVuY3Rpb25zClN5bm9wc2lzCgkj aW5jbHVkZSA8bWF0aC5oPgoJZG91YmxlIGZtYShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJs ZSB6KTsKCWZsb2F0IGZtYWYoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeik7Cglsb25nIGRv dWJsZSBmbWFsKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHksIGxvbmcgZG91YmxlIHop OwoKNy4xMi4xNAkJQ29tcGFyaXNvbiBtYWNyb3MKCjcuMTIuMTQuMSBUaGUgaXNncmVhdGVy IG1hY3JvClN5bm9wc2lzCgkjaW5jbHVkZSA8bWF0aC5oPgoJaW50IGlzZ3JlYXRlcihyZWFs LWZsb2F0aW5nIHgsIHJlYWwtZmxvYXRpbmcgeSk7Cgo3LjEyLjE0LjIgVGhlIGlzZ3JlYXRl cmVxdWFsIG1hY3JvClN5bm9wc2lzCgkjaW5jbHVkZSA8bWF0aC5oPgoJaW50IGlzZ3JlYXRl cmVxdWFsKHJlYWwtZmxvYXRpbmcgeCwgcmVhbC1mbG9hdGluZyB5KTsKCjcuMTIuMTQuMyBU aGUgaXNsZXNzIG1hY3JvClN5bm9wc2lzCgkjaW5jbHVkZSA8bWF0aC5oPgoJaW50IGlzbGVz cyhyZWFsLWZsb2F0aW5nIHgsIHJlYWwtZmxvYXRpbmcgeSk7Cgo3LjEyLjE0LjQgVGhlIGlz bGVzc2VxdWFsIG1hY3JvClN5bm9wc2lzCgkjaW5jbHVkZSA8bWF0aC5oPgoJaW50IGlzbGVz c2VxdWFsKHJlYWwtZmxvYXRpbmcgeCwgcmVhbC1mbG9hdGluZyB5KTsKCjcuMTIuMTQuNSBU aGUgaXNsZXNzZ3JlYXRlciBtYWNybwpTeW5vcHNpcwoJI2luY2x1ZGUgPG1hdGguaD4KCWlu dCBpc2xlc3NncmVhdGVyKHJlYWwtZmxvYXRpbmcgeCwgcmVhbC1mbG9hdGluZyB5KTsKCjcu MTIuMTQuNiBUaGUgaXN1bm9yZGVyZWQgbWFjcm8KU3lub3BzaXMKCSNpbmNsdWRlIDxtYXRo Lmg+CglpbnQgaXN1bm9yZGVyZWQocmVhbC1mbG9hdGluZyB4LCByZWFsLWZsb2F0aW5nIHkp OwoK --------------5S9jaKU0LNo7renlSb0uiXIy--