Subject: Re: rarpd stops listening
To: =?iso-8859-1?Q?P=E5llen?= <pollen@astrakan.hig.se>
From: David Brownlee <abs@netbsd.org>
List: tech-net
Date: 02/10/2000 19:13:00
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--0-98428806-950209980=:22416
Content-Type: TEXT/PLAIN; charset=X-UNKNOWN
Content-Transfer-Encoding: QUOTED-PRINTABLE

=09Switching this to tech-net.

=09The story so far: rarpd stops answering requests. Its present
=09in 1.3, 1.4 and -current, and P=E5llen is testing a rarpd with
=09extra debug.

=09I expected it to die - I'd just added extra debug to try to
=09help determine where.
=09Interestingly this appears to read a second packet, get into
=09rarp_check() but never exit that loop. I'm pretty certain it
=09should be getting into rarp_process(), and maybe rarp_reply().

=09Apologies for this tortuous process - another rarpd with updated
=09debugging attached.

=09Hopefully with this one we should be able to work out where its
=09going awry...

=09=09David/absolute

On Thu, 10 Feb 2000, [iso-8859-1] P=E5llen wrote:

> Even this one dies...
>=20
> DBG exit select
> DBG data received on ne0
> DBG read 60
> got a packet


--0-98428806-950209980=:22416
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="rarpd.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.NEB.4.21.0002101913000.22416@oblivion.mono.org>
Content-Description: 
Content-Disposition: attachment; filename="rarpd.c"

