Subject: NetBSD 3.1 VIA Padlock RNG
To: None <netbsd-user@netbsd.org, port-i386@netbsd.org>
From: Daniel de Kok <danieldk@pobox.com>
List: port-i386
Date: 01/09/2007 17:02:54
  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-635669745-1168358574=:855
Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed

Hi,

I have slightly modified Allen Briggs' VIA C3 RNG support patch [1] for 
NetBSD 3.1. It seems to work well:

---
# rndctl -s
          14236351 bits mixed into pool
              4096 bits currently stored in pool (max 4096)
          14006143 bits of entropy discarded due to full pool
            226112 hard-random bits generated
                 0 pseudo-random bits generated

# rndctl -d cpu0 -l
Source                 Bits Type      Flags
cpu0               14799929 rng  collect
---

If I have time, I will see if it works with NetBSD-Current.

-- Daniel

[1] http://mail-index.netbsd.org/port-i386/2004/08/09/0000.html
--0-635669745-1168358574=:855
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=padlock-rng.diff
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.NEB.4.64.0701091702540.855@liza.taickim.net>
Content-Description: 
Content-Disposition: attachment; filename=padlock-rng.diff

SW5kZXg6IGFyY2gvaTM4Ni9pMzg2L2NwdS5jDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3JjL3N5cy9hcmNoL2kzODYv
aTM4Ni9jcHUuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjAuMTAuMQ0K
ZGlmZiAtdSAtcjEuMjAuMTAuMSBjcHUuYw0KLS0tIGFyY2gvaTM4Ni9pMzg2
L2NwdS5jCTE4IEp1bCAyMDA1IDIwOjQ5OjAwIC0wMDAwCTEuMjAuMTAuMQ0K
KysrIGFyY2gvaTM4Ni9pMzg2L2NwdS5jCTkgSmFuIDIwMDcgMTU6NTE6MTEg
LTAwMDANCkBAIC03Nyw2ICs3Nyw3IEBADQogI2luY2x1ZGUgIm9wdF9tdWx0
aXByb2Nlc3Nvci5oIg0KICNpbmNsdWRlICJvcHRfbXBiaW9zLmgiCQkvKiBm
b3IgTVBERUJVRyAqLw0KICNpbmNsdWRlICJvcHRfbXRyci5oIg0KKyNpbmNs
dWRlICJvcHRfdmlhcGFkbG9jay5oIg0KIA0KICNpbmNsdWRlICJsYXBpYy5o
Ig0KICNpbmNsdWRlICJpb2FwaWMuaCINCkBAIC00NzEsNiArNDcyLDEyIEBA
DQogCQl9DQogCX0NCiAjZW5kaWYgLyogTVRSUiAqLw0KKyNpZmRlZiBWSUFf
Uk5HDQorCWlmIChjaS0+Y2lfZmVhdHVyZTNfZmxhZ3MgJiBDUFVJRF9GRUFU
X1ZSTkcpIHsNCisJCWNpLT5jaV92cC52cF9jaSA9IGNpOw0KKwkJdmlhX3Ju
Z19hdHRhY2goJmNpLT5jaV92cCk7DQorCX0NCisjZW5kaWYgLyogVklBX1JO
RyAqLw0KIA0KICNpZmRlZiBNVUxUSVBST0NFU1NPUg0KIAljaS0+Y2lfZmxh
Z3MgfD0gQ1BVRl9SVU5OSU5HOw0KSW5kZXg6IGFyY2gvaTM4Ni9pMzg2L2lk
ZW50Y3B1LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAv
Y3Zzcm9vdC9zcmMvc3lzL2FyY2gvaTM4Ni9pMzg2L2lkZW50Y3B1LmMsdg0K
cmV0cmlldmluZyByZXZpc2lvbiAxLjE3LjIuMw0KZGlmZiAtdSAtcjEuMTcu
Mi4zIGlkZW50Y3B1LmMNCi0tLSBhcmNoL2kzODYvaTM4Ni9pZGVudGNwdS5j
CTEgSmFuIDIwMDYgMjM6MjU6NTkgLTAwMDAJMS4xNy4yLjMNCisrKyBhcmNo
L2kzODYvaTM4Ni9pZGVudGNwdS5jCTkgSmFuIDIwMDcgMTU6NTE6MTIgLTAw
MDANCkBAIC0xLDcgKzEsNyBAQA0KIC8qCSROZXRCU0Q6IGlkZW50Y3B1LmMs
diAxLjE3LjIuMyAyMDA2LzAxLzAxIDIzOjI1OjU5IHJpeiBFeHAgJAkqLw0K
IA0KIC8qLQ0KLSAqIENvcHlyaWdodCAoYykgMTk5OSwgMjAwMCwgMjAwMSBU
aGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4NCisgKiBDb3B5cmlnaHQgKGMp
IDE5OTksIDIwMDAsIDIwMDEsIDIwMDQgVGhlIE5ldEJTRCBGb3VuZGF0aW9u
LCBJbmMuDQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAgKg0KICAqIFRo
aXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQg
dG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uDQpAQCAtNjMzLDYgKzYzMyw4IEBA
DQogdm9pZA0KIHZpYV9jcHVfcHJvYmUoc3RydWN0IGNwdV9pbmZvICpjaSkN
CiB7DQorCXVfaW50IG1vZGVsID0gQ1BVSUQyTU9ERUwoY2ktPmNpX3NpZ25h
dHVyZSk7DQorCXVfaW50IHN0ZXBwaW5nID0gQ1BVSUQyU1RFUFBJTkcoY2kt
PmNpX3NpZ25hdHVyZSk7DQogCXVfaW50IGRlc2NzWzRdOw0KIAl1X2ludCBs
ZnVuYzsNCiANCkBAIC02NDksNiArNjUxLDM4IEBADQogCQlDUFVJRCgweDgw
MDAwMDAxLCBkZXNjc1swXSwgZGVzY3NbMV0sIGRlc2NzWzJdLCBkZXNjc1sz
XSk7DQogCQljaS0+Y2lfZmVhdHVyZV9mbGFncyB8PSBkZXNjc1szXTsNCiAJ
fQ0KKw0KKwlpZiAobW9kZWwgPj0gMHg5KSB7DQorCQkvKiBOZWhlbWlhaCBv
ciBFc3RoZXIgKi8NCisJCUNQVUlEKDB4YzAwMDAwMDAsIGRlc2NzWzBdLCBk
ZXNjc1sxXSwgZGVzY3NbMl0sIGRlc2NzWzNdKTsNCisJCWxmdW5jID0gZGVz
Y3NbMF07DQorCQlpZiAobGZ1bmMgPT0gMHhjMDAwMDAwMSkgew0KKwkJCUNQ
VUlEKGxmdW5jLCBkZXNjc1swXSwgZGVzY3NbMV0sIGRlc2NzWzJdLCBkZXNj
c1szXSk7DQorCQkJbGZ1bmMgPSBkZXNjc1szXTsNCisJCQlpZiAobW9kZWwg
PiAweDkgfHwgc3RlcHBpbmcgPj0gMykJLyogUk5HICovDQorCQkJCWlmICgo
bGZ1bmMgJiAweDBjKSA9PSAweDBjKQ0KKwkJCQkJY2ktPmNpX2ZlYXR1cmUz
X2ZsYWdzIHw9IENQVUlEX0ZFQVRfVlJORzsNCisJCQlpZiAobW9kZWwgPiAw
eDkgfHwgc3RlcHBpbmcgPj0gOCkgewkvKiBBQ0UgKi8NCisJCQkJaWYgKChs
ZnVuYyAmIDB4YzApID09IDB4YzApIHsNCisJCQkJCWNpLT5jaV9mZWF0dXJl
M19mbGFncyB8PSBDUFVJRF9GRUFUX1ZBQ0U7DQorCQkJCX0NCisNCisJCQkJ
LyoNCisJCQkJICogSWYgd2UgaGF2ZSB0aGUgUk5HIGFuZCB3ZSdyZSBvbiBF
c3RoZXINCisJCQkJICogb3IgTmVoZW1pYWggc3RlcHBpbmcgPj0gOCwgZW5h
YmxlIGJvdGgNCisJCQkJICogUk5HIHNvdXJjZXMuICBFYXJsaWVyIHN0ZXBw
aW5ncyBoYXZlDQorCQkJCSAqIG9ubHkgb25lIHNvdXJjZS4NCisJCQkJICov
DQorCQkJCWlmIChjaS0+Y2lfZmVhdHVyZTNfZmxhZ3MgJiBDUFVJRF9GRUFU
X1ZSTkcpIHsNCisJCQkJCXVfaW50IG1zcjsNCisNCisJCQkJICAgIAltc3Ig
PSByZG1zcihNU1JfVklBX1JORykgJiB+MHgxZjsNCisJCQkJCXdybXNyKE1T
Ul9WSUFfUk5HLA0KKwkJCQkJCW1zciB8IE1TUl9WSUFfUk5HXzJOT0lTRSk7
DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCiB9DQogDQogY29uc3QgY2hh
ciAqDQpAQCAtMTI5MSw2ICsxMzI1LDEyIEBADQogCQlwcmludGYoIiVzOiBm
ZWF0dXJlczMgJXNcbiIsIGNwdW5hbWUsIGJ1Zik7DQogCX0NCiANCisJaWYg
KGNpLT5jaV9mZWF0dXJlM19mbGFncykgew0KKwkJYml0bWFza19zbnByaW50
ZihjaS0+Y2lfZmVhdHVyZTNfZmxhZ3MsDQorCQkgICAgQ1BVSURfRkVBVF9G
TEFHUywgYnVmLCBzaXplb2YoYnVmKSk7DQorCQlwcmludGYoIiVzOiBleHQu
IGZlYXR1cmVzICVzXG4iLCBjcHVuYW1lLCBidWYpOw0KKwl9DQorDQogCWlm
ICgqY3B1X2JyYW5kX3N0cmluZyAhPSAnXDAnKQ0KIAkJcHJpbnRmKCIlczog
XCIlc1wiXG4iLCBjcHVuYW1lLCBjcHVfYnJhbmRfc3RyaW5nKTsNCiANCklu
ZGV4OiBhcmNoL2kzODYvaW5jbHVkZS9jcHUuaA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvYXJjaC9pMzg2
L2luY2x1ZGUvY3B1Lmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjExNw0K
ZGlmZiAtdSAtcjEuMTE3IGNwdS5oDQotLS0gYXJjaC9pMzg2L2luY2x1ZGUv
Y3B1LmgJMjEgRmViIDIwMDUgMTU6MTA6NTEgLTAwMDAJMS4xMTcNCisrKyBh
cmNoL2kzODYvaW5jbHVkZS9jcHUuaAk5IEphbiAyMDA3IDE1OjUxOjEyIC0w
MDAwDQpAQCAtNTMsNiArNTMsNyBAQA0KICNpbmNsdWRlIDxtYWNoaW5lL3Rz
cy5oPg0KICNpbmNsdWRlIDxtYWNoaW5lL2ludHJkZWZzLmg+DQogI2luY2x1
ZGUgPHg4Ni9jYWNoZWluZm8uaD4NCisjaW5jbHVkZSA8eDg2L3ZpYV9wYWRs
b2NrLmg+DQogDQogI2luY2x1ZGUgPHN5cy9kZXZpY2UuaD4NCiAjaW5jbHVk
ZSA8c3lzL2xvY2suaD4JCQkvKiB3aWxsIGFsc28gZ2V0IExPQ0tERUJVRyAq
Lw0KQEAgLTE0OCw2ICsxNDksOCBAQA0KIAljaGFyICpjaV9kZGJpcGlfc3Rh
Y2s7DQogDQogCXN0cnVjdCBldmNudCBjaV9pcGlfZXZlbnRzW1g4Nl9OSVBJ
XTsNCisNCisJc3RydWN0IHZpYV9wYWRsb2NrCWNpX3ZwOwkvKiBWSUEgUGFk
TG9jayBwcml2YXRlIHN0b3JhZ2UgKi8NCiB9Ow0KIA0KIC8qDQpJbmRleDog
YXJjaC94ODYvY29uZi9maWxlcy54ODYNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMvc3lzL2FyY2gveDg2L2NvbmYv
ZmlsZXMueDg2LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMg0KZGlmZiAt
dSAtcjEuMTIgZmlsZXMueDg2DQotLS0gYXJjaC94ODYvY29uZi9maWxlcy54
ODYJMjAgT2N0IDIwMDQgMDQ6MjA6MDUgLTAwMDAJMS4xMg0KKysrIGFyY2gv
eDg2L2NvbmYvZmlsZXMueDg2CTkgSmFuIDIwMDcgMTU6NTE6MTIgLTAwMDAN
CkBAIC03LDYgKzcsOSBAQA0KICMgTVRSUiBzdXBwb3J0DQogZGVmZmxhZyAg
ICAgICAgICAgICAgICAgTVRSUg0KIA0KKyMgVklBIFBhZExvY2sgKFJORyBh
bmQgY3J5cHRvIGFjY2VsZXJhdG9yKSBzdXBwb3J0DQorZGVmZmxhZyBvcHRf
dmlhcGFkbG9jay5oIFZJQV9STkcgVklBX0FDRQ0KKw0KIGRlZmluZSAgY3B1
YnVzIHsgW2FwaWQgPSAtMV0gfQ0KIA0KIGZpbGUJYXJjaC94ODYveDg2L2Fw
aWMuYwkJaW9hcGljIHwgbGFwaWMNCkBAIC0yMCw2ICsyMyw3IEBADQogZmls
ZQlhcmNoL3g4Ni94ODYvbG9ja19tYWNoZGVwLmMJbG9ja2RlYnVnDQogZmls
ZQlhcmNoL3g4Ni94ODYvbXRycl9pNjg2LmMJbXRycg0KIGZpbGUJYXJjaC94
ODYveDg2L3NvZnRpbnRyLmMNCitmaWxlCWFyY2gveDg2L3g4Ni92aWFfcGFk
bG9jay5jCXZpYV9ybmcgfCB2aWFfYWNlDQogZmlsZQlhcmNoL3g4Ni94ODYv
eDg2X2F1dG9jb25mLmMNCiANCiBkZWZpbmUgbGFwaWMNCkluZGV4OiBhcmNo
L3g4Ni9pbmNsdWRlL3NwZWNpYWxyZWcuaA0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy9zeXMvYXJjaC94ODYvaW5j
bHVkZS9zcGVjaWFscmVnLmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjgN
CmRpZmYgLXUgLXIxLjggc3BlY2lhbHJlZy5oDQotLS0gYXJjaC94ODYvaW5j
bHVkZS9zcGVjaWFscmVnLmgJMjEgRmViIDIwMDUgMTU6MTA6NTEgLTAwMDAJ
MS44DQorKysgYXJjaC94ODYvaW5jbHVkZS9zcGVjaWFscmVnLmgJOSBKYW4g
MjAwNyAxNTo1MToxMyAtMDAwMA0KQEAgLTE1NCw2ICsxNTQsMTYgQEANCiAJ
CQkJICAgICJcMDM3M0ROT1cyXDA0MDNETk9XIg0KIA0KIC8qDQorICogIkZl
YXR1cmVzIiB0aGF0IGFyZSBjb3BpZWQgZnJvbSBlbHNld2hlcmUgLS0gbm90
IG5lY2Vzc2FyaWx5IHRpZWQgdG8NCisgKiBhIHNwZWNpZmljIENQVUlEIHJl
c3BvbnNlDQorICovDQorDQorI2RlZmluZSBDUFVJRF9GRUFUX1ZSTkcJMHgw
MDAwMDAwMQkvKiBWSUEgQzMgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgKi8N
CisjZGVmaW5lIENQVUlEX0ZFQVRfVkFDRQkweDAwMDAwMDAyCS8qIFZJQSBD
MyBBRVMgQ3J5cHRvIEV4dGVuc2lvbiAqLw0KKw0KKyNkZWZpbmUgQ1BVSURf
RkVBVF9GTEFHUwkiXDIwXDAxVlJOR1wwMlZBQ0UiDQorDQorLyoNCiAgKiBD
UFVJRCAiZmVhdHVyZXMiIGJpdHMgaW4gJWVjeA0KICAqLw0KIA0KQEAgLTI3
NSw2ICsyODUsMTYgQEANCiAjZGVmaW5lIE1TUl9NQzNfTUlTQwkJMHg0MTMN
CiANCiAvKg0KKyAqIFZJQSAiTmVoZW1pYWgiIE1TUnMNCisgKi8NCisjZGVm
aW5lIE1TUl9WSUFfUk5HCQkweDExMGINCisjZGVmaW5lIE1TUl9WSUFfUk5H
X0VOQUJMRQkweDAwMDAwMDQwDQorI2RlZmluZSBNU1JfVklBX1JOR19OT0lT
RV9NQVNLCTB4MDAwMDAzMDANCisjZGVmaW5lIE1TUl9WSUFfUk5HX05PSVNF
X0EJMHgwMDAwMDAwMA0KKyNkZWZpbmUgTVNSX1ZJQV9STkdfTk9JU0VfQgkw
eDAwMDAwMTAwDQorI2RlZmluZSBNU1JfVklBX1JOR18yTk9JU0UJMHgwMDAw
MDMwMA0KKw0KKy8qDQogICogQU1EIEs2L0s3IE1TUnMuDQogICovDQogI2Rl
ZmluZQlNU1JfSzZfVVdDQ1IJCTB4YzAwMDAwODUNCkluZGV4OiBhcmNoL3g4
Ni9pbmNsdWRlL3ZpYV9wYWRsb2NrLmgNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NClJDUyBmaWxlOiBhcmNoL3g4Ni9pbmNsdWRlL3ZpYV9wYWRsb2NrLmgN
CmRpZmYgLU4gYXJjaC94ODYvaW5jbHVkZS92aWFfcGFkbG9jay5oDQotLS0g
L2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDANCisrKyBhcmNo
L3g4Ni9pbmNsdWRlL3ZpYV9wYWRsb2NrLmgJOSBKYW4gMjAwNyAxNTo1MTox
MyAtMDAwMA0KQEAgLTAsMCArMSw1MyBAQA0KKy8qCSROZXRCU0QkCSovDQor
DQorLyotDQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBOZXRCU0QgRm91
bmRhdGlvbiwgSW5jLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoN
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMNCisgKiBhcmUgbWV0Og0KKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0K
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICogMy4gQWxsIGFk
dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz
ZSBvZiB0aGlzIHNvZnR3YXJlDQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBm
b2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50Og0KKyAqCVRoaXMgcHJvZHVjdCBp
bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRA0KKyAq
CUZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuDQorICog
NC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24g
bm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiAgICBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQNCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwg
SU5DLiBBTkQgQ09OVFJJQlVUT1JTDQorICogYGBBUyBJUycnIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEDQorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVINCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTDQorICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GDQorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQorICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4NCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQ0KKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFDQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICovDQor
DQorI2lmbmRlZiBfWDg2X1ZJQV9QQURMT0NLX0hfDQorI2RlZmluZSBfWDg2
X1ZJQV9QQURMT0NLX0hfDQorDQorI2luY2x1ZGUgPHN5cy9jYWxsb3V0Lmg+
DQorI2luY2x1ZGUgPHN5cy9ybmQuaD4NCisNCitzdHJ1Y3QgY3B1X2luZm87
DQorDQorc3RydWN0IHZpYV9wYWRsb2NrIHsNCisJc3RydWN0IGNwdV9pbmZv
CQkqdnBfY2k7DQorCXN0cnVjdCBjYWxsb3V0CQl2cF9ybmdfY2g7DQorCXJu
ZHNvdXJjZV9lbGVtZW50X3QJdnBfcm5nX3NyYzsNCisJaW50CQkJdnBfZnJl
cTsNCit9Ow0KKw0KK3ZvaWQJdmlhX3JuZ19hdHRhY2goc3RydWN0IHZpYV9w
YWRsb2NrICp2cCk7DQorDQorI2VuZGlmCS8qIF9YODZfVklBX1BBRExPQ0tf
SF8gKi8NCkluZGV4OiBhcmNoL3g4Ni94ODYvdmlhX3BhZGxvY2suYw0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IGFyY2gveDg2L3g4Ni92
aWFfcGFkbG9jay5jDQpkaWZmIC1OIGFyY2gveDg2L3g4Ni92aWFfcGFkbG9j
ay5jDQotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAN
CisrKyBhcmNoL3g4Ni94ODYvdmlhX3BhZGxvY2suYwk5IEphbiAyMDA3IDE1
OjUxOjEzIC0wMDAwDQpAQCAtMCwwICsxLDE1NiBAQA0KKy8qCSROZXRCU0Qk
CSovDQorDQorLyotDQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBOZXRC
U0QgRm91bmRhdGlvbiwgSW5jLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
DQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMNCisgKiBhcmUgbWV0Og0KKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQ0KKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICogMy4g
QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz
IG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlDQorICogICAgbXVzdCBkaXNwbGF5
IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50Og0KKyAqCVRoaXMgcHJv
ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJT
RA0KKyAqCUZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMu
DQorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5k
YXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiAgICBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQNCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRB
VElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTDQorICogYGBBUyBJUycnIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEDQorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVINCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTDQor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GDQorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
DQorICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4NCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQ0KKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFDQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQor
ICovDQorDQorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPg0KK19fS0VSTkVMX1JD
U0lEKDAsICIkTmV0QlNEJCIpOw0KKw0KKyNpbmNsdWRlICJvcHRfdmlhcGFk
bG9jay5oIg0KKw0KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4NCisjaW5jbHVk
ZSA8c3lzL2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4NCisj
aW5jbHVkZSA8c3lzL2NhbGxvdXQuaD4NCisjaW5jbHVkZSA8c3lzL2Rldmlj
ZS5oPg0KKyNpbmNsdWRlIDxzeXMvcm5kLmg+DQorDQorI2luY2x1ZGUgPG1h
Y2hpbmUvY3B1Lmg+DQorI2luY2x1ZGUgPHg4Ni9zcGVjaWFscmVnLmg+DQor
DQorI2lmZGVmIFZJQV9STkcNCitzdGF0aWMgaW5saW5lIGludCB2aWFfcm5n
X2dldF80Ynl0ZXModm9pZCAqKTsNCisNCisvKg0KKyAqIEdyYWIgNCBieXRl
cyBvZiByYW5kb20gZGF0YS4gIFVzZXMgdGhlICJyYXRlIiBjb2RlIHRvIGdl
dCA0IGJ5dGVzDQorICogb2YgZGF0YSBpZiBhdCBsZWFzdCA4IGJ5dGVzIG9m
IGVudHJvcHkgYXJlIGF2YWlsYWJsZS4gIFRoaXMgaXMgYQ0KKyAqIGNvbXBy
b21pc2UgYmV0d2VlbiB0aGUgbW9zdCBkYXRhIHdlIGNhbiBnZXQgaW4gb25l
IHNob3QgKDggYnl0ZXMpLA0KKyAqIGFuZCB0aGUgYmVzdCByYW5kb20gZGF0
YSB3ZSBjYW4gZ2V0IGluIG9uZSBzaG90ICgxIGJ5dGUpLg0KKyAqLw0KK3N0
YXRpYyBpbmxpbmUgaW50DQordmlhX3JuZ19nZXRfNGJ5dGVzKHZvaWQgKmJ1
ZikNCit7DQorCXVfaW50MzJfdAlydj0wOw0KKw0KKwlfX2FzbSBfX3ZvbGF0
aWxlKA0KKwkJIm1vdmwgJDEsICUlZWR4XG4iDQorCQkiLmJ5dGUJMHgwZiwg
MHhhNywgMHhjMCINCisJCTogIj1hIiAocnYpLCAiK0QiIChidWYpDQorCQk6
IA0KKwkJOiAibWVtb3J5IiwgIiVlZHgiKTsNCisNCisJcmV0dXJuIChydiAm
IDB4MWYpOw0KK30NCisNCit2b2lkIHZpYV9ybmdfY2FsbG91dCh2b2lkICp2
KTsNCisNCit2b2lkDQordmlhX3JuZ19hdHRhY2goc3RydWN0IHZpYV9wYWRs
b2NrICp2cCkNCit7DQorCWludAkJY250LCB0b3RhbCwgbjsNCisJdV9pbnQz
Ml90CXJuZGJ1ZiwgY3IwOw0KKw0KKwkvKg0KKwkgKiBEbyBzb21lIGluaXRp
YWwgdGVzdGluZyBieSBwdWxsaW5nIHNvbWUgYXJiaXRyYXJ5IGFtb3VudCBv
Zg0KKwkgKiByYW5kb21uZXNzIG9mZiB0aGUgdG9wLiAgSWYgd2UgY2FuJ3Qg
Z2V0IGF0IGxlYXN0IDMyIGJ5dGVzLA0KKwkgKiB0aGVuIHNvbWV0aGluZyBp
cyB0ZXJyaWJseSB3cm9uZywgc28gZG9uJ3QgZW5hYmxlIHRoaXMgYXMgYW4N
CisJICogZW50cm9weSBzb3VyY2UuICBJZiB3ZSBkbyBnZXQgYXQgbGVhc3Qg
MzIgYnl0ZXMsIHRoZW4gYXNzdW1lDQorCSAqIHdlJ3JlIHdvcmtpbmcgT0sg
YW5kIHN0YXJ0IHRoZSBjYWxsb3V0Lg0KKwkgKi8NCisJY3IwID0gcmNyMCgp
Ow0KKwlsY3IwKGNyMCAmIH4oQ1IwX0VNIHwgQ1IwX1RTKSk7DQorDQorCWZv
ciAoY250PTAsIHRvdGFsPTAgOyBjbnQgPCAxMDAwICYmIHRvdGFsIDwgMzIg
OyBjbnQrKywgdG90YWwgKz0gbikgew0KKwkJbiA9IHZpYV9ybmdfZ2V0XzRi
eXRlcygmcm5kYnVmKTsNCisJCWlmIChuID09IDApIHsNCisJCQlkZWxheSgx
KTsNCisJCX0NCisJfQ0KKw0KKwlsY3IwKGNyMCk7DQorDQorCWlmICh0b3Rh
bCA8IDMyKSB7DQorCQlhcHJpbnRfZXJyb3IoIiVzOiBSTkcgZmFpbGVkIHN0
YXJ0dXAgdGVzdFxuIiwNCisJCQl2cC0+dnBfY2ktPmNpX2Rldi0+ZHZfeG5h
bWUpOw0KKwl9IGVsc2Ugew0KKwkJLyoNCisJCSAqIEdvdCByYW5kb21uZXNz
LiAgRW5hYmxlIGVudHJvcHkgc291cmNlLg0KKwkJICogRnJlcXVlbmN5IGlz
IGF0IG1vc3QgMTAwIHRpbWVzIC8gc2VjLg0KKwkJICovDQorCQl2cC0+dnBf
ZnJlcSA9IGh6ID4gMTAwID8gaHogLyAxMDAgOiAxOw0KKw0KKwkJY2FsbG91
dF9pbml0KCZ2cC0+dnBfcm5nX2NoKTsNCisJCXJuZF9hdHRhY2hfc291cmNl
KCZ2cC0+dnBfcm5nX3NyYywgdnAtPnZwX2NpLT5jaV9kZXYtPmR2X3huYW1l
LA0KKwkJCQkgIFJORF9UWVBFX1JORywgUk5EX0ZMQUdfTk9fRVNUSU1BVEUp
Ow0KKwkJdmlhX3JuZ19jYWxsb3V0KHZwKTsNCisNCisJCWFwcmludF92ZXJi
b3NlKCIlczogb24tYm9hcmQgUk5HIGF0dGFjaGVkXG4iLA0KKwkJCXZwLT52
cF9jaS0+Y2lfZGV2LT5kdl94bmFtZSk7DQorCX0NCit9DQorDQordm9pZA0K
K3ZpYV9ybmdfY2FsbG91dCh2b2lkICp2KQ0KK3sNCisJc3RydWN0IHZpYV9w
YWRsb2NrICp2cCA9IChzdHJ1Y3QgdmlhX3BhZGxvY2sgKikgdjsNCisJdV9p
bnQzMl90CSpyLCBybmRidWZbNF0sIGNyMDsNCisJaW50CQludywgbmI7DQor
DQorCWNyMCA9IHJjcjAoKTsNCisJbGNyMChjcjAgJiB+KENSMF9FTSB8IENS
MF9UUykpOw0KKw0KKwkvKg0KKwkgKiBQdWxsIDQtYnl0ZSBjaHVua3MgYXMg
bG9uZyBhcyB0aGV5J3JlIGF2YWlsYWJsZSwgdXAgdG8NCisJICogMTYgYnl0
ZXMgdG90YWwuICBXaHkgMTY/ICBCZWNhdXNlIGEgKHNtYWxsKSBzYW1wbGUg
c2hvd2VkDQorCSAqIG1lIHRoYXQsIGF0IGxlYXN0IHdpdGggYSAxLjJHSHog
TmVoZW1pYWgsIHdlIHdvdWxkIGhhdmUgdG8NCisJICogd2FpdCBmb3IgbW9y
ZSBkYXRhIHRoYW4gdGhhdC4NCisJICovDQorCW53ID0gMDsNCisJciA9IHJu
ZGJ1ZjsNCisJZG8gew0KKwkJbmIgPSB2aWFfcm5nX2dldF80Ynl0ZXMocik7
DQorCQlpZiAobmIgPT0gNCkgew0KKwkJCXIrKzsgbncrKzsNCisJCX0NCisJ
fSB3aGlsZSAobncgPCA0ICYmIG5iID4gMCk7DQorDQorCWxjcjAoY3IwKTsN
CisNCisJaWYgKG53KSB7DQorCQluYiA9IG53ICogNDsNCisJCXJuZF9hZGRf
ZGF0YSgmdnAtPnZwX3JuZ19zcmMsIHJuZGJ1ZiwgbmIsIG5iICogTkJCWSk7
DQorCX0NCisNCisJY2FsbG91dF9yZXNldCgmdnAtPnZwX3JuZ19jaCwgdnAt
PnZwX2ZyZXEsIHZpYV9ybmdfY2FsbG91dCwgdnApOw0KK30NCisjZW5kaWYg
LyogVklBX1JORyAqLw0K

--0-635669745-1168358574=:855--