Re: [RFC PATCH v3 08/19] target/arm/kvm: Handle writeback for special ID register fields

Khushit Shah <[email protected]> Mon, 3 Aug 2026 16:03:17 +0000
Newsgroups org.nongnu.qemu-arm,dev.linux.lists.kvmarm,org.nongnu.qemu-devel
Message-ID <[email protected]>
DQoNCj4gT24gMjIgSnVsIDIwMjYsIGF0IDU6MzXigK9QTSwgRXJpYyBBdWdlciA8ZXJpYy5hdWdl
ckByZWRoYXQuY29tPiB3cm90ZToNCj4gDQo+ICEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KPiAgQ0FVVElPTjogRXh0
ZXJuYWwgRW1haWwNCj4gDQo+IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIQ0KPiANCj4gSGkgS2h1c2hpdCwNCj4gT24g
Ny8xNi8yNiAxMTozOCBQTSwgS2h1c2hpdCBTaGFoIHdyb3RlOg0KPj4gU29tZSBmaWVsZHMgc2hv
dWxkIG5vdCBiZSB3cml0dGVuIGJhY2sgdG8gS1ZNIGZvciB2YXJpb3VzIHJlYXNvbnM6DQo+PiAt
IElEX0FBNjRQRlIwX0VMMS5HSUMgLyBJRF9QRlIxX0VMMS5HSUMgYXJlIGZhYnJpY2F0ZWQgYnkg
S1ZNIGJhc2VkIG9uDQo+PiAgIHRoZSBnaWMtdmVyc2lvbiBwcm9wZXJ0eS4NCj4gc28gdGhpcyBp
cyBwYXJ0IG9mIHRoZSBvdmVyYWxsIGhhbmRsaW5nIG9mIGxlZ2FjeSBjb21wb3NpdGUgb3B0aW9u
cw0KPiB2ZXJzdXMgc3lzcmVnIHNldHRpbmdzLiBUbyBiZSB0aGUgZmFjdCB0aGV5IGJvdGggYXJl
IGNvbnNpc3RlbnQgc2hvdWxkDQo+IGJlIGVuZm9yY2VkIHVwZnJvbnQuDQoNCkkgaGF2ZSBvbmUg
aWRlYSBvbiBob3cgdG8gaGFuZGxlIHRoaXM6DQotIEFmdGVyIHdlIGZpbmFsaXNlIGNwdSBmZWF0
dXJlcywgd2UgcmVjaGVjayBlYWNoIGNvbW1hbmQgbGluZSBwcm9wDQogICAgICAgICAgcGFzc2Vk
LiBUaGUgZmluYWwgaWRyZWdzW13igJlzIHByb3AgdmFsdWUgc2hvdWxkIGJlIHNhbWUgYXMgdGhl
IHVzZXINCiAgICAgICAgICBwcm92aWRlZCBvbmUgZnJvbSB0aGUgY21kbGluZS4NCiAgICBGb3Ig
ZS5nLiwgaW52YWxpZCBjb25maWd1cmF0aW9ucyBsaWtlOg0KICAgICAgICAtY3B1IGhvc3Qsc3Zl
PW9uLFNZU1JFR19JRF9BQTY0UEZSMF9FTDFfU1ZFPTANCiAgICBPcg0KICAgICAgICAtY3B1IGhv
c3QscGF1dGg9b2ZmLFNZU1JFR19JRF9BQTY0SVNBUjFfRUwxX0FQQT0yDQoNCiAgICB3aWxsIGJl
IGNhdWdodCBhZnRlciBmaW5hbGlzZSBhcyBib3RoIG9mIHRob3NlIGNhbm5vdCBiZSB0cnVlIGF0
DQogICAgdGhlIHNhbWUgdGltZS4NCg0KSWYgdGhpcyBtYWtlcyBzZW5zZSwgSSBjYW4gaW1wbGVt
ZW50IGl0IGZvciB2NC4NCg0KPj4gLSBLVk0gZG9lcyBub3QgYWxsb3cgd3JpdGluZyAwIHRvIElE
X0RGUjBfRUwxLkNvcERiZywgd2hpY2ggYnJlYWtzDQo+PiAgIGJvb3RpbmcgYW4gQUFyY2g2NC1v
bmx5IGd1ZXN0IG9uIGEgaG9zdCB0aGF0IGFsc28gc3VwcG9ydHMgQUFyY2gzMi4NCj4+IC0gSURf
REZSMF9FTDEuUGVyZk1vbiBpcyBwb3B1bGF0ZWQgYnkgS1ZNIGV2ZW4gZm9yIEFBcmNoNjQtb25s
eSBndWVzdHMNCj4+ICAgYnV0IGlzIG5vdCB3cml0YWJsZSB0aGVyZS4NCj4+IC0gTVBJRFJfRUwx
IGlzIG1hbmFnZWQgYnkgS1ZNIGJhc2VkIG9uIHZDUFUgaW5kZXguDQo+PiAtIEhvbGQgb2ZmIHdy
aXRpbmcgYmFjayBDTElEUl9FTDEgdW50aWwgd2UgcHJvcGVybHkgc3VwcG9ydCBleHBvc2luZw0K
Pj4gICBjYWNoZSB0b3BvbG9neSB0byBhIEtWTSBndWVzdC4NCj4gU291bmRzIHRoaXMgZGVzZXJ2
ZXMgYSBwcmVyZXF1aXNpdGUgZml4LiBJIGFsc28gaGF2ZSB0aGlzIGhhY2sgaW4gbXkNCj4gc2Vy
aWVzIGJ1dCB0aGlzIHNob3VsZCBiZSBkZWFsdCB3aXRoIHNlcGFyYXRlbHkgSSB0aGluay4NCj4+
IA0KPj4gU29tZSByZWdpc3RlcnMgc3VjaCBhcyBEQ1pJRF9FTDAgYXJlIG5vdCBleHBvc2VkIHRo
cm91Z2ggdGhlIEtWTSBjcHJlZw0KPj4gbGlzdCBhdCBhbGwsIGJ1dCBndWVzdCBzdGlsbCBzZWVz
IHRoZSBob3N0IHZhbHVlLCB3ZSB2ZXJpZnkgdGhhdCB2Q1BVJ3MNCj4+IElEIHJlZ3MgdmFsdWVz
IG1hdGNoIHRoZSBob3N0IHZhbHVlLg0KPiB3aHkgaXNuJ3QgaXQgY3ByZWcgdGhlbj8gU2hvdWxk
bid0IHdlIGFkZCBpdCBpbnN0ZWFkPw0KDQppZGsgd2h5IEtWTSBkb2VzIG5vdCBleHBvc2UgRENa
SURfRUwwLg0KDQo+PiANCj4+IFRvIGRvIHRoaXMsIHJlZmFjdG9yIGt2bV9hcm1fd3JpdGFibGVf
aWRyZWdzX3RvX2NwcmVnX2xpc3QgdG8NCj4+IGt2bV9hcm1fd3JpdGVfaWRyZWdzX3RvX2NwcmVn
c19saXN0LCB3aGljaCBvcGVyYXRlcyBwZXIgZmllbGQgYW5kIG5vdw0KPj4gcmV0dXJucyBhbiBl
cnJvciBpZiBhIG5vbi13cml0YWJsZSBmaWVsZCBtaXNtYXRjaGVzIHdpdGggdGhlIGhvc3QgdmFs
dWUuDQo+PiANCj4+IFNpZ25lZC1vZmYtYnk6IEtodXNoaXQgU2hhaCA8a2h1c2hpdC5zaGFoQG51
dGFuaXguY29tPg0KPj4gLS0tDQo+PiB0YXJnZXQvYXJtL2NwdS1pZHJlZ3MuYyB8ICAxOSArKysr
KysrDQo+PiB0YXJnZXQvYXJtL2NwdS1pZHJlZ3MuaCB8ICAgNCArKw0KPj4gdGFyZ2V0L2FybS9r
dm0uYyAgICAgICAgfCAxMTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0t
LQ0KPj4gdGFyZ2V0L2FybS90cmFjZS1ldmVudHMgfCAgIDIgKy0NCj4+IDQgZmlsZXMgY2hhbmdl
ZCwgMTI1IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQ0KPj4gDQo+PiBkaWZmIC0tZ2l0
IGEvdGFyZ2V0L2FybS9jcHUtaWRyZWdzLmMgYi90YXJnZXQvYXJtL2NwdS1pZHJlZ3MuYw0KPj4g
aW5kZXggYzQxZDBhYjBjNC4uNmZhMDJhZjBmMyAxMDA2NDQNCj4+IC0tLSBhL3RhcmdldC9hcm0v
Y3B1LWlkcmVncy5jDQo+PiArKysgYi90YXJnZXQvYXJtL2NwdS1pZHJlZ3MuYw0KPj4gQEAgLTcs
NiArNyw3IEBADQo+PiAgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0
ZXINCj4+ICAqLw0KPj4gI2luY2x1ZGUgInFlbXUvb3NkZXAuaCINCj4+ICsjaW5jbHVkZSAicWVt
dS9iaXRvcHMuaCINCj4+ICNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5oIg0KPj4gI2luY2x1
ZGUgInFhcGkvZXJyb3IuaCINCj4+ICNpbmNsdWRlICJjcHUuaCINCj4+IEBAIC05NCwzICs5NSwy
MSBAQCBBUk02NFN5c1JlZyBhcm02NF9pZF9yZWdzW05VTV9JRF9JRFhdID0gew0KPj4gI2luY2x1
ZGUgImNwdS1pZHJlZ3MuaC5pbmMiDQo+PiB9Ow0KPj4gDQo+PiArdWludDY0X3QgYXJtX2dldF9m
aWVsZF9tYXNrKGNvbnN0IEFSTTY0U3lzUmVnRmllbGQgKmZpZWxkKQ0KPj4gK3sNCj4+ICsgICAg
cmV0dXJuIE1BS0VfNjRCSVRfTUFTSyhmaWVsZC0+c2hpZnQsIGZpZWxkLT5sZW5ndGgpOw0KPj4g
K30NCj4+ICsNCj4+ICtib29sIGFybV9maWVsZF9pc193cml0YWJsZShjb25zdCBBUk02NFN5c1Jl
Z0ZpZWxkICpmaWVsZCkNCj4+ICt7DQo+PiArICAgIHVpbnQ2NF90IGZpZWxkX21hc2sgPSBhcm1f
Z2V0X2ZpZWxkX21hc2soZmllbGQpOw0KPj4gKw0KPj4gKyAgICByZXR1cm4gKGFybTY0X2lkX3Jl
Z3NbZmllbGQtPmluZGV4XS53cml0YWJsZV9tYXNrICYgZmllbGRfbWFzaykNCj4+ICsgICAgICAg
ICAgID09IGZpZWxkX21hc2s7DQo+PiArfQ0KPj4gKw0KPj4gK2Jvb2wgZmllbGRfbWF0Y2hlcyhj
b25zdCBBUk02NFN5c1JlZ0ZpZWxkICpmaWVsZCwgQVJNSURSZWdpc3RlcklkeCBpbmRleCwNCj4+
ICsgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSkNCj4+ICt7DQo+PiArICAgIHJl
dHVybiBmaWVsZC0+aW5kZXggPT0gaW5kZXggJiYgIXN0cmNtcChmaWVsZC0+bmFtZSwgbmFtZSk7
DQo+IHdoeSBkbyB5b3UgbmVlZCB0byBjaGVjayBib3RoIGluZGV4IGFuZCBuYW1lLiBPbmx5IGNo
ZWNraW5nIGluZGV4IHNob3VsZA0KPiBiZSBzdWZmaWNpZW50Lg0KSW5kZXggZ2l2ZXMgcmVnaXN0
ZXIsIG5hbWUgaXMgZmllbGQgbmFtZS4NCg0KPj4gK30NCj4+IGRpZmYgLS1naXQgYS90YXJnZXQv
YXJtL2NwdS1pZHJlZ3MuaCBiL3RhcmdldC9hcm0vY3B1LWlkcmVncy5oDQo+PiBpbmRleCAyNDVm
MWM4MTAzLi5kODY2YmQ5ZTBhIDEwMDY0NA0KPj4gLS0tIGEvdGFyZ2V0L2FybS9jcHUtaWRyZWdz
LmgNCj4+ICsrKyBiL3RhcmdldC9hcm0vY3B1LWlkcmVncy5oDQo+PiBAQCAtMzgsNCArMzgsOCBA
QCB0eXBlZGVmIHN0cnVjdCBBUk02NFN5c1JlZyB7DQo+PiAgKi8NCj4+IGV4dGVybiBBUk02NFN5
c1JlZyBhcm02NF9pZF9yZWdzW05VTV9JRF9JRFhdOw0KPj4gDQo+PiArdWludDY0X3QgYXJtX2dl
dF9maWVsZF9tYXNrKGNvbnN0IEFSTTY0U3lzUmVnRmllbGQgKmZpZWxkKTsNCj4+ICtib29sIGFy
bV9maWVsZF9pc193cml0YWJsZShjb25zdCBBUk02NFN5c1JlZ0ZpZWxkICpmaWVsZCk7DQo+PiAr
Ym9vbCBmaWVsZF9tYXRjaGVzKGNvbnN0IEFSTTY0U3lzUmVnRmllbGQgKmZpZWxkLCBBUk1JRFJl
Z2lzdGVySWR4IGluZGV4LA0KPj4gKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1l
KTsNCj4+ICNlbmRpZg0KPj4gZGlmZiAtLWdpdCBhL3RhcmdldC9hcm0va3ZtLmMgYi90YXJnZXQv
YXJtL2t2bS5jDQo+PiBpbmRleCA2OTc0ZTVjNTUxLi5jMzhiOTljZmNlIDEwMDY0NA0KPj4gLS0t
IGEvdGFyZ2V0L2FybS9rdm0uYw0KPj4gKysrIGIvdGFyZ2V0L2FybS9rdm0uYw0KPj4gQEAgLTk1
MSw2ICs5NTEsMTYgQEAgc3RhdGljIHVpbnQ2NF90ICprdm1fYXJtX2dldF9jcHJlZ19wdHIoQVJN
Q1BVICpjcHUsIHVpbnQ2NF90IHJlZ2lkeCkNCj4+ICAgICByZXR1cm4gJmNwdS0+Y3ByZWdfdmFs
dWVzW3JlcyAtIGNwdS0+Y3ByZWdfaW5kZXhlc107DQo+PiB9DQo+PiANCj4+ICsvKiBMaWtlIGt2
bV9hcm1fZ2V0X2NwcmVnX3B0ciwgYnV0IHJldHVybnMgTlVMTCBpZiB0aGUgcmVnaXN0ZXIgaXMg
bm90IGZvdW5kLiAqLw0KPj4gK3N0YXRpYyB1aW50NjRfdCAqa3ZtX2FybV9maW5kX2NwcmVnX3B0
cihBUk1DUFUgKmNwdSwgdWludDY0X3QgcmVnaWR4KQ0KPj4gK3sNCj4+ICsgICAgdWludDY0X3Qg
KnJlczsNCj4+ICsgICAgcmVzID0gYnNlYXJjaCgmcmVnaWR4LCBjcHUtPmNwcmVnX2luZGV4ZXMs
IGNwdS0+Y3ByZWdfYXJyYXlfbGVuLA0KPj4gKyAgICAgICAgICAgICAgICAgIHNpemVvZih1aW50
NjRfdCksIGNvbXBhcmVfdTY0KTsNCj4+ICsNCj4+ICsgICAgcmV0dXJuIHJlcyA/ICZjcHUtPmNw
cmVnX3ZhbHVlc1tyZXMgLSBjcHUtPmNwcmVnX2luZGV4ZXNdIDogTlVMTDsNCj4+ICt9DQo+PiAr
DQo+PiAvKioNCj4+ICAqIGt2bV9hcm1fcmVnX3N5bmNzX3ZpYV9jcHJlZ19saXN0Og0KPj4gICog
QHJlZ2lkeDogS1ZNIHJlZ2lzdGVyIGluZGV4DQo+PiBAQCAtMTI1MiwzMiArMTI2MiwxMDUgQEAg
Ym9vbCBrdm1fYXJtX2NwdV9wb3N0X2xvYWQoQVJNQ1BVICpjcHUpDQo+PiAgICAgcmV0dXJuIHRy
dWU7DQo+PiB9DQo+PiANCj4+ICtzdGF0aWMgYm9vbCBhcm1fZmllbGRfc2tpcF93cml0ZWJhY2tf
YWx3YXlzKGNvbnN0IEFSTTY0U3lzUmVnRmllbGQgKmZpZWxkKQ0KPj4gK3sNCj4+ICsgICAgLyoN
Cj4+ICsgICAgICogR0lDIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGdpYy12ZXJzaW9uIHByb3BlcnR5
IGFuZCBmYWJyaWNhdGVkIGJ5IEtWTQ0KPj4gKyAgICAgKiB3aGVuIHRoZSB2R0lDIGRldmljZSBp
cyBjcmVhdGVkLCBzbyBhIG5hbWVkIENQVSBtb2RlbCBtdXN0IG5vdCB0b3VjaA0KPj4gKyAgICAg
KiBpdC4gS1ZNIGFsc28gcmVqZWN0cyB3cml0aW5nIDAgdG8gSURfREZSMF9FTDEuQ29wRGJnLCB3
aGljaCBicmVha3MNCj4+ICsgICAgICogYm9vdGluZyBhIG1vZGVsIHRoYXQgbGFja3MgQUFyY2gz
MiBzdXBwb3J0IG9uIGEgaG9zdCB0aGF0IHN1cHBvcnRzDQo+PiArICAgICAqIGl0LiBNUElEUl9F
TDEgaXMgbWFuYWdlZCBieSBLVk0gYmFzZWQgb24gbnVtYmVyIG9mIHZDUFVzLCBza2lwDQo+PiAr
ICAgICAqIHdyaXRpbmcgaXQgYmFjay4gU2ltaWxhcmx5LCBza2lwIHdyaXRpbmcgYmFjayBDTElE
Ul9FTDEgdGlsbCB3ZQ0KPj4gKyAgICAgKiBwcm9wZXJseSBzdXBwb3J0IGV4cG9zaW5nIGNhY2hl
IGZvciBLVk0gZ3Vlc3QuDQo+PiArICAgICAqLw0KPj4gKyAgICByZXR1cm4gZmllbGRfbWF0Y2hl
cyhmaWVsZCwgSURfQUE2NFBGUjBfRUwxX0lEWCwgIkdJQyIpDQo+PiArICAgICAgICB8fCBmaWVs
ZF9tYXRjaGVzKGZpZWxkLCBJRF9QRlIxX0VMMV9JRFgsICJHSUMiKQ0KPj4gKyAgICAgICAgfHwg
ZmllbGRfbWF0Y2hlcyhmaWVsZCwgSURfREZSMF9FTDFfSURYLCAiQ29wRGJnIikNCj4+ICsgICAg
ICAgIHx8IGZpZWxkLT5pbmRleCA9PSBNUElEUl9FTDFfSURYDQo+PiArICAgICAgICB8fCBmaWVs
ZC0+aW5kZXggPT0gQ0xJRFJfRUwxX0lEWDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGJvb2wg
YXJtX2ZpZWxkX3NraXBfd3JpdGViYWNrX2lmX25vdF93cml0YWJsZShjb25zdCBBUk02NFN5c1Jl
Z0ZpZWxkICpmaWVsZCkNCj4+ICt7DQo+PiArICAgIC8qDQo+PiArICAgICAqIEtWTSBwb3B1bGF0
ZXMgSURfREZSMF9FTDEuUGVyZk1vbiBldmVuIGZvciBBQXJjaDY0LW9ubHkgZ3Vlc3RzIGJ1dA0K
Pj4gKyAgICAgKiBkb2VzIG5vdCBleHBvc2UgaXQgYXMgd3JpdGFibGUgdGhlcmUsIHNvIHNraXAg
aXQgd2hlbiBpdCBpcyBub3QNCj4+ICsgICAgICogd3JpdGFibGUuDQo+PiArICAgICAqLw0KPj4g
KyAgICByZXR1cm4gZmllbGRfbWF0Y2hlcyhmaWVsZCwgSURfREZSMF9FTDFfSURYLCAiUGVyZk1v
biIpOw0KPj4gK30NCj4+ICsNCj4+IC8qDQo+PiAtICogQ29weSB3cml0YWJsZSBJRCByZWdzIGZy
b20gaXNhci5pZHJlZ3NbXSB0byBjcHJlZ19saXN0DQo+PiAtICogaW4gY2FzZSB0aGVpciB2YWx1
ZSBkaWZmZXJzIGZyb20gdGhlIG9yaWdpbmFsIGluaXQgY3ByZWcgdmFsdWUNCj4+ICsgKiBDb3B5
IHdyaXRhYmxlIElEIHJlZyBmaWVsZHMgZnJvbSBpc2FyLmlkcmVnc1tdIGludG8gdGhlIEtWTSBj
cHJlZyBsaXN0LA0KPj4gKyAqIHNvIHRoZSBzdWJzZXF1ZW50IHdyaXRlX2xpc3RfdG9fa3Ztc3Rh
dGUoKSBwdXNoZXMgdGhlbSB0byBLVk0uDQo+PiArICogT25seSB3cml0YWJsZSBmaWVsZHMgYXJl
IGNvcGllZDsgZmllbGRzIHRoYXQgbXVzdCBub3QgYmUgd3JpdHRlbiBiYWNrDQo+PiArICogKHNl
ZSBhcm1fZmllbGRfc2tpcF93cml0ZWJhY2tfKikgYXJlIHNraXBwZWQuDQo+PiArICogUmV0dXJu
cyAtMSBpZiBhbnkgdkNQVSdzIElEIHJlZyB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIGhvc3QgdmFs
dWUgYW5kIHRoZQ0KPj4gKyAqIGZpZWxkIGlzIG5vdCB3cml0YWJsZS4NCj4+ICAqLw0KPj4gLXN0
YXRpYyB2b2lkIGt2bV9hcm1fd3JpdGFibGVfaWRyZWdzX3RvX2NwcmVnX2xpc3QoQVJNQ1BVICpj
cHUpDQo+PiArc3RhdGljIGludCBrdm1fYXJtX3dyaXRlX2lkcmVnc190b19jcHJlZ19saXN0KEFS
TUNQVSAqY3B1KQ0KPj4gew0KPj4gICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX0lEX0lEWDsg
aSsrKSB7DQo+PiAgICAgICAgIEFSTTY0U3lzUmVnICpzeXNyZWdkZXNjID0gJmFybTY0X2lkX3Jl
Z3NbaV07DQo+PiAgICAgICAgIEFSTVN5c1JlZ3Mgc3lzcmVnID0gaWRfcmVnaXN0ZXJfc3lzcmVn
W2ldOw0KPj4gLSAgICAgICAgdWludDY0X3QgcHJldmlvdXMsIG5ldzsNCj4+ICsgICAgICAgIHVp
bnQ2NF90IHdyaXRhYmxlX21hc2sgPSBzeXNyZWdkZXNjLT53cml0YWJsZV9tYXNrOw0KPj4gKyAg
ICAgICAgdWludDY0X3QgZGVzaXJlZCA9IGNwdS0+aXNhci5pZHJlZ3NbaV07DQo+PiArICAgICAg
ICB1aW50NjRfdCBwcmV2aW91cywgdXBkYXRlZDsNCj4+ICAgICAgICAgdWludDY0X3QgKmNwcmVn
Ow0KPj4gDQo+PiAtICAgICAgICBpZiAoIXN5c3JlZ2Rlc2MtPndyaXRhYmxlX21hc2spIHsNCj4+
ICsgICAgICAgIGNwcmVnID0ga3ZtX2FybV9maW5kX2NwcmVnX3B0cihjcHUsIGlkcmVnc19zeXNy
ZWdfdG9fa3ZtX3JlZyhzeXNyZWcpKTsNCj4+ICsgICAgICAgIC8qDQo+PiArICAgICAgICAgKiBS
ZWdpc3RlcnMgc3VjaCBhcyBEQ1pJRF9FTDAgYXJlIG5vdCBleHBvc2VkIHRocm91Z2ggdGhlIGNw
cmVnDQo+PiArICAgICAgICAgKiBsaXN0IGFuZCBhcmUgdGhlcmVmb3JlIG5vdCB3cml0YWJsZS4g
VXNlIHRoZSBob3N0IHZhbHVlDQo+PiArICAgICAgICAgKiBzbmFwc2hvdHRlZCBhdCBwcm9iZSB0
aW1lIGFzIHRoZSByZWZlcmVuY2UgdG8gY2hlY2sgdGhlIHZDUFUgSUQNCj4+ICsgICAgICAgICAq
IHJlZ3MgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4NCj4+ICsgICAgICAgICAqLw0KPj4gKyAgICAgICAg
cHJldmlvdXMgPSBjcHJlZyA/ICpjcHJlZyA6IGFybV9ob3N0X2NwdV9mZWF0dXJlcy5pc2FyLmlk
cmVnc1tpXTsNCj4+ICsNCj4+ICsgICAgICAgIGlmIChwcmV2aW91cyA9PSBkZXNpcmVkKSB7DQo+
PiAgICAgICAgICAgICBjb250aW51ZTsNCj4+ICAgICAgICAgfQ0KPiB3aGlsZSBhdCBpdCB5b3Ug
Y291bGQgYWxzbyB0ZXN0IGFsbCByZXNlcnZlZCBmaWVsZHMgaGVyZSwgUkFaLCBSRVMwLzENCj4g
YW5kIG1ha2Ugc3VyZSBob3N0IHZhbHVlIGNvbXBsaWVzIHdpdGggdGhlIGRlc2NyaXB0aW9uLg0K
DQpOb3RlZCwgd2lsbCBhZGQgaXQgaW4gdjQNCg0KV2FybSBSZWdhcmRzLA0KS2h1c2hpdA0KPj4g
DQo+PiAtICAgICAgICBjcHJlZyA9IGt2bV9hcm1fZ2V0X2NwcmVnX3B0cihjcHUsIGlkcmVnc19z
eXNyZWdfdG9fa3ZtX3JlZyhzeXNyZWcpKTsNCj4+IC0gICAgICAgIHByZXZpb3VzID0gKmNwcmVn
Ow0KPj4gLSAgICAgICAgbmV3ID0gY3B1LT5pc2FyLmlkcmVnc1tpXTsNCj4+ICsgICAgICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgc3lzcmVnZGVzYy0+ZmllbGRzX2NvdW50OyBqKyspIHsNCj4+ICsg
ICAgICAgICAgICBjb25zdCBBUk02NFN5c1JlZ0ZpZWxkICpmaWVsZCA9ICZzeXNyZWdkZXNjLT5m
aWVsZHNbal07DQo+PiArICAgICAgICAgICAgdWludDY0X3QgZmllbGRfbWFzayA9IGFybV9nZXRf
ZmllbGRfbWFzayhmaWVsZCk7DQo+PiArICAgICAgICAgICAgdWludDY0X3QgcHJldl92YWwgPSBw
cmV2aW91cyAmIGZpZWxkX21hc2s7DQo+PiArICAgICAgICAgICAgdWludDY0X3QgbmV3X3ZhbCA9
IGRlc2lyZWQgJiBmaWVsZF9tYXNrOw0KPj4gKw0KPj4gKyAgICAgICAgICAgIGlmIChwcmV2X3Zh
bCA9PSBuZXdfdmFsKSB7DQo+PiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPj4gKyAgICAg
ICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgICAgICBpZiAoYXJtX2ZpZWxkX3NraXBfd3JpdGVi
YWNrX2Fsd2F5cyhmaWVsZCkgfHwNCj4+ICsgICAgICAgICAgICAgICAgKCFhcm1fZmllbGRfaXNf
d3JpdGFibGUoZmllbGQpICYmDQo+PiArICAgICAgICAgICAgICAgICBhcm1fZmllbGRfc2tpcF93
cml0ZWJhY2tfaWZfbm90X3dyaXRhYmxlKGZpZWxkKSkpIHsNCj4+ICsgICAgICAgICAgICAgICAg
LyogTmV2ZXIgd3JpdGUgdGhpcyBmaWVsZCBiYWNrOyBrZWVwIEtWTSdzIHZhbHVlLiAqLw0KPj4g
KyAgICAgICAgICAgICAgICB3cml0YWJsZV9tYXNrICY9IH5maWVsZF9tYXNrOw0KPj4gKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsNCj4+ICsgICAgICAgICAgICB9DQo+PiArDQo+PiArICAgICAg
ICAgICAgaWYgKCFhcm1fZmllbGRfaXNfd3JpdGFibGUoZmllbGQpKSB7DQo+PiArICAgICAgICAg
ICAgICAgIGVycm9yX3JlcG9ydCgiJXMuJXMgaXMgbm90IHdyaXRhYmxlOiBob3N0PTB4JSIgUFJJ
eDY0DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCByZXF1ZXN0ZWQ9MHglIiBQ
Ukl4NjQsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNyZWdkZXNjLT5uYW1l
LCBmaWVsZC0+bmFtZSwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFs
ID4+IGZpZWxkLT5zaGlmdCwgbmV3X3ZhbCA+PiBmaWVsZC0+c2hpZnQpOw0KPj4gKyAgICAgICAg
ICAgICAgICByZXR1cm4gLTE7DQo+PiArICAgICAgICAgICAgfQ0KPj4gKyAgICAgICAgfQ0KPj4g
Kw0KPj4gKyAgICAgICAgaWYgKCFjcHJlZyB8fCAhd3JpdGFibGVfbWFzaykgew0KPj4gKyAgICAg
ICAgICAgIGNvbnRpbnVlOw0KPj4gKyAgICAgICAgfQ0KPj4gDQo+PiAtICAgICAgICBpZiAocHJl
dmlvdXMgIT0gbmV3KSB7DQo+PiAtICAgICAgICAgICAgKmNwcmVnID0gbmV3Ow0KPj4gLSAgICAg
ICAgICAgIHRyYWNlX2t2bV9hcm1fd3JpdGFibGVfaWRyZWdzX3RvX2NwcmVnX2xpc3Qoc3lzcmVn
ZGVzYy0+bmFtZSwNCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByZXZpb3VzLCBuZXcpOw0KPj4gLSAgICAgICAgIH0NCj4+ICsgICAg
ICAgIHVwZGF0ZWQgPSAocHJldmlvdXMgJiB+d3JpdGFibGVfbWFzaykgfCAoZGVzaXJlZCAmIHdy
aXRhYmxlX21hc2spOw0KPj4gKyAgICAgICAgaWYgKHVwZGF0ZWQgIT0gcHJldmlvdXMpIHsNCj4+
ICsgICAgICAgICAgICAqY3ByZWcgPSB1cGRhdGVkOw0KPj4gKyAgICAgICAgICAgIHRyYWNlX2t2
bV9hcm1fd3JpdGVfaWRyZWdzX3RvX2NwcmVnX2xpc3Qoc3lzcmVnZGVzYy0+bmFtZSwNCj4+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
ZXZpb3VzLCB1cGRhdGVkKTsNCj4+ICsgICAgICAgIH0NCj4+ICAgICB9DQo+PiArDQo+PiArICAg
IHJldHVybiAwOw0KPj4gfQ0KPj4gDQo+PiB2b2lkIGt2bV9hcm1fcmVzZXRfdmNwdShBUk1DUFUg
KmNwdSkNCj4+IEBAIC0yMjM1LDggKzIzMTgsMTEgQEAgaW50IGt2bV9hcmNoX2luaXRfdmNwdShD
UFVTdGF0ZSAqY3MpDQo+PiAgICAgaWYgKHJldCkgew0KPj4gICAgICAgICByZXR1cm4gcmV0Ow0K
Pj4gICAgIH0NCj4+IC0gICAgLyogb3ZlcndyaXRlIHdyaXRhYmxlIElEIHJlZ3Mgd2l0aCB0aGVp
ciB1cGRhdGVkIHByb3BlcnR5IHZhbHVlcyAqLw0KPj4gLSAgICBrdm1fYXJtX3dyaXRhYmxlX2lk
cmVnc190b19jcHJlZ19saXN0KGNwdSk7DQo+PiArICAgIC8qIG92ZXJ3cml0ZSBJRCByZWcgZmll
bGRzIHdpdGggdGhlaXIgdXBkYXRlZCBwcm9wZXJ0eSB2YWx1ZXMgKi8NCj4+ICsgICAgcmV0ID0g
a3ZtX2FybV93cml0ZV9pZHJlZ3NfdG9fY3ByZWdfbGlzdChjcHUpOw0KPj4gKyAgICBpZiAocmV0
KSB7DQo+PiArICAgICAgICByZXR1cm4gcmV0Ow0KPj4gKyAgICB9DQo+PiAgICAgcmV0ID0gd3Jp
dGVfbGlzdF90b19rdm1zdGF0ZShjcHUsIEtWTV9QVVRfRlVMTF9TVEFURSk7DQo+PiAgICAgaWYg
KCFyZXQpIHsNCj4+ICAgICAgICAgcmV0dXJuIC0xOw0KPj4gZGlmZiAtLWdpdCBhL3RhcmdldC9h
cm0vdHJhY2UtZXZlbnRzIGIvdGFyZ2V0L2FybS90cmFjZS1ldmVudHMNCj4+IGluZGV4IGYzM2Iw
ZDgyMWQuLmYwNDJhYjU5YjggMTAwNjQ0DQo+PiAtLS0gYS90YXJnZXQvYXJtL3RyYWNlLWV2ZW50
cw0KPj4gKysrIGIvdGFyZ2V0L2FybS90cmFjZS1ldmVudHMNCj4+IEBAIC0xNCw3ICsxNCw3IEBA
IGFybV9ndF91cGRhdGVfaXJxKGludCB0aW1lciwgaW50IGlycXN0YXRlKSAiZ3RfdXBkYXRlX2ly
cTogdGltZXIgJWQgaXJxc3RhdGUgJWQiDQo+PiAjIGt2bS5jDQo+PiBrdm1fYXJtX2ZpeHVwX21z
aV9yb3V0ZSh1aW50NjRfdCBpb3ZhLCB1aW50NjRfdCBncGEpICJNU0kgaW92YSA9IDB4JSJQUkl4
NjQiIGlzIHRyYW5zbGF0ZWQgaW50byAweCUiUFJJeDY0DQo+PiBnZXRfaG9zdF9jcHVfaWRyZWdz
KGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQ2NF90IHZhbHVlKSAic2NyYXRjaCB2Y3B1IGhvc3QgdmFs
dWUgZm9yICVzIGlzIDB4JSJQUkl4NjQNCj4+IC1rdm1fYXJtX3dyaXRhYmxlX2lkcmVnc190b19j
cHJlZ19saXN0KGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQ2NF90IHByZXZpb3VzLCB1aW50NjRfdCBu
ZXcpICIlcyBvdmVyd3JpdGUgZGVmYXVsdCAweCUiUFJJeDY0IiB3aXRoIDB4JSJQUkl4NjQNCj4+
ICtrdm1fYXJtX3dyaXRlX2lkcmVnc190b19jcHJlZ19saXN0KGNvbnN0IGNoYXIgKm5hbWUsIHVp
bnQ2NF90IHByZXZpb3VzLCB1aW50NjRfdCBuZXcpICIlcyBvdmVyd3JpdGUgZGVmYXVsdCAweCUi
UFJJeDY0IiB3aXRoIDB4JSJQUkl4NjQNCj4+IA0KPj4gIyBjcHU2NC5jDQo+PiBnZXRfc3lzcmVn
X3Byb3AoY29uc3QgY2hhciAqbmFtZSwgdWludDY0X3QgdmFsdWUpICIlcyAweCUiUFJJeDY0DQo+
IFRoYW5rcw0KPiANCj4gRXJpYw0KDQoNCg==