From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v10,1/4] dmaengine: fsl-edma: extract common fsl-edma code (no changes in behavior intended) From: Angelo Dureghello Message-Id: <20180819172716.32304-1-angelo@sysam.it> Date: Sun, 19 Aug 2018 19:27:13 +0200 To: vinod.koul@linaro.org Cc: dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-m68k@vger.kernel.org, stefan@agner.ch, krzk@kernel.org, Angelo Dureghello List-ID: VGhpcyBwYXRjaCBhZGRzIGEgbmV3IGZzbC1lZG1hLWNvbW1vbiBtb2R1bGUgdG8gYWxsb3cgbmV3 Cm1jZi1lZG1hIG1vZHVsZSBjb2RlIHRvIHVzZSBtb3N0IG9mIHRoZSBmc2wtZWRtYSBjb2RlLgoK U2lnbmVkLW9mZi1ieTogQW5nZWxvIER1cmVnaGVsbG8gPGFuZ2Vsb0BzeXNhbS5pdD4KVGVzdGVk LWJ5OiBLcnp5c3p0b2YgS296bG93c2tpIDxrcnprQGtlcm5lbC5vcmc+Ci0tLQpDaGFuZ2VzIGZv ciB2MjoKLSBwYXRjaCBzcGxpdHRlZCBpbnRvIDQKLSBhZGQgbWNmLWVkbWEgYXMgbWluaW1hbCBk aWZmZXJlbnQgcGFydHMgZnJvbSBmc2wtZWRtYQoKQ2hhbmdlcyBmb3IgdjM6Cm5vbmUKCkNoYW5n ZXMgZm9yIHY0OgotIHBhdGNoIHNpbXBsaWZpZWQgZnJvbSA0LzQgaW50byAyLzIKLSBjb2xsZWN0 aW5nIGFsbCB0aGUgbWNmLWVkbWEtcmVsYXRlZCBjaGFuZ2VzCgpDaGFuZ2VzIGZvciB2NToKbm9u ZQoKQ2hhbmdlcyBmb3IgdjY6Ci0gYWRqdXN0ZWQgY29tbWVudCBoZWFkZXIKLSBmaXhlZCBiaXQg c2hpZnQgd2l0aCBCSVQoKQotIHdlIG5lZWQgdG8gZnJlZSB0aGUgaW50ZXJydXB0cyBhdCByZW1v dmUoKSwgc28gcmVtb3ZlZCBhbGwgZGV2bV8KICBpbnRlcnJ1cHQgcmVsYXRlZCBjYWxscwoKQ2hh bmdlcyBmb3Igdjc6Cm5vbmUKCkNoYW5nZXMgZm9yIHY4OgotIHBhdGNoIHJld3JpdHRlbiBmcm9t IHNjcmF0Y2gsIHNwbGl0dGVkIGludG8gMywgY29tbW9uIGNvZGUgaXNvbGF0ZWQsCiAgbWluaW1h bCBjaGFuZ2VzIGZyb20gdGhlIG9yaWdpbmFsIEZyZWVzY2FsZSBjb2RlIGhhdmUgYmVlbiBkb25l LgogIFRoZSBwYXRjaCBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCBib3RoIElyaXMgKyBDb2xpYnJpIFZ5 YnJpZCBWRjUwIGFuZAogIHN0bWFyazIvbWNmNTQ0MTUgQ29sZGZpcmUgYm9hcmRzLgoKQ2hhbmdl cyBmb3Igdjk6Ci0gY2hhbmdlZCBzbWFsbCBhY2Nlc3NvcnMgKGFzIGVkbWFfcmVhZC93cml0ZSBm dW5jdGlvbnMpIGFzIGlubGluZWQuCi0gY2hhbmdlZCBsaWNlbnNlcyB0byBHUEwyLjArCgpDaGFu Z2VzIGZvciB2MTA6Ci0gbm9uZQotLS0KIGRyaXZlcnMvZG1hL01ha2VmaWxlICAgICAgICAgIHwg ICAyICstCiBkcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uYyB8IDU1MiArKysrKysrKysrKysr KysrKysrKysrKysrKysKIGRyaXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5oIHwgMjQxICsrKysr KysrKysrKwogZHJpdmVycy9kbWEvZnNsLWVkbWEuYyAgICAgICAgfCA2OTcgKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCA3OTUgaW5zZXJ0aW9ucygr KSwgNjk3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hL2ZzbC1l ZG1hLWNvbW1vbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEvZnNsLWVkbWEtY29t bW9uLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hL01h a2VmaWxlCmluZGV4IDIwM2E5OWQ2ODMxNS4uNjYwMjJmNTlmY2E0IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2RtYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS9NYWtlZmlsZQpAQCAtMzEsNyArMzEs NyBAQCBvYmotJChDT05GSUdfRFdfQVhJX0RNQUMpICs9IGR3LWF4aS1kbWFjLwogb2JqLSQoQ09O RklHX0RXX0RNQUNfQ09SRSkgKz0gZHcvCiBvYmotJChDT05GSUdfRVA5M1hYX0RNQSkgKz0gZXA5 M3h4X2RtYS5vCiBvYmotJChDT05GSUdfRlNMX0RNQSkgKz0gZnNsZG1hLm8KLW9iai0kKENPTkZJ R19GU0xfRURNQSkgKz0gZnNsLWVkbWEubworb2JqLSQoQ09ORklHX0ZTTF9FRE1BKSArPSBmc2wt ZWRtYS5vIGZzbC1lZG1hLWNvbW1vbi5vCiBvYmotJChDT05GSUdfRlNMX1JBSUQpICs9IGZzbF9y YWlkLm8KIG9iai0kKENPTkZJR19IU1VfRE1BKSArPSBoc3UvCiBvYmotJChDT05GSUdfSU1HX01E Q19ETUEpICs9IGltZy1tZGMtZG1hLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbC1lZG1h LWNvbW1vbi5jIGIvZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zZmM3ODZiM2QwM2MKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uYwpAQCAtMCwwICsxLDU1MiBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEz LTIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYworLy8gQ29weXJpZ2h0IChjKSAyMDE3 IFN5c2FtLCBBbmdlbG8gRHVyZWdoZWxsbyAgPGFuZ2Vsb0BzeXNhbS5pdD4KKworI2luY2x1ZGUg PGxpbnV4L2RtYXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxs aW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJmc2wtZWRtYS1jb21tb24uaCIKKworI2RlZmluZSBF RE1BX0NSCQkJMHgwMAorI2RlZmluZSBFRE1BX0VTCQkJMHgwNAorI2RlZmluZSBFRE1BX0VSUQkJ MHgwQworI2RlZmluZSBFRE1BX0VFSQkJMHgxNAorI2RlZmluZSBFRE1BX1NFUlEJCTB4MUIKKyNk ZWZpbmUgRURNQV9DRVJRCQkweDFBCisjZGVmaW5lIEVETUFfU0VFSQkJMHgxOQorI2RlZmluZSBF RE1BX0NFRUkJCTB4MTgKKyNkZWZpbmUgRURNQV9DSU5UCQkweDFGCisjZGVmaW5lIEVETUFfQ0VS UgkJMHgxRQorI2RlZmluZSBFRE1BX1NTUlQJCTB4MUQKKyNkZWZpbmUgRURNQV9DRE5FCQkweDFD CisjZGVmaW5lIEVETUFfSU5UUgkJMHgyNAorI2RlZmluZSBFRE1BX0VSUgkJMHgyQworCisjZGVm aW5lIEVETUE2NF9FUlFICQkweDA4CisjZGVmaW5lIEVETUE2NF9FRUlICQkweDEwCisjZGVmaW5l IEVETUE2NF9TRVJRCQkweDE4CisjZGVmaW5lIEVETUE2NF9DRVJRCQkweDE5CisjZGVmaW5lIEVE TUE2NF9TRUVJCQkweDFhCisjZGVmaW5lIEVETUE2NF9DRUVJCQkweDFiCisjZGVmaW5lIEVETUE2 NF9DSU5UCQkweDFjCisjZGVmaW5lIEVETUE2NF9DRVJSCQkweDFkCisjZGVmaW5lIEVETUE2NF9T U1JUCQkweDFlCisjZGVmaW5lIEVETUE2NF9DRE5FCQkweDFmCisjZGVmaW5lIEVETUE2NF9JTlRI CQkweDIwCisjZGVmaW5lIEVETUE2NF9JTlRMCQkweDI0CisjZGVmaW5lIEVETUE2NF9FUlJICQkw eDI4CisjZGVmaW5lIEVETUE2NF9FUlJMCQkweDJjCisKKyNkZWZpbmUgRURNQV9UQ0QJCTB4MTAw MAorCitzdGF0aWMgdm9pZCBmc2xfZWRtYV9lbmFibGVfcmVxdWVzdChzdHJ1Y3QgZnNsX2VkbWFf Y2hhbiAqZnNsX2NoYW4pCit7CisJdm9pZCBfX2lvbWVtICphZGRyID0gZnNsX2NoYW4tPmVkbWEt Pm1lbWJhc2U7CisJdTMyIGNoID0gZnNsX2NoYW4tPnZjaGFuLmNoYW4uY2hhbl9pZDsKKworCWVk bWFfd3JpdGViKGZzbF9jaGFuLT5lZG1hLCBFRE1BX1NFRUlfU0VFSShjaCksIGFkZHIgKyBFRE1B X1NFRUkpOworCWVkbWFfd3JpdGViKGZzbF9jaGFuLT5lZG1hLCBjaCwgYWRkciArIEVETUFfU0VS USk7Cit9CisKK3ZvaWQgZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KHN0cnVjdCBmc2xfZWRtYV9j aGFuICpmc2xfY2hhbikKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSBmc2xfY2hhbi0+ZWRtYS0+ bWVtYmFzZTsKKwl1MzIgY2ggPSBmc2xfY2hhbi0+dmNoYW4uY2hhbi5jaGFuX2lkOworCisJZWRt YV93cml0ZWIoZnNsX2NoYW4tPmVkbWEsIGNoLCBhZGRyICsgRURNQV9DRVJRKTsKKwllZG1hX3dy aXRlYihmc2xfY2hhbi0+ZWRtYSwgRURNQV9DRUVJX0NFRUkoY2gpLCBhZGRyICsgRURNQV9DRUVJ KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZzbF9lZG1hX2Rpc2FibGVfcmVxdWVzdCk7CisKK3Zv aWQgZnNsX2VkbWFfY2hhbl9tdXgoc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuLAorCQkJ dW5zaWduZWQgaW50IHNsb3QsIGJvb2wgZW5hYmxlKQoreworCXUzMiBjaCA9IGZzbF9jaGFuLT52 Y2hhbi5jaGFuLmNoYW5faWQ7CisJdm9pZCBfX2lvbWVtICptdXhhZGRyOworCXVuc2lnbmVkIGlu dCBjaGFuc19wZXJfbXV4LCBjaF9vZmY7CisKKwljaGFuc19wZXJfbXV4ID0gZnNsX2NoYW4tPmVk bWEtPm5fY2hhbnMgLyBETUFNVVhfTlI7CisJY2hfb2ZmID0gZnNsX2NoYW4tPnZjaGFuLmNoYW4u Y2hhbl9pZCAlIGNoYW5zX3Blcl9tdXg7CisJbXV4YWRkciA9IGZzbF9jaGFuLT5lZG1hLT5tdXhi YXNlW2NoIC8gY2hhbnNfcGVyX211eF07CisJc2xvdCA9IEVETUFNVVhfQ0hDRkdfU09VUkNFKHNs b3QpOworCisJaWYgKGVuYWJsZSkKKwkJaW93cml0ZTgoRURNQU1VWF9DSENGR19FTkJMIHwgc2xv dCwgbXV4YWRkciArIGNoX29mZik7CisJZWxzZQorCQlpb3dyaXRlOChFRE1BTVVYX0NIQ0ZHX0RJ UywgbXV4YWRkciArIGNoX29mZik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfZWRtYV9jaGFu X211eCk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZnNsX2VkbWFfZ2V0X3RjZF9hdHRyKGVudW0g ZG1hX3NsYXZlX2J1c3dpZHRoIGFkZHJfd2lkdGgpCit7CisJc3dpdGNoIChhZGRyX3dpZHRoKSB7 CisJY2FzZSAxOgorCQlyZXR1cm4gRURNQV9UQ0RfQVRUUl9TU0laRV84QklUIHwgRURNQV9UQ0Rf QVRUUl9EU0laRV84QklUOworCWNhc2UgMjoKKwkJcmV0dXJuIEVETUFfVENEX0FUVFJfU1NJWkVf MTZCSVQgfCBFRE1BX1RDRF9BVFRSX0RTSVpFXzE2QklUOworCWNhc2UgNDoKKwkJcmV0dXJuIEVE TUFfVENEX0FUVFJfU1NJWkVfMzJCSVQgfCBFRE1BX1RDRF9BVFRSX0RTSVpFXzMyQklUOworCWNh c2UgODoKKwkJcmV0dXJuIEVETUFfVENEX0FUVFJfU1NJWkVfNjRCSVQgfCBFRE1BX1RDRF9BVFRS X0RTSVpFXzY0QklUOworCWRlZmF1bHQ6CisJCXJldHVybiBFRE1BX1RDRF9BVFRSX1NTSVpFXzMy QklUIHwgRURNQV9UQ0RfQVRUUl9EU0laRV8zMkJJVDsKKwl9Cit9CisKK3ZvaWQgZnNsX2VkbWFf ZnJlZV9kZXNjKHN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVzYykKK3sKKwlzdHJ1Y3QgZnNsX2Vk bWFfZGVzYyAqZnNsX2Rlc2M7CisJaW50IGk7CisKKwlmc2xfZGVzYyA9IHRvX2ZzbF9lZG1hX2Rl c2ModmRlc2MpOworCWZvciAoaSA9IDA7IGkgPCBmc2xfZGVzYy0+bl90Y2RzOyBpKyspCisJCWRt YV9wb29sX2ZyZWUoZnNsX2Rlc2MtPmVjaGFuLT50Y2RfcG9vbCwgZnNsX2Rlc2MtPnRjZFtpXS52 dGNkLAorCQkJICAgICAgZnNsX2Rlc2MtPnRjZFtpXS5wdGNkKTsKKwlrZnJlZShmc2xfZGVzYyk7 Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfZWRtYV9mcmVlX2Rlc2MpOworCitpbnQgZnNsX2Vk bWFfdGVybWluYXRlX2FsbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGZzbF9l ZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2VkbWFfY2hhbihjaGFuKTsKKwl1bnNpZ25lZCBs b25nIGZsYWdzOworCUxJU1RfSEVBRChoZWFkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xf Y2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCWZzbF9lZG1hX2Rpc2FibGVfcmVxdWVzdChmc2xf Y2hhbik7CisJZnNsX2NoYW4tPmVkZXNjID0gTlVMTDsKKwlmc2xfY2hhbi0+aWRsZSA9IHRydWU7 CisJdmNoYW5fZ2V0X2FsbF9kZXNjcmlwdG9ycygmZnNsX2NoYW4tPnZjaGFuLCAmaGVhZCk7CisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKKwl2 Y2hhbl9kbWFfZGVzY19mcmVlX2xpc3QoJmZzbF9jaGFuLT52Y2hhbiwgJmhlYWQpOworCXJldHVy biAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfdGVybWluYXRlX2FsbCk7CisKK2lu dCBmc2xfZWRtYV9wYXVzZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGZzbF9l ZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2VkbWFfY2hhbihjaGFuKTsKKwl1bnNpZ25lZCBs b25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBm bGFncyk7CisJaWYgKGZzbF9jaGFuLT5lZGVzYykgeworCQlmc2xfZWRtYV9kaXNhYmxlX3JlcXVl c3QoZnNsX2NoYW4pOworCQlmc2xfY2hhbi0+c3RhdHVzID0gRE1BX1BBVVNFRDsKKwkJZnNsX2No YW4tPmlkbGUgPSB0cnVlOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+ dmNoYW4ubG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNs X2VkbWFfcGF1c2UpOworCitpbnQgZnNsX2VkbWFfcmVzdW1lKHN0cnVjdCBkbWFfY2hhbiAqY2hh bikKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFu KGNoYW4pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnNs X2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKKwlpZiAoZnNsX2NoYW4tPmVkZXNjKSB7CisJCWZz bF9lZG1hX2VuYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKKwkJZnNsX2NoYW4tPnN0YXR1cyA9IERN QV9JTl9QUk9HUkVTUzsKKwkJZnNsX2NoYW4tPmlkbGUgPSBmYWxzZTsKKwl9CisJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsK K30KK0VYUE9SVF9TWU1CT0xfR1BMKGZzbF9lZG1hX3Jlc3VtZSk7CisKK2ludCBmc2xfZWRtYV9z bGF2ZV9jb25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQkJCSBzdHJ1Y3QgZG1hX3NsYXZl X2NvbmZpZyAqY2ZnKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2Zz bF9lZG1hX2NoYW4oY2hhbik7CisKKwlmc2xfY2hhbi0+ZnNjLmRpciA9IGNmZy0+ZGlyZWN0aW9u OworCWlmIChjZmctPmRpcmVjdGlvbiA9PSBETUFfREVWX1RPX01FTSkgeworCQlmc2xfY2hhbi0+ ZnNjLmRldl9hZGRyID0gY2ZnLT5zcmNfYWRkcjsKKwkJZnNsX2NoYW4tPmZzYy5hZGRyX3dpZHRo ID0gY2ZnLT5zcmNfYWRkcl93aWR0aDsKKwkJZnNsX2NoYW4tPmZzYy5idXJzdCA9IGNmZy0+c3Jj X21heGJ1cnN0OworCQlmc2xfY2hhbi0+ZnNjLmF0dHIgPSBmc2xfZWRtYV9nZXRfdGNkX2F0dHIo Y2ZnLT5zcmNfYWRkcl93aWR0aCk7CisJfSBlbHNlIGlmIChjZmctPmRpcmVjdGlvbiA9PSBETUFf TUVNX1RPX0RFVikgeworCQlmc2xfY2hhbi0+ZnNjLmRldl9hZGRyID0gY2ZnLT5kc3RfYWRkcjsK KwkJZnNsX2NoYW4tPmZzYy5hZGRyX3dpZHRoID0gY2ZnLT5kc3RfYWRkcl93aWR0aDsKKwkJZnNs X2NoYW4tPmZzYy5idXJzdCA9IGNmZy0+ZHN0X21heGJ1cnN0OworCQlmc2xfY2hhbi0+ZnNjLmF0 dHIgPSBmc2xfZWRtYV9nZXRfdGNkX2F0dHIoY2ZnLT5kc3RfYWRkcl93aWR0aCk7CisJfSBlbHNl CisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChm c2xfZWRtYV9zbGF2ZV9jb25maWcpOworCitzdGF0aWMgc2l6ZV90IGZzbF9lZG1hX2Rlc2NfcmVz aWR1ZShzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4sCisJCXN0cnVjdCB2aXJ0X2RtYV9k ZXNjICp2ZGVzYywgYm9vbCBpbl9wcm9ncmVzcykKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAq ZWRlc2MgPSBmc2xfY2hhbi0+ZWRlc2M7CisJdm9pZCBfX2lvbWVtICphZGRyID0gZnNsX2NoYW4t PmVkbWEtPm1lbWJhc2U7CisJdTMyIGNoID0gZnNsX2NoYW4tPnZjaGFuLmNoYW4uY2hhbl9pZDsK KwllbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyID0gZnNsX2NoYW4tPmZzYy5kaXI7CisJ ZG1hX2FkZHJfdCBjdXJfYWRkciwgZG1hX2FkZHI7CisJc2l6ZV90IGxlbiwgc2l6ZTsKKwlpbnQg aTsKKworCS8qIGNhbGN1bGF0ZSB0aGUgdG90YWwgc2l6ZSBpbiB0aGlzIGRlc2MgKi8KKwlmb3Ig KGxlbiA9IGkgPSAwOyBpIDwgZnNsX2NoYW4tPmVkZXNjLT5uX3RjZHM7IGkrKykKKwkJbGVuICs9 IGxlMzJfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+bmJ5dGVzKQorCQkJKiBsZTE2X3RvX2Nw dShlZGVzYy0+dGNkW2ldLnZ0Y2QtPmJpdGVyKTsKKworCWlmICghaW5fcHJvZ3Jlc3MpCisJCXJl dHVybiBsZW47CisKKwlpZiAoZGlyID09IERNQV9NRU1fVE9fREVWKQorCQljdXJfYWRkciA9IGVk bWFfcmVhZGwoCisJCQlmc2xfY2hhbi0+ZWRtYSwgYWRkciArIEVETUFfVENEX1NBRERSKGNoKSk7 CisJZWxzZQorCQljdXJfYWRkciA9IGVkbWFfcmVhZGwoCisJCQlmc2xfY2hhbi0+ZWRtYSwgYWRk ciArIEVETUFfVENEX0RBRERSKGNoKSk7CisKKwkvKiBmaWd1cmUgb3V0IHRoZSBmaW5pc2hlZCBh bmQgY2FsY3VsYXRlIHRoZSByZXNpZHVlICovCisJZm9yIChpID0gMDsgaSA8IGZzbF9jaGFuLT5l ZGVzYy0+bl90Y2RzOyBpKyspIHsKKwkJc2l6ZSA9IGxlMzJfdG9fY3B1KGVkZXNjLT50Y2RbaV0u dnRjZC0+bmJ5dGVzKQorCQkJKiBsZTE2X3RvX2NwdShlZGVzYy0+dGNkW2ldLnZ0Y2QtPmJpdGVy KTsKKwkJaWYgKGRpciA9PSBETUFfTUVNX1RPX0RFVikKKwkJCWRtYV9hZGRyID0gbGUzMl90b19j cHUoZWRlc2MtPnRjZFtpXS52dGNkLT5zYWRkcik7CisJCWVsc2UKKwkJCWRtYV9hZGRyID0gbGUz Ml90b19jcHUoZWRlc2MtPnRjZFtpXS52dGNkLT5kYWRkcik7CisKKwkJbGVuIC09IHNpemU7CisJ CWlmIChjdXJfYWRkciA+PSBkbWFfYWRkciAmJiBjdXJfYWRkciA8IGRtYV9hZGRyICsgc2l6ZSkg eworCQkJbGVuICs9IGRtYV9hZGRyICsgc2l6ZSAtIGN1cl9hZGRyOworCQkJYnJlYWs7CisJCX0K Kwl9CisKKwlyZXR1cm4gbGVuOworfQorCitlbnVtIGRtYV9zdGF0dXMgZnNsX2VkbWFfdHhfc3Rh dHVzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJZG1hX2Nvb2tpZV90IGNvb2tpZSwgc3RydWN0 IGRtYV90eF9zdGF0ZSAqdHhzdGF0ZSkKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2No YW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOworCXN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVz YzsKKwllbnVtIGRtYV9zdGF0dXMgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlz dGF0dXMgPSBkbWFfY29va2llX3N0YXR1cyhjaGFuLCBjb29raWUsIHR4c3RhdGUpOworCWlmIChz dGF0dXMgPT0gRE1BX0NPTVBMRVRFKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKCF0eHN0YXRl KQorCQlyZXR1cm4gZnNsX2NoYW4tPnN0YXR1czsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xf Y2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCXZkZXNjID0gdmNoYW5fZmluZF9kZXNjKCZmc2xf Y2hhbi0+dmNoYW4sIGNvb2tpZSk7CisJaWYgKGZzbF9jaGFuLT5lZGVzYyAmJiBjb29raWUgPT0g ZnNsX2NoYW4tPmVkZXNjLT52ZGVzYy50eC5jb29raWUpCisJCXR4c3RhdGUtPnJlc2lkdWUgPQor CQkJZnNsX2VkbWFfZGVzY19yZXNpZHVlKGZzbF9jaGFuLCB2ZGVzYywgdHJ1ZSk7CisJZWxzZSBp ZiAodmRlc2MpCisJCXR4c3RhdGUtPnJlc2lkdWUgPQorCQkJZnNsX2VkbWFfZGVzY19yZXNpZHVl KGZzbF9jaGFuLCB2ZGVzYywgZmFsc2UpOworCWVsc2UKKwkJdHhzdGF0ZS0+cmVzaWR1ZSA9IDA7 CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3Mp OworCisJcmV0dXJuIGZzbF9jaGFuLT5zdGF0dXM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xf ZWRtYV90eF9zdGF0dXMpOworCitzdGF0aWMgdm9pZCBmc2xfZWRtYV9zZXRfdGNkX3JlZ3Moc3Ry dWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuLAorCQkJCSAgc3RydWN0IGZzbF9lZG1hX2h3X3Rj ZCAqdGNkKQoreworCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEgPSBmc2xfY2hhbi0+ZWRt YTsKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSBmc2xfY2hhbi0+ZWRtYS0+bWVtYmFzZTsKKwl1MzIg Y2ggPSBmc2xfY2hhbi0+dmNoYW4uY2hhbi5jaGFuX2lkOworCisJLyoKKwkgKiBUQ0QgcGFyYW1l dGVycyBhcmUgc3RvcmVkIGluIHN0cnVjdCBmc2xfZWRtYV9od190Y2QgaW4gbGl0dGxlCisJICog ZW5kaWFuIGZvcm1hdC4gSG93ZXZlciwgd2UgbmVlZCB0byBsb2FkIHRoZSBUQ0QgcmVnaXN0ZXJz IGluCisJICogYmlnLSBvciBsaXR0bGUtZW5kaWFuIG9iZXlpbmcgdGhlIGVETUEgZW5naW5lIG1v ZGVsIGVuZGlhbi4KKwkgKi8KKwllZG1hX3dyaXRldyhlZG1hLCAwLCBhZGRyICsgRURNQV9UQ0Rf Q1NSKGNoKSk7CisJZWRtYV93cml0ZWwoZWRtYSwgbGUzMl90b19jcHUodGNkLT5zYWRkciksIGFk ZHIgKyBFRE1BX1RDRF9TQUREUihjaCkpOworCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1 KHRjZC0+ZGFkZHIpLCBhZGRyICsgRURNQV9UQ0RfREFERFIoY2gpKTsKKworCWVkbWFfd3JpdGV3 KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+YXR0ciksIGFkZHIgKyBFRE1BX1RDRF9BVFRSKGNoKSk7 CisJZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19jcHUodGNkLT5zb2ZmKSwgYWRkciArIEVETUFf VENEX1NPRkYoY2gpKTsKKworCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRjZC0+bmJ5 dGVzKSwgYWRkciArIEVETUFfVENEX05CWVRFUyhjaCkpOworCWVkbWFfd3JpdGVsKGVkbWEsIGxl MzJfdG9fY3B1KHRjZC0+c2xhc3QpLCBhZGRyICsgRURNQV9UQ0RfU0xBU1QoY2gpKTsKKworCWVk bWFfd3JpdGV3KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+Y2l0ZXIpLCBhZGRyICsgRURNQV9UQ0Rf Q0lURVIoY2gpKTsKKwllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0Y2QtPmJpdGVyKSwg YWRkciArIEVETUFfVENEX0JJVEVSKGNoKSk7CisJZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19j cHUodGNkLT5kb2ZmKSwgYWRkciArIEVETUFfVENEX0RPRkYoY2gpKTsKKworCWVkbWFfd3JpdGVs KGVkbWEsCisJCSAgICBsZTMyX3RvX2NwdSh0Y2QtPmRsYXN0X3NnYSksIGFkZHIgKyBFRE1BX1RD RF9ETEFTVF9TR0EoY2gpKTsKKworCWVkbWFfd3JpdGV3KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+ Y3NyKSwgYWRkciArIEVETUFfVENEX0NTUihjaCkpOworfQorCitzdGF0aWMgaW5saW5lCit2b2lk IGZzbF9lZG1hX2ZpbGxfdGNkKHN0cnVjdCBmc2xfZWRtYV9od190Y2QgKnRjZCwgdTMyIHNyYywg dTMyIGRzdCwKKwkJICAgICAgIHUxNiBhdHRyLCB1MTYgc29mZiwgdTMyIG5ieXRlcywgdTMyIHNs YXN0LCB1MTYgY2l0ZXIsCisJCSAgICAgICB1MTYgYml0ZXIsIHUxNiBkb2ZmLCB1MzIgZGxhc3Rf c2dhLCBib29sIG1ham9yX2ludCwKKwkJICAgICAgIGJvb2wgZGlzYWJsZV9yZXEsIGJvb2wgZW5h YmxlX3NnKQoreworCXUxNiBjc3IgPSAwOworCisJLyoKKwkgKiBlRE1BIGhhcmR3YXJlIFNHcyBy ZXF1aXJlIHRoZSBUQ0RzIHRvIGJlIHN0b3JlZCBpbiBsaXR0bGUKKwkgKiBlbmRpYW4gZm9ybWF0 IGlycmVzcGVjdGl2ZSBvZiB0aGUgcmVnaXN0ZXIgZW5kaWFuIG1vZGVsLgorCSAqIFNvIHdlIHB1 dCB0aGUgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBpbiBtZW1vcnksIHdhaXRpbmcKKwkgKiBmb3Ig ZnNsX2VkbWFfc2V0X3RjZF9yZWdzIGRvaW5nIHRoZSBzd2FwLgorCSAqLworCXRjZC0+c2FkZHIg PSBjcHVfdG9fbGUzMihzcmMpOworCXRjZC0+ZGFkZHIgPSBjcHVfdG9fbGUzMihkc3QpOworCisJ dGNkLT5hdHRyID0gY3B1X3RvX2xlMTYoYXR0cik7CisKKwl0Y2QtPnNvZmYgPSBjcHVfdG9fbGUx NihFRE1BX1RDRF9TT0ZGX1NPRkYoc29mZikpOworCisJdGNkLT5uYnl0ZXMgPSBjcHVfdG9fbGUz MihFRE1BX1RDRF9OQllURVNfTkJZVEVTKG5ieXRlcykpOworCXRjZC0+c2xhc3QgPSBjcHVfdG9f bGUzMihFRE1BX1RDRF9TTEFTVF9TTEFTVChzbGFzdCkpOworCisJdGNkLT5jaXRlciA9IGNwdV90 b19sZTE2KEVETUFfVENEX0NJVEVSX0NJVEVSKGNpdGVyKSk7CisJdGNkLT5kb2ZmID0gY3B1X3Rv X2xlMTYoRURNQV9UQ0RfRE9GRl9ET0ZGKGRvZmYpKTsKKworCXRjZC0+ZGxhc3Rfc2dhID0gY3B1 X3RvX2xlMzIoRURNQV9UQ0RfRExBU1RfU0dBX0RMQVNUX1NHQShkbGFzdF9zZ2EpKTsKKworCXRj ZC0+Yml0ZXIgPSBjcHVfdG9fbGUxNihFRE1BX1RDRF9CSVRFUl9CSVRFUihiaXRlcikpOworCWlm IChtYWpvcl9pbnQpCisJCWNzciB8PSBFRE1BX1RDRF9DU1JfSU5UX01BSk9SOworCisJaWYgKGRp c2FibGVfcmVxKQorCQljc3IgfD0gRURNQV9UQ0RfQ1NSX0RfUkVROworCisJaWYgKGVuYWJsZV9z ZykKKwkJY3NyIHw9IEVETUFfVENEX0NTUl9FX1NHOworCisJdGNkLT5jc3IgPSBjcHVfdG9fbGUx Nihjc3IpOworfQorCitzdGF0aWMgc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9lZG1hX2FsbG9j X2Rlc2Moc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuLAorCQlpbnQgc2dfbGVuKQorewor CXN0cnVjdCBmc2xfZWRtYV9kZXNjICpmc2xfZGVzYzsKKwlpbnQgaTsKKworCWZzbF9kZXNjID0g a3phbGxvYyhzaXplb2YoKmZzbF9kZXNjKSArCisJCQkgICBzaXplb2Yoc3RydWN0IGZzbF9lZG1h X3N3X3RjZCkgKgorCQkJICAgc2dfbGVuLCBHRlBfTk9XQUlUKTsKKwlpZiAoIWZzbF9kZXNjKQor CQlyZXR1cm4gTlVMTDsKKworCWZzbF9kZXNjLT5lY2hhbiA9IGZzbF9jaGFuOworCWZzbF9kZXNj LT5uX3RjZHMgPSBzZ19sZW47CisJZm9yIChpID0gMDsgaSA8IHNnX2xlbjsgaSsrKSB7CisJCWZz bF9kZXNjLT50Y2RbaV0udnRjZCA9IGRtYV9wb29sX2FsbG9jKGZzbF9jaGFuLT50Y2RfcG9vbCwK KwkJCQkJR0ZQX05PV0FJVCwgJmZzbF9kZXNjLT50Y2RbaV0ucHRjZCk7CisJCWlmICghZnNsX2Rl c2MtPnRjZFtpXS52dGNkKQorCQkJZ290byBlcnI7CisJfQorCXJldHVybiBmc2xfZGVzYzsKKwor ZXJyOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJZG1hX3Bvb2xfZnJlZShmc2xfY2hhbi0+dGNkX3Bv b2wsIGZzbF9kZXNjLT50Y2RbaV0udnRjZCwKKwkJCQlmc2xfZGVzYy0+dGNkW2ldLnB0Y2QpOwor CWtmcmVlKGZzbF9kZXNjKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IGRtYV9hc3luY190 eF9kZXNjcmlwdG9yICpmc2xfZWRtYV9wcmVwX2RtYV9jeWNsaWMoCisJCXN0cnVjdCBkbWFfY2hh biAqY2hhbiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IGJ1Zl9sZW4sCisJCXNpemVfdCBw ZXJpb2RfbGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQl1bnNp Z25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRv X2ZzbF9lZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9kZXNjOwor CWRtYV9hZGRyX3QgZG1hX2J1Zl9uZXh0OworCWludCBzZ19sZW4sIGk7CisJdTMyIHNyY19hZGRy LCBkc3RfYWRkciwgbGFzdF9zZywgbmJ5dGVzOworCXUxNiBzb2ZmLCBkb2ZmLCBpdGVyOworCisJ aWYgKCFpc19zbGF2ZV9kaXJlY3Rpb24oZnNsX2NoYW4tPmZzYy5kaXIpKQorCQlyZXR1cm4gTlVM TDsKKworCXNnX2xlbiA9IGJ1Zl9sZW4gLyBwZXJpb2RfbGVuOworCWZzbF9kZXNjID0gZnNsX2Vk bWFfYWxsb2NfZGVzYyhmc2xfY2hhbiwgc2dfbGVuKTsKKwlpZiAoIWZzbF9kZXNjKQorCQlyZXR1 cm4gTlVMTDsKKwlmc2xfZGVzYy0+aXNjeWNsaWMgPSB0cnVlOworCisJZG1hX2J1Zl9uZXh0ID0g ZG1hX2FkZHI7CisJbmJ5dGVzID0gZnNsX2NoYW4tPmZzYy5hZGRyX3dpZHRoICogZnNsX2NoYW4t PmZzYy5idXJzdDsKKwlpdGVyID0gcGVyaW9kX2xlbiAvIG5ieXRlczsKKworCWZvciAoaSA9IDA7 IGkgPCBzZ19sZW47IGkrKykgeworCQlpZiAoZG1hX2J1Zl9uZXh0ID49IGRtYV9hZGRyICsgYnVm X2xlbikKKwkJCWRtYV9idWZfbmV4dCA9IGRtYV9hZGRyOworCisJCS8qIGdldCBuZXh0IHNnJ3Mg cGh5c2ljYWwgYWRkcmVzcyAqLworCQlsYXN0X3NnID0gZnNsX2Rlc2MtPnRjZFsoaSArIDEpICUg c2dfbGVuXS5wdGNkOworCisJCWlmIChmc2xfY2hhbi0+ZnNjLmRpciA9PSBETUFfTUVNX1RPX0RF VikgeworCQkJc3JjX2FkZHIgPSBkbWFfYnVmX25leHQ7CisJCQlkc3RfYWRkciA9IGZzbF9jaGFu LT5mc2MuZGV2X2FkZHI7CisJCQlzb2ZmID0gZnNsX2NoYW4tPmZzYy5hZGRyX3dpZHRoOworCQkJ ZG9mZiA9IDA7CisJCX0gZWxzZSB7CisJCQlzcmNfYWRkciA9IGZzbF9jaGFuLT5mc2MuZGV2X2Fk ZHI7CisJCQlkc3RfYWRkciA9IGRtYV9idWZfbmV4dDsKKwkJCXNvZmYgPSAwOworCQkJZG9mZiA9 IGZzbF9jaGFuLT5mc2MuYWRkcl93aWR0aDsKKwkJfQorCisJCWZzbF9lZG1hX2ZpbGxfdGNkKGZz bF9kZXNjLT50Y2RbaV0udnRjZCwgc3JjX2FkZHIsIGRzdF9hZGRyLAorCQkJCSAgZnNsX2NoYW4t PmZzYy5hdHRyLCBzb2ZmLCBuYnl0ZXMsIDAsIGl0ZXIsCisJCQkJICBpdGVyLCBkb2ZmLCBsYXN0 X3NnLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CisJCWRtYV9idWZfbmV4dCArPSBwZXJpb2RfbGVuOwor CX0KKworCXJldHVybiB2Y2hhbl90eF9wcmVwKCZmc2xfY2hhbi0+dmNoYW4sICZmc2xfZGVzYy0+ dmRlc2MsIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZzbF9lZG1hX3ByZXBfZG1hX2N5 Y2xpYyk7CisKK3N0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZnNsX2VkbWFfcHJlcF9z bGF2ZV9zZygKKwkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNn bCwKKwkJdW5zaWduZWQgaW50IHNnX2xlbiwgZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRp cmVjdGlvbiwKKwkJdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1 Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOworCXN0 cnVjdCBmc2xfZWRtYV9kZXNjICpmc2xfZGVzYzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwor CXUzMiBzcmNfYWRkciwgZHN0X2FkZHIsIGxhc3Rfc2csIG5ieXRlczsKKwl1MTYgc29mZiwgZG9m ZiwgaXRlcjsKKwlpbnQgaTsKKworCWlmICghaXNfc2xhdmVfZGlyZWN0aW9uKGZzbF9jaGFuLT5m c2MuZGlyKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmc2xfZGVzYyA9IGZzbF9lZG1hX2FsbG9jX2Rl c2MoZnNsX2NoYW4sIHNnX2xlbik7CisJaWYgKCFmc2xfZGVzYykKKwkJcmV0dXJuIE5VTEw7CisJ ZnNsX2Rlc2MtPmlzY3ljbGljID0gZmFsc2U7CisKKwluYnl0ZXMgPSBmc2xfY2hhbi0+ZnNjLmFk ZHJfd2lkdGggKiBmc2xfY2hhbi0+ZnNjLmJ1cnN0OworCWZvcl9lYWNoX3NnKHNnbCwgc2csIHNn X2xlbiwgaSkgeworCQkvKiBnZXQgbmV4dCBzZydzIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwkJbGFz dF9zZyA9IGZzbF9kZXNjLT50Y2RbKGkgKyAxKSAlIHNnX2xlbl0ucHRjZDsKKworCQlpZiAoZnNs X2NoYW4tPmZzYy5kaXIgPT0gRE1BX01FTV9UT19ERVYpIHsKKwkJCXNyY19hZGRyID0gc2dfZG1h X2FkZHJlc3Moc2cpOworCQkJZHN0X2FkZHIgPSBmc2xfY2hhbi0+ZnNjLmRldl9hZGRyOworCQkJ c29mZiA9IGZzbF9jaGFuLT5mc2MuYWRkcl93aWR0aDsKKwkJCWRvZmYgPSAwOworCQl9IGVsc2Ug eworCQkJc3JjX2FkZHIgPSBmc2xfY2hhbi0+ZnNjLmRldl9hZGRyOworCQkJZHN0X2FkZHIgPSBz Z19kbWFfYWRkcmVzcyhzZyk7CisJCQlzb2ZmID0gMDsKKwkJCWRvZmYgPSBmc2xfY2hhbi0+ZnNj LmFkZHJfd2lkdGg7CisJCX0KKworCQlpdGVyID0gc2dfZG1hX2xlbihzZykgLyBuYnl0ZXM7CisJ CWlmIChpIDwgc2dfbGVuIC0gMSkgeworCQkJbGFzdF9zZyA9IGZzbF9kZXNjLT50Y2RbKGkgKyAx KV0ucHRjZDsKKwkJCWZzbF9lZG1hX2ZpbGxfdGNkKGZzbF9kZXNjLT50Y2RbaV0udnRjZCwgc3Jj X2FkZHIsCisJCQkJCSAgZHN0X2FkZHIsIGZzbF9jaGFuLT5mc2MuYXR0ciwgc29mZiwKKwkJCQkJ ICBuYnl0ZXMsIDAsIGl0ZXIsIGl0ZXIsIGRvZmYsIGxhc3Rfc2csCisJCQkJCSAgZmFsc2UsIGZh bHNlLCB0cnVlKTsKKwkJfSBlbHNlIHsKKwkJCWxhc3Rfc2cgPSAwOworCQkJZnNsX2VkbWFfZmls bF90Y2QoZnNsX2Rlc2MtPnRjZFtpXS52dGNkLCBzcmNfYWRkciwKKwkJCQkJICBkc3RfYWRkciwg ZnNsX2NoYW4tPmZzYy5hdHRyLCBzb2ZmLAorCQkJCQkgIG5ieXRlcywgMCwgaXRlciwgaXRlciwg ZG9mZiwgbGFzdF9zZywKKwkJCQkJICB0cnVlLCB0cnVlLCBmYWxzZSk7CisJCX0KKwl9CisKKwly ZXR1cm4gdmNoYW5fdHhfcHJlcCgmZnNsX2NoYW4tPnZjaGFuLCAmZnNsX2Rlc2MtPnZkZXNjLCBm bGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfZWRtYV9wcmVwX3NsYXZlX3NnKTsKKwor dm9pZCBmc2xfZWRtYV94ZmVyX2Rlc2Moc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuKQor eworCXN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZGVzYzsKKworCXZkZXNjID0gdmNoYW5fbmV4dF9k ZXNjKCZmc2xfY2hhbi0+dmNoYW4pOworCWlmICghdmRlc2MpCisJCXJldHVybjsKKwlmc2xfY2hh bi0+ZWRlc2MgPSB0b19mc2xfZWRtYV9kZXNjKHZkZXNjKTsKKwlmc2xfZWRtYV9zZXRfdGNkX3Jl Z3MoZnNsX2NoYW4sIGZzbF9jaGFuLT5lZGVzYy0+dGNkWzBdLnZ0Y2QpOworCWZzbF9lZG1hX2Vu YWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKKwlmc2xfY2hhbi0+c3RhdHVzID0gRE1BX0lOX1BST0dS RVNTOworCWZzbF9jaGFuLT5pZGxlID0gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xf ZWRtYV94ZmVyX2Rlc2MpOworCit2b2lkIGZzbF9lZG1hX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRt YV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2Zz bF9lZG1hX2NoYW4oY2hhbik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19p cnFzYXZlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCisJaWYgKHVubGlrZWx5KGZz bF9jaGFuLT5wbV9zdGF0ZSAhPSBSVU5OSU5HKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOworCQkvKiBjYW5ub3Qgc3VibWl0IGR1ZSB0 byBzdXNwZW5kICovCisJCXJldHVybjsKKwl9CisKKwlpZiAodmNoYW5faXNzdWVfcGVuZGluZygm ZnNsX2NoYW4tPnZjaGFuKSAmJiAhZnNsX2NoYW4tPmVkZXNjKQorCQlmc2xfZWRtYV94ZmVyX2Rl c2MoZnNsX2NoYW4pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFu LmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZzbF9lZG1hX2lzc3VlX3BlbmRp bmcpOworCitpbnQgZnNsX2VkbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFu ICpjaGFuKQoreworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1h X2NoYW4oY2hhbik7CisKKwlmc2xfY2hhbi0+dGNkX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoInRj ZF9wb29sIiwgY2hhbi0+ZGV2aWNlLT5kZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBmc2xfZWRtYV9o d190Y2QpLAorCQkJCTMyLCAwKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZz bF9lZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKTsKKwordm9pZCBmc2xfZWRtYV9mcmVlX2NoYW5f cmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFfY2hh biAqZnNsX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOworCXVuc2lnbmVkIGxvbmcgZmxh Z3M7CisJTElTVF9IRUFEKGhlYWQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT52 Y2hhbi5sb2NrLCBmbGFncyk7CisJZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsK Kwlmc2xfZWRtYV9jaGFuX211eChmc2xfY2hhbiwgMCwgZmFsc2UpOworCWZzbF9jaGFuLT5lZGVz YyA9IE5VTEw7CisJdmNoYW5fZ2V0X2FsbF9kZXNjcmlwdG9ycygmZnNsX2NoYW4tPnZjaGFuLCAm aGVhZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZs YWdzKTsKKworCXZjaGFuX2RtYV9kZXNjX2ZyZWVfbGlzdCgmZnNsX2NoYW4tPnZjaGFuLCAmaGVh ZCk7CisJZG1hX3Bvb2xfZGVzdHJveShmc2xfY2hhbi0+dGNkX3Bvb2wpOworCWZzbF9jaGFuLT50 Y2RfcG9vbCA9IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfZWRtYV9mcmVlX2NoYW5f cmVzb3VyY2VzKTsKKwordm9pZCBmc2xfZWRtYV9jbGVhbnVwX3ZjaGFuKHN0cnVjdCBkbWFfZGV2 aWNlICpkbWFkZXYpCit7CisJc3RydWN0IGZzbF9lZG1hX2NoYW4gKmNoYW4sICpfY2hhbjsKKwor CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGFuLCBfY2hhbiwKKwkJCQkmZG1hZGV2LT5jaGFu bmVscywgdmNoYW4uY2hhbi5kZXZpY2Vfbm9kZSkgeworCQlsaXN0X2RlbCgmY2hhbi0+dmNoYW4u Y2hhbi5kZXZpY2Vfbm9kZSk7CisJCXRhc2tsZXRfa2lsbCgmY2hhbi0+dmNoYW4udGFzayk7CisJ fQorfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX2VkbWFfY2xlYW51cF92Y2hhbik7CisKK01PRFVM RV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbC1lZG1hLWNv bW1vbi5oIGIvZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41NDU4ZGQzYjZkYTgKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uaApAQCAtMCwwICsxLDI0MSBAQAorLyogU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArICovCisvKgorICogQ29weXJpZ2h0IDIwMTMtMjAx NCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMTggQW5nZWxv IER1cmVnaGVsbG8gPGFuZ2Vsb0BzeXNhbS5pdD4KKyAqLworI2lmbmRlZiBfRlNMX0VETUFfQ09N TU9OX0hfCisjZGVmaW5lIF9GU0xfRURNQV9DT01NT05fSF8KKworI2luY2x1ZGUgInZpcnQtZG1h LmgiCisKKyNkZWZpbmUgRURNQV9DUgkJCTB4MDAKKyNkZWZpbmUgRURNQV9FUwkJCTB4MDQKKyNk ZWZpbmUgRURNQV9FUlEJCTB4MEMKKyNkZWZpbmUgRURNQV9FRUkJCTB4MTQKKyNkZWZpbmUgRURN QV9TRVJRCQkweDFCCisjZGVmaW5lIEVETUFfQ0VSUQkJMHgxQQorI2RlZmluZSBFRE1BX1NFRUkJ CTB4MTkKKyNkZWZpbmUgRURNQV9DRUVJCQkweDE4CisjZGVmaW5lIEVETUFfQ0lOVAkJMHgxRgor I2RlZmluZSBFRE1BX0NFUlIJCTB4MUUKKyNkZWZpbmUgRURNQV9TU1JUCQkweDFECisjZGVmaW5l IEVETUFfQ0RORQkJMHgxQworI2RlZmluZSBFRE1BX0lOVFIJCTB4MjQKKyNkZWZpbmUgRURNQV9F UlIJCTB4MkMKKworI2RlZmluZSBFRE1BX1RDRF9TQUREUih4KQkoMHgxMDAwICsgMzIgKiAoeCkp CisjZGVmaW5lIEVETUFfVENEX1NPRkYoeCkJKDB4MTAwNCArIDMyICogKHgpKQorI2RlZmluZSBF RE1BX1RDRF9BVFRSKHgpCSgweDEwMDYgKyAzMiAqICh4KSkKKyNkZWZpbmUgRURNQV9UQ0RfTkJZ VEVTKHgpCSgweDEwMDggKyAzMiAqICh4KSkKKyNkZWZpbmUgRURNQV9UQ0RfU0xBU1QoeCkJKDB4 MTAwQyArIDMyICogKHgpKQorI2RlZmluZSBFRE1BX1RDRF9EQUREUih4KQkoMHgxMDEwICsgMzIg KiAoeCkpCisjZGVmaW5lIEVETUFfVENEX0RPRkYoeCkJKDB4MTAxNCArIDMyICogKHgpKQorI2Rl ZmluZSBFRE1BX1RDRF9DSVRFUl9FTElOSyh4KQkoMHgxMDE2ICsgMzIgKiAoeCkpCisjZGVmaW5l IEVETUFfVENEX0NJVEVSKHgpCSgweDEwMTYgKyAzMiAqICh4KSkKKyNkZWZpbmUgRURNQV9UQ0Rf RExBU1RfU0dBKHgpCSgweDEwMTggKyAzMiAqICh4KSkKKyNkZWZpbmUgRURNQV9UQ0RfQ1NSKHgp CQkoMHgxMDFDICsgMzIgKiAoeCkpCisjZGVmaW5lIEVETUFfVENEX0JJVEVSX0VMSU5LKHgpCSgw eDEwMUUgKyAzMiAqICh4KSkKKyNkZWZpbmUgRURNQV9UQ0RfQklURVIoeCkJKDB4MTAxRSArIDMy ICogKHgpKQorCisjZGVmaW5lIEVETUFfQ1JfRURCRwkJQklUKDEpCisjZGVmaW5lIEVETUFfQ1Jf RVJDQQkJQklUKDIpCisjZGVmaW5lIEVETUFfQ1JfRVJHQQkJQklUKDMpCisjZGVmaW5lIEVETUFf Q1JfSE9FCQlCSVQoNCkKKyNkZWZpbmUgRURNQV9DUl9IQUxUCQlCSVQoNSkKKyNkZWZpbmUgRURN QV9DUl9DTE0JCUJJVCg2KQorI2RlZmluZSBFRE1BX0NSX0VNTE0JCUJJVCg3KQorI2RlZmluZSBF RE1BX0NSX0VDWAkJQklUKDE2KQorI2RlZmluZSBFRE1BX0NSX0NYCQlCSVQoMTcpCisKKyNkZWZp bmUgRURNQV9TRUVJX1NFRUkoeCkJKCh4KSAmIDB4MUYpCisjZGVmaW5lIEVETUFfQ0VFSV9DRUVJ KHgpCSgoeCkgJiAweDFGKQorI2RlZmluZSBFRE1BX0NJTlRfQ0lOVCh4KQkoKHgpICYgMHgxRikK KyNkZWZpbmUgRURNQV9DRVJSX0NFUlIoeCkJKCh4KSAmIDB4MUYpCisKKyNkZWZpbmUgRURNQV9U Q0RfQVRUUl9EU0laRSh4KQkJKCgoeCkgJiAweDAwMDcpKQorI2RlZmluZSBFRE1BX1RDRF9BVFRS X0RNT0QoeCkJCSgoKHgpICYgMHgwMDFGKSA8PCAzKQorI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NT SVpFKHgpCQkoKCh4KSAmIDB4MDAwNykgPDwgOCkKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TTU9E KHgpCQkoKCh4KSAmIDB4MDAxRikgPDwgMTEpCisjZGVmaW5lIEVETUFfVENEX0FUVFJfU1NJWkVf OEJJVAkoMHgwMDAwKQorI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NTSVpFXzE2QklUCSgweDAxMDAp CisjZGVmaW5lIEVETUFfVENEX0FUVFJfU1NJWkVfMzJCSVQJKDB4MDIwMCkKKyNkZWZpbmUgRURN QV9UQ0RfQVRUUl9TU0laRV82NEJJVAkoMHgwMzAwKQorI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NT SVpFXzMyQllURQkoMHgwNTAwKQorI2RlZmluZSBFRE1BX1RDRF9BVFRSX0RTSVpFXzhCSVQJKDB4 MDAwMCkKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9EU0laRV8xNkJJVAkoMHgwMDAxKQorI2RlZmlu ZSBFRE1BX1RDRF9BVFRSX0RTSVpFXzMyQklUCSgweDAwMDIpCisjZGVmaW5lIEVETUFfVENEX0FU VFJfRFNJWkVfNjRCSVQJKDB4MDAwMykKKyNkZWZpbmUgRURNQV9UQ0RfQVRUUl9EU0laRV8zMkJZ VEUJKDB4MDAwNSkKKworI2RlZmluZSBFRE1BX1RDRF9TT0ZGX1NPRkYoeCkJCSh4KQorI2RlZmlu ZSBFRE1BX1RDRF9OQllURVNfTkJZVEVTKHgpCSh4KQorI2RlZmluZSBFRE1BX1RDRF9TTEFTVF9T TEFTVCh4KQkJKHgpCisjZGVmaW5lIEVETUFfVENEX0RBRERSX0RBRERSKHgpCQkoeCkKKyNkZWZp bmUgRURNQV9UQ0RfQ0lURVJfQ0lURVIoeCkJCSgoeCkgJiAweDdGRkYpCisjZGVmaW5lIEVETUFf VENEX0RPRkZfRE9GRih4KQkJKHgpCisjZGVmaW5lIEVETUFfVENEX0RMQVNUX1NHQV9ETEFTVF9T R0EoeCkJKHgpCisjZGVmaW5lIEVETUFfVENEX0JJVEVSX0JJVEVSKHgpCQkoKHgpICYgMHg3RkZG KQorCisjZGVmaW5lIEVETUFfVENEX0NTUl9TVEFSVAkJQklUKDApCisjZGVmaW5lIEVETUFfVENE X0NTUl9JTlRfTUFKT1IJCUJJVCgxKQorI2RlZmluZSBFRE1BX1RDRF9DU1JfSU5UX0hBTEYJCUJJ VCgyKQorI2RlZmluZSBFRE1BX1RDRF9DU1JfRF9SRVEJCUJJVCgzKQorI2RlZmluZSBFRE1BX1RD RF9DU1JfRV9TRwkJQklUKDQpCisjZGVmaW5lIEVETUFfVENEX0NTUl9FX0xJTksJCUJJVCg1KQor I2RlZmluZSBFRE1BX1RDRF9DU1JfQUNUSVZFCQlCSVQoNikKKyNkZWZpbmUgRURNQV9UQ0RfQ1NS X0RPTkUJCUJJVCg3KQorCisjZGVmaW5lIEVETUFNVVhfQ0hDRkdfRElTCQkweDAKKyNkZWZpbmUg RURNQU1VWF9DSENGR19FTkJMCQkweDgwCisjZGVmaW5lIEVETUFNVVhfQ0hDRkdfU09VUkNFKG4p CQkoKG4pICYgMHgzRikKKworI2RlZmluZSBETUFNVVhfTlIJMgorCisjZGVmaW5lIEZTTF9FRE1B X0JVU1dJRFRIUwkoQklUKERNQV9TTEFWRV9CVVNXSURUSF8xX0JZVEUpIHwgXAorCQkJCSBCSVQo RE1BX1NMQVZFX0JVU1dJRFRIXzJfQllURVMpIHwgXAorCQkJCSBCSVQoRE1BX1NMQVZFX0JVU1dJ RFRIXzRfQllURVMpIHwgXAorCQkJCSBCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzhfQllURVMpKQor ZW51bSBmc2xfZWRtYV9wbV9zdGF0ZSB7CisJUlVOTklORyA9IDAsCisJU1VTUEVOREVELAorfTsK Kworc3RydWN0IGZzbF9lZG1hX2h3X3RjZCB7CisJX19sZTMyCXNhZGRyOworCV9fbGUxNglzb2Zm OworCV9fbGUxNglhdHRyOworCV9fbGUzMgluYnl0ZXM7CisJX19sZTMyCXNsYXN0OworCV9fbGUz MglkYWRkcjsKKwlfX2xlMTYJZG9mZjsKKwlfX2xlMTYJY2l0ZXI7CisJX19sZTMyCWRsYXN0X3Nn YTsKKwlfX2xlMTYJY3NyOworCV9fbGUxNgliaXRlcjsKK307CisKK3N0cnVjdCBmc2xfZWRtYV9z d190Y2QgeworCWRtYV9hZGRyX3QJCQlwdGNkOworCXN0cnVjdCBmc2xfZWRtYV9od190Y2QJCSp2 dGNkOworfTsKKworc3RydWN0IGZzbF9lZG1hX3NsYXZlX2NvbmZpZyB7CisJZW51bSBkbWFfdHJh bnNmZXJfZGlyZWN0aW9uCWRpcjsKKwllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aAkJYWRkcl93aWR0 aDsKKwl1MzIJCQkJZGV2X2FkZHI7CisJdTMyCQkJCWJ1cnN0OworCXUzMgkJCQlhdHRyOworfTsK Kworc3RydWN0IGZzbF9lZG1hX2NoYW4geworCXN0cnVjdCB2aXJ0X2RtYV9jaGFuCQl2Y2hhbjsK KwllbnVtIGRtYV9zdGF0dXMJCQlzdGF0dXM7CisJZW51bSBmc2xfZWRtYV9wbV9zdGF0ZQkJcG1f c3RhdGU7CisJYm9vbAkJCQlpZGxlOworCXUzMgkJCQlzbGF2ZV9pZDsKKwlzdHJ1Y3QgZnNsX2Vk bWFfZW5naW5lCQkqZWRtYTsKKwlzdHJ1Y3QgZnNsX2VkbWFfZGVzYwkJKmVkZXNjOworCXN0cnVj dCBmc2xfZWRtYV9zbGF2ZV9jb25maWcJZnNjOworCXN0cnVjdCBkbWFfcG9vbAkJCSp0Y2RfcG9v bDsKK307CisKK3N0cnVjdCBmc2xfZWRtYV9kZXNjIHsKKwlzdHJ1Y3QgdmlydF9kbWFfZGVzYwkJ dmRlc2M7CisJc3RydWN0IGZzbF9lZG1hX2NoYW4JCSplY2hhbjsKKwlib29sCQkJCWlzY3ljbGlj OworCXVuc2lnbmVkIGludAkJCW5fdGNkczsKKwlzdHJ1Y3QgZnNsX2VkbWFfc3dfdGNkCQl0Y2Rb XTsKK307CisKK3N0cnVjdCBmc2xfZWRtYV9lbmdpbmUgeworCXN0cnVjdCBkbWFfZGV2aWNlCWRt YV9kZXY7CisJdm9pZCBfX2lvbWVtCQkqbWVtYmFzZTsKKwl2b2lkIF9faW9tZW0JCSptdXhiYXNl W0RNQU1VWF9OUl07CisJc3RydWN0IGNsawkJKm11eGNsa1tETUFNVVhfTlJdOworCXN0cnVjdCBt dXRleAkJZnNsX2VkbWFfbXV0ZXg7CisJdTMyCQkJbl9jaGFuczsKKwlpbnQJCQl0eGlycTsKKwlp bnQJCQllcnJpcnE7CisJYm9vbAkJCWJpZ19lbmRpYW47CisJc3RydWN0IGZzbF9lZG1hX2NoYW4J Y2hhbnNbXTsKK307CisKKy8qCisgKiBSL1cgZnVuY3Rpb25zIGZvciBiaWctIG9yIGxpdHRsZS1l bmRpYW4gcmVnaXN0ZXJzOgorICogVGhlIGVETUEgY29udHJvbGxlcidzIGVuZGlhbiBpcyBpbmRl cGVuZGVudCBvZiB0aGUgQ1BVIGNvcmUncyBlbmRpYW4uCisgKiBGb3IgdGhlIGJpZy1lbmRpYW4g SVAgbW9kdWxlLCB0aGUgb2Zmc2V0IGZvciA4LWJpdCBvciAxNi1iaXQgcmVnaXN0ZXJzCisgKiBz aG91bGQgYWxzbyBiZSBzd2FwcGVkIG9wcG9zaXRlIHRvIHRoYXQgaW4gbGl0dGxlLWVuZGlhbiBJ UC4KKyAqLworc3RhdGljIGlubGluZSB1MzIgZWRtYV9yZWFkbChzdHJ1Y3QgZnNsX2VkbWFfZW5n aW5lICplZG1hLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaWYgKGVkbWEtPmJpZ19lbmRpYW4p CisJCXJldHVybiBpb3JlYWQzMmJlKGFkZHIpOworCWVsc2UKKwkJcmV0dXJuIGlvcmVhZDMyKGFk ZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZWRtYV93cml0ZWIoc3RydWN0IGZzbF9lZG1h X2VuZ2luZSAqZWRtYSwKKwkJCSAgICAgICB1OCB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sK KwkvKiBzd2FwIHRoZSByZWcgb2Zmc2V0IGZvciB0aGVzZSBpbiBiaWctZW5kaWFuIG1vZGUgKi8K KwlpZiAoZWRtYS0+YmlnX2VuZGlhbikKKwkJaW93cml0ZTgodmFsLCAodm9pZCBfX2lvbWVtICop KCh1bnNpZ25lZCBsb25nKWFkZHIgXiAweDMpKTsKKwllbHNlCisJCWlvd3JpdGU4KHZhbCwgYWRk cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlZG1hX3dyaXRldyhzdHJ1Y3QgZnNsX2VkbWFf ZW5naW5lICplZG1hLAorCQkJICAgICAgIHUxNiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sK KwkvKiBzd2FwIHRoZSByZWcgb2Zmc2V0IGZvciB0aGVzZSBpbiBiaWctZW5kaWFuIG1vZGUgKi8K KwlpZiAoZWRtYS0+YmlnX2VuZGlhbikKKwkJaW93cml0ZTE2YmUodmFsLCAodm9pZCBfX2lvbWVt ICopKCh1bnNpZ25lZCBsb25nKWFkZHIgXiAweDIpKTsKKwllbHNlCisJCWlvd3JpdGUxNih2YWws IGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZWRtYV93cml0ZWwoc3RydWN0IGZzbF9l ZG1hX2VuZ2luZSAqZWRtYSwKKwkJCSAgICAgICB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIp Cit7CisJaWYgKGVkbWEtPmJpZ19lbmRpYW4pCisJCWlvd3JpdGUzMmJlKHZhbCwgYWRkcik7CisJ ZWxzZQorCQlpb3dyaXRlMzIodmFsLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qg ZnNsX2VkbWFfY2hhbiAqdG9fZnNsX2VkbWFfY2hhbihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7 CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgZnNsX2VkbWFfY2hhbiwgdmNoYW4u Y2hhbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZzbF9lZG1hX2Rlc2MgKnRvX2ZzbF9l ZG1hX2Rlc2Moc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkKQoreworCXJldHVybiBjb250YWluZXJf b2YodmQsIHN0cnVjdCBmc2xfZWRtYV9kZXNjLCB2ZGVzYyk7Cit9CisKK3ZvaWQgZnNsX2VkbWFf ZGlzYWJsZV9yZXF1ZXN0KHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbik7Cit2b2lkIGZz bF9lZG1hX2NoYW5fbXV4KHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiwKKwkJCXVuc2ln bmVkIGludCBzbG90LCBib29sIGVuYWJsZSk7Cit2b2lkIGZzbF9lZG1hX2ZyZWVfZGVzYyhzdHJ1 Y3QgdmlydF9kbWFfZGVzYyAqdmRlc2MpOworaW50IGZzbF9lZG1hX3Rlcm1pbmF0ZV9hbGwoc3Ry dWN0IGRtYV9jaGFuICpjaGFuKTsKK2ludCBmc2xfZWRtYV9wYXVzZShzdHJ1Y3QgZG1hX2NoYW4g KmNoYW4pOworaW50IGZzbF9lZG1hX3Jlc3VtZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOworaW50 IGZzbF9lZG1hX3NsYXZlX2NvbmZpZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQkJIHN0cnVj dCBkbWFfc2xhdmVfY29uZmlnICpjZmcpOworZW51bSBkbWFfc3RhdHVzIGZzbF9lZG1hX3R4X3N0 YXR1cyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCWRtYV9jb29raWVfdCBjb29raWUsIHN0cnVj dCBkbWFfdHhfc3RhdGUgKnR4c3RhdGUpOworc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9y ICpmc2xfZWRtYV9wcmVwX2RtYV9jeWNsaWMoCisJCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1h X2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IGJ1Zl9sZW4sCisJCXNpemVfdCBwZXJpb2RfbGVuLCBl bnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQl1bnNpZ25lZCBsb25nIGZs YWdzKTsKK3N0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZnNsX2VkbWFfcHJlcF9zbGF2 ZV9zZygKKwkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwK KwkJdW5zaWduZWQgaW50IHNnX2xlbiwgZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpcmVj dGlvbiwKKwkJdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqY29udGV4dCk7Cit2b2lkIGZzbF9l ZG1hX3hmZXJfZGVzYyhzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4pOwordm9pZCBmc2xf ZWRtYV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7CitpbnQgZnNsX2VkbWFf YWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKK3ZvaWQgZnNsX2Vk bWFfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOwordm9pZCBmc2xf ZWRtYV9jbGVhbnVwX3ZjaGFuKHN0cnVjdCBkbWFfZGV2aWNlICpkbWFkZXYpOworCisjZW5kaWYg LyogX0ZTTF9FRE1BX0NPTU1PTl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZnNsLWVk bWEuYyBiL2RyaXZlcnMvZG1hL2ZzbC1lZG1hLmMKaW5kZXggYzc1Njg4NjkyODRlLi4zMzdhZDBj MGVhNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2ZzbC1lZG1hLmMKKysrIGIvZHJpdmVycy9k bWEvZnNsLWVkbWEuYwpAQCAtMTMsNjUzICsxMywxNiBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4 L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgv ZG1hcG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlu bG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNl Lmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2ly cS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RtYS5oPgogCi0jaW5jbHVkZSAidmlydC1kbWEuaCIK LQotI2RlZmluZSBFRE1BX0NSCQkJMHgwMAotI2RlZmluZSBFRE1BX0VTCQkJMHgwNAotI2RlZmlu ZSBFRE1BX0VSUQkJMHgwQwotI2RlZmluZSBFRE1BX0VFSQkJMHgxNAotI2RlZmluZSBFRE1BX1NF UlEJCTB4MUIKLSNkZWZpbmUgRURNQV9DRVJRCQkweDFBCi0jZGVmaW5lIEVETUFfU0VFSQkJMHgx OQotI2RlZmluZSBFRE1BX0NFRUkJCTB4MTgKLSNkZWZpbmUgRURNQV9DSU5UCQkweDFGCi0jZGVm aW5lIEVETUFfQ0VSUgkJMHgxRQotI2RlZmluZSBFRE1BX1NTUlQJCTB4MUQKLSNkZWZpbmUgRURN QV9DRE5FCQkweDFDCi0jZGVmaW5lIEVETUFfSU5UUgkJMHgyNAotI2RlZmluZSBFRE1BX0VSUgkJ MHgyQwotCi0jZGVmaW5lIEVETUFfVENEX1NBRERSKHgpCSgweDEwMDAgKyAzMiAqICh4KSkKLSNk ZWZpbmUgRURNQV9UQ0RfU09GRih4KQkoMHgxMDA0ICsgMzIgKiAoeCkpCi0jZGVmaW5lIEVETUFf VENEX0FUVFIoeCkJKDB4MTAwNiArIDMyICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9OQllURVMo eCkJKDB4MTAwOCArIDMyICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9TTEFTVCh4KQkoMHgxMDBD ICsgMzIgKiAoeCkpCi0jZGVmaW5lIEVETUFfVENEX0RBRERSKHgpCSgweDEwMTAgKyAzMiAqICh4 KSkKLSNkZWZpbmUgRURNQV9UQ0RfRE9GRih4KQkoMHgxMDE0ICsgMzIgKiAoeCkpCi0jZGVmaW5l IEVETUFfVENEX0NJVEVSX0VMSU5LKHgpCSgweDEwMTYgKyAzMiAqICh4KSkKLSNkZWZpbmUgRURN QV9UQ0RfQ0lURVIoeCkJKDB4MTAxNiArIDMyICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9ETEFT VF9TR0EoeCkJKDB4MTAxOCArIDMyICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9DU1IoeCkJCSgw eDEwMUMgKyAzMiAqICh4KSkKLSNkZWZpbmUgRURNQV9UQ0RfQklURVJfRUxJTksoeCkJKDB4MTAx RSArIDMyICogKHgpKQotI2RlZmluZSBFRE1BX1RDRF9CSVRFUih4KQkoMHgxMDFFICsgMzIgKiAo eCkpCi0KLSNkZWZpbmUgRURNQV9DUl9FREJHCQlCSVQoMSkKLSNkZWZpbmUgRURNQV9DUl9FUkNB CQlCSVQoMikKLSNkZWZpbmUgRURNQV9DUl9FUkdBCQlCSVQoMykKLSNkZWZpbmUgRURNQV9DUl9I T0UJCUJJVCg0KQotI2RlZmluZSBFRE1BX0NSX0hBTFQJCUJJVCg1KQotI2RlZmluZSBFRE1BX0NS X0NMTQkJQklUKDYpCi0jZGVmaW5lIEVETUFfQ1JfRU1MTQkJQklUKDcpCi0jZGVmaW5lIEVETUFf Q1JfRUNYCQlCSVQoMTYpCi0jZGVmaW5lIEVETUFfQ1JfQ1gJCUJJVCgxNykKLQotI2RlZmluZSBF RE1BX1NFRUlfU0VFSSh4KQkoKHgpICYgMHgxRikKLSNkZWZpbmUgRURNQV9DRUVJX0NFRUkoeCkJ KCh4KSAmIDB4MUYpCi0jZGVmaW5lIEVETUFfQ0lOVF9DSU5UKHgpCSgoeCkgJiAweDFGKQotI2Rl ZmluZSBFRE1BX0NFUlJfQ0VSUih4KQkoKHgpICYgMHgxRikKLQotI2RlZmluZSBFRE1BX1RDRF9B VFRSX0RTSVpFKHgpCQkoKCh4KSAmIDB4MDAwNykpCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfRE1P RCh4KQkJKCgoeCkgJiAweDAwMUYpIDw8IDMpCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfU1NJWkUo eCkJCSgoKHgpICYgMHgwMDA3KSA8PCA4KQotI2RlZmluZSBFRE1BX1RDRF9BVFRSX1NNT0QoeCkJ CSgoKHgpICYgMHgwMDFGKSA8PCAxMSkKLSNkZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0laRV84QklU CSgweDAwMDApCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfU1NJWkVfMTZCSVQJKDB4MDEwMCkKLSNk ZWZpbmUgRURNQV9UQ0RfQVRUUl9TU0laRV8zMkJJVAkoMHgwMjAwKQotI2RlZmluZSBFRE1BX1RD RF9BVFRSX1NTSVpFXzY0QklUCSgweDAzMDApCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfU1NJWkVf MzJCWVRFCSgweDA1MDApCi0jZGVmaW5lIEVETUFfVENEX0FUVFJfRFNJWkVfOEJJVAkoMHgwMDAw KQotI2RlZmluZSBFRE1BX1RDRF9BVFRSX0RTSVpFXzE2QklUCSgweDAwMDEpCi0jZGVmaW5lIEVE TUFfVENEX0FUVFJfRFNJWkVfMzJCSVQJKDB4MDAwMikKLSNkZWZpbmUgRURNQV9UQ0RfQVRUUl9E U0laRV82NEJJVAkoMHgwMDAzKQotI2RlZmluZSBFRE1BX1RDRF9BVFRSX0RTSVpFXzMyQllURQko MHgwMDA1KQotCi0jZGVmaW5lIEVETUFfVENEX1NPRkZfU09GRih4KQkJKHgpCi0jZGVmaW5lIEVE TUFfVENEX05CWVRFU19OQllURVMoeCkJKHgpCi0jZGVmaW5lIEVETUFfVENEX1NMQVNUX1NMQVNU KHgpCQkoeCkKLSNkZWZpbmUgRURNQV9UQ0RfREFERFJfREFERFIoeCkJCSh4KQotI2RlZmluZSBF RE1BX1RDRF9DSVRFUl9DSVRFUih4KQkJKCh4KSAmIDB4N0ZGRikKLSNkZWZpbmUgRURNQV9UQ0Rf RE9GRl9ET0ZGKHgpCQkoeCkKLSNkZWZpbmUgRURNQV9UQ0RfRExBU1RfU0dBX0RMQVNUX1NHQSh4 KQkoeCkKLSNkZWZpbmUgRURNQV9UQ0RfQklURVJfQklURVIoeCkJCSgoeCkgJiAweDdGRkYpCi0K LSNkZWZpbmUgRURNQV9UQ0RfQ1NSX1NUQVJUCQlCSVQoMCkKLSNkZWZpbmUgRURNQV9UQ0RfQ1NS X0lOVF9NQUpPUgkJQklUKDEpCi0jZGVmaW5lIEVETUFfVENEX0NTUl9JTlRfSEFMRgkJQklUKDIp Ci0jZGVmaW5lIEVETUFfVENEX0NTUl9EX1JFUQkJQklUKDMpCi0jZGVmaW5lIEVETUFfVENEX0NT Ul9FX1NHCQlCSVQoNCkKLSNkZWZpbmUgRURNQV9UQ0RfQ1NSX0VfTElOSwkJQklUKDUpCi0jZGVm aW5lIEVETUFfVENEX0NTUl9BQ1RJVkUJCUJJVCg2KQotI2RlZmluZSBFRE1BX1RDRF9DU1JfRE9O RQkJQklUKDcpCi0KLSNkZWZpbmUgRURNQU1VWF9DSENGR19ESVMJCTB4MAotI2RlZmluZSBFRE1B TVVYX0NIQ0ZHX0VOQkwJCTB4ODAKLSNkZWZpbmUgRURNQU1VWF9DSENGR19TT1VSQ0UobikJCSgo bikgJiAweDNGKQotCi0jZGVmaW5lIERNQU1VWF9OUgkyCi0KLSNkZWZpbmUgRlNMX0VETUFfQlVT V0lEVEhTCUJJVChETUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFKSB8IFwKLQkJCQlCSVQoRE1BX1NM QVZFX0JVU1dJRFRIXzJfQllURVMpIHwgXAotCQkJCUJJVChETUFfU0xBVkVfQlVTV0lEVEhfNF9C WVRFUykgfCBcCi0JCQkJQklUKERNQV9TTEFWRV9CVVNXSURUSF84X0JZVEVTKQotZW51bSBmc2xf ZWRtYV9wbV9zdGF0ZSB7Ci0JUlVOTklORyA9IDAsCi0JU1VTUEVOREVELAotfTsKLQotc3RydWN0 IGZzbF9lZG1hX2h3X3RjZCB7Ci0JX19sZTMyCXNhZGRyOwotCV9fbGUxNglzb2ZmOwotCV9fbGUx NglhdHRyOwotCV9fbGUzMgluYnl0ZXM7Ci0JX19sZTMyCXNsYXN0OwotCV9fbGUzMglkYWRkcjsK LQlfX2xlMTYJZG9mZjsKLQlfX2xlMTYJY2l0ZXI7Ci0JX19sZTMyCWRsYXN0X3NnYTsKLQlfX2xl MTYJY3NyOwotCV9fbGUxNgliaXRlcjsKLX07Ci0KLXN0cnVjdCBmc2xfZWRtYV9zd190Y2Qgewot CWRtYV9hZGRyX3QJCQlwdGNkOwotCXN0cnVjdCBmc2xfZWRtYV9od190Y2QJCSp2dGNkOwotfTsK LQotc3RydWN0IGZzbF9lZG1hX3NsYXZlX2NvbmZpZyB7Ci0JZW51bSBkbWFfdHJhbnNmZXJfZGly ZWN0aW9uCWRpcjsKLQllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aAkJYWRkcl93aWR0aDsKLQl1MzIJ CQkJZGV2X2FkZHI7Ci0JdTMyCQkJCWJ1cnN0OwotCXUzMgkJCQlhdHRyOwotfTsKLQotc3RydWN0 IGZzbF9lZG1hX2NoYW4gewotCXN0cnVjdCB2aXJ0X2RtYV9jaGFuCQl2Y2hhbjsKLQllbnVtIGRt YV9zdGF0dXMJCQlzdGF0dXM7Ci0JZW51bSBmc2xfZWRtYV9wbV9zdGF0ZQkJcG1fc3RhdGU7Ci0J Ym9vbAkJCQlpZGxlOwotCXUzMgkJCQlzbGF2ZV9pZDsKLQlzdHJ1Y3QgZnNsX2VkbWFfZW5naW5l CQkqZWRtYTsKLQlzdHJ1Y3QgZnNsX2VkbWFfZGVzYwkJKmVkZXNjOwotCXN0cnVjdCBmc2xfZWRt YV9zbGF2ZV9jb25maWcJZnNjOwotCXN0cnVjdCBkbWFfcG9vbAkJCSp0Y2RfcG9vbDsKLX07Ci0K LXN0cnVjdCBmc2xfZWRtYV9kZXNjIHsKLQlzdHJ1Y3QgdmlydF9kbWFfZGVzYwkJdmRlc2M7Ci0J c3RydWN0IGZzbF9lZG1hX2NoYW4JCSplY2hhbjsKLQlib29sCQkJCWlzY3ljbGljOwotCXVuc2ln bmVkIGludAkJCW5fdGNkczsKLQlzdHJ1Y3QgZnNsX2VkbWFfc3dfdGNkCQl0Y2RbXTsKLX07Ci0K LXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgewotCXN0cnVjdCBkbWFfZGV2aWNlCWRtYV9kZXY7Ci0J dm9pZCBfX2lvbWVtCQkqbWVtYmFzZTsKLQl2b2lkIF9faW9tZW0JCSptdXhiYXNlW0RNQU1VWF9O Ul07Ci0Jc3RydWN0IGNsawkJKm11eGNsa1tETUFNVVhfTlJdOwotCXN0cnVjdCBtdXRleAkJZnNs X2VkbWFfbXV0ZXg7Ci0JdTMyCQkJbl9jaGFuczsKLQlpbnQJCQl0eGlycTsKLQlpbnQJCQllcnJp cnE7Ci0JYm9vbAkJCWJpZ19lbmRpYW47Ci0Jc3RydWN0IGZzbF9lZG1hX2NoYW4JY2hhbnNbXTsK LX07Ci0KLS8qCi0gKiBSL1cgZnVuY3Rpb25zIGZvciBiaWctIG9yIGxpdHRsZS1lbmRpYW4gcmVn aXN0ZXJzOgotICogVGhlIGVETUEgY29udHJvbGxlcidzIGVuZGlhbiBpcyBpbmRlcGVuZGVudCBv ZiB0aGUgQ1BVIGNvcmUncyBlbmRpYW4uCi0gKiBGb3IgdGhlIGJpZy1lbmRpYW4gSVAgbW9kdWxl LCB0aGUgb2Zmc2V0IGZvciA4LWJpdCBvciAxNi1iaXQgcmVnaXN0ZXJzCi0gKiBzaG91bGQgYWxz byBiZSBzd2FwcGVkIG9wcG9zaXRlIHRvIHRoYXQgaW4gbGl0dGxlLWVuZGlhbiBJUC4KLSAqLwot Ci1zdGF0aWMgdTMyIGVkbWFfcmVhZGwoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdm9p ZCBfX2lvbWVtICphZGRyKQotewotCWlmIChlZG1hLT5iaWdfZW5kaWFuKQotCQlyZXR1cm4gaW9y ZWFkMzJiZShhZGRyKTsKLQllbHNlCi0JCXJldHVybiBpb3JlYWQzMihhZGRyKTsKLX0KLQotc3Rh dGljIHZvaWQgZWRtYV93cml0ZWIoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTggdmFs LCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JLyogc3dhcCB0aGUgcmVnIG9mZnNldCBmb3IgdGhl c2UgaW4gYmlnLWVuZGlhbiBtb2RlICovCi0JaWYgKGVkbWEtPmJpZ19lbmRpYW4pCi0JCWlvd3Jp dGU4KHZhbCwgKHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZylhZGRyIF4gMHgzKSk7Ci0J ZWxzZQotCQlpb3dyaXRlOCh2YWwsIGFkZHIpOwotfQotCi1zdGF0aWMgdm9pZCBlZG1hX3dyaXRl dyhzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hLCB1MTYgdmFsLCB2b2lkIF9faW9tZW0gKmFk ZHIpCi17Ci0JLyogc3dhcCB0aGUgcmVnIG9mZnNldCBmb3IgdGhlc2UgaW4gYmlnLWVuZGlhbiBt b2RlICovCi0JaWYgKGVkbWEtPmJpZ19lbmRpYW4pCi0JCWlvd3JpdGUxNmJlKHZhbCwgKHZvaWQg X19pb21lbSAqKSgodW5zaWduZWQgbG9uZylhZGRyIF4gMHgyKSk7Ci0JZWxzZQotCQlpb3dyaXRl MTYodmFsLCBhZGRyKTsKLX0KLQotc3RhdGljIHZvaWQgZWRtYV93cml0ZWwoc3RydWN0IGZzbF9l ZG1hX2VuZ2luZSAqZWRtYSwgdTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWlmIChl ZG1hLT5iaWdfZW5kaWFuKQotCQlpb3dyaXRlMzJiZSh2YWwsIGFkZHIpOwotCWVsc2UKLQkJaW93 cml0ZTMyKHZhbCwgYWRkcik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqdG9f ZnNsX2VkbWFfY2hhbihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCi17Ci0JcmV0dXJuIGNvbnRhaW5l cl9vZihjaGFuLCBzdHJ1Y3QgZnNsX2VkbWFfY2hhbiwgdmNoYW4uY2hhbik7Ci19Ci0KLXN0YXRp YyBzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqdG9fZnNsX2VkbWFfZGVzYyhzdHJ1Y3QgdmlydF9kbWFf ZGVzYyAqdmQpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZih2ZCwgc3RydWN0IGZzbF9lZG1hX2Rl c2MsIHZkZXNjKTsKLX0KLQotc3RhdGljIHZvaWQgZnNsX2VkbWFfZW5hYmxlX3JlcXVlc3Qoc3Ry dWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuKQotewotCXZvaWQgX19pb21lbSAqYWRkciA9IGZz bF9jaGFuLT5lZG1hLT5tZW1iYXNlOwotCXUzMiBjaCA9IGZzbF9jaGFuLT52Y2hhbi5jaGFuLmNo YW5faWQ7Ci0KLQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgRURNQV9TRUVJX1NFRUkoY2gp LCBhZGRyICsgRURNQV9TRUVJKTsKLQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgY2gsIGFk ZHIgKyBFRE1BX1NFUlEpOwotfQotCi1zdGF0aWMgdm9pZCBmc2xfZWRtYV9kaXNhYmxlX3JlcXVl c3Qoc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuKQotewotCXZvaWQgX19pb21lbSAqYWRk ciA9IGZzbF9jaGFuLT5lZG1hLT5tZW1iYXNlOwotCXUzMiBjaCA9IGZzbF9jaGFuLT52Y2hhbi5j aGFuLmNoYW5faWQ7Ci0KLQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgY2gsIGFkZHIgKyBF RE1BX0NFUlEpOwotCWVkbWFfd3JpdGViKGZzbF9jaGFuLT5lZG1hLCBFRE1BX0NFRUlfQ0VFSShj aCksIGFkZHIgKyBFRE1BX0NFRUkpOwotfQotCi1zdGF0aWMgdm9pZCBmc2xfZWRtYV9jaGFuX211 eChzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4sCi0JCQl1bnNpZ25lZCBpbnQgc2xvdCwg Ym9vbCBlbmFibGUpCi17Ci0JdTMyIGNoID0gZnNsX2NoYW4tPnZjaGFuLmNoYW4uY2hhbl9pZDsK LQl2b2lkIF9faW9tZW0gKm11eGFkZHI7Ci0JdW5zaWduZWQgY2hhbnNfcGVyX211eCwgY2hfb2Zm OwotCi0JY2hhbnNfcGVyX211eCA9IGZzbF9jaGFuLT5lZG1hLT5uX2NoYW5zIC8gRE1BTVVYX05S OwotCWNoX29mZiA9IGZzbF9jaGFuLT52Y2hhbi5jaGFuLmNoYW5faWQgJSBjaGFuc19wZXJfbXV4 OwotCW11eGFkZHIgPSBmc2xfY2hhbi0+ZWRtYS0+bXV4YmFzZVtjaCAvIGNoYW5zX3Blcl9tdXhd OwotCXNsb3QgPSBFRE1BTVVYX0NIQ0ZHX1NPVVJDRShzbG90KTsKLQotCWlmIChlbmFibGUpCi0J CWlvd3JpdGU4KEVETUFNVVhfQ0hDRkdfRU5CTCB8IHNsb3QsIG11eGFkZHIgKyBjaF9vZmYpOwot CWVsc2UKLQkJaW93cml0ZTgoRURNQU1VWF9DSENGR19ESVMsIG11eGFkZHIgKyBjaF9vZmYpOwot fQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGZzbF9lZG1hX2dldF90Y2RfYXR0cihlbnVtIGRtYV9z bGF2ZV9idXN3aWR0aCBhZGRyX3dpZHRoKQotewotCXN3aXRjaCAoYWRkcl93aWR0aCkgewotCWNh c2UgMToKLQkJcmV0dXJuIEVETUFfVENEX0FUVFJfU1NJWkVfOEJJVCB8IEVETUFfVENEX0FUVFJf RFNJWkVfOEJJVDsKLQljYXNlIDI6Ci0JCXJldHVybiBFRE1BX1RDRF9BVFRSX1NTSVpFXzE2QklU IHwgRURNQV9UQ0RfQVRUUl9EU0laRV8xNkJJVDsKLQljYXNlIDQ6Ci0JCXJldHVybiBFRE1BX1RD RF9BVFRSX1NTSVpFXzMyQklUIHwgRURNQV9UQ0RfQVRUUl9EU0laRV8zMkJJVDsKLQljYXNlIDg6 Ci0JCXJldHVybiBFRE1BX1RDRF9BVFRSX1NTSVpFXzY0QklUIHwgRURNQV9UQ0RfQVRUUl9EU0la RV82NEJJVDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gRURNQV9UQ0RfQVRUUl9TU0laRV8zMkJJVCB8 IEVETUFfVENEX0FUVFJfRFNJWkVfMzJCSVQ7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBmc2xfZWRt YV9mcmVlX2Rlc2Moc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkZXNjKQotewotCXN0cnVjdCBmc2xf ZWRtYV9kZXNjICpmc2xfZGVzYzsKLQlpbnQgaTsKLQotCWZzbF9kZXNjID0gdG9fZnNsX2VkbWFf ZGVzYyh2ZGVzYyk7Ci0JZm9yIChpID0gMDsgaSA8IGZzbF9kZXNjLT5uX3RjZHM7IGkrKykKLQkJ ZG1hX3Bvb2xfZnJlZShmc2xfZGVzYy0+ZWNoYW4tPnRjZF9wb29sLCBmc2xfZGVzYy0+dGNkW2ld LnZ0Y2QsCi0JCQkgICAgICBmc2xfZGVzYy0+dGNkW2ldLnB0Y2QpOwotCWtmcmVlKGZzbF9kZXNj KTsKLX0KLQotc3RhdGljIGludCBmc2xfZWRtYV90ZXJtaW5hdGVfYWxsKHN0cnVjdCBkbWFfY2hh biAqY2hhbikKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfZWRt YV9jaGFuKGNoYW4pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JTElTVF9IRUFEKGhlYWQpOwot Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Ci0JZnNs X2VkbWFfZGlzYWJsZV9yZXF1ZXN0KGZzbF9jaGFuKTsKLQlmc2xfY2hhbi0+ZWRlc2MgPSBOVUxM OwotCWZzbF9jaGFuLT5pZGxlID0gdHJ1ZTsKLQl2Y2hhbl9nZXRfYWxsX2Rlc2NyaXB0b3JzKCZm c2xfY2hhbi0+dmNoYW4sICZoZWFkKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hh bi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCXZjaGFuX2RtYV9kZXNjX2ZyZWVfbGlzdCgmZnNsX2No YW4tPnZjaGFuLCAmaGVhZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZnNsX2VkbWFf cGF1c2Uoc3RydWN0IGRtYV9jaGFuICpjaGFuKQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpm c2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsK LQotCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCWlm IChmc2xfY2hhbi0+ZWRlc2MpIHsKLQkJZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KGZzbF9jaGFu KTsKLQkJZnNsX2NoYW4tPnN0YXR1cyA9IERNQV9QQVVTRUQ7Ci0JCWZzbF9jaGFuLT5pZGxlID0g dHJ1ZTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ss IGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBmc2xfZWRtYV9yZXN1bWUoc3Ry dWN0IGRtYV9jaGFuICpjaGFuKQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9 IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5f bG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCWlmIChmc2xfY2hh bi0+ZWRlc2MpIHsKLQkJZnNsX2VkbWFfZW5hYmxlX3JlcXVlc3QoZnNsX2NoYW4pOwotCQlmc2xf Y2hhbi0+c3RhdHVzID0gRE1BX0lOX1BST0dSRVNTOwotCQlmc2xfY2hhbi0+aWRsZSA9IGZhbHNl OwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxh Z3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGZzbF9lZG1hX3NsYXZlX2NvbmZpZyhz dHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCi0JCQkJIHN0cnVjdCBkbWFfc2xhdmVfY29uZmlnICpjZmcp Ci17Ci0Jc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2VkbWFfY2hhbihj aGFuKTsKLQotCWZzbF9jaGFuLT5mc2MuZGlyID0gY2ZnLT5kaXJlY3Rpb247Ci0JaWYgKGNmZy0+ ZGlyZWN0aW9uID09IERNQV9ERVZfVE9fTUVNKSB7Ci0JCWZzbF9jaGFuLT5mc2MuZGV2X2FkZHIg PSBjZmctPnNyY19hZGRyOwotCQlmc2xfY2hhbi0+ZnNjLmFkZHJfd2lkdGggPSBjZmctPnNyY19h ZGRyX3dpZHRoOwotCQlmc2xfY2hhbi0+ZnNjLmJ1cnN0ID0gY2ZnLT5zcmNfbWF4YnVyc3Q7Ci0J CWZzbF9jaGFuLT5mc2MuYXR0ciA9IGZzbF9lZG1hX2dldF90Y2RfYXR0cihjZmctPnNyY19hZGRy X3dpZHRoKTsKLQl9IGVsc2UgaWYgKGNmZy0+ZGlyZWN0aW9uID09IERNQV9NRU1fVE9fREVWKSB7 Ci0JCWZzbF9jaGFuLT5mc2MuZGV2X2FkZHIgPSBjZmctPmRzdF9hZGRyOwotCQlmc2xfY2hhbi0+ ZnNjLmFkZHJfd2lkdGggPSBjZmctPmRzdF9hZGRyX3dpZHRoOwotCQlmc2xfY2hhbi0+ZnNjLmJ1 cnN0ID0gY2ZnLT5kc3RfbWF4YnVyc3Q7Ci0JCWZzbF9jaGFuLT5mc2MuYXR0ciA9IGZzbF9lZG1h X2dldF90Y2RfYXR0cihjZmctPmRzdF9hZGRyX3dpZHRoKTsKLQl9IGVsc2UgewotCQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc2l6ZV90IGZzbF9lZG1hX2Rl c2NfcmVzaWR1ZShzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4sCi0JCXN0cnVjdCB2aXJ0 X2RtYV9kZXNjICp2ZGVzYywgYm9vbCBpbl9wcm9ncmVzcykKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFf ZGVzYyAqZWRlc2MgPSBmc2xfY2hhbi0+ZWRlc2M7Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0gZnNs X2NoYW4tPmVkbWEtPm1lbWJhc2U7Ci0JdTMyIGNoID0gZnNsX2NoYW4tPnZjaGFuLmNoYW4uY2hh bl9pZDsKLQllbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyID0gZnNsX2NoYW4tPmZzYy5k aXI7Ci0JZG1hX2FkZHJfdCBjdXJfYWRkciwgZG1hX2FkZHI7Ci0Jc2l6ZV90IGxlbiwgc2l6ZTsK LQlpbnQgaTsKLQotCS8qIGNhbGN1bGF0ZSB0aGUgdG90YWwgc2l6ZSBpbiB0aGlzIGRlc2MgKi8K LQlmb3IgKGxlbiA9IGkgPSAwOyBpIDwgZnNsX2NoYW4tPmVkZXNjLT5uX3RjZHM7IGkrKykKLQkJ bGVuICs9IGxlMzJfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+bmJ5dGVzKQotCQkJKiBsZTE2 X3RvX2NwdShlZGVzYy0+dGNkW2ldLnZ0Y2QtPmJpdGVyKTsKLQotCWlmICghaW5fcHJvZ3Jlc3Mp Ci0JCXJldHVybiBsZW47Ci0KLQlpZiAoZGlyID09IERNQV9NRU1fVE9fREVWKQotCQljdXJfYWRk ciA9IGVkbWFfcmVhZGwoZnNsX2NoYW4tPmVkbWEsIGFkZHIgKyBFRE1BX1RDRF9TQUREUihjaCkp OwotCWVsc2UKLQkJY3VyX2FkZHIgPSBlZG1hX3JlYWRsKGZzbF9jaGFuLT5lZG1hLCBhZGRyICsg RURNQV9UQ0RfREFERFIoY2gpKTsKLQotCS8qIGZpZ3VyZSBvdXQgdGhlIGZpbmlzaGVkIGFuZCBj YWxjdWxhdGUgdGhlIHJlc2lkdWUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZnNsX2NoYW4tPmVkZXNj LT5uX3RjZHM7IGkrKykgewotCQlzaXplID0gbGUzMl90b19jcHUoZWRlc2MtPnRjZFtpXS52dGNk LT5uYnl0ZXMpCi0JCQkqIGxlMTZfdG9fY3B1KGVkZXNjLT50Y2RbaV0udnRjZC0+Yml0ZXIpOwot CQlpZiAoZGlyID09IERNQV9NRU1fVE9fREVWKQotCQkJZG1hX2FkZHIgPSBsZTMyX3RvX2NwdShl ZGVzYy0+dGNkW2ldLnZ0Y2QtPnNhZGRyKTsKLQkJZWxzZQotCQkJZG1hX2FkZHIgPSBsZTMyX3Rv X2NwdShlZGVzYy0+dGNkW2ldLnZ0Y2QtPmRhZGRyKTsKLQotCQlsZW4gLT0gc2l6ZTsKLQkJaWYg KGN1cl9hZGRyID49IGRtYV9hZGRyICYmIGN1cl9hZGRyIDwgZG1hX2FkZHIgKyBzaXplKSB7Ci0J CQlsZW4gKz0gZG1hX2FkZHIgKyBzaXplIC0gY3VyX2FkZHI7Ci0JCQlicmVhazsKLQkJfQotCX0K LQotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBlbnVtIGRtYV9zdGF0dXMgZnNsX2VkbWFfdHhf c3RhdHVzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKLQkJZG1hX2Nvb2tpZV90IGNvb2tpZSwgc3Ry dWN0IGRtYV90eF9zdGF0ZSAqdHhzdGF0ZSkKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNs X2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOwotCXN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2 ZGVzYzsKLQllbnVtIGRtYV9zdGF0dXMgc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0K LQlzdGF0dXMgPSBkbWFfY29va2llX3N0YXR1cyhjaGFuLCBjb29raWUsIHR4c3RhdGUpOwotCWlm IChzdGF0dXMgPT0gRE1BX0NPTVBMRVRFKQotCQlyZXR1cm4gc3RhdHVzOwotCi0JaWYgKCF0eHN0 YXRlKQotCQlyZXR1cm4gZnNsX2NoYW4tPnN0YXR1czsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZm c2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCXZkZXNjID0gdmNoYW5fZmluZF9kZXNjKCZm c2xfY2hhbi0+dmNoYW4sIGNvb2tpZSk7Ci0JaWYgKGZzbF9jaGFuLT5lZGVzYyAmJiBjb29raWUg PT0gZnNsX2NoYW4tPmVkZXNjLT52ZGVzYy50eC5jb29raWUpCi0JCXR4c3RhdGUtPnJlc2lkdWUg PSBmc2xfZWRtYV9kZXNjX3Jlc2lkdWUoZnNsX2NoYW4sIHZkZXNjLCB0cnVlKTsKLQllbHNlIGlm ICh2ZGVzYykKLQkJdHhzdGF0ZS0+cmVzaWR1ZSA9IGZzbF9lZG1hX2Rlc2NfcmVzaWR1ZShmc2xf Y2hhbiwgdmRlc2MsIGZhbHNlKTsKLQllbHNlCi0JCXR4c3RhdGUtPnJlc2lkdWUgPSAwOwotCi0J c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLQot CXJldHVybiBmc2xfY2hhbi0+c3RhdHVzOwotfQotCi1zdGF0aWMgdm9pZCBmc2xfZWRtYV9zZXRf dGNkX3JlZ3Moc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFuLAotCQkJCSAgc3RydWN0IGZz bF9lZG1hX2h3X3RjZCAqdGNkKQotewotCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEgPSBm c2xfY2hhbi0+ZWRtYTsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBmc2xfY2hhbi0+ZWRtYS0+bWVt YmFzZTsKLQl1MzIgY2ggPSBmc2xfY2hhbi0+dmNoYW4uY2hhbi5jaGFuX2lkOwotCi0JLyoKLQkg KiBUQ0QgcGFyYW1ldGVycyBhcmUgc3RvcmVkIGluIHN0cnVjdCBmc2xfZWRtYV9od190Y2QgaW4g bGl0dGxlCi0JICogZW5kaWFuIGZvcm1hdC4gSG93ZXZlciwgd2UgbmVlZCB0byBsb2FkIHRoZSBU Q0QgcmVnaXN0ZXJzIGluCi0JICogYmlnLSBvciBsaXR0bGUtZW5kaWFuIG9iZXlpbmcgdGhlIGVE TUEgZW5naW5lIG1vZGVsIGVuZGlhbi4KLQkgKi8KLQllZG1hX3dyaXRldyhlZG1hLCAwLCBhZGRy ICsgRURNQV9UQ0RfQ1NSKGNoKSk7Ci0JZWRtYV93cml0ZWwoZWRtYSwgbGUzMl90b19jcHUodGNk LT5zYWRkciksIGFkZHIgKyBFRE1BX1RDRF9TQUREUihjaCkpOwotCWVkbWFfd3JpdGVsKGVkbWEs IGxlMzJfdG9fY3B1KHRjZC0+ZGFkZHIpLCBhZGRyICsgRURNQV9UQ0RfREFERFIoY2gpKTsKLQot CWVkbWFfd3JpdGV3KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+YXR0ciksIGFkZHIgKyBFRE1BX1RD RF9BVFRSKGNoKSk7Ci0JZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19jcHUodGNkLT5zb2ZmKSwg YWRkciArIEVETUFfVENEX1NPRkYoY2gpKTsKLQotCWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9f Y3B1KHRjZC0+bmJ5dGVzKSwgYWRkciArIEVETUFfVENEX05CWVRFUyhjaCkpOwotCWVkbWFfd3Jp dGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRjZC0+c2xhc3QpLCBhZGRyICsgRURNQV9UQ0RfU0xBU1Qo Y2gpKTsKLQotCWVkbWFfd3JpdGV3KGVkbWEsIGxlMTZfdG9fY3B1KHRjZC0+Y2l0ZXIpLCBhZGRy ICsgRURNQV9UQ0RfQ0lURVIoY2gpKTsKLQllZG1hX3dyaXRldyhlZG1hLCBsZTE2X3RvX2NwdSh0 Y2QtPmJpdGVyKSwgYWRkciArIEVETUFfVENEX0JJVEVSKGNoKSk7Ci0JZWRtYV93cml0ZXcoZWRt YSwgbGUxNl90b19jcHUodGNkLT5kb2ZmKSwgYWRkciArIEVETUFfVENEX0RPRkYoY2gpKTsKLQot CWVkbWFfd3JpdGVsKGVkbWEsIGxlMzJfdG9fY3B1KHRjZC0+ZGxhc3Rfc2dhKSwgYWRkciArIEVE TUFfVENEX0RMQVNUX1NHQShjaCkpOwotCi0JZWRtYV93cml0ZXcoZWRtYSwgbGUxNl90b19jcHUo dGNkLT5jc3IpLCBhZGRyICsgRURNQV9UQ0RfQ1NSKGNoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUK LXZvaWQgZnNsX2VkbWFfZmlsbF90Y2Qoc3RydWN0IGZzbF9lZG1hX2h3X3RjZCAqdGNkLCB1MzIg c3JjLCB1MzIgZHN0LAotCQkgICAgICAgdTE2IGF0dHIsIHUxNiBzb2ZmLCB1MzIgbmJ5dGVzLCB1 MzIgc2xhc3QsIHUxNiBjaXRlciwKLQkJICAgICAgIHUxNiBiaXRlciwgdTE2IGRvZmYsIHUzMiBk bGFzdF9zZ2EsIGJvb2wgbWFqb3JfaW50LAotCQkgICAgICAgYm9vbCBkaXNhYmxlX3JlcSwgYm9v bCBlbmFibGVfc2cpCi17Ci0JdTE2IGNzciA9IDA7Ci0KLQkvKgotCSAqIGVETUEgaGFyZHdhcmUg U0dzIHJlcXVpcmUgdGhlIFRDRHMgdG8gYmUgc3RvcmVkIGluIGxpdHRsZQotCSAqIGVuZGlhbiBm b3JtYXQgaXJyZXNwZWN0aXZlIG9mIHRoZSByZWdpc3RlciBlbmRpYW4gbW9kZWwuCi0JICogU28g d2UgcHV0IHRoZSB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGluIG1lbW9yeSwgd2FpdGluZwotCSAq IGZvciBmc2xfZWRtYV9zZXRfdGNkX3JlZ3MgZG9pbmcgdGhlIHN3YXAuCi0JICovCi0JdGNkLT5z YWRkciA9IGNwdV90b19sZTMyKHNyYyk7Ci0JdGNkLT5kYWRkciA9IGNwdV90b19sZTMyKGRzdCk7 Ci0KLQl0Y2QtPmF0dHIgPSBjcHVfdG9fbGUxNihhdHRyKTsKLQotCXRjZC0+c29mZiA9IGNwdV90 b19sZTE2KEVETUFfVENEX1NPRkZfU09GRihzb2ZmKSk7Ci0KLQl0Y2QtPm5ieXRlcyA9IGNwdV90 b19sZTMyKEVETUFfVENEX05CWVRFU19OQllURVMobmJ5dGVzKSk7Ci0JdGNkLT5zbGFzdCA9IGNw dV90b19sZTMyKEVETUFfVENEX1NMQVNUX1NMQVNUKHNsYXN0KSk7Ci0KLQl0Y2QtPmNpdGVyID0g Y3B1X3RvX2xlMTYoRURNQV9UQ0RfQ0lURVJfQ0lURVIoY2l0ZXIpKTsKLQl0Y2QtPmRvZmYgPSBj cHVfdG9fbGUxNihFRE1BX1RDRF9ET0ZGX0RPRkYoZG9mZikpOwotCi0JdGNkLT5kbGFzdF9zZ2Eg PSBjcHVfdG9fbGUzMihFRE1BX1RDRF9ETEFTVF9TR0FfRExBU1RfU0dBKGRsYXN0X3NnYSkpOwot Ci0JdGNkLT5iaXRlciA9IGNwdV90b19sZTE2KEVETUFfVENEX0JJVEVSX0JJVEVSKGJpdGVyKSk7 Ci0JaWYgKG1ham9yX2ludCkKLQkJY3NyIHw9IEVETUFfVENEX0NTUl9JTlRfTUFKT1I7Ci0KLQlp ZiAoZGlzYWJsZV9yZXEpCi0JCWNzciB8PSBFRE1BX1RDRF9DU1JfRF9SRVE7Ci0KLQlpZiAoZW5h YmxlX3NnKQotCQljc3IgfD0gRURNQV9UQ0RfQ1NSX0VfU0c7Ci0KLQl0Y2QtPmNzciA9IGNwdV90 b19sZTE2KGNzcik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZnNsX2VkbWFfZGVzYyAqZnNsX2VkbWFf YWxsb2NfZGVzYyhzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4sCi0JCWludCBzZ19sZW4p Ci17Ci0Jc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9kZXNjOwotCWludCBpOwotCi0JZnNsX2Rl c2MgPSBremFsbG9jKHNpemVvZigqZnNsX2Rlc2MpICsgc2l6ZW9mKHN0cnVjdCBmc2xfZWRtYV9z d190Y2QpICogc2dfbGVuLAotCQkJCUdGUF9OT1dBSVQpOwotCWlmICghZnNsX2Rlc2MpCi0JCXJl dHVybiBOVUxMOwotCi0JZnNsX2Rlc2MtPmVjaGFuID0gZnNsX2NoYW47Ci0JZnNsX2Rlc2MtPm5f dGNkcyA9IHNnX2xlbjsKLQlmb3IgKGkgPSAwOyBpIDwgc2dfbGVuOyBpKyspIHsKLQkJZnNsX2Rl c2MtPnRjZFtpXS52dGNkID0gZG1hX3Bvb2xfYWxsb2MoZnNsX2NoYW4tPnRjZF9wb29sLAotCQkJ CQlHRlBfTk9XQUlULCAmZnNsX2Rlc2MtPnRjZFtpXS5wdGNkKTsKLQkJaWYgKCFmc2xfZGVzYy0+ dGNkW2ldLnZ0Y2QpCi0JCQlnb3RvIGVycjsKLQl9Ci0JcmV0dXJuIGZzbF9kZXNjOwotCi1lcnI6 Ci0Jd2hpbGUgKC0taSA+PSAwKQotCQlkbWFfcG9vbF9mcmVlKGZzbF9jaGFuLT50Y2RfcG9vbCwg ZnNsX2Rlc2MtPnRjZFtpXS52dGNkLAotCQkJCWZzbF9kZXNjLT50Y2RbaV0ucHRjZCk7Ci0Ja2Zy ZWUoZnNsX2Rlc2MpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IGRtYV9hc3lu Y190eF9kZXNjcmlwdG9yICpmc2xfZWRtYV9wcmVwX2RtYV9jeWNsaWMoCi0JCXN0cnVjdCBkbWFf Y2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IGJ1Zl9sZW4sCi0JCXNpemVf dCBwZXJpb2RfbGVuLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQl1 bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9 IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7Ci0Jc3RydWN0IGZzbF9lZG1hX2Rlc2MgKmZzbF9kZXNj OwotCWRtYV9hZGRyX3QgZG1hX2J1Zl9uZXh0OwotCWludCBzZ19sZW4sIGk7Ci0JdTMyIHNyY19h ZGRyLCBkc3RfYWRkciwgbGFzdF9zZywgbmJ5dGVzOwotCXUxNiBzb2ZmLCBkb2ZmLCBpdGVyOwot Ci0JaWYgKCFpc19zbGF2ZV9kaXJlY3Rpb24oZnNsX2NoYW4tPmZzYy5kaXIpKQotCQlyZXR1cm4g TlVMTDsKLQotCXNnX2xlbiA9IGJ1Zl9sZW4gLyBwZXJpb2RfbGVuOwotCWZzbF9kZXNjID0gZnNs X2VkbWFfYWxsb2NfZGVzYyhmc2xfY2hhbiwgc2dfbGVuKTsKLQlpZiAoIWZzbF9kZXNjKQotCQly ZXR1cm4gTlVMTDsKLQlmc2xfZGVzYy0+aXNjeWNsaWMgPSB0cnVlOwotCi0JZG1hX2J1Zl9uZXh0 ID0gZG1hX2FkZHI7Ci0JbmJ5dGVzID0gZnNsX2NoYW4tPmZzYy5hZGRyX3dpZHRoICogZnNsX2No YW4tPmZzYy5idXJzdDsKLQlpdGVyID0gcGVyaW9kX2xlbiAvIG5ieXRlczsKLQotCWZvciAoaSA9 IDA7IGkgPCBzZ19sZW47IGkrKykgewotCQlpZiAoZG1hX2J1Zl9uZXh0ID49IGRtYV9hZGRyICsg YnVmX2xlbikKLQkJCWRtYV9idWZfbmV4dCA9IGRtYV9hZGRyOwotCi0JCS8qIGdldCBuZXh0IHNn J3MgcGh5c2ljYWwgYWRkcmVzcyAqLwotCQlsYXN0X3NnID0gZnNsX2Rlc2MtPnRjZFsoaSArIDEp ICUgc2dfbGVuXS5wdGNkOwotCi0JCWlmIChmc2xfY2hhbi0+ZnNjLmRpciA9PSBETUFfTUVNX1RP X0RFVikgewotCQkJc3JjX2FkZHIgPSBkbWFfYnVmX25leHQ7Ci0JCQlkc3RfYWRkciA9IGZzbF9j aGFuLT5mc2MuZGV2X2FkZHI7Ci0JCQlzb2ZmID0gZnNsX2NoYW4tPmZzYy5hZGRyX3dpZHRoOwot CQkJZG9mZiA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlzcmNfYWRkciA9IGZzbF9jaGFuLT5mc2MuZGV2 X2FkZHI7Ci0JCQlkc3RfYWRkciA9IGRtYV9idWZfbmV4dDsKLQkJCXNvZmYgPSAwOwotCQkJZG9m ZiA9IGZzbF9jaGFuLT5mc2MuYWRkcl93aWR0aDsKLQkJfQotCi0JCWZzbF9lZG1hX2ZpbGxfdGNk KGZzbF9kZXNjLT50Y2RbaV0udnRjZCwgc3JjX2FkZHIsIGRzdF9hZGRyLAotCQkJCSAgZnNsX2No YW4tPmZzYy5hdHRyLCBzb2ZmLCBuYnl0ZXMsIDAsIGl0ZXIsCi0JCQkJICBpdGVyLCBkb2ZmLCBs YXN0X3NnLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7Ci0JCWRtYV9idWZfbmV4dCArPSBwZXJpb2RfbGVu OwotCX0KLQotCXJldHVybiB2Y2hhbl90eF9wcmVwKCZmc2xfY2hhbi0+dmNoYW4sICZmc2xfZGVz Yy0+dmRlc2MsIGZsYWdzKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3Jp cHRvciAqZnNsX2VkbWFfcHJlcF9zbGF2ZV9zZygKLQkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBz dHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKLQkJdW5zaWduZWQgaW50IHNnX2xlbiwgZW51bSBkbWFf dHJhbnNmZXJfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJdW5zaWduZWQgbG9uZyBmbGFncywgdm9p ZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xf ZWRtYV9jaGFuKGNoYW4pOwotCXN0cnVjdCBmc2xfZWRtYV9kZXNjICpmc2xfZGVzYzsKLQlzdHJ1 Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCXUzMiBzcmNfYWRkciwgZHN0X2FkZHIsIGxhc3Rfc2csIG5i eXRlczsKLQl1MTYgc29mZiwgZG9mZiwgaXRlcjsKLQlpbnQgaTsKLQotCWlmICghaXNfc2xhdmVf ZGlyZWN0aW9uKGZzbF9jaGFuLT5mc2MuZGlyKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlmc2xfZGVz YyA9IGZzbF9lZG1hX2FsbG9jX2Rlc2MoZnNsX2NoYW4sIHNnX2xlbik7Ci0JaWYgKCFmc2xfZGVz YykKLQkJcmV0dXJuIE5VTEw7Ci0JZnNsX2Rlc2MtPmlzY3ljbGljID0gZmFsc2U7Ci0KLQluYnl0 ZXMgPSBmc2xfY2hhbi0+ZnNjLmFkZHJfd2lkdGggKiBmc2xfY2hhbi0+ZnNjLmJ1cnN0OwotCWZv cl9lYWNoX3NnKHNnbCwgc2csIHNnX2xlbiwgaSkgewotCQkvKiBnZXQgbmV4dCBzZydzIHBoeXNp Y2FsIGFkZHJlc3MgKi8KLQkJbGFzdF9zZyA9IGZzbF9kZXNjLT50Y2RbKGkgKyAxKSAlIHNnX2xl bl0ucHRjZDsKLQotCQlpZiAoZnNsX2NoYW4tPmZzYy5kaXIgPT0gRE1BX01FTV9UT19ERVYpIHsK LQkJCXNyY19hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwotCQkJZHN0X2FkZHIgPSBmc2xfY2hh bi0+ZnNjLmRldl9hZGRyOwotCQkJc29mZiA9IGZzbF9jaGFuLT5mc2MuYWRkcl93aWR0aDsKLQkJ CWRvZmYgPSAwOwotCQl9IGVsc2UgewotCQkJc3JjX2FkZHIgPSBmc2xfY2hhbi0+ZnNjLmRldl9h ZGRyOwotCQkJZHN0X2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7Ci0JCQlzb2ZmID0gMDsKLQkJ CWRvZmYgPSBmc2xfY2hhbi0+ZnNjLmFkZHJfd2lkdGg7Ci0JCX0KLQotCQlpdGVyID0gc2dfZG1h X2xlbihzZykgLyBuYnl0ZXM7Ci0JCWlmIChpIDwgc2dfbGVuIC0gMSkgewotCQkJbGFzdF9zZyA9 IGZzbF9kZXNjLT50Y2RbKGkgKyAxKV0ucHRjZDsKLQkJCWZzbF9lZG1hX2ZpbGxfdGNkKGZzbF9k ZXNjLT50Y2RbaV0udnRjZCwgc3JjX2FkZHIsCi0JCQkJCSAgZHN0X2FkZHIsIGZzbF9jaGFuLT5m c2MuYXR0ciwgc29mZiwKLQkJCQkJICBuYnl0ZXMsIDAsIGl0ZXIsIGl0ZXIsIGRvZmYsIGxhc3Rf c2csCi0JCQkJCSAgZmFsc2UsIGZhbHNlLCB0cnVlKTsKLQkJfSBlbHNlIHsKLQkJCWxhc3Rfc2cg PSAwOwotCQkJZnNsX2VkbWFfZmlsbF90Y2QoZnNsX2Rlc2MtPnRjZFtpXS52dGNkLCBzcmNfYWRk ciwKLQkJCQkJICBkc3RfYWRkciwgZnNsX2NoYW4tPmZzYy5hdHRyLCBzb2ZmLAotCQkJCQkgIG5i eXRlcywgMCwgaXRlciwgaXRlciwgZG9mZiwgbGFzdF9zZywKLQkJCQkJICB0cnVlLCB0cnVlLCBm YWxzZSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdmNoYW5fdHhfcHJlcCgmZnNsX2NoYW4tPnZjaGFu LCAmZnNsX2Rlc2MtPnZkZXNjLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZzbF9lZG1hX3hm ZXJfZGVzYyhzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4pCi17Ci0Jc3RydWN0IHZpcnRf ZG1hX2Rlc2MgKnZkZXNjOwotCi0JdmRlc2MgPSB2Y2hhbl9uZXh0X2Rlc2MoJmZzbF9jaGFuLT52 Y2hhbik7Ci0JaWYgKCF2ZGVzYykKLQkJcmV0dXJuOwotCWZzbF9jaGFuLT5lZGVzYyA9IHRvX2Zz bF9lZG1hX2Rlc2ModmRlc2MpOwotCWZzbF9lZG1hX3NldF90Y2RfcmVncyhmc2xfY2hhbiwgZnNs X2NoYW4tPmVkZXNjLT50Y2RbMF0udnRjZCk7Ci0JZnNsX2VkbWFfZW5hYmxlX3JlcXVlc3QoZnNs X2NoYW4pOwotCWZzbF9jaGFuLT5zdGF0dXMgPSBETUFfSU5fUFJPR1JFU1M7Ci0JZnNsX2NoYW4t PmlkbGUgPSBmYWxzZTsKLX0KKyNpbmNsdWRlICJmc2wtZWRtYS1jb21tb24uaCIKIAogc3RhdGlj IGlycXJldHVybl90IGZzbF9lZG1hX3R4X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQog ewpAQCAtNzMwLDI1ICs5Myw2IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBmc2xfZWRtYV9pcnFfaGFu ZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiAJcmV0dXJuIGZzbF9lZG1hX2Vycl9oYW5kbGVy KGlycSwgZGV2X2lkKTsKIH0KIAotc3RhdGljIHZvaWQgZnNsX2VkbWFfaXNzdWVfcGVuZGluZyhz dHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCi17Ci0Jc3RydWN0IGZzbF9lZG1hX2NoYW4gKmZzbF9jaGFu ID0gdG9fZnNsX2VkbWFfY2hhbihjaGFuKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bp bl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Ci0KLQlpZiAodW5s aWtlbHkoZnNsX2NoYW4tPnBtX3N0YXRlICE9IFJVTk5JTkcpKSB7Ci0JCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmZzbF9jaGFuLT52Y2hhbi5sb2NrLCBmbGFncyk7Ci0JCS8qIGNhbm5vdCBzdWJt aXQgZHVlIHRvIHN1c3BlbmQgKi8KLQkJcmV0dXJuOwotCX0KLQotCWlmICh2Y2hhbl9pc3N1ZV9w ZW5kaW5nKCZmc2xfY2hhbi0+dmNoYW4pICYmICFmc2xfY2hhbi0+ZWRlc2MpCi0JCWZzbF9lZG1h X3hmZXJfZGVzYyhmc2xfY2hhbik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hh bi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotfQotCiBzdGF0aWMgc3RydWN0IGRtYV9jaGFuICpmc2xf ZWRtYV94bGF0ZShzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICpkbWFfc3BlYywKIAkJc3RydWN0IG9m X2RtYSAqb2ZkbWEpCiB7CkBAIC03ODEsMzQgKzEyNSw2IEBAIHN0YXRpYyBzdHJ1Y3QgZG1hX2No YW4gKmZzbF9lZG1hX3hsYXRlKHN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgKmRtYV9zcGVjLAogCXJl dHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IGZzbF9lZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2Vz KHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKLXsKLQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2No YW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOwotCi0JZnNsX2NoYW4tPnRjZF9wb29sID0gZG1h X3Bvb2xfY3JlYXRlKCJ0Y2RfcG9vbCIsIGNoYW4tPmRldmljZS0+ZGV2LAotCQkJCXNpemVvZihz dHJ1Y3QgZnNsX2VkbWFfaHdfdGNkKSwKLQkJCQkzMiwgMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyB2b2lkIGZzbF9lZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpj aGFuKQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9lZG1hX2No YW4oY2hhbik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlMSVNUX0hFQUQoaGVhZCk7Ci0KLQlz cGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPnZjaGFuLmxvY2ssIGZsYWdzKTsKLQlmc2xfZWRt YV9kaXNhYmxlX3JlcXVlc3QoZnNsX2NoYW4pOwotCWZzbF9lZG1hX2NoYW5fbXV4KGZzbF9jaGFu LCAwLCBmYWxzZSk7Ci0JZnNsX2NoYW4tPmVkZXNjID0gTlVMTDsKLQl2Y2hhbl9nZXRfYWxsX2Rl c2NyaXB0b3JzKCZmc2xfY2hhbi0+dmNoYW4sICZoZWFkKTsKLQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZmc2xfY2hhbi0+dmNoYW4ubG9jaywgZmxhZ3MpOwotCi0JdmNoYW5fZG1hX2Rlc2NfZnJl ZV9saXN0KCZmc2xfY2hhbi0+dmNoYW4sICZoZWFkKTsKLQlkbWFfcG9vbF9kZXN0cm95KGZzbF9j aGFuLT50Y2RfcG9vbCk7Ci0JZnNsX2NoYW4tPnRjZF9wb29sID0gTlVMTDsKLX0KLQogc3RhdGlj IGludAogZnNsX2VkbWFfaXJxX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3Ry dWN0IGZzbF9lZG1hX2VuZ2luZSAqZnNsX2VkbWEpCiB7CkBAIC05OTUsMTcgKzMxMSw2IEBAIHN0 YXRpYyBpbnQgZnNsX2VkbWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAly ZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZnNsX2VkbWFfY2xlYW51cF92Y2hhbihzdHJ1Y3Qg ZG1hX2RldmljZSAqZG1hZGV2KQotewotCXN0cnVjdCBmc2xfZWRtYV9jaGFuICpjaGFuLCAqX2No YW47Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hhbiwgX2NoYW4sCi0JCQkJJmRtYWRl di0+Y2hhbm5lbHMsIHZjaGFuLmNoYW4uZGV2aWNlX25vZGUpIHsKLQkJbGlzdF9kZWwoJmNoYW4t PnZjaGFuLmNoYW4uZGV2aWNlX25vZGUpOwotCQl0YXNrbGV0X2tpbGwoJmNoYW4tPnZjaGFuLnRh c2spOwotCX0KLX0KLQogc3RhdGljIGludCBmc2xfZWRtYV9yZW1vdmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9m X25vZGU7Cg==