[PATCH v9 2/5] riscv: add support for SBI Supervisor Software Events extension

Zhanpeng Zhang <[email protected]> Thu, 30 Jul 2026 21:33:33 +0800
Newsgroups org.infradead.lists.kvm-riscv,org.infradead.lists.linux-riscv,org.kernel.vger.kvm,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest,org.kernel.vger.linux-perf-users
Message-ID <[email protected]>
RnJvbTogQ2zDqW1lbnQgTMOpZ2VyIDxjbGVnZXJAcml2b3NpbmMuY29tPgoKVGhlIFNCSSBTU0Ug
ZXh0ZW5zaW9uIGFsbG93cyB0aGUgc3VwZXJ2aXNvciBzb2Z0d2FyZSB0byBiZSBub3RpZmllZCBi
eQp0aGUgU0JJIG9mIHNwZWNpZmljIGV2ZW50cyB0aGF0IGFyZSBub3QgbWFza2FibGUuIFRoZSBj
b250ZXh0IHN3aXRjaCBpcwpoYW5kbGVkIHBhcnRpYWxseSBieSB0aGUgZmlybXdhcmUgd2hpY2gg
d2lsbCBzYXZlIHJlZ2lzdGVycyBhNiBhbmQgYTcuCldoZW4gZW50ZXJpbmcga2VybmVsIHdlIGNh
biByZWx5IG9uIHRoZXNlIDIgcmVnaXN0ZXJzIHRvIHNldHVwIHRoZSBzdGFjawphbmQgc2F2ZSBh
bGwgdGhlIHJlZ2lzdGVycy4KClNpbmNlIFNTRSBldmVudHMgY2FuIGJlIGRlbGl2ZXJlZCBhdCBh
bnkgdGltZSB0byB0aGUga2VybmVsLCBpbmNsdWRpbmcKZHVyaW5nIGV4Y2VwdGlvbiBoYW5kbGlu
Zywgd2UgbmVlZCBhIHdheSB0byBsb2NhdGUgdGhlIGN1cnJlbnRfdGFzayBmb3IKY29udGV4dCB0
cmFja2luZy4gT24gUklTQy1WLCBpdCBpcyBzdG9yZWQgaW4gc2NyYXRjaCB3aGVuIGluIHVzZXIg
c3BhY2UKb3IgdHAgd2hlbiBpbiBrZXJuZWwgc3BhY2UgKGluIHdoaWNoIGNhc2UgU1NDUkFUQ0gg
aXMgemVybykuIEJ1dCBhdCB0aGUKYmVnaW5uaW5nIG9mIGV4Y2VwdGlvbiBoYW5kbGluZywgU1ND
UkFUQ0ggaXMgdXNlZCB0byBzd2FwIHRwIGFuZApjaGVjayB0aGUgb3JpZ2luIG9mIHRoZSBleGNl
cHRpb24uIElmIGludGVycnVwdGVkIGF0IHRoYXQgcG9pbnQsIHRoZW4sCnRoZXJlIGlzIG5vIHdh
eSB0byByZWxpYWJseSBrbm93IHdoZXJlIGlzIGxvY2F0ZWQgdGhlIGN1cnJlbnQKdGFza19zdHJ1
Y3QuIEV2ZW4gY2hlY2tpbmcgdGhlIGludGVycnVwdGlvbiBsb2NhdGlvbiB3b24ndCB3b3JrIGFz
IFNTRQpldmVudCBjYW4gYmUgbmVzdGVkIG9uIHRvcCBvZiBlYWNoIG90aGVyIHNvIHRoZSBvcmln
aW5hbCBpbnRlcnJ1cHRpb24Kc2l0ZSBtaWdodCBiZSBsb3N0IGF0IHNvbWUgcG9pbnQuIEluIG9y
ZGVyIHRvIHJldHJpZXZlIGl0IHJlbGlhYmx5LApzdG9yZSB0aGUgY3VycmVudCB0YXNrIGluIGFu
IGFkZGl0aW9uYWwgX19zc2VfZW50cnlfdGFzayBwZXJfY3B1IGFycmF5LgpUaGlzIGFycmF5IGlz
IHRoZW4gdXNlZCB0byByZXRyaWV2ZSB0aGUgY3VycmVudCB0YXNrIGJhc2VkIG9uIHRoZQpoYXJ0
IElEIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBTU0UgZXZlbnQgaGFuZGxlciBpbiBhNi4KClRoYXQg
YmVpbmcgc2FpZCwgdGhlIHdheSB0aGUgY3VycmVudCB0YXNrIHN0cnVjdCBpcyBzdG9yZWQgc2hv
dWxkCnByb2JhYmx5IGJlIHJld29ya2VkIHRvIGZpbmQgYSBiZXR0ZXIgcmVsaWFibGUgYWx0ZXJu
YXRpdmUuCgpTaW5jZSBlYWNoIGV2ZW50IChhbmQgZWFjaCBDUFUgZm9yIGxvY2FsIGV2ZW50cykg
aGF2ZSB0aGVpciBvd24KY29udGV4dCBhbmQgY2FuIHByZWVtcHQgZWFjaCBvdGhlciwgYWxsb2Nh
dGUgYSBzdGFjayAoYW5kIGEgc2hhZG93IHN0YWNrCmlmIG5lZWRlZCkgZm9yIGVhY2ggb2YgdGhl
bSAoYW5kIGZvciBlYWNoIGNwdSBmb3IgbG9jYWwgZXZlbnRzKS4KClRoZSBTU0UgaGFuZGxlciBy
dW5zIGFzIGEgc3ludGhldGljIGhhbmRsZXIgZXBpc29kZSwgYnV0IGNvbXBsZXRpb24gbXVzdApy
ZXN1bWUgdGhlIGNvbnRleHQgdGhhdCB3YXMgaW50ZXJydXB0ZWQgYnkgdGhlIFNTRSBldmVudC4g
IFByZXNlcnZlIHN0dmVjCmFuZCwgd2hlbiB0aGUgaHlwZXJ2aXNvciBleHRlbnNpb24gaXMgcHJl
c2VudCwgaHN0YXR1cyBhY3Jvc3MgZG9fc3NlKCkgc28KdGhlIGhhbmRsZXIgZXBpc29kZSBkb2Vz
IG5vdCBsZWFrIHRyYXAtdmVjdG9yIG9yIHZpcnR1YWxpemF0aW9uIHN0YXRlIGludG8KdGhlIGlu
dGVycnVwdGVkIGNvbnRleHQuCgpXaGVuIGNvbXBsZXRpbmcgdGhlIGV2ZW50LCBpZiB3ZSB3ZXJl
IGNvbWluZyBmcm9tIGtlcm5lbCB3aXRoIGludGVycnVwdHMKZGlzYWJsZWQsIHNpbXBseSByZXR1
cm4gdGhlcmUuIElmIGNvbWluZyBmcm9tIHVzZXJzcGFjZSBvciBrZXJuZWwgd2l0aAppbnRlcnJ1
cHRzIGVuYWJsZWQsIHNpbXVsYXRlIGFuIGludGVycnVwdCBleGNlcHRpb24gYnkgc2V0dGluZyBJ
RV9TSUUgaW4KQ1NSX0lQIHRvIGFsbG93IGRlbGl2ZXJ5IG9mIHNpZ25hbHMgdG8gdXNlciB0YXNr
LiBGb3IgaW5zdGFuY2UgdGhpcyBjYW4KaGFwcGVuIHdoZW4gYSBSQVMgZXZlbnQgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGEgdXNlciBhcHBsaWNhdGlvbiBhbmQgYQpTSUdCVVMgaGFzIGJlZW4gc2Vu
dCB0byBhIHRhc2suCgpTaWduZWQtb2ZmLWJ5OiBDbMOpbWVudCBMw6lnZXIgPGNsZWdlckByaXZv
c2luYy5jb20+CkNvLWRldmVsb3BlZC1ieTogWmhhbnBlbmcgWmhhbmcgPHpoYW5nemhhbnBlbmcu
amFzcGVyQGJ5dGVkYW5jZS5jb20+ClNpZ25lZC1vZmYtYnk6IFpoYW5wZW5nIFpoYW5nIDx6aGFu
Z3poYW5wZW5nLmphc3BlckBieXRlZGFuY2UuY29tPgotLS0KVGhhbmtzIGZvciByZXBvcnRpbmcg
dGhpcy4gUGxlYXNlIGZpbmQgYSBjb3JyZWN0ZWQgcmVwbGFjZW1lbnQgZm9yIHY5IHBhdGNoCjIv
NSBiZWxvdy4gSXQgZml4ZXMgdGhlIHRydW5jYXRlZCBzYmlfc3NlX2VudHJ5LlM7IHBhdGNoZXMg
My81IHRocm91Z2ggNS81CmFwcGx5IHVuY2hhbmdlZC4KCkkgYW0gc3RpbGwgd29ya2luZyB0aHJv
dWdoIHRoZSBmaW5hbCByZXZpZXcgYW5kIHRlc3RpbmcgZm9yIHYxMC4gU29ycnkgZm9yCmtlZXBp
bmcgeW91IHdhaXRpbmcuCgogYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hc20uaCAgICAgICAgIHwg
IDE0ICstCiBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3Njcy5oICAgICAgICAgfCAgIDcgKwogYXJj
aC9yaXNjdi9pbmNsdWRlL2FzbS9zc2UuaCAgICAgICAgIHwgIDQ3ICsrKysrKysKIGFyY2gvcmlz
Y3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmggICB8ICAxNCArKwogYXJjaC9yaXNjdi9pbmNsdWRl
L2FzbS90aHJlYWRfaW5mby5oIHwgICAxICsKIGFyY2gvcmlzY3Yva2VybmVsL01ha2VmaWxlICAg
ICAgICAgICB8ICAgMSArCiBhcmNoL3Jpc2N2L2tlcm5lbC9hc20tb2Zmc2V0cy5jICAgICAgfCAg
MTQgKysKIGFyY2gvcmlzY3Yva2VybmVsL3NiaV9zc2UuYyAgICAgICAgICB8IDE2MiArKysrKysr
KysrKysrKysrKysrKysrCiBhcmNoL3Jpc2N2L2tlcm5lbC9zYmlfc3NlX2VudHJ5LlMgICAgfCAy
MDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA5IGZpbGVzIGNoYW5nZWQsIDQ1NyBpbnNl
cnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvcmlzY3Yv
aW5jbHVkZS9hc20vc3NlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL3Jpc2N2L2tlcm5lbC9z
Ymlfc3NlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL3Jpc2N2L2tlcm5lbC9zYmlfc3NlX2Vu
dHJ5LlMKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2FzbS5oIGIvYXJjaC9y
aXNjdi9pbmNsdWRlL2FzbS9hc20uaAppbmRleCBlOWU4YmE4M2U2MzIuLjUwYmFjZTAwMDUzYyAx
MDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hc20uaAorKysgYi9hcmNoL3Jpc2N2
L2luY2x1ZGUvYXNtL2FzbS5oCkBAIC05MCwxNiArOTAsMjQgQEAKIC5lbmRtCiAKICNpZmRlZiBD
T05GSUdfU01QCi0ubWFjcm8gYXNtX3Blcl9jcHUgZHN0IHN5bSB0bXAKLQlsdyAgICBcdG1wLCBU
QVNLX1RJX0NQVV9OVU0odHApCi0Jc2xsaSAgXHRtcCwgXHRtcCwgUklTQ1ZfTEdQVFIKKy5tYWNy
byBhc21fcGVyX2NwdV93aXRoX2NwdSBkc3Qgc3ltIHRtcCBjcHUKKwlzbGxpICBcdG1wLCBcY3B1
LCBSSVNDVl9MR1BUUgogCWxhICAgIFxkc3QsIF9fcGVyX2NwdV9vZmZzZXQKIAlhZGQgICBcZHN0
LCBcZHN0LCBcdG1wCiAJUkVHX0wgXHRtcCwgMChcZHN0KQogCWxhICAgIFxkc3QsIFxzeW0KIAlh
ZGQgICBcZHN0LCBcZHN0LCBcdG1wCiAuZW5kbQorCisubWFjcm8gYXNtX3Blcl9jcHUgZHN0IHN5
bSB0bXAKKwlsdyBcdG1wLCBUQVNLX1RJX0NQVV9OVU0odHApCisJYXNtX3Blcl9jcHVfd2l0aF9j
cHUgXGRzdCBcc3ltIFx0bXAgXHRtcAorLmVuZG0KICNlbHNlIC8qIENPTkZJR19TTVAgKi8KKy5t
YWNybyBhc21fcGVyX2NwdV93aXRoX2NwdSBkc3Qgc3ltIHRtcCBjcHUKKwlsYSAgICBcZHN0LCBc
c3ltCisuZW5kbQorCiAubWFjcm8gYXNtX3Blcl9jcHUgZHN0IHN5bSB0bXAKIAlsYSAgICBcZHN0
LCBcc3ltCiAuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zY3MuaCBi
L2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc2NzLmgKaW5kZXggMDIzYTQxMmZlMzhkLi4wZDcwYTM1
YmMwMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc2NzLmgKKysrIGIvYXJj
aC9yaXNjdi9pbmNsdWRlL2FzbS9zY3MuaApAQCAtMTcsNiArMTcsMTEgQEAKIAlsb2FkX3Blcl9j
cHUgZ3AsIGlycV9zaGFkb3dfY2FsbF9zdGFja19wdHIsIFx0bXAKIC5lbmRtCiAKKy8qIExvYWQg
dGhlIHBlci1DUFUgSVJRIHNoYWRvdyBjYWxsIHN0YWNrIHRvIGdwLiAqLworLm1hY3JvIHNjc19s
b2FkX3NzZV9zdGFjayByZWdfZXZ0CisJUkVHX0wgZ3AsIFNTRV9SRUdfRVZUX1NIQURPV19TVEFD
SyhccmVnX2V2dCkKKy5lbmRtCisKIC8qIExvYWQgdGFza19zY3Nfc3AoY3VycmVudCkgdG8gZ3Au
ICovCiAubWFjcm8gc2NzX2xvYWRfY3VycmVudAogCVJFR19MCWdwLCBUQVNLX1RJX1NDU19TUCh0
cCkKQEAgLTQwLDYgKzQ1LDggQEAKIC5lbmRtCiAubWFjcm8gc2NzX2xvYWRfaXJxX3N0YWNrIHRt
cAogLmVuZG0KKy5tYWNybyBzY3NfbG9hZF9zc2Vfc3RhY2sgcmVnX2V2dAorLmVuZG0KIC5tYWNy
byBzY3NfbG9hZF9jdXJyZW50CiAuZW5kbQogLm1hY3JvIHNjc19sb2FkX2N1cnJlbnRfaWZfdGFz
a19jaGFuZ2VkIHByZXYKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3NlLmgg
Yi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3NzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMC4uZDNjZThjMmI1MjIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9yaXNj
di9pbmNsdWRlL2FzbS9zc2UuaApAQCAtMCwwICsxLDQ3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFJpdm9z
IEluYy4KKyAqLworI2lmbmRlZiBfX0FTTV9TU0VfSAorI2RlZmluZSBfX0FTTV9TU0VfSAorCisj
aW5jbHVkZSA8YXNtL3NiaS5oPgorCisjaWZkZWYgQ09ORklHX1JJU0NWX1NCSV9TU0UKKworc3Ry
dWN0IHNzZV9ldmVudF9pbnRlcnJ1cHRlZF9zdGF0ZSB7CisJdW5zaWduZWQgbG9uZyBhNjsKKwl1
bnNpZ25lZCBsb25nIGE3OworfTsKKworc3RydWN0IHNzZV9ldmVudF9hcmNoX2RhdGEgeworCXZv
aWQgKnN0YWNrOworCXZvaWQgKnNoYWRvd19zdGFjazsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKwlz
dHJ1Y3Qgc3NlX2V2ZW50X2ludGVycnVwdGVkX3N0YXRlIGludGVycnVwdGVkOworCXVuc2lnbmVk
IGxvbmcgaW50ZXJydXB0ZWRfcGh5czsKKwl1MzIgZXZ0X2lkOworCXVuc2lnbmVkIGludCBoYXJ0
X2lkOworCXVuc2lnbmVkIGludCBjcHVfaWQ7Cit9OworCitzdGF0aWMgaW5saW5lIGJvb2wgc3Nl
X2V2ZW50X2lzX2dsb2JhbCh1MzIgZXZ0KQoreworCXJldHVybiAhIShldnQgJiBTQklfU1NFX0VW
RU5UX0dMT0JBTCk7Cit9CisKK3ZvaWQgYXJjaF9zc2VfZXZlbnRfdXBkYXRlX2NwdShzdHJ1Y3Qg
c3NlX2V2ZW50X2FyY2hfZGF0YSAqYXJjaF9ldnQsIGludCBjcHUpOworaW50IGFyY2hfc3NlX2lu
aXRfZXZlbnQoc3RydWN0IHNzZV9ldmVudF9hcmNoX2RhdGEgKmFyY2hfZXZ0LCB1MzIgZXZ0X2lk
LAorCQkJaW50IGNwdSk7Cit2b2lkIGFyY2hfc3NlX2ZyZWVfZXZlbnQoc3RydWN0IHNzZV9ldmVu
dF9hcmNoX2RhdGEgKmFyY2hfZXZ0KTsKK2ludCBhcmNoX3NzZV9yZWdpc3Rlcl9ldmVudChzdHJ1
Y3Qgc3NlX2V2ZW50X2FyY2hfZGF0YSAqYXJjaF9ldnQpOworCit2b2lkIHNzZV9oYW5kbGVfZXZl
bnQoc3RydWN0IHNzZV9ldmVudF9hcmNoX2RhdGEgKmFyY2hfZXZ0LAorCQkgICAgICBzdHJ1Y3Qg
cHRfcmVncyAqcmVncyk7Cithc21saW5rYWdlIHZvaWQgaGFuZGxlX3NzZSh2b2lkKTsKK2FzbWxp
bmthZ2Ugdm9pZCBkb19zc2Uoc3RydWN0IHNzZV9ldmVudF9hcmNoX2RhdGEgKmFyY2hfZXZ0LAor
CQkgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZyk7CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmggYi9hcmNoL3Jpc2N2L2lu
Y2x1ZGUvYXNtL3N3aXRjaF90by5oCmluZGV4IDBlNzFlYjgyZjkyMC4uZGVkOGRjNDQwYjEyIDEw
MDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oCisrKyBiL2FyY2gv
cmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmgKQEAgLTg4LDYgKzg4LDE5IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBfX3N3aXRjaF90b19lbnZjZmcoc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQog
CQkJOjogInIiIChuZXh0LT50aHJlYWQuZW52Y2ZnKSA6ICJtZW1vcnkiKTsKIH0KIAorI2lmZGVm
IENPTkZJR19SSVNDVl9TQklfU1NFCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHRhc2tfc3RydWN0
ICosIF9fc2JpX3NzZV9lbnRyeV90YXNrKTsKKworc3RhdGljIGlubGluZSB2b2lkIF9fc3dpdGNo
X3NiaV9zc2VfZW50cnlfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCit7CisJX190aGlz
X2NwdV93cml0ZShfX3NiaV9zc2VfZW50cnlfdGFzaywgbmV4dCk7Cit9CisjZWxzZQorc3RhdGlj
IGlubGluZSB2b2lkIF9fc3dpdGNoX3NiaV9zc2VfZW50cnlfdGFzayhzdHJ1Y3QgdGFza19zdHJ1
Y3QgKm5leHQpCit7Cit9CisjZW5kaWYKKwogZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19z
d2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICosCiAJCQkJICAgICAgIHN0cnVjdCB0YXNrX3N0
cnVjdCAqKTsKIApAQCAtMTIyLDYgKzEzNSw3IEBAIGRvIHsJCQkJCQkJXAogCWlmIChzd2l0Y2hf
dG9fc2hvdWxkX2ZsdXNoX2ljYWNoZShfX25leHQpKQlcCiAJCWxvY2FsX2ZsdXNoX2ljYWNoZV9h
bGwoKTsJCVwKIAlfX3N3aXRjaF90b19lbnZjZmcoX19uZXh0KTsJCQlcCisJX19zd2l0Y2hfc2Jp
X3NzZV9lbnRyeV90YXNrKF9fbmV4dCk7CQlcCiAJKChsYXN0KSA9IF9fc3dpdGNoX3RvKF9fcHJl
diwgX19uZXh0KSk7CQlcCiB9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2lu
Y2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3RocmVhZF9p
bmZvLmgKaW5kZXggNTUwMTlmZGZhOWVjLi5kMTRiNDU2MTBjNzMgMTAwNjQ0Ci0tLSBhL2FyY2gv
cmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUv
YXNtL3RocmVhZF9pbmZvLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNkZWZpbmUgT1ZFUkZMT1dfU1RB
Q0tfU0laRSAgICAgU1pfNEsKIAogI2RlZmluZSBJUlFfU1RBQ0tfU0laRQkJVEhSRUFEX1NJWkUK
KyNkZWZpbmUgU1NFX1NUQUNLX1NJWkUJCVRIUkVBRF9TSVpFCiAKICNpZm5kZWYgX19BU1NFTUJM
RVJfXwogCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvcmlz
Y3Yva2VybmVsL01ha2VmaWxlCmluZGV4IGNhYmI5OWNhZGZiNi4uOGQ0YWVkNjM2OGE2IDEwMDY0
NAotLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3Jpc2N2L2tlcm5l
bC9NYWtlZmlsZQpAQCAtMTAxLDYgKzEwMSw3IEBAIG9iai0kKENPTkZJR19EWU5BTUlDX0ZUUkFD
RSkJKz0gbWNvdW50LWR5bi5vCiBvYmotJChDT05GSUdfUEVSRl9FVkVOVFMpCSs9IHBlcmZfY2Fs
bGNoYWluLm8KIG9iai0kKENPTkZJR19IQVZFX1BFUkZfUkVHUykJKz0gcGVyZl9yZWdzLm8KIG9i
ai0kKENPTkZJR19SSVNDVl9TQkkpCQkrPSBzYmkubyBzYmlfZWNhbGwubworb2JqLSQoQ09ORklH
X1JJU0NWX1NCSV9TU0UpCSs9IHNiaV9zc2UubyBzYmlfc3NlX2VudHJ5Lm8KIGlmZXEgKCQoQ09O
RklHX1JJU0NWX1NCSSksIHkpCiBvYmotJChDT05GSUdfU01QKQkJKz0gc2JpLWlwaS5vCiBvYmot
JChDT05GSUdfU01QKSArPSBjcHVfb3BzX3NiaS5vCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tl
cm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRl
eCBhZjgyNzQ0OGE2MDkuLjdjYzAzZjVhMDY3MyAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rZXJu
ZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBA
IC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9j
cHVfb3BzX3NiaS5oPgogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CisjaW5jbHVkZSA8YXNt
L3NiaS5oPgorI2luY2x1ZGUgPGFzbS9zc2UuaD4KICNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgog
CiB2b2lkIGFzbV9vZmZzZXRzKHZvaWQpOwpAQCAtNTMzLDYgKzUzNSwxOCBAQCB2b2lkIGFzbV9v
ZmZzZXRzKHZvaWQpCiAJREVGSU5FKEZSRUdTX0E2LAkgICAgb2Zmc2V0b2Yoc3RydWN0IF9fYXJj
aF9mdHJhY2VfcmVncywgYTYpKTsKIAlERUZJTkUoRlJFR1NfQTcsCSAgICBvZmZzZXRvZihzdHJ1
Y3QgX19hcmNoX2Z0cmFjZV9yZWdzLCBhNykpOwogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUklT
Q1ZfU0JJX1NTRQorCU9GRlNFVChTU0VfUkVHX0VWVF9TVEFDSywgc3NlX2V2ZW50X2FyY2hfZGF0
YSwgc3RhY2spOworCU9GRlNFVChTU0VfUkVHX0VWVF9TSEFET1dfU1RBQ0ssIHNzZV9ldmVudF9h
cmNoX2RhdGEsIHNoYWRvd19zdGFjayk7CisJT0ZGU0VUKFNTRV9SRUdfRVZUX1RNUCwgc3NlX2V2
ZW50X2FyY2hfZGF0YSwgdG1wKTsKKwlPRkZTRVQoU1NFX1JFR19IQVJUX0lELCBzc2VfZXZlbnRf
YXJjaF9kYXRhLCBoYXJ0X2lkKTsKKwlPRkZTRVQoU1NFX1JFR19DUFVfSUQsIHNzZV9ldmVudF9h
cmNoX2RhdGEsIGNwdV9pZCk7CisKKwlERUZJTkUoU0JJX0VYVF9TU0UsIFNCSV9FWFRfU1NFKTsK
KwlERUZJTkUoU0JJX1NTRV9FVkVOVF9DT01QTEVURSwgU0JJX1NTRV9FVkVOVF9DT01QTEVURSk7
CisJREVGSU5FKEFTTV9OUl9DUFVTLCBDT05GSUdfTlJfQ1BVUyk7CisjZW5kaWYKICNpZmRlZiBD
T05GSUdfUklTQ1ZfU0JJCiAJREVGSU5FKFNCSV9FWFRfRldGVCwgU0JJX0VYVF9GV0ZUKTsKIAlE
RUZJTkUoU0JJX0VYVF9GV0ZUX1NFVCwgU0JJX0VYVF9GV0ZUX1NFVCk7CmRpZmYgLS1naXQgYS9h
cmNoL3Jpc2N2L2tlcm5lbC9zYmlfc3NlLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zYmlfc3NlLmMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mMzBhZTlmZjc3YzkKLS0t
IC9kZXYvbnVsbAorKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zYmlfc3NlLmMKQEAgLTAsMCArMSwx
NjIgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDI1IFJpdm9zIEluYy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L25t
aS5oPgorI2luY2x1ZGUgPGxpbnV4L3Njcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+
CisjaW5jbHVkZSA8bGludXgvcGVyY3B1LWRlZnMuaD4KKworI2luY2x1ZGUgPGFzbS9hc20tcHJv
dG90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zd2l0Y2hfdG8uaD4KKyNpbmNsdWRlIDxhc20vaXJx
X3N0YWNrLmg+CisjaW5jbHVkZSA8YXNtL3NiaS5oPgorI2luY2x1ZGUgPGFzbS9zc2UuaD4KKwor
REVGSU5FX1BFUl9DUFUoc3RydWN0IHRhc2tfc3RydWN0ICosIF9fc2JpX3NzZV9lbnRyeV90YXNr
KTsKKwordm9pZCBfX3dlYWsgc3NlX2hhbmRsZV9ldmVudChzdHJ1Y3Qgc3NlX2V2ZW50X2FyY2hf
ZGF0YSAqYXJjaF9ldnQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworfQorCit2b2lkIGRvX3Nz
ZShzdHJ1Y3Qgc3NlX2V2ZW50X2FyY2hfZGF0YSAqYXJjaF9ldnQsIHN0cnVjdCBwdF9yZWdzICpy
ZWdzKQoreworCW5taV9lbnRlcigpOworCisJLyogUmV0cmlldmUgbWlzc2luZyBHUFJzIGZyb20g
U0JJICovCisJc2JpX2VjYWxsKFNCSV9FWFRfU1NFLCBTQklfU1NFX0VWRU5UX0FUVFJfUkVBRCwg
YXJjaF9ldnQtPmV2dF9pZCwKKwkJICBTQklfU1NFX0FUVFJfSU5URVJSVVBURURfQTYsCisJCSAg
KFNCSV9TU0VfQVRUUl9JTlRFUlJVUFRFRF9BNyAtIFNCSV9TU0VfQVRUUl9JTlRFUlJVUFRFRF9B
NikgKyAxLAorCQkgIGFyY2hfZXZ0LT5pbnRlcnJ1cHRlZF9waHlzLCAwLCAwKTsKKworCW1lbWNw
eSgmcmVncy0+YTYsICZhcmNoX2V2dC0+aW50ZXJydXB0ZWQsIHNpemVvZihhcmNoX2V2dC0+aW50
ZXJydXB0ZWQpKTsKKworCXNzZV9oYW5kbGVfZXZlbnQoYXJjaF9ldnQsIHJlZ3MpOworCisJbm1p
X2V4aXQoKTsKK30KKworc3RhdGljIHZvaWQgKmFsbG9jX3RvX3N0YWNrX3BvaW50ZXIodm9pZCAq
YWxsb2MpCit7CisJcmV0dXJuIGFsbG9jID8gYWxsb2MgKyBTU0VfU1RBQ0tfU0laRSA6IE5VTEw7
Cit9CisKK3N0YXRpYyB2b2lkICpzdGFja19wb2ludGVyX3RvX2FsbG9jKHZvaWQgKnN0YWNrKQor
eworCXJldHVybiBzdGFjayAtIFNTRV9TVEFDS19TSVpFOworfQorCisjaWZkZWYgQ09ORklHX1ZN
QVBfU1RBQ0sKK3N0YXRpYyB2b2lkICpzc2Vfc3RhY2tfYWxsb2ModW5zaWduZWQgaW50IGNwdSkK
K3sKKwl2b2lkICpzdGFjayA9IGFyY2hfYWxsb2Nfdm1hcF9zdGFjayhTU0VfU1RBQ0tfU0laRSwg
Y3B1X3RvX25vZGUoY3B1KSk7CisKKwlyZXR1cm4gYWxsb2NfdG9fc3RhY2tfcG9pbnRlcihzdGFj
ayk7Cit9CisKK3N0YXRpYyB2b2lkIHNzZV9zdGFja19mcmVlKHZvaWQgKnN0YWNrKQoreworCXZm
cmVlKHN0YWNrX3BvaW50ZXJfdG9fYWxsb2Moc3RhY2spKTsKK30KKworc3RhdGljIHZvaWQgYXJj
aF9zc2Vfc3RhY2tfY3B1X3N5bmMoc3RydWN0IHNzZV9ldmVudF9hcmNoX2RhdGEgKmFyY2hfZXZ0
KQoreworCXZvaWQgKnBfc3RhY2sgPSBhcmNoX2V2dC0+c3RhY2s7CisJdW5zaWduZWQgbG9uZyBz
dGFjayA9ICh1bnNpZ25lZCBsb25nKXN0YWNrX3BvaW50ZXJfdG9fYWxsb2MocF9zdGFjayk7CisJ
dW5zaWduZWQgbG9uZyBzdGFja19lbmQgPSBzdGFjayArIFNTRV9TVEFDS19TSVpFOworCisJLyoK
KwkgKiBGbHVzaCB0aGUgdGxiIHRvIGF2b2lkIHRha2luZyBhbnkgZXhjZXB0aW9uIHdoZW4gYWNj
ZXNzaW5nIHRoZQorCSAqIHZtYXBwZWQgc3RhY2sgaW5zaWRlIHRoZSBTU0UgaGFuZGxlcgorCSAq
LworCWlmIChzc2VfZXZlbnRfaXNfZ2xvYmFsKGFyY2hfZXZ0LT5ldnRfaWQpKQorCQlmbHVzaF90
bGJfa2VybmVsX3JhbmdlKHN0YWNrLCBzdGFja19lbmQpOworCWVsc2UKKwkJbG9jYWxfZmx1c2hf
dGxiX2tlcm5lbF9yYW5nZShzdGFjaywgc3RhY2tfZW5kKTsKK30KKyNlbHNlIC8qIENPTkZJR19W
TUFQX1NUQUNLICovCitzdGF0aWMgdm9pZCAqc3NlX3N0YWNrX2FsbG9jKHVuc2lnbmVkIGludCBj
cHUpCit7CisJdm9pZCAqc3RhY2sgPSBrbWFsbG9jKFNTRV9TVEFDS19TSVpFLCBHRlBfS0VSTkVM
KTsKKworCXJldHVybiBhbGxvY190b19zdGFja19wb2ludGVyKHN0YWNrKTsKK30KKworc3RhdGlj
IHZvaWQgc3NlX3N0YWNrX2ZyZWUodm9pZCAqc3RhY2spCit7CisJa2ZyZWUoc3RhY2tfcG9pbnRl
cl90b19hbGxvYyhzdGFjaykpOworfQorCitzdGF0aWMgdm9pZCBhcmNoX3NzZV9zdGFja19jcHVf
c3luYyhzdHJ1Y3Qgc3NlX2V2ZW50X2FyY2hfZGF0YSAqYXJjaF9ldnQpIHt9CisjZW5kaWYgLyog
Q09ORklHX1ZNQVBfU1RBQ0sgKi8KKworc3RhdGljIGludCBzc2VfaW5pdF9zY3MoaW50IGNwdSwg
c3RydWN0IHNzZV9ldmVudF9hcmNoX2RhdGEgKmFyY2hfZXZ0KQoreworCXZvaWQgKnN0YWNrOwor
CisJaWYgKCFzY3NfaXNfZW5hYmxlZCgpKQorCQlyZXR1cm4gMDsKKworCXN0YWNrID0gc2NzX2Fs
bG9jKGNwdV90b19ub2RlKGNwdSkpOworCWlmICghc3RhY2spCisJCXJldHVybiAtRU5PTUVNOwor
CisJYXJjaF9ldnQtPnNoYWRvd19zdGFjayA9IHN0YWNrOworCisJcmV0dXJuIDA7Cit9CisKK3Zv
aWQgYXJjaF9zc2VfZXZlbnRfdXBkYXRlX2NwdShzdHJ1Y3Qgc3NlX2V2ZW50X2FyY2hfZGF0YSAq
YXJjaF9ldnQsIGludCBjcHUpCit7CisJYXJjaF9ldnQtPmNwdV9pZCA9IGNwdTsKKwlhcmNoX2V2
dC0+aGFydF9pZCA9IGNwdWlkX3RvX2hhcnRpZF9tYXAoY3B1KTsKK30KKworaW50IGFyY2hfc3Nl
X2luaXRfZXZlbnQoc3RydWN0IHNzZV9ldmVudF9hcmNoX2RhdGEgKmFyY2hfZXZ0LCB1MzIgZXZ0
X2lkLAorCQkJaW50IGNwdSkKK3sKKwl2b2lkICpzdGFjazsKKworCWFyY2hfZXZ0LT5ldnRfaWQg
PSBldnRfaWQ7CisJc3RhY2sgPSBzc2Vfc3RhY2tfYWxsb2MoY3B1KTsKKwlpZiAoIXN0YWNrKQor
CQlyZXR1cm4gLUVOT01FTTsKKworCWFyY2hfZXZ0LT5zdGFjayA9IHN0YWNrOworCisJaWYgKHNz
ZV9pbml0X3NjcyhjcHUsIGFyY2hfZXZ0KSkgeworCQlzc2Vfc3RhY2tfZnJlZShhcmNoX2V2dC0+
c3RhY2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoc3NlX2V2ZW50X2lzX2dsb2Jh
bChldnRfaWQpKSB7CisJCWFyY2hfZXZ0LT5pbnRlcnJ1cHRlZF9waHlzID0KKwkJCQkJdmlydF90
b19waHlzKCZhcmNoX2V2dC0+aW50ZXJydXB0ZWQpOworCX0gZWxzZSB7CisJCWFyY2hfZXZ0LT5p
bnRlcnJ1cHRlZF9waHlzID0KKwkJCQlwZXJfY3B1X3B0cl90b19waHlzKCZhcmNoX2V2dC0+aW50
ZXJydXB0ZWQpOworCX0KKworCWFyY2hfc3NlX2V2ZW50X3VwZGF0ZV9jcHUoYXJjaF9ldnQsIGNw
dSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhcmNoX3NzZV9mcmVlX2V2ZW50KHN0cnVjdCBz
c2VfZXZlbnRfYXJjaF9kYXRhICphcmNoX2V2dCkKK3sKKwlzY3NfZnJlZShhcmNoX2V2dC0+c2hh
ZG93X3N0YWNrKTsKKwlzc2Vfc3RhY2tfZnJlZShhcmNoX2V2dC0+c3RhY2spOworfQorCitpbnQg
YXJjaF9zc2VfcmVnaXN0ZXJfZXZlbnQoc3RydWN0IHNzZV9ldmVudF9hcmNoX2RhdGEgKmFyY2hf
ZXZ0KQoreworCXN0cnVjdCBzYmlyZXQgc3JldDsKKworCWFyY2hfc3NlX3N0YWNrX2NwdV9zeW5j
KGFyY2hfZXZ0KTsKKworCXNyZXQgPSBzYmlfZWNhbGwoU0JJX0VYVF9TU0UsIFNCSV9TU0VfRVZF
TlRfUkVHSVNURVIsIGFyY2hfZXZ0LT5ldnRfaWQsCisJCQkgKHVuc2lnbmVkIGxvbmcpaGFuZGxl
X3NzZSwgKHVuc2lnbmVkIGxvbmcpYXJjaF9ldnQsIDAsCisJCQkgMCwgMCk7CisKKwlyZXR1cm4g
c2JpX2Vycl9tYXBfbGludXhfZXJybm8oc3JldC5lcnJvcik7Cit9CmRpZmYgLS1naXQgYS9hcmNo
L3Jpc2N2L2tlcm5lbC9zYmlfc3NlX2VudHJ5LlMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zYmlfc3Nl
X2VudHJ5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jNWMxY2I1
NDQzYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zYmlfc3NlX2VudHJ5
LlMKQEAgLTAsMCArMSwyMDAgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w
LW9yLWxhdGVyICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDI1IFJpdm9zIEluYy4KKyAqLwor
CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKwor
I2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS1tYWNyb3MuaD4KKyNpbmNsdWRlIDxhc20vYXNtLmg+
CisjaW5jbHVkZSA8YXNtL2Nzci5oPgorI2luY2x1ZGUgPGFzbS9od2NhcC5oPgorI2luY2x1ZGUg
PGFzbS9zY3MuaD4KKworLyogV2hlbiBlbnRlcmluZyBoYW5kbGVfc3NlLCB0aGUgZm9sbG93aW5n
IHJlZ2lzdGVycyBhcmUgc2V0OgorICogYTY6IGNvbnRhaW5zIHRoZSBoYXJ0aWQKKyAqIGE3OiBj
b250YWlucyBhIHNzZV9ldmVudF9hcmNoX2RhdGEgc3RydWN0IHBvaW50ZXIKKyAqLworU1lNX0NP
REVfU1RBUlQoaGFuZGxlX3NzZSkKKwkvKiBTYXZlIHN0YWNrIHRlbXBvcmFyaWx5ICovCisJUkVH
X1Mgc3AsIFNTRV9SRUdfRVZUX1RNUChhNykKKwkvKiBTZXQgZW50cnkgc3RhY2sgKi8KKwlSRUdf
TCBzcCwgU1NFX1JFR19FVlRfU1RBQ0soYTcpCisKKwlhZGRpIHNwLCBzcCwgLShQVF9TSVpFX09O
X1NUQUNLKQorCVJFR19TIHJhLCBQVF9SQShzcCkKKwlSRUdfUyBzMCwgUFRfUzAoc3ApCisJUkVH
X1MgczEsIFBUX1MxKHNwKQorCVJFR19TIHMyLCBQVF9TMihzcCkKKwlSRUdfUyBzMywgUFRfUzMo
c3ApCisJUkVHX1MgczQsIFBUX1M0KHNwKQorCVJFR19TIHM1LCBQVF9TNShzcCkKKwlSRUdfUyBz
NiwgUFRfUzYoc3ApCisJUkVHX1MgczcsIFBUX1M3KHNwKQorCVJFR19TIHM4LCBQVF9TOChzcCkK
KwlSRUdfUyBzOSwgUFRfUzkoc3ApCisJUkVHX1MgczEwLCBQVF9TMTAoc3ApCisJUkVHX1MgczEx
LCBQVF9TMTEoc3ApCisJUkVHX1MgdHAsIFBUX1RQKHNwKQorCVJFR19TIHQwLCBQVF9UMChzcCkK
KwlSRUdfUyB0MSwgUFRfVDEoc3ApCisJUkVHX1MgdDIsIFBUX1QyKHNwKQorCVJFR19TIHQzLCBQ
VF9UMyhzcCkKKwlSRUdfUyB0NCwgUFRfVDQoc3ApCisJUkVHX1MgdDUsIFBUX1Q1KHNwKQorCVJF
R19TIHQ2LCBQVF9UNihzcCkKKwlSRUdfUyBncCwgUFRfR1Aoc3ApCisJUkVHX1MgYTAsIFBUX0Ew
KHNwKQorCVJFR19TIGExLCBQVF9BMShzcCkKKwlSRUdfUyBhMiwgUFRfQTIoc3ApCisJUkVHX1Mg
YTMsIFBUX0EzKHNwKQorCVJFR19TIGE0LCBQVF9BNChzcCkKKwlSRUdfUyBhNSwgUFRfQTUoc3Ap
CisKKwkvKiBSZXRyaWV2ZSBlbnRyeSBzcCAqLworCVJFR19MIGE0LCBTU0VfUkVHX0VWVF9UTVAo
YTcpCisJLyogU2F2ZSBDU1JzICovCisJY3NyciBhMCwgQ1NSX0VQQworCWNzcnIgYTEsIENTUl9T
U1RBVFVTCisJY3NyciBhMiwgQ1NSX1NUVkFMCisJY3NyciBhMywgQ1NSX1NDQVVTRQorCisJUkVH
X1MgYTAsIFBUX0VQQyhzcCkKKwlSRUdfUyBhMSwgUFRfU1RBVFVTKHNwKQorCVJFR19TIGEyLCBQ
VF9CQURBRERSKHNwKQorCVJFR19TIGEzLCBQVF9DQVVTRShzcCkKKwlSRUdfUyBhNCwgUFRfU1Ao
c3ApCisKKwkvKiBEaXNhYmxlIHVzZXIgbWVtb3J5IGFjY2VzcyBhbmQgZmxvYXRpbmcvdmVjdG9y
IGNvbXB1dGluZyAqLworCWxpIHQwLCBTUl9TVU0gfCBTUl9GU19WUworCWNzcmMgQ1NSX1NUQVRV
UywgdDAKKworCWxvYWRfZ2xvYmFsX3BvaW50ZXIKKwlzY3NfbG9hZF9zc2Vfc3RhY2sgYTcKKwor
I2lmZGVmIENPTkZJR19TTVAKKwlsdyB0NCwgU1NFX1JFR19IQVJUX0lEKGE3KQorCWx3IHQzLCBT
U0VfUkVHX0NQVV9JRChhNykKKworCWJuZSB0NCwgYTYsIC5MZmluZF9oYXJ0X2lkX3Nsb3dwYXRo
CisKKy5MY3B1X2lkX2ZvdW5kOgorI2Vsc2UKKwltdiB0MywgemVybworI2VuZGlmCisKKwlhc21f
cGVyX2NwdV93aXRoX2NwdSB0MiBfX3NiaV9zc2VfZW50cnlfdGFzayB0MSB0MworCVJFR19MIHRw
LCAwKHQyKQorCisJbXYgYTEsIHNwIC8qIHB0X3JlZ3Mgb24gc3RhY2sgKi8KKworCS8qCisJICog
UnVuIHRoZSBTU0UgaGFuZGxlciB3aXRoIHRoZSBub3JtYWwgZXhjZXB0aW9uIHZlY3RvciwgYnV0
IHJlc3RvcmUgdGhlCisJICogaW50ZXJydXB0ZWQgc3R2ZWMgYmVmb3JlIGNvbXBsZXRpbmcgdGhl
IGV2ZW50LiBTU0UgY2FuIGFycml2ZSB3aGlsZQorCSAqIHRoZSBrZXJuZWwgaXMgdXNpbmcgYSB0
ZW1wb3JhcnkgdHJhcCB2ZWN0b3IgaW4gYSBzZW5zaXRpdmUgZW50cnkgcGF0aC4KKwkgKi8KKwlj
c3JyIHMzLCBDU1JfU1RWRUMKKwlsYSB0MCwgaGFuZGxlX2V4Y2VwdGlvbgorCWNzcncgQ1NSX1NU
VkVDLCB0MAorCisJLyoKKwkgKiBQcmVzZXJ2ZSB0aGUgZnVsbCBIUy1tb2RlIHZpcnR1YWxpemF0
aW9uIHN0YXRlIGFjcm9zcyB0aGUgaGFuZGxlci4KKwkgKiBoc3RhdHVzIGlzIGxpdmUgc3VwZXJ2
aXNvciBzdGF0ZSByYXRoZXIgdGhhbiBhbiBTU0UgaW50ZXJydXB0ZWQKKwkgKiBhdHRyaWJ1dGUs
IGFuZCBPcGVuU0JJIGNvbnN1bWVzIGhzdGF0dXMuU1BWIGR1cmluZyBldmVudCBjb21wbGV0aW9u
LgorCSAqIFNhdmluZyB0aGUgd2hvbGUgQ1NSIGtlZXBzIHRoZSBoYW5kbGVyIGVwaXNvZGUgdHJh
bnNwYXJlbnQgdG8gS1ZNIGFuZAorCSAqIGF2b2lkcyBoYXZpbmcgdG8gaW5mZXIgd2hpY2ggaHN0
YXR1cyBiaXRzIG1heSBtYXR0ZXIgdG8gYSBndWVzdCByZXN1bWUuCisJICovCisJQUxURVJOQVRJ
VkUoIm5vcCIsICJjc3JyIHM1LCBoc3RhdHVzIiwgMCwgUklTQ1ZfSVNBX0VYVF9oLCAxKQorCisJ
LyoKKwkgKiBTYXZlIHNzY3JhdGNoIGZvciByZXN0b3JhdGlvbiBzaW5jZSB3ZSBtaWdodCBoYXZl
IGludGVycnVwdGVkIHRoZQorCSAqIGtlcm5lbCBpbiBlYXJseSBleGNlcHRpb24gcGF0aCBhbmQg
dGh1cywgd2UgZG9uJ3Qga25vdyB0aGUgY29udGVudCBvZgorCSAqIHNzY3JhdGNoLgorCSAqLwor
CWNzcnJ3IHM0LCBDU1JfU1NDUkFUQ0gsIHgwCisKKwltdiBhMCwgYTcKKworCWNhbGwgZG9fc3Nl
CisKKwljc3J3IENTUl9TU0NSQVRDSCwgczQKKwlBTFRFUk5BVElWRSgibm9wIiwgImNzcncgaHN0
YXR1cywgczUiLCAwLCBSSVNDVl9JU0FfRVhUX2gsIDEpCisJY3NydyBDU1JfU1RWRUMsIHMzCisK
KwlSRUdfTCBhMCwgUFRfU1RBVFVTKHNwKQorCVJFR19MIGExLCBQVF9FUEMoc3ApCisJUkVHX0wg
YTIsIFBUX0JBREFERFIoc3ApCisJUkVHX0wgYTMsIFBUX0NBVVNFKHNwKQorCWNzcncgQ1NSX1NT
VEFUVVMsIGEwCisJY3NydyBDU1JfRVBDLCBhMQorCWNzcncgQ1NSX1NUVkFMLCBhMgorCWNzcncg
Q1NSX1NDQVVTRSwgYTMKKworCVJFR19MIHJhLCBQVF9SQShzcCkKKwlSRUdfTCBzMCwgUFRfUzAo
c3ApCisJUkVHX0wgczEsIFBUX1MxKHNwKQorCVJFR19MIHMyLCBQVF9TMihzcCkKKwlSRUdfTCBz
MywgUFRfUzMoc3ApCisJUkVHX0wgczQsIFBUX1M0KHNwKQorCVJFR19MIHM1LCBQVF9TNShzcCkK
KwlSRUdfTCBzNiwgUFRfUzYoc3ApCisJUkVHX0wgczcsIFBUX1M3KHNwKQorCVJFR19MIHM4LCBQ
VF9TOChzcCkKKwlSRUdfTCBzOSwgUFRfUzkoc3ApCisJUkVHX0wgczEwLCBQVF9TMTAoc3ApCisJ
UkVHX0wgczExLCBQVF9TMTEoc3ApCisJUkVHX0wgdHAsIFBUX1RQKHNwKQorCVJFR19MIHQwLCBQ
VF9UMChzcCkKKwlSRUdfTCB0MSwgUFRfVDEoc3ApCisJUkVHX0wgdDIsIFBUX1QyKHNwKQorCVJF
R19MIHQzLCBQVF9UMyhzcCkKKwlSRUdfTCB0NCwgUFRfVDQoc3ApCisJUkVHX0wgdDUsIFBUX1Q1
KHNwKQorCVJFR19MIHQ2LCBQVF9UNihzcCkKKwlSRUdfTCBncCwgUFRfR1Aoc3ApCisJUkVHX0wg
YTAsIFBUX0EwKHNwKQorCVJFR19MIGExLCBQVF9BMShzcCkKKwlSRUdfTCBhMiwgUFRfQTIoc3Ap
CisJUkVHX0wgYTMsIFBUX0EzKHNwKQorCVJFR19MIGE0LCBQVF9BNChzcCkKKwlSRUdfTCBhNSwg
UFRfQTUoc3ApCisKKwlSRUdfTCBzcCwgUFRfU1Aoc3ApCisKKwlsaSBhNywgU0JJX0VYVF9TU0UK
KwlsaSBhNiwgU0JJX1NTRV9FVkVOVF9DT01QTEVURQorCWVjYWxsCisKKyNpZmRlZiBDT05GSUdf
U01QCisuTGZpbmRfaGFydF9pZF9zbG93cGF0aDoKKworCS8qIFJlc3RvcmUgY3VycmVudCB0YXNr
IHN0cnVjdCBmcm9tIF9fc2JpX3NzZV9lbnRyeV90YXNrICovCisJbGkgdDEsIEFTTV9OUl9DUFVT
CisJLyogU2xvd3BhdGggdG8gZmluZCB0aGUgQ1BVIGlkIGFzc29jaWF0ZWQgdG8gdGhlIGhhcnQg
aWQgKi8KKwlsYSB0MCwgX19jcHVpZF90b19oYXJ0aWRfbWFwCisKKy5MaGFydF9pZF9sb29wOgor
CVJFR19MIHQyLCAwKHQwKQorCWJlcSB0MiwgYTYsIC5MY3B1X2lkX2ZvdW5kCisKKwkvKiBJbmNy
ZW1lbnQgcG9pbnRlciBhbmQgQ1BVIG51bWJlciAqLworCWFkZGkgdDMsIHQzLCAxCisJYWRkaSB0
MCwgdDAsIFJJU0NWX1NaUFRSCisJYmx0dSB0MywgdDEsIC5MaGFydF9pZF9sb29wCisKKwkvKgor
CSAqIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBzaW5jZSB3ZSBleHBlY3QgdGhlIGhhcnRfaWQg
dG8gbWF0Y2ggb25lCisJICogb2Ygb3VyIENQVSwgYnV0IGJldHRlciBiZSBzYWZlIHRoYW4gc29y
cnkKKwkgKi8KKwlsYSB0cCwgaW5pdF90YXNrCisJbGEgYTAsIHNzZV9oYXJ0X2lkX3BhbmljX3N0
cmluZworCWxhIHQwLCBwYW5pYworCWphbHIgdDAKKyNlbmRpZgorCitTWU1fQ09ERV9FTkQoaGFu
ZGxlX3NzZSkKKworU1lNX0RBVEFfU1RBUlRfTE9DQUwoc3NlX2hhcnRfaWRfcGFuaWNfc3RyaW5n
KQorICAgIC5hc2NpaSAiVW5hYmxlIHRvIG1hdGNoIGhhcnRfaWQgd2l0aCBjcHVcMCIKK1NZTV9E
QVRBX0VORChzc2VfaGFydF9pZF9wYW5pY19zdHJpbmcpCi0tIAoyLjUwLjEgKEFwcGxlIEdpdC0x
NTUpCgotLSAKa3ZtLXJpc2N2IG1haWxpbmcgbGlzdAprdm0tcmlzY3ZAbGlzdHMuaW5mcmFkZWFk
Lm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2t2bS1yaXNj
dgo=