Re: [PATCH v5 2/6] lib: utils/irqchip/aplic: add MSI mode support with IMSIC parent linking

Anup Patel <[email protected]> Wed, 22 Jul 2026 12:02:48 +0530
Newsgroups org.infradead.lists.opensbi
Message-ID <CABBgwmvoVvkAPiYZfwmMzipqhRX8yjKDCzLKLupdHTvf7g1uxQ@mail.gmail.com>
T24gV2VkLCBKdWwgMjIsIDIwMjYgYXQgMzo0OOKAr0FNIFBhd2FuZGVlcCBPemEKPHBhd2FuZGVl
cC5vemFAb3NzLnF1YWxjb21tLmNvbT4gd3JvdGU6Cj4KPiBBZGQgcGFyZW50X3VuaXF1ZV9pZCBm
aWVsZHMgdG8gc3RydWN0IGFwbGljX2RhdGEgZm9yCj4gSU1TSUMgcGFyZW50IGxpbmtpbmcgaW4g
TVNJIG1vZGUuIFN0b3JlIHBhcmVudCBJTVNJQyB1bmlxdWVfaWQKPiBkdXJpbmcgRkRUIHBhcnNp
bmcgb2YgdGhlIEFQTElDIG5vZGUuCj4KPiBBZGQgYXBsaWNfaXNfbXNpX21vZGUoKSBjb21wbGVt
ZW50aW5nIGFwbGljX2lzX2RpcmVjdF9tb2RlKCkgdG8KPiBjb25zb2xpZGF0ZSBkZWxpdmVyeSBt
b2RlIGRldGVjdGlvbi4gQWRkIEFQTElDX1RBUkdFVF9FSUlEKCkgbWFjcm8KPiBmb3IgcGFja2lu
ZyB0aGUgRUlJRCBmaWVsZCBpbnRvIHRoZSBUQVJHRVQgcmVnaXN0ZXIuCj4KPiBBZGQgcGFyZW50
X3VuaXF1ZV9pZCBhbmQgcGFyZW50X2lycV9tYXAgZmllbGRzIHRvIHN0cnVjdCBhcGxpY19kYXRh
Lgo+IHBhcmVudF91bmlxdWVfaWQgaWRlbnRpZmllcyB0aGUgdXBzdHJlYW0gSU1TSUMgaXJxY2hp
cCBkZXZpY2UgcmVzb2x2ZWQKPiB2aWEgc2JpX2lycWNoaXBfZmluZF9kZXZpY2UoKSBkdXJpbmcg
aHdpcnFfc2V0dXAuIHBhcmVudF9pcnFfbWFwIGlzCj4gYSBwZXItc291cmNlIGFycmF5IGFsbG9j
YXRlZCBhdCBjb2xkIGluaXQgdGltZSB0byB0cmFjayB0aGUgRUlJRAo+IGFzc2lnbmVkIGJ5IHRo
ZSBJTVNJQyBmb3IgZWFjaCBBUExJQyBzb3VyY2UuCj4KPiBSZXN0b3JlIGFwbGljX3dyaXRlbF9t
c2ljZmcoKSBhbmQgcmUtaW50cm9kdWNlIE1TSSBhZGRyZXNzIHJlZ2lzdGVyCj4gcHJvZ3JhbW1p
bmcgaW4gYXBsaWNfaW5pdCgpLCBnYXRlZCBvbiBhcGxpY19pc19tc2lfbW9kZSgpLiBTZXQgdGhl
Cj4gRE9NQUlOQ0ZHX0RNIGJpdCB0byBzd2l0Y2ggdGhlIGhhcmR3YXJlIHRvIE1TSSBkZWxpdmVy
eSBtb2RlIHdoZW4KPiBubyBJREMgc3RydWN0dXJlcyBhcmUgcHJlc2VudC4KPgo+IEFkZCBhcGxp
Y19wcm9ncmFtX21zaV90YXJnZXQoKSB0byBwYWNrIGhhcnRfaW5kZXgsIGd1ZXN0X2luZGV4LCBh
bmQKPiBFSUlEIGludG8gdGhlIEFQTElDX1RBUkdFVCByZWdpc3Rlci4gQWRkIGFwbGljX3dyaXRl
X21zaSgpIGFzIHRoZQo+IHNiaV9pcnFjaGlwIHdyaXRlX21zaSBjYWxsYmFjayB0aGF0IGV4dHJh
Y3RzIEVJSUQgYW5kIGhhcnRfaW5kZXggZnJvbQo+IHRoZSBNU0kgbWVzc2FnZSBhbmQgY2FsbHMg
YXBsaWNfcHJvZ3JhbV9tc2lfdGFyZ2V0KCkuIEFkZAo+IGFwbGljX21zaV9jYWxsYmFjaygpIGFz
IHRoZSBNU0kgcmVjZWl2ZSBjYWxsYmFjayB0aGF0IGRpc3BhdGNoZXMgdG8KPiBzYmlfaXJxY2hp
cF9wcm9jZXNzX2h3aXJxKCkgb24gdGhlIEFQTElDIGNoaXAuCj4KPiBFeHRlbmQgYXBsaWNfaHdp
cnFfc2V0dXAoKSB3aXRoIGFuIE1TSSBwYXRoIHRoYXQgcmVzb2x2ZXMgdGhlIHBhcmVudAo+IElN
U0lDIGNoaXAgYnkgcGFyZW50X3VuaXF1ZV9pZCwgcmVnaXN0ZXJzIGFuIE1TSSByb3V0ZSB2aWEK
PiBzYmlfaXJxY2hpcF9yZWdpc3Rlcl9tc2koKSwgYW5kIHN0b3JlcyB0aGUgYWxsb2NhdGVkIEVJ
SUQgaW4KPiBwYXJlbnRfaXJxX21hcCBmb3IgdGhlIHNvdXJjZSBiZWluZyBjb25maWd1cmVkLgo+
Cj4gRXh0ZW5kIGFwbGljX2h3aXJxX3NldF9hZmZpbml0eSgpIHdpdGggYW4gTVNJIHBhdGggdGhh
dCBkZWxlZ2F0ZXMKPiBhZmZpbml0eSByZXByb2dyYW1taW5nIHRvIHRoZSBwYXJlbnQgSU1TSUMg
Y2hpcCB2aWEKPiBzYmlfaXJxY2hpcF9zZXRfYWZmaW5pdHkoKSB1c2luZyB0aGUgc3RvcmVkIHBh
cmVudF9pcnFfbWFwIGVudHJ5Lgo+Cj4gR3VhcmQgd2FybV9pbml0LCBwcm9jZXNzX2h3aXJxcywg
YW5kIGh3aXJxX2VvaSB3aXRoIGVhcmx5IHJldHVybnMgaW4KPiBNU0kgbW9kZSBhcyBpbnRlcnJ1
cHQgZGVsaXZlcnkgYW5kIGFja25vd2xlZGdlbWVudCBhcmUgaGFuZGxlZCBieSB0aGUKPiBJTVNJ
QyBpbiB0aGF0IGNvbmZpZ3VyYXRpb24uCj4KPiBTaWduZWQtb2ZmLWJ5OiBPemEgUGF3YW5kZWVw
IDxwYXdhbmRlZXAub3phQG9zcy5xdWFsY29tbS5jb20+Cj4gLS0tCj4gIGluY2x1ZGUvc2JpL3Ni
aV9pcnFjaGlwLmggICAgICAgICB8ICAgNiArCj4gIGluY2x1ZGUvc2JpX3V0aWxzL2lycWNoaXAv
YXBsaWMuaCB8ICAgMSArCj4gIGxpYi9zYmkvc2JpX2lycWNoaXAuYyAgICAgICAgICAgICB8ICAz
NCArKysrCj4gIGxpYi91dGlscy9mZHQvZmR0X2hlbHBlci5jICAgICAgICB8ICAgMSArCj4gIGxp
Yi91dGlscy9pcnFjaGlwL2FwbGljLmMgICAgICAgICB8IDI1NiArKysrKysrKysrKysrKysrKysr
KysrKysrKystLS0KPiAgNSBmaWxlcyBjaGFuZ2VkLCAyNzYgaW5zZXJ0aW9ucygrKSwgMjIgZGVs
ZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zYmkvc2JpX2lycWNoaXAuaCBiL2lu
Y2x1ZGUvc2JpL3NiaV9pcnFjaGlwLmgKPiBpbmRleCBlNzc4ZDc0Ny4uZWEwMTI2MzUgMTAwNjQ0
Cj4gLS0tIGEvaW5jbHVkZS9zYmkvc2JpX2lycWNoaXAuaAo+ICsrKyBiL2luY2x1ZGUvc2JpL3Ni
aV9pcnFjaGlwLmgKPiBAQCAtMTA3LDYgKzEwNywxMiBAQCBpbnQgc2JpX2lycWNoaXBfdW5tYXNr
X2h3aXJxKHN0cnVjdCBzYmlfaXJxY2hpcF9kZXZpY2UgKmNoaXAsIHUzMiBod2lycSk7Cj4gIC8q
KiBNYXNrIGEgaGFyZHdhcmUgaW50ZXJydXB0ICovCj4gIGludCBzYmlfaXJxY2hpcF9tYXNrX2h3
aXJxKHN0cnVjdCBzYmlfaXJxY2hpcF9kZXZpY2UgKmNoaXAsIHUzMiBod2lycSk7Cj4KPiArLyoq
IEhlbHBlciB0byBzZXQgcHJpdmF0ZSBkYXRhIGluIHNiaV9pcnFjaGlwX2h3aXJxX2RhdGEgKi8K
PiAraW50IHNiaV9pcnFjaGlwX3NldF9od2lycV9wcml2KHN0cnVjdCBzYmlfaXJxY2hpcF9kZXZp
Y2UgKmNoaXAsIHUzMiBod2lycSwgdm9pZCAqcHJpdik7Cj4gKwo+ICsvKiogSGVscGVyIHRvIHJl
dHJpZXZlIGRhdGEgZnJvbSBzYmlfaXJxY2hpcF9od2lycV9kYXRhICovCj4gK3ZvaWQgKnNiaV9p
cnFjaGlwX2dldF9od2lycV9wcml2KHN0cnVjdCBzYmlfaXJxY2hpcF9kZXZpY2UgKmNoaXAsIHUz
MiBod2lycSk7Cj4gKwo+ICAvKiogRGVmYXVsdCByYXcgaGFyZHdhcmUgaW50ZXJydXB0IGhhbmRs
ZXIgKi8KPiAgaW50IHNiaV9pcnFjaGlwX3Jhd19oYW5kbGVyX2RlZmF1bHQoc3RydWN0IHNiaV9p
cnFjaGlwX2RldmljZSAqY2hpcCwgdTMyIGh3aXJxKTsKPgo+IGRpZmYgLS1naXQgYS9pbmNsdWRl
L3NiaV91dGlscy9pcnFjaGlwL2FwbGljLmggYi9pbmNsdWRlL3NiaV91dGlscy9pcnFjaGlwL2Fw
bGljLmgKPiBpbmRleCAzNDYxZDFjNy4uOGQ2ZDg3MWUgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9z
YmlfdXRpbHMvaXJxY2hpcC9hcGxpYy5oCj4gKysrIGIvaW5jbHVkZS9zYmlfdXRpbHMvaXJxY2hp
cC9hcGxpYy5oCj4gQEAgLTM2LDYgKzM2LDcgQEAgc3RydWN0IGFwbGljX2RhdGEgewo+ICAgICAg
ICAgc3RydWN0IHNiaV9kbGlzdCBub2RlOwo+ICAgICAgICAgLyogUHVibGljIG1lbWJlcnMgKi8K
PiAgICAgICAgIHUzMiB1bmlxdWVfaWQ7Cj4gKyAgICAgICB1MzIgcGFyZW50X3VuaXF1ZV9pZDsK
PiAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcjsKPiAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6
ZTsKPiAgICAgICAgIHVuc2lnbmVkIGxvbmcgbnVtX2lkYzsKPiBkaWZmIC0tZ2l0IGEvbGliL3Ni
aS9zYmlfaXJxY2hpcC5jIGIvbGliL3NiaS9zYmlfaXJxY2hpcC5jCj4gaW5kZXggNmQwZGYwMmUu
LjEyZDRlMjcyIDEwMDY0NAo+IC0tLSBhL2xpYi9zYmkvc2JpX2lycWNoaXAuYwo+ICsrKyBiL2xp
Yi9zYmkvc2JpX2lycWNoaXAuYwo+IEBAIC0yMiw2ICsyMiw5IEBAIHN0cnVjdCBzYmlfaXJxY2hp
cF9od2lycV9kYXRhIHsKPgo+ICAgICAgICAgLyoqIHRhcmdldCBoYXJ0IGluZGV4ICovCj4gICAg
ICAgICB1MzIgaGFydF9pbmRleDsKPiArCj4gKyAgICAgICAvKiogY2hpcCdzIHByaXZhdGUgZGF0
YSAqLwo+ICsgICAgICAgdm9pZCAqcHJpdjsKPiAgfTsKPgo+ICAvKiogSW50ZXJuYWwgaXJxY2hp
cCBpbnRlcnJ1cHQgaGFuZGxlciAqLwo+IEBAIC0xMTMsNiArMTE2LDM3IEBAIHN0YXRpYyBzdHJ1
Y3Qgc2JpX2lycWNoaXBfaGFuZGxlciAqc2JpX2lycWNoaXBfZmluZF9oYW5kbGVyKHN0cnVjdCBz
YmlfaXJxY2hpcF9kCj4gICAgICAgICByZXR1cm4gTlVMTDsKPiAgfQo+Cj4gK2ludCBzYmlfaXJx
Y2hpcF9zZXRfaHdpcnFfcHJpdihzdHJ1Y3Qgc2JpX2lycWNoaXBfZGV2aWNlICpjaGlwLCB1MzIg
aHdpcnEsIHZvaWQgKnByaXYpCj4gK3sKPiArICAgICAgIHN0cnVjdCBzYmlfaXJxY2hpcF9od2ly
cV9kYXRhICpkYXRhOwo+ICsKPiArICAgICAgIGlmICghY2hpcCB8fCBjaGlwLT5udW1faHdpcnEg
PD0gaHdpcnEpCj4gKyAgICAgICAgICAgIHJldHVybiBTQklfRUlOVkFMOwo+ICsKPiArICAgICAg
IGRhdGEgPSAmY2hpcC0+aHdpcnFzW2h3aXJxXTsKPiArICAgICAgIGRhdGEtPnByaXYgPSBwcml2
Owo+ICsKPiArICAgICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkICpzYmlfaXJxY2hpcF9n
ZXRfaHdpcnFfcHJpdihzdHJ1Y3Qgc2JpX2lycWNoaXBfZGV2aWNlICpjaGlwLCB1MzIgaHdpcnEp
Cj4gK3sKPiArICAgICAgIHN0cnVjdCBzYmlfaXJxY2hpcF9od2lycV9kYXRhICpkYXRhOwo+ICsg
ICAgICAgaWYgKCFjaGlwIHx8IGNoaXAtPm51bV9od2lycSA8PSBod2lycSkKPiArICAgICAgICAg
ICByZXR1cm4gTlVMTDsKPiArCj4gKyAgICAgICBkYXRhID0gJmNoaXAtPmh3aXJxc1tod2lycV07
Cj4gKwo+ICsgICAgICAgcmV0dXJuIGRhdGEtPnByaXY7Cj4gK30KPiArCj4gK3N0cnVjdCBhcGxp
Y19tc2lfZGF0YSAqc2JpX2lycWNoaXBfZ2V0X2hhbmRsZXJfcHJpdihzdHJ1Y3Qgc2JpX2lycWNo
aXBfZGV2aWNlICpjaGlwLCB1MzIgaHdpcnEpCj4gK3sKPiArICAgICAgIHN0cnVjdCBzYmlfaXJx
Y2hpcF9oYW5kbGVyICpoYW5kbGVyID0gc2JpX2lycWNoaXBfZmluZF9oYW5kbGVyKGNoaXAsIGh3
aXJxKTsKPiArCj4gKyAgICAgICByZXR1cm4gKHN0cnVjdCBhcGxpY19tc2lfZGF0YSAqKSBoYW5k
bGVyLT5wcml2Owo+ICt9Cj4gKwoKWW91IGZvcmdvdCB0byBkcm9wIHNiaV9pcnFjaGlwX2dldF9o
YW5kbGVyX3ByaXYoKSBpbXBsZW1lbnRhdGlvbi4gSQp3aWxsIHRha2UgY2FyZSBvZiBpdCBhdCB0
aGUgdGltZSBvZiBtZXJnaW5nIHRoaXMgcGF0Y2guCgo+ICBpbnQgc2JpX2lycWNoaXBfcmF3X2hh
bmRsZXJfZGVmYXVsdChzdHJ1Y3Qgc2JpX2lycWNoaXBfZGV2aWNlICpjaGlwLCB1MzIgaHdpcnEp
Cj4gIHsKPiAgICAgICAgIHN0cnVjdCBzYmlfaXJxY2hpcF9oYW5kbGVyICpoOwo+IGRpZmYgLS1n
aXQgYS9saWIvdXRpbHMvZmR0L2ZkdF9oZWxwZXIuYyBiL2xpYi91dGlscy9mZHQvZmR0X2hlbHBl
ci5jCj4gaW5kZXggYWQ0ZWZhYWYuLjc0N2JhMDI4IDEwMDY0NAo+IC0tLSBhL2xpYi91dGlscy9m
ZHQvZmR0X2hlbHBlci5jCj4gKysrIGIvbGliL3V0aWxzL2ZkdC9mZHRfaGVscGVyLmMKPiBAQCAt
NjY0LDYgKzY2NCw3IEBAIGludCBmZHRfcGFyc2VfYXBsaWNfbm9kZShjb25zdCB2b2lkICpmZHQs
IGludCBub2Rlb2ZmLCBzdHJ1Y3QgYXBsaWNfZGF0YSAqYXBsaWMpCj4KPiAgICAgICAgIHJjID0g
ZmR0X2FwbGljX2ZpbmRfaW1zaWNfbm9kZShmZHQsIG5vZGVvZmYsICZpbXNpYywgdHJ1ZSk7Cj4g
ICAgICAgICBpZiAoIXJjKSB7Cj4gKyAgICAgICAgICAgICAgIGFwbGljLT5wYXJlbnRfdW5pcXVl
X2lkID0gaW1zaWMudW5pcXVlX2lkOwo+ICAgICAgICAgICAgICAgICBhcGxpYy0+dGFyZ2V0c19t
bW9kZSA9IHRydWU7Cj4gICAgICAgICAgICAgICAgIGFwbGljLT5oYXNfbXNpY2ZnX21tb2RlID0g
dHJ1ZTsKPiAgICAgICAgICAgICAgICAgYXBsaWMtPm1zaWNmZ19tbW9kZS5saHhzID0gaW1zaWMu
Z3Vlc3RfaW5kZXhfYml0czsKPiBkaWZmIC0tZ2l0IGEvbGliL3V0aWxzL2lycWNoaXAvYXBsaWMu
YyBiL2xpYi91dGlscy9pcnFjaGlwL2FwbGljLmMKPiBpbmRleCBlZmMyNTU1NS4uMDFjMmRlNGUg
MTAwNjQ0Cj4gLS0tIGEvbGliL3V0aWxzL2lycWNoaXAvYXBsaWMuYwo+ICsrKyBiL2xpYi91dGls
cy9pcnFjaGlwL2FwbGljLmMKPiBAQCAtMTIsNiArMTIsNyBAQAo+ICAjaW5jbHVkZSA8c2JpL3Ni
aV9jb25zb2xlLmg+Cj4gICNpbmNsdWRlIDxzYmkvc2JpX2RvbWFpbi5oPgo+ICAjaW5jbHVkZSA8
c2JpL3NiaV9lcnJvci5oPgo+ICsjaW5jbHVkZSA8c2JpL3NiaV9oZWFwLmg+Cj4gICNpbmNsdWRl
IDxzYmlfdXRpbHMvaXJxY2hpcC9hcGxpYy5oPgo+Cj4gICNkZWZpbmUgQVBMSUNfTUFYX0lEQyAg
ICAgICAgICAgICAgICAgICgxVUwgPDwgMTQpCj4gQEAgLTczLDYgKzc0LDggQEAKPiAgI2RlZmlu
ZSBBUExJQ19UQVJHRVRfR1VFU1RfSURYKF9fZ2lkeCkgXAo+ICAgICAgICAgKCgoKHUzMikoX19n
aWR4KSkgJiBBUExJQ19UQVJHRVRfR1VFU1RfSURYX01BU0spIDw8IFwKPiAgICAgICAgICBBUExJ
Q19UQVJHRVRfR1VFU1RfSURYX1NISUZUKQo+ICsjZGVmaW5lIEFQTElDX1RBUkdFVF9FSUlEKF9f
ZWlpZCkgXAo+ICsgICAgICAgKCgodTMyKShfX2VpaWQpKSAmIEFQTElDX1RBUkdFVF9FSUlEX01B
U0spCj4KPiAgI2RlZmluZSBBUExJQ19TRVRJUF9CQVNFICAgICAgICAgICAgICAgMHgxYzAwCj4g
ICNkZWZpbmUgQVBMSUNfU0VUSVBOVU0gICAgICAgICAgICAgICAgIDB4MWNkYwo+IEBAIC0xMjUs
NiArMTI4LDEyIEBACj4gICNkZWZpbmUgQVBMSUNfRElTQUJMRV9JVEhSRVNIT0xEICAgICAgIDEK
PiAgI2RlZmluZSBBUExJQ19FTkFCTEVfSVRIUkVTSE9MRCAgICAgICAgICAgICAgICAwCj4KPiAr
c3RydWN0IGFwbGljX21zaV9kYXRhIHsKPiArICAgICAgIHN0cnVjdCBhcGxpY19kYXRhICphcGxp
YzsKPiArICAgICAgIHUzMiBod2lycTsKPiArICAgICAgIHUzMiBwYXJlbnRfaHdpcnE7Cj4gK307
Cj4gKwo+ICBzdGF0aWMgU0JJX0xJU1RfSEVBRChhcGxpY19saXN0KTsKPiAgc3RhdGljIHZvaWQg
YXBsaWNfd3JpdGVsX21zaWNmZyhzdHJ1Y3QgYXBsaWNfbXNpY2ZnX2RhdGEgKm1zaWNmZywKPiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm1zaWNmZ2FkZHIsIHZvaWQgKm1z
aWNmZ2FkZHJIKTsKPiBAQCAtMTY5LDYgKzE3OCwyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXBs
aWNfaXJxX2NscmlwKHN0cnVjdCBhcGxpY19kYXRhICphcGxpYywgdTMyIGh3aXJxKQo+ICAgICAg
ICAgd3JpdGVsKGh3aXJxLCAodm9pZCAqKShhcGxpYy0+YWRkciArIEFQTElDX0NMUklQTlVNKSk7
Cj4gIH0KPgo+ICtzdGF0aWMgaW5saW5lIHZvaWQgYXBsaWNfbXNpX2lycV9yZXRyaWdnZXJfbGV2
ZWwoc3RydWN0IGFwbGljX2RhdGEgKmFwbGljLCB1MzIgaHdpcnEpCj4gK3sKPiArICAgICAgIC8q
Cj4gKyAgICAgICAgKiBUaGUgc2VjdGlvbiAiNC45LjIgU3BlY2lhbCBjb25zaWRlcmF0aW9uIGZv
ciBsZXZlbC1zZW5zaXRpdmUgaW50ZXJydXB0Cj4gKyAgICAgICAgKiBzb3VyY2VzIiBvZiB0aGUg
UklTQy1WIEFJQSBzcGVjaWZpY2F0aW9uIHNheXM6Cj4gKyAgICAgICAgKgo+ICsgICAgICAgICog
QSBzZWNvbmQgb3B0aW9uIGlzIGZvciB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSB0byB3
cml0ZSB0aGUKPiArICAgICAgICAqIEFQTElD4oCZcyBzb3VyY2UgaWRlbnRpdHkgbnVtYmVyIGZv
ciB0aGUgaW50ZXJydXB0IHRvIHRoZSBkb21haW7igJlzCj4gKyAgICAgICAgKiBzZXRpcG51bSBy
ZWdpc3RlciBqdXN0IGJlZm9yZSBleGl0aW5nLiBUaGlzIHdpbGwgY2F1c2UgdGhlIGludGVycnVw
dOKAmXMKPiArICAgICAgICAqIHBlbmRpbmcgYml0IHRvIGJlIHNldCB0byBvbmUgYWdhaW4gaWYg
dGhlIHNvdXJjZSBpcyBzdGlsbCBhc3NlcnRpbmcKPiArICAgICAgICAqIGFuIGludGVycnVwdCwg
YnV0IG5vdCBpZiB0aGUgc291cmNlIGlzIG5vdCBhc3NlcnRpbmcgYW4gaW50ZXJydXB0Lgo+ICsg
ICAgICAgICovCj4gKyAgICAgICB3cml0ZWwoaHdpcnEsICh2b2lkICopKGFwbGljLT5hZGRyICsg
QVBMSUNfU0VUSVBOVU1fTEUpKTsKPiArfQo+ICsKPiAgc3RhdGljIGlubGluZSB2b2lkICphcGxp
Y19pZGNfYmFzZShzdHJ1Y3QgYXBsaWNfZGF0YSAqYXBsaWMsIHUzMiBpZGNfaW5kZXgpCj4gIHsK
PiAgICAgICAgIHJldHVybiAodm9pZCAqKShhcGxpYy0+YWRkciArIEFQTElDX0lEQ19CQVNFICsK
PiBAQCAtMjkyLDYgKzMxNiw4IEBAIHN0YXRpYyB2b2lkIGFwbGljX2luaXQoc3RydWN0IGFwbGlj
X2RhdGEgKmFwbGljKQo+ICAgICAgICAgfQo+Cj4gICAgICAgICBkb21haW5jZmcgPSBBUExJQ19E
T01BSU5DRkdfSUU7Cj4gKyAgICAgICBpZiAoIWFwbGljX2lzX2RpcmVjdF9tb2RlKGFwbGljKSkK
PiArICAgICAgICAgICAgICAgZG9tYWluY2ZnIHw9IEFQTElDX0RPTUFJTkNGR19ETTsKPgo+ICAg
ICAgICAgd3JpdGVsKGRvbWFpbmNmZywgKHZvaWQgKikoYXBsaWMtPmFkZHIgKyBBUExJQ19ET01B
SU5DRkcpKTsKPiAgfQo+IEBAIC0zNTcsNiArMzgzLDggQEAgc3RhdGljIGludCBhcGxpY193YXJt
X2luaXQoc3RydWN0IHNiaV9pcnFjaGlwX2RldmljZSAqY2hpcCkKPiAgICAgICAgIGludCBpZGNf
aW5kZXg7Cj4KPiAgICAgICAgIGFwbGljID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhcGxp
Y19kYXRhLCBpcnFjaGlwKTsKPiArICAgICAgIGlmICghYXBsaWNfaXNfZGlyZWN0X21vZGUoYXBs
aWMpKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPgo+ICAgICAgICAgaGFydF9pbmRleCA9
IGN1cnJlbnRfaGFydGluZGV4KCk7Cj4gICAgICAgICBpZGNfaW5kZXggID0gYXBsaWNfZmluZF9p
ZGNfaW5kZXgoYXBsaWMsIGhhcnRfaW5kZXgpOwo+IEBAIC0zNzcsNyArNDA1LDEwIEBAIHN0YXRp
YyBpbnQgYXBsaWNfcHJvY2Vzc19od2lycXMoc3RydWN0IHNiaV9pcnFjaGlwX2RldmljZSAqY2hp
cCkKPiAgICAgIHUzMiBoYXJ0X2luZGV4LCBjbGFpbWksIGh3aXJxOwo+ICAgICAgaW50IGlkY19p
bmRleCwgcmMgPSAwLCB0bXA7Cj4KPiAtICAgIGFwbGljID0gY29udGFpbmVyX29mKGNoaXAsIHN0
cnVjdCBhcGxpY19kYXRhLCBpcnFjaGlwKTsKPiArICAgICAgIGFwbGljID0gY29udGFpbmVyX29m
KGNoaXAsIHN0cnVjdCBhcGxpY19kYXRhLCBpcnFjaGlwKTsKPiArCj4gKyAgICAgICBpZiAoIWFw
bGljX2lzX2RpcmVjdF9tb2RlKGFwbGljKSkKPiArICAgICAgICAgICAgICAgc2JpX3BhbmljKCJh
cGxpY19wcm9jZXNzX2h3aXJxcyBjYWxsZWQgaW4gTVNJIG1vZGUuXG4iKTsKPgo+ICAgICAgaGFy
dF9pbmRleCA9IGN1cnJlbnRfaGFydGluZGV4KCk7Cj4gICAgICBpZGNfaW5kZXggID0gYXBsaWNf
ZmluZF9pZGNfaW5kZXgoYXBsaWMsIGhhcnRfaW5kZXgpOwo+IEBAIC00MDIsMzggKzQzMywxNjAg
QEAgc3RhdGljIGludCBhcGxpY19wcm9jZXNzX2h3aXJxcyhzdHJ1Y3Qgc2JpX2lycWNoaXBfZGV2
aWNlICpjaGlwKQo+ICAgICAgcmV0dXJuIHJjOwo+ICB9Cj4KPiArc3RhdGljIHZvaWQgYXBsaWNf
aHdpcnFfZW9pKHN0cnVjdCBzYmlfaXJxY2hpcF9kZXZpY2UgKmNoaXAsIHUzMiBod2lycSkKPiAr
ewo+ICsgICAgICAgc3RydWN0IGFwbGljX2RhdGEgKmFwbGljOwo+ICsgICAgdTMyIHNtOwo+ICsK
PiArICAgICAgIGFwbGljID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhcGxpY19kYXRhLCBp
cnFjaGlwKTsKPiArICAgIGlmIChhcGxpY19pc19kaXJlY3RfbW9kZShhcGxpYykpCj4gKyAgICAg
ICAgICAgICAgIHJldHVybjsKPiArCj4gKyAgICBzbSA9IGFwbGljX3NvdXJjZWNmZ19yZWFkKGFw
bGljLCBod2lycSkgJiBBUExJQ19TT1VSQ0VDRkdfU01fTUFTSzsKPiArICAgIGlmIChzbSA9PSBB
UExJQ19TT1VSQ0VDRkdfU01fTEVWRUxfSElHSCB8fAo+ICsgICAgICAgIHNtID09IEFQTElDX1NP
VVJDRUNGR19TTV9MRVZFTF9MT1cpCj4gKyAgICAgICAgYXBsaWNfbXNpX2lycV9yZXRyaWdnZXJf
bGV2ZWwoYXBsaWMsIGh3aXJxKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXBsaWNfcHJvZ3Jh
bV9tc2lfdGFyZ2V0KHN0cnVjdCBhcGxpY19kYXRhICphcGxpYywKPiArICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdTMyIGh3aXJxLCB1MzIgaGFydF9pbmRleCwKPiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGd1ZXN0X2luZGV4LCB1MzIgZWlpZCkK
PiArewo+ICsgICAgICAgdTMyIHRhcmdldDsKPiArCj4gKyAgICAgICB0YXJnZXQgPSBBUExJQ19U
QVJHRVRfSEFSVF9JRFgoaGFydF9pbmRleCkgfAo+ICsgICAgICAgICAgICAgICAgQVBMSUNfVEFS
R0VUX0dVRVNUX0lEWChndWVzdF9pbmRleCkgfAo+ICsgICAgICAgICAgICAgICAgQVBMSUNfVEFS
R0VUX0VJSUQoZWlpZCk7Cj4gKwo+ICsgICAgICAgYXBsaWNfdGFyZ2V0X3dyaXRlKGFwbGljLCBo
d2lycSwgdGFyZ2V0KTsKPiArfQo+ICsKPiArc3RhdGljIHUzMiBkZXJpdmVfaGFydF9pbmRleChz
dHJ1Y3QgYXBsaWNfbXNpY2ZnX2RhdGEgKm1zaWNmZywKPiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdHJ1Y3Qgc2JpX2lycWNoaXBfbXNpX21zZyAqbXNnKQo+ICt7Cj4gKyAg
ICAgICB1NjQgYWRkciA9ICgodTY0KW1zZy0+YWRkcmVzc19oaSA8PCAzMikgfCBtc2ctPmFkZHJl
c3NfbG87Cj4gKyAgICAgICB1NjQgdHBwbiA9IGFkZHIgPj4gQVBMSUNfeE1TSUNGR0FERFJfUFBO
X1NISUZUOwo+ICsgICAgICAgdTMyIGdyb3VwX2luZGV4LCBoYXJ0X2luZGV4Owo+ICsKPiArICAg
ICAgIGdyb3VwX2luZGV4ID0gKHRwcG4gPj4gQVBMSUNfeE1TSUNGR0FERFJfUFBOX0hIWF9TSElG
VChtc2ljZmctPmhoeHMpKSAmCj4gKyAgICAgICAgICAgICAgICAgICAgIEFQTElDX3hNU0lDRkdB
RERSX1BQTl9ISFhfTUFTSyhtc2ljZmctPmhoeHcpOwo+ICsKPiArICAgICAgIGhhcnRfaW5kZXgg
PSAodHBwbiA+PiBtc2ljZmctPmxoeHMpICYKPiArICAgICAgICAgICAgICAgICAgICAoKDFVTCA8
PCBtc2ljZmctPmxoeHcpIC0gMSk7Cj4gKwo+ICsgICAgICAgaGFydF9pbmRleCB8PSAoZ3JvdXBf
aW5kZXggPDwgbXNpY2ZnLT5saHh3KTsKPiArCj4gKyAgICAgICByZXR1cm4gaGFydF9pbmRleDsK
PiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXBsaWNfd3JpdGVfbXNpKHUzMiBwYXJlbnRfaHdpcnEs
Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzYmlfaXJxY2hpcF9t
c2lfbXNnICptc2csCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByaXYpCj4g
K3sKPiArICAgICAgIHN0cnVjdCBhcGxpY19tc2lfZGF0YSAqbXNpX2RhdGEgPSBwcml2Owo+ICsg
ICAgICAgdTMyIGd1ZXN0X2luZGV4ID0gMDsKPiArICAgICAgIHUzMiBlaWlkOwo+ICsKPiArICAg
ICAgIGVpaWQgPSBtc2ctPmRhdGE7Cj4gKyAgICAgICBpZiAoIWVpaWQgfHwgZWlpZCA+IEFQTElD
X1RBUkdFVF9FSUlEX01BU0spCj4gKyAgICAgICAgICAgICAgIHJldHVybjsKPiArCj4gKyAgICAg
ICBhcGxpY19wcm9ncmFtX21zaV90YXJnZXQobXNpX2RhdGEtPmFwbGljLCBtc2lfZGF0YS0+aHdp
cnEsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXJpdmVfaGFydF9pbmRleCgm
bXNpX2RhdGEtPmFwbGljLT5tc2ljZmdfbW1vZGUsIG1zZyksCj4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBndWVzdF9pbmRleCwgZWlpZCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg
YXBsaWNfbXNpX2NhbGxiYWNrKHUzMiBwYXJlbnRfaHdpcnEsIHZvaWQgKnByaXYpCj4gK3sKPiAr
ICAgICAgIHN0cnVjdCBhcGxpY19tc2lfZGF0YSAqbXNpX2RhdGEgPSBwcml2Owo+ICsgICAgICAg
aW50IHJjOwo+ICsKPiArICAgICAgIHJjID0gc2JpX2lycWNoaXBfcHJvY2Vzc19od2lycSgmbXNp
X2RhdGEtPmFwbGljLT5pcnFjaGlwLCBtc2lfZGF0YS0+aHdpcnEpOwo+ICsgICAgICAgaWYgKHJj
ICYmIHJjICE9IFNCSV9FTk9FTlQpCj4gKyAgICAgICAgICAgICAgIHNiaV9wcmludGYoIiVzOiBo
d2lycT0lbHUgZmFpbGVkIHJjPSVkXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgIF9fZnVu
Y19fLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXBhcmVudF9od2ly
cSwgcmMpOwo+ICsKPiArICAgICAgIHJldHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIGludCBh
cGxpY19zZXR1cF9tc2koc3RydWN0IGFwbGljX2RhdGEgKmFwbGljLCB1MzIgaHdpcnEpCj4gK3sK
PiArICAgICAgIHN0cnVjdCBzYmlfaXJxY2hpcF9kZXZpY2UgKnBhcmVudDsKPiArICAgICAgIHUz
MiBmaXJzdF9od2lycTsKPiArICAgICAgIHN0cnVjdCBhcGxpY19tc2lfZGF0YSAqbXNpX2RhdGE7
Cj4gKyAgICAgICBpbnQgcmM7Cj4gKwo+ICsgICAgcGFyZW50ID0gc2JpX2lycWNoaXBfZmluZF9k
ZXZpY2UoYXBsaWMtPnBhcmVudF91bmlxdWVfaWQpOwo+ICsgICAgaWYgKCFwYXJlbnQpIHsKPiAr
ICAgICAgICAgICAgICAgc2JpX3ByaW50ZigiJXM6IG1zaV9wYXJlbnQgaXMgTlVMTCBod2lycT0l
bHVcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sICh1bnNpZ25lZCBsb25n
KWh3aXJxKTsKPiArICAgICAgICAgICAgICAgcmV0dXJuIFNCSV9FSU5WQUw7Cj4gKyAgICAgICB9
Cj4gKwo+ICsgICAgICAgbXNpX2RhdGEgPSBzYmlfemFsbG9jKHNpemVvZihzdHJ1Y3QgYXBsaWNf
bXNpX2RhdGEpKTsKPiArICAgICAgIGlmICghbXNpX2RhdGEpCj4gKyAgICAgICAgICAgICAgIHJl
dHVybiBTQklfRU5PTUVNOwo+ICsKPiArICAgICAgIG1zaV9kYXRhLT5hcGxpYyA9IGFwbGljOwo+
ICsgICAgICAgbXNpX2RhdGEtPmh3aXJxID0gaHdpcnE7Cj4gKwo+ICsgICAgICAgcmMgPSBzYmlf
aXJxY2hpcF9yZWdpc3Rlcl9tc2kocGFyZW50LCAxLAo+ICsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcGxpY193cml0ZV9tc2ksCj4gKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFwbGljX21zaV9jYWxsYmFjaywKPiArICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbXNpX2RhdGEsCj4gKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZmaXJzdF9od2lycSk7Cj4gKyAgICAgICBpZiAocmMpIHsKPiAr
ICAgICAgICAgICAgICAgc2JpX3ByaW50ZigiJXM6IHJlZ2lzdGVyX21zaSBmYWlsZWQgaHdpcnE9
JWx1IHJjPSVkXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCAodW5zaWdu
ZWQgbG9uZylod2lycSwgcmMpOwo+ICsgICAgICAgICAgICAgICBzYmlfZnJlZShtc2lfZGF0YSk7
Cj4gKyAgICAgICAgICAgICAgIHJldHVybiByYzsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBt
c2lfZGF0YS0+cGFyZW50X2h3aXJxID0gZmlyc3RfaHdpcnE7Cj4gKyAgICAgICBzYmlfaXJxY2hp
cF9zZXRfaHdpcnFfcHJpdigmYXBsaWMtPmlycWNoaXAsIGh3aXJxLCBtc2lfZGF0YSk7Cj4gKwo+
ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gIHN0YXRpYyBpbnQgYXBsaWNfaHdpcnFfc2V0dXAo
c3RydWN0IHNiaV9pcnFjaGlwX2RldmljZSAqY2hpcCwKPiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHUzMiBod2lycSwgdTMyIGh3aXJxX2ZsYWdzKQo+ICB7Cj4gICAgICAgICBzdHJ1Y3Qg
YXBsaWNfZGF0YSAqYXBsaWM7Cj4gLSAgICAgICB1MzIgc291cmNlY2ZnOwo+ICsgICAgICAgdTMy
IHNvdXJjZWNmZzsKPgo+ICAgICAgICAgYXBsaWMgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0
IGFwbGljX2RhdGEsIGlycWNoaXApOwo+Cj4gICAgICAgICBzb3VyY2VjZmcgPSBhcGxpY19od2ly
cV9mbGFnc190b19zb3VyY2VjZmcoaHdpcnFfZmxhZ3MpOwo+ICAgICAgICAgaWYgKHNvdXJjZWNm
ZyA9PSBBUExJQ19TT1VSQ0VDRkdfU01fSU5BQ1RJVkUpIHsKPiAtICAgICAgICAgICAgICAgc2Jp
X3ByaW50ZigiYXBsaWNfaHdpcnFfc2V0dXA6IHVuc3VwcG9ydGVkIGZsYWdzPTB4JWx4IGh3aXJx
PSVsdVxuIiwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylod2ly
cV9mbGFncywKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylod2ly
cSk7Cj4gKyAgICAgICAgICAgICAgIHNiaV9wcmludGYoIiVzOiB1bnN1cHBvcnRlZCBmbGFncz0w
eCVseCBod2lycT0lbHVcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sCj4g
KyAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaHdpcnFfZmxhZ3MsCj4gKyAg
ICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaHdpcnEpOwo+ICAgICAgICAgICAg
ICAgICByZXR1cm4gU0JJX0VJTlZBTDsKPiAgICAgICAgIH0KPiArCj4gICAgICAgICBhcGxpY19z
b3VyY2VjZmdfd3JpdGUoYXBsaWMsIGh3aXJxLCBzb3VyY2VjZmcpOwo+Cj4gICAgICAgICBpZiAo
YXBsaWNfaHdpcnFfaXNfZGVsZWdhdGVkKGFwbGljLCBod2lycSkpIHsKPiAtICAgICAgICAgICAg
ICAgc2JpX3ByaW50ZigiYXBsaWNfaHdpcnFfc2V0dXA6IGh3aXJxPSVsdSBpcyBkZWxlZ2F0ZWRc
biIsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaHdpcnEpOwo+
ICsgICAgICAgICAgICAgICBzYmlfcHJpbnRmKCIlczogaHdpcnE9JWx1IGlzIGRlbGVnYXRlZFxu
IiwKPiArICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcpaHdp
cnEpOwo+ICAgICAgICAgICAgICAgICByZXR1cm4gU0JJX0VOT1RTVVBQOwo+ICAgICAgICAgfQo+
Cj4gICAgICAgICBhcGxpY19pcnFfY2xyaWUoYXBsaWMsIGh3aXJxKTsKPiAgICAgICAgIGFwbGlj
X2lycV9jbHJpcChhcGxpYywgaHdpcnEpOwo+Cj4gKyAgICAgICBpZiAoIWFwbGljX2lzX2RpcmVj
dF9tb2RlKGFwbGljKSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIGFwbGljX3NldHVwX21zaShh
cGxpYywgaHdpcnEpOwo+ICsKPiAgICAgICAgIHJldHVybiAwOwo+ICB9Cj4KPiAgc3RhdGljIHZv
aWQgYXBsaWNfaHdpcnFfY2xlYW51cChzdHJ1Y3Qgc2JpX2lycWNoaXBfZGV2aWNlICpjaGlwLCB1
MzIgaHdpcnEpCj4gIHsKPiAgICAgICAgIHN0cnVjdCBhcGxpY19kYXRhICphcGxpYzsKPiArICAg
ICAgIHN0cnVjdCBhcGxpY19tc2lfZGF0YSAqbXNpX2RhdGE7Cj4KPiAgICAgICAgIGFwbGljID0g
Y29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhcGxpY19kYXRhLCBpcnFjaGlwKTsKPiAgICAgICAg
IGlmIChhcGxpY19od2lycV9pc19kZWxlZ2F0ZWQoYXBsaWMsIGh3aXJxKSkKPiBAQCAtNDQzLDE4
ICs1OTYsNDIgQEAgc3RhdGljIHZvaWQgYXBsaWNfaHdpcnFfY2xlYW51cChzdHJ1Y3Qgc2JpX2ly
cWNoaXBfZGV2aWNlICpjaGlwLCB1MzIgaHdpcnEpCj4gICAgICAgICBhcGxpY19pcnFfY2xyaXAo
YXBsaWMsIGh3aXJxKTsKPiAgICAgICAgIGFwbGljX3NvdXJjZWNmZ193cml0ZShhcGxpYywgaHdp
cnEsIEFQTElDX1NPVVJDRUNGR19TTV9JTkFDVElWRSk7Cj4gICAgICAgICBhcGxpY190YXJnZXRf
d3JpdGUoYXBsaWMsIGh3aXJxLCBBUExJQ19ERUZBVUxUX1BSSU9SSVRZKTsKPiArICAgICAgIG1z
aV9kYXRhID0gKHN0cnVjdCBhcGxpY19tc2lfZGF0YSAqKSBzYmlfaXJxY2hpcF9nZXRfaHdpcnFf
cHJpdihjaGlwLCBod2lycSk7Cj4gKyAgICAgICBpZiAobXNpX2RhdGEpCj4gKyAgICAgICAgICAg
ICAgIHNiaV9mcmVlKG1zaV9kYXRhKTsKPiAgfQo+Cj4gIHN0YXRpYyBpbnQgYXBsaWNfaHdpcnFf
c2V0X2FmZmluaXR5KHN0cnVjdCBzYmlfaXJxY2hpcF9kZXZpY2UgKmNoaXAsCj4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGh3aXJxLCB1MzIgaGFydF9pbmRleCkKPiAg
ewo+ICAgICAgICAgc3RydWN0IGFwbGljX2RhdGEgKmFwbGljOwo+ICsgICAgICAgc3RydWN0IGFw
bGljX21zaV9kYXRhICptc2lfZGF0YTsKPiArICAgICAgIHN0cnVjdCBzYmlfaXJxY2hpcF9kZXZp
Y2UgKnBhcmVudDsKPiAgICAgICAgIGludCBpZGNfaW5kZXg7Cj4gKyAgICAgICBpbnQgcmM7Cj4K
PiAgICAgICAgIGFwbGljID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhcGxpY19kYXRhLCBp
cnFjaGlwKTsKPiAgICAgICAgIGlmIChhcGxpY19od2lycV9pc19kZWxlZ2F0ZWQoYXBsaWMsIGh3
aXJxKSkKPiAgICAgICAgICAgICAgICAgcmV0dXJuIFNCSV9FTk9UU1VQUDsKPgo+ICsgICAgICAg
aWYgKCFhcGxpY19pc19kaXJlY3RfbW9kZShhcGxpYykpIHsKPiArICAgICAgICAgICAgICAgcGFy
ZW50ID0gc2JpX2lycWNoaXBfZmluZF9kZXZpY2UoYXBsaWMtPnBhcmVudF91bmlxdWVfaWQpOwo+
ICsgICAgICAgICAgICAgICBpZiAoIXBhcmVudCkgewo+ICsgICAgICAgICAgICAgICAgICAgICAg
IHNiaV9wcmludGYoIiVzOiBtc2lfcGFyZW50IGlzIE5VTEwgaHdpcnE9JWx1XG4iLAo+ICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sICh1bnNpZ25lZCBsb25nKWh3aXJx
KTsKPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU0JJX0VJTlZBTDsKPiArICAgICAg
ICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgbXNpX2RhdGEgPSBzYmlfaXJxY2hpcF9n
ZXRfaHdpcnFfcHJpdihjaGlwLCBod2lycSk7Cj4gKyAgICAgICAgICAgICAgIHJjID0gc2JpX2ly
cWNoaXBfc2V0X2FmZmluaXR5KHBhcmVudCwgbXNpX2RhdGEtPnBhcmVudF9od2lycSwgaGFydF9p
bmRleCk7Cj4gKyAgICAgICAgICAgICAgIGlmIChyYykgewo+ICsgICAgICAgICAgICAgICAgICAg
ICAgIHNiaV9wcmludGYoIiVzOiBzYmlfaXJxY2hpcF9zZXRfYWZmaW5pdHkgZmFpbGVkIGh3aXJx
PSVsdSByYz0lZFxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19f
LCAodW5zaWduZWQgbG9uZylod2lycSwgcmMpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByYzsKPiArICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsK
PiArICAgICAgIH0KPiArCj4gICAgICAgICBpZGNfaW5kZXggPSBhcGxpY19maW5kX2lkY19pbmRl
eChhcGxpYywgaGFydF9pbmRleCk7Cj4gICAgICAgICBpZiAoaWRjX2luZGV4IDwgMCkKPiAgICAg
ICAgICAgICAgICAgcmV0dXJuIFNCSV9FSU5WQUw7Cj4gQEAgLTQ4OSwxMiArNjY2LDEzIEBAIHN0
YXRpYyB2b2lkIGFwbGljX2h3aXJxX3VubWFzayhzdHJ1Y3Qgc2JpX2lycWNoaXBfZGV2aWNlICpj
aGlwLCB1MzIgaHdpcnEpCj4gIH0KPgo+ICBzdGF0aWMgc3RydWN0IHNiaV9pcnFjaGlwX2Rldmlj
ZSBhcGxpY19pcnFjaGlwX3RlbXBsYXRlID0gewo+IC0gICAgICAgLndhcm1faW5pdCAgICAgICAg
ICAgICAgPSBhcGxpY193YXJtX2luaXQsCj4gKyAgICAgICAud2FybV9pbml0ICAgICAgICAgICAg
ICAgICAgICAgID0gYXBsaWNfd2FybV9pbml0LAo+ICAgICAgICAgLnByb2Nlc3NfaHdpcnFzICAg
ICAgICAgPSBhcGxpY19wcm9jZXNzX2h3aXJxcywKPiArICAgICAgIC5od2lycV9lb2kgICAgICAg
ICAgICAgICAgICAgICAgPSBhcGxpY19od2lycV9lb2ksCj4gICAgICAgICAuaHdpcnFfc2V0dXAg
ICAgICAgICAgICA9IGFwbGljX2h3aXJxX3NldHVwLAo+ICAgICAgICAgLmh3aXJxX2NsZWFudXAg
ICAgICAgICAgPSBhcGxpY19od2lycV9jbGVhbnVwLAo+ICAgICAgICAgLmh3aXJxX3NldF9hZmZp
bml0eSAgICAgPSBhcGxpY19od2lycV9zZXRfYWZmaW5pdHksCj4gLSAgICAgICAuaHdpcnFfbWFz
ayAgICAgICAgICAgICA9IGFwbGljX2h3aXJxX21hc2ssCj4gKyAgICAgICAuaHdpcnFfbWFzayAg
ICAgICAgICAgICAgICAgICAgID0gYXBsaWNfaHdpcnFfbWFzaywKPiAgICAgICAgIC5od2lycV91
bm1hc2sgICAgICAgICAgID0gYXBsaWNfaHdpcnFfdW5tYXNrLAo+ICB9Owo+Cj4gQEAgLTUwMywy
MSArNjgxLDQ2IEBAIGludCBhcGxpY19jb2xkX2lycWNoaXBfaW5pdChzdHJ1Y3QgYXBsaWNfZGF0
YSAqYXBsaWMpCj4gICAgICAgICBpbnQgcmM7Cj4gICAgICAgICBzdHJ1Y3QgYXBsaWNfZGVsZWdh
dGVfZGF0YSAqZGVsZWc7Cj4gICAgICAgICB1MzIgZmlyc3RfZGVsZWdfaXJxLCBsYXN0X2RlbGVn
X2lycSwgaTsKPiArICAgICAgIGJvb2wgbXNpX21vZGU7Cj4gKwo+ICsgICAgICAgbXNpX21vZGUg
PSAhYXBsaWNfaXNfZGlyZWN0X21vZGUoYXBsaWMpOwo+ICsgICAgICAgaWYgKCFhcGxpYy0+bnVt
X3NvdXJjZSkgewo+ICsgICAgICAgICAgICAgICBzYmlfcHJpbnRmKCIlczogbnVtX3NvdXJjZSBp
cyB6ZXJvXG4iLCBfX2Z1bmNfXyk7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiBTQklfRUlOVkFM
Owo+ICsgICAgICAgfQo+Cj4gLSAgICAgICAvKiBTYW5pdHkgY2hlY2tzICovCj4gLSAgICAgICBp
ZiAoIWFwbGljIHx8Cj4gLSAgICAgICAgICAgIWFwbGljLT5udW1fc291cmNlIHx8IEFQTElDX01B
WF9TT1VSQ0UgPD0gYXBsaWMtPm51bV9zb3VyY2UgfHwKPiAtICAgICAgICAgICBBUExJQ19NQVhf
SURDIDw9IGFwbGljLT5udW1faWRjKQo+ICsgICAgICAgaWYgKEFQTElDX01BWF9TT1VSQ0UgPD0g
YXBsaWMtPm51bV9zb3VyY2UpIHsKPiArICAgICAgICAgICAgICAgc2JpX3ByaW50ZigiJXM6IG51
bV9zb3VyY2U9JWx1IGV4Y2VlZHMgbWF4PSVsdVxuIiwKPiArICAgICAgICAgICAgICAgICAgICAg
ICBfX2Z1bmNfXywKPiArICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylhcGxp
Yy0+bnVtX3NvdXJjZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylB
UExJQ19NQVhfU09VUkNFKTsKPiAgICAgICAgICAgICAgICAgcmV0dXJuIFNCSV9FSU5WQUw7Cj4g
KyAgICAgICB9Cj4gKwo+ICsgICAgICAgaWYgKCFtc2lfbW9kZSAmJiBBUExJQ19NQVhfSURDIDw9
IGFwbGljLT5udW1faWRjKSB7Cj4gKyAgICAgICAgICAgICAgIHNiaV9wcmludGYoIiVzOiBudW1f
aWRjPSVsdSBleGNlZWRzIG1heD0lbHVcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgX19m
dW5jX18sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpYXBsaWMtPm51
bV9pZGMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpQVBMSUNfTUFY
X0lEQyk7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiBTQklfRUlOVkFMOwo+ICsgICAgICAgfQo+
ICsKPiAgICAgICAgIGlmIChhcGxpYy0+dGFyZ2V0c19tbW9kZSAmJiBhcGxpYy0+aGFzX21zaWNm
Z19tbW9kZSkgewo+ICAgICAgICAgICAgICAgICByYyA9IGFwbGljX2NoZWNrX21zaWNmZygmYXBs
aWMtPm1zaWNmZ19tbW9kZSk7Cj4gLSAgICAgICAgICAgICAgIGlmIChyYykKPiArICAgICAgICAg
ICAgICAgaWYgKHJjKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgc2JpX3ByaW50ZigiJXM6
IGludmFsaWQgTS1tb2RlIG1zaWNmZyByYz0lZFxuIiwKPiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fZnVuY19fLCByYyk7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJjOwo+ICsgICAgICAgICAgICAgICB9Cj4gICAgICAgICB9Cj4gKwo+ICAgICAgICAgaWYgKGFw
bGljLT50YXJnZXRzX21tb2RlICYmIGFwbGljLT5oYXNfbXNpY2ZnX3Ntb2RlKSB7Cj4gICAgICAg
ICAgICAgICAgIHJjID0gYXBsaWNfY2hlY2tfbXNpY2ZnKCZhcGxpYy0+bXNpY2ZnX3Ntb2RlKTsK
PiAtICAgICAgICAgICAgICAgaWYgKHJjKQo+ICsgICAgICAgICAgICAgICBpZiAocmMpIHsKPiAr
ICAgICAgICAgICAgICAgICAgICAgICBzYmlfcHJpbnRmKCIlczogaW52YWxpZCBTLW1vZGUgbXNp
Y2ZnIHJjPSVkXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18s
IHJjKTsKPiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmM7Cj4gKyAgICAgICAgICAg
ICAgIH0KPiAgICAgICAgIH0KPgo+ICAgICAgICAgLyogSW5pdCB0aGUgQVBMSUMgcmVnaXN0ZXJz
ICovCj4gQEAgLTU1MCwyMiArNzUzLDMxIEBAIGludCBhcGxpY19jb2xkX2lycWNoaXBfaW5pdChz
dHJ1Y3QgYXBsaWNfZGF0YSAqYXBsaWMpCj4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJjOwo+ICAgICAgICAgfQo+Cj4gLSAgICAgICBpZiAoKGFwbGljLT50YXJnZXRzX21tb2RlKSAm
JiBhcGxpY19pc19kaXJlY3RfbW9kZShhcGxpYykpIHsKPiArICAgICAgIGlmICgoYXBsaWMtPnRh
cmdldHNfbW1vZGUpKSB7Cj4gICAgICAgICAgICAgICAgIGFwbGljLT5pcnFjaGlwICAgICAgICAg
ICA9IGFwbGljX2lycWNoaXBfdGVtcGxhdGU7Cj4gICAgICAgICAgICAgICAgIGFwbGljLT5pcnFj
aGlwLmlkICAgICAgICA9IGFwbGljLT51bmlxdWVfaWQ7Cj4gICAgICAgICAgICAgICAgIGFwbGlj
LT5pcnFjaGlwLmNhcHMgPSBTQklfSVJRQ0hJUF9DQVBTX1dJUkVEOwo+ICAgICAgICAgICAgICAg
ICBhcGxpYy0+aXJxY2hpcC5udW1faHdpcnEgPSBhcGxpYy0+bnVtX3NvdXJjZSArIDE7Cj4KPiAt
ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFwbGljLT5udW1faWRjOyBpKyspCj4gLSAg
ICAgICAgICAgICAgICAgICAgICAgc2JpX2hhcnRtYXNrX3NldF9oYXJ0aW5kZXgoYXBsaWMtPmlk
Y19tYXBbaV0sCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJmFwbGljLT5pcnFjaGlwLnRhcmdldF9oYXJ0cyk7Cj4gKyAgICAgICAgICAgICAgIGlm
IChtc2lfbW9kZSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIGFwbGljLT5pcnFjaGlwLndh
cm1faW5pdCAgICAgID0gTlVMTDsKPiArICAgICAgICAgICAgICAgICAgICAgICBhcGxpYy0+aXJx
Y2hpcC5wcm9jZXNzX2h3aXJxcyA9IE5VTEw7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgYXBs
aWMtPmlycWNoaXAuaHdpcnFfZW9pICAgICAgPSBOVUxMOwo+ICsgICAgICAgICAgICAgICB9Cj4g
Kwo+ICsgICAgICAgICAgICAgICBpZiAobXNpX21vZGUpCj4gKyAgICAgICAgICAgICAgICAgICAg
ICAgc2JpX2hhcnRtYXNrX3NldF9hbGwoJmFwbGljLT5pcnFjaGlwLnRhcmdldF9oYXJ0cyk7Cj4g
KyAgICAgICAgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgYXBsaWMtPm51bV9pZGM7IGkrKykKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNiaV9oYXJ0bWFza19zZXRfaGFydGluZGV4KGFwbGljLT5pZGNfbWFwW2ldLAo+ICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFw
bGljLT5pcnFjaGlwLnRhcmdldF9oYXJ0cyk7Cj4KPiAgICAgICAgICAgICAgICAgcmMgPSBzYmlf
aXJxY2hpcF9hZGRfZGV2aWNlKCZhcGxpYy0+aXJxY2hpcCk7Cj4gICAgICAgICAgICAgICAgIGlm
IChyYykgewo+IC0gICAgICAgICAgICAgICAgICAgICAgIHNiaV9wcmludGYoImFwbGljX2NvbGRf
aXJxY2hpcF9pbml0OiBzYmlfaXJxY2hpcF9hZGRfZGV2aWNlIGZhaWxlZCByYz0lZCBpZD0lbHUg
bW9kZT0lcyB0YXJnZXRfd2VpZ2h0PSVsdVxuIiwKPiAtICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgIHNiaV9wcmludGYoIiVzOiBzYmlf
aXJxY2hpcF9hZGRfZGV2aWNlIGZhaWxlZCByYz0lZCBpZD0lbHUgbW9kZT0lcyB0YXJnZXRfd2Vp
Z2h0PSVsdVxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBy
YywKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWFwbGlj
LT5pcnFjaGlwLmlkLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpcmVjdCIs
Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2lfbW9kZSA/ICJtc2kiIDogImRp
cmVjdCIsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylz
YmlfaGFydG1hc2tfd2VpZ2h0KAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmYXBsaWMtPmlycWNoaXAudGFyZ2V0X2hhcnRzKSk7Cj4gICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJjOwo+IC0tCj4gMi40My4wCj4KPgo+IC0tCj4gb3BlbnNiaSBtYWlsaW5n
IGxpc3QKPiBvcGVuc2JpQGxpc3RzLmluZnJhZGVhZC5vcmcKPiBodHRwOi8vbGlzdHMuaW5mcmFk
ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL29wZW5zYmkKCk90aGVyd2lzZSwgdGhpcyBsb29rcyBn
b29kIHRvIG1lLgoKUmV2aWV3ZWQtYnk6IEFudXAgUGF0ZWwgPGFudXBAYnJhaW5mYXVsdC5vcmc+
CgpUaGFua3MsCkFudXAKCi0tIApvcGVuc2JpIG1haWxpbmcgbGlzdApvcGVuc2JpQGxpc3RzLmlu
ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9v
cGVuc2JpCg==