Subject: VIA ACE patch
To: None <tech-crypto@netbsd.org, port-i386@netbsd.org>
From: Daniel de Kok <danieldk@pobox.com>
List: tech-crypto
Date: 01/12/2007 17:44:41
  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-1524365691-1168620281=:96
Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed

Hi,

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.

-- Daniel
--0-1524365691-1168620281=:96
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=via_ace.diff
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.NEB.4.64.0701121744410.96@liza.taickim.net>
Content-Description: 
Content-Disposition: attachment; filename=via_ace.diff

SW5kZXg6IHN5cy9hcmNoL2kzODYvY29uZi9HRU5FUklDDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9hcmNo
L2kzODYvY29uZi9HRU5FUklDLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS44
MDMNCmRpZmYgLXUgLXIxLjgwMyBHRU5FUklDDQotLS0gc3lzL2FyY2gvaTM4
Ni9jb25mL0dFTkVSSUMJMTcgRGVjIDIwMDYgMjM6MDI6MDYgLTAwMDAJMS44
MDMNCisrKyBzeXMvYXJjaC9pMzg2L2NvbmYvR0VORVJJQwkxMiBKYW4gMjAw
NyAxNjoyNjoyOCAtMDAwMA0KQEAgLTUyLDYgKzUyLDkgQEANCiAjIEFNRCBQ
b3dlck5vdyEgYW5kIENvb2xgbidRdWlldCB0ZWNobm9sb2d5DQogb3B0aW9u
cyAJUE9XRVJOT1dfSzgNCiANCisjIFZJQSBQYWRMb2NrDQorI29wdGlvbnMJ
VklBX1BBRExPQ0sNCisNCiBvcHRpb25zIAlNVFJSCQkjIG1lbW9yeS10eXBl
IHJhbmdlIHJlZ2lzdGVyIHN5c2NhbGwgc3VwcG9ydA0KICMgZG9lc24ndCB3
b3JrIHdpdGggTVAganVzdCB5ZXQuLg0KICNvcHRpb25zIAlQRVJGQ1RSUwkj
IHBlcmZvcm1hbmNlLW1vbml0b3JpbmcgY291bnRlcnMgc3VwcG9ydA0KSW5k
ZXg6IHN5cy9hcmNoL2kzODYvaTM4Ni9hdXRvY29uZi5jDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9hcmNo
L2kzODYvaTM4Ni9hdXRvY29uZi5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24g
MS44NA0KZGlmZiAtdSAtcjEuODQgYXV0b2NvbmYuYw0KLS0tIHN5cy9hcmNo
L2kzODYvaTM4Ni9hdXRvY29uZi5jCTcgSnVuIDIwMDYgMjI6Mzc6NTggLTAw
MDAJMS44NA0KKysrIHN5cy9hcmNoL2kzODYvaTM4Ni9hdXRvY29uZi5jCTEy
IEphbiAyMDA3IDE2OjI2OjI4IC0wMDAwDQpAQCAtOTEsNiArOTEsOCBAQA0K
ICNpbmNsdWRlIDxtYWNoaW5lL2t2bTg2Lmg+DQogI2VuZGlmDQogDQorI2lu
Y2x1ZGUgIm9wdF92aWFwYWRsb2NrLmgiDQorDQogLyoNCiAgKiBEZXRlcm1p
bmUgaS9vIGNvbmZpZ3VyYXRpb24gZm9yIGEgbWFjaGluZS4NCiAgKi8NCkBA
IC0xMzksNCArMTQxLDEwIEBADQogI2lmIE5MQVBJQyA+IDANCiAJbGFwaWNf
dHByID0gMDsNCiAjZW5kaWYNCisNCisjaWYgZGVmaW5lZChJNjg2X0NQVSkN
CisjaWZkZWYgVklBX1BBRExPQ0sNCisJdmlhX3BhZGxvY2tfYXR0YWNoKCk7
DQorI2VuZGlmIC8qIFZJQV9QQURMT0NLICovDQorI2VuZGlmIC8qIGRlZmlu
ZWQoSTY4Nl9DUFUpICovDQogfQ0KSW5kZXg6IHN5cy9hcmNoL2kzODYvaTM4
Ni9pZGVudGNwdS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmls
ZTogL2N2c3Jvb3Qvc3JjL3N5cy9hcmNoL2kzODYvaTM4Ni9pZGVudGNwdS5j
LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS41Mg0KZGlmZiAtdSAtcjEuNTIg
aWRlbnRjcHUuYw0KLS0tIHN5cy9hcmNoL2kzODYvaTM4Ni9pZGVudGNwdS5j
CTEgSmFuIDIwMDcgMjA6NTY6NTggLTAwMDAJMS41Mg0KKysrIHN5cy9hcmNo
L2kzODYvaTM4Ni9pZGVudGNwdS5jCTEyIEphbiAyMDA3IDE2OjI2OjI4IC0w
MDAwDQpAQCAtNjUyLDggKzY1MiwxMCBAQA0KIHZvaWQNCiB2aWFfY3B1X3By
b2JlKHN0cnVjdCBjcHVfaW5mbyAqY2kpDQogew0KKwl1X2ludCBtb2RlbCA9
IENQVUlEMk1PREVMKGNpLT5jaV9zaWduYXR1cmUpOw0KKwl1X2ludCBzdGVw
cGluZyA9IENQVUlEMlNURVBQSU5HKGNpLT5jaV9zaWduYXR1cmUpOw0KIAl1
X2ludCBkZXNjc1s0XTsNCi0JdV9pbnQgbGZ1bmM7DQorCXVfaW50IGxmdW5j
LCBtc3I7DQogDQogCS8qDQogCSAqIERldGVybWluZSB0aGUgbGFyZ2VzdCBl
eHRlbmRlZCBmdW5jdGlvbiB2YWx1ZS4NCkBAIC02NjgsNiArNjcwLDI0IEBA
DQogCQlDUFVJRCgweDgwMDAwMDAxLCBkZXNjc1swXSwgZGVzY3NbMV0sIGRl
c2NzWzJdLCBkZXNjc1szXSk7DQogCQljaS0+Y2lfZmVhdHVyZV9mbGFncyB8
PSBkZXNjc1szXTsNCiAJfQ0KKw0KKwlpZiAobW9kZWwgPj0gMHg5KSB7DQor
CQkvKiBOZWhlbWlhaCBvciBFc3RoZXIgKi8NCisJCUNQVUlEKDB4YzAwMDAw
MDAsIGRlc2NzWzBdLCBkZXNjc1sxXSwgZGVzY3NbMl0sIGRlc2NzWzNdKTsN
CisJCWxmdW5jID0gZGVzY3NbMF07DQorCQlpZiAobGZ1bmMgPT0gMHhjMDAw
MDAwMSkgew0KKwkJCUNQVUlEKGxmdW5jLCBkZXNjc1swXSwgZGVzY3NbMV0s
IGRlc2NzWzJdLCBkZXNjc1szXSk7DQorCQkJbGZ1bmMgPSBkZXNjc1szXTsN
CisJCQlpZiAobW9kZWwgPiAweDkgfHwgc3RlcHBpbmcgPj0gOCkgewkvKiBB
Q0UgKi8NCisJCQkJaWYgKChsZnVuYyAmIDB4YzApID09IDB4YzApIHsNCisJ
CQkJCWNpLT5jaV9wYWRsb2NrX2ZsYWdzIHw9IENQVUlEX0ZFQVRfVkFDRTsN
CisJCQkJCW1zciA9IHJkbXNyKE1TUl9WSUFfQUNFKTsNCisJCQkJCXdybXNy
KE1TUl9WSUFfQUNFLA0KKwkJCQkJICAgIG1zciB8IE1TUl9WSUFfQUNFX0VO
QUJMRSk7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCiB9DQogDQogY29u
c3QgY2hhciAqDQpJbmRleDogc3lzL2FyY2gvaTM4Ni9pMzg2L21hY2hkZXAu
Yw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290
L3NyYy9zeXMvYXJjaC9pMzg2L2kzODYvbWFjaGRlcC5jLHYNCnJldHJpZXZp
bmcgcmV2aXNpb24gMS41OTINCmRpZmYgLXUgLXIxLjU5MiBtYWNoZGVwLmMN
Ci0tLSBzeXMvYXJjaC9pMzg2L2kzODYvbWFjaGRlcC5jCTcgSmFuIDIwMDcg
MDE6MDQ6MjYgLTAwMDAJMS41OTINCisrKyBzeXMvYXJjaC9pMzg2L2kzODYv
bWFjaGRlcC5jCTEyIEphbiAyMDA3IDE2OjI2OjI4IC0wMDAwDQpAQCAtMjM2
LDYgKzIzNiw3IEBADQogaW50CWR1bXBtZW1faGlnaDsNCiB1bnNpZ25lZCBp
bnQgY3B1X2ZlYXR1cmU7DQogdW5zaWduZWQgaW50IGNwdV9mZWF0dXJlMjsN
Cit1bnNpZ25lZCBpbnQgY3B1X2ZlYXR1cmVfcGFkbG9jazsNCiBpbnQJY3B1
X2NsYXNzOw0KIGludAlpMzg2X2ZwdV9wcmVzZW50Ow0KIGludAlpMzg2X2Zw
dV9leGNlcHRpb247DQpAQCAtMTUxNiw2ICsxNTE3LDcgQEANCiAJY3B1X3By
b2JlX2ZlYXR1cmVzKCZjcHVfaW5mb19wcmltYXJ5KTsNCiAJY3B1X2ZlYXR1
cmUgPSBjcHVfaW5mb19wcmltYXJ5LmNpX2ZlYXR1cmVfZmxhZ3M7DQogCWNw
dV9mZWF0dXJlMiA9IGNwdV9pbmZvX3ByaW1hcnkuY2lfZmVhdHVyZTJfZmxh
Z3M7DQorCWNwdV9mZWF0dXJlX3BhZGxvY2sgPSBjcHVfaW5mb19wcmltYXJ5
LmNpX3BhZGxvY2tfZmxhZ3M7DQogDQogCXByb2MwcGFkZHIgPSBVQVJFQV9U
T19VU0VSKHByb2MwdWFyZWEpOw0KIAlsd3AwLmxfYWRkciA9IHByb2MwcGFk
ZHI7DQpJbmRleDogc3lzL2FyY2gvaTM4Ni9pbmNsdWRlL2NwdS5oDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5
cy9hcmNoL2kzODYvaW5jbHVkZS9jcHUuaCx2DQpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMTMwDQpkaWZmIC11IC1yMS4xMzAgY3B1LmgNCi0tLSBzeXMvYXJj
aC9pMzg2L2luY2x1ZGUvY3B1LmgJOCBEZWMgMjAwNiAxNTowNToxOCAtMDAw
MAkxLjEzMA0KKysrIHN5cy9hcmNoL2kzODYvaW5jbHVkZS9jcHUuaAkxMiBK
YW4gMjAwNyAxNjoyNjoyOCAtMDAwMA0KQEAgLTU0LDYgKzU0LDcgQEANCiAj
aW5jbHVkZSA8bWFjaGluZS90c3MuaD4NCiAjaW5jbHVkZSA8bWFjaGluZS9p
bnRyZGVmcy5oPg0KICNpbmNsdWRlIDx4ODYvY2FjaGVpbmZvLmg+DQorI2lu
Y2x1ZGUgPHg4Ni92aWFfcGFkbG9jay5oPg0KIA0KICNpbmNsdWRlIDxzeXMv
ZGV2aWNlLmg+DQogI2luY2x1ZGUgPHN5cy9sb2NrLmg+CQkJLyogd2lsbCBh
bHNvIGdldCBMT0NLREVCVUcgKi8NCkBAIC0xMjMsNiArMTI0LDcgQEANCiAJ
dWludDMyX3QJY2lfZmVhdHVyZV9mbGFnczsvKiBYODYgJWVkeCBDUFVJRCBm
ZWF0dXJlIGJpdHMgKi8NCiAJdWludDMyX3QJY2lfZmVhdHVyZTJfZmxhZ3M7
LyogWDg2ICVlY3ggQ1BVSUQgZmVhdHVyZSBiaXRzICovDQogCXVpbnQzMl90
CWNpX2ZlYXR1cmUzX2ZsYWdzOy8qIFg4NiBleHRlbmRlZCBmZWF0dXJlIGJp
dHMgKi8NCisJdWludDMyX3QJY2lfcGFkbG9ja19mbGFnczsvKiBWSUEgUGFk
TG9jayBmZWF0dXJlIGJpdHMgKi8NCiAJdWludDMyX3QJY2lfY3B1X2NsYXNz
OwkgLyogQ1BVIGNsYXNzICovDQogCXVpbnQzMl90CWNpX2JyYW5kX2lkOwkg
LyogSW50ZWwgYnJhbmQgaWQgKi8NCiAJdWludDMyX3QJY2lfdmVuZG9yWzRd
OwkgLyogdmVuZG9yIHN0cmluZyAqLw0KQEAgLTE1MCw2ICsxNTIsOCBAQA0K
IAljaGFyICpjaV9kZGJpcGlfc3RhY2s7DQogDQogCXN0cnVjdCBldmNudCBj
aV9pcGlfZXZlbnRzW1g4Nl9OSVBJXTsNCisNCisJc3RydWN0IHZpYV9wYWRs
b2NrCWNpX3ZwOwkvKiBWSUEgUGFkTG9jayBwcml2YXRlIHN0b3JhZ2UgKi8N
CiB9Ow0KIA0KIC8qDQpAQCAtMzM1LDYgKzMzOSw3IEBADQogZXh0ZXJuIGlu
dCBiaW9zZXh0bWVtOw0KIGV4dGVybiB1bnNpZ25lZCBpbnQgY3B1X2ZlYXR1
cmU7DQogZXh0ZXJuIHVuc2lnbmVkIGludCBjcHVfZmVhdHVyZTI7DQorZXh0
ZXJuIHVuc2lnbmVkIGludCBjcHVfZmVhdHVyZV9wYWRsb2NrOw0KIGV4dGVy
biBpbnQgY3B1Ow0KIGV4dGVybiBpbnQgY3B1X2NsYXNzOw0KIGV4dGVybiBj
aGFyIGNwdV9icmFuZF9zdHJpbmdbXTsNCkluZGV4OiBzeXMvYXJjaC94ODYv
Y29uZi9maWxlcy54ODYNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBm
aWxlOiAvY3Zzcm9vdC9zcmMvc3lzL2FyY2gveDg2L2NvbmYvZmlsZXMueDg2
LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMQ0KZGlmZiAtdSAtcjEuMjEg
ZmlsZXMueDg2DQotLS0gc3lzL2FyY2gveDg2L2NvbmYvZmlsZXMueDg2CTEg
SmFuIDIwMDcgMjA6NTY6NTkgLTAwMDAJMS4yMQ0KKysrIHN5cy9hcmNoL3g4
Ni9jb25mL2ZpbGVzLng4NgkxMiBKYW4gMjAwNyAxNjoyNjoyOCAtMDAwMA0K
QEAgLTEzLDYgKzEzLDEwIEBADQogIyBBTUQgUG93ZXJub3cvQ29vbGBuJ1F1
aWV0IFRlY2hub2xvZ3kNCiBkZWZmbGFnIG9wdF9wb3dlcm5vd19rOC5oCVBP
V0VSTk9XX0s4DQogDQorIyBWSUEgUGFkTG9jayBzdXBwb3J0DQorZGVmZmxh
ZwlvcHRfdmlhcGFkbG9jay5oCVZJQV9QQURMT0NLOglvcGVuY3J5cHRvDQor
ZmlsZQlhcmNoL3g4Ni94ODYvdmlhX3BhZGxvY2suYwl2aWFfcGFkbG9jaw0K
Kw0KIGRlZmluZSAgY3B1YnVzIHsgW2FwaWQgPSAtMV0gfQ0KIGRlZmluZSAg
aXBtaWJ1cyB7fQ0KIA0KSW5kZXg6IHN5cy9hcmNoL3g4Ni9pbmNsdWRlL3Nw
ZWNpYWxyZWcuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6
IC9jdnNyb290L3NyYy9zeXMvYXJjaC94ODYvaW5jbHVkZS9zcGVjaWFscmVn
Lmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjEyDQpkaWZmIC11IC1yMS4x
MiBzcGVjaWFscmVnLmgNCi0tLSBzeXMvYXJjaC94ODYvaW5jbHVkZS9zcGVj
aWFscmVnLmgJMSBKYW4gMjAwNyAyMDo1Njo1OSAtMDAwMAkxLjEyDQorKysg
c3lzL2FyY2gveDg2L2luY2x1ZGUvc3BlY2lhbHJlZy5oCTEyIEphbiAyMDA3
IDE2OjI2OjI4IC0wMDAwDQpAQCAtMTU1LDYgKzE1NSwxMyBAQA0KIAkJCQkg
ICAgIlwwMzczRE5PVzJcMDQwM0ROT1ciDQogDQogLyoNCisgKiAiRmVhdHVy
ZXMiIHRoYXQgYXJlIGNvcGllZCBmcm9tIGVsc2V3aGVyZSAtLSBub3QgbmVj
ZXNzYXJpbHkgdGllZCB0bw0KKyAqIGEgc3BlY2lmaWMgQ1BVSUQgcmVzcG9u
c2UNCisgKi8NCisNCisjZGVmaW5lIENQVUlEX0ZFQVRfVkFDRQkweDAwMDAw
MDAyCS8qIFZJQSBDMyBBRVMgQ3J5cHRvIEV4dGVuc2lvbiAqLw0KKw0KKy8q
DQogICogQ1BVSUQgImZlYXR1cmVzIiBiaXRzIGluICVlY3gNCiAgKi8NCiAN
CkBAIC0yNzgsNiArMjg1LDE4IEBADQogI2RlZmluZSBNU1JfTUMzX01JU0MJ
CTB4NDEzDQogDQogLyoNCisgKiBWSUEgIk5laGVtaWFoIiBNU1JzDQorICov
DQorI2RlZmluZSBNU1JfVklBX1JORwkJMHgxMTBiDQorI2RlZmluZSBNU1Jf
VklBX1JOR19FTkFCTEUJMHgwMDAwMDA0MA0KKyNkZWZpbmUgTVNSX1ZJQV9S
TkdfTk9JU0VfTUFTSwkweDAwMDAwMzAwDQorI2RlZmluZSBNU1JfVklBX1JO
R19OT0lTRV9BCTB4MDAwMDAwMDANCisjZGVmaW5lIE1TUl9WSUFfUk5HX05P
SVNFX0IJMHgwMDAwMDEwMA0KKyNkZWZpbmUgTVNSX1ZJQV9STkdfMk5PSVNF
CTB4MDAwMDAzMDANCisjZGVmaW5lIE1TUl9WSUFfQUNFCQkweDExMDcNCisj
ZGVmaW5lIE1TUl9WSUFfQUNFX0VOQUJMRQkweDEwMDAwMDAwDQorDQorLyoN
CiAgKiBBTUQgSzYvSzcgTVNScy4NCiAgKi8NCiAjZGVmaW5lCU1TUl9LNl9V
V0NDUgkJMHhjMDAwMDA4NQ0KSW5kZXg6IHN5cy9hcmNoL3g4Ni9pbmNsdWRl
L3ZpYV9wYWRsb2NrLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBm
aWxlOiBzeXMvYXJjaC94ODYvaW5jbHVkZS92aWFfcGFkbG9jay5oDQpkaWZm
IC1OIHN5cy9hcmNoL3g4Ni9pbmNsdWRlL3ZpYV9wYWRsb2NrLmgNCi0tLSAv
ZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMA0KKysrIHN5cy9h
cmNoL3g4Ni9pbmNsdWRlL3ZpYV9wYWRsb2NrLmgJMTIgSmFuIDIwMDcgMTY6
MjY6MjggLTAwMDANCkBAIC0wLDAgKzEsNzcgQEANCisvKgkkTmV0QlNEJAkq
Lw0KKw0KKy8qLQ0KKyAqIENvcHlyaWdodCAoYykgMjAwMyBKYXNvbiBXcmln
aHQNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQgVGhlbyBkZSBSYWFk
dA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBQZXJtaXNz
aW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlz
IHNvZnR3YXJlIGZvciBhbnkNCisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91
dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFi
b3ZlDQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u
IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4NCisgKg0KKyAqIFRIRSBT
T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJ
U0NMQUlNUyBBTEwgV0FSUkFOVElFUw0KKyAqIFdJVEggUkVHQVJEIFRPIFRI
SVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YNCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBT
UEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgT1IgQU5ZIERBTUFHRVMNCisgKiBXSEFUU09FVkVSIFJFU1VMVElO
RyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIg
SU4gQU4NCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Ig
T1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRg0KKyAqIE9S
IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9G
IFRISVMgU09GVFdBUkUuDQorICovDQorDQorI2lmbmRlZiBfWDg2X1ZJQV9Q
QURMT0NLX0hfDQorI2RlZmluZSBfWDg2X1ZJQV9QQURMT0NLX0hfDQorDQor
I2lmZGVmIF9LRVJORUwNCisNCisjaW5jbHVkZSA8Y3J5cHRvL3Jpam5kYWVs
L3Jpam5kYWVsLmg+DQorDQorLyogVklBIEMzIHhjcnlwdC0qIGluc3RydWN0
aW9uIGNvbnRleHQgY29udHJvbCBvcHRpb25zICovDQorI2RlZmluZSBDM19D
UllQVF9DV0xPX1JPVU5EX00JCTB4MDAwMDAwMGYNCisjZGVmaW5lIEMzX0NS
WVBUX0NXTE9fQUxHX00JCTB4MDAwMDAwNzANCisjZGVmaW5lIEMzX0NSWVBU
X0NXTE9fQUxHX0FFUwkJMHgwMDAwMDAwMA0KKyNkZWZpbmUgQzNfQ1JZUFRf
Q1dMT19LRVlHRU5fTQkJMHgwMDAwMDA4MA0KKyNkZWZpbmUgQzNfQ1JZUFRf
Q1dMT19LRVlHRU5fSFcJCTB4MDAwMDAwMDANCisjZGVmaW5lIEMzX0NSWVBU
X0NXTE9fS0VZR0VOX1NXCQkweDAwMDAwMDgwDQorI2RlZmluZSBDM19DUllQ
VF9DV0xPX05PUk1BTAkJMHgwMDAwMDAwMA0KKyNkZWZpbmUgQzNfQ1JZUFRf
Q1dMT19JTlRFUk1FRElBVEUJMHgwMDAwMDEwMA0KKyNkZWZpbmUgQzNfQ1JZ
UFRfQ1dMT19FTkNSWVBUCQkweDAwMDAwMDAwDQorI2RlZmluZSBDM19DUllQ
VF9DV0xPX0RFQ1JZUFQJCTB4MDAwMDAyMDANCisjZGVmaW5lIEMzX0NSWVBU
X0NXTE9fS0VZMTI4CQkweDAwMDAwMDBhICAgICAgLyogMTI4Yml0LCAxMCBy
ZHMgKi8NCisjZGVmaW5lIEMzX0NSWVBUX0NXTE9fS0VZMTkyCQkweDAwMDAw
NDBjICAgICAgLyogMTkyYml0LCAxMiByZHMgKi8NCisjZGVmaW5lIEMzX0NS
WVBUX0NXTE9fS0VZMjU2CQkweDAwMDAwODBlICAgICAgLyogMjU2Yml0LCAx
NSByZHMgKi8NCisNCitzdHJ1Y3QgdmlhX3BhZGxvY2tfc2Vzc2lvbiB7DQor
ICAgICAgICB1X2ludDMyX3QJc2VzX2VrZXlbNCAqIChSSUpOREFFTF9NQVhO
UiArIDEpICsgNF07CS8qIDEyOCBiaXQgYWxpZ25lZCAqLw0KKyAgICAgICAg
dV9pbnQzMl90CXNlc19ka2V5WzQgKiAoUklKTkRBRUxfTUFYTlIgKyAxKSAr
IDRdOwkvKiAxMjggYml0IGFsaWduZWQgKi8NCisgICAgICAgIHVfaW50OF90
CXNlc19pdlsxNl07CQkJCS8qIDEyOCBiaXQgYWxpZ25lZCAqLw0KKyAgICAg
ICAgdV9pbnQzMl90CXNlc19jdzA7DQorICAgICAgICBzdHJ1Y3Qgc3djcl9k
YXRhCSpzd2Q7DQorICAgICAgICBpbnQJc2VzX2tsZW47DQorICAgICAgICBp
bnQJc2VzX3VzZWQ7DQorfTsNCisNCitzdHJ1Y3QgdmlhX3BhZGxvY2tfc29m
dGMgew0KKwl1X2ludDMyX3QJb3BfY3dbNF07CS8qIDEyOCBiaXQgYWxpZ25l
ZCAqLw0KKwl1X2ludDhfdAlvcF9pdlsxNl07CS8qIDEyOCBiaXQgYWxpZ25l
ZCAqLw0KKwl2b2lkCQkqb3BfYnVmOw0KKw0KKwkvKiBub3JtYWwgc29mdGMg
c3R1ZmYgKi8NCisJaW50MzJfdAkJc2NfY2lkOw0KKwlpbnQJCXNjX25zZXNz
aW9uczsNCisJc3RydWN0IHZpYV9wYWRsb2NrX3Nlc3Npb24gKnNjX3Nlc3Np
b25zOw0KK307DQorDQorI2RlZmluZSBWSUFDM19TRVNTSU9OKHNpZCkJKChz
aWQpICYgMHgwZmZmZmZmZikNCisjZGVmaW5lIFZJQUMzX1NJRChjcmQsc2Vz
KQkoKChjcmQpIDw8IDI4KSB8ICgoc2VzKSAmIDB4MGZmZmZmZmYpKQ0KKw0K
K3N0cnVjdCBjcHVfaW5mbzsNCisNCitzdHJ1Y3QgdmlhX3BhZGxvY2sgew0K
KwlzdHJ1Y3QgY3B1X2luZm8JCSp2cF9jaTsNCisJaW50CQkJdnBfZnJlcTsN
Cit9Ow0KKw0KK3ZvaWQJdmlhX3BhZGxvY2tfYXR0YWNoKHZvaWQpOw0KKw0K
KyNlbmRpZiAvKiBfS0VSTkVMICovDQorI2VuZGlmIC8qIF9YODZfVklBX1BB
RExPQ0tfSF8gKi8NCkluZGV4OiBzeXMvYXJjaC94ODYveDg2L3ZpYV9wYWRs
b2NrLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiBzeXMv
YXJjaC94ODYveDg2L3ZpYV9wYWRsb2NrLmMNCmRpZmYgLU4gc3lzL2FyY2gv
eDg2L3g4Ni92aWFfcGFkbG9jay5jDQotLS0gL2Rldi9udWxsCTEgSmFuIDE5
NzAgMDA6MDA6MDAgLTAwMDANCisrKyBzeXMvYXJjaC94ODYveDg2L3ZpYV9w
YWRsb2NrLmMJMTIgSmFuIDIwMDcgMTY6MjY6MzYgLTAwMDANCkBAIC0wLDAg
KzEsNDgwIEBADQorLyoJJE9wZW5CU0Q6IHZpYS5jLHYgMS44IDIwMDYvMTEv
MTcgMDc6NDc6NTYgdG9tIEV4cCAkCSovDQorLyoJJE5ldEJTRAkqLw0KKw0K
Ky8qLQ0KKyAqIENvcHlyaWdodCAoYykgMjAwMyBKYXNvbiBXcmlnaHQNCisg
KiBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQgVGhlbyBkZSBSYWFkdA0KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBQZXJtaXNzaW9uIHRv
IHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3
YXJlIGZvciBhbnkNCisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUg
aXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlDQor
ICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj
ZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4NCisgKg0KKyAqIFRIRSBTT0ZUV0FS
RSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlN
UyBBTEwgV0FSUkFOVElFUw0KKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09G
VFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCisg
KiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUg0KKyAqIEFOWSBTUEVDSUFM
LCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
T1IgQU5ZIERBTUFHRVMNCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9N
IExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4N
CisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIg
VE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRg0KKyAqIE9SIElOIENP
Tk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMg
U09GVFdBUkUuDQorICovDQorDQorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPg0K
K19fS0VSTkVMX1JDU0lEKDAsICIkTmV0QlNEJCIpOw0KKw0KKyNpbmNsdWRl
ICJvcHRfdmlhcGFkbG9jay5oIg0KKw0KKyNpbmNsdWRlIDxzeXMvcGFyYW0u
aD4NCisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+DQorI2luY2x1ZGUgPHN5cy9z
aWduYWx2YXIuaD4NCisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPg0KKyNpbmNs
dWRlIDxzeXMvcm5kLmg+DQorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4NCisj
aW5jbHVkZSA8c3lzL21idWYuaD4NCisNCisjaW5jbHVkZSA8bWFjaGluZS9j
cHUuaD4NCisjaW5jbHVkZSA8eDg2L3NwZWNpYWxyZWcuaD4NCisNCisjaW5j
bHVkZSA8b3BlbmNyeXB0by9jcnlwdG9kZXYuaD4NCisjaW5jbHVkZSA8b3Bl
bmNyeXB0by9jcnlwdG9zb2Z0Lmg+DQorI2luY2x1ZGUgPG9wZW5jcnlwdG8v
eGZvcm0uaD4NCisjaW5jbHVkZSA8Y3J5cHRvL3Jpam5kYWVsL3Jpam5kYWVs
Lmg+DQorDQorI2luY2x1ZGUgPG9wZW5jcnlwdG8vY3J5cHRvc29mdF94Zm9y
bS5jPg0KKw0KKyNpZmRlZiBWSUFfUEFETE9DSw0KKw0KK2ludAl2aWFfcGFk
bG9ja19jcnlwdG9fbmV3c2Vzc2lvbih2b2lkICosIHVfaW50MzJfdCAqLCBz
dHJ1Y3QgY3J5cHRvaW5pICopOw0KK2ludAl2aWFfcGFkbG9ja19jcnlwdG9f
cHJvY2Vzcyh2b2lkICosIHN0cnVjdCBjcnlwdG9wICosIGludCk7DQoraW50
CXZpYV9wYWRsb2NrX2NyeXB0b19zd2F1dGgoc3RydWN0IGNyeXB0b3AgKiwg
c3RydWN0IGNyeXB0b2Rlc2MgKiwNCisJICAgIHN0cnVjdCBzd2NyX2RhdGEg
KiwgY2FkZHJfdCk7DQoraW50CXZpYV9wYWRsb2NrX2NyeXB0b19lbmNkZWMo
c3RydWN0IGNyeXB0b3AgKiwgc3RydWN0IGNyeXB0b2Rlc2MgKiwNCisJICAg
IHN0cnVjdCB2aWFfcGFkbG9ja19zZXNzaW9uICosIHN0cnVjdCB2aWFfcGFk
bG9ja19zb2Z0YyAqLCBjYWRkcl90KTsNCitpbnQJdmlhX3BhZGxvY2tfY3J5
cHRvX2ZyZWVzZXNzaW9uKHZvaWQgKiwgdV9pbnQ2NF90KTsNCitzdGF0aWMJ
X19pbmxpbmUgdm9pZCB2aWFfcGFkbG9ja19jYmModm9pZCAqLCB2b2lkICos
IHZvaWQgKiwgdm9pZCAqLCBpbnQsDQorCSAgICB2b2lkICopOw0KKw0KK3Zv
aWQNCit2aWFfcGFkbG9ja19hdHRhY2godm9pZCkNCit7DQorCWlmICghKGNw
dV9mZWF0dXJlX3BhZGxvY2sgJiBDUFVJRF9GRUFUX1ZBQ0UpKQ0KKwkJcmV0
dXJuOw0KKw0KKwlzdHJ1Y3QgdmlhX3BhZGxvY2tfc29mdGMgKnZwX3NjOw0K
KwlpZiAoKHZwX3NjID0gbWFsbG9jKHNpemVvZigqdnBfc2MpLCBNX0RFVkJV
RiwgTV9OT1dBSVQpKSA9PSBOVUxMKQ0KKwkJcmV0dXJuOw0KKwliemVybyh2
cF9zYywgc2l6ZW9mKCp2cF9zYykpOw0KKw0KKwl2cF9zYy0+c2NfY2lkID0g
Y3J5cHRvX2dldF9kcml2ZXJpZCgwKTsNCisJaWYgKHZwX3NjLT5zY19jaWQg
PCAwKSB7DQorCQlwcmludGYoIlBhZExvY2s6IENvdWxkIG5vdCBnZXQgYSBj
cnlwdG8gZHJpdmVyIElEXG4iKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwkv
Kg0KKwkgKiBBc2sgdGhlIG9wZW5jcnlwdG8gc3Vic3lzdGVtIHRvIHJlZ2lz
dGVyIG91cnNlbHZlcy4gQWx0aG91Z2gNCisJICogd2UgZG9uJ3Qgc3VwcG9y
dCBoYXJkd2FyZSBvZmZsb2FkaW5nIGZvciB2YXJpb3VzIEhNQUMgYWxnb3Jp
dGhtcywNCisJICogd2Ugd2lsbCBoYW5kbGUgdGhlbSwgYmVjYXVzZSBvcGVu
Y3J5cHRvIHByZWZlcnMgZHJpdmVycyB0aGF0DQorCSAqIHN1cHBvcnQgYWxs
IHJlcXVlc3RlZCBhbGdvcml0aG1zLg0KKwkgKi8NCisjZGVmaW5lIFJFR0lT
VEVSKGFsZykgXA0KKwljcnlwdG9fcmVnaXN0ZXIodnBfc2MtPnNjX2NpZCwg
YWxnLCAwLCAwLCBcDQorCSAgICB2aWFfcGFkbG9ja19jcnlwdG9fbmV3c2Vz
c2lvbiwgdmlhX3BhZGxvY2tfY3J5cHRvX2ZyZWVzZXNzaW9uLCBcDQorCSAg
ICB2aWFfcGFkbG9ja19jcnlwdG9fcHJvY2VzcywgdnBfc2MpOw0KKw0KKwlS
RUdJU1RFUihDUllQVE9fQUVTX0NCQyk7DQorCVJFR0lTVEVSKENSWVBUT19N
RDVfSE1BQyk7DQorCVJFR0lTVEVSKENSWVBUT19TSEExX0hNQUMpOw0KKwlS
RUdJU1RFUihDUllQVE9fUklQRU1EMTYwX0hNQUMpOw0KKwlSRUdJU1RFUihD
UllQVE9fU0hBMl9ITUFDKTsNCisNCisJcHJpbnRmKCJQYWRMb2NrOiByZWdp
c3RlcmVkIHN1cHBvcnQgZm9yIEFFU19DQkNcbiIpOw0KK30NCisNCitpbnQN
Cit2aWFfcGFkbG9ja19jcnlwdG9fbmV3c2Vzc2lvbih2b2lkICphcmcsIHVf
aW50MzJfdCAqc2lkcCwgc3RydWN0IGNyeXB0b2luaSAqY3JpKQ0KK3sNCisJ
c3RydWN0IGNyeXB0b2luaSAqYzsNCisJc3RydWN0IHZpYV9wYWRsb2NrX3Nv
ZnRjICpzYyA9IGFyZzsNCisJc3RydWN0IHZpYV9wYWRsb2NrX3Nlc3Npb24g
KnNlcyA9IE5VTEw7DQorCWNvbnN0IHN0cnVjdCBzd2NyX2F1dGhfaGFzaCAq
YXhmOw0KKwlzdHJ1Y3Qgc3djcl9kYXRhICpzd2Q7DQorCWludCBzZXNuLCBp
LCBjdzA7DQorDQorCUtBU1NFUlQoc2MgIT0gTlVMTCAvKiwgKCJ2aWFfcGFk
bG9ja19jcnlwdG9fZnJlZXNlc3Npb246IG51bGwgc29mdGMiKSovKTsNCisJ
aWYgKHNjID09IE5VTEwgfHwgc2lkcCA9PSBOVUxMIHx8IGNyaSA9PSBOVUxM
KQ0KKwkJcmV0dXJuIChFSU5WQUwpOw0KKw0KKwlpZiAoc2MtPnNjX3Nlc3Np
b25zID09IE5VTEwpIHsNCisJCXNlcyA9IHNjLT5zY19zZXNzaW9ucyA9IG1h
bGxvYyhzaXplb2YoKnNlcyksIE1fREVWQlVGLA0KKwkJICAgIE1fTk9XQUlU
KTsNCisJCWlmIChzZXMgPT0gTlVMTCkNCisJCQlyZXR1cm4gKEVOT01FTSk7
DQorCQlzZXNuID0gMDsNCisJCXNjLT5zY19uc2Vzc2lvbnMgPSAxOw0KKwl9
IGVsc2Ugew0KKwkJZm9yIChzZXNuID0gMDsgc2VzbiA8IHNjLT5zY19uc2Vz
c2lvbnM7IHNlc24rKykgew0KKwkJCWlmIChzYy0+c2Nfc2Vzc2lvbnNbc2Vz
bl0uc2VzX3VzZWQgPT0gMCkgew0KKwkJCQlzZXMgPSAmc2MtPnNjX3Nlc3Np
b25zW3Nlc25dOw0KKwkJCQlicmVhazsNCisJCQl9DQorCQl9DQorDQorCQlp
ZiAoc2VzID09IE5VTEwpIHsNCisJCQlzZXNuID0gc2MtPnNjX25zZXNzaW9u
czsNCisJCQlzZXMgPSBtYWxsb2MoKHNlc24gKyAxKSAqIHNpemVvZigqc2Vz
KSwgTV9ERVZCVUYsDQorCQkJICAgIE1fTk9XQUlUKTsNCisJCQlpZiAoc2Vz
ID09IE5VTEwpDQorCQkJCXJldHVybiAoRU5PTUVNKTsNCisJCQliY29weShz
Yy0+c2Nfc2Vzc2lvbnMsIHNlcywgc2VzbiAqIHNpemVvZigqc2VzKSk7DQor
CQkJYnplcm8oc2MtPnNjX3Nlc3Npb25zLCBzZXNuICogc2l6ZW9mKCpzZXMp
KTsNCisJCQlmcmVlKHNjLT5zY19zZXNzaW9ucywgTV9ERVZCVUYpOw0KKwkJ
CXNjLT5zY19zZXNzaW9ucyA9IHNlczsNCisJCQlzZXMgPSAmc2MtPnNjX3Nl
c3Npb25zW3Nlc25dOw0KKwkJCXNjLT5zY19uc2Vzc2lvbnMrKzsNCisJCX0N
CisJfQ0KKw0KKwliemVybyhzZXMsIHNpemVvZigqc2VzKSk7DQorCXNlcy0+
c2VzX3VzZWQgPSAxOw0KKw0KKwlmb3IgKGMgPSBjcmk7IGMgIT0gTlVMTDsg
YyA9IGMtPmNyaV9uZXh0KSB7DQorCQlzd2l0Y2ggKGMtPmNyaV9hbGcpIHsN
CisJCWNhc2UgQ1JZUFRPX0FFU19DQkM6DQorCQkJc3dpdGNoIChjLT5jcmlf
a2xlbikgew0KKwkJCWNhc2UgMTI4Og0KKwkJCQljdzAgPSBDM19DUllQVF9D
V0xPX0tFWTEyODsNCisJCQkJYnJlYWs7DQorCQkJY2FzZSAxOTI6DQorCQkJ
CWN3MCA9IEMzX0NSWVBUX0NXTE9fS0VZMTkyOw0KKwkJCQlicmVhazsNCisJ
CQljYXNlIDI1NjoNCisJCQkJY3cwID0gQzNfQ1JZUFRfQ1dMT19LRVkyNTY7
DQorCQkJCWJyZWFrOw0KKwkJCWRlZmF1bHQ6DQorCQkJCXJldHVybiAoRUlO
VkFMKTsNCisJCQl9DQorCQkJY3cwIHw9IEMzX0NSWVBUX0NXTE9fQUxHX0FF
UyB8DQorCQkJCUMzX0NSWVBUX0NXTE9fS0VZR0VOX1NXIHwNCisJCQkJQzNf
Q1JZUFRfQ1dMT19OT1JNQUw7DQorDQorI2lmZGVmIF9fTmV0QlNEX18NCisJ
CQlybmRfZXh0cmFjdF9kYXRhKHNlcy0+c2VzX2l2LCBzaXplb2Yoc2VzLT5z
ZXNfaXYpLA0KKwkJCSAgICBSTkRfRVhUUkFDVF9BTlkpOw0KKyNlbHNlDQor
CQkJZ2V0X3JhbmRvbV9ieXRlcyhzZXMtPnNlc19pdiwgc2l6ZW9mKHNlcy0+
c2VzX2l2KSk7DQorI2VuZGlmDQorCQkJc2VzLT5zZXNfa2xlbiA9IGMtPmNy
aV9rbGVuOw0KKwkJCXNlcy0+c2VzX2N3MCA9IGN3MDsNCisNCisJCQkvKiBC
dWlsZCBleHBhbmRlZCBrZXlzIGZvciBib3RoIGRpcmVjdGlvbnMgKi8NCisJ
CQlyaWpuZGFlbEtleVNldHVwRW5jKHNlcy0+c2VzX2VrZXksIGMtPmNyaV9r
ZXksDQorCQkJICAgIGMtPmNyaV9rbGVuKTsNCisJCQlyaWpuZGFlbEtleVNl
dHVwRGVjKHNlcy0+c2VzX2RrZXksIGMtPmNyaV9rZXksDQorCQkJICAgIGMt
PmNyaV9rbGVuKTsNCisJCQlmb3IgKGkgPSAwOyBpIDwgNCAqIChSSUpOREFF
TF9NQVhOUiArIDEpOyBpKyspIHsNCisJCQkJc2VzLT5zZXNfZWtleVtpXSA9
IG50b2hsKHNlcy0+c2VzX2VrZXlbaV0pOw0KKwkJCQlzZXMtPnNlc19ka2V5
W2ldID0gbnRvaGwoc2VzLT5zZXNfZGtleVtpXSk7DQorCQkJfQ0KKw0KKwkJ
CWJyZWFrOw0KKw0KKwkJLyogVXNlIGhhc2hpbmcgaW1wbGVtZW50YXRpb25z
IGZyb20gdGhlIGNyeXB0b3NvZnQgY29kZS4gKi8NCisJCWNhc2UgQ1JZUFRP
X01ENV9ITUFDOg0KKwkJCWF4ZiA9ICZzd2NyX2F1dGhfaGFzaF9obWFjX21k
NV85NjsNCisJCQlnb3RvIGF1dGhjb21tb247DQorCQljYXNlIENSWVBUT19T
SEExX0hNQUM6DQorCQkJYXhmID0gJnN3Y3JfYXV0aF9oYXNoX2htYWNfc2hh
MV85NjsNCisJCQlnb3RvIGF1dGhjb21tb247DQorCQljYXNlIENSWVBUT19S
SVBFTUQxNjBfSE1BQzoNCisJCQlheGYgPSAmc3djcl9hdXRoX2hhc2hfaG1h
Y19yaXBlbWRfMTYwXzk2Ow0KKwkJCWdvdG8gYXV0aGNvbW1vbjsNCisJCWNh
c2UgQ1JZUFRPX1NIQTJfSE1BQzoNCisJCQlpZiAoY3JpLT5jcmlfa2xlbiA9
PSAyNTYpDQorCQkJCWF4ZiA9ICZzd2NyX2F1dGhfaGFzaF9obWFjX3NoYTJf
MjU2Ow0KKwkJCWVsc2UgaWYgKGNyaS0+Y3JpX2tsZW4gPT0gMzg0KQ0KKwkJ
CQlheGYgPSAmc3djcl9hdXRoX2hhc2hfaG1hY19zaGEyXzM4NDsNCisJCQll
bHNlIGlmIChjcmktPmNyaV9rbGVuID09IDUxMikNCisJCQkJYXhmID0gJnN3
Y3JfYXV0aF9oYXNoX2htYWNfc2hhMl81MTI7DQorCQkJZWxzZSB7DQorCQkJ
CXJldHVybiBFSU5WQUw7DQorCQkJfQ0KKwkJYXV0aGNvbW1vbjoNCisJCQlN
QUxMT0Moc3dkLCBzdHJ1Y3Qgc3djcl9kYXRhICosDQorCQkJICAgIHNpemVv
ZihzdHJ1Y3Qgc3djcl9kYXRhKSwgTV9DUllQVE9fREFUQSwNCisJCQkgICAg
TV9OT1dBSVQpOw0KKwkJCWlmIChzd2QgPT0gTlVMTCkgew0KKwkJCQl2aWFf
cGFkbG9ja19jcnlwdG9fZnJlZXNlc3Npb24oc2MsIHNlc24pOw0KKwkJCQly
ZXR1cm4gKEVOT01FTSk7DQorCQkJfQ0KKwkJCWJ6ZXJvKHN3ZCwgc2l6ZW9m
KHN0cnVjdCBzd2NyX2RhdGEpKTsNCisJCQlzZXMtPnN3ZCA9IHN3ZDsNCisN
CisJCQlzd2QtPnN3X2ljdHggPSBtYWxsb2MoYXhmLT5hdXRoX2hhc2gtPmN0
eHNpemUsDQorCQkJICAgIE1fQ1JZUFRPX0RBVEEsIE1fTk9XQUlUKTsNCisJ
CQlpZiAoc3dkLT5zd19pY3R4ID09IE5VTEwpIHsNCisJCQkJdmlhX3BhZGxv
Y2tfY3J5cHRvX2ZyZWVzZXNzaW9uKHNjLCBzZXNuKTsNCisJCQkJcmV0dXJu
IChFTk9NRU0pOw0KKwkJCX0NCisNCisJCQlzd2QtPnN3X29jdHggPSBtYWxs
b2MoYXhmLT5hdXRoX2hhc2gtPmN0eHNpemUsDQorCQkJICAgIE1fQ1JZUFRP
X0RBVEEsIE1fTk9XQUlUKTsNCisJCQlpZiAoc3dkLT5zd19vY3R4ID09IE5V
TEwpIHsNCisJCQkJdmlhX3BhZGxvY2tfY3J5cHRvX2ZyZWVzZXNzaW9uKHNj
LCBzZXNuKTsNCisJCQkJcmV0dXJuIChFTk9NRU0pOw0KKwkJCX0NCisNCisJ
CQlmb3IgKGkgPSAwOyBpIDwgYy0+Y3JpX2tsZW4gLyA4OyBpKyspDQorCQkJ
CWMtPmNyaV9rZXlbaV0gXj0gSE1BQ19JUEFEX1ZBTDsNCisNCisJCQlheGYt
PkluaXQoc3dkLT5zd19pY3R4KTsNCisJCQlheGYtPlVwZGF0ZShzd2QtPnN3
X2ljdHgsIGMtPmNyaV9rZXksIGMtPmNyaV9rbGVuIC8gOCk7DQorCQkJYXhm
LT5VcGRhdGUoc3dkLT5zd19pY3R4LCBobWFjX2lwYWRfYnVmZmVyLA0KKwkJ
CSAgICBITUFDX0JMT0NLX0xFTiAtIChjLT5jcmlfa2xlbiAvIDgpKTsNCisN
CisJCQlmb3IgKGkgPSAwOyBpIDwgYy0+Y3JpX2tsZW4gLyA4OyBpKyspDQor
CQkJCWMtPmNyaV9rZXlbaV0gXj0gKEhNQUNfSVBBRF9WQUwgXg0KKwkJCQkg
ICAgSE1BQ19PUEFEX1ZBTCk7DQorDQorCQkJYXhmLT5Jbml0KHN3ZC0+c3df
b2N0eCk7DQorCQkJYXhmLT5VcGRhdGUoc3dkLT5zd19vY3R4LCBjLT5jcmlf
a2V5LCBjLT5jcmlfa2xlbiAvIDgpOw0KKwkJCWF4Zi0+VXBkYXRlKHN3ZC0+
c3dfb2N0eCwgaG1hY19vcGFkX2J1ZmZlciwNCisJCQkgICAgSE1BQ19CTE9D
S19MRU4gLSAoYy0+Y3JpX2tsZW4gLyA4KSk7DQorDQorCQkJZm9yIChpID0g
MDsgaSA8IGMtPmNyaV9rbGVuIC8gODsgaSsrKQ0KKwkJCQljLT5jcmlfa2V5
W2ldIF49IEhNQUNfT1BBRF9WQUw7DQorDQorCQkJc3dkLT5zd19heGYgPSBh
eGY7DQorCQkJc3dkLT5zd19hbGcgPSBjLT5jcmlfYWxnOw0KKw0KKwkJCWJy
ZWFrOw0KKwkJZGVmYXVsdDoNCisJCQlyZXR1cm4gKEVJTlZBTCk7DQorCQl9
DQorCX0NCisNCisJKnNpZHAgPSBWSUFDM19TSUQoMCwgc2Vzbik7DQorCXJl
dHVybiAoMCk7DQorfQ0KKw0KK2ludA0KK3ZpYV9wYWRsb2NrX2NyeXB0b19m
cmVlc2Vzc2lvbih2b2lkICphcmcsIHVfaW50NjRfdCB0aWQpDQorew0KKwlz
dHJ1Y3QgdmlhX3BhZGxvY2tfc29mdGMgKnNjID0gYXJnOw0KKwlzdHJ1Y3Qg
c3djcl9kYXRhICpzd2Q7DQorCXN0cnVjdCBhdXRoX2hhc2ggKmF4ZjsNCisJ
aW50IHNlc247DQorCXVfaW50MzJfdCBzaWQgPSAoKHVfaW50MzJfdCl0aWQp
ICYgMHhmZmZmZmZmZjsNCisNCisJS0FTU0VSVChzYyAhPSBOVUxMIC8qLCAo
InZpYV9wYWRsb2NrX2NyeXB0b19mcmVlc2Vzc2lvbjogbnVsbCBzb2Z0YyIp
Ki8pOw0KKwlpZiAoc2MgPT0gTlVMTCkNCisJCXJldHVybiAoRUlOVkFMKTsN
CisNCisJc2VzbiA9IFZJQUMzX1NFU1NJT04oc2lkKTsNCisJaWYgKHNlc24g
Pj0gc2MtPnNjX25zZXNzaW9ucykNCisJCXJldHVybiAoRUlOVkFMKTsNCisN
CisJaWYgKHNjLT5zY19zZXNzaW9uc1tzZXNuXS5zd2QpIHsNCisJCXN3ZCA9
IHNjLT5zY19zZXNzaW9uc1tzZXNuXS5zd2Q7DQorCQlheGYgPSBzd2QtPnN3
X2F4Zi0+YXV0aF9oYXNoOw0KKw0KKwkJaWYgKHN3ZC0+c3dfaWN0eCkgew0K
KwkJCWJ6ZXJvKHN3ZC0+c3dfaWN0eCwgYXhmLT5jdHhzaXplKTsNCisJCQlm
cmVlKHN3ZC0+c3dfaWN0eCwgTV9DUllQVE9fREFUQSk7DQorCQl9DQorCQlp
ZiAoc3dkLT5zd19vY3R4KSB7DQorCQkJYnplcm8oc3dkLT5zd19vY3R4LCBh
eGYtPmN0eHNpemUpOw0KKwkJCWZyZWUoc3dkLT5zd19vY3R4LCBNX0NSWVBU
T19EQVRBKTsNCisJCX0NCisJCUZSRUUoc3dkLCBNX0NSWVBUT19EQVRBKTsN
CisJfQ0KKw0KKwliemVybygmc2MtPnNjX3Nlc3Npb25zW3Nlc25dLCBzaXpl
b2Yoc2MtPnNjX3Nlc3Npb25zW3Nlc25dKSk7DQorCXJldHVybiAoMCk7DQor
fQ0KKw0KK3N0YXRpYyBfX2lubGluZSB2b2lkDQordmlhX3BhZGxvY2tfY2Jj
KHZvaWQgKmN3LCB2b2lkICpzcmMsIHZvaWQgKmRzdCwgdm9pZCAqa2V5LCBp
bnQgcmVwLA0KKyAgICB2b2lkICppdikNCit7DQorCXVuc2lnbmVkIGludCBj
cmVnMDsNCisNCisJY3JlZzAgPSByY3IwKCk7CQkvKiBQZXJtaXQgYWNjZXNz
IHRvIFNJTUQvRlBVIHBhdGggKi8NCisJbGNyMChjcmVnMCAmIH4oQ1IwX0VN
fENSMF9UUykpOw0KKw0KKwkvKiBEbyB0aGUgZGVlZCAqLw0KKwlfX2FzbSBf
X3ZvbGF0aWxlKCJwdXNoZmw7IHBvcGZsIik7CS8qIGZvcmNlIGtleSByZWxv
YWQgKi8NCisJX19hc20gX192b2xhdGlsZSgiLmJ5dGUgMHhmMywgMHgwZiwg
MHhhNywgMHhkMCIgOiAvKiByZXAgeGNyeXB0LWRiZCAqLw0KKwkJCTogImEi
IChpdiksICJiIiAoa2V5KSwgImMiIChyZXApLCAiZCIgKGN3KSwgIlMiIChz
cmMpLCAiRCIgKGRzdCkNCisJCQk6ICJtZW1vcnkiLCAiY2MiKTsNCisNCisJ
bGNyMChjcmVnMCk7DQorfQ0KKw0KK2ludA0KK3ZpYV9wYWRsb2NrX2NyeXB0
b19zd2F1dGgoc3RydWN0IGNyeXB0b3AgKmNycCwgc3RydWN0IGNyeXB0b2Rl
c2MgKmNyZCwNCisgICAgc3RydWN0IHN3Y3JfZGF0YSAqc3csIGNhZGRyX3Qg
YnVmKQ0KK3sNCisJaW50CXR5cGU7DQorDQorCWlmIChjcnAtPmNycF9mbGFn
cyAmIENSWVBUT19GX0lNQlVGKQ0KKwkJdHlwZSA9IENSWVBUT19CVUZfTUJV
RjsNCisJZWxzZQ0KKwkJdHlwZT0gQ1JZUFRPX0JVRl9JT1Y7DQorDQorCXJl
dHVybiAoc3djcl9hdXRoY29tcHV0ZShjcnAsIGNyZCwgc3csIGJ1ZiwgdHlw
ZSkpOw0KK30NCisNCitpbnQNCit2aWFfcGFkbG9ja19jcnlwdG9fZW5jZGVj
KHN0cnVjdCBjcnlwdG9wICpjcnAsIHN0cnVjdCBjcnlwdG9kZXNjICpjcmQs
DQorICAgIHN0cnVjdCB2aWFfcGFkbG9ja19zZXNzaW9uICpzZXMsIHN0cnVj
dCB2aWFfcGFkbG9ja19zb2Z0YyAqc2MsIGNhZGRyX3QgYnVmKQ0KK3sNCisJ
dV9pbnQzMl90ICprZXk7DQorCWludCBlcnIgPSAwOw0KKw0KKwlpZiAoKGNy
ZC0+Y3JkX2xlbiAlIDE2KSAhPSAwKSB7DQorCQllcnIgPSBFSU5WQUw7DQor
CQlyZXR1cm4gKGVycik7DQorCX0NCisNCisJc2MtPm9wX2J1ZiA9IG1hbGxv
YyhjcmQtPmNyZF9sZW4sIE1fREVWQlVGLCBNX05PV0FJVCk7DQorCWlmIChz
Yy0+b3BfYnVmID09IE5VTEwpIHsNCisJCWVyciA9IEVOT01FTTsNCisJCXJl
dHVybiAoZXJyKTsNCisJfQ0KKw0KKwlpZiAoY3JkLT5jcmRfZmxhZ3MgJiBD
UkRfRl9FTkNSWVBUKSB7DQorCQlzYy0+b3BfY3dbMF0gPSBzZXMtPnNlc19j
dzAgfCBDM19DUllQVF9DV0xPX0VOQ1JZUFQ7DQorCQlrZXkgPSBzZXMtPnNl
c19la2V5Ow0KKwkJaWYgKGNyZC0+Y3JkX2ZsYWdzICYgQ1JEX0ZfSVZfRVhQ
TElDSVQpDQorCQkJYmNvcHkoY3JkLT5jcmRfaXYsIHNjLT5vcF9pdiwgMTYp
Ow0KKwkJZWxzZQ0KKwkJCWJjb3B5KHNlcy0+c2VzX2l2LCBzYy0+b3BfaXYs
IDE2KTsNCisNCisJCWlmICgoY3JkLT5jcmRfZmxhZ3MgJiBDUkRfRl9JVl9Q
UkVTRU5UKSA9PSAwKSB7DQorCQkJaWYgKGNycC0+Y3JwX2ZsYWdzICYgQ1JZ
UFRPX0ZfSU1CVUYpDQorCQkJCW1fY29weWJhY2soKHN0cnVjdCBtYnVmICop
Y3JwLT5jcnBfYnVmLA0KKwkJCQkgICAgY3JkLT5jcmRfaW5qZWN0LCAxNiwg
c2MtPm9wX2l2KTsNCisJCQllbHNlIGlmIChjcnAtPmNycF9mbGFncyAmIENS
WVBUT19GX0lPVikNCisJCQkJY3Vpb19jb3B5YmFjaygoc3RydWN0IHVpbyAq
KWNycC0+Y3JwX2J1ZiwNCisJCQkJICAgIGNyZC0+Y3JkX2luamVjdCwgMTYs
IHNjLT5vcF9pdik7DQorCQkJZWxzZQ0KKwkJCQliY29weShzYy0+b3BfaXYs
DQorCQkJCSAgICBjcnAtPmNycF9idWYgKyBjcmQtPmNyZF9pbmplY3QsIDE2
KTsNCisJCX0NCisJfSBlbHNlIHsNCisJCXNjLT5vcF9jd1swXSA9IHNlcy0+
c2VzX2N3MCB8IEMzX0NSWVBUX0NXTE9fREVDUllQVDsNCisJCWtleSA9IHNl
cy0+c2VzX2RrZXk7DQorCQlpZiAoY3JkLT5jcmRfZmxhZ3MgJiBDUkRfRl9J
Vl9FWFBMSUNJVCkNCisJCQliY29weShjcmQtPmNyZF9pdiwgc2MtPm9wX2l2
LCAxNik7DQorCQllbHNlIHsNCisJCQlpZiAoY3JwLT5jcnBfZmxhZ3MgJiBD
UllQVE9fRl9JTUJVRikNCisJCQkJbV9jb3B5ZGF0YSgoc3RydWN0IG1idWYg
KiljcnAtPmNycF9idWYsDQorCQkJCSAgICBjcmQtPmNyZF9pbmplY3QsIDE2
LCBzYy0+b3BfaXYpOw0KKwkJCWVsc2UgaWYgKGNycC0+Y3JwX2ZsYWdzICYg
Q1JZUFRPX0ZfSU9WKQ0KKwkJCQljdWlvX2NvcHlkYXRhKChzdHJ1Y3QgdWlv
ICopY3JwLT5jcnBfYnVmLA0KKwkJCQkgICAgY3JkLT5jcmRfaW5qZWN0LCAx
Niwgc2MtPm9wX2l2KTsNCisJCQllbHNlDQorCQkJCWJjb3B5KGNycC0+Y3Jw
X2J1ZiArIGNyZC0+Y3JkX2luamVjdCwNCisJCQkJICAgIHNjLT5vcF9pdiwg
MTYpOw0KKwkJfQ0KKwl9DQorDQorCWlmIChjcnAtPmNycF9mbGFncyAmIENS
WVBUT19GX0lNQlVGKQ0KKwkJbV9jb3B5ZGF0YSgoc3RydWN0IG1idWYgKilj
cnAtPmNycF9idWYsDQorCQkgICAgY3JkLT5jcmRfc2tpcCwgY3JkLT5jcmRf
bGVuLCBzYy0+b3BfYnVmKTsNCisJZWxzZSBpZiAoY3JwLT5jcnBfZmxhZ3Mg
JiBDUllQVE9fRl9JT1YpDQorCQljdWlvX2NvcHlkYXRhKChzdHJ1Y3QgdWlv
ICopY3JwLT5jcnBfYnVmLA0KKwkJICAgIGNyZC0+Y3JkX3NraXAsIGNyZC0+
Y3JkX2xlbiwgc2MtPm9wX2J1Zik7DQorCWVsc2UNCisJCWJjb3B5KGNycC0+
Y3JwX2J1ZiArIGNyZC0+Y3JkX3NraXAsIHNjLT5vcF9idWYsDQorY3JkLT5j
cmRfbGVuKTsNCisNCisJc2MtPm9wX2N3WzFdID0gc2MtPm9wX2N3WzJdID0g
c2MtPm9wX2N3WzNdID0gMDsNCisJdmlhX3BhZGxvY2tfY2JjKCZzYy0+b3Bf
Y3csIHNjLT5vcF9idWYsIHNjLT5vcF9idWYsIGtleSwNCisJICAgIGNyZC0+
Y3JkX2xlbiAvIDE2LCBzYy0+b3BfaXYpOw0KKw0KKwlpZiAoY3JwLT5jcnBf
ZmxhZ3MgJiBDUllQVE9fRl9JTUJVRikNCisJCW1fY29weWJhY2soKHN0cnVj
dCBtYnVmICopY3JwLT5jcnBfYnVmLA0KKwkJICAgIGNyZC0+Y3JkX3NraXAs
IGNyZC0+Y3JkX2xlbiwgc2MtPm9wX2J1Zik7DQorCWVsc2UgaWYgKGNycC0+
Y3JwX2ZsYWdzICYgQ1JZUFRPX0ZfSU9WKQ0KKwkJY3Vpb19jb3B5YmFjaygo
c3RydWN0IHVpbyAqKWNycC0+Y3JwX2J1ZiwNCisJCSAgICBjcmQtPmNyZF9z
a2lwLCBjcmQtPmNyZF9sZW4sIHNjLT5vcF9idWYpOw0KKwllbHNlDQorCQli
Y29weShzYy0+b3BfYnVmLCBjcnAtPmNycF9idWYgKyBjcmQtPmNyZF9za2lw
LA0KKwkJICAgIGNyZC0+Y3JkX2xlbik7DQorDQorCS8qIGNvcHkgb3V0IGxh
c3QgYmxvY2sgZm9yIHVzZSBhcyBuZXh0IHNlc3Npb24gSVYgKi8NCisJaWYg
KGNyZC0+Y3JkX2ZsYWdzICYgQ1JEX0ZfRU5DUllQVCkgew0KKwkJaWYgKGNy
cC0+Y3JwX2ZsYWdzICYgQ1JZUFRPX0ZfSU1CVUYpDQorCQkJbV9jb3B5ZGF0
YSgoc3RydWN0IG1idWYgKiljcnAtPmNycF9idWYsDQorCQkJICAgIGNyZC0+
Y3JkX3NraXAgKyBjcmQtPmNyZF9sZW4gLSAxNiwgMTYsDQorCQkJICAgIHNl
cy0+c2VzX2l2KTsNCisJCWVsc2UgaWYgKGNycC0+Y3JwX2ZsYWdzICYgQ1JZ
UFRPX0ZfSU9WKQ0KKwkJCWN1aW9fY29weWRhdGEoKHN0cnVjdCB1aW8gKilj
cnAtPmNycF9idWYsDQorCQkJICAgIGNyZC0+Y3JkX3NraXAgKyBjcmQtPmNy
ZF9sZW4gLSAxNiwgMTYsDQorCQkJICAgIHNlcy0+c2VzX2l2KTsNCisJCWVs
c2UNCisJCQliY29weShjcnAtPmNycF9idWYgKyBjcmQtPmNyZF9za2lwICsN
CisJCQkgICAgY3JkLT5jcmRfbGVuIC0gMTYsIHNlcy0+c2VzX2l2LCAxNik7
DQorCX0NCisNCisJaWYgKHNjLT5vcF9idWYgIT0gTlVMTCkgew0KKwkJYnpl
cm8oc2MtPm9wX2J1ZiwgY3JkLT5jcmRfbGVuKTsNCisJCWZyZWUoc2MtPm9w
X2J1ZiwgTV9ERVZCVUYpOw0KKwkJc2MtPm9wX2J1ZiA9IE5VTEw7DQorCX0N
CisNCisJcmV0dXJuIChlcnIpOw0KK30NCisNCitpbnQNCit2aWFfcGFkbG9j
a19jcnlwdG9fcHJvY2Vzcyh2b2lkICphcmcsIHN0cnVjdCBjcnlwdG9wICpj
cnAsIGludCBoaW50KQ0KK3sNCisJc3RydWN0IHZpYV9wYWRsb2NrX3NvZnRj
ICpzYyA9IGFyZzsNCisJc3RydWN0IHZpYV9wYWRsb2NrX3Nlc3Npb24gKnNl
czsNCisJc3RydWN0IGNyeXB0b2Rlc2MgKmNyZDsNCisJaW50IHNlc24sIGVy
ciA9IDA7DQorDQorCUtBU1NFUlQoc2MgIT0gTlVMTCAvKiwgKCJ2aWFfcGFk
bG9ja19jcnlwdG9fcHJvY2VzczogbnVsbCBzb2Z0YyIpKi8pOw0KKwlpZiAo
Y3JwID09IE5VTEwgfHwgY3JwLT5jcnBfY2FsbGJhY2sgPT0gTlVMTCkgew0K
KwkJZXJyID0gRUlOVkFMOw0KKwkJZ290byBvdXQ7DQorCX0NCisNCisJc2Vz
biA9IFZJQUMzX1NFU1NJT04oY3JwLT5jcnBfc2lkKTsNCisJaWYgKHNlc24g
Pj0gc2MtPnNjX25zZXNzaW9ucykgew0KKwkJZXJyID0gRUlOVkFMOw0KKwkJ
Z290byBvdXQ7DQorCX0NCisJc2VzID0gJnNjLT5zY19zZXNzaW9uc1tzZXNu
XTsNCisNCisJZm9yIChjcmQgPSBjcnAtPmNycF9kZXNjOyBjcmQ7IGNyZCA9
IGNyZC0+Y3JkX25leHQpIHsNCisJCXN3aXRjaCAoY3JkLT5jcmRfYWxnKSB7
DQorCQljYXNlIENSWVBUT19BRVNfQ0JDOg0KKwkJCWlmICgoZXJyID0gdmlh
X3BhZGxvY2tfY3J5cHRvX2VuY2RlYyhjcnAsIGNyZCwgc2VzLA0KKwkJCSAg
ICBzYywgY3JwLT5jcnBfYnVmKSkgIT0gMCkNCisJCQkJZ290byBvdXQ7DQor
CQkJYnJlYWs7DQorDQorCQljYXNlIENSWVBUT19NRDVfSE1BQzoNCisJCWNh
c2UgQ1JZUFRPX1NIQTFfSE1BQzoNCisJCWNhc2UgQ1JZUFRPX1JJUEVNRDE2
MF9ITUFDOg0KKwkJY2FzZSBDUllQVE9fU0hBMl9ITUFDOg0KKwkJCWlmICgo
ZXJyID0gdmlhX3BhZGxvY2tfY3J5cHRvX3N3YXV0aChjcnAsIGNyZCwNCisJ
CQkgICAgc2VzLT5zd2QsIGNycC0+Y3JwX2J1ZikpICE9IDApDQorCQkJCWdv
dG8gb3V0Ow0KKwkJCWJyZWFrOw0KKw0KKwkJZGVmYXVsdDoNCisJCQllcnIg
PSBFSU5WQUw7DQorCQkJZ290byBvdXQ7DQorCQl9DQorCX0NCitvdXQ6DQor
CWNycC0+Y3JwX2V0eXBlID0gZXJyOw0KKwljcnlwdG9fZG9uZShjcnApOw0K
KwlyZXR1cm4gKGVycik7DQorfQ0KKw0KKyNlbmRpZiAvKiBWSUFfUEFETE9D
SyAqLw0KSW5kZXg6IHN5cy9vcGVuY3J5cHRvL2NyeXB0b3NvZnQuYw0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9z
eXMvb3BlbmNyeXB0by9jcnlwdG9zb2Z0LmMsdg0KcmV0cmlldmluZyByZXZp
c2lvbiAxLjE1DQpkaWZmIC11IC1yMS4xNSBjcnlwdG9zb2Z0LmMNCi0tLSBz
eXMvb3BlbmNyeXB0by9jcnlwdG9zb2Z0LmMJMTYgTm92IDIwMDYgMDE6MzM6
NTEgLTAwMDAJMS4xNQ0KKysrIHN5cy9vcGVuY3J5cHRvL2NyeXB0b3NvZnQu
YwkxMiBKYW4gMjAwNyAxNjoyNjozNiAtMDAwMA0KQEAgLTYwLDggKzYwLDYg
QEANCiAJOiBjdWlvX2NvcHlkYXRhKChzdHJ1Y3QgdWlvICopYSxiLGMsZCkN
CiANCiBzdGF0aWMJaW50IHN3Y3JfZW5jZGVjKHN0cnVjdCBjcnlwdG9kZXNj
ICosIHN0cnVjdCBzd2NyX2RhdGEgKiwgY2FkZHJfdCwgaW50KTsNCi1zdGF0
aWMJaW50IHN3Y3JfYXV0aGNvbXB1dGUoc3RydWN0IGNyeXB0b3AgKmNycCwg
c3RydWN0IGNyeXB0b2Rlc2MgKmNyZCwNCi0JCQkgICAgIHN0cnVjdCBzd2Ny
X2RhdGEgKnN3LCBjYWRkcl90IGJ1ZiwgaW50IG91dHR5cGUpOw0KIHN0YXRp
YwlpbnQgc3djcl9jb21wZGVjKHN0cnVjdCBjcnlwdG9kZXNjICosIHN0cnVj
dCBzd2NyX2RhdGEgKiwgY2FkZHJfdCwgaW50KTsNCiBzdGF0aWMJaW50IHN3
Y3JfcHJvY2Vzcyh2b2lkICosIHN0cnVjdCBjcnlwdG9wICosIGludCk7DQog
c3RhdGljCWludCBzd2NyX25ld3Nlc3Npb24odm9pZCAqLCB1X2ludDMyX3Qg
Kiwgc3RydWN0IGNyeXB0b2luaSAqKTsNCkBAIC01MzAsNyArNTI4LDcgQEAN
CiAvKg0KICAqIENvbXB1dGUga2V5ZWQtaGFzaCBhdXRoZW50aWNhdG9yLg0K
ICAqLw0KLXN0YXRpYyBpbnQNCitpbnQNCiBzd2NyX2F1dGhjb21wdXRlKHN0
cnVjdCBjcnlwdG9wICpjcnAsIHN0cnVjdCBjcnlwdG9kZXNjICpjcmQsDQog
ICAgIHN0cnVjdCBzd2NyX2RhdGEgKnN3LCBjYWRkcl90IGJ1ZiwgaW50IG91
dHR5cGUpDQogew0KSW5kZXg6IHN5cy9vcGVuY3J5cHRvL2NyeXB0b3NvZnQu
aA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290
L3NyYy9zeXMvb3BlbmNyeXB0by9jcnlwdG9zb2Z0Lmgsdg0KcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjMNCmRpZmYgLXUgLXIxLjMgY3J5cHRvc29mdC5oDQot
LS0gc3lzL29wZW5jcnlwdG8vY3J5cHRvc29mdC5oCTI1IE5vdiAyMDA1IDE2
OjE2OjQ2IC0wMDAwCTEuMw0KKysrIHN5cy9vcGVuY3J5cHRvL2NyeXB0b3Nv
ZnQuaAkxMiBKYW4gMjAwNyAxNjoyNjozNiAtMDAwMA0KQEAgLTU3LDQgKzU3
LDkgQEANCiAJc3RydWN0IHN3Y3JfZGF0YSAqc3dfbmV4dDsNCiB9Ow0KIA0K
KyNpZmRlZiBfS0VSTkVMDQoraW50IHN3Y3JfYXV0aGNvbXB1dGUoc3RydWN0
IGNyeXB0b3AgKmNycCwgc3RydWN0IGNyeXB0b2Rlc2MgKmNyZCwNCisgICAg
c3RydWN0IHN3Y3JfZGF0YSAqc3csIGNhZGRyX3QgYnVmLCBpbnQgb3V0dHlw
ZSk7DQorI2VuZGlmIC8qIF9LRVJORUwgKi8NCisNCiAjZW5kaWYgLyogX0NS
WVBUT19DUllQVE9fSF8gKi8NCg==

--0-1524365691-1168620281=:96--