Subject: Re: VIA ACE patch
To: Daniel de Kok <danieldk@pobox.com>
From: Daniel de Kok <danieldk@pobox.com>
List: port-i386
Date: 01/18/2007 17:51:36
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--0-1764314302-1169139096=:991
Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed

On Fri, 12 Jan 2007, Daniel de Kok wrote:
> I have mostly completed my port of the OpenBSD VIA ACE code, and I have 
> attached a patch. This area is pretty new to me, so please be gentle.

Here's the updated patch, primarily integrating Rui's suggestions.

-- Daniel
--0-1764314302-1169139096=:991
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=via_ace2.diff
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.NEB.4.64.0701181751360.991@liza.taickim.net>
Content-Description: 
Content-Disposition: attachment; filename=via_ace2.diff

SW5kZXg6IHN5cy9hcmNoL2kzODYvY29uZi9HRU5FUklDDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9hcmNo
L2kzODYvY29uZi9HRU5FUklDLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS44
MDMNCmRpZmYgLXUgLXIxLjgwMyBHRU5FUklDDQotLS0gc3lzL2FyY2gvaTM4
Ni9jb25mL0dFTkVSSUMJMTcgRGVjIDIwMDYgMjM6MDI6MDYgLTAwMDAJMS44
MDMNCisrKyBzeXMvYXJjaC9pMzg2L2NvbmYvR0VORVJJQwkxNCBKYW4gMjAw
NyAyMzoyMjo0OSAtMDAwMA0KQEAgLTUyLDYgKzUyLDkgQEANCiAjIEFNRCBQ
b3dlck5vdyEgYW5kIENvb2xgbidRdWlldCB0ZWNobm9sb2d5DQogb3B0aW9u
cyAJUE9XRVJOT1dfSzgNCiANCisjIFZJQSBQYWRMb2NrDQorI29wdGlvbnMJ
VklBX1BBRExPQ0sNCisNCiBvcHRpb25zIAlNVFJSCQkjIG1lbW9yeS10eXBl
IHJhbmdlIHJlZ2lzdGVyIHN5c2NhbGwgc3VwcG9ydA0KICMgZG9lc24ndCB3
b3JrIHdpdGggTVAganVzdCB5ZXQuLg0KICNvcHRpb25zIAlQRVJGQ1RSUwkj
IHBlcmZvcm1hbmNlLW1vbml0b3JpbmcgY291bnRlcnMgc3VwcG9ydA0KSW5k
ZXg6IHN5cy9hcmNoL2kzODYvaTM4Ni9hdXRvY29uZi5jDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9hcmNo
L2kzODYvaTM4Ni9hdXRvY29uZi5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24g
MS44NA0KZGlmZiAtdSAtcjEuODQgYXV0b2NvbmYuYw0KLS0tIHN5cy9hcmNo
L2kzODYvaTM4Ni9hdXRvY29uZi5jCTcgSnVuIDIwMDYgMjI6Mzc6NTggLTAw
MDAJMS44NA0KKysrIHN5cy9hcmNoL2kzODYvaTM4Ni9hdXRvY29uZi5jCTE0
IEphbiAyMDA3IDIzOjIyOjUzIC0wMDAwDQpAQCAtOTEsNiArOTEsOCBAQA0K
ICNpbmNsdWRlIDxtYWNoaW5lL2t2bTg2Lmg+DQogI2VuZGlmDQogDQorI2lu
Y2x1ZGUgIm9wdF92aWFwYWRsb2NrLmgiDQorDQogLyoNCiAgKiBEZXRlcm1p
bmUgaS9vIGNvbmZpZ3VyYXRpb24gZm9yIGEgbWFjaGluZS4NCiAgKi8NCkBA
IC0xMzksNCArMTQxLDggQEANCiAjaWYgTkxBUElDID4gMA0KIAlsYXBpY190
cHIgPSAwOw0KICNlbmRpZg0KKw0KKyNpZiBkZWZpbmVkKEk2ODZfQ1BVKSAm
JiBkZWZpbmVkKFZJQV9QQURMT0NLKQ0KKwl2aWFfcGFkbG9ja19hdHRhY2go
KTsNCisjZW5kaWYgLyogZGVmaW5lZChJNjg2X0NQVSkgJiYgZGVmaW5lZChW
SUFfUEFETE9DSykgKi8NCiB9DQpJbmRleDogc3lzL2FyY2gvaTM4Ni9pMzg2
L2lkZW50Y3B1LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxl
OiAvY3Zzcm9vdC9zcmMvc3lzL2FyY2gvaTM4Ni9pMzg2L2lkZW50Y3B1LmMs
dg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjUyDQpkaWZmIC11IC1yMS41MiBp
ZGVudGNwdS5jDQotLS0gc3lzL2FyY2gvaTM4Ni9pMzg2L2lkZW50Y3B1LmMJ
MSBKYW4gMjAwNyAyMDo1Njo1OCAtMDAwMAkxLjUyDQorKysgc3lzL2FyY2gv
aTM4Ni9pMzg2L2lkZW50Y3B1LmMJMTQgSmFuIDIwMDcgMjM6MjI6NTYgLTAw
MDANCkBAIC02NTIsOCArNjUyLDEwIEBADQogdm9pZA0KIHZpYV9jcHVfcHJv
YmUoc3RydWN0IGNwdV9pbmZvICpjaSkNCiB7DQorCXVfaW50IG1vZGVsID0g
Q1BVSUQyTU9ERUwoY2ktPmNpX3NpZ25hdHVyZSk7DQorCXVfaW50IHN0ZXBw
aW5nID0gQ1BVSUQyU1RFUFBJTkcoY2ktPmNpX3NpZ25hdHVyZSk7DQogCXVf
aW50IGRlc2NzWzRdOw0KLQl1X2ludCBsZnVuYzsNCisJdV9pbnQgbGZ1bmMs
IG1zcjsNCiANCiAJLyoNCiAJICogRGV0ZXJtaW5lIHRoZSBsYXJnZXN0IGV4
dGVuZGVkIGZ1bmN0aW9uIHZhbHVlLg0KQEAgLTY2OCw2ICs2NzAsMjQgQEAN
CiAJCUNQVUlEKDB4ODAwMDAwMDEsIGRlc2NzWzBdLCBkZXNjc1sxXSwgZGVz
Y3NbMl0sIGRlc2NzWzNdKTsNCiAJCWNpLT5jaV9mZWF0dXJlX2ZsYWdzIHw9
IGRlc2NzWzNdOw0KIAl9DQorDQorCWlmIChtb2RlbCA+PSAweDkpIHsNCisJ
CS8qIE5laGVtaWFoIG9yIEVzdGhlciAqLw0KKwkJQ1BVSUQoMHhjMDAwMDAw
MCwgZGVzY3NbMF0sIGRlc2NzWzFdLCBkZXNjc1syXSwgZGVzY3NbM10pOw0K
KwkJbGZ1bmMgPSBkZXNjc1swXTsNCisJCWlmIChsZnVuYyA9PSAweGMwMDAw
MDAxKSB7DQorCQkJQ1BVSUQobGZ1bmMsIGRlc2NzWzBdLCBkZXNjc1sxXSwg
ZGVzY3NbMl0sIGRlc2NzWzNdKTsNCisJCQlsZnVuYyA9IGRlc2NzWzNdOw0K
KwkJCWlmIChtb2RlbCA+IDB4OSB8fCBzdGVwcGluZyA+PSA4KSB7CS8qIEFD
RSAqLw0KKwkJCQlpZiAoKGxmdW5jICYgMHhjMCkgPT0gMHhjMCkgew0KKwkJ
CQkJY2ktPmNpX3BhZGxvY2tfZmxhZ3MgfD0gQ1BVSURfRkVBVF9WQUNFOw0K
KwkJCQkJbXNyID0gcmRtc3IoTVNSX1ZJQV9BQ0UpOw0KKwkJCQkJd3Jtc3Io
TVNSX1ZJQV9BQ0UsDQorCQkJCQkgICAgbXNyIHwgTVNSX1ZJQV9BQ0VfRU5B
QkxFKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KIH0NCiANCiBjb25z
dCBjaGFyICoNCkluZGV4OiBzeXMvYXJjaC9pMzg2L2kzODYvbWFjaGRlcC5j
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qv
c3JjL3N5cy9hcmNoL2kzODYvaTM4Ni9tYWNoZGVwLmMsdg0KcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjU5Mg0KZGlmZiAtdSAtcjEuNTkyIG1hY2hkZXAuYw0K
LS0tIHN5cy9hcmNoL2kzODYvaTM4Ni9tYWNoZGVwLmMJNyBKYW4gMjAwNyAw
MTowNDoyNiAtMDAwMAkxLjU5Mg0KKysrIHN5cy9hcmNoL2kzODYvaTM4Ni9t
YWNoZGVwLmMJMTQgSmFuIDIwMDcgMjM6MjI6NTcgLTAwMDANCkBAIC0yMzYs
NiArMjM2LDcgQEANCiBpbnQJZHVtcG1lbV9oaWdoOw0KIHVuc2lnbmVkIGlu
dCBjcHVfZmVhdHVyZTsNCiB1bnNpZ25lZCBpbnQgY3B1X2ZlYXR1cmUyOw0K
K3Vuc2lnbmVkIGludCBjcHVfZmVhdHVyZV9wYWRsb2NrOw0KIGludAljcHVf
Y2xhc3M7DQogaW50CWkzODZfZnB1X3ByZXNlbnQ7DQogaW50CWkzODZfZnB1
X2V4Y2VwdGlvbjsNCkBAIC0xNTE2LDYgKzE1MTcsNyBAQA0KIAljcHVfcHJv
YmVfZmVhdHVyZXMoJmNwdV9pbmZvX3ByaW1hcnkpOw0KIAljcHVfZmVhdHVy
ZSA9IGNwdV9pbmZvX3ByaW1hcnkuY2lfZmVhdHVyZV9mbGFnczsNCiAJY3B1
X2ZlYXR1cmUyID0gY3B1X2luZm9fcHJpbWFyeS5jaV9mZWF0dXJlMl9mbGFn
czsNCisJY3B1X2ZlYXR1cmVfcGFkbG9jayA9IGNwdV9pbmZvX3ByaW1hcnku
Y2lfcGFkbG9ja19mbGFnczsNCiANCiAJcHJvYzBwYWRkciA9IFVBUkVBX1RP
X1VTRVIocHJvYzB1YXJlYSk7DQogCWx3cDAubF9hZGRyID0gcHJvYzBwYWRk
cjsNCkluZGV4OiBzeXMvYXJjaC9pMzg2L2luY2x1ZGUvY3B1LmgNCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMvc3lz
L2FyY2gvaTM4Ni9pbmNsdWRlL2NwdS5oLHYNCnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xMzANCmRpZmYgLXUgLXIxLjEzMCBjcHUuaA0KLS0tIHN5cy9hcmNo
L2kzODYvaW5jbHVkZS9jcHUuaAk4IERlYyAyMDA2IDE1OjA1OjE4IC0wMDAw
CTEuMTMwDQorKysgc3lzL2FyY2gvaTM4Ni9pbmNsdWRlL2NwdS5oCTE0IEph
biAyMDA3IDIzOjIzOjAxIC0wMDAwDQpAQCAtNTQsNiArNTQsNyBAQA0KICNp
bmNsdWRlIDxtYWNoaW5lL3Rzcy5oPg0KICNpbmNsdWRlIDxtYWNoaW5lL2lu
dHJkZWZzLmg+DQogI2luY2x1ZGUgPHg4Ni9jYWNoZWluZm8uaD4NCisjaW5j
bHVkZSA8eDg2L3ZpYV9wYWRsb2NrLmg+DQogDQogI2luY2x1ZGUgPHN5cy9k
ZXZpY2UuaD4NCiAjaW5jbHVkZSA8c3lzL2xvY2suaD4JCQkvKiB3aWxsIGFs
c28gZ2V0IExPQ0tERUJVRyAqLw0KQEAgLTEyMyw2ICsxMjQsNyBAQA0KIAl1
aW50MzJfdAljaV9mZWF0dXJlX2ZsYWdzOy8qIFg4NiAlZWR4IENQVUlEIGZl
YXR1cmUgYml0cyAqLw0KIAl1aW50MzJfdAljaV9mZWF0dXJlMl9mbGFnczsv
KiBYODYgJWVjeCBDUFVJRCBmZWF0dXJlIGJpdHMgKi8NCiAJdWludDMyX3QJ
Y2lfZmVhdHVyZTNfZmxhZ3M7LyogWDg2IGV4dGVuZGVkIGZlYXR1cmUgYml0
cyAqLw0KKwl1aW50MzJfdAljaV9wYWRsb2NrX2ZsYWdzOy8qIFZJQSBQYWRM
b2NrIGZlYXR1cmUgYml0cyAqLw0KIAl1aW50MzJfdAljaV9jcHVfY2xhc3M7
CSAvKiBDUFUgY2xhc3MgKi8NCiAJdWludDMyX3QJY2lfYnJhbmRfaWQ7CSAv
KiBJbnRlbCBicmFuZCBpZCAqLw0KIAl1aW50MzJfdAljaV92ZW5kb3JbNF07
CSAvKiB2ZW5kb3Igc3RyaW5nICovDQpAQCAtMTUwLDYgKzE1Miw4IEBADQog
CWNoYXIgKmNpX2RkYmlwaV9zdGFjazsNCiANCiAJc3RydWN0IGV2Y250IGNp
X2lwaV9ldmVudHNbWDg2X05JUEldOw0KKw0KKwlzdHJ1Y3QgdmlhX3BhZGxv
Y2sJY2lfdnA7CS8qIFZJQSBQYWRMb2NrIHByaXZhdGUgc3RvcmFnZSAqLw0K
IH07DQogDQogLyoNCkBAIC0zMzUsNiArMzM5LDcgQEANCiBleHRlcm4gaW50
IGJpb3NleHRtZW07DQogZXh0ZXJuIHVuc2lnbmVkIGludCBjcHVfZmVhdHVy
ZTsNCiBleHRlcm4gdW5zaWduZWQgaW50IGNwdV9mZWF0dXJlMjsNCitleHRl
cm4gdW5zaWduZWQgaW50IGNwdV9mZWF0dXJlX3BhZGxvY2s7DQogZXh0ZXJu
IGludCBjcHU7DQogZXh0ZXJuIGludCBjcHVfY2xhc3M7DQogZXh0ZXJuIGNo
YXIgY3B1X2JyYW5kX3N0cmluZ1tdOw0KSW5kZXg6IHN5cy9hcmNoL3g4Ni9j
b25mL2ZpbGVzLng4Ng0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZp
bGU6IC9jdnNyb290L3NyYy9zeXMvYXJjaC94ODYvY29uZi9maWxlcy54ODYs
dg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjIxDQpkaWZmIC11IC1yMS4yMSBm
aWxlcy54ODYNCi0tLSBzeXMvYXJjaC94ODYvY29uZi9maWxlcy54ODYJMSBK
YW4gMjAwNyAyMDo1Njo1OSAtMDAwMAkxLjIxDQorKysgc3lzL2FyY2gveDg2
L2NvbmYvZmlsZXMueDg2CTE0IEphbiAyMDA3IDIzOjIzOjE2IC0wMDAwDQpA
QCAtMTMsNiArMTMsMTAgQEANCiAjIEFNRCBQb3dlcm5vdy9Db29sYG4nUXVp
ZXQgVGVjaG5vbG9neQ0KIGRlZmZsYWcgb3B0X3Bvd2Vybm93X2s4LmgJUE9X
RVJOT1dfSzgNCiANCisjIFZJQSBQYWRMb2NrIHN1cHBvcnQNCitkZWZmbGFn
CW9wdF92aWFwYWRsb2NrLmgJVklBX1BBRExPQ0s6CW9wZW5jcnlwdG8NCitm
aWxlCWFyY2gveDg2L3g4Ni92aWFfcGFkbG9jay5jCXZpYV9wYWRsb2NrDQor
DQogZGVmaW5lICBjcHVidXMgeyBbYXBpZCA9IC0xXSB9DQogZGVmaW5lICBp
cG1pYnVzIHt9DQogDQpJbmRleDogc3lzL2FyY2gveDg2L2luY2x1ZGUvc3Bl
Y2lhbHJlZy5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog
L2N2c3Jvb3Qvc3JjL3N5cy9hcmNoL3g4Ni9pbmNsdWRlL3NwZWNpYWxyZWcu
aCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTINCmRpZmYgLXUgLXIxLjEy
IHNwZWNpYWxyZWcuaA0KLS0tIHN5cy9hcmNoL3g4Ni9pbmNsdWRlL3NwZWNp
YWxyZWcuaAkxIEphbiAyMDA3IDIwOjU2OjU5IC0wMDAwCTEuMTINCisrKyBz
eXMvYXJjaC94ODYvaW5jbHVkZS9zcGVjaWFscmVnLmgJMTQgSmFuIDIwMDcg
MjM6MjM6MTggLTAwMDANCkBAIC0xNTUsNiArMTU1LDEzIEBADQogCQkJCSAg
ICAiXDAzNzNETk9XMlwwNDAzRE5PVyINCiANCiAvKg0KKyAqICJGZWF0dXJl
cyIgdGhhdCBhcmUgY29waWVkIGZyb20gZWxzZXdoZXJlIC0tIG5vdCBuZWNl
c3NhcmlseSB0aWVkIHRvDQorICogYSBzcGVjaWZpYyBDUFVJRCByZXNwb25z
ZQ0KKyAqLw0KKw0KKyNkZWZpbmUgQ1BVSURfRkVBVF9WQUNFCTB4MDAwMDAw
MDIJLyogVklBIEMzIEFFUyBDcnlwdG8gRXh0ZW5zaW9uICovDQorDQorLyoN
CiAgKiBDUFVJRCAiZmVhdHVyZXMiIGJpdHMgaW4gJWVjeA0KICAqLw0KIA0K
QEAgLTI3OCw2ICsyODUsMTggQEANCiAjZGVmaW5lIE1TUl9NQzNfTUlTQwkJ
MHg0MTMNCiANCiAvKg0KKyAqIFZJQSAiTmVoZW1pYWgiIE1TUnMNCisgKi8N
CisjZGVmaW5lIE1TUl9WSUFfUk5HCQkweDAwMDAxMTBiDQorI2RlZmluZSBN
U1JfVklBX1JOR19FTkFCTEUJMHgwMDAwMDA0MA0KKyNkZWZpbmUgTVNSX1ZJ
QV9STkdfTk9JU0VfTUFTSwkweDAwMDAwMzAwDQorI2RlZmluZSBNU1JfVklB
X1JOR19OT0lTRV9BCTB4MDAwMDAwMDANCisjZGVmaW5lIE1TUl9WSUFfUk5H
X05PSVNFX0IJMHgwMDAwMDEwMA0KKyNkZWZpbmUgTVNSX1ZJQV9STkdfMk5P
SVNFCTB4MDAwMDAzMDANCisjZGVmaW5lIE1TUl9WSUFfQUNFCQkweDAwMDAx
MTA3DQorI2RlZmluZSBNU1JfVklBX0FDRV9FTkFCTEUJMHgxMDAwMDAwMA0K
Kw0KKy8qDQogICogQU1EIEs2L0s3IE1TUnMuDQogICovDQogI2RlZmluZQlN
U1JfSzZfVVdDQ1IJCTB4YzAwMDAwODUNCkluZGV4OiBzeXMvYXJjaC94ODYv
aW5jbHVkZS92aWFfcGFkbG9jay5oDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQpSQ1MgZmlsZTogc3lzL2FyY2gveDg2L2luY2x1ZGUvdmlhX3BhZGxvY2su
aA0KZGlmZiAtTiBzeXMvYXJjaC94ODYvaW5jbHVkZS92aWFfcGFkbG9jay5o
DQotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDANCisr
KyBzeXMvYXJjaC94ODYvaW5jbHVkZS92aWFfcGFkbG9jay5oCTE0IEphbiAy
MDA3IDIzOjIzOjE4IC0wMDAwDQpAQCAtMCwwICsxLDc3IEBADQorLyoJJE5l
dEJTRCQJKi8NCisNCisvKi0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgSmFz
b24gV3JpZ2h0DQorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IFRoZW8g
ZGUgUmFhZHQNCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICog
UGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1
dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55DQorICogcHVycG9zZSB3aXRoIG9y
IHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0
IHRoZSBhYm92ZQ0KKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy
bWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuDQorICoNCisg
KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFV
VEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMNCisgKiBXSVRIIFJFR0FS
RCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJS
QU5USUVTIE9GDQorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1INCisg
KiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTDQorICogV0hBVFNPRVZFUiBS
RVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBX
SEVUSEVSIElOIEFODQorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdF
TkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YN
CisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JN
QU5DRSBPRiBUSElTIFNPRlRXQVJFLg0KKyAqLw0KKw0KKyNpZm5kZWYgX1g4
Nl9WSUFfUEFETE9DS19IXw0KKyNkZWZpbmUgX1g4Nl9WSUFfUEFETE9DS19I
Xw0KKw0KKyNpZmRlZiBfS0VSTkVMDQorDQorI2luY2x1ZGUgPGNyeXB0by9y
aWpuZGFlbC9yaWpuZGFlbC5oPg0KKw0KKy8qIFZJQSBDMyB4Y3J5cHQtKiBp
bnN0cnVjdGlvbiBjb250ZXh0IGNvbnRyb2wgb3B0aW9ucyAqLw0KKyNkZWZp
bmUgQzNfQ1JZUFRfQ1dMT19ST1VORF9NCQkweDAwMDAwMDBmDQorI2RlZmlu
ZSBDM19DUllQVF9DV0xPX0FMR19NCQkweDAwMDAwMDcwDQorI2RlZmluZSBD
M19DUllQVF9DV0xPX0FMR19BRVMJCTB4MDAwMDAwMDANCisjZGVmaW5lIEMz
X0NSWVBUX0NXTE9fS0VZR0VOX00JCTB4MDAwMDAwODANCisjZGVmaW5lIEMz
X0NSWVBUX0NXTE9fS0VZR0VOX0hXCQkweDAwMDAwMDAwDQorI2RlZmluZSBD
M19DUllQVF9DV0xPX0tFWUdFTl9TVwkJMHgwMDAwMDA4MA0KKyNkZWZpbmUg
QzNfQ1JZUFRfQ1dMT19OT1JNQUwJCTB4MDAwMDAwMDANCisjZGVmaW5lIEMz
X0NSWVBUX0NXTE9fSU5URVJNRURJQVRFCTB4MDAwMDAxMDANCisjZGVmaW5l
IEMzX0NSWVBUX0NXTE9fRU5DUllQVAkJMHgwMDAwMDAwMA0KKyNkZWZpbmUg
QzNfQ1JZUFRfQ1dMT19ERUNSWVBUCQkweDAwMDAwMjAwDQorI2RlZmluZSBD
M19DUllQVF9DV0xPX0tFWTEyOAkJMHgwMDAwMDAwYSAgICAgIC8qIDEyOGJp
dCwgMTAgcmRzICovDQorI2RlZmluZSBDM19DUllQVF9DV0xPX0tFWTE5MgkJ
MHgwMDAwMDQwYyAgICAgIC8qIDE5MmJpdCwgMTIgcmRzICovDQorI2RlZmlu
ZSBDM19DUllQVF9DV0xPX0tFWTI1NgkJMHgwMDAwMDgwZSAgICAgIC8qIDI1
NmJpdCwgMTUgcmRzICovDQorDQorc3RydWN0IHZpYV9wYWRsb2NrX3Nlc3Np
b24gew0KKyAgICAgICAgdV9pbnQzMl90CXNlc19la2V5WzQgKiAoUklKTkRB
RUxfTUFYTlIgKyAxKSArIDRdOwkvKiAxMjggYml0IGFsaWduZWQgKi8NCisg
ICAgICAgIHVfaW50MzJfdAlzZXNfZGtleVs0ICogKFJJSk5EQUVMX01BWE5S
ICsgMSkgKyA0XTsJLyogMTI4IGJpdCBhbGlnbmVkICovDQorICAgICAgICB1
X2ludDhfdAlzZXNfaXZbMTZdOwkJCQkvKiAxMjggYml0IGFsaWduZWQgKi8N
CisgICAgICAgIHVfaW50MzJfdAlzZXNfY3cwOw0KKyAgICAgICAgc3RydWN0
IHN3Y3JfZGF0YQkqc3dkOw0KKyAgICAgICAgaW50CXNlc19rbGVuOw0KKyAg
ICAgICAgaW50CXNlc191c2VkOw0KK307DQorDQorc3RydWN0IHZpYV9wYWRs
b2NrX3NvZnRjIHsNCisJdV9pbnQzMl90CW9wX2N3WzRdOwkvKiAxMjggYml0
IGFsaWduZWQgKi8NCisJdV9pbnQ4X3QJb3BfaXZbMTZdOwkvKiAxMjggYml0
IGFsaWduZWQgKi8NCisJdm9pZAkJKm9wX2J1ZjsNCisNCisJLyogbm9ybWFs
IHNvZnRjIHN0dWZmICovDQorCWludDMyX3QJCXNjX2NpZDsNCisJaW50CQlz
Y19uc2Vzc2lvbnM7DQorCXN0cnVjdCB2aWFfcGFkbG9ja19zZXNzaW9uICpz
Y19zZXNzaW9uczsNCit9Ow0KKw0KKyNkZWZpbmUgVklBQzNfU0VTU0lPTihz
aWQpCSgoc2lkKSAmIDB4MGZmZmZmZmYpDQorI2RlZmluZSBWSUFDM19TSUQo
Y3JkLHNlcykJKCgoY3JkKSA8PCAyOCkgfCAoKHNlcykgJiAweDBmZmZmZmZm
KSkNCisNCitzdHJ1Y3QgY3B1X2luZm87DQorDQorc3RydWN0IHZpYV9wYWRs
b2NrIHsNCisJc3RydWN0IGNwdV9pbmZvCQkqdnBfY2k7DQorCWludAkJCXZw
X2ZyZXE7DQorfTsNCisNCit2b2lkCXZpYV9wYWRsb2NrX2F0dGFjaCh2b2lk
KTsNCisNCisjZW5kaWYgLyogX0tFUk5FTCAqLw0KKyNlbmRpZiAvKiBfWDg2
X1ZJQV9QQURMT0NLX0hfICovDQpJbmRleDogc3lzL2FyY2gveDg2L3g4Ni92
aWFfcGFkbG9jay5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmls
ZTogc3lzL2FyY2gveDg2L3g4Ni92aWFfcGFkbG9jay5jDQpkaWZmIC1OIHN5
cy9hcmNoL3g4Ni94ODYvdmlhX3BhZGxvY2suYw0KLS0tIC9kZXYvbnVsbAkx
IEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwDQorKysgc3lzL2FyY2gveDg2L3g4
Ni92aWFfcGFkbG9jay5jCTE0IEphbiAyMDA3IDIzOjIzOjIyIC0wMDAwDQpA
QCAtMCwwICsxLDQ4MSBAQA0KKy8qCSRPcGVuQlNEOiB2aWEuYyx2IDEuOCAy
MDA2LzExLzE3IDA3OjQ3OjU2IHRvbSBFeHAgJAkqLw0KKy8qCSROZXRCU0QJ
Ki8NCisNCisvKi0NCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgSmFzb24gV3Jp
Z2h0DQorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IFRoZW8gZGUgUmFh
ZHQNCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUGVybWlz
c2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhp
cyBzb2Z0d2FyZSBmb3IgYW55DQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhv
dXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBh
Ym92ZQ0KKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv
biBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuDQorICoNCisgKiBUSEUg
U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBE
SVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMNCisgKiBXSVRIIFJFR0FSRCBUTyBU
SElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVT
IE9GDQorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1INCisgKiBBTlkg
U1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIE9SIEFOWSBEQU1BR0VTDQorICogV0hBVFNPRVZFUiBSRVNVTFRJ
TkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVS
IElOIEFODQorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9S
IE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YNCisgKiBP
UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBP
RiBUSElTIFNPRlRXQVJFLg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxzeXMvY2Rl
ZnMuaD4NCitfX0tFUk5FTF9SQ1NJRCgwLCAiJE5ldEJTRCQiKTsNCisNCisj
aW5jbHVkZSAib3B0X3ZpYXBhZGxvY2suaCINCisNCisjaW5jbHVkZSA8c3lz
L3BhcmFtLmg+DQorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPg0KKyNpbmNsdWRl
IDxzeXMvc2lnbmFsdmFyLmg+DQorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4N
CisjaW5jbHVkZSA8c3lzL3JuZC5oPg0KKyNpbmNsdWRlIDxzeXMvbWFsbG9j
Lmg+DQorI2luY2x1ZGUgPHN5cy9tYnVmLmg+DQorDQorI2luY2x1ZGUgPG1h
Y2hpbmUvY3B1Lmg+DQorI2luY2x1ZGUgPHg4Ni9zcGVjaWFscmVnLmg+DQor
DQorI2luY2x1ZGUgPG9wZW5jcnlwdG8vY3J5cHRvZGV2Lmg+DQorI2luY2x1
ZGUgPG9wZW5jcnlwdG8vY3J5cHRvc29mdC5oPg0KKyNpbmNsdWRlIDxvcGVu
Y3J5cHRvL3hmb3JtLmg+DQorI2luY2x1ZGUgPGNyeXB0by9yaWpuZGFlbC9y
aWpuZGFlbC5oPg0KKw0KKyNpbmNsdWRlIDxvcGVuY3J5cHRvL2NyeXB0b3Nv
ZnRfeGZvcm0uYz4NCisNCisjaWZkZWYgVklBX1BBRExPQ0sNCisNCitpbnQJ
dmlhX3BhZGxvY2tfY3J5cHRvX25ld3Nlc3Npb24odm9pZCAqLCB1X2ludDMy
X3QgKiwgc3RydWN0IGNyeXB0b2luaSAqKTsNCitpbnQJdmlhX3BhZGxvY2tf
Y3J5cHRvX3Byb2Nlc3Modm9pZCAqLCBzdHJ1Y3QgY3J5cHRvcCAqLCBpbnQp
Ow0KK2ludAl2aWFfcGFkbG9ja19jcnlwdG9fc3dhdXRoKHN0cnVjdCBjcnlw
dG9wICosIHN0cnVjdCBjcnlwdG9kZXNjICosDQorCSAgICBzdHJ1Y3Qgc3dj
cl9kYXRhICosIGNhZGRyX3QpOw0KK2ludAl2aWFfcGFkbG9ja19jcnlwdG9f
ZW5jZGVjKHN0cnVjdCBjcnlwdG9wICosIHN0cnVjdCBjcnlwdG9kZXNjICos
DQorCSAgICBzdHJ1Y3QgdmlhX3BhZGxvY2tfc2Vzc2lvbiAqLCBzdHJ1Y3Qg
dmlhX3BhZGxvY2tfc29mdGMgKiwgY2FkZHJfdCk7DQoraW50CXZpYV9wYWRs
b2NrX2NyeXB0b19mcmVlc2Vzc2lvbih2b2lkICosIHVfaW50NjRfdCk7DQor
c3RhdGljCV9faW5saW5lIHZvaWQgdmlhX3BhZGxvY2tfY2JjKHZvaWQgKiwg
dm9pZCAqLCB2b2lkICosIHZvaWQgKiwgaW50LA0KKwkgICAgdm9pZCAqKTsN
CisNCit2b2lkDQordmlhX3BhZGxvY2tfYXR0YWNoKHZvaWQpDQorew0KKwlp
ZiAoIShjcHVfZmVhdHVyZV9wYWRsb2NrICYgQ1BVSURfRkVBVF9WQUNFKSkN
CisJCXJldHVybjsNCisNCisJc3RydWN0IHZpYV9wYWRsb2NrX3NvZnRjICp2
cF9zYzsNCisJaWYgKCh2cF9zYyA9IG1hbGxvYyhzaXplb2YoKnZwX3NjKSwg
TV9ERVZCVUYsIE1fTk9XQUlUKSkgPT0gTlVMTCkNCisJCXJldHVybjsNCisJ
bWVtc2V0KHZwX3NjLCAwLCBzaXplb2YoKnZwX3NjKSk7DQorDQorCXZwX3Nj
LT5zY19jaWQgPSBjcnlwdG9fZ2V0X2RyaXZlcmlkKDApOw0KKwlpZiAodnBf
c2MtPnNjX2NpZCA8IDApIHsNCisJCXByaW50ZigiUGFkTG9jazogQ291bGQg
bm90IGdldCBhIGNyeXB0byBkcml2ZXIgSURcbiIpOw0KKwkJZnJlZSh2cF9z
YywgTV9ERVZCVUYpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCS8qDQorCSAq
IEFzayB0aGUgb3BlbmNyeXB0byBzdWJzeXN0ZW0gdG8gcmVnaXN0ZXIgb3Vy
c2VsdmVzLiBBbHRob3VnaA0KKwkgKiB3ZSBkb24ndCBzdXBwb3J0IGhhcmR3
YXJlIG9mZmxvYWRpbmcgZm9yIHZhcmlvdXMgSE1BQyBhbGdvcml0aG1zLA0K
KwkgKiB3ZSB3aWxsIGhhbmRsZSB0aGVtLCBiZWNhdXNlIG9wZW5jcnlwdG8g
cHJlZmVycyBkcml2ZXJzIHRoYXQNCisJICogc3VwcG9ydCBhbGwgcmVxdWVz
dGVkIGFsZ29yaXRobXMuDQorCSAqLw0KKyNkZWZpbmUgUkVHSVNURVIoYWxn
KSBcDQorCWNyeXB0b19yZWdpc3Rlcih2cF9zYy0+c2NfY2lkLCBhbGcsIDAs
IDAsIFwNCisJICAgIHZpYV9wYWRsb2NrX2NyeXB0b19uZXdzZXNzaW9uLCB2
aWFfcGFkbG9ja19jcnlwdG9fZnJlZXNlc3Npb24sIFwNCisJICAgIHZpYV9w
YWRsb2NrX2NyeXB0b19wcm9jZXNzLCB2cF9zYyk7DQorDQorCVJFR0lTVEVS
KENSWVBUT19BRVNfQ0JDKTsNCisJUkVHSVNURVIoQ1JZUFRPX01ENV9ITUFD
KTsNCisJUkVHSVNURVIoQ1JZUFRPX1NIQTFfSE1BQyk7DQorCVJFR0lTVEVS
KENSWVBUT19SSVBFTUQxNjBfSE1BQyk7DQorCVJFR0lTVEVSKENSWVBUT19T
SEEyX0hNQUMpOw0KKw0KKwlwcmludGYoIlBhZExvY2s6IHJlZ2lzdGVyZWQg
c3VwcG9ydCBmb3IgQUVTX0NCQ1xuIik7DQorfQ0KKw0KK2ludA0KK3ZpYV9w
YWRsb2NrX2NyeXB0b19uZXdzZXNzaW9uKHZvaWQgKmFyZywgdV9pbnQzMl90
ICpzaWRwLCBzdHJ1Y3QgY3J5cHRvaW5pICpjcmkpDQorew0KKwlzdHJ1Y3Qg
Y3J5cHRvaW5pICpjOw0KKwlzdHJ1Y3QgdmlhX3BhZGxvY2tfc29mdGMgKnNj
ID0gYXJnOw0KKwlzdHJ1Y3QgdmlhX3BhZGxvY2tfc2Vzc2lvbiAqc2VzID0g
TlVMTDsNCisJY29uc3Qgc3RydWN0IHN3Y3JfYXV0aF9oYXNoICpheGY7DQor
CXN0cnVjdCBzd2NyX2RhdGEgKnN3ZDsNCisJaW50IHNlc24sIGksIGN3MDsN
CisNCisJS0FTU0VSVChzYyAhPSBOVUxMIC8qLCAoInZpYV9wYWRsb2NrX2Ny
eXB0b19mcmVlc2Vzc2lvbjogbnVsbCBzb2Z0YyIpKi8pOw0KKwlpZiAoc2Mg
PT0gTlVMTCB8fCBzaWRwID09IE5VTEwgfHwgY3JpID09IE5VTEwpDQorCQly
ZXR1cm4gKEVJTlZBTCk7DQorDQorCWlmIChzYy0+c2Nfc2Vzc2lvbnMgPT0g
TlVMTCkgew0KKwkJc2VzID0gc2MtPnNjX3Nlc3Npb25zID0gbWFsbG9jKHNp
emVvZigqc2VzKSwgTV9ERVZCVUYsDQorCQkgICAgTV9OT1dBSVQpOw0KKwkJ
aWYgKHNlcyA9PSBOVUxMKQ0KKwkJCXJldHVybiAoRU5PTUVNKTsNCisJCXNl
c24gPSAwOw0KKwkJc2MtPnNjX25zZXNzaW9ucyA9IDE7DQorCX0gZWxzZSB7
DQorCQlmb3IgKHNlc24gPSAwOyBzZXNuIDwgc2MtPnNjX25zZXNzaW9uczsg
c2VzbisrKSB7DQorCQkJaWYgKHNjLT5zY19zZXNzaW9uc1tzZXNuXS5zZXNf
dXNlZCA9PSAwKSB7DQorCQkJCXNlcyA9ICZzYy0+c2Nfc2Vzc2lvbnNbc2Vz
bl07DQorCQkJCWJyZWFrOw0KKwkJCX0NCisJCX0NCisNCisJCWlmIChzZXMg
PT0gTlVMTCkgew0KKwkJCXNlc24gPSBzYy0+c2NfbnNlc3Npb25zOw0KKwkJ
CXNlcyA9IG1hbGxvYygoc2VzbiArIDEpICogc2l6ZW9mKCpzZXMpLCBNX0RF
VkJVRiwNCisJCQkgICAgTV9OT1dBSVQpOw0KKwkJCWlmIChzZXMgPT0gTlVM
TCkNCisJCQkJcmV0dXJuIChFTk9NRU0pOw0KKwkJCW1lbWNweShzZXMsIHNj
LT5zY19zZXNzaW9ucywgc2VzbiAqIHNpemVvZigqc2VzKSk7DQorCQkJbWVt
c2V0KHNjLT5zY19zZXNzaW9ucywgMCwgc2VzbiAqIHNpemVvZigqc2VzKSk7
DQorCQkJZnJlZShzYy0+c2Nfc2Vzc2lvbnMsIE1fREVWQlVGKTsNCisJCQlz
Yy0+c2Nfc2Vzc2lvbnMgPSBzZXM7DQorCQkJc2VzID0gJnNjLT5zY19zZXNz
aW9uc1tzZXNuXTsNCisJCQlzYy0+c2NfbnNlc3Npb25zKys7DQorCQl9DQor
CX0NCisNCisJbWVtc2V0KHNlcywgMCwgc2l6ZW9mKCpzZXMpKTsNCisJc2Vz
LT5zZXNfdXNlZCA9IDE7DQorDQorCWZvciAoYyA9IGNyaTsgYyAhPSBOVUxM
OyBjID0gYy0+Y3JpX25leHQpIHsNCisJCXN3aXRjaCAoYy0+Y3JpX2FsZykg
ew0KKwkJY2FzZSBDUllQVE9fQUVTX0NCQzoNCisJCQlzd2l0Y2ggKGMtPmNy
aV9rbGVuKSB7DQorCQkJY2FzZSAxMjg6DQorCQkJCWN3MCA9IEMzX0NSWVBU
X0NXTE9fS0VZMTI4Ow0KKwkJCQlicmVhazsNCisJCQljYXNlIDE5MjoNCisJ
CQkJY3cwID0gQzNfQ1JZUFRfQ1dMT19LRVkxOTI7DQorCQkJCWJyZWFrOw0K
KwkJCWNhc2UgMjU2Og0KKwkJCQljdzAgPSBDM19DUllQVF9DV0xPX0tFWTI1
NjsNCisJCQkJYnJlYWs7DQorCQkJZGVmYXVsdDoNCisJCQkJcmV0dXJuIChF
SU5WQUwpOw0KKwkJCX0NCisJCQljdzAgfD0gQzNfQ1JZUFRfQ1dMT19BTEdf
QUVTIHwNCisJCQkJQzNfQ1JZUFRfQ1dMT19LRVlHRU5fU1cgfA0KKwkJCQlD
M19DUllQVF9DV0xPX05PUk1BTDsNCisNCisjaWZkZWYgX19OZXRCU0RfXw0K
KwkJCXJuZF9leHRyYWN0X2RhdGEoc2VzLT5zZXNfaXYsIHNpemVvZihzZXMt
PnNlc19pdiksDQorCQkJICAgIFJORF9FWFRSQUNUX0FOWSk7DQorI2Vsc2UN
CisJCQlnZXRfcmFuZG9tX2J5dGVzKHNlcy0+c2VzX2l2LCBzaXplb2Yoc2Vz
LT5zZXNfaXYpKTsNCisjZW5kaWYNCisJCQlzZXMtPnNlc19rbGVuID0gYy0+
Y3JpX2tsZW47DQorCQkJc2VzLT5zZXNfY3cwID0gY3cwOw0KKw0KKwkJCS8q
IEJ1aWxkIGV4cGFuZGVkIGtleXMgZm9yIGJvdGggZGlyZWN0aW9ucyAqLw0K
KwkJCXJpam5kYWVsS2V5U2V0dXBFbmMoc2VzLT5zZXNfZWtleSwgYy0+Y3Jp
X2tleSwNCisJCQkgICAgYy0+Y3JpX2tsZW4pOw0KKwkJCXJpam5kYWVsS2V5
U2V0dXBEZWMoc2VzLT5zZXNfZGtleSwgYy0+Y3JpX2tleSwNCisJCQkgICAg
Yy0+Y3JpX2tsZW4pOw0KKwkJCWZvciAoaSA9IDA7IGkgPCA0ICogKFJJSk5E
QUVMX01BWE5SICsgMSk7IGkrKykgew0KKwkJCQlzZXMtPnNlc19la2V5W2ld
ID0gbnRvaGwoc2VzLT5zZXNfZWtleVtpXSk7DQorCQkJCXNlcy0+c2VzX2Rr
ZXlbaV0gPSBudG9obChzZXMtPnNlc19ka2V5W2ldKTsNCisJCQl9DQorDQor
CQkJYnJlYWs7DQorDQorCQkvKiBVc2UgaGFzaGluZyBpbXBsZW1lbnRhdGlv
bnMgZnJvbSB0aGUgY3J5cHRvc29mdCBjb2RlLiAqLw0KKwkJY2FzZSBDUllQ
VE9fTUQ1X0hNQUM6DQorCQkJYXhmID0gJnN3Y3JfYXV0aF9oYXNoX2htYWNf
bWQ1Xzk2Ow0KKwkJCWdvdG8gYXV0aGNvbW1vbjsNCisJCWNhc2UgQ1JZUFRP
X1NIQTFfSE1BQzoNCisJCQlheGYgPSAmc3djcl9hdXRoX2hhc2hfaG1hY19z
aGExXzk2Ow0KKwkJCWdvdG8gYXV0aGNvbW1vbjsNCisJCWNhc2UgQ1JZUFRP
X1JJUEVNRDE2MF9ITUFDOg0KKwkJCWF4ZiA9ICZzd2NyX2F1dGhfaGFzaF9o
bWFjX3JpcGVtZF8xNjBfOTY7DQorCQkJZ290byBhdXRoY29tbW9uOw0KKwkJ
Y2FzZSBDUllQVE9fU0hBMl9ITUFDOg0KKwkJCWlmIChjcmktPmNyaV9rbGVu
ID09IDI1NikNCisJCQkJYXhmID0gJnN3Y3JfYXV0aF9oYXNoX2htYWNfc2hh
Ml8yNTY7DQorCQkJZWxzZSBpZiAoY3JpLT5jcmlfa2xlbiA9PSAzODQpDQor
CQkJCWF4ZiA9ICZzd2NyX2F1dGhfaGFzaF9obWFjX3NoYTJfMzg0Ow0KKwkJ
CWVsc2UgaWYgKGNyaS0+Y3JpX2tsZW4gPT0gNTEyKQ0KKwkJCQlheGYgPSAm
c3djcl9hdXRoX2hhc2hfaG1hY19zaGEyXzUxMjsNCisJCQllbHNlIHsNCisJ
CQkJcmV0dXJuIEVJTlZBTDsNCisJCQl9DQorCQlhdXRoY29tbW9uOg0KKwkJ
CU1BTExPQyhzd2QsIHN0cnVjdCBzd2NyX2RhdGEgKiwNCisJCQkgICAgc2l6
ZW9mKHN0cnVjdCBzd2NyX2RhdGEpLCBNX0NSWVBUT19EQVRBLA0KKwkJCSAg
ICBNX05PV0FJVCk7DQorCQkJaWYgKHN3ZCA9PSBOVUxMKSB7DQorCQkJCXZp
YV9wYWRsb2NrX2NyeXB0b19mcmVlc2Vzc2lvbihzYywgc2Vzbik7DQorCQkJ
CXJldHVybiAoRU5PTUVNKTsNCisJCQl9DQorCQkJbWVtc2V0KHN3ZCwgMCwg
c2l6ZW9mKHN0cnVjdCBzd2NyX2RhdGEpKTsNCisJCQlzZXMtPnN3ZCA9IHN3
ZDsNCisNCisJCQlzd2QtPnN3X2ljdHggPSBtYWxsb2MoYXhmLT5hdXRoX2hh
c2gtPmN0eHNpemUsDQorCQkJICAgIE1fQ1JZUFRPX0RBVEEsIE1fTk9XQUlU
KTsNCisJCQlpZiAoc3dkLT5zd19pY3R4ID09IE5VTEwpIHsNCisJCQkJdmlh
X3BhZGxvY2tfY3J5cHRvX2ZyZWVzZXNzaW9uKHNjLCBzZXNuKTsNCisJCQkJ
cmV0dXJuIChFTk9NRU0pOw0KKwkJCX0NCisNCisJCQlzd2QtPnN3X29jdHgg
PSBtYWxsb2MoYXhmLT5hdXRoX2hhc2gtPmN0eHNpemUsDQorCQkJICAgIE1f
Q1JZUFRPX0RBVEEsIE1fTk9XQUlUKTsNCisJCQlpZiAoc3dkLT5zd19vY3R4
ID09IE5VTEwpIHsNCisJCQkJdmlhX3BhZGxvY2tfY3J5cHRvX2ZyZWVzZXNz
aW9uKHNjLCBzZXNuKTsNCisJCQkJcmV0dXJuIChFTk9NRU0pOw0KKwkJCX0N
CisNCisJCQlmb3IgKGkgPSAwOyBpIDwgYy0+Y3JpX2tsZW4gLyA4OyBpKysp
DQorCQkJCWMtPmNyaV9rZXlbaV0gXj0gSE1BQ19JUEFEX1ZBTDsNCisNCisJ
CQlheGYtPkluaXQoc3dkLT5zd19pY3R4KTsNCisJCQlheGYtPlVwZGF0ZShz
d2QtPnN3X2ljdHgsIGMtPmNyaV9rZXksIGMtPmNyaV9rbGVuIC8gOCk7DQor
CQkJYXhmLT5VcGRhdGUoc3dkLT5zd19pY3R4LCBobWFjX2lwYWRfYnVmZmVy
LA0KKwkJCSAgICBITUFDX0JMT0NLX0xFTiAtIChjLT5jcmlfa2xlbiAvIDgp
KTsNCisNCisJCQlmb3IgKGkgPSAwOyBpIDwgYy0+Y3JpX2tsZW4gLyA4OyBp
KyspDQorCQkJCWMtPmNyaV9rZXlbaV0gXj0gKEhNQUNfSVBBRF9WQUwgXg0K
KwkJCQkgICAgSE1BQ19PUEFEX1ZBTCk7DQorDQorCQkJYXhmLT5Jbml0KHN3
ZC0+c3dfb2N0eCk7DQorCQkJYXhmLT5VcGRhdGUoc3dkLT5zd19vY3R4LCBj
LT5jcmlfa2V5LCBjLT5jcmlfa2xlbiAvIDgpOw0KKwkJCWF4Zi0+VXBkYXRl
KHN3ZC0+c3dfb2N0eCwgaG1hY19vcGFkX2J1ZmZlciwNCisJCQkgICAgSE1B
Q19CTE9DS19MRU4gLSAoYy0+Y3JpX2tsZW4gLyA4KSk7DQorDQorCQkJZm9y
IChpID0gMDsgaSA8IGMtPmNyaV9rbGVuIC8gODsgaSsrKQ0KKwkJCQljLT5j
cmlfa2V5W2ldIF49IEhNQUNfT1BBRF9WQUw7DQorDQorCQkJc3dkLT5zd19h
eGYgPSBheGY7DQorCQkJc3dkLT5zd19hbGcgPSBjLT5jcmlfYWxnOw0KKw0K
KwkJCWJyZWFrOw0KKwkJZGVmYXVsdDoNCisJCQlyZXR1cm4gKEVJTlZBTCk7
DQorCQl9DQorCX0NCisNCisJKnNpZHAgPSBWSUFDM19TSUQoMCwgc2Vzbik7
DQorCXJldHVybiAoMCk7DQorfQ0KKw0KK2ludA0KK3ZpYV9wYWRsb2NrX2Ny
eXB0b19mcmVlc2Vzc2lvbih2b2lkICphcmcsIHVfaW50NjRfdCB0aWQpDQor
ew0KKwlzdHJ1Y3QgdmlhX3BhZGxvY2tfc29mdGMgKnNjID0gYXJnOw0KKwlz
dHJ1Y3Qgc3djcl9kYXRhICpzd2Q7DQorCXN0cnVjdCBhdXRoX2hhc2ggKmF4
ZjsNCisJaW50IHNlc247DQorCXVfaW50MzJfdCBzaWQgPSAoKHVfaW50MzJf
dCl0aWQpICYgMHhmZmZmZmZmZjsNCisNCisJS0FTU0VSVChzYyAhPSBOVUxM
IC8qLCAoInZpYV9wYWRsb2NrX2NyeXB0b19mcmVlc2Vzc2lvbjogbnVsbCBz
b2Z0YyIpKi8pOw0KKwlpZiAoc2MgPT0gTlVMTCkNCisJCXJldHVybiAoRUlO
VkFMKTsNCisNCisJc2VzbiA9IFZJQUMzX1NFU1NJT04oc2lkKTsNCisJaWYg
KHNlc24gPj0gc2MtPnNjX25zZXNzaW9ucykNCisJCXJldHVybiAoRUlOVkFM
KTsNCisNCisJaWYgKHNjLT5zY19zZXNzaW9uc1tzZXNuXS5zd2QpIHsNCisJ
CXN3ZCA9IHNjLT5zY19zZXNzaW9uc1tzZXNuXS5zd2Q7DQorCQlheGYgPSBz
d2QtPnN3X2F4Zi0+YXV0aF9oYXNoOw0KKw0KKwkJaWYgKHN3ZC0+c3dfaWN0
eCkgew0KKwkJCW1lbXNldChzd2QtPnN3X2ljdHgsIDAsIGF4Zi0+Y3R4c2l6
ZSk7DQorCQkJZnJlZShzd2QtPnN3X2ljdHgsIE1fQ1JZUFRPX0RBVEEpOw0K
KwkJfQ0KKwkJaWYgKHN3ZC0+c3dfb2N0eCkgew0KKwkJCW1lbXNldChzd2Qt
PnN3X29jdHgsIDAsIGF4Zi0+Y3R4c2l6ZSk7DQorCQkJZnJlZShzd2QtPnN3
X29jdHgsIE1fQ1JZUFRPX0RBVEEpOw0KKwkJfQ0KKwkJRlJFRShzd2QsIE1f
Q1JZUFRPX0RBVEEpOw0KKwl9DQorDQorCW1lbXNldCgmc2MtPnNjX3Nlc3Np
b25zW3Nlc25dLCAwLCBzaXplb2Yoc2MtPnNjX3Nlc3Npb25zW3Nlc25dKSk7
DQorCXJldHVybiAoMCk7DQorfQ0KKw0KK3N0YXRpYyBfX2lubGluZSB2b2lk
DQordmlhX3BhZGxvY2tfY2JjKHZvaWQgKmN3LCB2b2lkICpzcmMsIHZvaWQg
KmRzdCwgdm9pZCAqa2V5LCBpbnQgcmVwLA0KKyAgICB2b2lkICppdikNCit7
DQorCXVuc2lnbmVkIGludCBjcmVnMDsNCisNCisJY3JlZzAgPSByY3IwKCk7
CQkvKiBQZXJtaXQgYWNjZXNzIHRvIFNJTUQvRlBVIHBhdGggKi8NCisJbGNy
MChjcmVnMCAmIH4oQ1IwX0VNfENSMF9UUykpOw0KKw0KKwkvKiBEbyB0aGUg
ZGVlZCAqLw0KKwlfX2FzbSBfX3ZvbGF0aWxlKCJwdXNoZmw7IHBvcGZsIik7
CS8qIGZvcmNlIGtleSByZWxvYWQgKi8NCisJX19hc20gX192b2xhdGlsZSgi
LmJ5dGUgMHhmMywgMHgwZiwgMHhhNywgMHhkMCIgOiAvKiByZXAgeGNyeXB0
LWNiYyAqLw0KKwkJCTogImEiIChpdiksICJiIiAoa2V5KSwgImMiIChyZXAp
LCAiZCIgKGN3KSwgIlMiIChzcmMpLCAiRCIgKGRzdCkNCisJCQk6ICJtZW1v
cnkiLCAiY2MiKTsNCisNCisJbGNyMChjcmVnMCk7DQorfQ0KKw0KK2ludA0K
K3ZpYV9wYWRsb2NrX2NyeXB0b19zd2F1dGgoc3RydWN0IGNyeXB0b3AgKmNy
cCwgc3RydWN0IGNyeXB0b2Rlc2MgKmNyZCwNCisgICAgc3RydWN0IHN3Y3Jf
ZGF0YSAqc3csIGNhZGRyX3QgYnVmKQ0KK3sNCisJaW50CXR5cGU7DQorDQor
CWlmIChjcnAtPmNycF9mbGFncyAmIENSWVBUT19GX0lNQlVGKQ0KKwkJdHlw
ZSA9IENSWVBUT19CVUZfTUJVRjsNCisJZWxzZQ0KKwkJdHlwZT0gQ1JZUFRP
X0JVRl9JT1Y7DQorDQorCXJldHVybiAoc3djcl9hdXRoY29tcHV0ZShjcnAs
IGNyZCwgc3csIGJ1ZiwgdHlwZSkpOw0KK30NCisNCitpbnQNCit2aWFfcGFk
bG9ja19jcnlwdG9fZW5jZGVjKHN0cnVjdCBjcnlwdG9wICpjcnAsIHN0cnVj
dCBjcnlwdG9kZXNjICpjcmQsDQorICAgIHN0cnVjdCB2aWFfcGFkbG9ja19z
ZXNzaW9uICpzZXMsIHN0cnVjdCB2aWFfcGFkbG9ja19zb2Z0YyAqc2MsIGNh
ZGRyX3QgYnVmKQ0KK3sNCisJdV9pbnQzMl90ICprZXk7DQorCWludCBlcnIg
PSAwOw0KKw0KKwlpZiAoKGNyZC0+Y3JkX2xlbiAlIDE2KSAhPSAwKSB7DQor
CQllcnIgPSBFSU5WQUw7DQorCQlyZXR1cm4gKGVycik7DQorCX0NCisNCisJ
c2MtPm9wX2J1ZiA9IG1hbGxvYyhjcmQtPmNyZF9sZW4sIE1fREVWQlVGLCBN
X05PV0FJVCk7DQorCWlmIChzYy0+b3BfYnVmID09IE5VTEwpIHsNCisJCWVy
ciA9IEVOT01FTTsNCisJCXJldHVybiAoZXJyKTsNCisJfQ0KKw0KKwlpZiAo
Y3JkLT5jcmRfZmxhZ3MgJiBDUkRfRl9FTkNSWVBUKSB7DQorCQlzYy0+b3Bf
Y3dbMF0gPSBzZXMtPnNlc19jdzAgfCBDM19DUllQVF9DV0xPX0VOQ1JZUFQ7
DQorCQlrZXkgPSBzZXMtPnNlc19la2V5Ow0KKwkJaWYgKGNyZC0+Y3JkX2Zs
YWdzICYgQ1JEX0ZfSVZfRVhQTElDSVQpDQorCQkJbWVtY3B5KHNjLT5vcF9p
diwgY3JkLT5jcmRfaXYsIDE2KTsNCisJCWVsc2UNCisJCQltZW1jcHkoc2Mt
Pm9wX2l2LCBzZXMtPnNlc19pdiwgMTYpOw0KKw0KKwkJaWYgKChjcmQtPmNy
ZF9mbGFncyAmIENSRF9GX0lWX1BSRVNFTlQpID09IDApIHsNCisJCQlpZiAo
Y3JwLT5jcnBfZmxhZ3MgJiBDUllQVE9fRl9JTUJVRikNCisJCQkJbV9jb3B5
YmFjaygoc3RydWN0IG1idWYgKiljcnAtPmNycF9idWYsDQorCQkJCSAgICBj
cmQtPmNyZF9pbmplY3QsIDE2LCBzYy0+b3BfaXYpOw0KKwkJCWVsc2UgaWYg
KGNycC0+Y3JwX2ZsYWdzICYgQ1JZUFRPX0ZfSU9WKQ0KKwkJCQljdWlvX2Nv
cHliYWNrKChzdHJ1Y3QgdWlvICopY3JwLT5jcnBfYnVmLA0KKwkJCQkgICAg
Y3JkLT5jcmRfaW5qZWN0LCAxNiwgc2MtPm9wX2l2KTsNCisJCQllbHNlDQor
CQkJCW1lbWNweShjcnAtPmNycF9idWYgKyBjcmQtPmNyZF9pbmplY3QsDQor
CQkJCSAgICBzYy0+b3BfaXYsIDE2KTsNCisJCX0NCisJfSBlbHNlIHsNCisJ
CXNjLT5vcF9jd1swXSA9IHNlcy0+c2VzX2N3MCB8IEMzX0NSWVBUX0NXTE9f
REVDUllQVDsNCisJCWtleSA9IHNlcy0+c2VzX2RrZXk7DQorCQlpZiAoY3Jk
LT5jcmRfZmxhZ3MgJiBDUkRfRl9JVl9FWFBMSUNJVCkNCisJCQltZW1jcHko
c2MtPm9wX2l2LCBjcmQtPmNyZF9pdiwgMTYpOw0KKwkJZWxzZSB7DQorCQkJ
aWYgKGNycC0+Y3JwX2ZsYWdzICYgQ1JZUFRPX0ZfSU1CVUYpDQorCQkJCW1f
Y29weWRhdGEoKHN0cnVjdCBtYnVmICopY3JwLT5jcnBfYnVmLA0KKwkJCQkg
ICAgY3JkLT5jcmRfaW5qZWN0LCAxNiwgc2MtPm9wX2l2KTsNCisJCQllbHNl
IGlmIChjcnAtPmNycF9mbGFncyAmIENSWVBUT19GX0lPVikNCisJCQkJY3Vp
b19jb3B5ZGF0YSgoc3RydWN0IHVpbyAqKWNycC0+Y3JwX2J1ZiwNCisJCQkJ
ICAgIGNyZC0+Y3JkX2luamVjdCwgMTYsIHNjLT5vcF9pdik7DQorCQkJZWxz
ZQ0KKwkJCQltZW1jcHkoc2MtPm9wX2l2LCBjcnAtPmNycF9idWYgKw0KKwkJ
CQkgICAgY3JkLT5jcmRfaW5qZWN0LCAxNik7DQorCQl9DQorCX0NCisNCisJ
aWYgKGNycC0+Y3JwX2ZsYWdzICYgQ1JZUFRPX0ZfSU1CVUYpDQorCQltX2Nv
cHlkYXRhKChzdHJ1Y3QgbWJ1ZiAqKWNycC0+Y3JwX2J1ZiwNCisJCSAgICBj
cmQtPmNyZF9za2lwLCBjcmQtPmNyZF9sZW4sIHNjLT5vcF9idWYpOw0KKwll
bHNlIGlmIChjcnAtPmNycF9mbGFncyAmIENSWVBUT19GX0lPVikNCisJCWN1
aW9fY29weWRhdGEoKHN0cnVjdCB1aW8gKiljcnAtPmNycF9idWYsDQorCQkg
ICAgY3JkLT5jcmRfc2tpcCwgY3JkLT5jcmRfbGVuLCBzYy0+b3BfYnVmKTsN
CisJZWxzZQ0KKwkJbWVtY3B5KHNjLT5vcF9idWYsIGNycC0+Y3JwX2J1ZiAr
IGNyZC0+Y3JkX3NraXAsDQorCQkgICAgY3JkLT5jcmRfbGVuKTsNCisNCisJ
c2MtPm9wX2N3WzFdID0gc2MtPm9wX2N3WzJdID0gc2MtPm9wX2N3WzNdID0g
MDsNCisJdmlhX3BhZGxvY2tfY2JjKCZzYy0+b3BfY3csIHNjLT5vcF9idWYs
IHNjLT5vcF9idWYsIGtleSwNCisJICAgIGNyZC0+Y3JkX2xlbiAvIDE2LCBz
Yy0+b3BfaXYpOw0KKw0KKwlpZiAoY3JwLT5jcnBfZmxhZ3MgJiBDUllQVE9f
Rl9JTUJVRikNCisJCW1fY29weWJhY2soKHN0cnVjdCBtYnVmICopY3JwLT5j
cnBfYnVmLA0KKwkJICAgIGNyZC0+Y3JkX3NraXAsIGNyZC0+Y3JkX2xlbiwg
c2MtPm9wX2J1Zik7DQorCWVsc2UgaWYgKGNycC0+Y3JwX2ZsYWdzICYgQ1JZ
UFRPX0ZfSU9WKQ0KKwkJY3Vpb19jb3B5YmFjaygoc3RydWN0IHVpbyAqKWNy
cC0+Y3JwX2J1ZiwNCisJCSAgICBjcmQtPmNyZF9za2lwLCBjcmQtPmNyZF9s
ZW4sIHNjLT5vcF9idWYpOw0KKwllbHNlDQorCQltZW1jcHkoY3JwLT5jcnBf
YnVmICsgY3JkLT5jcmRfc2tpcCwgc2MtPm9wX2J1ZiwNCisJCSAgICBjcmQt
PmNyZF9sZW4pOw0KKw0KKwkvKiBjb3B5IG91dCBsYXN0IGJsb2NrIGZvciB1
c2UgYXMgbmV4dCBzZXNzaW9uIElWICovDQorCWlmIChjcmQtPmNyZF9mbGFn
cyAmIENSRF9GX0VOQ1JZUFQpIHsNCisJCWlmIChjcnAtPmNycF9mbGFncyAm
IENSWVBUT19GX0lNQlVGKQ0KKwkJCW1fY29weWRhdGEoKHN0cnVjdCBtYnVm
ICopY3JwLT5jcnBfYnVmLA0KKwkJCSAgICBjcmQtPmNyZF9za2lwICsgY3Jk
LT5jcmRfbGVuIC0gMTYsIDE2LA0KKwkJCSAgICBzZXMtPnNlc19pdik7DQor
CQllbHNlIGlmIChjcnAtPmNycF9mbGFncyAmIENSWVBUT19GX0lPVikNCisJ
CQljdWlvX2NvcHlkYXRhKChzdHJ1Y3QgdWlvICopY3JwLT5jcnBfYnVmLA0K
KwkJCSAgICBjcmQtPmNyZF9za2lwICsgY3JkLT5jcmRfbGVuIC0gMTYsIDE2
LA0KKwkJCSAgICBzZXMtPnNlc19pdik7DQorCQllbHNlDQorCQkJbWVtY3B5
KHNlcy0+c2VzX2l2LCBjcnAtPmNycF9idWYgKyBjcmQtPmNyZF9za2lwICsN
CisJCQkgICAgY3JkLT5jcmRfbGVuIC0gMTYsIDE2KTsNCisJfQ0KKw0KKwlp
ZiAoc2MtPm9wX2J1ZiAhPSBOVUxMKSB7DQorCQltZW1zZXQoc2MtPm9wX2J1
ZiwgMCwgY3JkLT5jcmRfbGVuKTsNCisJCWZyZWUoc2MtPm9wX2J1ZiwgTV9E
RVZCVUYpOw0KKwkJc2MtPm9wX2J1ZiA9IE5VTEw7DQorCX0NCisNCisJcmV0
dXJuIChlcnIpOw0KK30NCisNCitpbnQNCit2aWFfcGFkbG9ja19jcnlwdG9f
cHJvY2Vzcyh2b2lkICphcmcsIHN0cnVjdCBjcnlwdG9wICpjcnAsIGludCBo
aW50KQ0KK3sNCisJc3RydWN0IHZpYV9wYWRsb2NrX3NvZnRjICpzYyA9IGFy
ZzsNCisJc3RydWN0IHZpYV9wYWRsb2NrX3Nlc3Npb24gKnNlczsNCisJc3Ry
dWN0IGNyeXB0b2Rlc2MgKmNyZDsNCisJaW50IHNlc24sIGVyciA9IDA7DQor
DQorCUtBU1NFUlQoc2MgIT0gTlVMTCAvKiwgKCJ2aWFfcGFkbG9ja19jcnlw
dG9fcHJvY2VzczogbnVsbCBzb2Z0YyIpKi8pOw0KKwlpZiAoY3JwID09IE5V
TEwgfHwgY3JwLT5jcnBfY2FsbGJhY2sgPT0gTlVMTCkgew0KKwkJZXJyID0g
RUlOVkFMOw0KKwkJZ290byBvdXQ7DQorCX0NCisNCisJc2VzbiA9IFZJQUMz
X1NFU1NJT04oY3JwLT5jcnBfc2lkKTsNCisJaWYgKHNlc24gPj0gc2MtPnNj
X25zZXNzaW9ucykgew0KKwkJZXJyID0gRUlOVkFMOw0KKwkJZ290byBvdXQ7
DQorCX0NCisJc2VzID0gJnNjLT5zY19zZXNzaW9uc1tzZXNuXTsNCisNCisJ
Zm9yIChjcmQgPSBjcnAtPmNycF9kZXNjOyBjcmQ7IGNyZCA9IGNyZC0+Y3Jk
X25leHQpIHsNCisJCXN3aXRjaCAoY3JkLT5jcmRfYWxnKSB7DQorCQljYXNl
IENSWVBUT19BRVNfQ0JDOg0KKwkJCWlmICgoZXJyID0gdmlhX3BhZGxvY2tf
Y3J5cHRvX2VuY2RlYyhjcnAsIGNyZCwgc2VzLA0KKwkJCSAgICBzYywgY3Jw
LT5jcnBfYnVmKSkgIT0gMCkNCisJCQkJZ290byBvdXQ7DQorCQkJYnJlYWs7
DQorDQorCQljYXNlIENSWVBUT19NRDVfSE1BQzoNCisJCWNhc2UgQ1JZUFRP
X1NIQTFfSE1BQzoNCisJCWNhc2UgQ1JZUFRPX1JJUEVNRDE2MF9ITUFDOg0K
KwkJY2FzZSBDUllQVE9fU0hBMl9ITUFDOg0KKwkJCWlmICgoZXJyID0gdmlh
X3BhZGxvY2tfY3J5cHRvX3N3YXV0aChjcnAsIGNyZCwNCisJCQkgICAgc2Vz
LT5zd2QsIGNycC0+Y3JwX2J1ZikpICE9IDApDQorCQkJCWdvdG8gb3V0Ow0K
KwkJCWJyZWFrOw0KKw0KKwkJZGVmYXVsdDoNCisJCQllcnIgPSBFSU5WQUw7
DQorCQkJZ290byBvdXQ7DQorCQl9DQorCX0NCitvdXQ6DQorCWNycC0+Y3Jw
X2V0eXBlID0gZXJyOw0KKwljcnlwdG9fZG9uZShjcnApOw0KKwlyZXR1cm4g
KGVycik7DQorfQ0KKw0KKyNlbmRpZiAvKiBWSUFfUEFETE9DSyAqLw0KSW5k
ZXg6IHN5cy9vcGVuY3J5cHRvL2NyeXB0b3NvZnQuYw0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvb3BlbmNy
eXB0by9jcnlwdG9zb2Z0LmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjE1
DQpkaWZmIC11IC1yMS4xNSBjcnlwdG9zb2Z0LmMNCi0tLSBzeXMvb3BlbmNy
eXB0by9jcnlwdG9zb2Z0LmMJMTYgTm92IDIwMDYgMDE6MzM6NTEgLTAwMDAJ
MS4xNQ0KKysrIHN5cy9vcGVuY3J5cHRvL2NyeXB0b3NvZnQuYwkxNCBKYW4g
MjAwNyAyMzoyMzoyMyAtMDAwMA0KQEAgLTYwLDggKzYwLDYgQEANCiAJOiBj
dWlvX2NvcHlkYXRhKChzdHJ1Y3QgdWlvICopYSxiLGMsZCkNCiANCiBzdGF0
aWMJaW50IHN3Y3JfZW5jZGVjKHN0cnVjdCBjcnlwdG9kZXNjICosIHN0cnVj
dCBzd2NyX2RhdGEgKiwgY2FkZHJfdCwgaW50KTsNCi1zdGF0aWMJaW50IHN3
Y3JfYXV0aGNvbXB1dGUoc3RydWN0IGNyeXB0b3AgKmNycCwgc3RydWN0IGNy
eXB0b2Rlc2MgKmNyZCwNCi0JCQkgICAgIHN0cnVjdCBzd2NyX2RhdGEgKnN3
LCBjYWRkcl90IGJ1ZiwgaW50IG91dHR5cGUpOw0KIHN0YXRpYwlpbnQgc3dj
cl9jb21wZGVjKHN0cnVjdCBjcnlwdG9kZXNjICosIHN0cnVjdCBzd2NyX2Rh
dGEgKiwgY2FkZHJfdCwgaW50KTsNCiBzdGF0aWMJaW50IHN3Y3JfcHJvY2Vz
cyh2b2lkICosIHN0cnVjdCBjcnlwdG9wICosIGludCk7DQogc3RhdGljCWlu
dCBzd2NyX25ld3Nlc3Npb24odm9pZCAqLCB1X2ludDMyX3QgKiwgc3RydWN0
IGNyeXB0b2luaSAqKTsNCkBAIC01MzAsNyArNTI4LDcgQEANCiAvKg0KICAq
IENvbXB1dGUga2V5ZWQtaGFzaCBhdXRoZW50aWNhdG9yLg0KICAqLw0KLXN0
YXRpYyBpbnQNCitpbnQNCiBzd2NyX2F1dGhjb21wdXRlKHN0cnVjdCBjcnlw
dG9wICpjcnAsIHN0cnVjdCBjcnlwdG9kZXNjICpjcmQsDQogICAgIHN0cnVj
dCBzd2NyX2RhdGEgKnN3LCBjYWRkcl90IGJ1ZiwgaW50IG91dHR5cGUpDQog
ew0KSW5kZXg6IHN5cy9vcGVuY3J5cHRvL2NyeXB0b3NvZnQuaA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMv
b3BlbmNyeXB0by9jcnlwdG9zb2Z0Lmgsdg0KcmV0cmlldmluZyByZXZpc2lv
biAxLjMNCmRpZmYgLXUgLXIxLjMgY3J5cHRvc29mdC5oDQotLS0gc3lzL29w
ZW5jcnlwdG8vY3J5cHRvc29mdC5oCTI1IE5vdiAyMDA1IDE2OjE2OjQ2IC0w
MDAwCTEuMw0KKysrIHN5cy9vcGVuY3J5cHRvL2NyeXB0b3NvZnQuaAkxNCBK
YW4gMjAwNyAyMzoyMzoyMyAtMDAwMA0KQEAgLTU3LDQgKzU3LDkgQEANCiAJ
c3RydWN0IHN3Y3JfZGF0YSAqc3dfbmV4dDsNCiB9Ow0KIA0KKyNpZmRlZiBf
S0VSTkVMDQoraW50IHN3Y3JfYXV0aGNvbXB1dGUoc3RydWN0IGNyeXB0b3Ag
KmNycCwgc3RydWN0IGNyeXB0b2Rlc2MgKmNyZCwNCisgICAgc3RydWN0IHN3
Y3JfZGF0YSAqc3csIGNhZGRyX3QgYnVmLCBpbnQgb3V0dHlwZSk7DQorI2Vu
ZGlmIC8qIF9LRVJORUwgKi8NCisNCiAjZW5kaWYgLyogX0NSWVBUT19DUllQ
VE9fSF8gKi8NCg==

--0-1764314302-1169139096=:991--