[dm-crypt] [RFC] Partial support for reading DiskCryptor volumes

Mateusz Jończyk <[email protected]> Sun, 31 Oct 2021 23:36:17 +0100
Newsgroups de.saout.dm-crypt
Message-ID <[email protected]>
SGVsbG8sDQoNCkJhY2sgaW4gSnVuZSwgSSB3cm90ZSB0byB0aGUgbWFpbGluZyBsaXN0IHNlZWtp
bmcgc29tZSBoZWxwIHdpdGgNCnJldmVyc2UtZW5naW5lZXJpbmcgdGhlIERpc2tDcnlwdG9yIHZv
bHVtZSBmb3JtYXQgWzFdLg0KDQpTaW5jZSB0aGVuLCBJIGhhdmUgaW1wbGVtZW50ZWQgZGVjcnlw
dGlvbiBvZiB0aGUgdm9sdW1lIGhlYWRlciAoZm9yIGFsbA0KY2lwaGVyIGNvbWJpbmF0aW9ucywg
d2l0aCBhdXRvZGV0ZWN0aW9uKSBhbmQgd291bGQgbGlrZSB0byBrbm93IHdoZXRoZXINCnlvdSB3
b3VsZCBiZSBpbnRlcmVzdGVkIGluIG1lcmdpbmcgc3VwcG9ydCBmb3Igb3BlbmluZyBEaXNrQ3J5
cHRvcg0Kdm9sdW1lcyBvbmNlIGl0IGlzIHJlYWR5Lg0KDQpUaGUgRGlza0NyeXB0b3IgZGV2ZWxv
cG1lbnQgaGFzIGxhcmdlbHkgc3RhbGxlZCwgd2l0aCB0aGUgbGFzdCBiZXRhDQpyZWxlYXNlIGlu
IEFwcmlsIDIwMjAuIFJlbGVhc2VzIGJ5IERhdmlkWGFuYXRvcyBoYXZlIHRoZSBmb2xsb3dpbmcN
CnByb2JsZW0gWzNdOg0KDQo+ICAgICAgICBUaGUgRGlzayBDcnlwdG9yIGRyaXZlciBuZWVkZWQg
dG8gYmUgdXBkYXRlZCwgYW5kIHNpbmNlIHRoZQ0KPiAgICAgICAgUmVhY3RPUyBmb3VuZGF0aW9u
IG5vIGxvbmdlciBvZmZlciBhIGRyaXZlciBzaWduaW5nIHNlcnZpY2UsIEkNCj4gICAgICAgIGhl
YWQgdG8gdXNlIGEgbGVha2VkIGNvZGUgc2lnbmluZyBjZXJ0aWZpY2F0ZSBJIGZvdW5kIGxheWlu
Zw0KPiAgICAgICAgYXJvdW5kIHRoZSBJbnRlcm5ldHMuIFRoaXMgbWVhbnMgc29tZSBhbnRpIG1h
bHdhcmUgYXBwbGljYXRpb25zDQo+ICAgICAgICBtYXkgd3JvbmdmdWxseSBmbGFnIGl0IGFzIHBv
dGVudGlhbGx5IGRhbmdlcm91cy4NCg0KSSdtIGF0dGFjaGluZyBteSBjdXJyZW50IGNvZGUsIHdo
aWNoIGNhbiBhbHNvIGJlIGJyb3dzZWQgb246DQpodHRwczovL2dpdGh1Yi5jb20vbWF0am9uL2Ny
eXB0c2V0dXAvdHJlZS9kY3J5cHRvcl9zdXBwb3J0L2xpYi9kY3J5cHRvcg0KDQpUaGUgY29kZSBp
cyBzb21ld2hhdCBzaW1pbGFyIHRvIC4vbGliL3RjcnlwdC90Y3J5cHQuYyBhcyBEaXNrQ3J5cHRv
ciB3YXMNCmluc3BpcmVkIGJ5IFRydWVDcnlwdC4gSXQgdXNlcywgaG93ZXZlciwgYSBkaWZmZXJl
bnQgdm9sdW1lIGxheW91dCAodGhlDQpmaXJzdCAyMDQ4IGJ5dGVzIG9mIHRoZSB1bmRlcmx5aW5n
IGZpbGVzeXN0ZW0gYXJlIHJlbG9jYXRlZCB0byBhDQpkaWZmZXJlbnQgcGxhY2Ugb24gdGhlIHBh
cnRpdGlvbiBbMl0pLg0KDQpHcmVldGluZ3MsDQpNYXRldXN6DQoNClsxXSBzZWUgdGhyZWFkIGZy
b20gIlRodSwgMyBKdW4gMjAyMSAxMjowNToyOCArMDIwMCINCiAgIGh0dHBzOi8vbG9yZS5rZXJu
ZWwub3JnL2RtLWNyeXB0LzdkOTExZDg5LWFlYTgtNWQyYi02NWM0LTA1MWRlNmY1NDk1NUBvMi5w
bC9ULw0KDQpbMl0gaHR0cHM6Ly9kaXNrY3J5cHRvci5vcmcvdm9sdW1lLw0KDQpbM10gaHR0cHM6
Ly9naXRodWIuY29tL0RhdmlkWGFuYXRvcy9EaXNrQ3J5cHRvci9yZWxlYXNlcw0KDQotLS0NCiBs
aWIvTWFrZW1vZHVsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKw0KIGxp
Yi9kY3J5cHRvci9kY3J5cHRvci5jICAgICAgICAgICAgICAgICAgICAgICB8IDQyNCArKysrKysr
KysrKysrKysrKysNCiBsaWIvZGNyeXB0b3IvZGNyeXB0b3IuaCAgICAgICAgICAgICAgICAgICAg
ICAgfCAgNjYgKysrDQogbGliL2xpYmNyeXB0c2V0dXAuaCAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgIDIxICstDQogbGliL3NldHVwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgIDc5ICsrKy0NCiBzcmMvY3J5cHRzZXR1cC5jICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgNzEgKysrDQogdGVzdHMvZGlza2NyeXB0b3IvcGFzc3dvcmQudHh0ICAgICAgICAg
ICAgICAgIHwgICAxICsNCiB0ZXN0cy9kaXNrY3J5cHRvci92b2x1bWVfYWVzLmJpbiAgICAgICAg
ICAgICAgfCBCaW4gMCAtPiA4Mzg4NjA4IGJ5dGVzDQogdGVzdHMvZGlza2NyeXB0b3Ivdm9sdW1l
X2Flc190d29maXNoLmJpbiAgICAgIHwgQmluIDAgLT4gODM4ODYwOCBieXRlcw0KIC4uLi92b2x1
bWVfYWVzX3R3b2Zpc2hfc2VycGVudC5iaW4gICAgICAgICAgICB8IEJpbiAwIC0+IDgzODg2MDgg
Ynl0ZXMNCiB0ZXN0cy9kaXNrY3J5cHRvci92b2x1bWVfc2VycGVudC5iaW4gICAgICAgICAgfCBC
aW4gMCAtPiA4Mzg4NjA4IGJ5dGVzDQogdGVzdHMvZGlza2NyeXB0b3Ivdm9sdW1lX3NlcnBlbnRf
YWVzLmJpbiAgICAgIHwgQmluIDAgLT4gODM4ODYwOCBieXRlcw0KIHRlc3RzL2Rpc2tjcnlwdG9y
L3ZvbHVtZV90d29maXNoLmJpbiAgICAgICAgICB8IEJpbiAwIC0+IDgzODg2MDggYnl0ZXMNCiB0
ZXN0cy9kaXNrY3J5cHRvci92b2x1bWVfdHdvZmlzaF9zZXJwZW50LmJpbiAgfCBCaW4gMCAtPiA4
Mzg4NjA4IGJ5dGVzDQogMTQgZmlsZXMgY2hhbmdlZCwgNjYyIGluc2VydGlvbnMoKyksIDIgZGVs
ZXRpb25zKC0pDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9kY3J5cHRvci9kY3J5cHRvci5jDQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9kY3J5cHRvci9kY3J5cHRvci5oDQogY3JlYXRlIG1vZGUg
MTAwNjQ0IHRlc3RzL2Rpc2tjcnlwdG9yL3Bhc3N3b3JkLnR4dA0KIGNyZWF0ZSBtb2RlIDEwMDc1
NSB0ZXN0cy9kaXNrY3J5cHRvci92b2x1bWVfYWVzLmJpbg0KIGNyZWF0ZSBtb2RlIDEwMDc1NSB0
ZXN0cy9kaXNrY3J5cHRvci92b2x1bWVfYWVzX3R3b2Zpc2guYmluDQogY3JlYXRlIG1vZGUgMTAw
NzU1IHRlc3RzL2Rpc2tjcnlwdG9yL3ZvbHVtZV9hZXNfdHdvZmlzaF9zZXJwZW50LmJpbg0KIGNy
ZWF0ZSBtb2RlIDEwMDc1NSB0ZXN0cy9kaXNrY3J5cHRvci92b2x1bWVfc2VycGVudC5iaW4NCiBj
cmVhdGUgbW9kZSAxMDA3NTUgdGVzdHMvZGlza2NyeXB0b3Ivdm9sdW1lX3NlcnBlbnRfYWVzLmJp
bg0KIGNyZWF0ZSBtb2RlIDEwMDc1NSB0ZXN0cy9kaXNrY3J5cHRvci92b2x1bWVfdHdvZmlzaC5i
aW4NCiBjcmVhdGUgbW9kZSAxMDA3NTUgdGVzdHMvZGlza2NyeXB0b3Ivdm9sdW1lX3R3b2Zpc2hf
c2VycGVudC5iaW4NCg0KZGlmZiAtLWdpdCBhL2xpYi9NYWtlbW9kdWxlLmFtIGIvbGliL01ha2Vt
b2R1bGUuYW0NCmluZGV4IGU5YjI1MGU3Li4zYjU1MjliNiAxMDA2NDQNCi0tLSBhL2xpYi9NYWtl
bW9kdWxlLmFtDQorKysgYi9saWIvTWFrZW1vZHVsZS5hbQ0KQEAgLTc2LDYgKzc2LDggQEAgbGli
Y3J5cHRzZXR1cF9sYV9TT1VSQ0VTID0gXA0KIAlsaWIvbG9vcGFlcy9sb29wYWVzLmMJCVwNCiAJ
bGliL3RjcnlwdC90Y3J5cHQuaAkJXA0KIAlsaWIvdGNyeXB0L3RjcnlwdC5jCQlcDQorCWxpYi9k
Y3J5cHRvci9kY3J5cHRvci5oCSAgICAgICAgXA0KKwlsaWIvZGNyeXB0b3IvZGNyeXB0b3IuYwkg
ICAgICAgIFwNCiAJbGliL2x1a3MxL2FmLmgJCQlcDQogCWxpYi9sdWtzMS9hZi5jCQkJXA0KIAls
aWIvbHVrczEva2V5ZW5jcnlwdGlvbi5jCVwNCmRpZmYgLS1naXQgYS9saWIvZGNyeXB0b3IvZGNy
eXB0b3IuYyBiL2xpYi9kY3J5cHRvci9kY3J5cHRvci5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0K
aW5kZXggMDAwMDAwMDAuLjVlMmRmOTdjDQotLS0gL2Rldi9udWxsDQorKysgYi9saWIvZGNyeXB0
b3IvZGNyeXB0b3IuYw0KQEAgLTAsMCArMSw0MjQgQEANCisvKg0KKyAqIERpc2tDcnlwdG9yLWNv
bXBhdGlibGUgdm9sdW1lIGhhbmRsaW5nDQorICoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgTWF0
ZXVzeiBKb8WEY3p5aw0KKyAqDQorICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCisgKiB2ZXJzaW9uIDIu
MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4N
CisgKg0KKyAqIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCisgKiBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKyAqDQorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KKyAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUNCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxh
c3NlcnQuaD4NCisjaW5jbHVkZSA8Y3R5cGUuaD4NCisjaW5jbHVkZSA8ZXJybm8uaD4NCisjaW5j
bHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8c3RkYm9vbC5oPg0KKyNpbmNsdWRlIDxzdGRsaWIu
aD4NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorDQorI2luY2x1ZGUgPGljb252Lmg+DQorDQorI2lu
Y2x1ZGUgImxpYmNyeXB0c2V0dXAuaCINCisjaW5jbHVkZSAiZGNyeXB0b3IuaCINCisjaW5jbHVk
ZSAiaW50ZXJuYWwuaCINCisNCisvLyBjb3BpZWQgZnJvbSBsaWIvYml0bGsvYml0bGsuYw0KK3N0
YXRpYyBpbnQgcGFzc3BocmFzZV90b191dGYxNihzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwgY2hh
ciAqaW5wdXQsIHNpemVfdCBpbmxlbiwgY2hhciAqKm91dCkNCit7DQorCWNoYXIgKm91dGJ1ZiA9
IE5VTEw7DQorCWljb252X3QgaWM7DQorCXNpemVfdCBpY19pbmxlbiA9IGlubGVuOw0KKwlzaXpl
X3QgaWNfb3V0bGVuID0gaW5sZW4gKiAyOw0KKwljaGFyICppY19vdXRidWYgPSBOVUxMOw0KKwlz
aXplX3QgciA9IDA7DQorDQorCWlmIChpbmxlbiA9PSAwKQ0KKwkJcmV0dXJuIHI7DQorDQorCW91
dGJ1ZiA9IGNyeXB0X3NhZmVfYWxsb2MoaW5sZW4gKiAyKTsNCisJaWYgKG91dGJ1ZiA9PSBOVUxM
KQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCW1lbXNldChvdXRidWYsIDAsIGlubGVuICogMik7
DQorCWljX291dGJ1ZiA9IG91dGJ1ZjsNCisNCisJaWMgPSBpY29udl9vcGVuKCJVVEYtMTZMRSIs
ICJVVEYtOCIpOw0KKwlyID0gaWNvbnYoaWMsICZpbnB1dCwgJmljX2lubGVuLCAmaWNfb3V0YnVm
LCAmaWNfb3V0bGVuKTsNCisJaWNvbnZfY2xvc2UoaWMpOw0KKw0KKwlpZiAociA9PSAwKSB7DQor
CQkqb3V0ID0gb3V0YnVmOw0KKwl9IGVsc2Ugew0KKwkJKm91dCA9IE5VTEw7DQorCQljcnlwdF9z
YWZlX2ZyZWUob3V0YnVmKTsNCisJCWxvZ19kYmcoY2QsICJGYWlsZWQgdG8gY29udmVydCBwYXNz
cGhyYXNlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7DQorCQlyID0gLWVycm5vOw0KKwl9DQorDQor
CXJldHVybiByOw0KK30NCisNCisNCisvLyBUaGVzZSBzdHJ1Y3R1cmVzIGFuZCBsaXN0IGhlYXZp
bHkgYnkgYSBzaW1pbGFyIGxpc3QgaW4gdGNyeXB0L3RjcnlwdC5jDQorc3RydWN0IGRjcnlwdG9y
X2FsZyB7DQorCQljb25zdCBjaGFyICpuYW1lOw0KKwkJdW5zaWduZWQgaW50IGtleV9vZmZzZXQ7
DQorCQl1bnNpZ25lZCBpbnQgaXZfb2Zmc2V0Ow0KK307DQorDQorc3RydWN0IGRjcnlwdG9yX2Fs
Z3Mgew0KKwl1aW50MzJfdCBhbGdfaWQ7ICAgICAgIC8vIGFzIHVzZWQgaW4gdGhlIHZvbHVtZSBo
ZWFkZXINCisJdW5zaWduZWQgaW50IGNoYWluX2xlbmd0aDsNCisJY29uc3QgY2hhciAqbG9uZ19u
YW1lOw0KKwlzdHJ1Y3QgZGNyeXB0b3JfYWxnIGNpcGhlclszXTsNCit9Ow0KKw0KK3N0YXRpYyBz
dHJ1Y3QgZGNyeXB0b3JfYWxncyBkY3J5cHRvcl9jaXBoZXJbXSA9IHsNCisJeyAweDAsIDEsICJh
ZXMiLA0KKwkJe3siYWVzIiwgICAgICAwLCAzMn19fSwNCisJeyAweDEsIDEsICJ0d29maXNoIiwN
CisJCXt7InR3b2Zpc2giLCAgMCwgMzJ9fX0sDQorCXsgMHgyLCAxLCAic2VycGVudCIsDQorCQl7
eyJzZXJwZW50IiwgIDAsIDMyfX19LA0KKwl7IDB4MywgMiwgImFlcy10d29maXNoIiwNCisJCXt7
ImFlcyIsICAgICAzMiwgMzIqM30sDQorCQl7InR3b2Zpc2giLCAgIDAsIDMyKjJ9fX0sDQorCXsg
MHg0LCAyLCAidHdvZmlzaC1zZXJwZW50IiwNCisJCXt7InR3b2Zpc2giLCAzMiwgMzIqM30sDQor
CQl7InNlcnBlbnQiLCAgIDAsIDMyKjJ9fX0sDQorCXsgMHg1LCAyLCAic2VycGVudC1hZXMiLA0K
KwkJe3sic2VycGVudCIsIDMyLCAzMiozfSwNCisJCXsiYWVzIiwgICAgICAgMCwgMzIqMn19fSwN
CisJeyAweDYsIDMsICJhZXMtdHdvZmlzaC1zZXJwZW50Iiwgew0KKwkJeyJhZXMiLCAgICAzMioy
LCAzMio1fSwNCisJCXsidHdvZmlzaCIsICAzMiwgMzIqNH0sDQorCQl7InNlcnBlbnQiLCAgIDAs
IDMyKjN9LA0KKwkJfX0sDQorCXt9DQorfTsNCisNCitzdGF0aWMgdm9pZCBoZXhkdW1wX2J1ZmZl
cihGSUxFICpzdHJlYW0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwNCisJCXNpemVfdCBi
dWZmZXJfc2l6ZSwgY29uc3QgaW50IGJ5dGVzX3Blcl9saW5lKQ0KK3sNCisJLy8gVE9ETzogbWFr
ZSB0aGUgZnVuY3Rpb24gbW9yZSByZWFkYWJsZQ0KKwkvLyBUT0RPOiByZXBsYWNlIGZwcmludGYg
d2l0aCBzb21ldGhpbmcgZmFzdGVyLCBsaWtlIHNwcmludGYNCisJZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBidWZmZXJfc2l6ZTsgaSs9Ynl0ZXNfcGVyX2xpbmUpIHsNCisJCWZwcmludGYoc3RyZWFt
LCAiJTA4eCAgIiwgKHVuc2lnbmVkIGludCkgaSk7DQorDQorCQlmb3IgKHNpemVfdCBqID0gaTsg
aiA8IGkgKyBieXRlc19wZXJfbGluZSAmJiBqIDwgYnVmZmVyX3NpemU7IGorKykgew0KKwkJCWZw
cmludGYoc3RyZWFtLCAiJTAyeCAiLCAodW5zaWduZWQgaW50KSBidWZmZXJbal0pOw0KKwkJfQ0K
KwkJLy8gbGFzdCBsaW5lIHBhZGRpbmcNCisJCWZvciAoc2l6ZV90IGogPSBidWZmZXJfc2l6ZTsg
aiA8IGkgKyBieXRlc19wZXJfbGluZTsgaisrKSB7DQorCQkJZnB1dHMoIiAgICIsIHN0cmVhbSk7
DQorCQl9DQorDQorCQlmcHJpbnRmKHN0cmVhbSwgIiB8Iik7DQorCQlmb3IgKHNpemVfdCBqID0g
aTsgaiA8IGkrYnl0ZXNfcGVyX2xpbmUgJiYgaiA8IGJ1ZmZlcl9zaXplOyBqKyspIHsNCisJCQlp
ZiAoaXNwcmludChidWZmZXJbal0pKSB7DQorCQkJCWZwdXRjKGJ1ZmZlcltqXSwgc3RyZWFtKTsN
CisJCQl9IGVsc2Ugew0KKwkJCQlmcHV0YygnLicsIHN0cmVhbSk7DQorCQkJfQ0KKwkJfQ0KKwkJ
Ly8gbGFzdCBsaW5lIHBhZGRpbmcNCisJCWZvciAoc2l6ZV90IGogPSBidWZmZXJfc2l6ZTsgaiA8
IGkrYnl0ZXNfcGVyX2xpbmU7IGorKykgew0KKwkJCWZwdXRzKCIgIiwgc3RyZWFtKTsNCisJCX0N
CisJCWZwcmludGYoc3RyZWFtLCAifFxuIik7DQorCX0NCit9DQorDQorLyoNCisgKiBDaGVja3Mg
aWYgdGhlIGhlYWRlciBzaWduYXR1cmUgYW5kIENSQzMyIG1hdGNoZXMsIHRvIGRldGVybWluZQ0K
KyAqIGlmIHRoZSBwYXNzd29yZCBpcyBjb3JyZWN0LiBEb2VzIG5vdCB2YWxpZGF0ZSBvdGhlciBo
ZWFkZXIgZmllbGRzLg0KKyAqLw0KK3N0YXRpYyBib29sIERDUllQVE9SX2lzX2NvcnJlY3RseV9k
ZWNyeXB0ZWQoc3RydWN0IGRjcnlwdG9yX3BoZHIgKmhkcikNCit7DQorCWlmIChzdHJuY21wKGhk
ci0+c2lnbmF0dXJlLCAiRENSUCIsIDQpKQ0KKwkJcmV0dXJuIGZhbHNlOw0KKw0KKwkvLyBEaXNr
Q3J5cHRvciB1c2VzIHVubW9kaWZpZWQgQ1JDLTMyDQorCXVpbnQzMl90IGhlYWRlcl9jcmMgPSBj
cnlwdF9jcmMzMigweGZmZmZmZmZmLA0KKwkJCShjb25zdCB1bnNpZ25lZCBjaGFyKiloZHIgKyA3
MiwgMjA0OC03Mik7DQorCS8vIGNyeXB0X2NyYzMyKCkgZG9lcyBub3QgcGVyZm9ybSB0aGUgZmlu
YWwgWE9SDQorCWhlYWRlcl9jcmMgXj0gMHhmZmZmZmZmZjsNCisNCisJLy8gVE9ETzogYmlnLWVu
ZGlhbiBhcmNoaXRlY3R1cmVzPw0KKwlpZiAoaGVhZGVyX2NyYyAhPSBoZHItPmNyYzMyKQ0KKwkJ
cmV0dXJuIGZhbHNlOw0KKw0KKwlyZXR1cm4gdHJ1ZTsNCit9DQorDQorDQoraW50IERDUllQVE9S
X2RlY3J5cHRfaGRyX29uZV9jaXBoZXIoY2hhciAqa2V5LA0KKwkJc3RydWN0IGRjcnlwdG9yX2Vu
Y2hkciAqZGVzdCwNCisJCXN0cnVjdCBkY3J5cHRvcl9lbmNoZHIgKnNvdXJjZSwNCisJCXN0cnVj
dCBkY3J5cHRvcl9hbGcgKmFsZykNCit7DQorCXN0cnVjdCBjcnlwdF9jaXBoZXIgKmNpcGhlcjsN
CisJY2hhciAqa2V5X29uZTsNCisJaW50IHI7DQorCWNoYXIgaXZbMTZdID0ge307DQorDQorCWlm
IChwb3NpeF9tZW1hbGlnbigodm9pZCopJmtleV9vbmUsIGNyeXB0X2dldHBhZ2VzaXplKCksIERD
UllQVE9SX0tFWV9MRU4pKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCW1lbWNweShrZXlfb25l
LCBrZXkgKyBhbGctPmtleV9vZmZzZXQsIDMyKTsNCisJbWVtY3B5KGtleV9vbmUrMzIsIGtleSAr
IGFsZy0+aXZfb2Zmc2V0LCAzMik7DQorDQorCXIgPSBjcnlwdF9jaXBoZXJfaW5pdCgmY2lwaGVy
LCBhbGctPm5hbWUsICJ4dHMiLCBrZXlfb25lLCA2NCk7DQorCWlmIChyKQ0KKwkJZ290byBleGl0
Ow0KKw0KKwkvLyBUT0RPOiB3aGF0IGFib3V0IDRrQiBzZWN0b3JzPw0KKwlmb3IgKGludCBpID0g
MDsgaSA8IERDUllQVE9SX0hEUl9MRU4gLyA1MTI7IGkrKykgew0KKwkJaXZbMF0gPSBpKzE7DQor
CQlyID0gY3J5cHRfY2lwaGVyX2RlY3J5cHQoY2lwaGVyLA0KKwkJCShjb25zdCBjaGFyICopc291
cmNlICsgaSAqIDUxMiwNCisJCQkoY2hhciAqKWRlc3QgKyBpICogNTEyLA0KKwkJCTUxMiwNCisJ
CQlpdiwgMTYpOw0KKw0KKwl9DQorCWNyeXB0X2NpcGhlcl9kZXN0cm95KGNpcGhlcik7DQorDQor
ZXhpdDoNCisJaWYgKGtleV9vbmUpDQorCQljcnlwdF9zYWZlX21lbXplcm8oa2V5X29uZSwgRENS
WVBUT1JfS0VZX0xFTik7DQorDQorCWZyZWUoa2V5X29uZSk7DQorCXJldHVybiByOw0KK30NCisN
CitpbnQgRENSWVBUT1JfZGVjcnlwdF9oZHJfb25lX2NvbWJpbmF0aW9uKGNoYXIgKmtleSwNCisJ
CXN0cnVjdCBkY3J5cHRvcl9lbmNoZHIgKmVuY2hkciwNCisJCXN0cnVjdCBkY3J5cHRvcl9waGRy
ICpoZHIsDQorCQlzdHJ1Y3QgZGNyeXB0b3JfYWxncyAqYWxncykNCit7DQorCWludCBpOw0KKwlp
bnQgcjsNCisJc3RydWN0IGRjcnlwdG9yX2VuY2hkciAqdGVtcF9oZHI7DQorDQorCWlmIChwb3Np
eF9tZW1hbGlnbigodm9pZCopJnRlbXBfaGRyLCBjcnlwdF9nZXRwYWdlc2l6ZSgpLA0KKwkJCQlE
Q1JZUFRPUl9IRFJfTEVOKSkgew0KKwkJcmV0dXJuIC1FTk9NRU07DQorCX0NCisNCisJbWVtY3B5
KHRlbXBfaGRyLCBlbmNoZHIsIERDUllQVE9SX0hEUl9MRU4pOw0KKw0KKwlmb3IgKGkgPSAwOyBp
IDwgYWxncy0+Y2hhaW5fbGVuZ3RoOyBpKyspIHsNCisJCXIgPSBEQ1JZUFRPUl9kZWNyeXB0X2hk
cl9vbmVfY2lwaGVyKGtleSwNCisJCQkJKHN0cnVjdCBkY3J5cHRvcl9lbmNoZHIgKikgaGRyLA0K
KwkJCQl0ZW1wX2hkciwgJmFsZ3MtPmNpcGhlcltpXSk7DQorCQlpZiAocikNCisJCQlnb3RvIGV4
aXQ7DQorDQorCQltZW1jcHkodGVtcF9oZHIsIGhkciwgRENSWVBUT1JfSERSX0xFTik7DQorCX0N
CisNCisJaWYgKERDUllQVE9SX2lzX2NvcnJlY3RseV9kZWNyeXB0ZWQoaGRyKSkNCisJCXIgPSAw
Ow0KKwllbHNlDQorCQlyID0gMTsNCisNCitleGl0Og0KKw0KKwlpZiAodGVtcF9oZHIpDQorCQlj
cnlwdF9zYWZlX21lbXplcm8odGVtcF9oZHIsIERDUllQVE9SX0hEUl9MRU4pOw0KKw0KKwlmcmVl
KHRlbXBfaGRyKTsNCisJcmV0dXJuIHI7DQorfQ0KKw0KKw0KKy8vIFRyeSBhbGwgY29tYmluYXRp
b25zIHRoYXQgaGF2ZSBhIHNwZWNpZmljIGNoYWluX2xlbmd0aCwgY2FsY3VsYXRpbmcgcGJrZGYy
DQorLy8gb25jZQ0KK2ludCBEQ1JZUFRPUl9kZWNyeXB0X2hkcl9vbmVfY2hhaW5fbGVuZ3RoKA0K
KwkJc3RydWN0IGNyeXB0X2RldmljZSAqY2QsDQorCQlzdHJ1Y3QgZGNyeXB0b3JfZW5jaGRyICpl
bmNoZHIsDQorCQlzdHJ1Y3QgZGNyeXB0b3JfcGhkciAqaGRyLA0KKwkJY2hhciAqcHdkX3V0ZjE2
LA0KKwkJaW50IHB3ZF91dGYxNl9sZW5ndGgsDQorCQlpbnQgY2hhaW5fbGVuZ3RoLA0KKwkJaW50
ICpmb3VuZF9jb21iaW5hdGlvbikNCit7DQorCWNoYXIgKmtleTsNCisJaW50IHI7DQorCWludCBy
ZXQgPSAxOw0KKwlpbnQgaTsNCisNCisJaWYgKHBvc2l4X21lbWFsaWduKCh2b2lkKikma2V5LCBj
cnlwdF9nZXRwYWdlc2l6ZSgpLCBEQ1JZUFRPUl9LRVlfTEVOICogY2hhaW5fbGVuZ3RoKSkNCisJ
CXJldHVybiAtRU5PTUVNOw0KKw0KKwlyID0gY3J5cHRfcGJrZGYoInBia2RmMiIsICJzaGE1MTIi
LA0KKwkJCXB3ZF91dGYxNiwgcHdkX3V0ZjE2X2xlbmd0aCwNCisJCQllbmNoZHItPnNhbHQsIERD
UllQVE9SX1NBTFRfTEVOLA0KKwkJCWtleSwgRENSWVBUT1JfS0VZX0xFTiAqIGNoYWluX2xlbmd0
aCwNCisJCQkxMDAwLCAwLCAwKTsNCisNCisJZm9yIChpID0gMDsgZGNyeXB0b3JfY2lwaGVyW2ld
LmNoYWluX2xlbmd0aDsgaSsrKSB7DQorCQlpZiAoZGNyeXB0b3JfY2lwaGVyW2ldLmNoYWluX2xl
bmd0aCAhPSBjaGFpbl9sZW5ndGgpDQorCQkJY29udGludWU7DQorDQorCQlyID0gRENSWVBUT1Jf
ZGVjcnlwdF9oZHJfb25lX2NvbWJpbmF0aW9uKGtleSwgZW5jaGRyLCBoZHIsDQorCQkJJmRjcnlw
dG9yX2NpcGhlcltpXSk7DQorCQlpZiAociA9PSAwKSB7DQorCQkJLy8gZm91bmQhDQorCQkJcmV0
ID0gMDsNCisJCQkqZm91bmRfY29tYmluYXRpb24gPSBpOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKw0K
KwkJaWYgKHIgPCAwKSB7DQorCQkJLy8gZXJyb3IhDQorCQkJcmV0ID0gcjsNCisJCQlicmVhazsN
CisJCX0NCisJfQ0KKw0KKwlpZiAoa2V5KQ0KKwkJY3J5cHRfc2FmZV9tZW16ZXJvKGtleSwgRENS
WVBUT1JfS0VZX0xFTiAqIGNoYWluX2xlbmd0aCk7DQorDQorCWZyZWUoa2V5KTsNCisJcmV0dXJu
IHJldDsNCit9DQorDQoraW50IERDUllQVE9SX2RlY3J5cHRfaGRyKHN0cnVjdCBjcnlwdF9kZXZp
Y2UgKmNkLA0KKwkJCSAgIHN0cnVjdCBkY3J5cHRvcl9lbmNoZHIgKmVuY2hkciwNCisJCQkgICBz
dHJ1Y3QgZGNyeXB0b3JfcGhkciAqaGRyLA0KKwkJCSAgIHN0cnVjdCBjcnlwdF9wYXJhbXNfZGNy
eXB0b3IgKnBhcmFtcykNCit7DQorCWludCByOw0KKwlpbnQgaTsNCisJaW50IGZvdW5kX2NvbWJp
bmF0aW9uOw0KKw0KKwlhc3NlcnQoc2l6ZW9mKHN0cnVjdCBkY3J5cHRvcl9lbmNoZHIpID09IERD
UllQVE9SX0hEUl9MRU4pOw0KKwlhc3NlcnQoc2l6ZW9mKHN0cnVjdCBkY3J5cHRvcl9waGRyKSA9
PSBEQ1JZUFRPUl9IRFJfTEVOKTsNCisNCisJY2hhciAqdXRmMTZQYXNzd29yZCA9IE5VTEw7DQor
CXIgPSBwYXNzcGhyYXNlX3RvX3V0ZjE2KGNkLCBDT05TVF9DQVNUKGNoYXIgKikgcGFyYW1zLT5w
YXNzcGhyYXNlLCBwYXJhbXMtPnBhc3NwaHJhc2Vfc2l6ZSwgJnV0ZjE2UGFzc3dvcmQpOw0KKwkv
LyBUT0RPOiBjaGVjayByDQorDQorCWZvciAoaSA9IDEgOyBpIDw9IDM7IGkrKykgew0KKwkJciA9
IERDUllQVE9SX2RlY3J5cHRfaGRyX29uZV9jaGFpbl9sZW5ndGgoY2QsIGVuY2hkciwgaGRyLA0K
KwkJCXV0ZjE2UGFzc3dvcmQsIHBhcmFtcy0+cGFzc3BocmFzZV9zaXplICogMiwNCisJCQlpLA0K
KwkJCSZmb3VuZF9jb21iaW5hdGlvbik7DQorDQorCQlpZiAociA8PSAwKQ0KKwkJCWJyZWFrOw0K
Kwl9DQorCS8vIFRPRE86IGlmIChyIDwgMCkgLi4uDQorDQorCWlmIChyID09IDApIHsNCisJCWxv
Z19zdGQoY2QsICJET05FXG4iKTsNCisJCS8vIGhleHByaW50KGNkLCBoZHIsIDIwNDgsICIgIik7
DQorDQorCQloZXhkdW1wX2J1ZmZlcihzdGRlcnIsIChjb25zdCB1bnNpZ25lZCBjaGFyICopaGRy
LCAyMDQ4LCAxNik7DQorCX0NCisNCisJLy8gVE9ETzogbGl0dGxlLWVuZGlhbiB2cyBiaWctZW5k
aWFuDQorDQorCXJldHVybiByOw0KK30NCisNCisvKg0KKw0KK2ludCBEQ1JZUFRPUl9kZWNyeXB0
X3NlY3RvcihzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwNCisJCXN0cnVjdCBkY3J5cHRvcl9waGRy
ICpoZHIsDQorCQl1aW50NjRfdCBzZWN0b3JfbnVtYmVyKQ0KK3sNCisJaW50IHI7DQorCXN0cnVj
dCBjcnlwdF9jaXBoZXIgKmNpcGhlcjsNCisJY2hhciBpdlsxNl0gPSB7fTsNCisJY2hhciAqc2Vj
dG9yID0gbWFsbG9jKDUxMik7DQorCWNoYXIgKnNlY3Rvcl9kZWNyeXB0ZWQgPSBtYWxsb2MoNTEy
KTsNCisNCisJc3RydWN0IGRldmljZSAqZGV2aWNlID0gY3J5cHRfZGF0YV9kZXZpY2UoY2QpOw0K
KwlpbnQgZGV2ZmQ7DQorCWRldmZkID0gZGV2aWNlX29wZW4oY2QsIGRldmljZSwgT19SRE9OTFkp
Ow0KKwlpZiAoZGV2ZmQgPCAwKSB7DQorCQlkZXZpY2VfZnJlZShjZCwgZGV2aWNlKTsNCisJCWxv
Z19lcnIoY2QsIF8oIkNhbm5vdCBvcGVuIGRldmljZSAlcy4iKSwgZGV2aWNlX3BhdGgoZGV2aWNl
KSk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlpZiAocmVhZF9sc2Vla19ibG9ja3dp
c2UoZGV2ZmQsIGRldmljZV9ibG9ja19zaXplKGNkLCBkZXZpY2UpLA0KKwkJCWRldmljZV9hbGln
bm1lbnQoZGV2aWNlKSwgc2VjdG9yLCBEQ1JZUFRPUl9IRFJfTEVOLCBzZWN0b3JfbnVtYmVyICog
NTEyKQ0KKwkJCSE9IDUxMikgew0KKw0KKwkJZGV2aWNlX2ZyZWUoY2QsIGRldmljZSk7DQorCQls
b2dfZXJyKGNkLCBfKCJDYW5ub3QgcmVhZCBkZXZpY2UgJXMuIiksIGRldmljZV9wYXRoKGRldmlj
ZSkpOw0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJciA9IGNyeXB0X2NpcGhlcl9pbml0
KCZjaXBoZXIsICJhZXMiLCAieHRzIiwgaGRyLT5rZXksIDY0KTsNCisNCisJZm9yIChpbnQgaSA9
IDE2MzAwOyBpIDw9IDE2NDAwOyBpKyspIHsNCisJCWl2WzBdID0gaSAlIDI1NjsNCisJCWl2WzFd
ID0gaSAvIDI1NjsNCisNCisJCWZwcmludGYoc3RkZXJyLCAiXG5cbmk9JWRcbiIsIGkpOw0KKw0K
KwkJciA9IGNyeXB0X2NpcGhlcl9kZWNyeXB0KGNpcGhlciwNCisJCQlzZWN0b3IsDQorCQkJc2Vj
dG9yX2RlY3J5cHRlZCwNCisJCQk1MTIsDQorCQkJaXYsIDE2KTsNCisNCisJCWhleGR1bXBfYnVm
ZmVyKHN0ZGVyciwgc2VjdG9yX2RlY3J5cHRlZCwgNTEyLCAxNik7DQorCX0NCisNCisJZnJlZShz
ZWN0b3IpOw0KKwlmcmVlKHNlY3Rvcl9kZWNyeXB0ZWQpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQor
Ki8NCisNCitpbnQgRENSWVBUT1JfcmVhZF9waGRyKHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNkLA0K
KwkJICAgICBzdHJ1Y3QgZGNyeXB0b3JfcGhkciAqaGRyLA0KKwkJICAgICBzdHJ1Y3QgY3J5cHRf
cGFyYW1zX2RjcnlwdG9yICpwYXJhbXMpDQorew0KKwlpbnQgciA9IDA7DQorCWludCBkZXZmZDsN
CisJc3RydWN0IGRldmljZSAqZGV2aWNlID0gY3J5cHRfZGF0YV9kZXZpY2UoY2QpOw0KKwlzdHJ1
Y3QgZGNyeXB0b3JfZW5jaGRyICplbmNoZHI7DQorDQorCWRldmZkID0gZGV2aWNlX29wZW4oY2Qs
IGRldmljZSwgT19SRE9OTFkpOw0KKwlpZiAoZGV2ZmQgPCAwKSB7DQorCQlkZXZpY2VfZnJlZShj
ZCwgZGV2aWNlKTsNCisJCWxvZ19lcnIoY2QsIF8oIkNhbm5vdCBvcGVuIGRldmljZSAlcy4iKSwg
ZGV2aWNlX3BhdGgoZGV2aWNlKSk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwllbmNo
ZHIgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkY3J5cHRvcl9lbmNoZHIpKTsNCisJLy8gVE9ETzog
aWYgKGVuY2hkciA9PSBOVUxMKQ0KKw0KKwlpZiAocmVhZF9sc2Vla19ibG9ja3dpc2UoZGV2ZmQs
IGRldmljZV9ibG9ja19zaXplKGNkLCBkZXZpY2UpLA0KKwkJCWRldmljZV9hbGlnbm1lbnQoZGV2
aWNlKSwgZW5jaGRyLCBEQ1JZUFRPUl9IRFJfTEVOLCAwKSA9PSBEQ1JZUFRPUl9IRFJfTEVOKSB7
DQorCQlyID0gRENSWVBUT1JfZGVjcnlwdF9oZHIoY2QsIGVuY2hkciwgaGRyLCBwYXJhbXMpOw0K
Kw0KKwkJLy9EQ1JZUFRPUl9kZWNyeXB0X3NlY3RvcihjZCwgaGRyLCAxNjM4MCk7DQorCX0NCisN
CisJaWYgKHIgPCAwKQ0KKwkJbWVtc2V0KGhkciwgMCwgc2l6ZW9mICgqaGRyKSk7DQorDQorCWZy
ZWUoZW5jaGRyKTsNCisJcmV0dXJuIHI7DQorfQ0KKw0KKy8vIFRPRE86IHNob3VsZCBJIHVzZSB4
dHMtcGxhaW42NCwgb3IgcG9zc2libHkgeHRzLXBsYWluPw0KZGlmZiAtLWdpdCBhL2xpYi9kY3J5
cHRvci9kY3J5cHRvci5oIGIvbGliL2RjcnlwdG9yL2RjcnlwdG9yLmgNCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0DQppbmRleCAwMDAwMDAwMC4uNTE4ZGRiNzMNCi0tLSAvZGV2L251bGwNCisrKyBiL2xp
Yi9kY3J5cHRvci9kY3J5cHRvci5oDQpAQCAtMCwwICsxLDY2IEBADQorLyoNCisgKiBEaXNrQ3J5
cHRvci1jb21wYXRpYmxlIGhlYWRlciBkZWZpbml0aW9uDQorICoNCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgTWF0ZXVzeiBKb8WEY3p5aw0KKyAqDQorICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCisgKiB2
ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4NCisgKg0KKyAqIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCisgKiBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKyAqDQorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYw0KKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUNCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLg0KKyAqLw0KKw0KKyNp
Zm5kZWYgX0NSWVBUU0VUVVBfRENSWVBUT1JfSA0KKyNkZWZpbmUgX0NSWVBUU0VUVVBfRENSWVBU
T1JfSA0KKw0KKyNkZWZpbmUgRENSWVBUT1JfSERSX0xFTiAgICAyMDQ4DQorI2RlZmluZSBEQ1JZ
UFRPUl9TQUxUX0xFTiA2NA0KKw0KK3N0cnVjdCBkY3J5cHRvcl9lbmNoZHIgew0KKwljaGFyIHNh
bHRbRENSWVBUT1JfU0FMVF9MRU5dOw0KKwljaGFyIGVuY3J5cHRlZFtEQ1JZUFRPUl9IRFJfTEVO
IC0gRENSWVBUT1JfU0FMVF9MRU5dOw0KK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOw0K
Kw0KKyNkZWZpbmUgRENSWVBUT1JfS0VZX0xFTiA2NA0KKy8vIEhlYWRlciBwcm92aWRlcyBzcGFj
ZSBmb3Igc2VwYXJhdGUga2V5cyBmb3IgNCBjaGFpbmVkIGNpcGhlcnMNCisjZGVmaW5lIERDUllQ
VE9SX01BWF9LRVlTIDQNCisjZGVmaW5lIERDUllQVE9SX01BWF9DSEFJTkVEX0tFWVNfTEVOIERD
UllQVE9SX0hEUl9LRVlfTEVOICogRENSWVBUT1JfTUFYX0tFWVMNCisNCitzdHJ1Y3QgZGNyeXB0
b3JfcGhkciB7DQorCWNoYXIgX3RyYXNoW0RDUllQVE9SX1NBTFRfTEVOXTsNCisJY2hhciBzaWdu
YXR1cmVbNF07DQorCXVpbnQzMl90IGNyYzMyOw0KKwl1aW50MTZfdCBoZWFkZXJfdmVyc2lvbjsN
CisJdWludDMyX3QgZmxhZ3M7DQorCXVpbnQzMl90IHV1aWQ7DQorDQorCXVpbnQzMl90IGFsZ19p
ZDsNCisJY2hhciBrZXlbRENSWVBUT1JfTUFYX0tFWVNdW0RDUllQVE9SX0tFWV9MRU5dOw0KKwl1
aW50MzJfdCBwcmV2aW91c19hbGdfaWQ7DQorCWNoYXIgcHJldmlvdXNfa2V5W0RDUllQVE9SX01B
WF9LRVlTXVtEQ1JZUFRPUl9LRVlfTEVOXTsNCisNCisJdWludDY0X3QgcmVsb2NhdGlvbl9vZmZz
ZXQ7DQorCXVpbnQ2NF90IGRhdGFfc2l6ZTsNCisJdWludDY0X3QgZW5jcnlwdGVkX3NpemU7DQor
CXVpbnQ4X3Qgd2lwZV9tb2RlOw0KKw0KKwljaGFyIHBhZGRpbmdbMTQyMV07DQorfSBfX2F0dHJp
YnV0ZV9fKChfX3BhY2tlZF9fKSk7DQorDQorDQorc3RydWN0IGNyeXB0X2RldmljZTsNCitzdHJ1
Y3QgY3J5cHRfcGFyYW1zX2RjcnlwdG9yOw0KKw0KK2ludCBEQ1JZUFRPUl9yZWFkX3BoZHIoc3Ry
dWN0IGNyeXB0X2RldmljZSAqY2QsDQorCQkgICAgIHN0cnVjdCBkY3J5cHRvcl9waGRyICpoZHIs
DQorCQkgICAgIHN0cnVjdCBjcnlwdF9wYXJhbXNfZGNyeXB0b3IgKnBhcmFtcyk7DQorDQorI2Vu
ZGlmDQpkaWZmIC0tZ2l0IGEvbGliL2xpYmNyeXB0c2V0dXAuaCBiL2xpYi9saWJjcnlwdHNldHVw
LmgNCmluZGV4IDRiNjZmZTA0Li4xZWZiMzg4NiAxMDA2NDQNCi0tLSBhL2xpYi9saWJjcnlwdHNl
dHVwLmgNCisrKyBiL2xpYi9saWJjcnlwdHNldHVwLmgNCkBAIC00MjEsNiArNDIxLDggQEAgaW50
IGNyeXB0X2dldF9tZXRhZGF0YV9zaXplKHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNkLA0KICNkZWZp
bmUgQ1JZUFRfVkVSSVRZICJWRVJJVFkiDQogLyoqIFRDUllQVCAoVHJ1ZUNyeXB0LWNvbXBhdGli
bGUgYW5kIFZlcmFDcnlwdC1jb21wYXRpYmxlKSBtb2RlICovDQogI2RlZmluZSBDUllQVF9UQ1JZ
UFQgIlRDUllQVCINCisvKiogRGlza0NyeXB0b3IgKi8NCisjZGVmaW5lIENSWVBUX0RDUllQVE9S
ICJEQ1JZUFRPUiINCiAvKiogSU5URUdSSVRZIGRtLWludGVncml0eSBkZXZpY2UgKi8NCiAjZGVm
aW5lIENSWVBUX0lOVEVHUklUWSAiSU5URUdSSVRZIg0KIC8qKiBCSVRMSyAoQml0TG9ja2VyLWNv
bXBhdGlibGUgbW9kZSkgKi8NCkBAIC01NTMsNiArNTU1LDIzIEBAIHN0cnVjdCBjcnlwdF9wYXJh
bXNfdGNyeXB0IHsNCiAgKi8NCiAjZGVmaW5lIENSWVBUX1RDUllQVF9WRVJBX01PREVTICAgICAg
KDEgPDwgNCkNCiANCisvKioNCisgKg0KKyAqIFN0cnVjdHVyZSB1c2VkIGFzIHBhcmFtZXRlciBm
b3IgRGlza0NyeXB0b3IgZGV2aWNlIHR5cGUuDQorICoNCisgKiBAc2VlIGNyeXB0X2xvYWQNCisg
Kg0KKyAqLw0KK3N0cnVjdCBjcnlwdF9wYXJhbXNfZGNyeXB0b3Igew0KKwljb25zdCBjaGFyICpw
YXNzcGhyYXNlOyAgICAvKio8IHBhc3NwaHJhc2UgdG8gdW5sb2NrIGhlYWRlciAoaW5wdXQgb25s
eSkgKi8NCisJc2l6ZV90IHBhc3NwaHJhc2Vfc2l6ZTsgICAgLyoqPCBwYXNzcGhyYXNlIHNpemUg
KGlucHV0IG9ubHkpICovDQorCWNvbnN0IGNoYXIgKiprZXlmaWxlczsgICAgIC8qKjwgTk9UIElN
UExFTUVOVEVEIFlFVCAqLw0KKwl1bnNpZ25lZCBpbnQga2V5ZmlsZXNfY291bnQ7LyoqPCBOT1Qg
SU1QTEVNRU5URUQgWUVUICovDQorCWNvbnN0IGNoYXIgKmNpcGhlcjsgICAgICAgIC8qKjwgY2lw
aGVyIGNoYWluIGMxWy1jMlstYzNdXSAqLw0KKwlzaXplX3Qga2V5X3NpemU7ICAgICAgICAgICAv
Kio8IGtleSBzaXplIGluIGJ5dGVzICh0aGUgd2hvbGUgY2hhaW4pICovDQorCXVpbnQzMl90IGZs
YWdzOyAgICAgICAgICAgIC8qKjwgQ1JZUFRfRElTS0NSWVBUT1IqIGZsYWdzICovDQorfTsNCisN
CiAvKioNCiAgKg0KICAqIFN0cnVjdHVyZSB1c2VkIGFzIHBhcmFtZXRlciBmb3IgZG0taW50ZWdy
aXR5IGRldmljZSB0eXBlLg0KQEAgLTIyNTYsNyArMjI3NSw3IEBAIGludCBjcnlwdF90b2tlbl9y
ZWdpc3Rlcihjb25zdCBjcnlwdF90b2tlbl9oYW5kbGVyICpoYW5kbGVyKTsNCiANCiAvKioNCiAg
KiBSZXBvcnQgZXh0ZXJuYWwgdG9rZW4gaGFuZGxlcnMgKHBsdWdpbnMpIHN1cHBvcnQNCi0gDQor
DQogICogQHJldHVybiBAZSAwIHdoZW4gZW5hYmxlZCBvciBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBv
dGhlcndpc2UuDQogICovDQogaW50IGNyeXB0X3Rva2VuX2V4dGVybmFsX3N1cHBvcnQodm9pZCk7
DQpkaWZmIC0tZ2l0IGEvbGliL3NldHVwLmMgYi9saWIvc2V0dXAuYw0KaW5kZXggYTA0NGI4Nzgu
LmExZjk3YjhhIDEwMDY0NA0KLS0tIGEvbGliL3NldHVwLmMNCisrKyBiL2xpYi9zZXR1cC5jDQpA
QCAtMzQsNiArMzQsNyBAQA0KICNpbmNsdWRlICJsb29wYWVzL2xvb3BhZXMuaCINCiAjaW5jbHVk
ZSAidmVyaXR5L3Zlcml0eS5oIg0KICNpbmNsdWRlICJ0Y3J5cHQvdGNyeXB0LmgiDQorI2luY2x1
ZGUgImRjcnlwdG9yL2RjcnlwdG9yLmgiDQogI2luY2x1ZGUgImludGVncml0eS9pbnRlZ3JpdHku
aCINCiAjaW5jbHVkZSAiYml0bGsvYml0bGsuaCINCiAjaW5jbHVkZSAidXRpbHNfZGV2aWNlX2xv
Y2tpbmcuaCINCkBAIC0xMDIsNiArMTAzLDEwIEBAIHN0cnVjdCBjcnlwdF9kZXZpY2Ugew0KIAkJ
c3RydWN0IGNyeXB0X3BhcmFtc190Y3J5cHQgcGFyYW1zOw0KIAkJc3RydWN0IHRjcnlwdF9waGRy
IGhkcjsNCiAJfSB0Y3J5cHQ7DQorCXN0cnVjdCB7IC8qIHVzZWQgaW4gQ1JZUFRfRENSWVBUT1Ig
Ki8NCisJCXN0cnVjdCBjcnlwdF9wYXJhbXNfZGNyeXB0b3IgcGFyYW1zOw0KKwkJc3RydWN0IGRj
cnlwdG9yX3BoZHIgaGRyOw0KKwl9IGRjcnlwdG9yOw0KIAlzdHJ1Y3QgeyAvKiB1c2VkIGluIENS
WVBUX0lOVEVHUklUWSAqLw0KIAkJc3RydWN0IGNyeXB0X3BhcmFtc19pbnRlZ3JpdHkgcGFyYW1z
Ow0KIAkJc3RydWN0IHZvbHVtZV9rZXkgKmpvdXJuYWxfbWFjX2tleTsNCkBAIC0zMTMsNiArMzE4
LDExIEBAIHN0YXRpYyBpbnQgaXNUQ1JZUFQoY29uc3QgY2hhciAqdHlwZSkNCiAJcmV0dXJuICh0
eXBlICYmICFzdHJjbXAoQ1JZUFRfVENSWVBULCB0eXBlKSk7DQogfQ0KIA0KK3N0YXRpYyBpbnQg
aXNEQ1JZUFRPUihjb25zdCBjaGFyICp0eXBlKQ0KK3sNCisJcmV0dXJuICh0eXBlICYmICFzdHJj
bXAoQ1JZUFRfRENSWVBUT1IsIHR5cGUpKTsNCit9DQorDQogc3RhdGljIGludCBpc0lOVEVHUklU
WShjb25zdCBjaGFyICp0eXBlKQ0KIHsNCiAJcmV0dXJuICh0eXBlICYmICFzdHJjbXAoQ1JZUFRf
SU5URUdSSVRZLCB0eXBlKSk7DQpAQCAtNjU4LDYgKzY2OCw3IEBAIGludCBjcnlwdF9zZXRfZGF0
YV9kZXZpY2Uoc3RydWN0IGNyeXB0X2RldmljZSAqY2QsIGNvbnN0IGNoYXIgKmRldmljZSkNCiAN
CiAJaWYgKCFpc0xVS1MxKGNkLT50eXBlKSAmJiAhaXNMVUtTMihjZC0+dHlwZSkgJiYgIWlzVkVS
SVRZKGNkLT50eXBlKSAmJg0KIAkgICAgIWlzSU5URUdSSVRZKGNkLT50eXBlKSAmJiAhaXNUQ1JZ
UFQoY2QtPnR5cGUpKSB7DQorICAgICAgICAgICAgICAgIC8vIERpc2tDcnlwdG9yIC0gbm8gc3Vw
cG9ydA0KIAkJbG9nX2VycihjZCwgXygiVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBm
b3IgdGhpcyBkZXZpY2UgdHlwZS4iKSk7DQogCQlyZXR1cm4gLUVJTlZBTDsNCiAJfQ0KQEAgLTg3
MCw2ICs4ODEsMzYgQEAgc3RhdGljIGludCBfY3J5cHRfbG9hZF90Y3J5cHQoc3RydWN0IGNyeXB0
X2RldmljZSAqY2QsIHN0cnVjdCBjcnlwdF9wYXJhbXNfdGNyeXANCiAJcmV0dXJuIHI7DQogfQ0K
IA0KK3N0YXRpYyBpbnQgX2NyeXB0X2xvYWRfZGNyeXB0b3Ioc3RydWN0IGNyeXB0X2RldmljZSAq
Y2QsIHN0cnVjdCBjcnlwdF9wYXJhbXNfZGNyeXB0b3IgKnBhcmFtcykNCit7DQorCWludCByOw0K
Kw0KKwlpZiAoIXBhcmFtcykNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlyID0gaW5pdF9jcnlw
dG8oY2QpOw0KKwlpZiAociA8IDApDQorCQlyZXR1cm4gcjsNCisNCisJbWVtY3B5KCZjZC0+dS5k
Y3J5cHRvci5wYXJhbXMsIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsNCisNCisJciA9IERDUllQ
VE9SX3JlYWRfcGhkcihjZCwgJmNkLT51LmRjcnlwdG9yLmhkciwgJmNkLT51LmRjcnlwdG9yLnBh
cmFtcyk7DQorDQorCWNkLT51LmRjcnlwdG9yLnBhcmFtcy5wYXNzcGhyYXNlID0gTlVMTDsNCisJ
Y2QtPnUuZGNyeXB0b3IucGFyYW1zLnBhc3NwaHJhc2Vfc2l6ZSA9IDA7DQorCS8vY2QtPnUuZGNy
eXB0b3IucGFyYW1zLmtleWZpbGVzID0gTlVMTDsNCisJLy9jZC0+dS5kY3J5cHRvci5wYXJhbXMu
a2V5ZmlsZXNfY291bnQgPSAwOw0KKw0KKwlpZiAociA8IDApDQorCQlyZXR1cm4gcjsNCisNCisg
ICAgICAgIC8vID8/Pw0KKwlpZiAoIWNkLT50eXBlICYmICEoY2QtPnR5cGUgPSBzdHJkdXAoQ1JZ
UFRfRENSWVBUT1IpKSkNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlyZXR1cm4gcjsNCit9DQor
DQogc3RhdGljIGludCBfY3J5cHRfbG9hZF92ZXJpdHkoc3RydWN0IGNyeXB0X2RldmljZSAqY2Qs
IHN0cnVjdCBjcnlwdF9wYXJhbXNfdmVyaXR5ICpwYXJhbXMpDQogew0KIAlpbnQgcjsNCkBAIC0x
MDM4LDYgKzEwNzksMTIgQEAgaW50IGNyeXB0X2xvYWQoc3RydWN0IGNyeXB0X2RldmljZSAqY2Qs
DQogCQkJcmV0dXJuIC1FSU5WQUw7DQogCQl9DQogCQlyID0gX2NyeXB0X2xvYWRfdGNyeXB0KGNk
LCBwYXJhbXMpOw0KKwl9IGVsc2UgaWYgKGlzRENSWVBUT1IocmVxdWVzdGVkX3R5cGUpKSB7DQor
CQlpZiAoY2QtPnR5cGUgJiYgIWlzRENSWVBUT1IoY2QtPnR5cGUpKSB7DQorCQkJbG9nX2RiZyhj
ZCwgIkNvbnRleHQgaXMgYWxyZWFkeSBpbml0aWFsaXplZCB0byB0eXBlICVzIiwgY2QtPnR5cGUp
Ow0KKwkJCXJldHVybiAtRUlOVkFMOw0KKwkJfQ0KKwkJciA9IF9jcnlwdF9sb2FkX2RjcnlwdG9y
KGNkLCBwYXJhbXMpOw0KIAl9IGVsc2UgaWYgKGlzSU5URUdSSVRZKHJlcXVlc3RlZF90eXBlKSkg
ew0KIAkJaWYgKGNkLT50eXBlICYmICFpc0lOVEVHUklUWShjZC0+dHlwZSkpIHsNCiAJCQlsb2df
ZGJnKGNkLCAiQ29udGV4dCBpcyBhbHJlYWR5IGluaXRpYWxpemVkIHRvIHR5cGUgJXMiLCBjZC0+
dHlwZSk7DQpAQCAtMjg0MSw3ICsyODg4LDcgQEAgaW50IGNyeXB0X3Jlc2l6ZShzdHJ1Y3QgY3J5
cHRfZGV2aWNlICpjZCwgY29uc3QgY2hhciAqbmFtZSwgdWludDY0X3QgbmV3X3NpemUpDQogCWlm
ICghY2QgfHwgIWNkLT50eXBlIHx8ICFuYW1lKQ0KIAkJcmV0dXJuIC1FSU5WQUw7DQogDQotCWlm
IChpc1RDUllQVChjZC0+dHlwZSkgfHwgaXNCSVRMSyhjZC0+dHlwZSkpIHsNCisJaWYgKGlzRENS
WVBUT1IoY2QtPnR5cGUpIHx8IGlzVENSWVBUKGNkLT50eXBlKSB8fCBpc0JJVExLKGNkLT50eXBl
KSkgew0KIAkJbG9nX2VycihjZCwgXygiVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBm
b3IgdGhpcyBkZXZpY2UgdHlwZS4iKSk7DQogCQlyZXR1cm4gLUVOT1RTVVA7DQogCX0NCkBAIC00
NDgxLDYgKzQ1MjgsMTEgQEAgaW50IGNyeXB0X2FjdGl2YXRlX2J5X3ZvbHVtZV9rZXkoc3RydWN0
IGNyeXB0X2RldmljZSAqY2QsDQogCQkJcmV0dXJuIDA7DQogCQlyID0gVENSWVBUX2FjdGl2YXRl
KGNkLCBuYW1lLCAmY2QtPnUudGNyeXB0LmhkciwNCiAJCQkJICAgICZjZC0+dS50Y3J5cHQucGFy
YW1zLCBmbGFncyk7DQorDQorCX0gZWxzZSBpZiAoaXNEQ1JZUFRPUihjZC0+dHlwZSkpIHsNCisg
ICAgICAgICAgICAgICAgLy8gVE9ETw0KKw0KKw0KIAl9IGVsc2UgaWYgKGlzSU5URUdSSVRZKGNk
LT50eXBlKSkgew0KIAkJaWYgKCFuYW1lKQ0KIAkJCXJldHVybiAwOw0KQEAgLTQ2MzIsNiArNDY4
NCw3IEBAIGludCBjcnlwdF9kZWFjdGl2YXRlX2J5X25hbWUoc3RydWN0IGNyeXB0X2RldmljZSAq
Y2QsIGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQzMl90DQogCQkJCXIgPSBMVUtTMl9kZWFjdGl2YXRl
KGNkLCBuYW1lLCBoZHIyLCAmZG1kLCBmbGFncyk7DQogCQkJZWxzZSBpZiAoaXNUQ1JZUFQoY2Qt
PnR5cGUpKQ0KIAkJCQlyID0gVENSWVBUX2RlYWN0aXZhdGUoY2QsIG5hbWUsIGZsYWdzKTsNCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPDQogCQkJZWxzZQ0KIAkJCQlyID0gZG1fcmVt
b3ZlX2RldmljZShjZCwgbmFtZSwgZmxhZ3MpOw0KIAkJCWlmIChyIDwgMCAmJiBjcnlwdF9zdGF0
dXMoY2QsIG5hbWUpID09IENSWVBUX0JVU1kpIHsNCkBAIC00Njg2LDYgKzQ3MzksOCBAQCBpbnQg
Y3J5cHRfZ2V0X2FjdGl2ZV9kZXZpY2Uoc3RydWN0IGNyeXB0X2RldmljZSAqY2QsIGNvbnN0IGNo
YXIgKm5hbWUsDQogCWlmIChjZCAmJiBpc1RDUllQVChjZC0+dHlwZSkpIHsNCiAJCWNhZC0+b2Zm
c2V0CT0gVENSWVBUX2dldF9kYXRhX29mZnNldChjZCwgJmNkLT51LnRjcnlwdC5oZHIsICZjZC0+
dS50Y3J5cHQucGFyYW1zKTsNCiAJCWNhZC0+aXZfb2Zmc2V0CT0gVENSWVBUX2dldF9pdl9vZmZz
ZXQoY2QsICZjZC0+dS50Y3J5cHQuaGRyLCAmY2QtPnUudGNyeXB0LnBhcmFtcyk7DQorDQorICAg
ICAgICAvLyBUT0RPDQogCX0gZWxzZSB7DQogCQl3aGlsZSAodGd0KSB7DQogCQkJaWYgKHRndC0+
dHlwZSA9PSBETV9DUllQVCAmJiAobWluX29mZnNldCA+IHRndC0+dS5jcnlwdC5vZmZzZXQpKSB7
DQpAQCAtNDc3OCw2ICs0ODMzLDggQEAgaW50IGNyeXB0X3ZvbHVtZV9rZXlfZ2V0KHN0cnVjdCBj
cnlwdF9kZXZpY2UgKmNkLA0KIAkJCQlwYXNzcGhyYXNlLCBwYXNzcGhyYXNlX3NpemUsICZ2ayk7
DQogCX0gZWxzZSBpZiAoaXNUQ1JZUFQoY2QtPnR5cGUpKSB7DQogCQlyID0gVENSWVBUX2dldF92
b2x1bWVfa2V5KGNkLCAmY2QtPnUudGNyeXB0LmhkciwgJmNkLT51LnRjcnlwdC5wYXJhbXMsICZ2
ayk7DQorCX0gZWxzZSBpZiAoaXNEQ1JZUFRPUihjZC0+dHlwZSkpIHsNCisgICAgICAgICAgICAg
ICAgLy8gVE9ETw0KIAl9IGVsc2UgaWYgKGlzVkVSSVRZKGNkLT50eXBlKSkgew0KIAkJLyogdm9s
dW1lX2tleSA9PSByb290IGhhc2ggKi8NCiAJCWlmIChjZC0+dS52ZXJpdHkucm9vdF9oYXNoKSB7
DQpAQCAtNDk5MCw2ICs1MDQ3LDcgQEAgaW50IGNyeXB0X2R1bXAoc3RydWN0IGNyeXB0X2Rldmlj
ZSAqY2QpDQogCQlyZXR1cm4gX3Zlcml0eV9kdW1wKGNkKTsNCiAJZWxzZSBpZiAoaXNUQ1JZUFQo
Y2QtPnR5cGUpKQ0KIAkJcmV0dXJuIFRDUllQVF9kdW1wKGNkLCAmY2QtPnUudGNyeXB0Lmhkciwg
JmNkLT51LnRjcnlwdC5wYXJhbXMpOw0KKyAgICAgICAgLy8gVE9ETw0KIAllbHNlIGlmIChpc0lO
VEVHUklUWShjZC0+dHlwZSkpDQogCQlyZXR1cm4gSU5URUdSSVRZX2R1bXAoY2QsIGNyeXB0X2Rh
dGFfZGV2aWNlKGNkKSwgMCk7DQogCWVsc2UgaWYgKGlzQklUTEsoY2QtPnR5cGUpKQ0KQEAgLTUw
NTUsNiArNTExMywxMCBAQCBjb25zdCBjaGFyICpjcnlwdF9nZXRfY2lwaGVyKHN0cnVjdCBjcnlw
dF9kZXZpY2UgKmNkKQ0KIAlpZiAoaXNUQ1JZUFQoY2QtPnR5cGUpKQ0KIAkJcmV0dXJuIGNkLT51
LnRjcnlwdC5wYXJhbXMuY2lwaGVyOw0KIA0KKwlpZiAoaXNEQ1JZUFRPUihjZC0+dHlwZSkpDQor
ICAgICAgICAgICAgICAgIC8vIFRPRE8NCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQor
DQogCWlmIChpc0JJVExLKGNkLT50eXBlKSkNCiAJCXJldHVybiBjZC0+dS5iaXRsay5wYXJhbXMu
Y2lwaGVyOw0KIA0KQEAgLTUwODgsNiArNTE1MCwxMCBAQCBjb25zdCBjaGFyICpjcnlwdF9nZXRf
Y2lwaGVyX21vZGUoc3RydWN0IGNyeXB0X2RldmljZSAqY2QpDQogCWlmIChpc1RDUllQVChjZC0+
dHlwZSkpDQogCQlyZXR1cm4gY2QtPnUudGNyeXB0LnBhcmFtcy5tb2RlOw0KIA0KKwlpZiAoaXNE
Q1JZUFRPUihjZC0+dHlwZSkpDQorICAgICAgICAgICAgICAgIC8vIFRPRE8NCisgICAgICAgICAg
ICAgICAgcmV0dXJuICJ4dHMtcGxhaW42NCI7DQorDQogCWlmIChpc0JJVExLKGNkLT50eXBlKSkN
CiAJCXJldHVybiBjZC0+dS5iaXRsay5wYXJhbXMuY2lwaGVyX21vZGU7DQogDQpAQCAtNTIzMSw2
ICs1Mjk3LDEwIEBAIGludCBjcnlwdF9nZXRfdm9sdW1lX2tleV9zaXplKHN0cnVjdCBjcnlwdF9k
ZXZpY2UgKmNkKQ0KIAlpZiAoaXNUQ1JZUFQoY2QtPnR5cGUpKQ0KIAkJcmV0dXJuIGNkLT51LnRj
cnlwdC5wYXJhbXMua2V5X3NpemU7DQogDQorCWlmIChpc0RDUllQVE9SKGNkLT50eXBlKSkNCisg
ICAgICAgICAgICAgICAgLy8gVE9ETw0KKyAgICAgICAgICAgICAgICByZXR1cm4gNTEyOw0KKw0K
IAlpZiAoaXNCSVRMSyhjZC0+dHlwZSkpDQogCQlyZXR1cm4gY2QtPnUuYml0bGsucGFyYW1zLmtl
eV9zaXplIC8gODsNCiANCkBAIC01NDE4LDYgKzU0ODgsOCBAQCB1aW50NjRfdCBjcnlwdF9nZXRf
ZGF0YV9vZmZzZXQoc3RydWN0IGNyeXB0X2RldmljZSAqY2QpDQogCWlmIChpc0JJVExLKGNkLT50
eXBlKSkNCiAJCXJldHVybiBjZC0+dS5iaXRsay5wYXJhbXMudm9sdW1lX2hlYWRlcl9zaXplIC8g
U0VDVE9SX1NJWkU7DQogDQorICAgICAgICAvLyBUT0RPDQorDQogCXJldHVybiBjZC0+ZGF0YV9v
ZmZzZXQ7DQogfQ0KIA0KQEAgLTU0MzUsNiArNTUwNyw4IEBAIHVpbnQ2NF90IGNyeXB0X2dldF9p
dl9vZmZzZXQoc3RydWN0IGNyeXB0X2RldmljZSAqY2QpDQogCWlmIChpc1RDUllQVChjZC0+dHlw
ZSkpDQogCQlyZXR1cm4gVENSWVBUX2dldF9pdl9vZmZzZXQoY2QsICZjZC0+dS50Y3J5cHQuaGRy
LCAmY2QtPnUudGNyeXB0LnBhcmFtcyk7DQogDQorICAgICAgICAvLyBUT0RPDQorDQogCXJldHVy
biAwOw0KIH0NCiANCkBAIC01NjUzLDYgKzU3MjcsOSBAQCB2b2lkICpjcnlwdF9nZXRfaGRyKHN0
cnVjdCBjcnlwdF9kZXZpY2UgKmNkLCBjb25zdCBjaGFyICp0eXBlKQ0KIAlpZiAoaXNUQ1JZUFQo
Y2QtPnR5cGUpKQ0KIAkJcmV0dXJuICZjZC0+dS50Y3J5cHQ7DQogDQorCWlmIChpc0RDUllQVE9S
KGNkLT50eXBlKSkNCisJCXJldHVybiAmY2QtPnUuZGNyeXB0b3I7DQorDQogCXJldHVybiBOVUxM
Ow0KIH0NCiANCmRpZmYgLS1naXQgYS9zcmMvY3J5cHRzZXR1cC5jIGIvc3JjL2NyeXB0c2V0dXAu
Yw0KaW5kZXggZjMyMWQ4ZDIuLmU4OTIxZGJkIDEwMDY0NA0KLS0tIGEvc3JjL2NyeXB0c2V0dXAu
Yw0KKysrIGIvc3JjL2NyeXB0c2V0dXAuYw0KQEAgLTQ3OCw2ICs0NzgsNzMgQEAgb3V0Og0KIAly
ZXR1cm4gcjsNCiB9DQogDQorc3RhdGljIGludCBkY3J5cHRvcl9sb2FkKHN0cnVjdCBjcnlwdF9k
ZXZpY2UgKmNkLCBzdHJ1Y3QgY3J5cHRfcGFyYW1zX2RjcnlwdG9yICpwYXJhbXMpDQorew0KKwlp
bnQgciwgdHJpZXMsIGVwZXJtID0gMDsNCisNCisJdHJpZXMgPSBfc2V0X3RyaWVzX3R0eSgpOw0K
KwlkbyB7DQorCQlyID0gdG9vbHNfZ2V0X2tleShOVUxMLCBDT05TVF9DQVNUKGNoYXIqKikmcGFy
YW1zLT5wYXNzcGhyYXNlLA0KKwkJCQkgICZwYXJhbXMtPnBhc3NwaHJhc2Vfc2l6ZSwgMCwgMCwg
a2V5ZmlsZV9zdGRpbiwgQVJHX1VJTlQzMihPUFRfVElNRU9VVF9JRCksDQorCQkJCSBfdmVyaWZ5
X3Bhc3NwaHJhc2UoMCksIDAsIGNkKTsNCisJCWlmIChyIDwgMCkNCisJCQljb250aW51ZTsNCisN
CisJCXIgPSBjcnlwdF9sb2FkKGNkLCBDUllQVF9EQ1JZUFRPUiwgcGFyYW1zKTsNCisNCisJCWlm
IChyID09IC1FUEVSTSkgew0KKwkJCWxvZ19lcnIoXygiTm8gZGV2aWNlIGhlYWRlciBkZXRlY3Rl
ZCB3aXRoIHRoaXMgcGFzc3BocmFzZS4iKSk7DQorCQkJZXBlcm0gPSAxOw0KKwkJfQ0KKw0KKwkJ
aWYgKHIgPCAwKSB7DQorCQkJY3J5cHRfc2FmZV9mcmVlKENPTlNUX0NBU1QoY2hhciopcGFyYW1z
LT5wYXNzcGhyYXNlKTsNCisJCQlwYXJhbXMtPnBhc3NwaHJhc2UgPSBOVUxMOw0KKwkJCXBhcmFt
cy0+cGFzc3BocmFzZV9zaXplID0gMDsNCisJCX0NCisJCWNoZWNrX3NpZ25hbCgmcik7DQorCX0g
d2hpbGUgKChyID09IC1FUEVSTSB8fCByID09IC1FUkFOR0UpICYmICgtLXRyaWVzID4gMCkpOw0K
Kw0KKwkvKiBSZXBvcnQgd3JvbmcgcGFzc3BocmFzZSBpZiBhdCBsZWFzdCBvbmUgdHJ5IGZhaWxl
ZCAqLw0KKwlpZiAoZXBlcm0gJiYgciA9PSAtRVBJUEUpDQorCQlyID0gLUVQRVJNOw0KKw0KKwly
ZXR1cm4gcjsNCit9DQorDQorc3RhdGljIGludCBhY3Rpb25fb3Blbl9kY3J5cHRvcih2b2lkKQ0K
K3sNCisJc3RydWN0IGNyeXB0X2RldmljZSAqY2QgPSBOVUxMOw0KKwlzdHJ1Y3QgY3J5cHRfcGFy
YW1zX2RjcnlwdG9yIHBhcmFtcyA9IHsNCisJCS5rZXlmaWxlcyA9IE5VTEwsDQorCQkua2V5Zmls
ZXNfY291bnQgPSAwLA0KKwkJLmZsYWdzID0gMCwNCisJCS5jaXBoZXIgPSBBUkdfU1RSKE9QVF9D
SVBIRVJfSUQpLA0KKwl9Ow0KKwljb25zdCBjaGFyICphY3RpdmF0ZWRfbmFtZTsNCisJdWludDMy
X3QgYWN0aXZhdGVfZmxhZ3MgPSAwOw0KKwlpbnQgcjsNCisNCisJYWN0aXZhdGVkX25hbWUgPSBB
UkdfU0VUKE9QVF9URVNUX1BBU1NQSFJBU0VfSUQpID8gTlVMTCA6IGFjdGlvbl9hcmd2WzFdOw0K
Kw0KKwlyID0gY3J5cHRfaW5pdF9kYXRhX2RldmljZSgmY2QsIEFSR19TVFIoT1BUX0hFQURFUl9J
RCkgPzogYWN0aW9uX2FyZ3ZbMF0sIGFjdGlvbl9hcmd2WzBdKTsNCisJaWYgKHIgPCAwKQ0KKwkJ
Z290byBvdXQ7DQorDQorCXIgPSBkY3J5cHRvcl9sb2FkKGNkLCAmcGFyYW1zKTsNCisJaWYgKHIg
PCAwKQ0KKwkJZ290byBvdXQ7DQorDQorCV9zZXRfYWN0aXZhdGlvbl9mbGFncygmYWN0aXZhdGVf
ZmxhZ3MpOw0KKw0KKwlpZiAoYWN0aXZhdGVkX25hbWUpDQorCQlyID0gY3J5cHRfYWN0aXZhdGVf
Ynlfdm9sdW1lX2tleShjZCwgYWN0aXZhdGVkX25hbWUsIE5VTEwsIDAsIGFjdGl2YXRlX2ZsYWdz
KTsNCitvdXQ6DQorCWNyeXB0X2ZyZWUoY2QpOw0KKwljcnlwdF9zYWZlX2ZyZWUoQ09OU1RfQ0FT
VChjaGFyKilwYXJhbXMucGFzc3BocmFzZSk7DQorCXJldHVybiByOw0KK30NCisNCiBzdGF0aWMg
aW50IGFjdGlvbl9vcGVuX2JpdGxrKHZvaWQpDQogew0KIAlzdHJ1Y3QgY3J5cHRfZGV2aWNlICpj
ZCA9IE5VTEw7DQpAQCAtMjM5OSw2ICsyNDY2LDEwIEBAIHN0YXRpYyBpbnQgYWN0aW9uX29wZW4o
dm9pZCkNCiAJCWlmIChhY3Rpb25fYXJnYyA8IDIgJiYgIUFSR19TRVQoT1BUX1RFU1RfUEFTU1BI
UkFTRV9JRCkpDQogCQkJZ290byBvdXQ7DQogCQlyZXR1cm4gYWN0aW9uX29wZW5fdGNyeXB0KCk7
DQorCX0gZWxzZSBpZiAoIXN0cmNtcChkZXZpY2VfdHlwZSwgImRjcnlwdG9yIikpIHsNCisJCWlm
IChhY3Rpb25fYXJnYyA8IDIgJiYgIUFSR19TRVQoT1BUX1RFU1RfUEFTU1BIUkFTRV9JRCkpDQor
CQkJZ290byBvdXQ7DQorCQlyZXR1cm4gYWN0aW9uX29wZW5fZGNyeXB0b3IoKTsNCiAJfSBlbHNl
IGlmICghc3RyY21wKGRldmljZV90eXBlLCAiYml0bGsiKSkgew0KIAkJaWYgKGFjdGlvbl9hcmdj
IDwgMiAmJiAhQVJHX1NFVChPUFRfVEVTVF9QQVNTUEhSQVNFX0lEKSkNCiAJCQlnb3RvIG91dDsN
CmRpZmYgLS1naXQgYS90ZXN0cy9kaXNrY3J5cHRvci9wYXNzd29yZC50eHQgYi90ZXN0cy9kaXNr
Y3J5cHRvci9wYXNzd29yZC50eHQNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw
MC4uMDBkZWRmNmINCi0tLSAvZGV2L251bGwNCisrKyBiL3Rlc3RzL2Rpc2tjcnlwdG9yL3Bhc3N3
b3JkLnR4dA0KQEAgLTAsMCArMSBAQA0KK2FiY2RlDQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGlza2Ny
eXB0b3Ivdm9sdW1lX2Flcy5iaW4gYi90ZXN0cy9kaXNrY3J5cHRvci92b2x1bWVfYWVzLmJpbg0K
bmV3IGZpbGUgbW9kZSAxMDA3NTUNCmluZGV4IDAwMDAwMDAwLi5jMmQwNTVlOA0KQmluYXJ5IGZp
bGVzIC9kZXYvbnVsbCBhbmQgYi90ZXN0cy9kaXNrY3J5cHRvci92b2x1bWVfYWVzLmJpbiBkaWZm
ZXINCmRpZmYgLS1naXQgYS90ZXN0cy9kaXNrY3J5cHRvci92b2x1bWVfYWVzX3R3b2Zpc2guYmlu
IGIvdGVzdHMvZGlza2NyeXB0b3Ivdm9sdW1lX2Flc190d29maXNoLmJpbg0KbmV3IGZpbGUgbW9k
ZSAxMDA3NTUNCmluZGV4IDAwMDAwMDAwLi5jM2UwMTZjNg0KQmluYXJ5IGZpbGVzIC9kZXYvbnVs
bCBhbmQgYi90ZXN0cy9kaXNrY3J5cHRvci92b2x1bWVfYWVzX3R3b2Zpc2guYmluIGRpZmZlcg0K
ZGlmZiAtLWdpdCBhL3Rlc3RzL2Rpc2tjcnlwdG9yL3ZvbHVtZV9hZXNfdHdvZmlzaF9zZXJwZW50
LmJpbiBiL3Rlc3RzL2Rpc2tjcnlwdG9yL3ZvbHVtZV9hZXNfdHdvZmlzaF9zZXJwZW50LmJpbg0K
bmV3IGZpbGUgbW9kZSAxMDA3NTUNCmluZGV4IDAwMDAwMDAwLi5lM2JjOTI1Mg0KQmluYXJ5IGZp
bGVzIC9kZXYvbnVsbCBhbmQgYi90ZXN0cy9kaXNrY3J5cHRvci92b2x1bWVfYWVzX3R3b2Zpc2hf
c2VycGVudC5iaW4gZGlmZmVyDQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGlza2NyeXB0b3Ivdm9sdW1l
X3NlcnBlbnQuYmluIGIvdGVzdHMvZGlza2NyeXB0b3Ivdm9sdW1lX3NlcnBlbnQuYmluDQpuZXcg
ZmlsZSBtb2RlIDEwMDc1NQ0KaW5kZXggMDAwMDAwMDAuLjZiNWZkMzY4DQpCaW5hcnkgZmlsZXMg
L2Rldi9udWxsIGFuZCBiL3Rlc3RzL2Rpc2tjcnlwdG9yL3ZvbHVtZV9zZXJwZW50LmJpbiBkaWZm
ZXINCmRpZmYgLS1naXQgYS90ZXN0cy9kaXNrY3J5cHRvci92b2x1bWVfc2VycGVudF9hZXMuYmlu
IGIvdGVzdHMvZGlza2NyeXB0b3Ivdm9sdW1lX3NlcnBlbnRfYWVzLmJpbg0KbmV3IGZpbGUgbW9k
ZSAxMDA3NTUNCmluZGV4IDAwMDAwMDAwLi5mMDVmNTcwZA0KQmluYXJ5IGZpbGVzIC9kZXYvbnVs
bCBhbmQgYi90ZXN0cy9kaXNrY3J5cHRvci92b2x1bWVfc2VycGVudF9hZXMuYmluIGRpZmZlcg0K
ZGlmZiAtLWdpdCBhL3Rlc3RzL2Rpc2tjcnlwdG9yL3ZvbHVtZV90d29maXNoLmJpbiBiL3Rlc3Rz
L2Rpc2tjcnlwdG9yL3ZvbHVtZV90d29maXNoLmJpbg0KbmV3IGZpbGUgbW9kZSAxMDA3NTUNCmlu
ZGV4IDAwMDAwMDAwLi42ZGZiNzk1Mg0KQmluYXJ5IGZpbGVzIC9kZXYvbnVsbCBhbmQgYi90ZXN0
cy9kaXNrY3J5cHRvci92b2x1bWVfdHdvZmlzaC5iaW4gZGlmZmVyDQpkaWZmIC0tZ2l0IGEvdGVz
dHMvZGlza2NyeXB0b3Ivdm9sdW1lX3R3b2Zpc2hfc2VycGVudC5iaW4gYi90ZXN0cy9kaXNrY3J5
cHRvci92b2x1bWVfdHdvZmlzaF9zZXJwZW50LmJpbg0KbmV3IGZpbGUgbW9kZSAxMDA3NTUNCmlu
ZGV4IDAwMDAwMDAwLi43MDRhZTFjNA0KQmluYXJ5IGZpbGVzIC9kZXYvbnVsbCBhbmQgYi90ZXN0
cy9kaXNrY3J5cHRvci92b2x1bWVfdHdvZmlzaF9zZXJwZW50LmJpbiBkaWZmZXINCi0tIA0KMi4y
NS4xDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRt
LWNyeXB0IG1haWxpbmcgbGlzdCAtLSBkbS1jcnlwdEBzYW91dC5kZQpUbyB1bnN1YnNjcmliZSBz
ZW5kIGFuIGVtYWlsIHRvIGRtLWNyeXB0LWxlYXZlQHNhb3V0LmRlCg==