public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* target/10286: type-punning doesn't work with __m64 and -O
@ 2003-04-01 17:36 mgw
  0 siblings, 0 replies; only message in thread
From: mgw @ 2003-04-01 17:36 UTC (permalink / raw)
  To: gcc-gnats


>Number:         10286
>Category:       target
>Synopsis:       type-punning doesn't work with __m64 and -O
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Apr 01 17:36:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     mgw@mac.com
>Release:        gcc-3.2.2
>Organization:
>Environment:
Mandrake Linux 9.1.1
>Description:
the following program (.i attached) prints:

44 33 22 11 00 00 00 00 44 33 22 11 00 00 00 00 44 33 22 11 00 00 00 00 

instead of the expected:

88 77 66 55 44 33 22 11 88 77 66 55 44 33 22 11 88 77 66 55 44 33 22 11 

the generated assembly uses a movd to fill in %mm0, leaving the upper 32-bits empty.

// gcc -O -mmmx -o set64 set64.c
#include <mmintrin.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

void
memset64(void *dst, uint32_t hi, uint32_t lo, size_t count)
{
        __m64 *p = (__m64 *)dst;
        __m64 fill = _mm_set_pi32(hi, lo);

        while (count--) {
                *p++ = fill;
        }
}

#define NUM 3 
int
main()
{
        uint8_t *buf = (uint8_t *)calloc(NUM * 2, sizeof(uint32_t));
        int i, count = NUM * 2 * sizeof(uint32_t);

        memset64(buf, 0x11223344, 0x55667788, NUM);
        for (i = 0; i < count; i++) {
                printf("%02x ", buf[i]);
        }
        printf("\n");
        return 0;
}
>How-To-Repeat:
run attached program built with -O -mmmx
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="set64.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="set64.i"

