Re: [PATCH 1/2] sbi: add hardware isolation abstraction framework

Raymond Mao <[email protected]> Fri, 24 Jul 2026 22:46:40 -0400
Newsgroups org.infradead.lists.opensbi
Message-ID <CAMDkj5zNC3pXkNkr4kUwSiJ0e_-YYL1cTjcYeSNj7G9ou4Up-Q@mail.gmail.com>
SGkgQW51cCwKCk9uIEZyaSwgSnVsIDE3LCAyMDI2IGF0IDM6NTTigK9BTSBBbnVwIFBhdGVsIDxh
bnVwQGJyYWluZmF1bHQub3JnPiB3cm90ZToKPgo+IE9uIFRodSwgSnVsIDE2LCAyMDI2IGF0IDc6
MDnigK9QTSBBbnVwIFBhdGVsIDxhbnVwQGJyYWluZmF1bHQub3JnPiB3cm90ZToKPiA+Cj4gPiBP
biBNb24sIE1heSA0LCAyMDI2IGF0IDExOjA54oCvUE0gUmF5bW9uZCBNYW8gPHJheW1vbmRtYW9j
YUBnbWFpbC5jb20+IHdyb3RlOgo+ID4gPgo+ID4gPiBGcm9tOiBSYXltb25kIE1hbyA8cmF5bW9u
ZC5tYW9AcmlzY3N0YXIuY29tPgo+ID4gPgo+ID4gPiBJbnRyb2R1Y2UgYSBnZW5lcmljIGhhcmR3
YXJlLWlzb2xhdGlvbiByZWdpc3RyYXRpb24gYW5kIGRpc3BhdGNoCj4gPiA+IGZyYW1ld29yayBm
b3IgT3BlblNCSSBkb21haW5zLgo+ID4gPgo+ID4gPiBBZGQgYm9vdC10aW1lIGluaXQsIHBlci1k
b21haW4gaW5pdCwgZG9tYWluIGV4aXQsIGRvbWFpbiBlbnRlciBhbmQKPiA+ID4gY2xlYW51cCBj
YWxsYmFja3MsIGFuZCBzdG9yZSBwZXItZG9tYWluIG1lY2hhbmlzbSBjb250ZXh0cyBpbiBzdHJ1
Y3QKPiA+ID4gc2JpX2RvbWFpbi4KPiA+ID4KPiA+ID4gVGhpcyBlc3RhYmxpc2hlcyBhbiBhYnN0
cmFjdGlvbiB0aGF0IGFsbG93cyBtdWx0aXBsZSBoYXJkd2FyZQo+ID4gPiBpc29sYXRpb24gbWVj
aGFuaXNtcyB0byBiZSBjb21wb3NlZCB3aGlsZSBrZWVwaW5nIGNvcmUgZG9tYWluIG1vZGVsCj4g
PiA+IGFuZCBkYXRhIHN0cnVjdHVyZXMgaW5kZXBlbmRlbnQgZnJvbSBhbnkgc2luZ2xlIHBsYXRm
b3JtCj4gPiA+IGltcGxlbWVudGF0aW9uLgo+ID4gPgo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBSYXlt
b25kIE1hbyA8cmF5bW9uZC5tYW9AcmlzY3N0YXIuY29tPgo+ID4KPiA+IFdlIGRvbid0IG5lZWQg
eWV0IGFub3RoZXIgaGFydC1sZXZlbCBhYnN0cmFjdGlvbiBmb3IgdGhpbmdzIGxpa2UKPiA+IFdv
cmxkR3VhcmQsIFN1cGVydmlzb3IgRG9tYWluIElELCBhbmQgUW9TIElEIGNvbmZpZ3VyYXRpb24K
PiA+IGF0IGhhcnQtbGV2ZWwuCj4gPgo+ID4gVGhlIGV4aXN0aW5nIGhhcnQgcHJvdGVjdGlvbiBh
YnN0cmFjdGlvbiBjYW4gYmUgZWFzaWx5IGV4dGVuZGVkCj4gPiB0byBzdXBwb3J0IGJvdGggbWVt
b3J5IHByb3RlY3Rpb24gbWVjaGFuaXNtcyAoUE1QLCBlUE1QLAo+ID4gU21tcHQsIGV0YykgYW5k
IElEIGNvbmZpZ3VyYXRpb25zIChXb3JsZEd1YXJkLCBEb21haW4gSUQsIGV0YykuCj4gPgo+ID4g
PiAtLS0KPiA+ID4gIGluY2x1ZGUvc2JpL3NiaV9kb21haW4uaCB8ICAgNCArCj4gPiA+ICBpbmNs
dWRlL3NiaS9zYmlfaHdpc28uaCAgfCAgNTYgKysrKysrKysrKysrKwo+ID4gPiAgbGliL3NiaS9v
YmplY3RzLm1rICAgICAgIHwgICAxICsKPiA+ID4gIGxpYi9zYmkvc2JpX2h3aXNvLmMgICAgICB8
IDE3NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ID4gIDQgZmls
ZXMgY2hhbmdlZCwgMjM2IGluc2VydGlvbnMoKykKPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBp
bmNsdWRlL3NiaS9zYmlfaHdpc28uaAo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9zYmkv
c2JpX2h3aXNvLmMKPiA+ID4KPiA+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2JpL3NiaV9kb21h
aW4uaCBiL2luY2x1ZGUvc2JpL3NiaV9kb21haW4uaAo+ID4gPiBpbmRleCAwMjc2NTc3Ny4uZmM3
MzMwYTYgMTAwNjQ0Cj4gPiA+IC0tLSBhL2luY2x1ZGUvc2JpL3NiaV9kb21haW4uaAo+ID4gPiAr
KysgYi9pbmNsdWRlL3NiaS9zYmlfZG9tYWluLmgKPiA+ID4gQEAgLTE0LDYgKzE0LDcgQEAKPiA+
ID4gICNpbmNsdWRlIDxzYmkvc2JpX3R5cGVzLmg+Cj4gPiA+ICAjaW5jbHVkZSA8c2JpL3NiaV9o
YXJ0bWFzay5oPgo+ID4gPiAgI2luY2x1ZGUgPHNiaS9zYmlfZG9tYWluX2NvbnRleHQuaD4KPiA+
ID4gKyNpbmNsdWRlIDxzYmkvc2JpX2h3aXNvLmg+Cj4gPiA+ICAjaW5jbHVkZSA8c2JpL3NiaV9y
cHh5Lmg+Cj4gPiA+Cj4gPiA+ICBzdHJ1Y3Qgc2JpX3NjcmF0Y2g7Cj4gPiA+IEBAIC0xOTksNiAr
MjAwLDkgQEAgc3RydWN0IHNiaV9kb21haW4gewo+ID4gPiAgICAgICAgIGJvb2wgc3lzdGVtX3Jl
c2V0X2FsbG93ZWQ7Cj4gPiA+ICAgICAgICAgLyoqIElzIGRvbWFpbiBhbGxvd2VkIHRvIHN1c3Bl
bmQgdGhlIHN5c3RlbSAqLwo+ID4gPiAgICAgICAgIGJvb2wgc3lzdGVtX3N1c3BlbmRfYWxsb3dl
ZDsKPiA+ID4gKyAgICAgICAvKiogSGFyZHdhcmUgaXNvbGF0aW9uIGNvbnRleHRzIGZvciByZWdp
c3RlcmVkIG1lY2hhbmlzbXMgKi8KPiA+ID4gKyAgICAgICBzdHJ1Y3Qgc2JpX2h3aXNvX2RvbWFp
bl9jdHggKmh3aXNvX2N0eHM7Cj4gPiA+ICsgICAgICAgdTMyIGh3aXNvX2N0eF9jb3VudDsKPiA+
Cj4gPiBXZSBhbHJlYWR5IGhhdmUgc2JpX2RvbWFpbl9kYXRhIEFQSXMgdG8gYWxsb3cgYW55IHBh
cnQKPiA+IG9mIE9wZW5TQkkgY3JlYXRlIHBlci1kb21haW4gZGF0YSBzbyB3ZSBzaG91bGQgcmUt
dXNlCj4gPiBBUElzIGZvciBhZGRpbmcgbW9yZSBpbmZvcm1hdGlvbiBwYXJzZWQgZnJvbSBEVCBh
dCBib290LXRpbWUuCj4gPgo+ID4gPiAgICAgICAgIC8qKiBJZGVudGlmaWVzIHdoZXRoZXIgdG8g
aW5jbHVkZSB0aGUgZmlybXdhcmUgcmVnaW9uICovCj4gPiA+ICAgICAgICAgYm9vbCBmd19yZWdp
b25faW5pdGVkOwo+ID4gPiAgfTsKPiA+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2JpL3NiaV9o
d2lzby5oIGIvaW5jbHVkZS9zYmkvc2JpX2h3aXNvLmgKPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2
NDQKPiA+ID4gaW5kZXggMDAwMDAwMDAuLjFlZmRiOGMxCj4gPiA+IC0tLSAvZGV2L251bGwKPiA+
ID4gKysrIGIvaW5jbHVkZS9zYmkvc2JpX2h3aXNvLmgKPiA+ID4gQEAgLTAsMCArMSw1NiBAQAo+
ID4gPiArLyoKPiA+ID4gKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UK
PiA+ID4gKyAqCj4gPiA+ICsgKiBTeXN0ZW0tbGV2ZWwgaGFyZHdhcmUgaXNvbGF0aW9uIGZyYW1l
d29yawo+ID4gPiArICoKPiA+ID4gKyAqIENvcHlyaWdodCAoYykgMjAyNiBSSVNDc3RhciBTb2x1
dGlvbnMgQ29ycG9yYXRpb24uCj4gPiA+ICsgKgo+ID4gPiArICogQXV0aG9yOiBSYXltb25kIE1h
byA8cmF5bW9uZC5tYW9AcmlzY3N0YXIuY29tPgo+ID4gPiArICovCj4gPiA+ICsKPiA+ID4gKyNp
Zm5kZWYgX19TQklfSFdJU09fSF9fCj4gPiA+ICsjZGVmaW5lIF9fU0JJX0hXSVNPX0hfXwo+ID4g
PiArCj4gPiA+ICsjaW5jbHVkZSA8c2JpL3NiaV90eXBlcy5oPgo+ID4gPiArI2luY2x1ZGUgPHNi
aS9zYmlfZG9tYWluLmg+Cj4gPiA+ICsKPiA+ID4gK3N0cnVjdCBzYmlfaHdpc29fb3BzIHsKPiA+
ID4gKyAgICAgICBjb25zdCBjaGFyICpuYW1lOwo+ID4gPiArCj4gPiA+ICsgICAgICAgLyogQm9v
dC10aW1lIGluaXQgKi8KPiA+ID4gKyAgICAgICBpbnQgKCppbml0KSh2b2lkICpmZHQpOwo+ID4g
PiArCj4gPiA+ICsgICAgICAgLyogUGVyLWRvbWFpbiBpbml0IChkb21haW5fb2Zmc2V0IHJlZmVy
cyB0byBkb21haW4gaW5zdGFuY2Ugbm9kZSkgKi8KPiA+ID4gKyAgICAgICBpbnQgKCpkb21haW5f
aW5pdCkodm9pZCAqZmR0LCBpbnQgZG9tYWluX29mZnNldCwKPiA+ID4gKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHNiaV9kb21haW4gKmRvbSwgdm9pZCAqKmN0eCk7Cj4gPiA+ICsK
PiA+ID4gKyAgICAgICAvKiBCZWZvcmUgc3dpdGNoaW5nIGF3YXkgZnJvbSBhIGRvbWFpbiAqLwo+
ID4gPiArICAgICAgIHZvaWQgKCpkb21haW5fZXhpdCkoY29uc3Qgc3RydWN0IHNiaV9kb21haW4g
KnNyYywKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzYmlf
ZG9tYWluICpkc3QsIHZvaWQgKmN0eCk7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAvKiBBZnRlciBz
d2l0Y2hpbmcgaW50byBhIGRvbWFpbiAqLwo+ID4gPiArICAgICAgIHZvaWQgKCpkb21haW5fZW50
ZXIpKGNvbnN0IHN0cnVjdCBzYmlfZG9tYWluICpkc3QsCj4gPiA+ICsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNiaV9kb21haW4gKnNyYywgdm9pZCAqY3R4KTsKPiA+
ID4gKwo+ID4gPiArICAgICAgIC8qIE9wdGlvbmFsIGNsZWFudXAgKi8KPiA+ID4gKyAgICAgICB2
b2lkICgqZG9tYWluX2NsZWFudXApKHN0cnVjdCBzYmlfZG9tYWluICpkb20sIHZvaWQgKmN0eCk7
Cj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ICtzdHJ1Y3Qgc2JpX2h3aXNvX2RvbWFpbl9jdHggewo+
ID4gPiArICAgICAgIGNvbnN0IHN0cnVjdCBzYmlfaHdpc29fb3BzICpvcHM7Cj4gPiA+ICsgICAg
ICAgdm9pZCAqY3R4Owo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiAraW50IHNiaV9od2lzb19yZWdp
c3Rlcihjb25zdCBzdHJ1Y3Qgc2JpX2h3aXNvX29wcyAqb3BzKTsKPiA+ID4gKwo+ID4gPiAraW50
IHNiaV9od2lzb19pbml0KHZvaWQgKmZkdCk7Cj4gPiA+ICtpbnQgc2JpX2h3aXNvX2RvbWFpbl9p
bml0KHZvaWQgKmZkdCwgaW50IGRvbWFpbl9vZmZzZXQsCj4gPiA+ICsgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHNiaV9kb21haW4gKmRvbSk7Cj4gPiA+ICsKPiA+ID4gK3ZvaWQgc2Jp
X2h3aXNvX2RvbWFpbl9leGl0KGNvbnN0IHN0cnVjdCBzYmlfZG9tYWluICpzcmMsCj4gPiA+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzYmlfZG9tYWluICpkc3QpOwo+
ID4gPiArdm9pZCBzYmlfaHdpc29fZG9tYWluX2VudGVyKGNvbnN0IHN0cnVjdCBzYmlfZG9tYWlu
ICpkc3QsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc2Jp
X2RvbWFpbiAqc3JjKTsKPiA+ID4gK3ZvaWQgc2JpX2h3aXNvX2RvbWFpbl9jbGVhbnVwKHN0cnVj
dCBzYmlfZG9tYWluICpkb20pOwo+ID4gPiArCj4gPiA+ICsjZW5kaWYgLyogX19TQklfSFdJU09f
SF9fICovCj4gPiA+IGRpZmYgLS1naXQgYS9saWIvc2JpL29iamVjdHMubWsgYi9saWIvc2JpL29i
amVjdHMubWsKPiA+ID4gaW5kZXggY2EzMTJlZTIuLjYwOTE0OTlhIDEwMDY0NAo+ID4gPiAtLS0g
YS9saWIvc2JpL29iamVjdHMubWsKPiA+ID4gKysrIGIvbGliL3NiaS9vYmplY3RzLm1rCj4gPiA+
IEBAIC03Miw2ICs3Miw3IEBAIGxpYnNiaS1vYmpzLXkgKz0gc2JpX2RvbWFpbi5vCj4gPiA+ICBs
aWJzYmktb2Jqcy15ICs9IHNiaV9lbXVsYXRlX2Nzci5vCj4gPiA+ICBsaWJzYmktb2Jqcy15ICs9
IHNiaV9maWZvLm8KPiA+ID4gIGxpYnNiaS1vYmpzLXkgKz0gc2JpX2hhcnQubwo+ID4gPiArbGli
c2JpLW9ianMteSArPSBzYmlfaHdpc28ubwo+ID4gPiAgbGlic2JpLW9ianMteSArPSBzYmlfaGVh
cC5vCj4gPiA+ICBsaWJzYmktb2Jqcy15ICs9IHNiaV9tYXRoLm8KPiA+ID4gIGxpYnNiaS1vYmpz
LXkgKz0gc2JpX2hmZW5jZS5vCj4gPiA+IGRpZmYgLS1naXQgYS9saWIvc2JpL3NiaV9od2lzby5j
IGIvbGliL3NiaS9zYmlfaHdpc28uYwo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiBp
bmRleCAwMDAwMDAwMC4uNmM5NmRjM2UKPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiArKysgYi9s
aWIvc2JpL3NiaV9od2lzby5jCj4gPiA+IEBAIC0wLDAgKzEsMTc1IEBACj4gPiA+ICsvKgo+ID4g
PiArICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZQo+ID4gPiArICoKPiA+
ID4gKyAqIFN5c3RlbS1sZXZlbCBoYXJkd2FyZSBpc29sYXRpb24gZnJhbWV3b3JrCj4gPiA+ICsg
Kgo+ID4gPiArICogQ29weXJpZ2h0IChjKSAyMDI2IFJJU0NzdGFyIFNvbHV0aW9ucyBDb3Jwb3Jh
dGlvbi4KPiA+ID4gKyAqCj4gPiA+ICsgKiBBdXRob3I6IFJheW1vbmQgTWFvIDxyYXltb25kLm1h
b0ByaXNjc3Rhci5jb20+Cj4gPiA+ICsgKi8KPiA+ID4gKwo+ID4gPiArI2luY2x1ZGUgPGxpYmZk
dC5oPgo+ID4gPiArI2luY2x1ZGUgPHNiaS9zYmlfZXJyb3IuaD4KPiA+ID4gKyNpbmNsdWRlIDxz
Ymkvc2JpX2hlYXAuaD4KPiA+ID4gKyNpbmNsdWRlIDxzYmkvc2JpX2h3aXNvLmg+Cj4gPiA+ICsj
aW5jbHVkZSA8c2JpL3NiaV9saXN0Lmg+Cj4gPiA+ICsKPiA+ID4gK3N0cnVjdCBzYmlfaHdpc29f
bm9kZSB7Cj4gPiA+ICsgICAgICAgY29uc3Qgc3RydWN0IHNiaV9od2lzb19vcHMgKm9wczsKPiA+
ID4gKyAgICAgICBzdHJ1Y3Qgc2JpX2RsaXN0IG5vZGU7Cj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+
ICtzdGF0aWMgU0JJX0xJU1RfSEVBRChod2lzb19vcHNfbGlzdCk7Cj4gPiA+ICtzdGF0aWMgdTMy
IGh3aXNvX29wc19jb3VudDsKPiA+ID4gKwo+ID4gPiArc3RhdGljIGJvb2wgaHdpc29fb3BzX3Jl
Z2lzdGVyZWQoY29uc3Qgc3RydWN0IHNiaV9od2lzb19vcHMgKm9wcykKPiA+ID4gK3sKPiA+ID4g
KyAgICAgICBzdHJ1Y3Qgc2JpX2h3aXNvX25vZGUgKmVudHJ5Owo+ID4gPiArCj4gPiA+ICsgICAg
ICAgc2JpX2xpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZod2lzb19vcHNfbGlzdCwgbm9kZSkg
ewo+ID4gPiArICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5vcHMgPT0gb3BzKQo+ID4gPiArICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPiA+ID4gKyAgICAgICB9Cj4gPiA+ICsK
PiA+ID4gKyAgICAgICByZXR1cm4gZmFsc2U7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK2ludCBz
YmlfaHdpc29fcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHNiaV9od2lzb19vcHMgKm9wcykKPiA+ID4g
K3sKPiA+ID4gKyAgICAgICBzdHJ1Y3Qgc2JpX2h3aXNvX25vZGUgKm5vZGU7Cj4gPiA+ICsKPiA+
ID4gKyAgICAgICBpZiAoIW9wcyB8fCAhb3BzLT5uYW1lKQo+ID4gPiArICAgICAgICAgICAgICAg
cmV0dXJuIFNCSV9FSU5WQUw7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICBpZiAoaHdpc29fb3BzX3Jl
Z2lzdGVyZWQob3BzKSkKPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBTQklfRUFMUkVBRFk7
Cj4gPiA+ICsKPiA+ID4gKyAgICAgICBub2RlID0gc2JpX3phbGxvYyhzaXplb2YoKm5vZGUpKTsK
PiA+ID4gKyAgICAgICBpZiAoIW5vZGUpCj4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gU0JJ
X0VOT01FTTsKPiA+ID4gKwo+ID4gPiArICAgICAgIG5vZGUtPm9wcyA9IG9wczsKPiA+ID4gKyAg
ICAgICBTQklfSU5JVF9MSVNUX0hFQUQoJm5vZGUtPm5vZGUpOwo+ID4gPiArICAgICAgIHNiaV9s
aXN0X2FkZF90YWlsKCZub2RlLT5ub2RlLCAmaHdpc29fb3BzX2xpc3QpOwo+ID4gPiArICAgICAg
IGh3aXNvX29wc19jb3VudCsrOwo+ID4gPiArCj4gPiA+ICsgICAgICAgcmV0dXJuIDA7Cj4gPiA+
ICt9Cj4gPiA+ICsKPiA+ID4gK2ludCBzYmlfaHdpc29faW5pdCh2b2lkICpmZHQpCj4gPiA+ICt7
Cj4gPiA+ICsgICAgICAgc3RydWN0IHNiaV9od2lzb19ub2RlICplbnRyeTsKPiA+ID4gKyAgICAg
ICBpbnQgcmM7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICBzYmlfbGlzdF9mb3JfZWFjaF9lbnRyeShl
bnRyeSwgJmh3aXNvX29wc19saXN0LCBub2RlKSB7Cj4gPiA+ICsgICAgICAgICAgICAgICBpZiAo
IWVudHJ5LT5vcHMtPmluaXQpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
Owo+ID4gPiArCj4gPiA+ICsgICAgICAgICAgICAgICByYyA9IGVudHJ5LT5vcHMtPmluaXQoZmR0
KTsKPiA+ID4gKyAgICAgICAgICAgICAgIGlmIChyYykKPiA+ID4gKyAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJjOwo+ID4gPiArICAgICAgIH0KPiA+ID4gKwo+ID4gPiArICAgICAgIHJl
dHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtpbnQgc2JpX2h3aXNvX2RvbWFpbl9pbml0
KHZvaWQgKmZkdCwgaW50IGRvbWFpbl9vZmZzZXQsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHNiaV9kb21haW4gKmRvbSkKPiA+ID4gK3sKPiA+ID4gKyAgICAgICBzdHJ1
Y3Qgc2JpX2h3aXNvX25vZGUgKmVudHJ5Owo+ID4gPiArICAgICAgIHN0cnVjdCBzYmlfaHdpc29f
ZG9tYWluX2N0eCAqY3R4czsKPiA+ID4gKyAgICAgICB2b2lkICpjdHg7Cj4gPiA+ICsgICAgICAg
dTMyIGlkeCA9IDA7Cj4gPiA+ICsgICAgICAgaW50IHJjOwo+ID4gPiArCj4gPiA+ICsgICAgICAg
aWYgKCFkb20pCj4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPiA+ID4gKwo+ID4gPiAr
ICAgICAgIGlmICghaHdpc29fb3BzX2NvdW50KQo+ID4gPiArICAgICAgICAgICAgICAgcmV0dXJu
IDA7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICBjdHhzID0gc2JpX2NhbGxvYyhzaXplb2YoKmN0eHMp
LCBod2lzb19vcHNfY291bnQpOwo+ID4gPiArICAgICAgIGlmICghY3R4cykKPiA+ID4gKyAgICAg
ICAgICAgICAgIHJldHVybiBTQklfRU5PTUVNOwo+ID4gPiArCj4gPiA+ICsgICAgICAgZG9tLT5o
d2lzb19jdHhzID0gY3R4czsKPiA+ID4gKyAgICAgICBkb20tPmh3aXNvX2N0eF9jb3VudCA9IGh3
aXNvX29wc19jb3VudDsKPiA+ID4gKwo+ID4gPiArICAgICAgIHNiaV9saXN0X2Zvcl9lYWNoX2Vu
dHJ5KGVudHJ5LCAmaHdpc29fb3BzX2xpc3QsIG5vZGUpIHsKPiA+ID4gKyAgICAgICAgICAgICAg
IGN0eHNbaWR4XS5vcHMgPSBlbnRyeS0+b3BzOwo+ID4gPiArICAgICAgICAgICAgICAgY3R4c1tp
ZHhdLmN0eCA9IE5VTEw7Cj4gPiA+ICsgICAgICAgICAgICAgICBjdHggPSBOVUxMOwo+ID4gPiAr
Cj4gPiA+ICsgICAgICAgICAgICAgICBpZiAoZW50cnktPm9wcy0+ZG9tYWluX2luaXQpIHsKPiA+
ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBlbnRyeS0+b3BzLT5kb21haW5faW5pdChm
ZHQsIGRvbWFpbl9vZmZzZXQsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG9tLCAmY3R4KTsKPiA+ID4gKyAgICAgICAgICAgICAgICAg
ICAgICAgY3R4c1tpZHhdLmN0eCA9IGN0eDsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHJjKSB7Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2JpX2h3aXNv
X2RvbWFpbl9jbGVhbnVwKGRvbSk7Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJjOwo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICB9Cj4gPiA+ICsgICAg
ICAgICAgICAgICB9Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAgICAgICAgIGN0eHNbaWR4XS5jdHgg
PSBjdHg7Cj4gPiA+ICsgICAgICAgICAgICAgICBpZHgrKzsKPiA+ID4gKyAgICAgICB9Cj4gPiA+
ICsKPiA+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArdm9pZCBz
YmlfaHdpc29fZG9tYWluX2V4aXQoY29uc3Qgc3RydWN0IHNiaV9kb21haW4gKnNyYywKPiA+ID4g
KyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNiaV9kb21haW4gKmRzdCkK
PiA+ID4gK3sKPiA+ID4gKyAgICAgICB1MzIgaTsKPiA+ID4gKwo+ID4gPiArICAgICAgIGlmICgh
c3JjIHx8ICFzcmMtPmh3aXNvX2N0eHMpCj4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm47Cj4g
PiA+ICsKPiA+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3JjLT5od2lzb19jdHhfY291bnQ7
IGkrKykgewo+ID4gPiArICAgICAgICAgICAgICAgaWYgKCFzcmMtPmh3aXNvX2N0eHNbaV0ub3Bz
IHx8Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgIXNyYy0+aHdpc29fY3R4c1tpXS5vcHMtPmRv
bWFpbl9leGl0KQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ID4g
Kwo+ID4gPiArICAgICAgICAgICAgICAgc3JjLT5od2lzb19jdHhzW2ldLm9wcy0+ZG9tYWluX2V4
aXQoCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRz
dCwgc3JjLT5od2lzb19jdHhzW2ldLmN0eCk7Cj4gPiA+ICsgICAgICAgfQo+ID4gPiArfQo+ID4g
PiArCj4gPiA+ICt2b2lkIHNiaV9od2lzb19kb21haW5fZW50ZXIoY29uc3Qgc3RydWN0IHNiaV9k
b21haW4gKmRzdCwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVj
dCBzYmlfZG9tYWluICpzcmMpCj4gPiA+ICt7Cj4gPiA+ICsgICAgICAgdTMyIGk7Cj4gPiA+ICsK
PiA+ID4gKyAgICAgICBpZiAoIWRzdCB8fCAhZHN0LT5od2lzb19jdHhzKQo+ID4gPiArICAgICAg
ICAgICAgICAgcmV0dXJuOwo+ID4gPiArCj4gPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IGRz
dC0+aHdpc29fY3R4X2NvdW50OyBpKyspIHsKPiA+ID4gKyAgICAgICAgICAgICAgIGlmICghZHN0
LT5od2lzb19jdHhzW2ldLm9wcyB8fAo+ID4gPiArICAgICAgICAgICAgICAgICAgICFkc3QtPmh3
aXNvX2N0eHNbaV0ub3BzLT5kb21haW5fZW50ZXIpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwo+ID4gPiArCj4gPiA+ICsgICAgICAgICAgICAgICBkc3QtPmh3aXNvX2N0
eHNbaV0ub3BzLT5kb21haW5fZW50ZXIoCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkc3QsIHNyYywgZHN0LT5od2lzb19jdHhzW2ldLmN0eCk7Cj4gPiA+ICsg
ICAgICAgfQo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICt2b2lkIHNiaV9od2lzb19kb21haW5fY2xl
YW51cChzdHJ1Y3Qgc2JpX2RvbWFpbiAqZG9tKQo+ID4gPiArewo+ID4gPiArICAgICAgIHUzMiBp
Owo+ID4gPiArCj4gPiA+ICsgICAgICAgaWYgKCFkb20gfHwgIWRvbS0+aHdpc29fY3R4cykKPiA+
ID4gKyAgICAgICAgICAgICAgIHJldHVybjsKPiA+ID4gKwo+ID4gPiArICAgICAgIGZvciAoaSA9
IDA7IGkgPCBkb20tPmh3aXNvX2N0eF9jb3VudDsgaSsrKSB7Cj4gPiA+ICsgICAgICAgICAgICAg
ICBpZiAoIWRvbS0+aHdpc29fY3R4c1tpXS5vcHMgfHwKPiA+ID4gKyAgICAgICAgICAgICAgICAg
ICAhZG9tLT5od2lzb19jdHhzW2ldLm9wcy0+ZG9tYWluX2NsZWFudXApCj4gPiA+ICsgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gPiArCj4gPiA+ICsgICAgICAgICAgICAgICBk
b20tPmh3aXNvX2N0eHNbaV0ub3BzLT5kb21haW5fY2xlYW51cCgKPiA+ID4gKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbSwgZG9tLT5od2lzb19jdHhzW2ldLmN0eCk7
Cj4gPiA+ICsgICAgICAgfQo+ID4gPiArCj4gPiA+ICsgICAgICAgc2JpX2ZyZWUoZG9tLT5od2lz
b19jdHhzKTsKPiA+ID4gKyAgICAgICBkb20tPmh3aXNvX2N0eHMgPSBOVUxMOwo+ID4gPiArICAg
ICAgIGRvbS0+aHdpc29fY3R4X2NvdW50ID0gMDsKPiA+ID4gK30KPiA+ID4gLS0KPiA+ID4gMi4y
NS4xCj4gPiA+Cj4gPgo+ID4gTGV0IG1lIHNlbmQgYSBzZXBhcmF0ZSBzZXJpZXMgc2hvd2luZyBo
b3cgdG8gZXh0ZW5kCj4gPiBzYmlfaGFydF9pc29sYXRpb24gYXMgc3VnZ2VzdGVkIGFib3ZlLgo+
ID4KPgo+IEkganVzdCBwb3N0ZWQgdGhlIHNlcmllcyB0byBleHRlbmQgdGhlIGV4aXN0aW5nIGhh
cnQgcHJvdGVjdGlvbgo+IGFic3RyYWN0aW9uLgo+Cj4gUmVmZXIsIHBhdGNoIHNlcmllcyAiW1BB
VENIIDAvNV0gRXh0ZW5kIGhhcnQgcHJvdGVjdGlvbiBhYnN0cmFjdGlvbgo+IGZvciBJRCBjb25m
aWd1cmF0aW9uIgo+CgpJIGhhdmUgcG9zdGVkIGEgdjIgc2VyaWVzICJbUEFUQ0ggdjIgMC80XSBB
ZGQgV29ybGRHdWFyZCBzdXBwb3J0IHdpdGgKd2djaGVja2VyMiIgWzFdIGJhc2VkIG9uIHlvdXIg
c2VyaWVzLgpBbGwgaW1wbGVtZW50YXRpb25zIG9mIFdHIGFyZSBvbiB0b3Agb2Ygc2JpX2hhcnRf
cHJvdGVjdGlvbiBhbmQgc2JpX2RvbWFpbl9kYXRhLgpQbGVhc2Uga2luZGx5IHByb3ZpZGUgeW91
ciBmZWVkYmFjay4KClsxXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9vcGVuc2JpLzIwMjYwNzI1
MDIzODIxLjM3OTU2MTgtMS1yYXltb25kbWFvY2FAZ21haWwuY29tLwoKVGhhbmtzIGFuZCByZWdh
cmRzLApSYXltb25kCgoKPiBSZWdhcmRzLAo+IEFudXAKCi0tIApvcGVuc2JpIG1haWxpbmcgbGlz
dApvcGVuc2JpQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv
bWFpbG1hbi9saXN0aW5mby9vcGVuc2JpCg==