LyoJJE5ldEJTRDogcmFycGQuYyx2IDEuMzUgMjAwMC8wMi8wNyAwMToxNTo1
MiBuYXRoYW53IEV4cCAkCSovDQoNCi8qDQogKiBDb3B5cmlnaHQgKGMpIDE5
OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p
YS4NCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogKg0KICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0DQogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdDogKDEpIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbnMN
CiAqIHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp
cyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5LCAoMikNCiAqIGRpc3RyaWJ1
dGlvbnMgaW5jbHVkaW5nIGJpbmFyeSBjb2RlIGluY2x1ZGUgdGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UgYW5kDQogKiB0aGlzIHBhcmFncmFwaCBpbiBp
dHMgZW50aXJldHkgaW4gdGhlIGRvY3VtZW50YXRpb24gb3Igb3RoZXIgbWF0
ZXJpYWxzDQogKiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFu
ZCAoMykgYWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nDQog
KiBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBkaXNwbGF5IHRo
ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50Og0KICogYGBUaGlzIHByb2R1
Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJz
aXR5IG9mIENhbGlmb3JuaWEsDQogKiBMYXdyZW5jZSBCZXJrZWxleSBMYWJv
cmF0b3J5IGFuZCBpdHMgY29udHJpYnV0b3JzLicnIE5laXRoZXIgdGhlIG5h
bWUgb2YNCiAqIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlDQogKiBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3INCiAqIHdyaXR0ZW4gcGVybWlzc2lvbi4N
CiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBX
SVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQNCiAqIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GDQogKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLg0KICovDQojaW5jbHVkZSA8c3lz
L2NkZWZzLmg+DQojaWZuZGVmIGxpbnQNCl9fQ09QWVJJR0hUKA0KICAgICJA
KCMpIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5p
dmVyc2l0eSBvZiBDYWxpZm9ybmlhLlxuXA0KIEFsbCByaWdodHMgcmVzZXJ2
ZWQuXG4iKTsNCiNlbmRpZiAvKiBub3QgbGludCAqLw0KDQojaWZuZGVmIGxp
bnQNCl9fUkNTSUQoIiROZXRCU0Q6IHJhcnBkLmMsdiAxLjM1IDIwMDAvMDIv
MDcgMDE6MTU6NTIgbmF0aGFudyBFeHAgJCIpOw0KI2VuZGlmDQoNCg0KLyoN
CiAqIHJhcnBkIC0gUmV2ZXJzZSBBUlAgRGFlbW9uDQogKg0KICogVXNhZ2U6
CXJhcnBkIC1hIFstZHwtZl0gWy1sXQ0KICoJCXJhcnBkIFstZHwtZl0gWy1s
XSBpbnRlcmZhY2UNCiAqLw0KDQojaW5jbHVkZSA8c3lzL3BhcmFtLmg+DQoj
aW5jbHVkZSA8c3lzL2ZpbGUuaD4NCiNpbmNsdWRlIDxzeXMvdGltZS5oPg0K
I2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiNpbmNsdWRlIDxzeXMvaW9jdGwu
aD4NCg0KI2luY2x1ZGUgPG5ldC9icGYuaD4NCiNpbmNsdWRlIDxuZXQvaWYu
aD4NCiNpbmNsdWRlIDxuZXQvaWZfZGwuaD4NCiNpZmRlZiBfX05ldEJTRF9f
DQojaW5jbHVkZSA8bmV0L2lmX2V0aGVyLmg+DQojZW5kaWYNCiNpbmNsdWRl
IDxuZXQvaWZfdHlwZXMuaD4NCiNpbmNsdWRlIDxuZXRpbmV0L2luLmg+DQoj
aWZkZWYgX19OZXRCU0RfXw0KI2luY2x1ZGUgPG5ldGluZXQvaWZfaW5hcnAu
aD4NCiNlbHNlDQojaW5jbHVkZSA8bmV0aW5ldC9pZl9ldGhlci5oPg0KI2Vu
ZGlmDQoNCiNpbmNsdWRlIDxhcnBhL2luZXQuaD4NCg0KI2luY2x1ZGUgPGVy
cm5vLmg+DQojaW5jbHVkZSA8ZGlyZW50Lmg+DQojaW5jbHVkZSA8bmV0ZGIu
aD4NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0K
I2luY2x1ZGUgPHN0cmluZy5oPg0KI2luY2x1ZGUgPHN5c2xvZy5oPg0KI2lu
Y2x1ZGUgPHVuaXN0ZC5oPg0KI2luY2x1ZGUgPHV0aWwuaD4NCg0KI2RlZmlu
ZSBGQVRBTAkJMQkvKiBmYXRhbCBlcnJvciBvY2N1cnJlZCAqLw0KI2RlZmlu
ZSBOT05GQVRBTAkwCS8qIG5vbiBmYXRhbCBlcnJvciBvY2N1cnJlZCAqLw0K
DQovKg0KICogVGhlIHN0cnVjdHVyZSBmb3IgZWFjaCBpbnRlcmZhY2UuDQog
Ki8NCnN0cnVjdCBpZl9pbmZvIHsNCglpbnQgICAgIGlpX2ZkOwkJLyogQlBG
IGZpbGUgZGVzY3JpcHRvciAqLw0KCXVfY2hhciAgaWlfZWFkZHJbNl07CS8q
IEV0aGVybmV0IGFkZHJlc3Mgb2YgdGhpcyBpbnRlcmZhY2UgKi8NCgl1X2lu
dDMyX3QgIGlpX2lwYWRkcjsJLyogSVAgYWRkcmVzcyBvZiB0aGlzIGludGVy
ZmFjZSAqLw0KCXVfaW50MzJfdCAgaWlfbmV0bWFzazsJLyogc3VibmV0IG9y
IG5ldCBtYXNrICovDQoJY2hhcgkqaWlfbmFtZTsJLyogaW50ZXJmYWNlIG5h
bWUgKi8NCglzdHJ1Y3QgaWZfaW5mbyAqaWlfYWxpYXM7DQoJc3RydWN0IGlm
X2luZm8gKmlpX25leHQ7DQp9Ow0KLyoNCiAqIFRoZSBsaXN0IG9mIGFsbCBp
bnRlcmZhY2VzIHRoYXQgYXJlIGJlaW5nIGxpc3RlbmVkIHRvLiAgcmFycF9s
b29wKCkNCiAqICJzZWxlY3RzIiBvbiB0aGUgZGVzY3JpcHRvcnMgaW4gdGhp
cyBsaXN0Lg0KICovDQpzdHJ1Y3QgaWZfaW5mbyAqaWZsaXN0Ow0KDQp1X2lu
dDMyX3QgY2hvb3NlX2lwYWRkciBfX1AoKHVfaW50MzJfdCAqKiwgdV9pbnQz
Ml90LCB1X2ludDMyX3QpKTsNCnZvaWQJZGVidWcgX19QKChjb25zdCBjaGFy
ICosLi4uKSk7DQp2b2lkCWluaXRfYWxsIF9fUCgodm9pZCkpOw0Kdm9pZAlp
bml0X29uZSBfX1AoKGNoYXIgKiwgdV9pbnQzMl90KSk7DQp1X2ludDMyX3QJ
aXBhZGRydG9uZXRtYXNrIF9fUCgodV9pbnQzMl90KSk7DQp2b2lkCWxvb2t1
cF9lYWRkciBfX1AoKGNoYXIgKiwgdV9jaGFyICopKTsNCnZvaWQJbG9va3Vw
X2lwYWRkciBfX1AoKGNoYXIgKiwgdV9pbnQzMl90ICosIHVfaW50MzJfdCAq
KSk7DQppbnQJbWFpbiBfX1AoKGludCwgY2hhciAqKikpOw0Kdm9pZAlyYXJw
X2xvb3AgX19QKCh2b2lkKSk7DQppbnQJcmFycF9vcGVuIF9fUCgoY2hhciAq
KSk7DQp2b2lkCXJhcnBfcHJvY2VzcyBfX1AoKHN0cnVjdCBpZl9pbmZvICos
IHVfY2hhciAqKSk7DQp2b2lkCXJhcnBfcmVwbHkgX19QKChzdHJ1Y3QgaWZf
aW5mbyAqLCBzdHJ1Y3QgZXRoZXJfaGVhZGVyICosIHVfaW50MzJfdCwNCgkJ
CXN0cnVjdCBob3N0ZW50ICopKTsNCnZvaWQJcmFycGVyciBfX1AoKGludCwg
Y29uc3QgY2hhciAqLC4uLikpOw0KDQojaWYgZGVmaW5lZChfX05ldEJTRF9f
KQ0KI2luY2x1ZGUgIm1rYXJwLmgiDQojZWxzZQ0Kdm9pZAl1cGRhdGVfYXJw
dGFiIF9fUCgodV9jaGFyICosIHVfaW50MzJfdCkpOw0KI2VuZGlmDQoNCnZv
aWQJdXNhZ2UgX19QKCh2b2lkKSk7DQoNCnN0YXRpYyBpbnQJYnBmX29wZW4g
X19QKCh2b2lkKSk7DQpzdGF0aWMgaW50CXJhcnBfY2hlY2sgX19QKCh1X2No
YXIgKiwgaW50KSk7DQoNCiNpZmRlZiBSRVFVSVJFX1RGVFBCT09UDQppbnQJ
cmFycF9ib290YWJsZSBfX1AoKHVfaW50MzJfdCkpOw0KI2VuZGlmDQoNCmlu
dCAgICAgYWZsYWcgPSAwOwkJLyogbGlzdGVuIG9uICJhbGwiIGludGVyZmFj
ZXMgICovDQppbnQgICAgIGRmbGFnID0gMDsJCS8qIHByaW50IGRlYnVnZ2lu
ZyBtZXNzYWdlcyAqLw0KaW50ICAgICBmZmxhZyA9IDA7CQkvKiBkb24ndCBm
b3JrICovDQppbnQJbGZsYWcgPSAwOwkJLyogbG9nIGFsbCByZXBsaWVzICov
DQoNCmludA0KbWFpbihhcmdjLCBhcmd2KQ0KCWludCAgICAgYXJnYzsNCglj
aGFyICAqKmFyZ3Y7DQp7DQoJZXh0ZXJuIGNoYXIgKl9fcHJvZ25hbWU7DQoN
CglpbnQgICAgIG9wOw0KCWNoYXIgICAqaWZuYW1lLCAqaG9zdG5hbWU7DQoN
CgkvKiBEQkcgKi8NCglkZmxhZyA9IDE7DQoNCgkvKiBBbGwgZXJyb3IgcmVw
b3J0aW5nIGlzIGRvbmUgdGhyb3VnaCBzeXNsb2dzLiAqLw0KCW9wZW5sb2co
X19wcm9nbmFtZSwgTE9HX1BJRCwgTE9HX0RBRU1PTik7DQoNCglvcHRlcnIg
PSAwOw0KCXdoaWxlICgob3AgPSBnZXRvcHQoYXJnYywgYXJndiwgImFkZmwi
KSkgIT0gLTEpIHsNCgkJc3dpdGNoIChvcCkgew0KCQljYXNlICdhJzoNCgkJ
CSsrYWZsYWc7DQoJCQlicmVhazsNCg0KCQljYXNlICdkJzoNCgkJCSsrZGZs
YWc7DQoJCQlicmVhazsNCg0KCQljYXNlICdmJzoNCgkJCSsrZmZsYWc7DQoJ
CQlicmVhazsNCg0KCQljYXNlICdsJzoNCgkJCSsrbGZsYWc7DQoJCQlicmVh
azsNCg0KCQlkZWZhdWx0Og0KCQkJdXNhZ2UoKTsNCgkJCS8qIE5PVFJFQUNI
RUQgKi8NCgkJfQ0KCX0NCglpZm5hbWUgPSBhcmd2W29wdGluZCsrXTsNCglo
b3N0bmFtZSA9IGlmbmFtZSA/IGFyZ3Zbb3B0aW5kXSA6IDA7DQoJaWYgKChh
ZmxhZyAmJiBpZm5hbWUpIHx8ICghYWZsYWcgJiYgaWZuYW1lID09IDApKQ0K
CQl1c2FnZSgpOw0KDQoJaWYgKGFmbGFnKQ0KCQlpbml0X2FsbCgpOw0KCWVs
c2UNCgkJaW5pdF9vbmUoaWZuYW1lLCBJTkFERFJfQU5ZKTsNCg0KCWlmICgo
IWZmbGFnKSAmJiAoIWRmbGFnKSkgew0KCQlpZiAoZGFlbW9uKDAsIDApKQ0K
CQkJcmFycGVycihGQVRBTCwgImRhZW1vbiIpOw0KCQkvKiBEQkcgcGlkZmls
ZShOVUxMKTsgKi8NCgl9DQoJcmFycF9sb29wKCk7DQoJLyogTk9UUkVBQ0hF
RCAqLw0KCXJldHVybiAoMCk7DQp9DQoNCi8qDQogKiBBZGQgJ2lmbmFtZScg
dG8gdGhlIGludGVyZmFjZSBsaXN0LiAgTG9va3VwIGl0cyBJUCBhZGRyZXNz
IGFuZCBuZXR3b3JrDQogKiBtYXNrIGFuZCBFdGhlcm5ldCBhZGRyZXNzLCBh
bmQgb3BlbiBhIEJQRiBmaWxlIGZvciBpdC4NCiAqLw0Kdm9pZA0KaW5pdF9v
bmUoaWZuYW1lLCBpcGFkZHIpDQoJY2hhciAgICppZm5hbWU7DQoJdV9pbnQz
Ml90IGlwYWRkcjsNCnsNCglzdHJ1Y3QgaWZfaW5mbyAqaDsNCglzdHJ1Y3Qg
aWZfaW5mbyAqcDsNCglpbnQgZmQ7DQoNCglmb3IgKGggPSBpZmxpc3Q7IGgg
IT0gTlVMTDsgaCA9IGgtPmlpX25leHQpIHsNCgkJaWYgKCFzdHJjbXAoaC0+
aWlfbmFtZSwgaWZuYW1lKSkNCgkJCWJyZWFrOw0KCX0NCglpZiAoaCA9PSBO
VUxMKSB7DQoJCWZkID0gcmFycF9vcGVuKGlmbmFtZSk7DQoJCWlmIChmZCA8
IDApDQoJCQlyZXR1cm47DQoJfSBlbHNlIHsNCgkJZmQgPSBoLT5paV9mZDsN
Cgl9DQoNCglwID0gKHN0cnVjdCBpZl9pbmZvICopbWFsbG9jKHNpemVvZigq
cCkpOw0KCWlmIChwID09IDApIHsNCgkJcmFycGVycihGQVRBTCwgIm1hbGxv
YzogJXMiLCBzdHJlcnJvcihlcnJubykpOw0KCQkvKiBOT1RSRUFDSEVEICov
DQoJfQ0KCXAtPmlpX25hbWUgPSBzdHJkdXAoaWZuYW1lKTsNCglpZiAocC0+
aWlfbmFtZSA9PSAwKSB7DQoJCXJhcnBlcnIoRkFUQUwsICJtYWxsb2M6ICVz
Iiwgc3RyZXJyb3IoZXJybm8pKTsNCgkJLyogTk9UUkVBQ0hFRCAqLw0KCX0N
CglpZiAoaCAhPSBOVUxMKSB7DQoJCXAtPmlpX2FsaWFzID0gaC0+aWlfYWxp
YXM7DQoJCWgtPmlpX2FsaWFzID0gcDsNCgl9IGVsc2Ugew0KCQlwLT5paV9u
ZXh0ID0gaWZsaXN0Ow0KCQlpZmxpc3QgPSBwOw0KCX0NCg0KCXAtPmlpX2Zk
ID0gZmQ7DQoJcC0+aWlfaXBhZGRyID0gaXBhZGRyOw0KCWxvb2t1cF9lYWRk
cihpZm5hbWUsIHAtPmlpX2VhZGRyKTsNCglsb29rdXBfaXBhZGRyKGlmbmFt
ZSwgJnAtPmlpX2lwYWRkciwgJnAtPmlpX25ldG1hc2spOw0KfQ0KDQovKg0K
ICogSW5pdGlhbGl6ZSBhbGwgImNhbmRpZGF0ZSIgaW50ZXJmYWNlcyB0aGF0
IGFyZSBpbiB0aGUgc3lzdGVtDQogKiBjb25maWd1cmF0aW9uIGxpc3QuICBB
ICJjYW5kaWRhdGUiIGlzIHVwLCBub3QgbG9vcGJhY2sgYW5kIG5vdA0KICog
cG9pbnQgdG8gcG9pbnQuDQogKi8NCnZvaWQNCmluaXRfYWxsKCkNCnsNCglj
aGFyIGluYnVmWzgxOTIqMl07DQoJc3RydWN0IGlmY29uZiBpZmM7DQoJc3Ry
dWN0IGlmcmVxIGlmcmVxLCBpZnJkLCAqaWZyLCAqaWZycDsNCglpbnQgZmQ7
DQoJaW50IGksIGxlbjsNCg0KCWlmICgoZmQgPSBzb2NrZXQoQUZfSU5FVCwg
U09DS19ER1JBTSwgMCkpIDwgMCkgew0KCQlyYXJwZXJyKEZBVEFMLCAic29j
a2V0OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7DQoJCS8qIE5PVFJFQUNIRUQg
Ki8NCgl9DQoNCglpZmMuaWZjX2xlbiA9IHNpemVvZihpbmJ1Zik7DQoJaWZj
LmlmY19idWYgPSBpbmJ1ZjsNCglpZiAoaW9jdGwoZmQsIFNJT0NHSUZDT05G
LCAoY2FkZHJfdCkmaWZjKSA8IDAgfHwNCgkgICAgaWZjLmlmY19sZW4gPCBz
aXplb2Yoc3RydWN0IGlmcmVxKSkgew0KCQlyYXJwZXJyKEZBVEFMLCAiaW5p
dF9hbGw6IFNJT0NHSUZDT05GOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7DQoJ
CS8qIE5PVFJFQUNIRUQgKi8NCgl9DQoJaWZyID0gJmlmcmQ7DQoJaWZycCA9
IGlmYy5pZmNfcmVxOw0KCWlmcmVxLmlmcl9uYW1lWzBdID0gJ1wwJzsNCglm
b3IgKGkgPSAwOyBpIDwgaWZjLmlmY19sZW47DQoJICAgICBpICs9IGxlbiwg
aWZycCA9IChzdHJ1Y3QgaWZyZXEgKikoKGNhZGRyX3QpaWZycCArIGxlbikp
IHsNCiNkZWZpbmUgU0lOKHMpCSgoc3RydWN0IHNvY2thZGRyX2luICopIChz
KSkNCgkJbWVtY3B5KCZpZnJkLCBpZnJwLCBzaXplb2YgKGlmcmQpKTsNCgkJ
bGVuID0gc2l6ZW9mKGlmci0+aWZyX25hbWUpICsgaWZyLT5pZnJfYWRkci5z
YV9sZW47DQoJCWlmIChpZnItPmlmcl9hZGRyLnNhX2ZhbWlseSAhPSBBRl9J
TkVUKQ0KCQkJY29udGludWU7DQoJCWlmICghc3RybmNtcChpZnJlcS5pZnJf
bmFtZSwgaWZyLT5pZnJfbmFtZSwgc2l6ZW9mKGlmci0+aWZyX25hbWUpKQ0K
CQkgICAgJiYgU0lOKCZpZnJlcS5pZnJfYWRkciktPnNpbl9hZGRyLnNfYWRk
ciA9PSBTSU4oJmlmci0+aWZyX2FkZHIpLT5zaW5fYWRkci5zX2FkZHIpDQoJ
CQljb250aW51ZTsNCgkJaWZyZXEgPSAqaWZyOw0KCQlpZiAoaW9jdGwoZmQs
IFNJT0NHSUZGTEFHUywgKGNhZGRyX3QpaWZyKSA8IDApIHsNCgkJCXJhcnBl
cnIoRkFUQUwsICJpbml0X2FsbDogU0lPQ0dJRkZMQUdTOiAlcyIsDQoJCQkg
ICAgc3RyZXJyb3IoZXJybm8pKTsNCgkJCS8qIE5PVFJFQUNIRUQgKi8NCgkJ
fQ0KCQlpZiAoKGlmci0+aWZyX2ZsYWdzICYNCgkJICAgIChJRkZfVVAgfCBJ
RkZfTE9PUEJBQ0sgfCBJRkZfUE9JTlRPUE9JTlQpKSAhPSBJRkZfVVApDQoJ
CQljb250aW51ZTsNCgkJaW5pdF9vbmUoaWZyLT5pZnJfbmFtZSwgU0lOKCZp
ZnJlcS5pZnJfYWRkciktPnNpbl9hZGRyLnNfYWRkcik7DQojdW5kZWYJU0lO
DQoJfQ0KCSh2b2lkKWNsb3NlKGZkKTsNCn0NCg0Kdm9pZA0KdXNhZ2UoKQ0K
ew0KCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiByYXJwZCAtYSBb
LWR8LWZdIFstbF1cbiIpOw0KCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIiAg
ICAgICByYXJwZCBbLWR8LWZdIFstbF0gaW50ZXJmYWNlXG4iKTsNCglleGl0
KDEpOw0KfQ0KDQpzdGF0aWMgaW50DQpicGZfb3BlbigpDQp7DQoJaW50ICAg
ICBmZDsNCglpbnQgICAgIG4gPSAwOw0KCWNoYXIgICAgZGV2aWNlW3NpemVv
ZiAiL2Rldi9icGYwMDAiXTsNCg0KCS8qIEdvIHRocm91Z2ggYWxsIHRoZSBt
aW5vcnMgYW5kIGZpbmQgb25lIHRoYXQgaXNuJ3QgaW4gdXNlLiAqLw0KCWRv
IHsNCgkJKHZvaWQpc3ByaW50ZihkZXZpY2UsICIvZGV2L2JwZiVkIiwgbisr
KTsNCgkJZmQgPSBvcGVuKGRldmljZSwgT19SRFdSKTsNCgl9IHdoaWxlIChm
ZCA8IDAgJiYgZXJybm8gPT0gRUJVU1kpOw0KDQoJaWYgKGZkIDwgMCkgew0K
CQlyYXJwZXJyKEZBVEFMLCAiJXM6ICVzIiwgZGV2aWNlLCBzdHJlcnJvcihl
cnJubykpOw0KCQkvKiBOT1RSRUFDSEVEICovDQoJfQ0KCXJldHVybiBmZDsN
Cn0NCi8qDQogKiBPcGVuIGEgQlBGIGZpbGUgYW5kIGF0dGFjaCBpdCB0byB0
aGUgaW50ZXJmYWNlIG5hbWVkICdkZXZpY2UnLg0KICogU2V0IGltbWVkaWF0
ZSBtb2RlLCBhbmQgc2V0IGEgZmlsdGVyIHRoYXQgYWNjZXB0cyBvbmx5IFJB
UlAgcmVxdWVzdHMuDQogKi8NCmludA0KcmFycF9vcGVuKGRldmljZSkNCglj
aGFyICAgKmRldmljZTsNCnsNCglpbnQgICAgIGZkOw0KCXN0cnVjdCBpZnJl
cSBpZnI7DQoJdV9pbnQgICBkbHQ7DQoJaW50ICAgICBpbW1lZGlhdGU7DQoN
CglzdGF0aWMgc3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7DQoJCUJQRl9T
VE1UKEJQRl9MRCB8IEJQRl9IIHwgQlBGX0FCUywgMTIpLA0KCQlCUEZfSlVN
UChCUEZfSk1QIHwgQlBGX0pFUSB8IEJQRl9LLCBFVEhFUlRZUEVfUkVWQVJQ
LCAwLCAzKSwNCgkJQlBGX1NUTVQoQlBGX0xEIHwgQlBGX0ggfCBCUEZfQUJT
LCAyMCksDQoJCUJQRl9KVU1QKEJQRl9KTVAgfCBCUEZfSkVRIHwgQlBGX0ss
IEFSUE9QX1JFVlJFUVVFU1QsIDAsIDEpLA0KCQlCUEZfU1RNVChCUEZfUkVU
IHwgQlBGX0ssIA0KCQkgICAgc2l6ZW9mKHN0cnVjdCBhcnBoZHIpICsgDQoJ
CSAgICAyICogRVRIRVJfQUREUl9MRU4gKyAyICogc2l6ZW9mKHN0cnVjdCBp
bl9hZGRyKSArDQoJCSAgICBzaXplb2Yoc3RydWN0IGV0aGVyX2hlYWRlcikp
LA0KCQlCUEZfU1RNVChCUEZfUkVUIHwgQlBGX0ssIDApLA0KCX07DQoJc3Rh
dGljIHN0cnVjdCBicGZfcHJvZ3JhbSBmaWx0ZXIgPSB7DQoJCXNpemVvZiBp
bnNucyAvIHNpemVvZihpbnNuc1swXSksDQoJCWluc25zDQoJfTsNCg0KCWZk
ID0gYnBmX29wZW4oKTsNCg0KCS8qIFNldCBpbW1lZGlhdGUgbW9kZSBzbyBw
YWNrZXRzIGFyZSBwcm9jZXNzZWQgYXMgdGhleSBhcnJpdmUuICovDQoJaW1t
ZWRpYXRlID0gMTsNCglpZiAoaW9jdGwoZmQsIEJJT0NJTU1FRElBVEUsICZp
bW1lZGlhdGUpIDwgMCkgew0KCQlyYXJwZXJyKEZBVEFMLCAiQklPQ0lNTUVE
SUFURTogJXMiLCBzdHJlcnJvcihlcnJubykpOw0KCQkvKiBOT1RSRUFDSEVE
ICovDQoJfQ0KCSh2b2lkKXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBkZXZpY2Us
IHNpemVvZiBpZnIuaWZyX25hbWUgLSAxKTsNCglpZnIuaWZyX25hbWVbc2l6
ZW9mIGlmci5pZnJfbmFtZSAtIDFdID0gJ1wwJzsNCglpZiAoaW9jdGwoZmQs
IEJJT0NTRVRJRiwgKGNhZGRyX3QpICYgaWZyKSA8IDApIHsNCgkJaWYgKGFm
bGFnKSB7CS8qIGZvciAtYSBza2lwIG5vbi1ldGhlcm5ldCBpbnRlcmZhY2Vz
ICovDQoJCQljbG9zZShmZCk7DQoJCQlyZXR1cm4oLTEpOw0KCQl9DQoJCXJh
cnBlcnIoRkFUQUwsICJCSU9DU0VUSUY6ICVzIiwgc3RyZXJyb3IoZXJybm8p
KTsNCgkJLyogTk9UUkVBQ0hFRCAqLw0KCX0NCgkvKiBDaGVjayB0aGF0IHRo
ZSBkYXRhIGxpbmsgbGF5ZXIgaXMgYW4gRXRoZXJuZXQ7IHRoaXMgY29kZSB3
b24ndCB3b3JrDQoJICogd2l0aCBhbnl0aGluZyBlbHNlLiAqLw0KCWlmIChp
b2N0bChmZCwgQklPQ0dETFQsIChjYWRkcl90KSAmIGRsdCkgPCAwKSB7DQoJ
CXJhcnBlcnIoRkFUQUwsICJCSU9DR0RMVDogJXMiLCBzdHJlcnJvcihlcnJu
bykpOw0KCQkvKiBOT1RSRUFDSEVEICovDQoJfQ0KCWlmIChkbHQgIT0gRExU
X0VOMTBNQikgew0KCQlpZiAoYWZsYWcpIHsJLyogZm9yIC1hIHNraXAgbm9u
LWV0aGVybmV0IGludGVyZmFjZXMgKi8NCgkJCWNsb3NlKGZkKTsNCgkJCXJl
dHVybigtMSk7DQoJCX0NCgkJcmFycGVycihGQVRBTCwgIiVzIGlzIG5vdCBh
biBldGhlcm5ldCIsIGRldmljZSk7DQoJCS8qIE5PVFJFQUNIRUQgKi8NCgl9
DQoJLyogU2V0IGZpbHRlciBwcm9ncmFtLiAqLw0KCWlmIChpb2N0bChmZCwg
QklPQ1NFVEYsIChjYWRkcl90KSAmIGZpbHRlcikgPCAwKSB7DQoJCXJhcnBl
cnIoRkFUQUwsICJCSU9DU0VURjogJXMiLCBzdHJlcnJvcihlcnJubykpOw0K
CQkvKiBOT1RSRUFDSEVEICovDQoJfQ0KCXJldHVybiBmZDsNCn0NCi8qDQog
KiBQZXJmb3JtIHZhcmlvdXMgc2FuaXR5IGNoZWNrcyBvbiB0aGUgUkFSUCBy
ZXF1ZXN0IHBhY2tldC4gIFJldHVybg0KICogZmFsc2Ugb24gZmFpbHVyZSBh
bmQgbG9nIHRoZSByZWFzb24uDQogKi8NCnN0YXRpYyBpbnQNCnJhcnBfY2hl
Y2socCwgbGVuKQ0KCXVfY2hhciAqcDsNCglpbnQgICAgIGxlbjsNCnsNCglz
dHJ1Y3QgZXRoZXJfaGVhZGVyICplcCA9IChzdHJ1Y3QgZXRoZXJfaGVhZGVy
ICopIHA7DQojaWZkZWYgX19OZXRCU0RfXw0KCXN0cnVjdCBhcnBoZHIgKmFw
ID0gKHN0cnVjdCBhcnBoZHIgKikgKHAgKyBzaXplb2YoKmVwKSk7DQojZWxz
ZQ0KCXN0cnVjdCBldGhlcl9hcnAgKmFwID0gKHN0cnVjdCBldGhlcl9hcnAg
KikgKHAgKyBzaXplb2YoKmVwKSk7DQojZW5kaWYNCg0KCWlmIChkZmxhZykN
CgkJZnByaW50ZihzdGRlcnIsICJnb3QgYSBwYWNrZXRcbiIpOw0KDQoJaWYg
KGxlbiA8IHNpemVvZigqZXApICsgc2l6ZW9mKCphcCkpIHsNCgkJcmFycGVy
cihOT05GQVRBTCwgInRydW5jYXRlZCByZXF1ZXN0Iik7DQoJCXJldHVybiAw
Ow0KCX0NCiNpZmRlZiBfX05ldEJTRF9fDQoJLyogbm93IHRoYXQgd2Uga25v
dyB0aGUgZml4ZWQgcGFydCBvZiB0aGUgQVJQIGhkciBpcyB0aGVyZTogKi8N
CglpZiAobGVuIDwgc2l6ZW9mKCphcCkgKyAyICogYXAtPmFyX2hsbiArIDIg
KiBhcC0+YXJfcGxuKSB7DQoJCXJhcnBlcnIoTk9ORkFUQUwsICJ0cnVuY2F0
ZWQgcmVxdWVzdCIpOw0KCQlyZXR1cm4gMDsNCgl9DQojZW5kaWYNCgkvKiBY
WFggVGhpcyB0ZXN0IG1pZ2h0IGJlIGJldHRlciBvZmYgYnJva2VuIG91dC4u
LiAqLw0KI2lmZGVmIF9fRnJlZUJTRF9fDQoJLyogQlBGIChpbmNvcnJlY3Rs
eSkgcmV0dXJucyB0aGlzIGluIGhvc3Qgb3JkZXIuICovDQoJaWYgKGVwLT5l
dGhlcl90eXBlICE9IEVUSEVSVFlQRV9SRVZBUlAgfHwNCiNlbHNlDQoJaWYg
KG50b2hzIChlcC0+ZXRoZXJfdHlwZSkgIT0gRVRIRVJUWVBFX1JFVkFSUCB8
fA0KI2VuZGlmDQojaWZkZWYgX19OZXRCU0RfXw0KCSAgICBudG9ocyAoYXAt
PmFyX2hyZCkgIT0gQVJQSFJEX0VUSEVSIHx8DQoJICAgIG50b2hzIChhcC0+
YXJfb3ApICE9IEFSUE9QX1JFVlJFUVVFU1QgfHwNCgkgICAgbnRvaHMgKGFw
LT5hcl9wcm8pICE9IEVUSEVSVFlQRV9JUCB8fA0KCSAgICBhcC0+YXJfaGxu
ICE9IDYgfHwgYXAtPmFyX3BsbiAhPSA0KSB7DQojZWxzZQ0KCSAgICBudG9o
cyAoYXAtPmFycF9ocmQpICE9IEFSUEhSRF9FVEhFUiB8fA0KCSAgICBudG9o
cyAoYXAtPmFycF9vcCkgIT0gQVJQT1BfUkVWUkVRVUVTVCB8fA0KCSAgICBu
dG9ocyAoYXAtPmFycF9wcm8pICE9IEVUSEVSVFlQRV9JUCB8fA0KCSAgICBh
cC0+YXJwX2hsbiAhPSA2IHx8IGFwLT5hcnBfcGxuICE9IDQpIHsNCiNlbmRp
Zg0KCQlyYXJwZXJyKE5PTkZBVEFMLCAicmVxdWVzdCBmYWlscyBzYW5pdHkg
Y2hlY2siKTsNCgkJcmV0dXJuIDA7DQoJfQ0KI2lmZGVmIF9fTmV0QlNEX18N
CglpZiAobWVtY21wKChjaGFyICopICZlcC0+ZXRoZXJfc2hvc3QsIGFyX3No
YShhcCksIDYpICE9IDApIHsNCiNlbHNlDQoJaWYgKG1lbWNtcCgoY2hhciAq
KSAmZXAtPmV0aGVyX3Nob3N0LCBhcC0+YXJwX3NoYSwgNikgIT0gMCkgew0K
I2VuZGlmDQoJCXJhcnBlcnIoTk9ORkFUQUwsICJldGhlci9hcnAgc2VuZGVy
IGFkZHJlc3MgbWlzbWF0Y2giKTsNCgkJcmV0dXJuIDA7DQoJfQ0KI2lmZGVm
IF9fTmV0QlNEX18NCglpZiAobWVtY21wKGFyX3NoYShhcCksIGFyX3RoYShh
cCksIDYpICE9IDApIHsNCiNlbHNlDQoJaWYgKG1lbWNtcCgoY2hhciAqKSAm
YXAtPmFycF9zaGEsIChjaGFyICopICZhcC0+YXJwX3RoYSwgNikgIT0gMCkg
ew0KI2VuZGlmDQoJCXJhcnBlcnIoTk9ORkFUQUwsICJldGhlci9hcnAgdGFy
Z2V0IGFkZHJlc3MgbWlzbWF0Y2giKTsNCgkJcmV0dXJuIDA7DQoJfQ0KCXJl
dHVybiAxOw0KfQ0KDQovKg0KICogTG9vcCBpbmRlZmluaXRlbHkgbGlzdGVu
aW5nIGZvciBSQVJQIHJlcXVlc3RzIG9uIHRoZQ0KICogaW50ZXJmYWNlcyBp
biAnaWZsaXN0Jy4NCiAqLw0Kdm9pZA0KcmFycF9sb29wKCkNCnsNCgl1X2No
YXIgKmJ1ZiwgKmJwLCAqZXA7DQoJaW50ICAgICBjYywgZmQ7DQoJZmRfc2V0
ICBmZHMsIGxpc3RlbmVyczsNCglpbnQgICAgIGJ1ZnNpemUsIG1heGZkID0g
MDsNCglzdHJ1Y3QgaWZfaW5mbyAqaWk7DQoNCglpZiAoaWZsaXN0ID09IDAp
IHsNCgkJcmFycGVycihGQVRBTCwgIm5vIGludGVyZmFjZXMiKTsNCgkJLyog
Tk9UUkVBQ0hFRCAqLw0KCX0NCglpZiAoaW9jdGwoaWZsaXN0LT5paV9mZCwg
QklPQ0dCTEVOLCAoY2FkZHJfdCkgJiBidWZzaXplKSA8IDApIHsNCgkJcmFy
cGVycihGQVRBTCwgIkJJT0NHQkxFTjogJXMiLCBzdHJlcnJvcihlcnJubykp
Ow0KCQkvKiBOT1RSRUFDSEVEICovDQoJfQ0KCWJ1ZiA9ICh1X2NoYXIgKikg
bWFsbG9jKCh1bnNpZ25lZCkgYnVmc2l6ZSk7DQoJaWYgKGJ1ZiA9PSAwKSB7
DQoJCXJhcnBlcnIoRkFUQUwsICJtYWxsb2M6ICVzIiwgc3RyZXJyb3IoZXJy
bm8pKTsNCgkJLyogTk9UUkVBQ0hFRCAqLw0KCX0NCgkvKg0KICAgICAgICAg
KiBGaW5kIHRoZSBoaWdoZXN0IG51bWJlcmVkIGZpbGUgZGVzY3JpcHRvciBm
b3Igc2VsZWN0KCkuDQogICAgICAgICAqIEluaXRpYWxpemUgdGhlIHNldCBv
ZiBkZXNjcmlwdG9ycyB0byBsaXN0ZW4gdG8uDQogICAgICAgICAqLw0KCUZE
X1pFUk8oJmZkcyk7DQoJZm9yIChpaSA9IGlmbGlzdDsgaWk7IGlpID0gaWkt
PmlpX25leHQpIHsNCgkJRkRfU0VUKGlpLT5paV9mZCwgJmZkcyk7DQoJCWlm
IChpaS0+aWlfZmQgPiBtYXhmZCkNCgkJCW1heGZkID0gaWktPmlpX2ZkOw0K
CX0NCgl3aGlsZSAoMSkgew0KCQlsaXN0ZW5lcnMgPSBmZHM7DQoJCXByaW50
ZigiREJHIGVudGVyIHNlbGVjdFxuIik7DQoJCWlmIChzZWxlY3QobWF4ZmQg
KyAxLCAmbGlzdGVuZXJzLCAoc3RydWN0IGZkX3NldCAqKSAwLA0KCQkJKHN0
cnVjdCBmZF9zZXQgKikgMCwgKHN0cnVjdCB0aW1ldmFsICopIDApIDwgMCkg
ew0KCQkJcmFycGVycihGQVRBTCwgInNlbGVjdDogJXMiLCBzdHJlcnJvcihl
cnJubykpOw0KCQkJLyogTk9UUkVBQ0hFRCAqLw0KCQl9DQoJCXByaW50Zigi
REJHIGV4aXQgc2VsZWN0XG4iKTsNCgkJZm9yIChpaSA9IGlmbGlzdDsgaWk7
IGlpID0gaWktPmlpX25leHQpIHsNCgkJCWZkID0gaWktPmlpX2ZkOw0KCQkJ
aWYgKCFGRF9JU1NFVChmZCwgJmxpc3RlbmVycykpDQoJCQkJY29udGludWU7
DQoJCXByaW50ZigiREJHIGRhdGEgcmVjZWl2ZWQgb24gJXMgKGZkPSVkKVxu
IiwgaWktPmlpX25hbWUsIGlpLT5paV9mZCk7DQoJCWFnYWluOg0KCQkJY2Mg
PSByZWFkKGZkLCAoY2hhciAqKSBidWYsIGJ1ZnNpemUpOw0KCQlwcmludGYo
IkRCRyByZWFkICVkXG4iLCBjYyk7DQoJCQkvKiBEb24ndCBjaG9rZSB3aGVu
IHdlIGdldCBwdHJhY2VkICovDQoJCQlpZiAoY2MgPCAwICYmIGVycm5vID09
IEVJTlRSKQ0KCQkJCWdvdG8gYWdhaW47DQoJCQkvKiBEdWUgdG8gYSBTdW5P
UyBidWcsIGFmdGVyIDJeMzEgYnl0ZXMsIHRoZSBmaWxlDQoJCQkgKiBvZmZz
ZXQgb3ZlcmZsb3dzIGFuZCByZWFkIGZhaWxzIHdpdGggRUlOVkFMLiAgVGhl
DQoJCQkgKiBsc2VlaygpIHRvIDAgd2lsbCBmaXggdGhpbmdzLiAqLw0KCQkJ
aWYgKGNjIDwgMCkgew0KCQkJCWlmIChlcnJubyA9PSBFSU5WQUwgJiYNCgkJ
CQkgICAgKGxzZWVrKGZkLCAwLCBTRUVLX0NVUikgKyBidWZzaXplKSA8IDAp
IHsNCgkJCQkJKHZvaWQpbHNlZWsoZmQsIDAsIDApOw0KCQkJCQlnb3RvIGFn
YWluOw0KCQkJCX0NCgkJCQlyYXJwZXJyKEZBVEFMLCAicmVhZDogJXMiLCBz
dHJlcnJvcihlcnJubykpOw0KCQkJCS8qIE5PVFJFQUNIRUQgKi8NCgkJCX0N
CgkJCS8qIExvb3AgdGhyb3VnaCB0aGUgcGFja2V0KHMpICovDQojZGVmaW5l
IGJocCAoKHN0cnVjdCBicGZfaGRyICopYnApDQoJCQlicCA9IGJ1ZjsNCgkJ
CWVwID0gYnAgKyBjYzsNCgkJCXdoaWxlIChicCA8IGVwKSB7DQoJCQkJcmVn
aXN0ZXIgaW50IGNhcGxlbiwgaGRybGVuOw0KDQoJCQkJY2FwbGVuID0gYmhw
LT5iaF9jYXBsZW47DQoJCQkJaGRybGVuID0gYmhwLT5iaF9oZHJsZW47DQpw
cmludGYoIkRCRyBjYXBsZW49JWQgaGRybGVuPSVkIChvZmZzZXQ9JWQpXG4i
LCBjYXBsZW4sIGhkcmxlbiwgYnAgLSBidWYpOw0KCQkJCWlmIChyYXJwX2No
ZWNrKGJwICsgaGRybGVuLCBjYXBsZW4pKQ0KCQkJCQlyYXJwX3Byb2Nlc3Mo
aWksIGJwICsgaGRybGVuKTsNCgkJCQlicCArPSBCUEZfV09SREFMSUdOKGhk
cmxlbiArIGNhcGxlbik7DQoJCQl9DQoJCXByaW50ZigiREJHIGVuZCBvZiBs
b29wXG4iKTsNCgkJfQ0KCX0NCn0NCg0KI2lmZGVmIFJFUVVJUkVfVEZUUEJP
T1QNCg0KI2lmbmRlZiBURlRQX0RJUg0KI2RlZmluZSBURlRQX0RJUiAiL3Rm
dHBib290Ig0KI2VuZGlmDQoNCi8qDQogKiBUcnVlIGlmIHRoaXMgc2VydmVy
IGNhbiBib290IHRoZSBob3N0IHdob3NlIElQIGFkZHJlc3MgaXMgJ2FkZHIn
Lg0KICogVGhpcyBjaGVjayBpcyBtYWRlIGJ5IGxvb2tpbmcgaW4gdGhlIHRm
dHAgZGlyZWN0b3J5IGZvciB0aGUNCiAqIGNvbmZpZ3VyYXRpb24gZmlsZS4N
CiAqLw0KaW50DQpyYXJwX2Jvb3RhYmxlKGFkZHIpDQoJdV9pbnQzMl90ICBh
ZGRyOw0Kew0KCXJlZ2lzdGVyIHN0cnVjdCBkaXJlbnQgKmRlbnQ7DQoJcmVn
aXN0ZXIgRElSICpkOw0KCWNoYXIgICAgaXBuYW1lWzldOw0KCXN0YXRpYyBE
SVIgKmRkID0gMDsNCg0KCSh2b2lkKXNwcmludGYoaXBuYW1lLCAiJTA4WCIs
IGFkZHIpOw0KCS8qIElmIGRpcmVjdG9yeSBpcyBhbHJlYWR5IG9wZW4sIHJl
d2luZCBpdC4gIE90aGVyd2lzZSwgb3BlbiBpdC4gKi8NCglpZiAoZCA9IGRk
KQ0KCQlyZXdpbmRkaXIoZCk7DQoJZWxzZSB7DQoJCWlmIChjaGRpcihURlRQ
X0RJUikgPT0gLTEpIHsNCgkJCXJhcnBlcnIoRkFUQUwsICJjaGRpcjogJXMi
LCBzdHJlcnJvcihlcnJubykpOw0KCQkJLyogTk9UUkVBQ0hFRCAqLw0KCQl9
DQoJCWQgPSBvcGVuZGlyKCIuIik7DQoJCWlmIChkID09IDApIHsNCgkJCXJh
cnBlcnIoRkFUQUwsICJvcGVuZGlyOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7
DQoJCQkvKiBOT1RSRUFDSEVEICovDQoJCX0NCgkJZGQgPSBkOw0KCX0NCgl3
aGlsZSAoZGVudCA9IHJlYWRkaXIoZCkpDQoJCWlmIChzdHJuY21wKGRlbnQt
PmRfbmFtZSwgaXBuYW1lLCA4KSA9PSAwKQ0KCQkJcmV0dXJuIDE7DQoJcmV0
dXJuIDA7DQp9DQojZW5kaWYgLyogUkVRVUlSRV9URlRQQk9PVCAqLw0KDQov
Kg0KICogR2l2ZW4gYSBsaXN0IG9mIElQIGFkZHJlc3NlcywgJ2FsaXN0Jywg
cmV0dXJuIHRoZSBmaXJzdCBhZGRyZXNzIHRoYXQNCiAqIGlzIG9uIG5ldHdv
cmsgJ25ldCc7ICduZXRtYXNrJyBpcyBhIG1hc2sgaW5kaWNhdGluZyB0aGUg
bmV0d29yayBwb3J0aW9uDQogKiBvZiB0aGUgYWRkcmVzcy4NCiAqLw0KdV9p
bnQzMl90DQpjaG9vc2VfaXBhZGRyKGFsaXN0LCBuZXQsIG5ldG1hc2spDQoJ
dV9pbnQzMl90ICoqYWxpc3Q7DQoJdV9pbnQzMl90IG5ldDsNCgl1X2ludDMy
X3QgbmV0bWFzazsNCnsNCg0KCWZvciAoOyAqYWxpc3Q7ICsrYWxpc3QpIHsN
CgkJaWYgKCgqKmFsaXN0ICYgbmV0bWFzaykgPT0gbmV0KQ0KCQkJcmV0dXJu
ICoqYWxpc3Q7DQoJfQ0KCXJldHVybiAwOw0KfQ0KLyoNCiAqIEFuc3dlciB0
aGUgUkFSUCByZXF1ZXN0IGluICdwa3QnLCBvbiB0aGUgaW50ZXJmYWNlICdp
aScuICAncGt0JyBoYXMNCiAqIGFscmVhZHkgYmVlbiBjaGVja2VkIGZvciB2
YWxpZGl0eS4gIFRoZSByZXBseSBpcyBvdmVybGFpZCBvbiB0aGUgcmVxdWVz
dC4NCiAqLw0Kdm9pZA0KcmFycF9wcm9jZXNzKGlpLCBwa3QpDQoJc3RydWN0
IGlmX2luZm8gKmlpOw0KCXVfY2hhciAqcGt0Ow0Kew0KCXN0cnVjdCBldGhl
cl9oZWFkZXIgKmVwOw0KCXN0cnVjdCBob3N0ZW50ICpocDsNCgl1X2ludDMy
X3QgIHRhcmdldF9pcGFkZHIgPSAwOw0KCWNoYXIgICAgZW5hbWVbTUFYSE9T
VE5BTUVMRU4gKyAxXTsNCglzdHJ1Y3QJaW5fYWRkciBpbjsNCg0KcHJpbnRm
KCJEQkcgcmFycF9wcm9jZXNzXG4iKTsNCg0KCWVwID0gKHN0cnVjdCBldGhl
cl9oZWFkZXIgKikgcGt0Ow0KDQoJaWYgKGV0aGVyX250b2hvc3QoZW5hbWUs
IChzdHJ1Y3QgZXRoZXJfYWRkciAqKSZlcC0+ZXRoZXJfc2hvc3QpICE9IDAp
IHsNCgkJZGVidWcoIm5vIElQIGFkZHJlc3MgZm9yICVzIiwNCgkJICAgIGV0
aGVyX250b2EoKHN0cnVjdCBldGhlcl9hZGRyICopJmVwLT5ldGhlcl9zaG9z
dCkpOw0KCQlyZXR1cm47DQoJfQ0KCWVuYW1lW3NpemVvZihlbmFtZSktMV0g
PSAnXDAnOw0KDQoJaWYgKChocCA9IGdldGhvc3RieW5hbWUoZW5hbWUpKSA9
PSAwKSB7DQoJCWRlYnVnKCJnZXRob3N0YnluYW1lKCVzKSBmYWlsZWQ6ICVz
IiwgZW5hbWUsDQoJCSAgICBoc3RyZXJyb3IoaF9lcnJubykpOw0KCQlyZXR1
cm47DQoJfQ0KDQoJLyogQ2hvb3NlIGNvcnJlY3QgYWRkcmVzcyBmcm9tIGxp
c3QuICovDQoJaWYgKGhwLT5oX2FkZHJ0eXBlICE9IEFGX0lORVQpIHsNCgkJ
cmFycGVycihGQVRBTCwgImNhbm5vdCBoYW5kbGUgbm9uIElQIGFkZHJlc3Nl
cyIpOw0KCQkvKiBOT1RSRUFDSEVEICovDQoJfQ0KCWZvciAoOzsgaWkgPSBp
aS0+aWlfYWxpYXMpIHsNCgkJdGFyZ2V0X2lwYWRkciA9IGNob29zZV9pcGFk
ZHIoKHVfaW50MzJfdCAqKikgaHAtPmhfYWRkcl9saXN0LA0KCQkgICAgaWkt
PmlpX2lwYWRkciAmIGlpLT5paV9uZXRtYXNrLCBpaS0+aWlfbmV0bWFzayk7
DQoJCWlmICh0YXJnZXRfaXBhZGRyICE9IDApDQoJCQlicmVhazsNCgkJaWYg
KGlpLT5paV9hbGlhcyA9PSBOVUxMKQ0KCQkJYnJlYWs7DQoJfQ0KDQoJaWYg
KHRhcmdldF9pcGFkZHIgPT0gMCkgew0KCQlpbi5zX2FkZHIgPSBpaS0+aWlf
aXBhZGRyICYgaWktPmlpX25ldG1hc2s7DQoJCXJhcnBlcnIoTk9ORkFUQUws
ICJjYW5ub3QgZmluZCAlcyBvbiBuZXQgJXMiLA0KCQkgICAgZW5hbWUsIGlu
ZXRfbnRvYShpbikpOw0KCQlyZXR1cm47DQoJfQ0KI2lmZGVmIFJFUVVJUkVf
VEZUUEJPT1QNCglpZiAocmFycF9ib290YWJsZShodG9ubCh0YXJnZXRfaXBh
ZGRyKSkpDQojZW5kaWYNCgkJcmFycF9yZXBseShpaSwgZXAsIHRhcmdldF9p
cGFkZHIsIGhwKTsNCiNpZmRlZiBSRVFVSVJFX1RGVFBCT09UDQoJZWxzZQ0K
CQlkZWJ1ZygiJTA4WCBub3QgYm9vdGFibGUiLCBodG9ubCh0YXJnZXRfaXBh
ZGRyKSk7DQojZW5kaWYNCn0NCi8qDQogKiBMb29rdXAgdGhlIGV0aGVybmV0
IGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZSBhdHRhY2hlZCB0byB0aGUgQlBG
DQogKiBmaWxlIGRlc2NyaXB0b3IgJ2ZkJzsgcmV0dXJuIGl0IGluICdlYWRk
cicuDQogKi8NCnZvaWQNCmxvb2t1cF9lYWRkcihpZm5hbWUsIGVhZGRyKQ0K
CWNoYXIgKmlmbmFtZTsNCgl1X2NoYXIgKmVhZGRyOw0Kew0KCWNoYXIgaW5i
dWZbODE5MioyXTsNCglzdHJ1Y3QgaWZjb25mIGlmYzsNCglzdHJ1Y3QgaWZy
ZXEgKmlmcjsNCglzdHJ1Y3Qgc29ja2FkZHJfZGwgKnNkbDsNCglpbnQgZmQ7
DQoJaW50IGksIGxlbjsNCg0KCS8qIFdlIGNhbm5vdCB1c2UgU0lPQ0dJRkFE
RFIgb24gdGhlIEJQRiBkZXNjcmlwdG9yLg0KCSAgIFdlIG11c3QgaW5zdGVh
ZCBnZXQgYWxsIHRoZSBpbnRlcmZhY2VzIHdpdGggU0lPQ0dJRkNPTkYNCgkg
ICBhbmQgZmluZCB0aGUgcmlnaHQgb25lLiAgKi8NCg0KCS8qIFVzZSBkYXRh
Z3JhbSBzb2NrZXQgdG8gZ2V0IEV0aGVybmV0IGFkZHJlc3MuICovDQoJaWYg
KChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKSkgPCAwKSB7
DQoJCXJhcnBlcnIoRkFUQUwsICJzb2NrZXQ6ICVzIiwgc3RyZXJyb3IoZXJy
bm8pKTsNCgkJLyogTk9UUkVBQ0hFRCAqLw0KCX0NCg0KCWlmYy5pZmNfbGVu
ID0gc2l6ZW9mKGluYnVmKTsNCglpZmMuaWZjX2J1ZiA9IGluYnVmOw0KCWlm
IChpb2N0bChmZCwgU0lPQ0dJRkNPTkYsIChjYWRkcl90KSZpZmMpIDwgMCB8
fA0KCSAgICBpZmMuaWZjX2xlbiA8IHNpemVvZihzdHJ1Y3QgaWZyZXEpKSB7
DQoJCXJhcnBlcnIoRkFUQUwsICJsb29rdXBfZWFkZHI6IFNJT0dJRkNPTkY6
ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsNCgkJLyogTk9UUkVBQ0hFRCAqLw0K
CX0NCglpZnIgPSBpZmMuaWZjX3JlcTsNCglmb3IgKGkgPSAwOyBpIDwgaWZj
LmlmY19sZW47DQoJICAgICBpICs9IGxlbiwgaWZyID0gKHN0cnVjdCBpZnJl
cSAqKSgoY2FkZHJfdClpZnIgKyBsZW4pKSB7DQoJCWxlbiA9IHNpemVvZihp
ZnItPmlmcl9uYW1lKSArIGlmci0+aWZyX2FkZHIuc2FfbGVuOw0KCQlzZGwg
PSAoc3RydWN0IHNvY2thZGRyX2RsICopJmlmci0+aWZyX2FkZHI7DQoJCWlm
IChzZGwtPnNkbF9mYW1pbHkgIT0gQUZfTElOSyB8fCBzZGwtPnNkbF90eXBl
ICE9IElGVF9FVEhFUiB8fA0KCQkgICAgc2RsLT5zZGxfYWxlbiAhPSA2KQ0K
CQkJY29udGludWU7DQoJCWlmICghc3RybmNtcChpZnItPmlmcl9uYW1lLCBp
Zm5hbWUsIHNpemVvZihpZnItPmlmcl9uYW1lKSkpIHsNCgkJCW1lbW1vdmUo
KGNhZGRyX3QpZWFkZHIsIChjYWRkcl90KUxMQUREUihzZGwpLCA2KTsNCgkJ
CWRlYnVnKCIlczogJXg6JXg6JXg6JXg6JXg6JXgiLA0KCQkJICAgIGlmci0+
aWZyX25hbWUsIGVhZGRyWzBdLCBlYWRkclsxXSwNCgkJCSAgICBlYWRkclsy
XSwgZWFkZHJbM10sIGVhZGRyWzRdLCBlYWRkcls1XSk7DQoJCQlyZXR1cm47
DQoJCX0NCgl9DQoNCglyYXJwZXJyKEZBVEFMLCAibG9va3VwX2VhZGRyOiBO
ZXZlciBzYXcgaW50ZXJmYWNlIGAlcychIiwgaWZuYW1lKTsNCn0NCi8qDQog
KiBMb29rdXAgdGhlIElQIGFkZHJlc3MgYW5kIG5ldHdvcmsgbWFzayBvZiB0
aGUgaW50ZXJmYWNlIG5hbWVkICdpZm5hbWUnLg0KICovDQp2b2lkDQpsb29r
dXBfaXBhZGRyKGlmbmFtZSwgYWRkcnAsIG5ldG1hc2twKQ0KCWNoYXIgICAq
aWZuYW1lOw0KCXVfaW50MzJfdCAqYWRkcnA7DQoJdV9pbnQzMl90ICpuZXRt
YXNrcDsNCnsNCglpbnQgICAgIGZkOw0KDQoJLyogVXNlIGRhdGFncmFtIHNv
Y2tldCB0byBnZXQgSVAgYWRkcmVzcy4gKi8NCglpZiAoKGZkID0gc29ja2V0
KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApKSA8IDApIHsNCgkJcmFycGVycihG
QVRBTCwgInNvY2tldDogJXMiLCBzdHJlcnJvcihlcnJubykpOw0KCQkvKiBO
T1RSRUFDSEVEICovDQoJfQ0KCWlmICgqYWRkcnAgPT0gSU5BRERSX0FOWSkg
ew0KCQlzdHJ1Y3QgaWZyZXEgaWZyOw0KCQltZW1zZXQoJmlmciwgMCwgc2l6
ZW9mKGlmcikpOw0KCQkodm9pZClzdHJuY3B5KGlmci5pZnJfbmFtZSwgaWZu
YW1lLCBzaXplb2YgaWZyLmlmcl9uYW1lKTsNCgkJaWYgKGlvY3RsKGZkLCBT
SU9DR0lGQUREUiwgKGNoYXIgKikgJmlmcikgPCAwKSB7DQoJCQlyYXJwZXJy
KEZBVEFMLCAiU0lPQ0dJRkFERFI6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsN
CgkJCS8qIE5PVFJFQUNIRUQgKi8NCgkJfQ0KCQkqYWRkcnAgPSAoKHN0cnVj
dCBzb2NrYWRkcl9pbiAqKSAmIGlmci5pZnJfYWRkciktPnNpbl9hZGRyLnNf
YWRkcjsNCgkJaWYgKGlvY3RsKGZkLCBTSU9DR0lGTkVUTUFTSywgKGNoYXIg
KikgJmlmcikgPCAwKSB7DQoJCQlwZXJyb3IoIlNJT0NHSUZORVRNQVNLIik7
DQoJCQlleGl0KDEpOw0KCQl9DQoJCSpuZXRtYXNrcCA9ICgoc3RydWN0IHNv
Y2thZGRyX2luICopICYgaWZyLmlmcl9hZGRyKS0+c2luX2FkZHIuc19hZGRy
Ow0KCX0gZWxzZSB7DQoJCXN0cnVjdCBpZmFsaWFzcmVxIGlmcmE7DQoJCW1l
bXNldCgmaWZyYSwgMCwgc2l6ZW9mKGlmcmEpKTsNCgkJKHZvaWQpc3RybmNw
eShpZnJhLmlmcmFfbmFtZSwgaWZuYW1lLCBzaXplb2YgaWZyYS5pZnJhX25h
bWUpOw0KCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmIGlmcmEuaWZyYV9h
ZGRyKS0+c2luX2ZhbWlseSA9IEFGX0lORVQ7DQoJCSgoc3RydWN0IHNvY2th
ZGRyX2luICopICYgaWZyYS5pZnJhX2FkZHIpLT5zaW5fYWRkci5zX2FkZHIg
PSAqYWRkcnA7DQoJCWlmIChpb2N0bChmZCwgU0lPQ0dJRkFMSUFTLCAoY2hh
ciAqKSAmaWZyYSkgPCAwKSB7DQoJCQlyYXJwZXJyKEZBVEFMLCAiU0lPQ0dJ
RkFMSUFTOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7DQoJCQkvKiBOT1RSRUFD
SEVEICovDQoJCX0NCgkJKmFkZHJwID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4g
KikgJiBpZnJhLmlmcmFfYWRkciktPnNpbl9hZGRyLnNfYWRkcjsNCgkJKm5l
dG1hc2twID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJiBpZnJhLmlmcmFf
bWFzayktPnNpbl9hZGRyLnNfYWRkcjsNCgl9DQoJLyogSWYgU0lPQ0dJRk5F
VE1BU0sgZGlkbid0IHdvcmssIGZpZ3VyZSBvdXQgYSBtYXNrIGZyb20gdGhl
IElQDQoJICogYWRkcmVzcyBjbGFzcy4gKi8NCglpZiAoKm5ldG1hc2twID09
IDApDQoJCSpuZXRtYXNrcCA9IGlwYWRkcnRvbmV0bWFzaygqYWRkcnApOw0K
DQoJKHZvaWQpY2xvc2UoZmQpOw0KfQ0KLyoNCiAqIFBva2UgdGhlIGtlcm5l
bCBhcnAgdGFibGVzIHdpdGggdGhlIGV0aGVybmV0L2lwIGFkZHJlc3MgY29t
YmluYXRhaW9uDQogKiBnaXZlbi4gIFdoZW4gcHJvY2Vzc2luZyBhIHJlcGx5
LCB3ZSBtdXN0IGRvIHRoaXMgc28gdGhhdCB0aGUgYm9vdGluZw0KICogaG9z
dCAoaS5lLiB0aGUgZ3V5IHJ1bm5pbmcgcmFycGQpLCB3b24ndCB0cnkgdG8g
QVJQIGZvciB0aGUgaGFyZHdhcmUNCiAqIGFkZHJlc3Mgb2YgdGhlIGd1eSBi
ZWluZyBib290ZWQgKGhlIGNhbm5vdCBhbnN3ZXIgdGhlIEFSUCkuDQogKi8N
CiNpZm5kZWYgX19OZXRCU0RfXw0Kdm9pZA0KdXBkYXRlX2FycHRhYihlcCwg
aXBhZGRyKQ0KCXVfY2hhciAqZXA7DQoJdV9pbnQzMl90ICBpcGFkZHI7DQp7
DQoJc3RydWN0IGFycHJlcSByZXF1ZXN0Ow0KCXN0cnVjdCBzb2NrYWRkcl9p
biAqc2luOw0KDQoJcmVxdWVzdC5hcnBfZmxhZ3MgPSAwOw0KCXNpbiA9IChz
dHJ1Y3Qgc29ja2FkZHJfaW4gKikgJiByZXF1ZXN0LmFycF9wYTsNCglzaW4t
PnNpbl9mYW1pbHkgPSBBRl9JTkVUOw0KCXNpbi0+c2luX2FkZHIuc19hZGRy
ID0gaXBhZGRyOw0KCXJlcXVlc3QuYXJwX2hhLnNhX2ZhbWlseSA9IEFGX1VO
U1BFQzsNCgkvKiBUaGlzIGlzIG5lZWRlZCAjaWYgZGVmaW5lZChDT01QQVRf
NDMpICYmIEJZVEVfT1JERVIgIT0gQklHX0VORElBTiwNCgkgICBiZWNhdXNl
IEFGX1VOU1BFQyBpcyB6ZXJvIGFuZCB0aGUga2VybmVsIGFzc3VtZXMgdGhh
dCBhIHplcm8NCgkgICBzYV9mYW1pbHkgbWVhbnMgdGhhdCB0aGUgcmVhbCBz
YV9mYW1pbHkgdmFsdWUgaXMgaW4gc2FfbGVuLiAgKi8NCglyZXF1ZXN0LmFy
cF9oYS5zYV9sZW4gPSAxNjsgLyogWFhYICovDQoJbWVtbW92ZSgoY2hhciAq
KSByZXF1ZXN0LmFycF9oYS5zYV9kYXRhLCAoY2hhciAqKWVwLCA2KTsNCg0K
I2lmIDANCglzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApOw0K
CWlmIChpb2N0bChzLCBTSU9DU0FSUCwgKGNhZGRyX3QpICYgcmVxdWVzdCkg
PCAwKSB7DQoJCXJhcnBlcnIoTk9ORkFUQUwsICJTSU9DU0FSUDogJXMiLCBz
dHJlcnJvcihlcnJubykpOw0KCX0NCgkodm9pZCljbG9zZShzKTsNCiNlbmRp
Zg0KfQ0KI2VuZGlmDQoNCi8qDQogKiBCdWlsZCBhIHJldmVyc2UgQVJQIHBh
Y2tldCBhbmQgc2VudCBpdCBvdXQgb24gdGhlIGludGVyZmFjZS4NCiAqICdl
cCcgcG9pbnRzIHRvIGEgdmFsaWQgQVJQT1BfUkVWUkVRVUVTVC4gIFRoZSBB
UlBPUF9SRVZSRVBMWSBpcyBidWlsdA0KICogb24gdG9wIG9mIHRoZSByZXF1
ZXN0LCB0aGVuIHdyaXR0ZW4gdG8gdGhlIG5ldHdvcmsuDQogKg0KICogUkZD
IDkwMyBkZWZpbmVzIHRoZSBldGhlcl9hcnAgZmllbGRzIGFzIGZvbGxvd3Mu
ICBUaGUgZm9sbG93aW5nIGNvbW1lbnRzDQogKiBhcmUgdGFrZW4gKG1vcmUg
b3IgbGVzcykgc3RyYWlnaHQgZnJvbSB0aGlzIGRvY3VtZW50Lg0KICoNCiAq
IEFSUE9QX1JFVlJFUVVFU1QNCiAqDQogKiBhcnBfc2hhIGlzIHRoZSBoYXJk
d2FyZSBhZGRyZXNzIG9mIHRoZSBzZW5kZXIgb2YgdGhlIHBhY2tldC4NCiAq
IGFycF9zcGEgaXMgdW5kZWZpbmVkLg0KICogYXJwX3RoYSBpcyB0aGUgJ3Rh
cmdldCcgaGFyZHdhcmUgYWRkcmVzcy4NCiAqICAgSW4gdGhlIGNhc2Ugd2hl
cmUgdGhlIHNlbmRlciB3aXNoZXMgdG8gZGV0ZXJtaW5lIGhpcyBvd24NCiAq
ICAgcHJvdG9jb2wgYWRkcmVzcywgdGhpcywgbGlrZSBhcnBfc2hhLCB3aWxs
IGJlIHRoZSBoYXJkd2FyZQ0KICogICBhZGRyZXNzIG9mIHRoZSBzZW5kZXIu
DQogKiBhcnBfdHBhIGlzIHVuZGVmaW5lZC4NCiAqDQogKiBBUlBPUF9SRVZS
RVBMWQ0KICoNCiAqIGFycF9zaGEgaXMgdGhlIGhhcmR3YXJlIGFkZHJlc3Mg
b2YgdGhlIHJlc3BvbmRlciAodGhlIHNlbmRlciBvZiB0aGUNCiAqICAgcmVw
bHkgcGFja2V0KS4NCiAqIGFycF9zcGEgaXMgdGhlIHByb3RvY29sIGFkZHJl
c3Mgb2YgdGhlIHJlc3BvbmRlciAoc2VlIHRoZSBub3RlIGJlbG93KS4NCiAq
IGFycF90aGEgaXMgdGhlIGhhcmR3YXJlIGFkZHJlc3Mgb2YgdGhlIHRhcmdl
dCwgYW5kIHNob3VsZCBiZSB0aGUgc2FtZSBhcw0KICogICB0aGF0IHdoaWNo
IHdhcyBnaXZlbiBpbiB0aGUgcmVxdWVzdC4NCiAqIGFycF90cGEgaXMgdGhl
IHByb3RvY29sIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCwgdGhhdCBpcywgdGhl
IGRlc2lyZWQgYWRkcmVzcy4NCiAqDQogKiBOb3RlIHRoYXQgdGhlIHJlcXVp
cmVtZW50IHRoYXQgYXJwX3NwYSBiZSBmaWxsZWQgaW4gd2l0aCB0aGUgcmVz
cG9uZGVyJ3MNCiAqIHByb3RvY29sIGlzIHB1cmVseSBmb3IgY29udmVuaWVu
Y2UuICBGb3IgaW5zdGFuY2UsIGlmIGEgc3lzdGVtIHdlcmUgdG8gdXNlDQog
KiBib3RoIEFSUCBhbmQgUkFSUCwgdGhlbiB0aGUgaW5jbHVzaW9uIG9mIHRo
ZSB2YWxpZCBwcm90b2NvbC1oYXJkd2FyZQ0KICogYWRkcmVzcyBwYWlyIChh
cnBfc3BhLCBhcnBfc2hhKSBtYXkgZWxpbWluYXRlIHRoZSBuZWVkIGZvciBh
IHN1YnNlcXVlbnQNCiAqIEFSUCByZXF1ZXN0Lg0KICovDQp2b2lkDQpyYXJw
X3JlcGx5KGlpLCBlcCwgaXBhZGRyLCBocCkNCglzdHJ1Y3QgaWZfaW5mbyAq
aWk7DQoJc3RydWN0IGV0aGVyX2hlYWRlciAqZXA7DQoJdV9pbnQzMl90ICBp
cGFkZHI7DQoJc3RydWN0IGhvc3RlbnQgKmhwOw0Kew0KCWludCAgICAgbjsN
CiNpZmRlZiBfX05ldEJTRF9fDQoJc3RydWN0IGFycGhkciAqYXAgPSAoc3Ry
dWN0IGFycGhkciAqKSAoZXAgKyAxKTsNCiNlbHNlDQoJc3RydWN0IGV0aGVy
X2FycCAqYXAgPSAoc3RydWN0IGV0aGVyX2FycCAqKSAoZXAgKyAxKTsNCiNl
bmRpZg0KDQoJaW50ICAgICBsZW47DQoNCnByaW50ZigiREJHIHJhcnBfcmVw
bHlcbiIpOw0KI2lmZGVmIF9fTmV0QlNEX18NCgkodm9pZClta2FycChhcl9z
aGEoYXApLCBpcGFkZHIpOw0KI2Vsc2UNCgl1cGRhdGVfYXJwdGFiKCh1X2No
YXIgKikgJiBhcC0+YXJwX3NoYSwgaXBhZGRyKTsNCiNlbmRpZg0KDQoJLyog
QnVpbGQgdGhlIHJhcnAgcmVwbHkgYnkgbW9kaWZ5aW5nIHRoZSByYXJwIHJl
cXVlc3QgaW4gcGxhY2UuICovDQojaWZkZWYgX19GcmVlQlNEX18NCgkvKiBC
UEYgKGluY29ycmVjdGx5KSB3YW50cyB0aGlzIGluIGhvc3Qgb3JkZXIuICov
DQoJZXAtPmV0aGVyX3R5cGUgPSBFVEhFUlRZUEVfUkVWQVJQOw0KI2Vsc2UN
CgllcC0+ZXRoZXJfdHlwZSA9IGh0b25zKEVUSEVSVFlQRV9SRVZBUlApOw0K
I2VuZGlmDQojaWZkZWYgX19OZXRCU0RfXw0KCWFwLT5hcl9ocmQgPSBodG9u
cyhBUlBIUkRfRVRIRVIpOw0KCWFwLT5hcl9wcm8gPSBodG9ucyhFVEhFUlRZ
UEVfSVApOw0KCWFwLT5hcl9vcCA9IGh0b25zKEFSUE9QX1JFVlJFUExZKTsN
Cg0KCW1lbW1vdmUoKGNoYXIgKikgJmVwLT5ldGhlcl9kaG9zdCwgYXJfc2hh
KGFwKSwgNik7DQoJbWVtbW92ZSgoY2hhciAqKSAmZXAtPmV0aGVyX3Nob3N0
LCAoY2hhciAqKSBpaS0+aWlfZWFkZHIsIDYpOw0KCW1lbW1vdmUoYXJfc2hh
KGFwKSwgKGNoYXIgKikgaWktPmlpX2VhZGRyLCA2KTsNCg0KCW1lbW1vdmUo
YXJfdHBhKGFwKSwgKGNoYXIgKikgJmlwYWRkciwgNCk7DQoJLyogVGFyZ2V0
IGhhcmR3YXJlIGlzIHVuY2hhbmdlZC4gKi8NCgltZW1tb3ZlKGFyX3NwYShh
cCksIChjaGFyICopICZpaS0+aWlfaXBhZGRyLCA0KTsNCg0KCWxlbiA9IHNp
emVvZigqZXApICsgc2l6ZW9mKCphcCkgKyANCgkgICAgMiAqIGFwLT5hcl9w
bG4gKyAyICogYXAtPmFyX2hsbjsNCiNlbHNlDQoJYXAtPmVhX2hkci5hcl9o
cmQgPSBodG9ucyhBUlBIUkRfRVRIRVIpOw0KCWFwLT5lYV9oZHIuYXJfcHJv
ID0gaHRvbnMoRVRIRVJUWVBFX0lQKTsNCglhcC0+YXJwX29wID0gaHRvbnMo
QVJQT1BfUkVWUkVQTFkpOw0KDQoJbWVtbW92ZSgoY2hhciAqKSAmZXAtPmV0
aGVyX2Rob3N0LCAoY2hhciAqKSAmYXAtPmFycF9zaGEsIDYpOw0KCW1lbW1v
dmUoKGNoYXIgKikgJmVwLT5ldGhlcl9zaG9zdCwgKGNoYXIgKikgaWktPmlp
X2VhZGRyLCA2KTsNCgltZW1tb3ZlKChjaGFyICopICZhcC0+YXJwX3NoYSwg
KGNoYXIgKikgaWktPmlpX2VhZGRyLCA2KTsNCg0KCW1lbW1vdmUoKGNoYXIg
KikgYXAtPmFycF90cGEsIChjaGFyICopICZpcGFkZHIsIDQpOw0KCS8qIFRh
cmdldCBoYXJkd2FyZSBpcyB1bmNoYW5nZWQuICovDQoJbWVtbW92ZSgoY2hh
ciAqKSBhcC0+YXJwX3NwYSwgKGNoYXIgKikgJmlpLT5paV9pcGFkZHIsIDQp
Ow0KDQoJbGVuID0gc2l6ZW9mKCplcCkgKyBzaXplb2YoKmFwKTsNCiNlbmRp
Zg0KDQpwcmludGYoIkRCRyAlcyBhc2tlZDsgJXMgcmVwbGllZFxuIiwgaHAt
PmhfbmFtZSwgZXRoZXJfbnRvYSgoc3RydWN0IGV0aGVyX2FkZHIgKilhcl90
aGEoYXApKSk7DQoJaWYgKGxmbGFnKQ0KCQlzeXNsb2coTE9HX0lORk8sICIl
cyBhc2tlZDsgJXMgcmVwbGllZCIsIGhwLT5oX25hbWUsIA0KCQkgICAgZXRo
ZXJfbnRvYSgoc3RydWN0IGV0aGVyX2FkZHIgKilhcl90aGEoYXApKSk7DQpw
cmludGYoIkRCRyB3cml0ZSB0byBmZCAlZFxuIiwgaWktPmlpX2ZkKTsNCglu
ID0gd3JpdGUoaWktPmlpX2ZkLCAoY2hhciAqKSBlcCwgbGVuKTsNCglpZiAo
biAhPSBsZW4pIHsNCgkJcmFycGVycihOT05GQVRBTCwgIndyaXRlOiBvbmx5
ICVkIG9mICVkIGJ5dGVzIHdyaXR0ZW4iLCBuLCBsZW4pOw0KCX0NCn0NCi8q
DQogKiBHZXQgdGhlIG5ldG1hc2sgb2YgYW4gSVAgYWRkcmVzcy4gIFRoaXMg
cm91dGluZSBpcyB1c2VkIGlmDQogKiBTSU9DR0lGTkVUTUFTSyBkb2Vzbid0
IHdvcmsuDQogKi8NCnVfaW50MzJfdA0KaXBhZGRydG9uZXRtYXNrKGFkZHIp
DQoJdV9pbnQzMl90ICBhZGRyOw0Kew0KDQoJaWYgKElOX0NMQVNTQShhZGRy
KSkNCgkJcmV0dXJuIElOX0NMQVNTQV9ORVQ7DQoJaWYgKElOX0NMQVNTQihh
ZGRyKSkNCgkJcmV0dXJuIElOX0NMQVNTQl9ORVQ7DQoJaWYgKElOX0NMQVNT
QyhhZGRyKSkNCgkJcmV0dXJuIElOX0NMQVNTQ19ORVQ7DQoJcmFycGVycihG
QVRBTCwgInVua25vd24gSVAgYWRkcmVzcyBjbGFzczogJTA4WCIsIGFkZHIp
Ow0KCS8qIE5PVFJFQUNIRUQgKi8NCglyZXR1cm4oLTEpOw0KfQ0KDQojaWYg
X19TVERDX18NCiNpbmNsdWRlIDxzdGRhcmcuaD4NCiNlbHNlDQojaW5jbHVk
ZSA8dmFyYXJncy5oPg0KI2VuZGlmDQoNCnZvaWQNCiNpZiBfX1NURENfXw0K
cmFycGVycihpbnQgZmF0YWwsIGNvbnN0IGNoYXIgKmZtdCwuLi4pDQojZWxz
ZQ0KcmFycGVycihmbXQsIHZhX2FsaXN0KQ0KCWludCAgICAgZmF0YWw7DQoJ
Y2hhciAgICpmbXQ7DQp2YV9kY2wNCiNlbmRpZg0Kew0KCXZhX2xpc3QgYXA7
DQoNCiNpZiBfX1NURENfXw0KCXZhX3N0YXJ0KGFwLCBmbXQpOw0KI2Vsc2UN
Cgl2YV9zdGFydChhcCk7DQojZW5kaWYNCglpZiAoZGZsYWcpIHsNCgkJaWYg
KGZhdGFsKQ0KCQkJKHZvaWQpZnByaW50ZihzdGRlcnIsICJyYXJwZDogZXJy
b3I6ICIpOw0KCQllbHNlDQoJCQkodm9pZClmcHJpbnRmKHN0ZGVyciwgInJh
cnBkOiB3YXJuaW5nOiAiKTsNCgkJKHZvaWQpdmZwcmludGYoc3RkZXJyLCBm
bXQsIGFwKTsNCgkJKHZvaWQpZnByaW50ZihzdGRlcnIsICJcbiIpOw0KCX0N
Cgl2c3lzbG9nKExPR19FUlIsIGZtdCwgYXApOw0KCXZhX2VuZChhcCk7DQoJ
aWYgKGZhdGFsKQ0KCQlleGl0KDEpOw0KCS8qIE5PVFJFQUNIRUQgKi8NCn0N
Cg0Kdm9pZA0KI2lmIF9fU1REQ19fDQpkZWJ1Zyhjb25zdCBjaGFyICpmbXQs
Li4uKQ0KI2Vsc2UNCmRlYnVnKGZtdCwgdmFfYWxpc3QpDQoJY2hhciAgICpm
bXQ7DQp2YV9kY2wNCiNlbmRpZg0Kew0KCXZhX2xpc3QgYXA7DQoNCiNpZiBf
X1NURENfXw0KCXZhX3N0YXJ0KGFwLCBmbXQpOw0KI2Vsc2UNCgl2YV9zdGFy
dChhcCk7DQojZW5kaWYNCglpZiAoZGZsYWcpIHsNCgkJKHZvaWQpZnByaW50
ZihzdGRlcnIsICJyYXJwZDogIik7DQoJCSh2b2lkKXZmcHJpbnRmKHN0ZGVy
ciwgZm10LCBhcCk7DQoJCSh2b2lkKWZwcmludGYoc3RkZXJyLCAiXG4iKTsN
Cgl9DQoJdnN5c2xvZyhMT0dfV0FSTklORywgZm10LCBhcCk7DQoJdmFfZW5k
KGFwKTsNCn0NCg==
--0-98428806-950209980=:22416--