IyAxICJmaWxsbmV3LmMiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAx
ICJmaWxsbmV3LmMiCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdu
dS8zLjIuMi9pbmNsdWRlL21taW50cmluLmgiIDEgMwojIDM0ICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbW1pbnRyaW4uaCIgMwp0eXBlZGVm
IGludCBfX202NCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fVjJTSV9fKSkpOwoKCnR5cGVk
ZWYgaW50IF9fdjJzaSBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fVjJTSV9fKSkpOwp0eXBl
ZGVmIGludCBfX3Y0aGkgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1Y0SElfXykpKTsKdHlw
ZWRlZiBpbnQgX192OHFpIF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19WOFFJX18pKSk7CgoK
c3RhdGljIF9faW5saW5lIHZvaWQKX21tX2VtcHR5ICh2b2lkKQp7CiAgX19idWlsdGluX2lhMzJf
ZW1tcyAoKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fY3Z0c2kzMl9zaTY0IChpbnQg
X19pKQp7CiAgbG9uZyBsb25nIF9fdG1wID0gKHVuc2lnbmVkIGludClfX2k7CiAgcmV0dXJuIChf
X202NCkgX190bXA7Cn0KCgpzdGF0aWMgX19pbmxpbmUgaW50Cl9tbV9jdnRzaTY0X3NpMzIgKF9f
bTY0IF9faSkKewogIGxvbmcgbG9uZyBfX3RtcCA9IChsb25nIGxvbmcpX19pOwogIHJldHVybiBf
X3RtcDsKfQoKCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9wYWNrc19waTE2IChfX202NCBf
X20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGFja3Nz
d2IgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKfQoKCgoKc3RhdGljIF9faW5saW5lIF9f
bTY0Cl9tbV9wYWNrc19waTMyIChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChf
X202NCkgX19idWlsdGluX2lhMzJfcGFja3NzZHcgKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20y
KTsKfQoKCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9wYWNrc19wdTE2IChfX202NCBfX20x
LCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGFja3Vzd2Ig
KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQK
X21tX3VucGFja2hpX3BpOCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19t
NjQpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2hidyAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIp
Owp9CgoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fdW5wYWNraGlfcGkxNiAoX19tNjQgX19t
MSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2h3
ZCAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBfX202
NApfbW1fdW5wYWNraGlfcGkzMiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAo
X19tNjQpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2hkcSAoKF9fdjJzaSlfX20xLCAoX192MnNpKV9f
bTIpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fdW5wYWNrbG9fcGk4IChfX202NCBf
X20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHVucGNr
bGJ3ICgoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9f
bTY0Cl9tbV91bnBhY2tsb19waTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJu
IChfX202NCkgX19idWlsdGluX2lhMzJfcHVucGNrbHdkICgoX192NGhpKV9fbTEsIChfX3Y0aGkp
X19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV91bnBhY2tsb19waTMyIChfX202
NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHVu
cGNrbGRxICgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cn0KCgpzdGF0aWMgX19pbmxpbmUg
X19tNjQKX21tX2FkZF9waTggKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9f
bTY0KSBfX2J1aWx0aW5faWEzMl9wYWRkYiAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOwp9
CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9hZGRfcGkxNiAoX19tNjQgX19tMSwgX19tNjQg
X19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BhZGR3ICgoX192NGhpKV9f
bTEsIChfX3Y0aGkpX19tMik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX2FkZF9waTMy
IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lh
MzJfcGFkZGQgKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKfQoKCgpzdGF0aWMgX19pbmxp
bmUgX19tNjQKX21tX2FkZHNfcGk4IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJu
IChfX202NCkgX19idWlsdGluX2lhMzJfcGFkZHNiICgoX192OHFpKV9fbTEsIChfX3Y4cWkpX19t
Mik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9hZGRzX3BpMTYgKF9fbTY0IF9fbTEs
IF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wYWRkc3cgKChf
X3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21t
X2FkZHNfcHU4IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19i
dWlsdGluX2lhMzJfcGFkZHVzYiAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOwp9CgoKCnN0
YXRpYyBfX2lubGluZSBfX202NApfbW1fYWRkc19wdTE2IChfX202NCBfX20xLCBfX202NCBfX20y
KQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGFkZHVzdyAoKF9fdjRoaSlfX20x
LCAoX192NGhpKV9fbTIpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zdWJfcGk4IChf
X202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJf
cHN1YmIgKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKfQoKCnN0YXRpYyBfX2lubGluZSBf
X202NApfbW1fc3ViX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9f
bTY0KSBfX2J1aWx0aW5faWEzMl9wc3VidyAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOwp9
CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zdWJfcGkzMiAoX19tNjQgX19tMSwgX19tNjQg
X19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzdWJkICgoX192MnNpKV9f
bTEsIChfX3Yyc2kpX19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zdWJzX3Bp
OCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9p
YTMyX3BzdWJzYiAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOwp9CgoKCnN0YXRpYyBfX2lu
bGluZSBfX202NApfbW1fc3Vic19waTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0
dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHN1YnN3ICgoX192NGhpKV9fbTEsIChfX3Y0aGkp
X19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zdWJzX3B1OCAoX19tNjQgX19t
MSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2Ig
KChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQK
X21tX3N1YnNfcHUxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQp
IF9fYnVpbHRpbl9pYTMyX3BzdWJ1c3cgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKfQoK
CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9tYWRkX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0
IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wbWFkZHdkICgoX192NGhp
KV9fbTEsIChfX3Y0aGkpX19tMik7Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9tdWxo
aV9waTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWls
dGluX2lhMzJfcG11bGh3ICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cn0KCgoKc3RhdGlj
IF9faW5saW5lIF9fbTY0Cl9tbV9tdWxsb19waTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQp7
CiAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcG11bGx3ICgoX192NGhpKV9fbTEsIChf
X3Y0aGkpX19tMik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3NsbF9waTE2IChfX202
NCBfX20sIF9fbTY0IF9fY291bnQpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9w
c2xsdyAoKF9fdjRoaSlfX20sIChsb25nIGxvbmcpX19jb3VudCk7Cn0KCnN0YXRpYyBfX2lubGlu
ZSBfX202NApfbW1fc2xsaV9waTE2IChfX202NCBfX20sIGludCBfX2NvdW50KQp7CiAgcmV0dXJu
IChfX202NCkgX19idWlsdGluX2lhMzJfcHNsbHcgKChfX3Y0aGkpX19tLCBfX2NvdW50KTsKfQoK
CnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc2xsX3BpMzIgKF9fbTY0IF9fbSwgX19tNjQgX19j
b3VudCkKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzbGxkICgoX192MnNpKV9f
bSwgKGxvbmcgbG9uZylfX2NvdW50KTsKfQoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zbGxp
X3BpMzIgKF9fbTY0IF9fbSwgaW50IF9fY291bnQpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0
aW5faWEzMl9wc2xsZCAoKF9fdjJzaSlfX20sIF9fY291bnQpOwp9CgoKc3RhdGljIF9faW5saW5l
IF9fbTY0Cl9tbV9zbGxfc2k2NCAoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQp7CiAgcmV0dXJu
IChfX202NCkgX19idWlsdGluX2lhMzJfcHNsbHEgKChsb25nIGxvbmcpX19tLCAobG9uZyBsb25n
KV9fY291bnQpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3NsbGlfc2k2NCAoX19tNjQg
X19tLCBpbnQgX19jb3VudCkKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzbGxx
ICgobG9uZyBsb25nKV9fbSwgKGxvbmcgbG9uZylfX2NvdW50KTsKfQoKCnN0YXRpYyBfX2lubGlu
ZSBfX202NApfbW1fc3JhX3BpMTYgKF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKewogIHJldHVy
biAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzcmF3ICgoX192NGhpKV9fbSwgKGxvbmcgbG9uZylf
X2NvdW50KTsKfQoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zcmFpX3BpMTYgKF9fbTY0IF9f
bSwgaW50IF9fY291bnQpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc3JhdyAo
KF9fdjRoaSlfX20sIF9fY291bnQpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zcmFf
cGkzMiAoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQp7CiAgcmV0dXJuIChfX202NCkgX19idWls
dGluX2lhMzJfcHNyYWQgKChfX3Yyc2kpX19tLCAobG9uZyBsb25nKV9fY291bnQpOwp9CgpzdGF0
aWMgX19pbmxpbmUgX19tNjQKX21tX3NyYWlfcGkzMiAoX19tNjQgX19tLCBpbnQgX19jb3VudCkK
ewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzcmFkICgoX192MnNpKV9fbSwgX19j
b3VudCk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3NybF9waTE2IChfX202NCBfX20s
IF9fbTY0IF9fY291bnQpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc3JsdyAo
KF9fdjRoaSlfX20sIChsb25nIGxvbmcpX19jb3VudCk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX202
NApfbW1fc3JsaV9waTE2IChfX202NCBfX20sIGludCBfX2NvdW50KQp7CiAgcmV0dXJuIChfX202
NCkgX19idWlsdGluX2lhMzJfcHNybHcgKChfX3Y0aGkpX19tLCBfX2NvdW50KTsKfQoKCnN0YXRp
YyBfX2lubGluZSBfX202NApfbW1fc3JsX3BpMzIgKF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkK
ewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzcmxkICgoX192MnNpKV9fbSwgKGxv
bmcgbG9uZylfX2NvdW50KTsKfQoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zcmxpX3BpMzIg
KF9fbTY0IF9fbSwgaW50IF9fY291bnQpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEz
Ml9wc3JsZCAoKF9fdjJzaSlfX20sIF9fY291bnQpOwp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0
Cl9tbV9zcmxfc2k2NCAoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQp7CiAgcmV0dXJuIChfX202
NCkgX19idWlsdGluX2lhMzJfcHNybHEgKChsb25nIGxvbmcpX19tLCAobG9uZyBsb25nKV9fY291
bnQpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX3NybGlfc2k2NCAoX19tNjQgX19tLCBp
bnQgX19jb3VudCkKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzcmxxICgobG9u
ZyBsb25nKV9fbSwgKGxvbmcgbG9uZylfX2NvdW50KTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202
NApfbW1fYW5kX3NpNjQgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0
KSBfX2J1aWx0aW5faWEzMl9wYW5kICgobG9uZyBsb25nKV9fbTEsIChsb25nIGxvbmcpX19tMik7
Cn0KCgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9hbmRub3Rfc2k2NCAoX19tNjQgX19tMSwg
X19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BhbmRuICgobG9u
ZyBsb25nKV9fbTEsIChsb25nIGxvbmcpX19tMik7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQK
X21tX29yX3NpNjQgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KV9f
YnVpbHRpbl9pYTMyX3BvciAoKGxvbmcgbG9uZylfX20xLCAobG9uZyBsb25nKV9fbTIpOwp9CgoK
c3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV94b3Jfc2k2NCAoX19tNjQgX19tMSwgX19tNjQgX19t
MikKewogIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHhvciAoKGxvbmcgbG9uZylfX20x
LCAobG9uZyBsb25nKV9fbTIpOwp9CgoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fY21wZXFf
cGk4IChfX202NCBfX20xLCBfX202NCBfX20yKQp7CiAgcmV0dXJuIChfX202NCkgX19idWlsdGlu
X2lhMzJfcGNtcGVxYiAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOwp9CgpzdGF0aWMgX19p
bmxpbmUgX19tNjQKX21tX2NtcGd0X3BpOCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJl
dHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BjbXBndGIgKChfX3Y4cWkpX19tMSwgKF9fdjhx
aSlfX20yKTsKfQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX2NtcGVxX3BpMTYgKF9fbTY0
IF9fbTEsIF9fbTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wY21w
ZXF3ICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX202
NApfbW1fY21wZ3RfcGkxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19t
NjQpIF9fYnVpbHRpbl9pYTMyX3BjbXBndHcgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsK
fQoKCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21tX2NtcGVxX3BpMzIgKF9fbTY0IF9fbTEsIF9f
bTY0IF9fbTIpCnsKICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wY21wZXFkICgoX192
MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cn0KCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fY21w
Z3RfcGkzMiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKewogIHJldHVybiAoX19tNjQpIF9fYnVp
bHRpbl9pYTMyX3BjbXBndGQgKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKfQoKCnN0YXRp
YyBfX2lubGluZSBfX202NApfbW1fc2V0emVyb19zaTY0ICh2b2lkKQp7CiAgcmV0dXJuIChfX202
NClfX2J1aWx0aW5faWEzMl9tbXhfemVybyAoKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202NApf
bW1fc2V0X3BpMzIgKGludCBfX2kxLCBpbnQgX19pMCkKewogIHVuaW9uIHsKICAgIF9fbTY0IF9f
cTsKICAgIHN0cnVjdCB7CiAgICAgIHVuc2lnbmVkIGludCBfX2kwOwogICAgICB1bnNpZ25lZCBp
bnQgX19pMTsKICAgIH0gX19zOwogIH0gX191OwoKICBfX3UuX19zLl9faTAgPSBfX2kwOwogIF9f
dS5fX3MuX19pMSA9IF9faTE7CgogIHJldHVybiBfX3UuX19xOwp9CgoKc3RhdGljIF9faW5saW5l
IF9fbTY0Cl9tbV9zZXRfcGkxNiAoc2hvcnQgX193Mywgc2hvcnQgX193Miwgc2hvcnQgX193MSwg
c2hvcnQgX193MCkKewogIHVuc2lnbmVkIGludCBfX2kxID0gKHVuc2lnbmVkIHNob3J0KV9fdzMg
PDwgMTYgfCAodW5zaWduZWQgc2hvcnQpX193MjsKICB1bnNpZ25lZCBpbnQgX19pMCA9ICh1bnNp
Z25lZCBzaG9ydClfX3cxIDw8IDE2IHwgKHVuc2lnbmVkIHNob3J0KV9fdzA7CiAgcmV0dXJuIF9t
bV9zZXRfcGkzMiAoX19pMSwgX19pMCk7Cgp9CgoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9z
ZXRfcGk4IChjaGFyIF9fYjcsIGNoYXIgX19iNiwgY2hhciBfX2I1LCBjaGFyIF9fYjQsCiAgICAg
ICAgICAgICBjaGFyIF9fYjMsIGNoYXIgX19iMiwgY2hhciBfX2IxLCBjaGFyIF9fYjApCnsKICB1
bnNpZ25lZCBpbnQgX19pMSwgX19pMDsKCiAgX19pMSA9ICh1bnNpZ25lZCBjaGFyKV9fYjc7CiAg
X19pMSA9IF9faTEgPDwgOCB8ICh1bnNpZ25lZCBjaGFyKV9fYjY7CiAgX19pMSA9IF9faTEgPDwg
OCB8ICh1bnNpZ25lZCBjaGFyKV9fYjU7CiAgX19pMSA9IF9faTEgPDwgOCB8ICh1bnNpZ25lZCBj
aGFyKV9fYjQ7CgogIF9faTAgPSAodW5zaWduZWQgY2hhcilfX2IzOwogIF9faTAgPSBfX2kwIDw8
IDggfCAodW5zaWduZWQgY2hhcilfX2IyOwogIF9faTAgPSBfX2kwIDw8IDggfCAodW5zaWduZWQg
Y2hhcilfX2IxOwogIF9faTAgPSBfX2kwIDw8IDggfCAodW5zaWduZWQgY2hhcilfX2IwOwoKICBy
ZXR1cm4gX21tX3NldF9waTMyIChfX2kxLCBfX2kwKTsKfQoKCnN0YXRpYyBfX2lubGluZSBfX202
NApfbW1fc2V0cl9waTMyIChpbnQgX19pMCwgaW50IF9faTEpCnsKICByZXR1cm4gX21tX3NldF9w
aTMyIChfX2kxLCBfX2kwKTsKfQoKc3RhdGljIF9faW5saW5lIF9fbTY0Cl9tbV9zZXRyX3BpMTYg
KHNob3J0IF9fdzAsIHNob3J0IF9fdzEsIHNob3J0IF9fdzIsIHNob3J0IF9fdzMpCnsKICByZXR1
cm4gX21tX3NldF9waTE2IChfX3czLCBfX3cyLCBfX3cxLCBfX3cwKTsKfQoKc3RhdGljIF9faW5s
aW5lIF9fbTY0Cl9tbV9zZXRyX3BpOCAoY2hhciBfX2IwLCBjaGFyIF9fYjEsIGNoYXIgX19iMiwg
Y2hhciBfX2IzLAogICAgICAgICAgICAgIGNoYXIgX19iNCwgY2hhciBfX2I1LCBjaGFyIF9fYjYs
IGNoYXIgX19iNykKewogIHJldHVybiBfbW1fc2V0X3BpOCAoX19iNywgX19iNiwgX19iNSwgX19i
NCwgX19iMywgX19iMiwgX19iMSwgX19iMCk7Cn0KCgpzdGF0aWMgX19pbmxpbmUgX19tNjQKX21t
X3NldDFfcGkzMiAoaW50IF9faSkKewogIHJldHVybiBfbW1fc2V0X3BpMzIgKF9faSwgX19pKTsK
fQoKCnN0YXRpYyBfX2lubGluZSBfX202NApfbW1fc2V0MV9waTE2IChzaG9ydCBfX3cpCnsKICB1
bnNpZ25lZCBpbnQgX19pID0gKHVuc2lnbmVkIHNob3J0KV9fdyA8PCAxNiB8ICh1bnNpZ25lZCBz
aG9ydClfX3c7CiAgcmV0dXJuIF9tbV9zZXQxX3BpMzIgKF9faSk7Cn0KCgpzdGF0aWMgX19pbmxp
bmUgX19tNjQKX21tX3NldDFfcGk4IChjaGFyIF9fYikKewogIHVuc2lnbmVkIGludCBfX3cgPSAo
dW5zaWduZWQgY2hhcilfX2IgPDwgOCB8ICh1bnNpZ25lZCBjaGFyKV9fYjsKICB1bnNpZ25lZCBp
bnQgX19pID0gX193IDw8IDE2IHwgX193OwogIHJldHVybiBfbW1fc2V0MV9waTMyIChfX2kpOwp9
CiMgMiAiZmlsbG5ldy5jIiAyCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxp
bnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDM3ICIvdXNyL2xpYi9nY2MtbGli
L2k1ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOTEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyOTIgIi91c3IvaW5jbHVk
ZS9mZWF0dXJlcy5oIiAyIDMKIyAzMTQgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMTUgIi91c3IvaW5jbHVkZS9mZWF0dXJl
cy5oIiAyIDMKIyAzOCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8z
LjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2
LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMTMgIi91
c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRk
ZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgNDQgIi91c3IvbGliL2djYy1s
aWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAyIDMKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9iaXRz
L3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyOSAi
L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMyICIv
dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191
X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3VfbG9uZzsKCgp0
eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50
OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNp
Z25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYg
bG9uZyBsb25nIGludCBfX3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgbG9uZyBpbnQgX191X3F1YWRfdDsKIyAxMjggIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlc2l6ZXMuaCIgMSAzCiMgMTI5ICIvdXNyL2lu
Y2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
X19kZXZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgX19naWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2lub190Owp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbm82NF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX21v
ZGVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9f
b2ZmX3Q7CnR5cGVkZWYgbG9uZyBsb25nIGludCBfX29mZjY0X3Q7CnR5cGVkZWYgaW50IF9fcGlk
X3Q7CnR5cGVkZWYgc3RydWN0IHsgaW50IF9fdmFsWzJdOyB9IF9fZnNpZF90Owp0eXBlZGVmIGxv
bmcgaW50IF9fY2xvY2tfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3JsaW1fdDsKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fcmxpbTY0X3Q7CnR5cGVkZWYgdW5zaWduZWQg
aW50IF9faWRfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7Cgp0eXBlZGVm
IGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190Owp0eXBlZGVmIGludCBf
X2tleV90OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJf
dDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBf
X2Jsa2NudF90Owp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBpbnQgX19mc2Jsa2NudF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2ZzZmls
Y250X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2ZzZmlsY250NjRfdDsKCgoK
CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX29mZjY0X3QgX19sb2ZmX3Q7CnR5cGVk
ZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CgoKdHlwZWRl
ZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKIyA0
NiAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRl
L3N0ZGlvLmgiIDIgMwoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwoKCgoK
CiMgNzEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMy4yLjIvaW5j
bHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKIyA4MSAiL3Vz
ci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlv
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9s
aWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyAxNCAiL3Vzci9p
bmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtl
LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMjUgIi91c3IvbGliL2dj
Yy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0
eXBlZGVmIGxvbmcgaW50IHdjaGFyX3Q7CiMgMzU0ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu
ZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIv
dXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAz
CiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2
LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAx
IDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDcxICIvdXNyL2luY2x1ZGUvd2No
YXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3
aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRl
X3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7
CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlw
ZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9
IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoj
IDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMy4yLjIvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vz
ci9pbmNsdWRlL2djb252LmgiIDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRy
YWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNs
dWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZf
Tk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZ
X0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAog
IF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1Is
CiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1Qg
PSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBf
X2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9h
ZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpf
X2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9k
YXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg
KiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIHdpbnRfdCAo
Kl9fZ2NvbnZfYnRvd2NfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCB1bnNpZ25lZCBjaGFy
KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVw
ICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVw
ICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZf
c3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZf
c3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252
X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBj
aGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNf
cXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpf
X2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2
b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3Ry
YW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3Ry
YW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRf
ZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJh
bnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19n
Y29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9k
bmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190
b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2J0b3djX2ZjdCBfX2J0b3dj
X2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9f
ZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9m
cm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGlu
dCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBf
ZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRi
dWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoK
CgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJz
dGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsK
fTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAg
c3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2dj
b252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRl
L19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBf
X2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVj
dCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7
Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9f
KSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19T
SV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19h
dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJp
by5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2xpYi9nY2Mt
bGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwoj
IDQzICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1
ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsK
IyA1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2MiAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzIgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9f
bWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpf
c2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTUgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoK
ZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRp
YWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKIyAyNjMgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAg
Y2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVh
ZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAg
Y2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1
Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwog
IGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBz
dHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CgoKCiAgaW50IF9mbGFnczI7
CgogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47
CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAg
X0lPX2xvY2tfdCAqX2xvY2s7CiMgMzExICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2Zm
NjRfdCBfb2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50
IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAo
dm9pZCAqKV07Cgp9OwoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9JT19GSUxFOwoKCnN0cnVj
dCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rk
aW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4g
c3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM1MCAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tp
ZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVf
dCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVm
IGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQg
X193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CiMgNDAy
ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklM
RSAqKSA7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9fb3Zl
cmZsb3cgKF9JT19GSUxFICosIGludCkgOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAoX0lP
X0ZJTEUgKikgOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiB3
aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgOwojIDQzMiAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0
ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBf
SU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklM
RSAqX19mcCkgOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkg
OwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIDsKZXh0ZXJuIHZv
aWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2Nr
ZmlsZSAoX0lPX0ZJTEUgKikgOwojIDQ2MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJu
IGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19y
ZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19y
ZXN0cmljdCkgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3Qs
IGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNf
dmFfbGlzdCkgOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9f
c3NpemVfdCkgOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBz
aXplX3QpIDsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2Zm
NjRfdCwgaW50LCBpbnQpIDsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUg
KiwgX19vZmY2NF90LCBpbnQpIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChf
SU9fRklMRSAqKSA7CiMgODIgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1n
bnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA5NSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2
LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKCgp0eXBlZGVmIF9H
X2Zwb3NfdCBmcG9zX3Q7CgoKCgojIDE0NyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtl
LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9zdGRpb19saW0uaCIgMSAzCiMgMTQ4ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2Ut
bGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCmV4dGVybiBzdHJ1Y3QgX0lP
X0ZJTEUgKnN0ZGluOwpleHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRvdXQ7CmV4dGVybiBzdHJ1
Y3QgX0lPX0ZJTEUgKnN0ZGVycjsKCgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNo
YXIgKl9fZmlsZW5hbWUpIDsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xk
LCBfX2NvbnN0IGNoYXIgKl9fbmV3KSA7CgoKCgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lk
KSA7CiMgMTgwICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4y
L2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIDsKCiMg
MTkwICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1
ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgOwojIDIwMiAi
L3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0
ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29u
c3QgY2hhciAqX19wZngpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpl
eHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmZsdXNoIChG
SUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9f
c3RyZWFtKSA7CiMgMjI1ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251
LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX21vZGVzKSA7CgpleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgIEZJTEUg
Kl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKIyAyNDggIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5k
cmFrZS1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgojIDI1OSAiL3Vzci9saWIv
Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMK
ZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgOwoj
IDI4MCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNs
dWRlL3N0ZGlvLmgiIDMKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAo
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAg
ICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgOwoKCgoKCmV4dGVybiB2b2lk
IHNldGJ1ZmZlciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBf
X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zaXplKSA7CgoKZXh0ZXJuIHZv
aWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gaW50IGZwcmludGYg
KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBzcHJpbnRm
IChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUg
Kl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAg
ICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSA7CgpleHRlcm4gaW50IHZwcmlu
dGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19h
cmcpCiAgICAgOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19n
bnVjX3ZhX2xpc3QgX19hcmcpIDsKCgoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19m
b3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykK
ICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCiMg
MzU4ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1
ZGUvc3RkaW8uaCIgMwoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LCAuLi4pIDsKCmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h
dCwgLi4uKSA7CgojIDM4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdu
dS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKCgpleHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0
cmVhbSkgOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBn
ZXRjaGFyICh2b2lkKSA7CgoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpf
X3N0cmVhbSkgOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIDsKCgoKCmV4dGVy
biBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgoKZXh0ZXJuIGludCBm
cHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19j
LCBGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgOwoKCgoK
CgoKCmV4dGVybiBpbnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7
CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7
CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgOwoKCgoKCmV4dGVybiBpbnQg
Z2V0dyAoRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUg
Kl9fc3RyZWFtKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICA7CgoKCmV4dGVybiBj
aGFyICpnZXRzIChjaGFyICpfX3MpIDsKCiMgNDg0ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu
ZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwoKCmV4dGVybiBpbnQgZnB1
dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pCiAgICAgOwoKCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpIDsKCgoKZXh0
ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBzaXpl
X3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCmV4
dGVybiBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVf
dCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3Ry
aWN0IF9fcykgOwoKIyA1MTMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1n
bnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQg
KHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKZXh0
ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0
ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gaW50IGZzZWVrIChG
SUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgOwoKZXh0ZXJuIGxv
bmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxF
ICpfX3N0cmVhbSkgOwoKIyA1NTMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51
eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIDsK
CmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3Bv
cykgOwojIDU3MiAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIu
Mi9pbmNsdWRlL3N0ZGlvLmgiIDMKCiMgNTgyICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh
a2UtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwoKCmV4dGVybiB2b2lkIGNsZWFy
ZXJyIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkg
OwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gdm9pZCBj
bGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBmZW9mX3VubG9j
a2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAq
X19zdHJlYW0pIDsKCgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSA7
CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3lzX2Vycmxpc3QuaCIgMSAzCiMgMjcgIi91
c3IvaW5jbHVkZS9iaXRzL3N5c19lcnJsaXN0LmgiIDMKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0
ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwojIDYwOSAiL3Vzci9saWIv
Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDIg
MwoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50
IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBv
cGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSA7CgoK
ZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0
ZXJtaWQgKGNoYXIgKl9fcykgOwojIDY2MiAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtl
LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgZmxvY2tmaWxl
IChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19z
dHJlYW0pIDsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIDsKIyA2
ODMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMy4yLjIvaW5jbHVk
ZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMSAzCiMgMzMgIi91
c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDMKZXh0ZXJuIF9faW5saW5lIGludAp2cHJpbnRmIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQp7CiAg
cmV0dXJuIHZmcHJpbnRmIChzdGRvdXQsIF9fZm10LCBfX2FyZyk7Cn0KCgpleHRlcm4gX19pbmxp
bmUgaW50CmdldGNoYXIgKHZvaWQpCnsKICByZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoK
ZXh0ZXJuIF9faW5saW5lIGludApnZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKQp7CiAgcmV0dXJu
ICgoX19mcCktPl9JT19yZWFkX3B0ciA+PSAoX19mcCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cg
KF9fZnApIDogKih1bnNpZ25lZCBjaGFyICopIChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoK
ZXh0ZXJuIF9faW5saW5lIGludApnZXRjaGFyX3VubG9ja2VkICh2b2lkKQp7CiAgcmV0dXJuICgo
c3RkaW4pLT5fSU9fcmVhZF9wdHIgPj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAo
c3RkaW4pIDogKih1bnNpZ25lZCBjaGFyICopIChzdGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoK
CgoKZXh0ZXJuIF9faW5saW5lIGludApwdXRjaGFyIChpbnQgX19jKQp7CiAgcmV0dXJuIF9JT19w
dXRjIChfX2MsIHN0ZG91dCk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBpbnQKZnB1dGNfdW5sb2Nr
ZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lP
X3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9f
c3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3Ry
ZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmV4dGVybiBfX2lubGluZSBp
bnQKcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgo
X19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8g
X19vdmVyZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQg
Y2hhcikgKCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKZXh0ZXJu
IF9faW5saW5lIGludApwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKQp7CiAgcmV0dXJuICgoKHN0
ZG91dCktPl9JT193cml0ZV9wdHIgPj0gKHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVy
ZmxvdyAoc3Rkb3V0LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgq
KHN0ZG91dCktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KIyAxMTEgIi91c3IvaW5jbHVk
ZS9iaXRzL3N0ZGlvLmgiIDMKZXh0ZXJuIF9faW5saW5lIGludApmZW9mX3VubG9ja2VkIChGSUxF
ICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDAp
Owp9CgoKZXh0ZXJuIF9faW5saW5lIGludApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFt
KQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2ODQg
Ii91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9z
dGRpby5oIiAyIDMKCgoKIyAzICJmaWxsbmV3LmMiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2xpYi9nY2Mt
bGliL2k1ODYtbWFuZHJha2UtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj
IDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiMgOTMgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMwoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwog
IH0gZGl2X3Q7CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxv
bmcgaW50IHJlbTsKICB9IGxkaXZfdDsKCgoKIyAxMzcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MwpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIDsKCgoKCmV4dGVy
biBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpf
X25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCl9fZXh0ZW5zaW9uX18gZXh0
ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIpIDsKCiMgMTc0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgpl
eHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f
YmFzZSkgOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCgpfX2V4dGVuc2lv
bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u
ZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBs
b25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f
YmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0
b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i
YXNlKQogICAgIDsKCiMgMjY0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRvdWJs
ZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2dyb3VwKQogICAgIDsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICA7CmV4dGVy
biBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19ncm91cCkgOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCmV4dGVybiB1bnNpZ25l
ZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgoKX19leHRlbnNpb25fXwpl
eHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKX19leHRlbnNpb25fXwpl
eHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2NvbnN0
IGNoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dy
b3VwKQogICAgIDsKCgoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpCnsK
ICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVy
biBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpCnsKICBy
ZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0K
ZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBp
bnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0
ciwgX19iYXNlLCAwKTsKfQoKIyAzNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpfX2V4dGVu
c2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg
aW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw
dHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQg
bG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVy
biBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoK
CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19u
cHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu
ZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3Ry
aWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICBpbnQgX19i
YXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9f
YmFzZSwgMCk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFy
ICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikw
KSk7Cn0KZXh0ZXJuIF9faW5saW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewog
IHJldHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7
Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7
CiAgcmV0dXJuIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQoK
CgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAoX19j
b25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikg
KCh2b2lkICopMCksIDEwKTsKfQoKIyA0MDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRl
cm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9f
Y29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91c3Iv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
MwoKCgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9y
dDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRl
ZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBf
X2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBf
X2lub190IGlub190OwojIDYyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBf
X2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21v
ZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBf
X3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKIyAxMDAgIi91c3IvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0eXBlZGVmIF9f
aWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVmIF9f
ZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVkZWYg
X19rZXlfdCBrZXlfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDc0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKdHlw
ZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CgoKCiMgOTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlw
ZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgMTA0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz
CnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTM0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDIgMwojIDE0NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9saWIv
Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAx
IDMKIyAxNDggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxOTEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
Mwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7
CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7
CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7
CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7
CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1
X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIGlu
dCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CiMgMjEz
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgi
IDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMjE0ICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl
Y3QuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi
IDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDIzICIvdXNyL2lu
Y2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5
cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAq
IHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsKIyAzNSAiL3Vz
ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRf
dDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDExOCAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBs
b25nIGludCB0dl9uc2VjOwogIH07CiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIg
MwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUv
Yml0cy90aW1lLmgiIDMKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAg
ICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl
Y3QuaCIgMiAzCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCnR5cGVk
ZWYgbG9uZyBpbnQgX19mZF9tYXNrOwojIDY3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAz
CnR5cGVkZWYgc3RydWN0CiAgewoKCgoKCgogICAgX19mZF9tYXNrIF9fZmRzX2JpdHNbMTAyNCAv
ICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBf
X2ZkX21hc2sgZmRfbWFzazsKIyA5OSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwoKCgoK
CgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3Jl
YWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywK
ICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgOwojIDEy
MiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwoKIyAyMTcgIi91c3IvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAy
MjAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCiMgMjMxICIvdXNyL2luY2x1ZGUvc3lz
L3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNi
bGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90Owoj
IDI2NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
cHRocmVhZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDgzICIvdXNyL2luY2x1
ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2No
ZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi
IDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAg
aW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1
Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MK
ewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3Nj
aGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2Nv
cGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAq
X19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgoK
Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgX19wdGhyZWFkX2NvbmRfYWxpZ25fdDsK
CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7
CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7CiAgY2hhciBfX3BhZGRpbmdbNDggLSBzaXpl
b2YgKHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jaykKICAgICAgICAgICAgICAgICAtIHNpemVvZiAo
X3B0aHJlYWRfZGVzY3IpIC0gc2l6ZW9mIChfX3B0aHJlYWRfY29uZF9hbGlnbl90KV07CiAgX19w
dGhyZWFkX2NvbmRfYWxpZ25fdCBfX2FsaWduOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVm
IHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYg
dW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBf
X21fcmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7
CiAgaW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBw
dGhyZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0g
cHRocmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CiMgMTUw
ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgaW50IHB0aHJlYWRfdDsKIyAyNjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoK
CiMgNDE1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgpleHRlcm4gbG9uZyBpbnQg
cmFuZG9tICh2b2lkKSA7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2Vl
ZCkgOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNo
YXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVu
KSA7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgOwoKCgoKCgoK
c3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJw
dHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9k
ZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4g
aW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCmV4dGVybiBp
bnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9f
YnVmKSA7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFy
ICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9f
cmVzdHJpY3QgX19idWYpIDsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmlj
dCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAq
X19yZXN0cmljdCBfX2J1ZikgOwoKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIDsKCmV4dGVy
biB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSA7CgoKCgpleHRlcm4gaW50IHJhbmRf
ciAodW5zaWduZWQgaW50ICpfX3NlZWQpIDsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAo
dm9pZCkgOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp
WzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50
IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcg
aW50IG1yYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNo
b3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19z
ZWVkdmFsKSA7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hv
cnQgaW50IF9fc2VlZDE2dlszXSkgOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9y
dCBpbnQgX19wYXJhbVs3XSkgOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNp
Z25lZCBzaG9ydCBpbnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107
CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5p
dDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFu
ZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBl
cmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQg
bHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAg
ICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJu
IGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAg
ICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0
ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm
ZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkg
OwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm
ZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQp
IDsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJh
bmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICA7CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJh
bmQ0OF9kYXRhICpfX2J1ZmZlcikgOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNo
b3J0IGludCBfX3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf
ZGF0YSAqX19idWZmZXIpIDsKCgoKCgoKCgoKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9f
c2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2Mg
KHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIF9fYXR0cmlidXRlX18gKChfX21h
bGxvY19fKSk7CgoKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVf
dCBfX3NpemUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVl
ICh2b2lkICpfX3B0cikgOwoKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSA7CgoK
CiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9j
YS5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LWdudS8zLjIu
Mi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMK
CgoKCgoKCmV4dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIDsKCgoKCgoKIyA1Nzcg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXpl
X3QgX19zaXplKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDU5MCAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAzCgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIF9fYXR0cmlidXRlX18g
KChfX25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2
b2lkKSkgOwoKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0
YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICA7CgoKCgoKCmV4dGVybiB2b2lk
IGV4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKIyA2
MjIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29u
c3QgY2hhciAqX19uYW1lKSA7CgoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2Nv
bnN0IGNoYXIgKl9fbmFtZSkgOwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmlu
ZykgOwoKCgoKCmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25z
dCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAgIDsKCgpleHRlcm4gaW50IHVuc2V0
ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgoKCgpleHRlcm4gaW50IGNsZWFyZW52ICh2
b2lkKSA7CiMgNjYxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rdGVt
cCAoY2hhciAqX190ZW1wbGF0ZSkgOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpf
X3RlbXBsYXRlKSA7CiMgNjg4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIg
Km1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19j
b25zdCBjaGFyICpfX2NvbW1hbmQpIDsKCiMgNzEyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK
ZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgOwoKCgoK
Cgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2
b2lkICopOwoKCgoKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tl
eSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19u
bWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2
b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAog
ICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQg
YWJzIChpbnQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGlu
dCBsYWJzIChsb25nIGludCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoK
CgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKQogICAgIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBf
X251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCiMgNzc2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRv
dWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAg
ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwoKCgoKZXh0ZXJuIGNoYXIg
KmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2Rl
Y3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwoKCgoKZXh0
ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVm
KSA7CgoKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpf
X3Jlc3RyaWN0IF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19k
ZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcg
ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBp
bnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3Qg
X19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIg
Kl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIDsKZXh0
ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0
cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwg
Y2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikg
OwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
CiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0
cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwg
c2l6ZV90IF9fbGVuKSA7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0
LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz
dHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgOwoKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19j
b25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJf
dCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19z
LCB3Y2hhcl90IF9fd2NoYXIpIDsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAq
X19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIDsKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNo
YXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQogICAgIDsKCgoKCgoKCgpleHRlcm4g
aW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgOwojIDkwOCAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1td
LCBpbnQgX19uZWxlbSkgOwoKCgoKCgojIDQgImZpbGxuZXcuYyIgMgojIDEgIi91c3IvaW5jbHVk
ZS9zdGRpbnQuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc3RkaW50Lmgi
IDIgMwojIDQ5ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBjaGFy
IHVpbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVpbnQxNl90OwoKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgdWludDMyX3Q7CgoKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgdWludDY0X3Q7CgoKCgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50X2xl
YXN0OF90Owp0eXBlZGVmIHNob3J0IGludCBpbnRfbGVhc3QxNl90Owp0eXBlZGVmIGludCBpbnRf
bGVhc3QzMl90OwoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRfbGVh
c3Q2NF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9sZWFzdDhfdDsKdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBpbnQgdWludF9sZWFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVp
bnRfbGVhc3QzMl90OwoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25n
IGludCB1aW50X2xlYXN0NjRfdDsKCgoKCgoKdHlwZWRlZiBzaWduZWQgY2hhciBpbnRfZmFzdDhf
dDsKCgoKCgp0eXBlZGVmIGludCBpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgaW50IGludF9mYXN0MzJf
dDsKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50X2Zhc3Q2NF90OwoKCgp0
eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9mYXN0OF90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQg
aW50IHVpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfZmFzdDMyX3Q7Cl9f
ZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRfZmFzdDY0X3Q7
CiMgMTI2ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKdHlwZWRlZiBpbnQgaW50cHRyX3Q7CgoK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludHB0cl90OwojIDEzOCAiL3Vzci9pbmNsdWRlL3N0ZGlu
dC5oIiAzCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50IGludG1heF90OwpfX2V4
dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50bWF4X3Q7CiMgNSAi
ZmlsbG5ldy5jIiAyCgp2b2lkCm1lbXNldDY0KHZvaWQgKmRzdCwgdWludDMyX3QgaGksIHVpbnQz
Ml90IGxvLCBzaXplX3QgY291bnQpCnsKICAgICAgICBfX202NCAqcCA9IChfX202NCAqKWRzdDsK
ICAgICAgICBfX202NCBmaWxsID0gX21tX3NldF9waTMyKGhpLCBsbyk7CgogICAgICAgIHdoaWxl
IChjb3VudC0tKSB7CiAgICAgICAgICAgICAgICAqcCsrID0gZmlsbDsKICAgICAgICB9Cn0KCgpp
bnQKbWFpbigpCnsKICAgICAgICB1aW50OF90ICpidWYgPSAodWludDhfdCAqKWNhbGxvYygzICog
Miwgc2l6ZW9mKHVpbnQzMl90KSk7CiAgICAgICAgaW50IGksIGNvdW50ID0gc2l6ZW9mKHVpbnQz
Ml90KSAqIDMgKiAyOwoKICAgICAgICBtZW1zZXQ2NChidWYsIDB4MTEyMjMzNDQsIDB4NTU2Njc3
ODgsIDMpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICAg
ICAgICBwcmludGYoIiUwMnggIiwgYnVmW2ldKTsKICAgICAgICB9CiAgICAgICAgcHJpbnRmKCJc
biIpOwogICAgICAgIHJldHVybiAwOwp9Cg==


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-04-01 17:36 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-04-01 17:36 target/10286: type-punning doesn't work with __m64 and -O mgw

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).