[PATCH v6 08/17] spi: cadence-quadspi: add PHY tuning support
Santhosh Kumar K <[email protected]> Thu, 23 Jul 2026 16:32:10 +0530
| Newsgroups | org.infradead.lists.linux-mtd,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel,org.kernel.vger.linux-spi |
|---|---|
| Message-ID | <[email protected]> |
VGhlIENhZGVuY2UgUVNQSSBjb250cm9sbGVyIHN1cHBvcnRzIGEgZGVsYXktbGluZSBQSFkgZm9y IGhpZ2gtc3BlZWQKb3BlcmF0aW9uLiBXaXRob3V0IGNhbGlicmF0aW9uIHRoZSBQSFkgaXMgdW51 c2VkIGFuZCByZWFkIGNhcHR1cmUgcmVsaWVzCm9uIGEgZml4ZWQgZGVsYXksIGxpbWl0aW5nIHRo cm91Z2hwdXQgYXQgZnJlcXVlbmNpZXMgYWJvdmUgdGhlIGJhc2UKb3BlcmF0aW5nIHNwZWVkLgoK QWRkIGFuIGV4ZWN1dGVfdHVuaW5nIGNhbGxiYWNrIHRoYXQgcGVyZm9ybXMgZGVsYXktbGluZSBj YWxpYnJhdGlvbiB1c2luZwphIGtub3duIGRhdGEgcGF0dGVybiB3cml0dGVuIHRvIGEgZGVkaWNh dGVkIGZsYXNoIHJlZ2lvbi4gVGhlIHBhdHRlcm4gaXMKZWl0aGVyIHJlYWQgZnJvbSBhIE5PUiBw YXJ0aXRpb24gaWRlbnRpZmllZCBieSB0aGUgRFQgcHJvcGVydHkKc3BpLXBoeS1wYXR0ZXJuLXBh cnRpdGlvbiwgb3Igd3JpdHRlbiB0byB0aGUgTkFORCBwYWdlIGNhY2hlIGJlZm9yZQplYWNoIGNh bGlicmF0aW9uIHJlYWQuCgpGb3IgRERSIHByb3RvY29scyAoOEQtOEQtOEQpIGEgMkQgc3dlZXAg b2YgKHJ4X2RlbGF5LCB0eF9kZWxheSkgcGFpcnMKaXMgcGVyZm9ybWVkIHRvIGZpbmQgdGhlIHdp ZGVzdCBwYXNzaW5nIHJlZ2lvbiBpbiB0aGUgY29tYmluZWQgUlgvVFgKc3BhY2UuIEJpbmFyeSBz ZWFyY2ggbG9jYXRlcyB0aGUgZ2FwIGJvdW5kYXJ5IGJldHdlZW4gcGFzc2luZyByZWdpb25zCndo ZW4gdHdvIHNlcGFyYXRlIHdpbmRvd3MgZXhpc3Q7IHRoZSBmaW5hbCBvcGVyYXRpbmcgcG9pbnQg aXMgcGxhY2VkIGF0CnRoZSBjZW50cmUgb2YgdGhlIGxhcmdlciByZWdpb24gd2l0aCBhIHNtYWxs IHRlbXBlcmF0dXJlLWRlcGVuZGVudApvZmZzZXQuCgpGb3IgU0RSIHByb3RvY29scyBhIDFEIHN3 ZWVwIG9mIHRoZSBSWCBkZWxheSBpcyBzdWZmaWNpZW50LiBUd28gd2luZG93cwphdCBhZGphY2Vu dCByZWFkX2RlbGF5IHZhbHVlcyBhcmUgbWVhc3VyZWQ7IHRoZSB3aWRlciBvbmUncyBtaWRwb2lu dCBpcwpzZWxlY3RlZC4KClRoZSB0dW5pbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgcGxhdGZvcm0tc3Bl Y2lmaWM6IG9ubHkgYW02NTQtYmFzZWQgT1NQSQpjb250cm9sbGVycyBwb3B1bGF0ZSB0aGUgZXhl Y3V0ZV90dW5pbmcgaG9vay4gQWxsIG90aGVyIHBsYXRmb3JtIGRhdGEKZW50cmllcyByZXR1cm4g LUVPUE5PVFNVUFAgYW5kIGFyZSB1bmFmZmVjdGVkLgoKVGhlIGNhbGlicmF0aW9uIHRhcmdldCBp cyBzb3VyY2VkIGZyb20gc3BpLT5wb3N0X2NvbmZpZ19tYXhfc3BlZWRfaHosCnBvcHVsYXRlZCBi eSB0aGUgU1BJIGNvcmUgZnJvbSB0aGUgc3BpLW1heC1wb3N0LWNvbmZpZy1mcmVxdWVuY3ktaHog RFQKcHJvcGVydHkuIFR1bmluZyBpcyBza2lwcGVkIHdoZW4gcG9zdF9jb25maWdfbWF4X3NwZWVk X2h6IGlzIHplcm8uCgpTaWduZWQtb2ZmLWJ5OiBTYW50aG9zaCBLdW1hciBLIDxzLWs2QHRpLmNv bT4KLS0tCiBkcml2ZXJzL3NwaS9zcGktY2FkZW5jZS1xdWFkc3BpLmMgfCAxNzQ1ICsrKysrKysr KysrKysrKysrKysrKysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgMTczNCBpbnNlcnRpb25zKCsp LCAxMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktY2FkZW5jZS1x dWFkc3BpLmMgYi9kcml2ZXJzL3NwaS9zcGktY2FkZW5jZS1xdWFkc3BpLmMKaW5kZXggMDQ2ZmE1 ZDY5YjBmLi4yMmE1Yzg4YmJkOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1jYWRlbmNl LXF1YWRzcGkuYworKysgYi9kcml2ZXJzL3NwaS9zcGktY2FkZW5jZS1xdWFkc3BpLmMKQEAgLTYs NiArNiw3IEBACiAvLyBDb3B5cmlnaHQgSW50ZWwgQ29ycG9yYXRpb24gKEMpIDIwMTktMjAyMC4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIENvcHlyaWdodCAoQykgMjAyMCBUZXhhcyBJbnN0cnVt ZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbQogCisjaW5jbHVkZSA8bGludXgv Yml0ZmllbGQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jb21w bGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTY1LDE1ICs2NiwyNiBAQCBl bnVtIHsKIAogc3RydWN0IGNxc3BpX3N0OwogCitzdHJ1Y3QgcGh5X3NldHRpbmcgeworCXU4CQkJ cng7CisJdTgJCQl0eDsKKwl1OAkJCXJlYWRfZGVsYXk7Cit9OworCiBzdHJ1Y3QgY3FzcGlfZmxh c2hfcGRhdGEgewotCXN0cnVjdCBjcXNwaV9zdAkqY3FzcGk7Ci0JdTMyCQljbGtfcmF0ZTsKLQl1 MzIJCXJlYWRfZGVsYXk7Ci0JdTMyCQl0c2hzbF9uczsKLQl1MzIJCXRzZDJkX25zOwotCXUzMgkJ dGNoc2hfbnM7Ci0JdTMyCQl0c2xjaF9uczsKLQl1OAkJY3M7CisJc3RydWN0IGNxc3BpX3N0CQkq Y3FzcGk7CisJdTMyCQkJcmVhZF9kZWxheTsKKwl1MzIJCQl0c2hzbF9uczsKKwl1MzIJCQl0c2Qy ZF9uczsKKwl1MzIJCQl0Y2hzaF9uczsKKwl1MzIJCQl0c2xjaF9uczsKKwlib29sCQkJdXNlX2Rx czsKKwlib29sCQkJdXNlX3R1bmVkX3BoeTsKKwl1OAkJCWNzOworCXN0cnVjdCBwaHlfc2V0dGlu ZwlwaHlfc2V0dGluZzsKKwlzdHJ1Y3Qgc3BpX21lbV9vcAlwaHlfcmVhZF9vcDsKKwlzdHJ1Y3Qg c3BpX21lbV9vcAlwaHlfd3JpdGVfb3A7CisJdTMyCQkJcGh5X3BhdHRlcm5fcGFydGl0aW9uX29m ZnNldDsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX2J1bGtfZGF0YSBjcXNwaV9jbGtz W0NMS19RU1BJX05VTV0gPSB7CkBAIC0xMjksMTIgKzE0MSwxNSBAQCBzdHJ1Y3QgY3FzcGlfZHJp dmVyX3BsYXRkYXRhIHsKIAlpbnQgKCppbmRpcmVjdF9yZWFkX2RtYSkoc3RydWN0IGNxc3BpX2Zs YXNoX3BkYXRhICpmX3BkYXRhLAogCQkJCSB1X2NoYXIgKnJ4YnVmLCBsb2ZmX3QgZnJvbV9hZGRy LCBzaXplX3Qgbl9yeCk7CiAJdTMyICgqZ2V0X2RtYV9zdGF0dXMpKHN0cnVjdCBjcXNwaV9zdCAq Y3FzcGkpOworCWludCAoKmV4ZWN1dGVfdHVuaW5nKShzdHJ1Y3Qgc3BpX21lbSAqbWVtLCBzdHJ1 Y3Qgc3BpX21lbV9vcCAqcmVhZF9vcCwKKwkJCSAgICAgIHN0cnVjdCBzcGlfbWVtX29wICp3cml0 ZV9vcCk7CiB9OwogCiAvKiBPcGVyYXRpb24gdGltZW91dCB2YWx1ZSAqLwogI2RlZmluZSBDUVNQ SV9USU1FT1VUX01TCQkJNTAwCiAjZGVmaW5lIENRU1BJX1JFQURfVElNRU9VVF9NUwkJCTEwCiAj ZGVmaW5lIENRU1BJX0JVU1lXQUlUX1RJTUVPVVRfVVMJCTUwMAorI2RlZmluZSBDUVNQSV9ETExf VElNRU9VVF9VUwkJCTMwMAogCiAvKiBSdW50aW1lX3BtIGF1dG9zdXNwZW5kIGRlbGF5ICovCiAj ZGVmaW5lIENRU1BJX0FVVE9TVVNQRU5EX1RJTUVPVVQJCTIwMDAKQEAgLTE0OCwxMiArMTYzLDE0 IEBAIHN0cnVjdCBjcXNwaV9kcml2ZXJfcGxhdGRhdGEgewogLyogUmVnaXN0ZXIgbWFwICovCiAj ZGVmaW5lIENRU1BJX1JFR19DT05GSUcJCQkweDAwCiAjZGVmaW5lIENRU1BJX1JFR19DT05GSUdf RU5BQkxFX01BU0sJCUJJVCgwKQorI2RlZmluZSBDUVNQSV9SRUdfQ09ORklHX1BIWV9FTgkJCUJJ VCgzKQogI2RlZmluZSBDUVNQSV9SRUdfQ09ORklHX0VOQl9ESVJfQUNDX0NUUkwJQklUKDcpCiAj ZGVmaW5lIENRU1BJX1JFR19DT05GSUdfREVDT0RFX01BU0sJCUJJVCg5KQogI2RlZmluZSBDUVNQ SV9SRUdfQ09ORklHX0NISVBTRUxFQ1RfTFNCCQkxMAogI2RlZmluZSBDUVNQSV9SRUdfQ09ORklH X0RNQV9NQVNLCQlCSVQoMTUpCiAjZGVmaW5lIENRU1BJX1JFR19DT05GSUdfQkFVRF9MU0IJCTE5 CiAjZGVmaW5lIENRU1BJX1JFR19DT05GSUdfRFRSX1BST1RPCQlCSVQoMjQpCisjZGVmaW5lIENR U1BJX1JFR19DT05GSUdfUEhZX1BJUEVMSU5FCQlCSVQoMjUpCiAjZGVmaW5lIENRU1BJX1JFR19D T05GSUdfRFVBTF9PUENPREUJCUJJVCgzMCkKICNkZWZpbmUgQ1FTUElfUkVHX0NPTkZJR19JRExF X0xTQgkJMzEKICNkZWZpbmUgQ1FTUElfUkVHX0NPTkZJR19DSElQU0VMRUNUX01BU0sJMHhGCkBA IC0xOTIsNiArMjA5LDcgQEAgc3RydWN0IGNxc3BpX2RyaXZlcl9wbGF0ZGF0YSB7CiAjZGVmaW5l IENRU1BJX1JFR19SRUFEQ0FQVFVSRV9CWVBBU1NfTFNCCTAKICNkZWZpbmUgQ1FTUElfUkVHX1JF QURDQVBUVVJFX0RFTEFZX0xTQgkJMQogI2RlZmluZSBDUVNQSV9SRUdfUkVBRENBUFRVUkVfREVM QVlfTUFTSwkweEYKKyNkZWZpbmUgQ1FTUElfUkVHX1JFQURDQVBUVVJFX0VER0VfTFNCCQk1CiAj ZGVmaW5lIENRU1BJX1JFR19SRUFEQ0FQVFVSRV9EUVNfTFNCCQk4CiAKICNkZWZpbmUgQ1FTUElf UkVHX1NJWkUJCQkJMHgxNApAQCAtMjczLDYgKzI5MSwyNyBAQCBzdHJ1Y3QgY3FzcGlfZHJpdmVy X3BsYXRkYXRhIHsKICNkZWZpbmUgQ1FTUElfUkVHX1BPTExJTkdfU1RBVFVTCQkweEIwCiAjZGVm aW5lIENRU1BJX1JFR19QT0xMSU5HX1NUQVRVU19EVU1NWV9MU0IJMTYKIAorI2RlZmluZSBDUVNQ SV9SRUdfUEhZX0NPTkZJRwkJCTB4QjQKKyNkZWZpbmUgQ1FTUElfUkVHX1BIWV9DT05GSUdfUlhf REVMX0xTQgkJMAorI2RlZmluZSBDUVNQSV9SRUdfUEhZX0NPTkZJR19SWF9ERUxfTUFTSwkweDdG CisjZGVmaW5lIENRU1BJX1JFR19QSFlfQ09ORklHX1RYX0RFTF9MU0IJCTE2CisjZGVmaW5lIENR U1BJX1JFR19QSFlfQ09ORklHX1RYX0RFTF9NQVNLCTB4N0YKKyNkZWZpbmUgQ1FTUElfUkVHX1BI WV9DT05GSUdfRExMX1JFU0VUCQlCSVQoMzApCisjZGVmaW5lIENRU1BJX1JFR19QSFlfQ09ORklH X1JFU1lOQwkJQklUKDMxKQorCisjZGVmaW5lIENRU1BJX1JFR19QSFlfRExMX01BU1RFUgkJMHhC OAorI2RlZmluZSBDUVNQSV9SRUdfUEhZX0RMTF9NQVNURVJfSU5JVF9ERUxBWV9MU0IJMAorI2Rl ZmluZSBDUVNQSV9SRUdfUEhZX0RMTF9NQVNURVJfSU5JVF9ERUxBWV9WQUwJMTYKKyNkZWZpbmUg Q1FTUElfUkVHX1BIWV9ETExfTUFTVEVSX0RMWV9FTE1UU19MRU4JMHg3CisjZGVmaW5lIENRU1BJ X1JFR19QSFlfRExMX01BU1RFUl9ETFlfRUxNVFNfTFNCCTIwCisjZGVmaW5lIENRU1BJX1JFR19Q SFlfRExMX01BU1RFUl9ETFlfRUxNVFNfMwkweDIKKyNkZWZpbmUgQ1FTUElfUkVHX1BIWV9ETExf TUFTVEVSX0JZUEFTUwkJQklUKDIzKQorI2RlZmluZSBDUVNQSV9SRUdfUEhZX0RMTF9NQVNURVJf Q1lDTEUJCUJJVCgyNCkKKworI2RlZmluZSBDUVNQSV9SRUdfRExMX09CU19MT1cJCQkweEJDCisj ZGVmaW5lIENRU1BJX1JFR19ETExfT0JTX0xPV19ETExfTE9DSwkJQklUKDApCisjZGVmaW5lIENR U1BJX1JFR19ETExfT0JTX0xPV19MT09QQkFDS19MT0NLCUJJVCgxNSkKKwogI2RlZmluZSBDUVNQ SV9SRUdfT1BfRVhUX0xPV0VSCQkJMHhFMAogI2RlZmluZSBDUVNQSV9SRUdfT1BfRVhUX1JFQURf TFNCCQkyNAogI2RlZmluZSBDUVNQSV9SRUdfT1BfRVhUX1dSSVRFX0xTQgkJMTYKQEAgLTMyMSw2 ICszNjAsNTAgQEAgc3RydWN0IGNxc3BpX2RyaXZlcl9wbGF0ZGF0YSB7CiAKICNkZWZpbmUgQ1FT UElfUkVHX1ZFUlNBTF9ETUFfVkFMCQkweDYwMgogCisjZGVmaW5lIENRU1BJX1BIWV9JTklUX1JE CQkJMQorI2RlZmluZSBDUVNQSV9QSFlfTUFYX1JECQkJNAorI2RlZmluZSBDUVNQSV9QSFlfTUFY X0RFTEFZCQkJMTI3CisjZGVmaW5lIENRU1BJX1BIWV9ERFJfU0VBUkNIX1NURVAJCTQKKyNkZWZp bmUgQ1FTUElfUEhZX1RYX0xPT0tVUF9MT1dfU1RBUlQJCTI4CisjZGVmaW5lIENRU1BJX1BIWV9U WF9MT09LVVBfTE9XX0VORAkJNDgKKyNkZWZpbmUgQ1FTUElfUEhZX1RYX0xPT0tVUF9ISUdIX1NU QVJUCQk2MAorI2RlZmluZSBDUVNQSV9QSFlfVFhfTE9PS1VQX0hJR0hfRU5ECQk5NgorI2RlZmlu ZSBDUVNQSV9QSFlfUlhfTE9XX1NFQVJDSF9TVEFSVAkJMAorI2RlZmluZSBDUVNQSV9QSFlfUlhf TE9XX1NFQVJDSF9FTkQJCTQwCisjZGVmaW5lIENRU1BJX1BIWV9SWF9ISUdIX1NFQVJDSF9TVEFS VAkJMjQKKyNkZWZpbmUgQ1FTUElfUEhZX1JYX0hJR0hfU0VBUkNIX0VORAkJMTI3CisjZGVmaW5l IENRU1BJX1BIWV9UWF9MT1dfU0VBUkNIX1NUQVJUCQkwCisjZGVmaW5lIENRU1BJX1BIWV9UWF9M T1dfU0VBUkNIX0VORAkJNjQKKyNkZWZpbmUgQ1FTUElfUEhZX1RYX0hJR0hfU0VBUkNIX1NUQVJU CQk3OAorI2RlZmluZSBDUVNQSV9QSFlfVFhfSElHSF9TRUFSQ0hfRU5ECQkxMjcKKyNkZWZpbmUg Q1FTUElfUEhZX1NFQVJDSF9PRkZTRVQJCQk4CisKKyNkZWZpbmUgQ1FTUElfUEhZX0RFRkFVTFRf VEVNUAkJCTQ1CisjZGVmaW5lIENRU1BJX1BIWV9NSU5fVEVNUAkJCS00NQorI2RlZmluZSBDUVNQ SV9QSFlfTUFYX1RFTVAJCQkxMzAKKyNkZWZpbmUgQ1FTUElfUEhZX01JRF9URU1QCQkJKENRU1BJ X1BIWV9NSU5fVEVNUCArCVwKKwkJCQkJCSAoKENRU1BJX1BIWV9NQVhfVEVNUCAtCVwKKwkJCQkJ CSAgIENRU1BJX1BIWV9NSU5fVEVNUCkgLyAyKSkKKworLyoKKyAqIFBIWSB0dW5pbmcgcGF0dGVy biBmb3IgY2FsaWJyYXRpbmcgcmVhZCBkYXRhIGNhcHR1cmUgZGVsYXkuIFRoaXMgMTI4LWJ5dGUK KyAqIHBhdHRlcm4gcHJvdmlkZXMgc3VmZmljaWVudCBiaXQgdHJhbnNpdGlvbnMgYWNyb3NzIGFs bCBieXRlIGxhbmVzIHRvCisgKiByZWxpYWJseSBkZXRlY3QgdGltaW5nIHdpbmRvd3MgYXQgaGln aCBmcmVxdWVuY2llcy4KKyAqLworc3RhdGljIGNvbnN0IHU4IHBoeV90dW5pbmdfcGF0dGVybltd IF9fYWxpZ25lZCg2NCkgPSB7CisJMHhGRSwgMHhGRiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwg MHgwMSwgMHgwMCwgMHgwMCwgMHhGRSwgMHhGRSwgMHgwMSwKKwkweDAxLCAweDAxLCAweDAxLCAw eDAwLCAweDAwLCAweEZFLCAweEZFLCAweDAxLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAorCTB4 RkYsIDB4MDAsIDB4MDAsIDB4RkUsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDAs IDB4MDAsIDB4RkUsCisJMHhGRSwgMHhGRiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwg MHhGRSwgMHgwMCwgMHhGRSwgMHhGRSwgMHgwMSwKKwkweDAxLCAweDAxLCAweDAxLCAweEZFLCAw eDAwLCAweEZFLCAweEZFLCAweDAxLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAorCTB4RkYsIDB4 RkUsIDB4MDAsIDB4RkUsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkUsIDB4MDAs IDB4RkUsCisJMHhGRSwgMHhGRiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMCwg MHhGRSwgMHhGRSwgMHhGRSwgMHgwMSwKKwkweDAxLCAweDAxLCAweDAxLCAweDAwLCAweEZFLCAw eEZFLCAweEZFLCAweDAxLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAorCTB4RkYsIDB4MDAsIDB4 RkUsIDB4RkUsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDAsIDB4RkUsIDB4RkUs CisJMHhGRSwgMHhGRiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHhGRSwgMHhGRSwg MHhGRSwgMHhGRSwgMHgwMSwKKwkweDAxLCAweDAxLCAweDAxLCAweEZFLCAweEZFLCAweEZFLCAw eEZFLCAweDAxLAorfTsKKwogc3RhdGljIGludCBjcXNwaV93YWl0X2Zvcl9iaXQoY29uc3Qgc3Ry dWN0IGNxc3BpX2RyaXZlcl9wbGF0ZGF0YSAqZGRhdGEsCiAJCQkgICAgICB2b2lkIF9faW9tZW0g KnJlZywgY29uc3QgdTMyIG1hc2ssIGJvb2wgY2xyLAogCQkJICAgICAgYm9vbCBidXN5d2FpdCkK QEAgLTkxMyw2ICs5OTYsNzQgQEAgc3RhdGljIHZvaWQgY3FzcGlfY29udHJvbGxlcl9lbmFibGUo c3RydWN0IGNxc3BpX3N0ICpjcXNwaSwgYm9vbCBlbmFibGUpCiAJd3JpdGVsKHJlZywgcmVnX2Jh c2UgKyBDUVNQSV9SRUdfQ09ORklHKTsKIH0KIAorc3RhdGljIHZvaWQgY3FzcGlfc2V0X2RsbCh2 b2lkIF9faW9tZW0gKnJlZ19iYXNlLCB1OCByeF9kbGwsIHU4IHR4X2RsbCkKK3sKKwl1bnNpZ25l ZCBpbnQgcmVnOworCisJcmVnID0gcmVhZGwocmVnX2Jhc2UgKyBDUVNQSV9SRUdfUEhZX0NPTkZJ Ryk7CisJcmVnICY9IH4oKENRU1BJX1JFR19QSFlfQ09ORklHX1JYX0RFTF9NQVNLCisJCSAgPDwg Q1FTUElfUkVHX1BIWV9DT05GSUdfUlhfREVMX0xTQikgfAorCQkgKENRU1BJX1JFR19QSFlfQ09O RklHX1RYX0RFTF9NQVNLCisJCSAgPDwgQ1FTUElfUkVHX1BIWV9DT05GSUdfVFhfREVMX0xTQikp OworCXJlZyB8PSAoKHJ4X2RsbCAmIENRU1BJX1JFR19QSFlfQ09ORklHX1JYX0RFTF9NQVNLKQor CQk8PCBDUVNQSV9SRUdfUEhZX0NPTkZJR19SWF9ERUxfTFNCKSB8CisJICAgICAgICgodHhfZGxs ICYgQ1FTUElfUkVHX1BIWV9DT05GSUdfVFhfREVMX01BU0spCisJCTw8IENRU1BJX1JFR19QSFlf Q09ORklHX1RYX0RFTF9MU0IpIHwKKwkgICAgICAgQ1FTUElfUkVHX1BIWV9DT05GSUdfUkVTWU5D OworCXdyaXRlbChyZWcsIHJlZ19iYXNlICsgQ1FTUElfUkVHX1BIWV9DT05GSUcpOworfQorCitz dGF0aWMgaW50IGNxc3BpX3Jlc3luY19kbGwoc3RydWN0IGNxc3BpX3N0ICpjcXNwaSkKK3sKKwl2 b2lkIF9faW9tZW0gKnJlZ19iYXNlID0gY3FzcGktPmlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgcmVn OworCWludCByZXQ7CisKKwlyZXQgPSBjcXNwaV93YWl0X2lkbGUoY3FzcGkpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlyZWcgPSByZWFkbChyZWdfYmFzZSArIENRU1BJX1JFR19DT05G SUcpOworCXJlZyAmPSB+Q1FTUElfUkVHX0NPTkZJR19FTkFCTEVfTUFTSzsKKwl3cml0ZWwocmVn LCByZWdfYmFzZSArIENRU1BJX1JFR19DT05GSUcpOworCisJcmVnID0gcmVhZGwocmVnX2Jhc2Ug KyBDUVNQSV9SRUdfUEhZX0NPTkZJRyk7CisJcmVnICY9IH4oQ1FTUElfUkVHX1BIWV9DT05GSUdf RExMX1JFU0VUIHwgQ1FTUElfUkVHX1BIWV9DT05GSUdfUkVTWU5DKTsKKwl3cml0ZWwocmVnLCBy ZWdfYmFzZSArIENRU1BJX1JFR19QSFlfQ09ORklHKTsKKworCXJlZyA9IHJlYWRsKHJlZ19iYXNl ICsgQ1FTUElfUkVHX1BIWV9ETExfTUFTVEVSKTsKKwlyZWcgfD0gKENRU1BJX1JFR19QSFlfRExM X01BU1RFUl9JTklUX0RFTEFZX1ZBTAorCQk8PCBDUVNQSV9SRUdfUEhZX0RMTF9NQVNURVJfSU5J VF9ERUxBWV9MU0IpOworCXdyaXRlbChyZWcsIHJlZ19iYXNlICsgQ1FTUElfUkVHX1BIWV9ETExf TUFTVEVSKTsKKworCXJlZyA9IHJlYWRsKHJlZ19iYXNlICsgQ1FTUElfUkVHX1BIWV9DT05GSUcp OworCXJlZyB8PSBDUVNQSV9SRUdfUEhZX0NPTkZJR19ETExfUkVTRVQ7CisJd3JpdGVsKHJlZywg cmVnX2Jhc2UgKyBDUVNQSV9SRUdfUEhZX0NPTkZJRyk7CisKKwlyZXQgPSByZWFkbF9wb2xsX3Rp bWVvdXQocmVnX2Jhc2UgKyBDUVNQSV9SRUdfRExMX09CU19MT1csIHJlZywKKwkJCQkgKHJlZyAm IENRU1BJX1JFR19ETExfT0JTX0xPV19ETExfTE9DSyksIDAsCisJCQkJIENRU1BJX0RMTF9USU1F T1VUX1VTKTsKKwlpZiAocmV0KQorCQlnb3RvIHJlX2VuYWJsZTsKKworCXJldCA9IHJlYWRsX3Bv bGxfdGltZW91dChyZWdfYmFzZSArIENRU1BJX1JFR19ETExfT0JTX0xPVywgcmVnLAorCQkJCSAo cmVnICYgQ1FTUElfUkVHX0RMTF9PQlNfTE9XX0xPT1BCQUNLX0xPQ0spLCAwLAorCQkJCSBDUVNQ SV9ETExfVElNRU9VVF9VUyk7CisJaWYgKHJldCkKKwkJZ290byByZV9lbmFibGU7CisKKwlyZWcg PSByZWFkbChyZWdfYmFzZSArIENRU1BJX1JFR19QSFlfQ09ORklHKTsKKwlyZWcgfD0gQ1FTUElf UkVHX1BIWV9DT05GSUdfUkVTWU5DOworCXdyaXRlbChyZWcsIHJlZ19iYXNlICsgQ1FTUElfUkVH X1BIWV9DT05GSUcpOworCityZV9lbmFibGU6CisJcmVnID0gcmVhZGwocmVnX2Jhc2UgKyBDUVNQ SV9SRUdfQ09ORklHKTsKKwlyZWcgfD0gQ1FTUElfUkVHX0NPTkZJR19FTkFCTEVfTUFTSzsKKwl3 cml0ZWwocmVnLCByZWdfYmFzZSArIENRU1BJX1JFR19DT05GSUcpOworCisJcmV0dXJuIHJldDsK K30KKwogc3RhdGljIGludCBjcXNwaV92ZXJzYWxfaW5kaXJlY3RfcmVhZF9kbWEoc3RydWN0IGNx c3BpX2ZsYXNoX3BkYXRhICpmX3BkYXRhLAogCQkJCQkgIHVfY2hhciAqcnhidWYsIGxvZmZfdCBm cm9tX2FkZHIsCiAJCQkJCSAgc2l6ZV90IG5fcngpCkBAIC0xNTU5LDEwICsxNzEwLDE1NzggQEAg c3RhdGljIGJvb2wgY3FzcGlfc3VwcG9ydHNfbWVtX29wKHN0cnVjdCBzcGlfbWVtICptZW0sCiAJ cmV0dXJuIHNwaV9tZW1fZGVmYXVsdF9zdXBwb3J0c19vcChtZW0sIG9wKTsKIH0KIAorc3RhdGlj IGludCBjcXNwaV93cml0ZV9wYXR0ZXJuX3RvX2NhY2hlKHN0cnVjdCBjcXNwaV9mbGFzaF9wZGF0 YSAqZl9wZGF0YSwKKwkJCQkJc3RydWN0IHNwaV9tZW0gKm1lbSwKKwkJCQkJc3RydWN0IHNwaV9t ZW1fb3AgKndyaXRlX29wKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmX3BkYXRhLT5jcXNw aS0+cGRldi0+ZGV2OworCWludCByZXQ7CisKKwl3cml0ZV9vcC0+ZGF0YS5uYnl0ZXMgPSBzaXpl b2YocGh5X3R1bmluZ19wYXR0ZXJuKTsKKwl3cml0ZV9vcC0+ZGF0YS5idWYub3V0ID0gcGh5X3R1 bmluZ19wYXR0ZXJuOworCisJcmV0ID0gc3BpX21lbV9leGVjX29wKG1lbSwgd3JpdGVfb3ApOwor CWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gd3JpdGUgUEhZIHBhdHRlcm4g dG8gY2FjaGU6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlkZXZfZGJnKGRldiwg IlBIWSBwYXR0ZXJuICglenUgYnl0ZXMpIHdyaXR0ZW4gdG8gY2FjaGVcbiIsCisJCXNpemVvZihw aHlfdHVuaW5nX3BhdHRlcm4pKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNxc3Bp X3BoeV9jaGVja19wYXR0ZXJuKHN0cnVjdCBjcXNwaV9mbGFzaF9wZGF0YSAqZl9wZGF0YSwKKwkJ CQkgICBzdHJ1Y3Qgc3BpX21lbSAqbWVtKQoreworCXN0cnVjdCBzcGlfbWVtX29wIG9wOworCXU4 ICpyZWFkX2RhdGE7CisJaW50IHJldDsKKworCXJlYWRfZGF0YSA9IGttYWxsb2NfYXJyYXkoQVJS QVlfU0laRShwaHlfdHVuaW5nX3BhdHRlcm4pLAorCQkJCSAgc2l6ZW9mKHBoeV90dW5pbmdfcGF0 dGVyblswXSksIEdGUF9LRVJORUwpOworCWlmICghcmVhZF9kYXRhKQorCQlyZXR1cm4gLUVOT01F TTsKKworCW9wID0gZl9wZGF0YS0+cGh5X3JlYWRfb3A7CisJb3AuZGF0YS5idWYuaW4gPSByZWFk X2RhdGE7CisJb3AuZGF0YS5uYnl0ZXMgPSBzaXplb2YocGh5X3R1bmluZ19wYXR0ZXJuKTsKKwor CXJldCA9IHNwaV9tZW1fZXhlY19vcChtZW0sICZvcCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7 CisKKwlpZiAobWVtY21wKHJlYWRfZGF0YSwgcGh5X3R1bmluZ19wYXR0ZXJuLCBzaXplb2YocGh5 X3R1bmluZ19wYXR0ZXJuKSkpCisJCXJldCA9IC1FQUdBSU47CisKK291dDoKKwlrZnJlZShyZWFk X2RhdGEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNxc3BpX3BoeV9zZXRfZGxs X21hc3RlcihzdHJ1Y3QgY3FzcGlfc3QgKmNxc3BpKQoreworCXZvaWQgX19pb21lbSAqcmVnX2Jh c2UgPSBjcXNwaS0+aW9iYXNlOworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSByZWFkbChy ZWdfYmFzZSArIENRU1BJX1JFR19QSFlfRExMX01BU1RFUik7CisJcmVnICY9IH4oKENRU1BJX1JF R19QSFlfRExMX01BU1RFUl9ETFlfRUxNVFNfTEVOCisJCSAgPDwgQ1FTUElfUkVHX1BIWV9ETExf TUFTVEVSX0RMWV9FTE1UU19MU0IpIHwKKwkJIENRU1BJX1JFR19QSFlfRExMX01BU1RFUl9CWVBB U1MgfAorCQkgQ1FTUElfUkVHX1BIWV9ETExfTUFTVEVSX0NZQ0xFKTsKKwlyZWcgfD0gKChDUVNQ SV9SRUdfUEhZX0RMTF9NQVNURVJfRExZX0VMTVRTXzMKKwkJIDw8IENRU1BJX1JFR19QSFlfRExM X01BU1RFUl9ETFlfRUxNVFNfTFNCKSB8CisJCUNRU1BJX1JFR19QSFlfRExMX01BU1RFUl9DWUNM RSk7CisKKwl3cml0ZWwocmVnLCByZWdfYmFzZSArIENRU1BJX1JFR19QSFlfRExMX01BU1RFUik7 Cit9CisKK3N0YXRpYyB2b2lkIGNxc3BpX3BoeV9wcmVfY29uZmlnKHN0cnVjdCBjcXNwaV9zdCAq Y3FzcGksCisJCQkJIHN0cnVjdCBjcXNwaV9mbGFzaF9wZGF0YSAqZl9wZGF0YSwKKwkJCQkgY29u c3QgYm9vbCBieXBhc3MpCit7CisJdm9pZCBfX2lvbWVtICpyZWdfYmFzZSA9IGNxc3BpLT5pb2Jh c2U7CisJdW5zaWduZWQgaW50IHJlZzsKKwl1OCBkdW1teTsKKworCWNxc3BpX3JlYWRkYXRhX2Nh cHR1cmUoY3FzcGksIGJ5cGFzcywgZl9wZGF0YS0+dXNlX2RxcywKKwkJCSAgICAgICBmX3BkYXRh LT5waHlfc2V0dGluZy5yZWFkX2RlbGF5KTsKKworCXJlZyA9IHJlYWRsKHJlZ19iYXNlICsgQ1FT UElfUkVHX0NPTkZJRyk7CisJcmVnICY9IH4oQ1FTUElfUkVHX0NPTkZJR19QSFlfRU4gfCBDUVNQ SV9SRUdfQ09ORklHX1BIWV9QSVBFTElORSk7CisJcmVnIHw9IENRU1BJX1JFR19DT05GSUdfUEhZ X0VOOworCXdyaXRlbChyZWcsIHJlZ19iYXNlICsgQ1FTUElfUkVHX0NPTkZJRyk7CisKKwlyZWcg PSByZWFkbChyZWdfYmFzZSArIENRU1BJX1JFR19SRF9JTlNUUik7CisJZHVtbXkgPSBGSUVMRF9H RVQoQ1FTUElfUkVHX1JEX0lOU1RSX0RVTU1ZX01BU0sKKwkJCQkgIDw8IENRU1BJX1JFR19SRF9J TlNUUl9EVU1NWV9MU0IsCisJCQkgIHJlZyk7CisJZHVtbXktLTsKKwlyZWcgJj0gfihDUVNQSV9S RUdfUkRfSU5TVFJfRFVNTVlfTUFTSyA8PCBDUVNQSV9SRUdfUkRfSU5TVFJfRFVNTVlfTFNCKTsK KwlyZWcgfD0gRklFTERfUFJFUChDUVNQSV9SRUdfUkRfSU5TVFJfRFVNTVlfTUFTSworCQkJCSAg PDwgQ1FTUElfUkVHX1JEX0lOU1RSX0RVTU1ZX0xTQiwKKwkJCSAgZHVtbXkpOworCXdyaXRlbChy ZWcsIHJlZ19iYXNlICsgQ1FTUElfUkVHX1JEX0lOU1RSKTsKKworCWNxc3BpX3BoeV9zZXRfZGxs X21hc3RlcihjcXNwaSk7Cit9CisKK3N0YXRpYyB2b2lkIGNxc3BpX3BoeV9wb3N0X2NvbmZpZyhz dHJ1Y3QgY3FzcGlfc3QgKmNxc3BpLAorCQkJCSAgY29uc3QgdW5zaWduZWQgaW50IGRlbGF5KQor eworCXZvaWQgX19pb21lbSAqcmVnX2Jhc2UgPSBjcXNwaS0+aW9iYXNlOworCXVuc2lnbmVkIGlu dCByZWc7CisJdTggZHVtbXk7CisKKwlyZWcgPSByZWFkbChyZWdfYmFzZSArIENRU1BJX1JFR19S RUFEQ0FQVFVSRSk7CisJcmVnICY9IH4oQ1FTUElfUkVHX1JFQURDQVBUVVJFX0RFTEFZX01BU0sK KwkJIDw8IENRU1BJX1JFR19SRUFEQ0FQVFVSRV9ERUxBWV9MU0IpOworCisJcmVnIHw9IChkZWxh eSAmIENRU1BJX1JFR19SRUFEQ0FQVFVSRV9ERUxBWV9NQVNLKQorCSAgICAgICA8PCBDUVNQSV9S RUdfUkVBRENBUFRVUkVfREVMQVlfTFNCOworCXdyaXRlbChyZWcsIHJlZ19iYXNlICsgQ1FTUElf UkVHX1JFQURDQVBUVVJFKTsKKworCXJlZyA9IHJlYWRsKHJlZ19iYXNlICsgQ1FTUElfUkVHX0NP TkZJRyk7CisJcmVnICY9IH4oQ1FTUElfUkVHX0NPTkZJR19QSFlfRU4gfCBDUVNQSV9SRUdfQ09O RklHX1BIWV9QSVBFTElORSk7CisJd3JpdGVsKHJlZywgcmVnX2Jhc2UgKyBDUVNQSV9SRUdfQ09O RklHKTsKKworCXJlZyA9IHJlYWRsKHJlZ19iYXNlICsgQ1FTUElfUkVHX1JEX0lOU1RSKTsKKwlk dW1teSA9IEZJRUxEX0dFVChDUVNQSV9SRUdfUkRfSU5TVFJfRFVNTVlfTUFTSworCQkJCSAgPDwg Q1FTUElfUkVHX1JEX0lOU1RSX0RVTU1ZX0xTQiwKKwkJCSAgcmVnKTsKKwlkdW1teSsrOworCXJl ZyAmPSB+KENRU1BJX1JFR19SRF9JTlNUUl9EVU1NWV9NQVNLIDw8IENRU1BJX1JFR19SRF9JTlNU Ul9EVU1NWV9MU0IpOworCXJlZyB8PSBGSUVMRF9QUkVQKENRU1BJX1JFR19SRF9JTlNUUl9EVU1N WV9NQVNLCisJCQkJICA8PCBDUVNQSV9SRUdfUkRfSU5TVFJfRFVNTVlfTFNCLAorCQkJICBkdW1t eSk7CisJd3JpdGVsKHJlZywgcmVnX2Jhc2UgKyBDUVNQSV9SRUdfUkRfSU5TVFIpOworfQorCitz dGF0aWMgaW50IGNxc3BpX3BoeV9hcHBseV9zZXR0aW5nKHN0cnVjdCBjcXNwaV9mbGFzaF9wZGF0 YSAqZl9wZGF0YSwKKwkJCQkgICBzdHJ1Y3QgcGh5X3NldHRpbmcgKnBoeSkKK3sKKwlzdHJ1Y3Qg Y3FzcGlfc3QgKmNxc3BpID0gZl9wZGF0YS0+Y3FzcGk7CisJdW5zaWduZWQgaW50IHJlZzsKKwlp bnQgcmV0OworCisJcmVnID0gcmVhZGwoY3FzcGktPmlvYmFzZSArIENRU1BJX1JFR19SRUFEQ0FQ VFVSRSk7CisJcmVnIHw9IEJJVChDUVNQSV9SRUdfUkVBRENBUFRVUkVfRURHRV9MU0IpOworCXdy aXRlbChyZWcsIGNxc3BpLT5pb2Jhc2UgKyBDUVNQSV9SRUdfUkVBRENBUFRVUkUpOworCisJY3Fz cGlfc2V0X2RsbChjcXNwaS0+aW9iYXNlLCBwaHktPnJ4LCBwaHktPnR4KTsKKworCXJldCA9IGNx c3BpX3Jlc3luY19kbGwoY3FzcGkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmX3Bk YXRhLT5waHlfc2V0dGluZy5yeCA9IHBoeS0+cng7CisJZl9wZGF0YS0+cGh5X3NldHRpbmcudHgg PSBwaHktPnR4OworCWZfcGRhdGEtPnBoeV9zZXR0aW5nLnJlYWRfZGVsYXkgPSBwaHktPnJlYWRf ZGVsYXk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3FzcGlfZmluZF9yeF9sb3dfZGRy KHN0cnVjdCBjcXNwaV9mbGFzaF9wZGF0YSAqZl9wZGF0YSwKKwkJCQkgc3RydWN0IHNwaV9tZW0g Km1lbSwgc3RydWN0IHBoeV9zZXR0aW5nICpwaHkpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0g JmZfcGRhdGEtPmNxc3BpLT5wZGV2LT5kZXY7CisJaW50IHJldDsKKworCWRvIHsKKwkJcGh5LT5y eCA9IENRU1BJX1BIWV9SWF9MT1dfU0VBUkNIX1NUQVJUOworCQlkbyB7CisJCQlyZXQgPSBjcXNw aV9waHlfYXBwbHlfc2V0dGluZyhmX3BkYXRhLCBwaHkpOworCQkJaWYgKCFyZXQpIHsKKwkJCQly ZXQgPSBjcXNwaV9waHlfY2hlY2tfcGF0dGVybihmX3BkYXRhLCBtZW0pOworCQkJCWlmICghcmV0 KQorCQkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJcGh5LT5yeCArPSBDUVNQSV9QSFlfRERSX1NF QVJDSF9TVEVQOworCQl9IHdoaWxlIChwaHktPnJ4IDw9IENRU1BJX1BIWV9SWF9MT1dfU0VBUkNI X0VORCk7CisKKwkJcGh5LT5yZWFkX2RlbGF5Kys7CisJfSB3aGlsZSAocGh5LT5yZWFkX2RlbGF5 IDw9IENRU1BJX1BIWV9NQVhfUkQpOworCisJZGV2X2RiZyhkZXYsICJVbmFibGUgdG8gZmluZCBS WCBsb3dcbiIpOworCXJldHVybiAtRU5PRU5UOworfQorCitzdGF0aWMgaW50IGNxc3BpX2ZpbmRf cnhfbG93X3NkcihzdHJ1Y3QgY3FzcGlfZmxhc2hfcGRhdGEgKmZfcGRhdGEsCisJCQkJIHN0cnVj dCBzcGlfbWVtICptZW0sIHN0cnVjdCBwaHlfc2V0dGluZyAqcGh5KQoreworCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZmX3BkYXRhLT5jcXNwaS0+cGRldi0+ZGV2OworCWludCByZXQ7CisKKwlwaHkt PnJ4ID0gMDsKKwlkbyB7CisJCXJldCA9IGNxc3BpX3BoeV9hcHBseV9zZXR0aW5nKGZfcGRhdGEs IHBoeSk7CisJCWlmICghcmV0KSB7CisJCQlyZXQgPSBjcXNwaV9waHlfY2hlY2tfcGF0dGVybihm X3BkYXRhLCBtZW0pOworCQkJaWYgKCFyZXQpCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJcGh5LT5y eCsrOworCX0gd2hpbGUgKHBoeS0+cnggPD0gQ1FTUElfUEhZX01BWF9ERUxBWSk7CisKKwlkZXZf ZGJnKGRldiwgIlVuYWJsZSB0byBmaW5kIFJYIGxvd1xuIik7CisJcmV0dXJuIC1FTk9FTlQ7Cit9 CisKK3N0YXRpYyBpbnQgY3FzcGlfZmluZF9yeF9oaWdoX2RkcihzdHJ1Y3QgY3FzcGlfZmxhc2hf cGRhdGEgKmZfcGRhdGEsCisJCQkJICBzdHJ1Y3Qgc3BpX21lbSAqbWVtLCBzdHJ1Y3QgcGh5X3Nl dHRpbmcgKnBoeSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZl9wZGF0YS0+Y3FzcGktPnBk ZXYtPmRldjsKKwlpbnQgcmV0OworCisJZG8geworCQlwaHktPnJ4ID0gQ1FTUElfUEhZX1JYX0hJ R0hfU0VBUkNIX0VORDsKKwkJZG8geworCQkJcmV0ID0gY3FzcGlfcGh5X2FwcGx5X3NldHRpbmco Zl9wZGF0YSwgcGh5KTsKKwkJCWlmICghcmV0KSB7CisJCQkJcmV0ID0gY3FzcGlfcGh5X2NoZWNr X3BhdHRlcm4oZl9wZGF0YSwgbWVtKTsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0dXJuIDA7CisJ CQl9CisKKwkJCXBoeS0+cnggLT0gQ1FTUElfUEhZX0REUl9TRUFSQ0hfU1RFUDsKKwkJfSB3aGls ZSAocGh5LT5yeCA+PSBDUVNQSV9QSFlfUlhfSElHSF9TRUFSQ0hfU1RBUlQpOworCisJCXBoeS0+ cmVhZF9kZWxheS0tOworCX0gd2hpbGUgKHBoeS0+cmVhZF9kZWxheSA+PSBDUVNQSV9QSFlfSU5J VF9SRCk7CisKKwlkZXZfZGJnKGRldiwgIlVuYWJsZSB0byBmaW5kIFJYIGhpZ2hcbiIpOworCXJl dHVybiAtRU5PRU5UOworfQorCitzdGF0aWMgaW50IGNxc3BpX2ZpbmRfcnhfaGlnaF9zZHIoc3Ry dWN0IGNxc3BpX2ZsYXNoX3BkYXRhICpmX3BkYXRhLAorCQkJCSAgc3RydWN0IHNwaV9tZW0gKm1l bSwgc3RydWN0IHBoeV9zZXR0aW5nICpwaHksCisJCQkJICB1OCBsb3dlcmJvdW5kKQoreworCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZmX3BkYXRhLT5jcXNwaS0+cGRldi0+ZGV2OworCWludCByZXQ7 CisKKwlwaHktPnJ4ID0gQ1FTUElfUEhZX01BWF9ERUxBWTsKKwlkbyB7CisJCXJldCA9IGNxc3Bp X3BoeV9hcHBseV9zZXR0aW5nKGZfcGRhdGEsIHBoeSk7CisJCWlmICghcmV0KSB7CisJCQlyZXQg PSBjcXNwaV9waHlfY2hlY2tfcGF0dGVybihmX3BkYXRhLCBtZW0pOworCQkJaWYgKCFyZXQpCisJ CQkJcmV0dXJuIDA7CisJCX0KKwkJcGh5LT5yeC0tOworCX0gd2hpbGUgKHBoeS0+cnggPiBsb3dl cmJvdW5kKTsKKworCWRldl9kYmcoZGV2LCAiVW5hYmxlIHRvIGZpbmQgUlggaGlnaFxuIik7CisJ cmV0dXJuIC1FTk9FTlQ7Cit9CisKK3N0YXRpYyBpbnQgY3FzcGlfZmluZF90eF9sb3dfZGRyKHN0 cnVjdCBjcXNwaV9mbGFzaF9wZGF0YSAqZl9wZGF0YSwKKwkJCQkgc3RydWN0IHNwaV9tZW0gKm1l bSwgc3RydWN0IHBoeV9zZXR0aW5nICpwaHkpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmZf cGRhdGEtPmNxc3BpLT5wZGV2LT5kZXY7CisJaW50IHJldDsKKworCWRvIHsKKwkJcGh5LT50eCA9 IENRU1BJX1BIWV9UWF9MT1dfU0VBUkNIX1NUQVJUOworCQlkbyB7CisJCQlyZXQgPSBjcXNwaV9w aHlfYXBwbHlfc2V0dGluZyhmX3BkYXRhLCBwaHkpOworCQkJaWYgKCFyZXQpIHsKKwkJCQlyZXQg PSBjcXNwaV9waHlfY2hlY2tfcGF0dGVybihmX3BkYXRhLCBtZW0pOworCQkJCWlmICghcmV0KQor CQkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJcGh5LT50eCArPSBDUVNQSV9QSFlfRERSX1NFQVJD SF9TVEVQOworCQl9IHdoaWxlIChwaHktPnR4IDw9IENRU1BJX1BIWV9UWF9MT1dfU0VBUkNIX0VO RCk7CisKKwkJcGh5LT5yZWFkX2RlbGF5Kys7CisJfSB3aGlsZSAocGh5LT5yZWFkX2RlbGF5IDw9 IENRU1BJX1BIWV9NQVhfUkQpOworCisJZGV2X2RiZyhkZXYsICJVbmFibGUgdG8gZmluZCBUWCBs b3dcbiIpOworCXJldHVybiAtRU5PRU5UOworfQorCitzdGF0aWMgaW50IGNxc3BpX2ZpbmRfdHhf aGlnaF9kZHIoc3RydWN0IGNxc3BpX2ZsYXNoX3BkYXRhICpmX3BkYXRhLAorCQkJCSAgc3RydWN0 IHNwaV9tZW0gKm1lbSwgc3RydWN0IHBoeV9zZXR0aW5nICpwaHkpCit7CisJc3RydWN0IGRldmlj ZSAqZGV2ID0gJmZfcGRhdGEtPmNxc3BpLT5wZGV2LT5kZXY7CisJaW50IHJldDsKKworCWRvIHsK KwkJcGh5LT50eCA9IENRU1BJX1BIWV9UWF9ISUdIX1NFQVJDSF9FTkQ7CisJCWRvIHsKKwkJCXJl dCA9IGNxc3BpX3BoeV9hcHBseV9zZXR0aW5nKGZfcGRhdGEsIHBoeSk7CisJCQlpZiAoIXJldCkg eworCQkJCXJldCA9IGNxc3BpX3BoeV9jaGVja19wYXR0ZXJuKGZfcGRhdGEsIG1lbSk7CisJCQkJ aWYgKCFyZXQpCisJCQkJCXJldHVybiAwOworCQkJfQorCisJCQlwaHktPnR4IC09IENRU1BJX1BI WV9ERFJfU0VBUkNIX1NURVA7CisJCX0gd2hpbGUgKHBoeS0+dHggPj0gQ1FTUElfUEhZX1RYX0hJ R0hfU0VBUkNIX1NUQVJUKTsKKworCQlwaHktPnJlYWRfZGVsYXktLTsKKwl9IHdoaWxlIChwaHkt PnJlYWRfZGVsYXkgPj0gQ1FTUElfUEhZX0lOSVRfUkQpOworCisJZGV2X2RiZyhkZXYsICJVbmFi bGUgdG8gZmluZCBUWCBoaWdoXG4iKTsKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIHZv aWQgY3FzcGlfcGh5X2ZpbmRfZ2FwbG93X2RkcihzdHJ1Y3QgY3FzcGlfZmxhc2hfcGRhdGEgKmZf cGRhdGEsCisJCQkJICAgICAgc3RydWN0IHNwaV9tZW0gKm1lbSwKKwkJCQkgICAgICBzdHJ1Y3Qg cGh5X3NldHRpbmcgKmJvdHRvbWxlZnQsCisJCQkJICAgICAgc3RydWN0IHBoeV9zZXR0aW5nICp0 b3ByaWdodCwKKwkJCQkgICAgICBzdHJ1Y3QgcGh5X3NldHRpbmcgKmdhcGxvdykKK3sKKwlzdHJ1 Y3QgcGh5X3NldHRpbmcgbGVmdCwgcmlnaHQsIG1pZDsKKwlpbnQgcmV0OworCisJbGVmdCA9ICpi b3R0b21sZWZ0OworCXJpZ2h0ID0gKnRvcHJpZ2h0OworCisJbWlkLnR4ID0gbGVmdC50eCArICgo cmlnaHQudHggLSBsZWZ0LnR4KSAvIDIpOworCW1pZC5yeCA9IGxlZnQucnggKyAoKHJpZ2h0LnJ4 IC0gbGVmdC5yeCkgLyAyKTsKKwltaWQucmVhZF9kZWxheSA9IGxlZnQucmVhZF9kZWxheTsKKwor CWRvIHsKKwkJcmV0ID0gY3FzcGlfcGh5X2FwcGx5X3NldHRpbmcoZl9wZGF0YSwgJm1pZCk7CisJ CWlmICghcmV0KQorCQkJcmV0ID0gY3FzcGlfcGh5X2NoZWNrX3BhdHRlcm4oZl9wZGF0YSwgbWVt KTsKKworCQlpZiAocmV0KSB7CisJCQkvKiBUaGUgcGF0dGVybiB3YXMgbm90IGZvdW5kLiBHbyB0 byB0aGUgbG93ZXIgaGFsZi4gKi8KKwkJCXJpZ2h0LnR4ID0gbWlkLnR4OworCQkJcmlnaHQucngg PSBtaWQucng7CisKKwkJCW1pZC50eCA9IGxlZnQudHggKyAoKG1pZC50eCAtIGxlZnQudHgpIC8g Mik7CisJCQltaWQucnggPSBsZWZ0LnJ4ICsgKChtaWQucnggLSBsZWZ0LnJ4KSAvIDIpOworCQl9 IGVsc2UgeworCQkJLyogVGhlIHBhdHRlcm4gd2FzIGZvdW5kLiBHbyB0byB0aGUgdXBwZXIgaGFs Zi4gKi8KKwkJCWxlZnQudHggPSBtaWQudHg7CisJCQlsZWZ0LnJ4ID0gbWlkLnJ4OworCisJCQlt aWQudHggPSBtaWQudHggKyAoKHJpZ2h0LnR4IC0gbWlkLnR4KSAvIDIpOworCQkJbWlkLnJ4ID0g bWlkLnJ4ICsgKChyaWdodC5yeCAtIG1pZC5yeCkgLyAyKTsKKwkJfQorCisJCS8qIEJyZWFrIHRo ZSBsb29wIGlmIHRoZSB3aW5kb3cgaGFzIGNsb3NlZC4gKi8KKwl9IHdoaWxlICgocmlnaHQudHgg LSBsZWZ0LnR4ID49IDIpICYmIChyaWdodC5yeCAtIGxlZnQucnggPj0gMikpOworCisJKmdhcGxv dyA9IG1pZDsKK30KKworc3RhdGljIHZvaWQgY3FzcGlfcGh5X2ZpbmRfZ2FwaGlnaF9kZHIoc3Ry dWN0IGNxc3BpX2ZsYXNoX3BkYXRhICpmX3BkYXRhLAorCQkJCSAgICAgICBzdHJ1Y3Qgc3BpX21l bSAqbWVtLAorCQkJCSAgICAgICBzdHJ1Y3QgcGh5X3NldHRpbmcgKmJvdHRvbWxlZnQsCisJCQkJ ICAgICAgIHN0cnVjdCBwaHlfc2V0dGluZyAqdG9wcmlnaHQsCisJCQkJICAgICAgIHN0cnVjdCBw aHlfc2V0dGluZyAqZ2FwaGlnaCkKK3sKKwlzdHJ1Y3QgcGh5X3NldHRpbmcgbGVmdCwgcmlnaHQs IG1pZDsKKwlpbnQgcmV0OworCisJbGVmdCA9ICpib3R0b21sZWZ0OworCXJpZ2h0ID0gKnRvcHJp Z2h0OworCisJbWlkLnR4ID0gbGVmdC50eCArICgocmlnaHQudHggLSBsZWZ0LnR4KSAvIDIpOwor CW1pZC5yeCA9IGxlZnQucnggKyAoKHJpZ2h0LnJ4IC0gbGVmdC5yeCkgLyAyKTsKKwltaWQucmVh ZF9kZWxheSA9IHJpZ2h0LnJlYWRfZGVsYXk7CisKKwlkbyB7CisJCXJldCA9IGNxc3BpX3BoeV9h cHBseV9zZXR0aW5nKGZfcGRhdGEsICZtaWQpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IGNxc3Bp X3BoeV9jaGVja19wYXR0ZXJuKGZfcGRhdGEsIG1lbSk7CisKKwkJaWYgKHJldCkgeworCQkJLyog VGhlIHBhdHRlcm4gd2FzIG5vdCBmb3VuZC4gR28gdG8gdGhlIHVwcGVyIGhhbGYuICovCisJCQls ZWZ0LnR4ID0gbWlkLnR4OworCQkJbGVmdC5yeCA9IG1pZC5yeDsKKworCQkJbWlkLnR4ID0gbWlk LnR4ICsgKChyaWdodC50eCAtIG1pZC50eCkgLyAyKTsKKwkJCW1pZC5yeCA9IG1pZC5yeCArICgo cmlnaHQucnggLSBtaWQucngpIC8gMik7CisJCX0gZWxzZSB7CisJCQkvKiBUaGUgcGF0dGVybiB3 YXMgZm91bmQuIEdvIHRvIHRoZSBsb3dlciBoYWxmLiAqLworCQkJcmlnaHQudHggPSBtaWQudHg7 CisJCQlyaWdodC5yeCA9IG1pZC5yeDsKKworCQkJbWlkLnR4ID0gbGVmdC50eCArICgobWlkLnR4 IC0gbGVmdC50eCkgLyAyKTsKKwkJCW1pZC5yeCA9IGxlZnQucnggKyAoKG1pZC5yeCAtIGxlZnQu cngpIC8gMik7CisJCX0KKworCQkvKiBCcmVhayB0aGUgbG9vcCBpZiB0aGUgd2luZG93IGhhcyBj bG9zZWQuICovCisJfSB3aGlsZSAoKHJpZ2h0LnR4IC0gbGVmdC50eCA+PSAyKSAmJiAocmlnaHQu cnggLSBsZWZ0LnJ4ID49IDIpKTsKKworCSpnYXBoaWdoID0gbWlkOworfQorCitzdGF0aWMgaW50 IGNxc3BpX2dldF90ZW1wKGludCAqdGVtcCkKK3sKKwkvKiBUT0RPOiByZWFkIFNvQyB0aGVybWFs IHNlbnNvcjsgY2FsbGVyIGZhbGxzIGJhY2sgdG8gcm9vbSB0ZW1wZXJhdHVyZSAqLworCXJldHVy biAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNxc3BpX3BoeV9yZXNldF9z ZXR0aW5nKHN0cnVjdCBwaHlfc2V0dGluZyAqcGh5KQoreworCSpwaHkgPSAoc3RydWN0IHBoeV9z ZXR0aW5nKXsgLnJ4ID0gMCwgLnR4ID0gMTI3LCAucmVhZF9kZWxheSA9IDAgfTsKK30KKworc3Rh dGljIGludCBjcXNwaV9waHlfdHVuaW5nX2RkcihzdHJ1Y3QgY3FzcGlfZmxhc2hfcGRhdGEgKmZf cGRhdGEsCisJCQkJc3RydWN0IHNwaV9tZW0gKm1lbSkKK3sKKwlzdHJ1Y3QgY3FzcGlfc3QgKmNx c3BpID0gZl9wZGF0YS0+Y3FzcGk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmNxc3BpLT5wZGV2 LT5kZXY7CisJc3RydWN0IHBoeV9zZXR0aW5nIHJ4bG93LCByeGhpZ2gsIHR4bG93LCB0eGhpZ2g7 CisJc3RydWN0IHBoeV9zZXR0aW5nIHNyeGxvdywgc3J4aGlnaDsKKwlzdHJ1Y3QgcGh5X3NldHRp bmcgYm90dG9tbGVmdCwgdG9wcmlnaHQsIHNlYXJjaHBvaW50OworCXN0cnVjdCBwaHlfc2V0dGlu ZyBnYXBsb3csIGdhcGhpZ2g7CisJc3RydWN0IHBoeV9zZXR0aW5nIGJhY2t1cHBvaW50LCBiYWNr dXBjb3JuZXJwb2ludDsKKwlpbnQgcmV0LCByeF93aW5kb3csIHRlbXA7CisJYm9vbCBwcmltYXJ5 ID0gdHJ1ZSwgc2Vjb25kYXJ5ID0gdHJ1ZTsKKworCS8qCisJICogRERSIHR1bmluZzogMkQgc2Vh cmNoIGFjcm9zcyBSWCBhbmQgVFggZGVsYXlzIGZvciBvcHRpbWFsIHRpbWluZy4KKwkgKgorCSAq IEFsZ29yaXRobTogRmluZCBSWCBib3VuZGFyaWVzIChyeGxvdy9yeGhpZ2gpIHVzaW5nIFRYIHdp bmRvdyBzZWFyY2gsCisJICogZmluZCBUWCBib3VuZGFyaWVzICh0eGxvdy90eGhpZ2gpIGF0IGZp eGVkIFJYLCBkZWZpbmUgdmFsaWQgcmVnaW9uLAorCSAqIGxvY2F0ZSBnYXBzIHZpYSBiaW5hcnkg c2VhcmNoLCBzZWxlY3QgZmluYWwgcG9pbnQgd2l0aCB0ZW1wZXJhdHVyZQorCSAqIGNvbXBlbnNh dGlvbi4KKwkgKgorCSAqICAgICAgICAgICAgICByeAorCSAqICAgICAgICAgIDEyNyBeCisJICog ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3ByaWdodAor CSAqICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4ICAgICArKysrKysrKysrKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eCAgICAgKysrKysrKysrKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHggICAgICsrKysrKysrKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4ICAgICArKysrKysrKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHggICAgICsrKysrKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHggICAgICsrKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4eHggICAgICsrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4eHh4ICAgICArKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4eHh4eCAgICAgKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgICoKKwkgKiAgICAgICAgICAgICAgfCAgYm90dG9tbGVm dAorCSAqICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLT4gdHgKKwkgKiAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTI3CisJICovCisKKwlmX3BkYXRhLT51c2VfdHVuZWRfcGh5ID0gdHJ1ZTsKKwor CS8qIEdvbGRlbiByeGxvdyBzZWFyY2g6IEZpbmQgbG93ZXIgUlggYm91bmRhcnkgdXNpbmcgVFgg d2luZG93IHN3ZWVwICovCisKKwkvKgorCSAqICAgICAgICAgICAgICByeAorCSAqICAgICAgICAg IDEyNyBeCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHggICAgICsrKysrKysrKysrKysr KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4ICAgICArKysrKysrKysrKysr KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eCAgICAgKysrKysrKysrKysr KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHggICAgICsrKysrKysrKysr KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4ICAgICArKysrKysrKysr KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eCAgICAgKysrKysrKysr KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHggICAgICsrKysrKysr KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgfHh4eHh4fHh4eHh4ICAgICArKysrKysr KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgfHh4eHh4fHh4eHh4eCAgICAgKysrKysr KysrKysrCisJICogICAgICBzZWFyY2ggIHwgICAgICAgfHh4eHh4fHh4eHh4eHggICAgICsrKysr KysrKysrCisJICogICAgICByeGxvdyAtLS0tLS0tLS0+fHh4eHh4fHh4eHh4eHh4ICAgICArKysr KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgfHh4eHh4fHh4eHh4eHh4eCAgICAgKysr KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgfHh4eHh4fHh4eHh4eHh4eHggICAgICsr KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgfHh4eHh4fHh4eHh4eHh4eHh4ICAgICAr KysrKysrCisJICogICAgICAgICAgICAgIHwgICAgICAgfCAgICAgfAorCSAqICAgICAgICAgICAg ICAtLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiB0eAorCSAqICAg ICAgICAgICAgICAwICAgICAgIHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNwor CSAqICAgICAgICAgICAgICAgICAgdHhsb3cgICAgIHR4bG93CisJICogICAgICAgICAgICAgICAg ICBzdGFydCAgICAgZW5kCisJICoKKwkgKiAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCSAqICAgICAgfCBQcmltYXJ5IHwg U2Vjb25kYXJ5IHwgRmluYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICogICAg ICB8IFNlYXJjaCAgfCBTZWFyY2ggICAgfCBQb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwKKwkgKiAgICAgIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tfAorCSAqICAgICAgfCBGYWlsICAgIHwgRmFpbCAgICAgIHwgUmV0 dXJuIEZhaWwgICAgICAgICAgICAgICAgICAgICAgICB8CisJICogICAgICB8LS0tLS0tLS0tfC0t LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKwkgKiAgICAg IHwgRmFpbCAgICB8IFBhc3MgICAgICB8IFJldHVybiBGYWlsICAgICAgICAgICAgICAgICAgICAg ICAgfAorCSAqICAgICAgfC0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS18CisJICogICAgICB8IFBhc3MgICAgfCBGYWlsICAgICAgfCBSZXR1 cm4gRmFpbCAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKiAgICAgIHwtLS0tLS0tLS18LS0t LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCSAqICAgICAg fCBQYXNzICAgIHwgUGFzcyAgICAgIHwgcnggPSBtaW4ocHJpbWFyeS5yeCwgc2Vjb25kYXJ5LnJ4 KSB8CisJICogICAgICB8ICAgICAgICAgfCAgICAgICAgICAgfCB0eCA9IHByaW1hcnkudHggICAg ICAgICAgICAgICAgICAgIHwKKwkgKiAgICAgIHwgICAgICAgICB8ICAgICAgICAgICB8IHJlYWRf ZGVsYXkgPSAgICAgICAgICAgICAgICAgICAgICAgfAorCSAqICAgICAgfCAgICAgICAgIHwgICAg ICAgICAgIHwgICAgICAgICBtaW4ocHJpbWFyeS5yZWFkX2RlbGF5LCAgICB8CisJICogICAgICB8 ICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICBzZWNvbmRhcnkucmVhZF9kZWxheSkg IHwKKwkgKiAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tfAorCSAqLworCisJLyogUHJpbWFyeSByeGxvdzogU3dlZXAgVFggd2lu ZG93IHRvIGZpbmQgdmFsaWQgUlggbG93ZXIgYm91bmQgKi8KKworCXJ4bG93LnR4ID0gQ1FTUElf UEhZX1RYX0xPT0tVUF9MT1dfU1RBUlQ7CisJZG8geworCQlkZXZfZGJnKGRldiwgIlNlYXJjaGlu ZyBmb3IgR29sZGVuIFByaW1hcnkgcnhsb3cgb24gVFggPSAlZFxuIiwKKwkJCXJ4bG93LnR4KTsK KwkJcnhsb3cucmVhZF9kZWxheSA9IENRU1BJX1BIWV9JTklUX1JEOworCQlyZXQgPSBjcXNwaV9m aW5kX3J4X2xvd19kZHIoZl9wZGF0YSwgbWVtLCAmcnhsb3cpOworCQlyeGxvdy50eCArPSBDUVNQ SV9QSFlfRERSX1NFQVJDSF9TVEVQOworCX0gd2hpbGUgKHJldCAmJiByeGxvdy50eCA8PSBDUVNQ SV9QSFlfVFhfTE9PS1VQX0xPV19FTkQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCWRldl9k YmcoZGV2LCAiR29sZGVuIFByaW1hcnkgcnhsb3c6IFJYOiAlZCBUWDogJWQgUkQ6ICVkXG4iLCBy eGxvdy5yeCwKKwkJcnhsb3cudHgsIHJ4bG93LnJlYWRfZGVsYXkpOworCisJLyogU2Vjb25kYXJ5 IHJ4bG93OiBWZXJpZnkgYXQgb2Zmc2V0IFRYIGZvciByb2J1c3RuZXNzICovCisKKwlpZiAocnhs b3cudHggPD0gKENRU1BJX1BIWV9UWF9MT09LVVBfTE9XX0VORCAtIENRU1BJX1BIWV9TRUFSQ0hf T0ZGU0VUKSkKKwkJc3J4bG93LnR4ID0gcnhsb3cudHggKyBDUVNQSV9QSFlfU0VBUkNIX09GRlNF VDsKKwllbHNlCisJCXNyeGxvdy50eCA9IENRU1BJX1BIWV9UWF9MT09LVVBfTE9XX0VORDsKKwlk ZXZfZGJnKGRldiwgIlNlYXJjaGluZyBmb3IgR29sZGVuIFNlY29uZGFyeSByeGxvdyBvbiBUWCA9 ICVkXG4iLAorCQlzcnhsb3cudHgpOworCXNyeGxvdy5yZWFkX2RlbGF5ID0gQ1FTUElfUEhZX0lO SVRfUkQ7CisJcmV0ID0gY3FzcGlfZmluZF9yeF9sb3dfZGRyKGZfcGRhdGEsIG1lbSwgJnNyeGxv dyk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJZGV2X2RiZyhkZXYsICJHb2xkZW4gU2Vjb25k YXJ5IHJ4bG93OiBSWDogJWQgVFg6ICVkIFJEOiAlZFxuIiwKKwkJc3J4bG93LnJ4LCBzcnhsb3cu dHgsIHNyeGxvdy5yZWFkX2RlbGF5KTsKKworCXJ4bG93LnJ4ID0gbWluKHJ4bG93LnJ4LCBzcnhs b3cucngpOworCXJ4bG93LnJlYWRfZGVsYXkgPSBtaW4ocnhsb3cucmVhZF9kZWxheSwgc3J4bG93 LnJlYWRfZGVsYXkpOworCWRldl9kYmcoZGV2LCAiR29sZGVuIEZpbmFsIHJ4bG93OiBSWDogJWQg VFg6ICVkIFJEOiAlZFxuIiwgcnhsb3cucngsCisJCXJ4bG93LnR4LCByeGxvdy5yZWFkX2RlbGF5 KTsKKworCS8qIEdvbGRlbiByeGhpZ2ggc2VhcmNoOiBGaW5kIHVwcGVyIFJYIGJvdW5kYXJ5IGF0 IGZpeGVkIFRYICovCisKKwkvKgorCSAqICAgICAgICAgICAgICByeAorCSAqICAgICAgICAgIDEy NyBeCisJICogICAgICAgICAgICAgIHwgICAgICAgfHh4eHggICAgICsrKysrKysrKysrKysrKysr KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgfHh4eHh4ICAgICArKysrKysrKysrKysrKysr KysrCisJICogICAgc2VhcmNoICAgIHwgICAgICAgfHh4eHh4eCAgICAgKysrKysrKysrKysrKysr KysrCisJICogICAgcnhoaWdoICAtLS0tLS0tLS0+fHh4eHh4eHggICAgICsrKysrKysrKysrKysr KysrCisJICogICAgb24gZml4ZWQgIHwgICAgICAgfHh4eHh4eHh4ICAgICArKysrKysrKysrKysr KysrCisJICogICAgdHggICAgICAgIHwgICAgICAgfHh4eHh4eHh4eCAgICAgKysrKysrKysrKysr KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgfHh4eHh4eHh4eHggICAgICsrKysrKysrKysr KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4ICAgICArKysrKysrKysr KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysr KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHggICAgICsrKysrKysr KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4ICAgICArKysrKysr KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4eCAgICAgKysrKysr KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4eHggICAgICsrKysr KysrCisJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4eHh4ICAgICArKysr KysrCisJICogICAgICAgICAgICAgIHwKKwkgKiAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gdHgKKwkgKiAgICAgICAgICAgICAgMCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjcKKwkgKgorCSAqICAgICAgfC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18 CisJICogICAgICB8IFByaW1hcnkgfCBTZWNvbmRhcnkgfCBGaW5hbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwKKwkgKiAgICAgIHwgU2VhcmNoICB8IFNlYXJjaCAgICB8IFBvaW50ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAqICAgICAgfC0tLS0tLS0tLXwtLS0tLS0t LS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisJICogICAgICB8IEZh aWwgICAgfCBGYWlsICAgICAgfCBSZXR1cm4gRmFpbCAgICAgICAgICAgICAgICAgICAgICAgIHwK KwkgKiAgICAgIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tfAorCSAqICAgICAgfCBGYWlsICAgIHwgUGFzcyAgICAgIHwgQ2hvb3NlIFNl Y29uZGFyeSAgICAgICAgICAgICAgICAgICB8CisJICogICAgICB8LS0tLS0tLS0tfC0tLS0tLS0t LS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKwkgKiAgICAgIHwgUGFz cyAgICB8IEZhaWwgICAgICB8IENob29zZSBQcmltYXJ5ICAgICAgICAgICAgICAgICAgICAgfAor CSAqICAgICAgfC0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS18CisJICogICAgICB8IFBhc3MgICAgfCBQYXNzICAgICAgfCBpZiAoc2Vjb25k YXJ5LnJ4ID4gcHJpbWFyeS5yeCkgICAgIHwKKwkgKiAgICAgIHwgICAgICAgICB8ICAgICAgICAg ICB8ICAgICAgICAgQ2hvb3NlIFNlY29uZGFyeSAgICAgICAgICAgfAorCSAqICAgICAgfCAgICAg ICAgIHwgICAgICAgICAgIHwgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJ ICogICAgICB8ICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgIENob29zZSBQcmltYXJ5ICAg ICAgICAgICAgIHwKKwkgKiAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCSAqLworCisJLyogUHJpbWFyeSByeGhpZ2g6IFNl YXJjaCBhdCByeGxvdydzIFRYLCBkZWNyZW1lbnQgZnJvbSBtYXggcmVhZF9kZWxheSAqLworCisJ cnhoaWdoLnR4ID0gcnhsb3cudHg7CisJZGV2X2RiZyhkZXYsICJTZWFyY2hpbmcgZm9yIEdvbGRl biBQcmltYXJ5IHJ4aGlnaCBvbiBUWCA9ICVkXG4iLAorCQlyeGhpZ2gudHgpOworCXJ4aGlnaC5y ZWFkX2RlbGF5ID0gQ1FTUElfUEhZX01BWF9SRDsKKwlyZXQgPSBjcXNwaV9maW5kX3J4X2hpZ2hf ZGRyKGZfcGRhdGEsIG1lbSwgJnJ4aGlnaCk7CisJaWYgKHJldCkKKwkJcHJpbWFyeSA9IGZhbHNl OworCWRldl9kYmcoZGV2LCAiR29sZGVuIFByaW1hcnkgcnhoaWdoOiBSWDogJWQgVFg6ICVkIFJE OiAlZFxuIiwgcnhoaWdoLnJ4LAorCQlyeGhpZ2gudHgsIHJ4aGlnaC5yZWFkX2RlbGF5KTsKKwor CS8qIFNlY29uZGFyeSByeGhpZ2g6IFZlcmlmeSBhdCBvZmZzZXQgVFggKi8KKworCWlmIChyeGhp Z2gudHggPD0KKwkgICAgKENRU1BJX1BIWV9UWF9MT09LVVBfTE9XX0VORCAtIENRU1BJX1BIWV9T RUFSQ0hfT0ZGU0VUKSkKKwkJc3J4aGlnaC50eCA9IHJ4aGlnaC50eCArIENRU1BJX1BIWV9TRUFS Q0hfT0ZGU0VUOworCWVsc2UKKwkJc3J4aGlnaC50eCA9IENRU1BJX1BIWV9UWF9MT09LVVBfTE9X X0VORDsKKwlkZXZfZGJnKGRldiwgIlNlYXJjaGluZyBmb3IgR29sZGVuIFNlY29uZGFyeSByeGhp Z2ggb24gVFggPSAlZFxuIiwKKwkJc3J4aGlnaC50eCk7CisJc3J4aGlnaC5yZWFkX2RlbGF5ID0g Q1FTUElfUEhZX01BWF9SRDsKKwlyZXQgPSBjcXNwaV9maW5kX3J4X2hpZ2hfZGRyKGZfcGRhdGEs IG1lbSwgJnNyeGhpZ2gpOworCWlmIChyZXQpCisJCXNlY29uZGFyeSA9IGZhbHNlOworCWRldl9k YmcoZGV2LCAiR29sZGVuIFNlY29uZGFyeSByeGhpZ2g6IFJYOiAlZCBUWDogJWQgUkQ6ICVkXG4i LAorCQlzcnhoaWdoLnJ4LCBzcnhoaWdoLnR4LCBzcnhoaWdoLnJlYWRfZGVsYXkpOworCisJaWYg KCFwcmltYXJ5ICYmICFzZWNvbmRhcnkpCisJCWdvdG8gb3V0OworCWVsc2UgaWYgKCFwcmltYXJ5 KQorCQlyeGhpZ2ggPSBzcnhoaWdoOworCWVsc2UgaWYgKHNlY29uZGFyeSAmJiBzcnhoaWdoLnJ4 ID4gcnhoaWdoLnJ4KQorCQlyeGhpZ2ggPSBzcnhoaWdoOworCWRldl9kYmcoZGV2LCAiR29sZGVu IEZpbmFsIHJ4aGlnaDogUlg6ICVkIFRYOiAlZCBSRDogJWRcbiIsIHJ4aGlnaC5yeCwKKwkJcnho aWdoLnR4LCByeGhpZ2gucmVhZF9kZWxheSk7CisKKwlwcmltYXJ5ID0gdHJ1ZTsKKwlzZWNvbmRh cnkgPSB0cnVlOworCisJLyogSWYgcnhsb3cvcnhoaWdoIGF0IHNhbWUgcmVhZF9kZWxheSwgc2Vh cmNoIGJhY2t1cCBhdCB1cHBlciBUWCByYW5nZSAqLworCisJaWYgKHJ4bG93LnJlYWRfZGVsYXkg PT0gcnhoaWdoLnJlYWRfZGVsYXkpIHsKKwkJZGV2X2RiZyhkZXYsICJyeGxvdyBhbmQgcnhoaWdo IGF0IHRoZSBzYW1lIHJlYWQgZGVsYXkuXG4iKTsKKworCQkvKiBCYWNrdXAgcnhsb3c6IFNlYXJj aCBhdCBoaWdoIFRYIHdpbmRvdyAqLworCisJCS8qCisJCSAqICAgICAgICAgICAgICByeAorCQkg KiAgICAgICAgICAxMjcgXgorCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eCAgICAgKysr KysrKysrKysrKysrKysrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4ICAgICAr KysrKysrKysrKysrKysrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHggICAg ICsrKysrKysrKysrKysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHh4eCAg ICAgKysrKysrKysrKysrKysrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4 ICAgICArKysrKysrKysrKysrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4 eHggICAgICsrKysrKysrKysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHh4 eHh4eCAgICAgKysrKysrKysrKysrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4 eHh4eHh4ICAgICArKysrKysrfCsrKyt8CisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4 eHh4eHh4eHggICAgICsrKysrK3wrKysrfAorCQkgKiAgICAgIHNlYXJjaCAgfCAgICAgICB4eHh4 eHh4eHh4eHh4eCAgICAgKysrKyt8KysrK3wKKwkJICogICAgICByeGxvdyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0+fCsrKyt8CisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4 eHh4eHh4eHh4eHh4eHggICAgICsrK3wrKysrfAorCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4 eHh4eHh4eHh4eHh4eHh4eCAgICAgKyt8KysrK3wKKwkJICogICAgICAgICAgICAgIHwgICAgICAg eHh4eHh4eHh4eHh4eHh4eHh4ICAgICArfCsrKyt8CisJCSAqICAgICAgICAgICAgICB8ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorCQkgKiAgICAgICAgICAgICAgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLXwtLS0tLT4gdHgKKwkJICogICAgICAgICAg ICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8ICAgMTI3CisJCSAqICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eGhpZ2ggICAgdHhoaWdoCisJ CSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgICAgZW5k CisJCSAqCisJCSAqICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tfAorCQkgKiAgICAgIHwgUHJpbWFyeSB8IFNlY29uZGFyeSB8IEZpbmFs ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkJICogICAgICB8IFNlYXJjaCAgfCBTZWFyY2gg ICAgfCBQb2ludCAgICAgICAgICAgICAgICAgICAgICAgICB8CisJCSAqICAgICAgfC0tLS0tLS0t LXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCQkgKiAgICAg IHwgRmFpbCAgICB8IEZhaWwgICAgICB8IFJldHVybiBGYWlsICAgICAgICAgICAgICAgICAgIHwK KwkJICogICAgICB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS18CisJCSAqICAgICAgfCBGYWlsICAgIHwgUGFzcyAgICAgIHwgUmV0dXJuIEZhaWwg ICAgICAgICAgICAgICAgICAgfAorCQkgKiAgICAgIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKwkJICogICAgICB8IFBhc3MgICAgfCBGYWls ICAgICAgfCBSZXR1cm4gRmFpbCAgICAgICAgICAgICAgICAgICB8CisJCSAqICAgICAgfC0tLS0t LS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCQkgKiAg ICAgIHwgUGFzcyAgICB8IFBhc3MgICAgICB8IHJ4ID0gICAgICAgICAgICAgICAgICAgICAgICAg IHwKKwkJICogICAgICB8ICAgICAgICAgfCAgICAgICAgICAgfCAgbWluKHByaW1hcnkucngsIHNl Y29uZGFyeS5yeCl8CisJCSAqICAgICAgfCAgICAgICAgIHwgICAgICAgICAgIHwgdHggPSBwcmlt YXJ5LnR4ICAgICAgICAgICAgICAgfAorCQkgKiAgICAgIHwgICAgICAgICB8ICAgICAgICAgICB8 IHJlYWRfZGVsYXkgPSAgICAgICAgICAgICAgICAgIHwKKwkJICogICAgICB8ICAgICAgICAgfCAg ICAgICAgICAgfCAgbWluKHByaW1hcnkucmVhZF9kZWxheSwgICAgICB8CisJCSAqICAgICAgfCAg ICAgICAgIHwgICAgICAgICAgIHwgICAgICBzZWNvbmRhcnkucmVhZF9kZWxheSkgICAgfAorCQkg KiAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLXwKKwkJICovCisKKwkJLyogUHJpbWFyeSBiYWNrdXA6IERlY3JlbWVudCBUWCBmcm9tIGhp Z2ggd2luZG93IGVuZCAqLworCisJCWJhY2t1cHBvaW50LnR4ID0gQ1FTUElfUEhZX1RYX0xPT0tV UF9ISUdIX0VORDsKKwkJZG8geworCQkJZGV2X2RiZyhkZXYsCisJCQkJIlNlYXJjaGluZyBmb3Ig QmFja3VwIFByaW1hcnkgcnhsb3cgb24gVFggPSAlZFxuIiwKKwkJCQliYWNrdXBwb2ludC50eCk7 CisJCQliYWNrdXBwb2ludC5yZWFkX2RlbGF5ID0gQ1FTUElfUEhZX0lOSVRfUkQ7CisJCQlyZXQg PSBjcXNwaV9maW5kX3J4X2xvd19kZHIoZl9wZGF0YSwgbWVtLCAmYmFja3VwcG9pbnQpOworCQkJ YmFja3VwcG9pbnQudHggLT0gQ1FTUElfUEhZX0REUl9TRUFSQ0hfU1RFUDsKKwkJfSB3aGlsZSAo cmV0ICYmCisJCQkgYmFja3VwcG9pbnQudHggPj0gQ1FTUElfUEhZX1RYX0xPT0tVUF9ISUdIX1NU QVJUKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCQlkZXZfZGJnKGRldiwgIkJhY2t1cCBQ cmltYXJ5IHJ4bG93OiBSWDogJWQgVFg6ICVkIFJEOiAlZFxuIiwKKwkJCWJhY2t1cHBvaW50LnJ4 LCBiYWNrdXBwb2ludC50eCwgYmFja3VwcG9pbnQucmVhZF9kZWxheSk7CisKKwkJLyogU2Vjb25k YXJ5IGJhY2t1cDogVmVyaWZ5IGF0IG9mZnNldCBUWCAqLworCisJCWlmIChiYWNrdXBwb2ludC50 eCA+PQorCQkgICAgKENRU1BJX1BIWV9UWF9MT09LVVBfSElHSF9TVEFSVCArIENRU1BJX1BIWV9T RUFSQ0hfT0ZGU0VUKSkKKwkJCXNyeGxvdy50eCA9IGJhY2t1cHBvaW50LnR4IC0gQ1FTUElfUEhZ X1NFQVJDSF9PRkZTRVQ7CisJCWVsc2UKKwkJCXNyeGxvdy50eCA9IENRU1BJX1BIWV9UWF9MT09L VVBfSElHSF9TVEFSVDsKKwkJZGV2X2RiZyhkZXYsCisJCQkiU2VhcmNoaW5nIGZvciBCYWNrdXAg U2Vjb25kYXJ5IHJ4bG93IG9uIFRYID0gJWRcbiIsCisJCQlzcnhsb3cudHgpOworCQlzcnhsb3cu cmVhZF9kZWxheSA9IENRU1BJX1BIWV9JTklUX1JEOworCQlyZXQgPSBjcXNwaV9maW5kX3J4X2xv d19kZHIoZl9wZGF0YSwgbWVtLCAmc3J4bG93KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0Owor CQlkZXZfZGJnKGRldiwgIkJhY2t1cCBTZWNvbmRhcnkgcnhsb3c6IFJYOiAlZCBUWDogJWQgUkQ6 ICVkXG4iLAorCQkJc3J4bG93LnJ4LCBzcnhsb3cudHgsIHNyeGxvdy5yZWFkX2RlbGF5KTsKKwor CQliYWNrdXBwb2ludC5yeCA9IG1pbihiYWNrdXBwb2ludC5yeCwgc3J4bG93LnJ4KTsKKwkJYmFj a3VwcG9pbnQucmVhZF9kZWxheSA9CisJCQltaW4oYmFja3VwcG9pbnQucmVhZF9kZWxheSwgc3J4 bG93LnJlYWRfZGVsYXkpOworCQlkZXZfZGJnKGRldiwgIkJhY2t1cCBGaW5hbCByeGxvdzogUlg6 ICVkIFRYOiAlZCBSRDogJWRcbiIsCisJCQliYWNrdXBwb2ludC5yeCwgYmFja3VwcG9pbnQudHgs IGJhY2t1cHBvaW50LnJlYWRfZGVsYXkpOworCisJCWlmIChiYWNrdXBwb2ludC5yeCA8IHJ4bG93 LnJ4KSB7CisJCQlyeGxvdyA9IGJhY2t1cHBvaW50OworCQkJZGV2X2RiZyhkZXYsICJVcGRhdGlu ZyByeGxvdyB0byB0aGUgb25lIGF0IFRYID0gJWRcbiIsCisJCQkJYmFja3VwcG9pbnQudHgpOwor CQl9CisJCWRldl9kYmcoZGV2LCAiRmluYWwgcnhsb3c6IFJYOiAlZCBUWDogJWQgUkQ6ICVkXG4i LCByeGxvdy5yeCwKKwkJCXJ4bG93LnR4LCByeGxvdy5yZWFkX2RlbGF5KTsKKworCQkvKiBCYWNr dXAgcnhoaWdoOiBTZWFyY2ggYXQgZml4ZWQgYmFja3VwIFRYICovCisKKwkJLyoKKwkJICogICAg ICAgICAgICAgIHJ4CisJCSAqICAgICAgICAgIDEyNyBeCisJCSAqICAgICAgICAgICAgICB8ICAg ICAgIHh4eHh4ICAgICArKysrKysrKysrKysrKysrKysrfAorCQkgKiAgICAgICAgICAgICAgfCAg ICAgICB4eHh4eHggICAgICsrKysrKysrKysrKysrKysrK3wKKwkJICogICAgc2VhcmNoICAgIHwg ICAgICAgeHh4eHh4eCAgICAgKysrKysrKysrKysrKysrKyt8CisJCSAqICAgIHJ4aGlnaCAgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fAorCQkgKiAgICBvbiBmaXhlZCAg fCAgICAgICB4eHh4eHh4eHggICAgICsrKysrKysrKysrKysrK3wKKwkJICogICAgdHggICAgICAg IHwgICAgICAgeHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrKyt8CisJCSAqICAgICAgICAgICAg ICB8ICAgICAgIHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrKysrfAorCQkgKiAgICAgICAgICAg ICAgfCAgICAgICB4eHh4eHh4eHh4eHggICAgICsrKysrKysrKysrKysKKwkJICogICAgICAgICAg ICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrCisJCSAqICAgICAgICAg ICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrKworCQkgKiAgICAgICAg ICAgICAgfCAgICAgICB4eHh4eHh4eHh4eHh4eHggICAgICsrKysrKysrKysKKwkJICogICAgICAg ICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrCisJCSAqICAgICAg ICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4eHh4ICAgICArKysrKysrKworCQkgKiAgICAg ICAgICAgICAgfCAgICAgICB4eHh4eHh4eHh4eHh4eHh4eHggICAgICsrKysrKysKKwkJICogICAg ICAgICAgICAgIHwKKwkJICogICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0+IHR4CisJCSAqICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAxMjcKKwkJICoKKwkJICogICAgICB8LS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisJCSAqICAgICAg fCBQcmltYXJ5IHwgU2Vjb25kYXJ5IHwgRmluYWwgICAgICAgICAgICAgICAgICAgICAgICAgfAor CQkgKiAgICAgIHwgU2VhcmNoICB8IFNlYXJjaCAgICB8IFBvaW50ICAgICAgICAgICAgICAgICAg ICAgICAgIHwKKwkJICogICAgICB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS18CisJCSAqICAgICAgfCBGYWlsICAgIHwgRmFpbCAgICAgIHwgUmV0 dXJuIEZhaWwgICAgICAgICAgICAgICAgICAgfAorCQkgKiAgICAgIHwtLS0tLS0tLS18LS0tLS0t LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKwkJICogICAgICB8IEZhaWwg ICAgfCBQYXNzICAgICAgfCBDaG9vc2UgU2Vjb25kYXJ5ICAgICAgICAgICAgICB8CisJCSAqICAg ICAgfC0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t fAorCQkgKiAgICAgIHwgUGFzcyAgICB8IEZhaWwgICAgICB8IENob29zZSBQcmltYXJ5ICAgICAg ICAgICAgICAgIHwKKwkJICogICAgICB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS18CisJCSAqICAgICAgfCBQYXNzICAgIHwgUGFzcyAgICAgIHwg aWYgKHNlY29uZGFyeS5yeCA+IHByaW1hcnkucngpfAorCQkgKiAgICAgIHwgICAgICAgICB8ICAg ICAgICAgICB8ICAgICAgICAgQ2hvb3NlIFNlY29uZGFyeSAgICAgIHwKKwkJICogICAgICB8ICAg ICAgICAgfCAgICAgICAgICAgfCBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJCSAq ICAgICAgfCAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICBDaG9vc2UgUHJpbWFyeSAgICAg ICAgfAorCQkgKiAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLXwKKwkJICovCisKKwkJLyogUHJpbWFyeSBiYWNrdXAgcnhoaWdoOiBVc2Ug YmFja3VwIFRYLCBkZWNyZW1lbnQgZnJvbSBtYXggcmVhZF9kZWxheSAqLworCisJCWRldl9kYmco ZGV2LCAiU2VhcmNoaW5nIGZvciBCYWNrdXAgUHJpbWFyeSByeGhpZ2ggb24gVFggPSAlZFxuIiwK KwkJCWJhY2t1cHBvaW50LnR4KTsKKwkJYmFja3VwcG9pbnQucmVhZF9kZWxheSA9IENRU1BJX1BI WV9NQVhfUkQ7CisJCXJldCA9IGNxc3BpX2ZpbmRfcnhfaGlnaF9kZHIoZl9wZGF0YSwgbWVtLCAm YmFja3VwcG9pbnQpOworCQlpZiAocmV0KQorCQkJcHJpbWFyeSA9IGZhbHNlOworCQlkZXZfZGJn KGRldiwgIkJhY2t1cCBQcmltYXJ5IHJ4aGlnaDogUlg6ICVkIFRYOiAlZCBSRDogJWRcbiIsCisJ CQliYWNrdXBwb2ludC5yeCwgYmFja3VwcG9pbnQudHgsIGJhY2t1cHBvaW50LnJlYWRfZGVsYXkp OworCisJCS8qIFNlY29uZGFyeSBiYWNrdXAgcnhoaWdoOiBWZXJpZnkgYXQgb2Zmc2V0IFRYICov CisKKwkJaWYgKGJhY2t1cHBvaW50LnR4ID49CisJCSAgICAoQ1FTUElfUEhZX1RYX0xPT0tVUF9I SUdIX1NUQVJUICsgQ1FTUElfUEhZX1NFQVJDSF9PRkZTRVQpKQorCQkJc3J4aGlnaC50eCA9IGJh Y2t1cHBvaW50LnR4IC0gQ1FTUElfUEhZX1NFQVJDSF9PRkZTRVQ7CisJCWVsc2UKKwkJCXNyeGhp Z2gudHggPSBDUVNQSV9QSFlfVFhfTE9PS1VQX0hJR0hfU1RBUlQ7CisJCWRldl9kYmcoZGV2LAor CQkJIlNlYXJjaGluZyBmb3IgQmFja3VwIFNlY29uZGFyeSByeGhpZ2ggb24gVFggPSAlZFxuIiwK KwkJCXNyeGhpZ2gudHgpOworCQlzcnhoaWdoLnJlYWRfZGVsYXkgPSBDUVNQSV9QSFlfTUFYX1JE OworCQlyZXQgPSBjcXNwaV9maW5kX3J4X2hpZ2hfZGRyKGZfcGRhdGEsIG1lbSwgJnNyeGhpZ2gp OworCQlpZiAocmV0KQorCQkJc2Vjb25kYXJ5ID0gZmFsc2U7CisJCWRldl9kYmcoZGV2LCAiQmFj a3VwIFNlY29uZGFyeSByeGhpZ2g6IFJYOiAlZCBUWDogJWQgUkQ6ICVkXG4iLAorCQkJc3J4aGln aC5yeCwgc3J4aGlnaC50eCwgc3J4aGlnaC5yZWFkX2RlbGF5KTsKKworCQlpZiAoIXByaW1hcnkg JiYgIXNlY29uZGFyeSkKKwkJCWdvdG8gb3V0OworCQllbHNlIGlmICghcHJpbWFyeSkKKwkJCWJh Y2t1cHBvaW50ID0gc3J4aGlnaDsKKwkJZWxzZSBpZiAoc2Vjb25kYXJ5ICYmIHNyeGhpZ2gucngg PiBiYWNrdXBwb2ludC5yeCkKKwkJCWJhY2t1cHBvaW50ID0gc3J4aGlnaDsKKwkJZGV2X2RiZyhk ZXYsICJCYWNrdXAgRmluYWwgcnhoaWdoOiBSWDogJWQgVFg6ICVkIFJEOiAlZFxuIiwKKwkJCWJh Y2t1cHBvaW50LnJ4LCBiYWNrdXBwb2ludC50eCwgYmFja3VwcG9pbnQucmVhZF9kZWxheSk7CisK KwkJaWYgKGJhY2t1cHBvaW50LnJ4ID4gcnhoaWdoLnJ4KSB7CisJCQlyeGhpZ2ggPSBiYWNrdXBw b2ludDsKKwkJCWRldl9kYmcoZGV2LCAiVXBkYXRpbmcgcnhoaWdoIHRvIHRoZSBvbmUgYXQgVFgg PSAlZFxuIiwKKwkJCQliYWNrdXBwb2ludC50eCk7CisJCX0KKwkJZGV2X2RiZyhkZXYsICJGaW5h bCByeGhpZ2g6IFJYOiAlZCBUWDogJWQgUkQ6ICVkXG4iLCByeGhpZ2gucngsCisJCQlyeGhpZ2gu dHgsIHJ4aGlnaC5yZWFkX2RlbGF5KTsKKwl9CisKKwkvKiBHb2xkZW4gdHhsb3c6IEZpeCBSWCBh dCAxLzQgb2YgUlggd2luZG93LCBzZWFyY2ggVFggbG93ZXIgYm91bmQgKi8KKworCS8qCisJICog ICAgICAgICAgICAgIHJ4CisJICogICAgICAgICAgMTI3IF4KKwkgKiAgICAgICAgICAgICAgfAor CSAqICAgICByeGhpZ2ggLS0tLS0tLS0tPnh4eHh4ICAgICArKysrKysrKysrKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eCAgICAgKysrKysrKysrKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHggICAgICsrKysrKysrKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4ICAgICArKysrKysrKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHggICAgICsrKysrKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrKwor CSAqICAgIGZpeCByeCAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHggICAgICsrKysrKysrKysrKwor CSAqICAgIDEvNCBiL3cgLS0tLS0tLS0tPjwtLS0tLS0tPnh4eHh4ICAgICArKysrKysrKysrKwor CSAqICAgIHJ4bG93IGFuZCB8ICAgICAgIHh4eHh8eHh4eHh4eHh4eCAgICAgKysrKysrKysrKwor CSAqICAgIHJ4aGlnaCAgICB8ICAgICAgIHh4eHh8eHh4eHh4eHh4eHggICAgICsrKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh8eHh4eHh4eHh4eHh4ICAgICArKysrKysrKwor CSAqICAgICAgcnhsb3cgLS0tLS0tLS0tPnh4eHh8eHh4eHh4eHh4eHh4eCAgICAgKysrKysrKwor CSAqICAgICAgICAgICAgICB8ICAgICAgICAgICB8CisJICogICAgICAgICAgICAgIC0tLS0tLS0t LS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IHR4CisJICogICAgICAgICAgICAg IDAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI3CisJICogICAgICAg ICAgICAgICAgICAgICBzZWFyY2gKKwkgKiAgICAgICAgICAgICAgICAgICAgICB0eGxvdworCSAq LworCisJcnhfd2luZG93ID0gcnhoaWdoLnJ4IC0gcnhsb3cucng7CisJdHhsb3cucnggPSByeGxv dy5yeCArIChyeF93aW5kb3cgLyA0KTsKKwlkZXZfZGJnKGRldiwgIlNlYXJjaGluZyBmb3IgR29s ZGVuIHR4bG93IG9uIFJYID0gJWRcbiIsIHR4bG93LnJ4KTsKKwl0eGxvdy5yZWFkX2RlbGF5ID0g Q1FTUElfUEhZX0lOSVRfUkQ7CisJcmV0ID0gY3FzcGlfZmluZF90eF9sb3dfZGRyKGZfcGRhdGEs IG1lbSwgJnR4bG93KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwlkZXZfZGJnKGRldiwgIkdv bGRlbiB0eGxvdzogUlg6ICVkIFRYOiAlZCBSRDogJWRcbiIsIHR4bG93LnJ4LCB0eGxvdy50eCwK KwkJdHhsb3cucmVhZF9kZWxheSk7CisKKwkvKiBHb2xkZW4gdHhoaWdoOiBTYW1lIFJYIGFzIHR4 bG93LCBkZWNyZW1lbnQgZnJvbSBtYXggcmVhZF9kZWxheSAqLworCisJLyoKKwkgKiAgICAgICAg ICAgICAgcngKKwkgKiAgICAgICAgICAxMjcgXgorCSAqICAgICAgICAgICAgICB8CisJICogICAg IHJ4aGlnaCAtLS0tLS0tLS0+eHh4eHggICAgICsrKysrKysrKysrKysrKysrKysrCisJICogICAg ICAgICAgICAgIHwgICAgICAgeHh4eHh4ICAgICArKysrKysrKysrKysrKysrKysrCisJICogICAg ICAgICAgICAgIHwgICAgICAgeHh4eHh4eCAgICAgKysrKysrKysrKysrKysrKysrCisJICogICAg ICAgICAgICAgIHwgICAgICAgeHh4eHh4eHggICAgICsrKysrKysrKysrKysrKysrCisJICogICAg ICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4ICAgICArKysrKysrKysrKysrKysrCisJICogICAg ICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrKysrCisJICogICAg ICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHggICAgICsrKysrKysrKysrKysrCisJICogICAg ICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrKysrCisJICogICAg Zml4IHJ4ICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrCisJICogICAg MS80IGIvdyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT48LS0tLS0+CisJICogICAg cnhsb3cgYW5kIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4ICAgICArKysrKyt8KysrCisJICogICAg cnhoaWdoICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4eCAgICAgKysrKyt8KysrCisJICogICAg ICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4eHggICAgICsrKyt8KysrCisJICogICAg ICByeGxvdyAtLS0tLS0tLS0+eHh4eHh4eHh4eHh4eHh4eHh4ICAgICArKyt8KysrCisJICogICAg ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICogICAgICAg ICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0+IHR4CisJ ICogICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAg MTI3CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNo CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHhoaWdoCisJ ICovCisKKwl0eGhpZ2gucnggPSB0eGxvdy5yeDsKKwlkZXZfZGJnKGRldiwgIlNlYXJjaGluZyBm b3IgR29sZGVuIHR4aGlnaCBvbiBSWCA9ICVkXG4iLCB0eGhpZ2gucngpOworCXR4aGlnaC5yZWFk X2RlbGF5ID0gQ1FTUElfUEhZX01BWF9SRDsKKwlyZXQgPSBjcXNwaV9maW5kX3R4X2hpZ2hfZGRy KGZfcGRhdGEsIG1lbSwgJnR4aGlnaCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJZGV2X2Ri ZyhkZXYsICJHb2xkZW4gdHhoaWdoOiBSWDogJWQgVFg6ICVkIFJEOiAlZFxuIiwgdHhoaWdoLnJ4 LAorCQl0eGhpZ2gudHgsIHR4aGlnaC5yZWFkX2RlbGF5KTsKKworCS8qIElmIHR4bG93L3R4aGln aCBhdCBzYW1lIHJlYWRfZGVsYXksIHNlYXJjaCBiYWNrdXAgYXQgMy80IFJYIHdpbmRvdyAqLwor CisJaWYgKHR4bG93LnJlYWRfZGVsYXkgPT0gdHhoaWdoLnJlYWRfZGVsYXkpIHsKKwkJLyogQmFj a3VwIHR4bG93OiBGaXggUlggYXQgMy80IG9mIFJYIHdpbmRvdyAqLworCisJCS8qCisJCSAqICAg ICAgICAgICAgICByeAorCQkgKiAgICAgICAgICAxMjcgXgorCQkgKiAgICAgICAgICAgICAgfAor CQkgKiAgICAgcnhoaWdoIC0tLS0tLS0tLT54eHh4eCAgICAgKysrKysrKysrKysrKysrKysrKysK KwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4ICAgICArKysrKysrKysrKysrKysrKysr CisJCSAqICAgIGZpeCByeCAgICB8ICAgICAgIHh4eHh4eHggICAgICsrKysrKysrKysrKysrKysr KworCQkgKiAgICAzLzQgYi93IC0tLS0tLS0tLT48LS0tLS0+eCAgICAgKysrKysrKysrKysrKysr KysKKwkJICogICAgcnhsb3cgYW5kIHwgICAgICAgeHh4eHx4eHh4ICAgICArKysrKysrKysrKysr KysrCisJCSAqICAgIHJ4aGlnaCAgICB8ICAgICAgIHh4eHh8eHh4eHggICAgICsrKysrKysrKysr KysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4fHh4eHh4eCAgICAgKysrKysrKysr KysrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHx4eHh4eHh4ICAgICArKysrKysr KysrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh8eHh4eHh4eHggICAgICsrKysr KysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4fHh4eHh4eHh4eCAgICAgKysr KysrKysrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHx4eHh4eHh4eHh4ICAgICAr KysrKysrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh8eHh4eHh4eHh4eHggICAg ICsrKysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4fHh4eHh4eHh4eHh4eCAg ICAgKysrKysrKysKKwkJICogICAgICByeGxvdyAtLS0tLS0tLS0+eHh4eHx4eHh4eHh4eHh4eHh4 ICAgICArKysrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgICAgICB8CisJCSAqICAgICAg ICAgICAgICAtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiB0eAor CQkgKiAgICAgICAgICAgICAgMCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxMjcKKwkJICogICAgICAgICAgICAgICAgICAgICBzZWFyY2gKKwkJICogICAgICAgICAgICAg ICAgICAgICAgdHhsb3cKKwkJICovCisKKwkJZGV2X2RiZyhkZXYsICJ0eGxvdyBhbmQgdHhoaWdo IGF0IHRoZSBzYW1lIHJlYWQgZGVsYXkuXG4iKTsKKwkJYmFja3VwcG9pbnQucnggPSByeGxvdy5y eCArICgocnhfd2luZG93ICogMykgLyA0KTsKKwkJZGV2X2RiZyhkZXYsICJTZWFyY2hpbmcgZm9y IEJhY2t1cCB0eGxvdyBvbiBSWCA9ICVkXG4iLAorCQkJYmFja3VwcG9pbnQucngpOworCQliYWNr dXBwb2ludC5yZWFkX2RlbGF5ID0gQ1FTUElfUEhZX0lOSVRfUkQ7CisJCXJldCA9IGNxc3BpX2Zp bmRfdHhfbG93X2RkcihmX3BkYXRhLCBtZW0sICZiYWNrdXBwb2ludCk7CisJCWlmIChyZXQpCisJ CQlnb3RvIG91dDsKKwkJZGV2X2RiZyhkZXYsICJCYWNrdXAgdHhsb3c6IFJYOiAlZCBUWDogJWQg UkQ6ICVkXG4iLAorCQkJYmFja3VwcG9pbnQucngsIGJhY2t1cHBvaW50LnR4LCBiYWNrdXBwb2lu dC5yZWFkX2RlbGF5KTsKKworCQlpZiAoYmFja3VwcG9pbnQudHggPCB0eGxvdy50eCkgeworCQkJ dHhsb3cgPSBiYWNrdXBwb2ludDsKKwkJCWRldl9kYmcoZGV2LCAiVXBkYXRpbmcgdHhsb3cgd2l0 aCB0aGUgb25lIGF0IFJYID0gJWRcbiIsCisJCQkJYmFja3VwcG9pbnQucngpOworCQl9CisJCWRl dl9kYmcoZGV2LCAiRmluYWwgdHhsb3c6IFJYOiAlZCBUWDogJWQgUkQ6ICVkXG4iLCB0eGxvdy5y eCwKKwkJCXR4bG93LnR4LCB0eGxvdy5yZWFkX2RlbGF5KTsKKworCQkvKiBCYWNrdXAgdHhoaWdo OiBTYW1lIFJYIGFzIGJhY2t1cCB0eGxvdywgZGVjcmVtZW50IGZyb20gbWF4ICovCisKKwkJLyoK KwkJICogICAgICAgICAgICAgIHJ4CisJCSAqICAgICAgICAgIDEyNyBeCisJCSAqICAgICAgICAg ICAgICB8CisJCSAqICAgICByeGhpZ2ggLS0tLS0tLS0tPnh4eHh4ICAgICArKysrKysrKysrKysr KysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHggICAgICsrKysrKysrKysr KysrKysrKysKKwkJICogICAgZml4IHJ4ICAgIHwgICAgICAgeHh4eHh4eCAgICAgKysrKysrKysr KysrKysrKysrCisJCSAqICAgIDMvNCBiL3cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t PjwtLS0tLS0tPgorCQkgKiAgICByeGxvdyBhbmQgfCAgICAgICB4eHh4eHh4eHggICAgICsrKysr KysrKysrfCsrKysKKwkJICogICAgcnhoaWdoICAgIHwgICAgICAgeHh4eHh4eHh4eCAgICAgKysr KysrKysrK3wrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4ICAgICAr KysrKysrKyt8KysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHh4eHh4eHggICAg ICsrKysrKysrfCsrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eCAg ICAgKysrKysrK3wrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4 ICAgICArKysrKyt8KysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHh4eHh4eHh4 eHggICAgICsrKysrfCsrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4 eHh4eCAgICAgKysrK3wrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4 eHh4eHh4ICAgICArKyt8KysrKworCQkgKiAgICAgIHJ4bG93IC0tLS0tLS0tLT54eHh4eHh4eHh4 eHh4eHh4eHggICAgICsrfCsrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwKKwkJICogICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0+IHR4CisJCSAqICAgICAgICAgICAgICAwICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIDEyNworCQkgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoCisJCSAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eGhpZ2gKKwkJICovCisKKwkJZGV2X2Ri ZyhkZXYsICJTZWFyY2hpbmcgZm9yIEJhY2t1cCB0eGhpZ2ggb24gUlggPSAlZFxuIiwKKwkJCWJh Y2t1cHBvaW50LnJ4KTsKKwkJYmFja3VwcG9pbnQucmVhZF9kZWxheSA9IENRU1BJX1BIWV9NQVhf UkQ7CisJCXJldCA9IGNxc3BpX2ZpbmRfdHhfaGlnaF9kZHIoZl9wZGF0YSwgbWVtLCAmYmFja3Vw cG9pbnQpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJCWRldl9kYmcoZGV2LCAiQmFja3Vw IHR4aGlnaDogUlg6ICVkIFRYOiAlZCBSRDogJWRcbiIsCisJCQliYWNrdXBwb2ludC5yeCwgYmFj a3VwcG9pbnQudHgsIGJhY2t1cHBvaW50LnJlYWRfZGVsYXkpOworCisJCWlmIChiYWNrdXBwb2lu dC50eCA+IHR4aGlnaC50eCkgeworCQkJdHhoaWdoID0gYmFja3VwcG9pbnQ7CisJCQlkZXZfZGJn KGRldiwKKwkJCQkiVXBkYXRpbmcgdHhoaWdoIHdpdGggdGhlIG9uZSBhdCBSWCA9ICVkXG4iLAor CQkJCWJhY2t1cHBvaW50LnJ4KTsKKwkJfQorCQlkZXZfZGJnKGRldiwgIkZpbmFsIHR4aGlnaDog Ulg6ICVkIFRYOiAlZCBSRDogJWRcbiIsIHR4aGlnaC5yeCwKKwkJCXR4aGlnaC50eCwgdHhoaWdo LnJlYWRfZGVsYXkpOworCX0KKworCS8qIENvcm5lciBwb2ludHM6IERlZmluZSBhbmQgdmVyaWZ5 IGJvdHRvbWxlZnQgYW5kIHRvcHJpZ2h0IGJvdW5kYXJpZXMgKi8KKworCS8qCisJICogICAgICAg ICAgICAgIHJ4CisJICogICAgICAgICAgMTI3IF4KKwkgKiAgICAgICAgICAgICAgfCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRvcHJpZ2h0CisJICogICAgICAgICAgICAgIHwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisJICogICAgcnhoaWdoIC0tLS0tLS0t LS0teHh4eHggICAgICsrKysrKysrKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg ICAgeHh4eHh4ICAgICArKysrKysrKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg ICAgeHh4eHh4eCAgICAgKysrKysrKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg ICAgeHh4eHh4eHggICAgICsrKysrKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg ICAgeHh4eHh4eHh4ICAgICArKysrKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg ICAgeHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg ICAgeHh4eHh4eHh4eHggICAgICsrKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg ICAgeHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg ICAgeHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg ICAgeHh4eHh4eHh4eHh4eHggICAgICsrKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg ICAgeHh4eHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg ICAgeHh4eHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg ICAgeHh4eHh4eHh4eHh4eHh4eHggICAgICsrKysrKysrCisJICogICAgIHJ4bG93IC0tLS0tLS0t LS0teHh4eHh4eHh4eHh4eHh4eHh4ICAgICArKysrKysrCisJICogICAgICAgICAgICAgIHwgICAg ICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICogICAgICAgICAgICAgIHwgYm90 dG9tfGxlZnQgICAgICAgICAgICAgICAgICAgICAgICB8CisJICogICAgICAgICAgICAgIC0tLS0t LS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tPiB0eAorCSAqICAgICAgICAgICAg ICAwICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMjcKKwkgKiAgICAgICAg ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKiAgICAgICAg ICAgICAgICAgICAgICB0eGxvdyAgICAgICAgICAgICAgICAgICB0eGhpZ2gKKwkgKgorCSAqIFZl cmlmaWNhdGlvbjogVGVzdCBwb2ludCA0IHRhcHMgaW5zaWRlIGVhY2ggY29ybmVyLCBhZGp1c3QK KwkgKiByZWFkX2RlbGF5IMKxMSBpZiBuZWVkZWQgdG8gZW5zdXJlIHZhbGlkIGNvcm5lcnMgZm9y IGdhcCBzZWFyY2guCisJICovCisKKwlib3R0b21sZWZ0LnR4ID0gdHhsb3cudHg7CisJYm90dG9t bGVmdC5yeCA9IHJ4bG93LnJ4OworCWlmICh0eGxvdy5yZWFkX2RlbGF5IDw9IHJ4bG93LnJlYWRf ZGVsYXkpCisJCWJvdHRvbWxlZnQucmVhZF9kZWxheSA9IHR4bG93LnJlYWRfZGVsYXk7CisJZWxz ZQorCQlib3R0b21sZWZ0LnJlYWRfZGVsYXkgPSByeGxvdy5yZWFkX2RlbGF5OworCisJLyogVmVy aWZ5IGJvdHRvbWxlZnQ6IFRlc3QgNCB0YXBzIGluc2lkZSwgYWRqdXN0IHJlYWRfZGVsYXkgaWYg bmVlZGVkICovCisJYmFja3VwY29ybmVycG9pbnQgPSBib3R0b21sZWZ0OworCWJhY2t1cGNvcm5l cnBvaW50LnR4ICs9IDQ7CisJYmFja3VwY29ybmVycG9pbnQucnggKz0gNDsKKwlyZXQgPSBjcXNw aV9waHlfYXBwbHlfc2V0dGluZyhmX3BkYXRhLCAmYmFja3VwY29ybmVycG9pbnQpOworCWlmICgh cmV0KQorCQlyZXQgPSBjcXNwaV9waHlfY2hlY2tfcGF0dGVybihmX3BkYXRhLCBtZW0pOworCisJ aWYgKHJldCkgeworCQliYWNrdXBjb3JuZXJwb2ludC5yZWFkX2RlbGF5LS07CisJCXJldCA9IGNx c3BpX3BoeV9hcHBseV9zZXR0aW5nKGZfcGRhdGEsICZiYWNrdXBjb3JuZXJwb2ludCk7CisJCWlm ICghcmV0KQorCQkJcmV0ID0gY3FzcGlfcGh5X2NoZWNrX3BhdHRlcm4oZl9wZGF0YSwgbWVtKTsK Kwl9CisKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWJvdHRvbWxlZnQucmVhZF9kZWxheSA9 IGJhY2t1cGNvcm5lcnBvaW50LnJlYWRfZGVsYXk7CisKKwl0b3ByaWdodC50eCA9IHR4aGlnaC50 eDsKKwl0b3ByaWdodC5yeCA9IHJ4aGlnaC5yeDsKKwlpZiAodHhoaWdoLnJlYWRfZGVsYXkgPj0g cnhoaWdoLnJlYWRfZGVsYXkpCisJCXRvcHJpZ2h0LnJlYWRfZGVsYXkgPSB0eGhpZ2gucmVhZF9k ZWxheTsKKwllbHNlCisJCXRvcHJpZ2h0LnJlYWRfZGVsYXkgPSByeGhpZ2gucmVhZF9kZWxheTsK KworCS8qIFZlcmlmeSB0b3ByaWdodDogVGVzdCA0IHRhcHMgaW5zaWRlLCBhZGp1c3QgcmVhZF9k ZWxheSBpZiBuZWVkZWQgKi8KKwliYWNrdXBjb3JuZXJwb2ludCA9IHRvcHJpZ2h0OworCWJhY2t1 cGNvcm5lcnBvaW50LnR4IC09IDQ7CisJYmFja3VwY29ybmVycG9pbnQucnggLT0gNDsKKwlyZXQg PSBjcXNwaV9waHlfYXBwbHlfc2V0dGluZyhmX3BkYXRhLCAmYmFja3VwY29ybmVycG9pbnQpOwor CWlmICghcmV0KQorCQlyZXQgPSBjcXNwaV9waHlfY2hlY2tfcGF0dGVybihmX3BkYXRhLCBtZW0p OworCisJaWYgKHJldCkgeworCQliYWNrdXBjb3JuZXJwb2ludC5yZWFkX2RlbGF5Kys7CisJCXJl dCA9IGNxc3BpX3BoeV9hcHBseV9zZXR0aW5nKGZfcGRhdGEsICZiYWNrdXBjb3JuZXJwb2ludCk7 CisJCWlmICghcmV0KQorCQkJcmV0ID0gY3FzcGlfcGh5X2NoZWNrX3BhdHRlcm4oZl9wZGF0YSwg bWVtKTsKKwl9CisKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXRvcHJpZ2h0LnJlYWRfZGVs YXkgPSBiYWNrdXBjb3JuZXJwb2ludC5yZWFkX2RlbGF5OworCisJZGV2X2RiZyhkZXYsICJ0b3By aWdodDogUlg6ICVkIFRYOiAlZCBSRDogJWRcbiIsIHRvcHJpZ2h0LnJ4LAorCQl0b3ByaWdodC50 eCwgdG9wcmlnaHQucmVhZF9kZWxheSk7CisJZGV2X2RiZyhkZXYsICJib3R0b21sZWZ0OiBSWDog JWQgVFg6ICVkIFJEOiAlZFxuIiwgYm90dG9tbGVmdC5yeCwKKwkJYm90dG9tbGVmdC50eCwgYm90 dG9tbGVmdC5yZWFkX2RlbGF5KTsKKwljcXNwaV9waHlfZmluZF9nYXBsb3dfZGRyKGZfcGRhdGEs IG1lbSwgJmJvdHRvbWxlZnQsICZ0b3ByaWdodCwgJmdhcGxvdyk7CisJZGV2X2RiZyhkZXYsICJn YXBsb3c6IFJYOiAlZCBUWDogJWQgUkQ6ICVkXG4iLCBnYXBsb3cucngsIGdhcGxvdy50eCwKKwkJ Z2FwbG93LnJlYWRfZGVsYXkpOworCisJLyogRmluYWwgcG9pbnQgc2VsZWN0aW9uOiBIYW5kbGUg c2luZ2xlIHZzIGR1YWwgcGFzc2luZyByZWdpb25zICovCisKKwlpZiAoYm90dG9tbGVmdC5yZWFk X2RlbGF5ID09IHRvcHJpZ2h0LnJlYWRfZGVsYXkpIHsKKwkJLyoKKwkJICogU2luZ2xlIHJlZ2lv bjogVXNlIG1pZHBvaW50IHdpdGggdGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uLgorCQkgKiBHYXBs b3cgYXBwcm94aW1hdGVzIHVwcGVyIGJvdW5kYXJ5IG9mIHZhbGlkIHJlZ2lvbi4KKwkJICoKKwkJ ICogICAgICAgICAgICAgIHJ4CisJCSAqICAgICAgICAgIDEyNyBeCisJCSAqICAgICAgICAgICAg ICB8ICAgICAgICAgICAgICBnYXBsb3cgKGFwcHJveC4gdG9wcmlnaHQpCisJCSAqICAgICAgICAg ICAgICB8ICAgICAgICAgICAgICB8CisJCSAqICAgIHJ4aGlnaCAtLS0tLS0tLS0tLXh4eHh4eHh8 ICAgICAgICAgIGZhaWxpbmcKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHwgICAg ICAgICAgIHJlZ2lvbgorCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHh4fCAgICAgPC0t LS0tLS0tLS0tLS0tLT4KKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHwgICAgICsr KysrKysrKysrKysrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eCAgICAg KysrKysrKysrKysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHh4eHh4ICAg ICArKysrKysrKysrKysrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHgg ICAgICsrKysrKysrKysrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4eHh4 eCAgICAgKysrKysrKysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHh4eHh4 eHh4ICAgICArKysrKysrKysrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4eHh4 eHh4eHggICAgICsrKysrKysrKysrCisJCSAqICAgICAgICAgICAgICB8ICAgICAgIHh4eHh4eHh4 eHh4eHh4eCAgICAgKysrKysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICB4eHh4eHh4 eHh4eHh4eHh4ICAgICArKysrKysrKysKKwkJICogICAgICAgICAgICAgIHwgICAgICAgeHh4eHh4 eHh4eHh4eHh4eHggICAgICsrKysrKysrCisJCSAqICAgICByeGxvdyAtLS0tLS0tLS0tLXh4eHh4 eHh4eHh4eHh4eHh4eCAgICAgKysrKysrKworCQkgKiAgICAgICAgICAgICAgfCAgICAgICAqICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkJICogICAgICAgICAgICAgIHwgYm90dG9tfGxl ZnQgICAgICAgICAgICAgICAgICAgICAgICB8CisJCSAqICAgICAgICAgICAgICAtLS0tLS0tLXwt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLT4gdHgKKwkJICogICAgICAgICAgICAgIDAg ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyNworCQkgKiAgICAgICAgICAg ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkJICogICAgICAgICAg ICAgICAgICAgICAgdHhsb3cgICAgICAgICAgICAgICAgICAgdHhoaWdoCisJCSAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoc2FtZSByZWFkX2RlbGF5KQorCQkgKgorCQkgKiBUZW1wZXJh dHVyZSBjb21wZW5zYXRpb246IFZhbGlkIHJlZ2lvbiBzaGlmdHMgd2l0aCB0ZW1wLgorCQkgKiBP ZmZzZXQgPSByZWdpb25fc2l6ZSAvICgzMzAgLyAodGVtcCAtIDQywrBDKSkKKwkJICogRmFjdG9y IDMzMCBpcyBlbXBpcmljYWxseSBkZXRlcm1pbmVkIGZvciB0aGlzIGhhcmR3YXJlLgorCQkgKi8K KworCQlkZXZfZGJnKGRldiwKKwkJCSJib3R0b21sZWZ0IGFuZCB0b3ByaWdodCBhdCB0aGUgc2Ft ZSByZWFkIGRlbGF5LlxuIik7CisKKwkJdG9wcmlnaHQgPSBnYXBsb3c7CisJCXNlYXJjaHBvaW50 LnJlYWRfZGVsYXkgPSBib3R0b21sZWZ0LnJlYWRfZGVsYXk7CisJCXNlYXJjaHBvaW50LnR4ID0K KwkJCWJvdHRvbWxlZnQudHggKyAoKHRvcHJpZ2h0LnR4IC0gYm90dG9tbGVmdC50eCkgLyAyKTsK KwkJc2VhcmNocG9pbnQucnggPQorCQkJYm90dG9tbGVmdC5yeCArICgodG9wcmlnaHQucnggLSBi b3R0b21sZWZ0LnJ4KSAvIDIpOworCisJCXJldCA9IGNxc3BpX2dldF90ZW1wKCZ0ZW1wKTsKKwkJ aWYgKHJldCkgeworCQkJLyogQXNzdW1lIHJvb20gdGVtcGVyYXR1cmUgaWYgc2Vuc29yIHVuYXZh aWxhYmxlICovCisJCQlkZXZfZGJnKGRldiwKKwkJCQkiVW5hYmxlIHRvIGdldCB0ZW1wZXJhdHVy ZS4gQXNzdW1pbmcgcm9vbSB0ZW1wZXJhdHVyZVxuIik7CisJCQl0ZW1wID0gQ1FTUElfUEhZX0RF RkFVTFRfVEVNUDsKKwkJfQorCisJCWlmICh0ZW1wIDwgQ1FTUElfUEhZX01JTl9URU1QIHx8IHRl bXAgPiBDUVNQSV9QSFlfTUFYX1RFTVApIHsKKwkJCWRldl9lcnIoZGV2LAorCQkJCSJUZW1wZXJh dHVyZSBvdXRzaWRlIG9wZXJhdGluZyByYW5nZTogJWRDXG4iLAorCQkJCXRlbXApOworCQkJcmV0 ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKHRlbXAgPT0gQ1FTUElfUEhZ X01JRF9URU1QKQorCQkJdGVtcCsrOyAvKiBBdm9pZCBkaXZpZGUtYnktemVybyAqLworCQlkZXZf ZGJnKGRldiwgIlRlbXBlcmF0dXJlOiAlZENcbiIsIHRlbXApOworCisJCS8qCisJCSAqIEFwcGx5 IHRlbXBlcmF0dXJlIG9mZnNldDogcG9zaXRpdmUgYXQgaGlnaCB0ZW1wLCBuZWdhdGl2ZSBhdCBs b3cuCisJCSAqIENvbXB1dGUgdGhlIGRpdmlzb3Igb25jZSBhbmQgYXBwbHkgdG8gYm90aCBUWCBh bmQgUlguIFVzZSBpbnQKKwkJICogYXJpdGhtZXRpYyB0aHJvdWdob3V0IHRvIGF2b2lkIHU4IHdy YXBwaW5nIG9uIG5lZ2F0aXZlIG9mZnNldHMuCisJCSAqLworCQl0ZW1wID0gMzMwIC8gKHRlbXAg LSBDUVNQSV9QSFlfTUlEX1RFTVApOworCQlzZWFyY2hwb2ludC50eCA9IGNsYW1wKChpbnQpc2Vh cmNocG9pbnQudHggKworCQkJCSAgICAgICAodG9wcmlnaHQudHggLSBib3R0b21sZWZ0LnR4KSAv IHRlbXAsCisJCQkJICAgICAgIDAsIENRU1BJX1BIWV9NQVhfREVMQVkpOworCQlzZWFyY2hwb2lu dC5yeCA9IGNsYW1wKChpbnQpc2VhcmNocG9pbnQucnggKworCQkJCSAgICAgICAodG9wcmlnaHQu cnggLSBib3R0b21sZWZ0LnJ4KSAvIHRlbXAsCisJCQkJICAgICAgIDAsIENRU1BJX1BIWV9NQVhf REVMQVkpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIER1YWwgcmVnaW9uczogR2FwIHNlcGFyYXRl cyB0d28gdmFsaWQgcmVnaW9ucywgY2hvb3NlIGxhcmdlci4KKwkJICoKKwkJICogICAgICAgICAg ICAgIHJ4CisJCSAqICAgICAgICAgIDEyNyBeCisJCSAqICAgICAgICAgICAgICB8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdG9wcmlnaHQKKwkJICogICAgICAgICAgICAgIHwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisJCSAqICAgIHJ4aGlnaCAtLS0tLS0t LS0tLXh4eHh4ICAgICArKysrKysrKysrKysrKysrKysrfAorCQkgKiAgICAgICAgICAgICAgfCAg ICAgICB4eHh4eHggICAgPHJlZ2lvbiAyPiArKysrKysrK3wKKwkJICogICAgICAgICAgICAgIHwg ICAgICAgeHh4eHh4eCAgICAgKysrKysrKysrKysrKysrKyt8CisJCSAqICAgICAgICAgICAgICB8 ICAgICAgIHh4eHh4eHh4ICAgICArKysrKysrKysrKysrKysrfAorCQkgKiAgICAgICAgICAgICAg fCAgICAgICB4eHh4eHh4eHggICAgICsrKysrKysrKysrKysrK3wKKwkJICogICAgICAgICAgICAg IHwgICAgICAgeHh4eHh4eHh4eCAgICAgKysrKysrKysrKysrKyt8CisJCSAqICAgICAgICAgICAg ICB8ICAgICAgICAgICAgICAgICAgZmFpbGluZyAgICAgICAgICAgfAorCQkgKiAgICAgICAgICAg ICAgfCAgICAgICAgICAgICAgICAgIHJlZ2lvbiAgICAgICAgICAgIHwKKwkJICogICAgICAgICAg ICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eCAgICAgKysrKysrKysrKyt8CisJCSAqICAgICAgICAg ICAgICB8ICAgICAgIHh4eHh4eHh4eHh4eHh4ICAgICArKysrKysrKysrfAorCQkgKiAgICAgICAg ICAgICAgfCAgICAgICB4eHh4eHh4eHh4eHh4eHggICAgICsrKysrKysrK3wKKwkJICogICAgICAg ICAgICAgIHwgICAgICAgeHh4eHh4eHh4eHh4eHh4eCAgICAgKysrKysrKyt8CisJCSAqICAgICAg ICAgICAgICB8ICAgICAgIHh4eHh4eHh4eCA8cmVnaW9uIDE+ICArKysrKysrfAorCQkgKiAgICAg cnhsb3cgLS0tLS0tLS0tLS14eHh4eHh4eHh4eHh4eHh4eHggICAgICsrKysrK3wKKwkJICogICAg ICAgICAgICAgIHwgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJCSAqICAg ICAgICAgICAgICB8IGJvdHRvbXxsZWZ0ICAgICAgICAgICAgICAgICAgICAgICAgfAorCQkgKiAg ICAgICAgICAgICAgLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0+IHR4 CisJCSAqICAgICAgICAgICAgICAwICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAxMjcKKwkJICogICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8CisJCSAqICAgICAgICAgICAgICAgICAgICAgIHR4bG93ICAgICAgICAgICAgICAgICAg IHR4aGlnaAorCQkgKgorCQkgKiBTdHJhdGVneTogQ29tcGFyZSBNYW5oYXR0YW4gZGlzdGFuY2Vz IGZyb20gZ2FwIGJvdW5kYXJpZXMgdG8KKwkJICogY29ybmVycy4gQ2hvb3NlIGNvcm5lciBmdXJ0 aGVzdCBmcm9tIGdhcCAobGFyZ2VyIHJlZ2lvbikuCisJCSAqIEFwcGx5IDE2LXRhcCBtYXJnaW4g aW53YXJkLCBzY2FsZSBSWCBwcm9wb3J0aW9uYWxseS4KKwkJICovCisKKwkJY3FzcGlfcGh5X2Zp bmRfZ2FwaGlnaF9kZHIoZl9wZGF0YSwgbWVtLCAmYm90dG9tbGVmdCwKKwkJCQkJICAgJnRvcHJp Z2h0LCAmZ2FwaGlnaCk7CisJCWRldl9kYmcoZGV2LCAiZ2FwaGlnaDogUlg6ICVkIFRYOiAlZCBS RDogJWRcbiIsIGdhcGhpZ2gucngsCisJCQlnYXBoaWdoLnR4LCBnYXBoaWdoLnJlYWRfZGVsYXkp OworCisJCWlmICh0b3ByaWdodC50eCA9PSBib3R0b21sZWZ0LnR4KSB7CisJCQlkZXZfZXJyKGRl diwgInplcm8gVFggc3BhbiBpbiBkdWFsLXJlZ2lvbjogY2Fubm90IGNvbXB1dGUgc2VhcmNoIHBv aW50XG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIENv bXBhcmUgTWFuaGF0dGFuIGRpc3RhbmNlczogY2hvb3NlIGNvcm5lciBmdXJ0aGVzdCBmcm9tIGdh cCAqLworCQlpZiAoKGFicyhnYXBsb3cudHggLSBib3R0b21sZWZ0LnR4KSArCisJCSAgICAgYWJz KGdhcGxvdy5yeCAtIGJvdHRvbWxlZnQucngpKSA8CisJCSAgICAoYWJzKGdhcGhpZ2gudHggLSB0 b3ByaWdodC50eCkgKworCQkgICAgIGFicyhnYXBoaWdoLnJ4IC0gdG9wcmlnaHQucngpKSkgewor CQkJLyogVG9wcmlnaHQgZnVydGhlcjogVXNlIFJlZ2lvbiAyLCAxNiB0YXBzIGlud2FyZCAqLwor CQkJc2VhcmNocG9pbnQgPSB0b3ByaWdodDsKKwkJCXNlYXJjaHBvaW50LnR4IC09IDE2OworCQkJ c2VhcmNocG9pbnQucnggLT0gKDE2ICogKHRvcHJpZ2h0LnJ4IC0gYm90dG9tbGVmdC5yeCkpIC8K KwkJCQkJICAodG9wcmlnaHQudHggLSBib3R0b21sZWZ0LnR4KTsKKwkJfSBlbHNlIHsKKwkJCS8q IEJvdHRvbWxlZnQgZnVydGhlcjogVXNlIFJlZ2lvbiAxLCAxNiB0YXBzIGlud2FyZCAqLworCQkJ c2VhcmNocG9pbnQgPSBib3R0b21sZWZ0OworCQkJc2VhcmNocG9pbnQudHggKz0gMTY7CisJCQlz ZWFyY2hwb2ludC5yeCArPSAoMTYgKiAodG9wcmlnaHQucnggLSBib3R0b21sZWZ0LnJ4KSkgLwor CQkJCQkgICh0b3ByaWdodC50eCAtIGJvdHRvbWxlZnQudHgpOworCQl9CisJfQorCisJLyogQXBw bHkgYW5kIHZlcmlmeSBmaW5hbCB0dW5pbmcgcG9pbnQgKi8KKwlkZXZfZGJnKGRldiwgIkZpbmFs IHR1bmluZyBwb2ludDogUlg6ICVkIFRYOiAlZCBSRDogJWRcbiIsCisJCXNlYXJjaHBvaW50LnJ4 LCBzZWFyY2hwb2ludC50eCwgc2VhcmNocG9pbnQucmVhZF9kZWxheSk7CisJcmV0ID0gY3FzcGlf cGh5X2FwcGx5X3NldHRpbmcoZl9wZGF0YSwgJnNlYXJjaHBvaW50KTsKKwlpZiAoIXJldCkKKwkJ cmV0ID0gY3FzcGlfcGh5X2NoZWNrX3BhdHRlcm4oZl9wZGF0YSwgbWVtKTsKKworCWlmIChyZXQp IHsKKwkJZGV2X2VycihkZXYsCisJCQkiRmFpbGVkIHRvIGZpbmQgcGF0dGVybiBhdCBmaW5hbCBj YWxpYnJhdGlvbiBwb2ludFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0K KworCWZfcGRhdGEtPnBoeV9zZXR0aW5nLnJlYWRfZGVsYXkgPSBzZWFyY2hwb2ludC5yZWFkX2Rl bGF5OworCWZfcGRhdGEtPnBoeV9zZXR0aW5nLnJ4ID0gc2VhcmNocG9pbnQucng7CisJZl9wZGF0 YS0+cGh5X3NldHRpbmcudHggPSBzZWFyY2hwb2ludC50eDsKK291dDoKKwlpZiAocmV0KQorCQlm X3BkYXRhLT51c2VfdHVuZWRfcGh5ID0gZmFsc2U7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50IGNxc3BpX3BoeV90dW5pbmdfc2RyKHN0cnVjdCBjcXNwaV9mbGFzaF9wZGF0YSAqZl9w ZGF0YSwKKwkJCQlzdHJ1Y3Qgc3BpX21lbSAqbWVtKQoreworCXN0cnVjdCBjcXNwaV9zdCAqY3Fz cGkgPSBmX3BkYXRhLT5jcXNwaTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY3FzcGktPnBkZXYt PmRldjsKKwlzdHJ1Y3QgcGh5X3NldHRpbmcgcnhsb3csIHJ4aGlnaCwgZmlyc3QsIHNlY29uZCwg ZmluYWw7CisJdTggd2luZG93MSA9IDA7CisJdTggd2luZG93MiA9IDA7CisJaW50IHJldDsKKwor CS8qCisJICogU0RSIHR1bmluZzogMUQgc2VhcmNoIGZvciBvcHRpbWFsIFJYIGRlbGF5IChUWCBs ZXNzIGNyaXRpY2FsKS4KKwkgKiBGaW5kIHR3byBjb25zZWN1dGl2ZSB3aW5kb3dzLCBjaG9vc2Ug bGFyZ2VyLCB1c2UgbWlkcG9pbnQuCisJICoKKwkgKiAgICAgICAgICAgICAgcngKKwkgKiAgICAg ICAgICAxMjcgXgorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8LS0tLS13aW5kb3cgYXQtLS0t LS0tLS0tfAorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8LS0tLS1yZWFkX2RlbGF5ID0gbisx LS0tfAorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 fAorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4fAor CSAqICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAq ICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAqICAg ICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAqICAgICAg ICAgICAgICB8ICAgICAgICByeGxvdyhuKzEpICAgbWlkcG9pbnQgICAgcnhoaWdoKG4rMSkKKwkg KiAgICAgICAgICAgICAgfAorCSAqICAgICAgICAgICAgICB8ICAgfC0tLXdpbmRvdyBhdC0tLS0t LS0tfAorCSAqICAgICAgICAgICAgICB8ICAgfC0tLXJlYWRfZGVsYXkgPSBuLS0tfAorCSAqICAg ICAgICAgICAgICB8ICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAqICAgICAgICAgICAgICB8 ICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAqICAgICAgICAgICAgICB8ICAgfHh4eHh4eHh4 eHh4eHh4eHh4eHh4fAorCSAqICAgICAgICAgICAgICB8ICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4 fAorCSAqICAgICAgICAgICAgICB8ICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAqICAgICAg ICAgICAgICB8ICAgcnhsb3cobikgICBtaWRwb2ludCAgcnhoaWdoKG4pCisJICogICAgICAgICAg ICAgIHwKKwkgKiAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0+IHR4CisJICogICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDEyNworCSAqICAgICAgICAgICAgICAgICAgcmVhZF9kZWxheT1uICAgICAg ICAgICAgICAgICAgcmVhZF9kZWxheT1uKzEKKwkgKi8KKworCWZfcGRhdGEtPnVzZV90dW5lZF9w aHkgPSB0cnVlOworCWNxc3BpX3BoeV9yZXNldF9zZXR0aW5nKCZyeGxvdyk7CisJY3FzcGlfcGh5 X3Jlc2V0X3NldHRpbmcoJnJ4aGlnaCk7CisJY3FzcGlfcGh5X3Jlc2V0X3NldHRpbmcoJmZpcnN0 KTsKKworCS8qIEZpcnN0IHdpbmRvdzogRmluZCByeGxvdyBieSBpbmNyZW1lbnRpbmcgcmVhZF9k ZWxheSBmcm9tIDAgKi8KKworCS8qCisJICogICAgICAgICAgICAgIHJ4CisJICogICAgICAgICAg MTI3IF4KKwkgKiAgICAgICAgICAgICAgfCAgIHx4eHh4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAg c2VhcmNoICAgICAgfCAgIHx4eHh4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAgcnhsb3cgICAgICAg fCAgIHx4eHh4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAgaW5jcmVhc2luZyAgfCAgIHx4eHh4eHh4 eHh4eHh4eHh4eHh4eHwKKwkgKiAgICAgICAgICAgLS0tLS0tLS0tPnx4eHh4eHh4eHh4eHh4eHh4 eHh4eHwKKwkgKiAgcmVhZF9kZWxheSAgfCAgICAgICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh8CisJ ICogIHVudGlsIGZvdW5kIHwgICAgICAgIHx4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAqICAgICAg ICAgICAgICB8ICAgICAgICByeGxvdworCSAqICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gdHgKKwkgKiAgICAgICAgICAgICAgMCAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0eCBmaXhlZCBhdCAxMjcKKwkgKi8KKworCWRvIHsKKwkJcmV0 ID0gY3FzcGlfZmluZF9yeF9sb3dfc2RyKGZfcGRhdGEsIG1lbSwgJnJ4bG93KTsKKworCQlpZiAo cmV0KQorCQkJcnhsb3cucmVhZF9kZWxheSsrOworCX0gd2hpbGUgKHJldCAmJiByeGxvdy5yZWFk X2RlbGF5IDw9IENRU1BJX1BIWV9NQVhfUkQpOworCisJLyogRmluZCByeGhpZ2g6IERlY3JlbWVu dCBmcm9tIFJYPTEyNyBhdCBzYW1lIHJlYWRfZGVsYXkgKi8KKworCS8qCisJICogICAgICAgICAg ICAgIHJ4CisJICogICAgICAgICAgMTI3IF4gICAgICAgIHNlYXJjaCByeGhpZ2gKKwkgKiAgICAg ICAgICAgICAgfCAgICAgICAgKGRlY3JlbWVudCBmcm9tCisJICogICAgICAgICAgICAgIHwgICAg ICAgIDEyNyB1bnRpbCBmb3VuZCkKKwkgKiAgICAgICAgICAgICAgfCAgICAgICAgICB8CisJICog ICAgICAgICAgICAgIHwgICAgICAgICAgfAorCSAqICAgICAgICAgICAgICB8ICAgICAgICAgIHYK KwkgKiAgICAgICAgICAgICAgfCAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKwkg KiAgICAgICAgICAgICAgfCAgICAgICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAg ICAgICAgICAgICAgfCAgICAgICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAgICAg ICAgICAgICAgfCAgICAgICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAgICAgICAg ICAgICAgfCAgICAgICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAgICAgICAgICAg ICAgfCAgICAgICAgfHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAgICAgICAgICAgICAg fCAgICAgICAgcnhsb3cgICAgICAgICAgICAgICAgICAgIHJ4aGlnaAorCSAqICAgICAgICAgICAg ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gdHgKKwkgKiAgICAg ICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCBmaXhlZCBhdCAxMjcKKwkg Ki8KKworCXJ4aGlnaC5yZWFkX2RlbGF5ID0gcnhsb3cucmVhZF9kZWxheTsKKwlyZXQgPSBjcXNw aV9maW5kX3J4X2hpZ2hfc2RyKGZfcGRhdGEsIG1lbSwgJnJ4aGlnaCwgcnhsb3cucngpOworCWlm IChyZXQpCisJCWdvdG8gb3V0OworCisJLyogQ2FsY3VsYXRlIGZpcnN0IHdpbmRvdyBtaWRwb2lu dCBmb3IgbWF4IG1hcmdpbiAqLworCisJLyoKKwkgKiAgICAgICAgICAgICAgcngKKwkgKiAgICAg ICAgICAxMjcgXgorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8LS0tLS0tLS13aW5kb3cxLS0t LS0tLS0tfAorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4 eHh4fAorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 fAorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHggKiB4eHh4eHh4eHh4fAor CSAqICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAq ICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4fAorCSAqICAg ICAgICAgICAgICB8ICAgICAgICByeGxvdyAgICAgICAgXiAgICAgICAgICAgcnhoaWdoCisJICog ICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tPiB0 eAorCSAqICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgfCAgICAgIHR4IGZpeGVk IGF0IDEyNworCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdzEvMgorCSAqLwor CisJZmlyc3QucmVhZF9kZWxheSA9IHJ4bG93LnJlYWRfZGVsYXk7CisJd2luZG93MSA9IHJ4aGln aC5yeCAtIHJ4bG93LnJ4OworCWZpcnN0LnJ4ID0gcnhsb3cucnggKyAod2luZG93MSAvIDIpOwor CisJZGV2X2RiZyhkZXYsICJGaXJzdCB0dW5pbmcgcG9pbnQ6IFJYOiAlZCBUWDogJWQgUkQ6ICVk XG4iLCBmaXJzdC5yeCwKKwkJZmlyc3QudHgsIGZpcnN0LnJlYWRfZGVsYXkpOworCXJldCA9IGNx c3BpX3BoeV9hcHBseV9zZXR0aW5nKGZfcGRhdGEsICZmaXJzdCk7CisJaWYgKCFyZXQpCisJCXJl dCA9IGNxc3BpX3BoeV9jaGVja19wYXR0ZXJuKGZfcGRhdGEsIG1lbSk7CisKKwlpZiAocmV0IHx8 IGZpcnN0LnJlYWRfZGVsYXkgPiBDUVNQSV9QSFlfTUFYX1JEKQorCQlnb3RvIG91dDsKKworCS8q IFNlY29uZCB3aW5kb3c6IFNlYXJjaCBhdCByZWFkX2RlbGF5KzEsIG1heSBkaWZmZXIgaW4gc2l6 ZSAqLworCisJLyoKKwkgKiAgICAgICAgICAgICAgcngKKwkgKiAgICAgICAgICAxMjcgXgorCSAq ICAgICAgICAgICAgICB8ICAgICAgICB8LS0tLS0tLXwKKwkgKiAgICAgICAgICAgICAgfCAgICAg ICAgfHh4eHh4eHh8CisJICogICAgICAgICAgICAgIHwgICAgICAgIHx4eHh4eHh4fAorCSAqICAg ICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHwKKwkgKiAgICAgICAgICAgICAgfCAgICAgICAg fHh4eHh4eHh8CisJICogICAgICAgICAgICAgIHwgICAgICAgIHx4eHh4eHh4fAorCSAqICAgICAg ICAgICAgICB8ICAgICAgICByeGxvdyAgIHJ4aGlnaAorCSAqICAgICAgICAgICAgICAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gdHgKKwkgKiAgICAgICAgICAgICAg MAorCSAqICAgICAgICAgICAgICByZWFkX2RlbGF5ID0gbiAoc21hbGxlciB3aW5kb3cpCisJICoK KwkgKiAgICAgICAgICAgICAgcngKKwkgKiAgICAgICAgICAxMjcgXgorCSAqICAgICAgICAgICAg ICB8ICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS18CisJICogICAgICAgICAgICAgIHwgICAgICAg IHx4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAgICAgICAgICAgICAgfCAgICAgICAgfHh4eHh4eHh4 eHh4eHh4eHh4fAorCSAqICAgICAgICAgICAgICB8ICAgICAgICB8eHh4eHh4eHh4eHh4eHh4eHh8 CisJICogICAgICAgICAgICAgIHwgICAgICAgIHx4eHh4eHh4eHh4eHh4eHh4eHwKKwkgKiAgICAg ICAgICAgICAgfCAgICAgICAgfHh4eHh4eHh4eHh4eHh4eHh4fAorCSAqICAgICAgICAgICAgICB8 ICAgICAgICByeGxvdyAgICAgICAgICAgICByeGhpZ2gKKwkgKiAgICAgICAgICAgICAgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IHR4CisJICogICAgICAgICAgICAg IDAKKwkgKiAgICAgICAgICAgICAgcmVhZF9kZWxheSA9IG4rMSAobGFyZ2VyIHdpbmRvdyAtIGJl dHRlcikKKwkgKi8KKworCWNxc3BpX3BoeV9yZXNldF9zZXR0aW5nKCZyeGxvdyk7CisJY3FzcGlf cGh5X3Jlc2V0X3NldHRpbmcoJnJ4aGlnaCk7CisJY3FzcGlfcGh5X3Jlc2V0X3NldHRpbmcoJnNl Y29uZCk7CisKKwlyeGxvdy5yZWFkX2RlbGF5ID0gZmlyc3QucmVhZF9kZWxheSArIDE7CisJaWYg KHJ4bG93LnJlYWRfZGVsYXkgPiBDUVNQSV9QSFlfTUFYX1JEKQorCQlnb3RvIGNvbXBhcmU7CisK KwlyZXQgPSBjcXNwaV9maW5kX3J4X2xvd19zZHIoZl9wZGF0YSwgbWVtLCAmcnhsb3cpOworCWlm IChyZXQpCisJCWdvdG8gY29tcGFyZTsKKworCXJ4aGlnaC5yZWFkX2RlbGF5ID0gcnhsb3cucmVh ZF9kZWxheTsKKwlyZXQgPSBjcXNwaV9maW5kX3J4X2hpZ2hfc2RyKGZfcGRhdGEsIG1lbSwgJnJ4 aGlnaCwgcnhsb3cucngpOworCWlmIChyZXQpCisJCWdvdG8gY29tcGFyZTsKKworCS8qIENhbGN1 bGF0ZSBzZWNvbmQgd2luZG93IG1pZHBvaW50ICovCisKKwkvKgorCSAqICAgICAgICAgICAgICBy eAorCSAqICAgICAgICAgIDEyNyBeCisJICogICAgICAgICAgICAgIHwgICAgICAgIHwtLS0tLS0t LXdpbmRvdzItLS0tLS0tLS18CisJICogICAgICAgICAgICAgIHwgICAgICAgIHx4eHh4eHh4eHh4 eHh4eHh4eHh4eHh4eHh8CisJICogICAgICAgICAgICAgIHwgICAgICAgIHx4eHh4eHh4eHh4eHh4 eHh4eHh4eHh4eHh8CisJICogICAgICAgICAgICAgIHwgICAgICAgIHx4eHh4eHh4eHh4eCAqIHh4 eHh4eHh4eHh8CisJICogICAgICAgICAgICAgIHwgICAgICAgIHx4eHh4eHh4eHh4eHh4eHh4eHh4 eHh4eHh8CisJICogICAgICAgICAgICAgIHwgICAgICAgIHx4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 eHh8CisJICogICAgICAgICAgICAgIHwgICAgICAgIHJ4bG93ICAgICAgICBeICAgICAgICAgICBy eGhpZ2gKKwkgKiAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0t LS0tLS0tLS0+IHR4CisJICogICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICB8ICAg ICAgdHggZml4ZWQgYXQgMTI3CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93 Mi8yCisJICogICAgICAgICAgICAgIHJlYWRfZGVsYXkgPSBuKzEKKwkgKi8KKworCXdpbmRvdzIg PSByeGhpZ2gucnggLSByeGxvdy5yeDsKKwlzZWNvbmQucnggPSByeGxvdy5yeCArICh3aW5kb3cy IC8gMik7CisJc2Vjb25kLnJlYWRfZGVsYXkgPSByeGxvdy5yZWFkX2RlbGF5OworCisJZGV2X2Ri ZyhkZXYsICJTZWNvbmQgdHVuaW5nIHBvaW50OiBSWDogJWQgVFg6ICVkIFJEOiAlZFxuIiwgc2Vj b25kLnJ4LAorCQlzZWNvbmQudHgsIHNlY29uZC5yZWFkX2RlbGF5KTsKKwlyZXQgPSBjcXNwaV9w aHlfYXBwbHlfc2V0dGluZyhmX3BkYXRhLCAmc2Vjb25kKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0g Y3FzcGlfcGh5X2NoZWNrX3BhdHRlcm4oZl9wZGF0YSwgbWVtKTsKKworCWlmIChyZXQgfHwgc2Vj b25kLnJlYWRfZGVsYXkgPiBDUVNQSV9QSFlfTUFYX1JEKQorCQl3aW5kb3cyID0gMDsKKworCS8q IFdpbmRvdyBjb21wYXJpc29uOiBDaG9vc2UgbGFyZ2VyIHdpbmRvdyBmb3IgYmV0dGVyIG1hcmdp biAqLworCitjb21wYXJlOgorCWNxc3BpX3BoeV9yZXNldF9zZXR0aW5nKCZmaW5hbCk7CisJaWYg KHdpbmRvdzIgPiB3aW5kb3cxKSB7CisJCWZpbmFsLnJ4ID0gc2Vjb25kLnJ4OworCQlmaW5hbC5y ZWFkX2RlbGF5ID0gc2Vjb25kLnJlYWRfZGVsYXk7CisJfSBlbHNlIHsKKwkJZmluYWwucnggPSBm aXJzdC5yeDsKKwkJZmluYWwucmVhZF9kZWxheSA9IGZpcnN0LnJlYWRfZGVsYXk7CisJfQorCisJ LyogQXBwbHkgYW5kIHZlcmlmeSBmaW5hbCB0dW5pbmcgcG9pbnQgKi8KKworCWRldl9kYmcoZGV2 LCAiRmluYWwgdHVuaW5nIHBvaW50OiBSWDogJWQgVFg6ICVkIFJEOiAlZFxuIiwgZmluYWwucngs CisJCWZpbmFsLnR4LCBmaW5hbC5yZWFkX2RlbGF5KTsKKwlyZXQgPSBjcXNwaV9waHlfYXBwbHlf c2V0dGluZyhmX3BkYXRhLCAmZmluYWwpOworCWlmICghcmV0KQorCQlyZXQgPSBjcXNwaV9waHlf Y2hlY2tfcGF0dGVybihmX3BkYXRhLCBtZW0pOworCisJaWYgKHJldCkgeworCQlyZXQgPSAtRUlO VkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlmX3BkYXRhLT5waHlfc2V0dGluZy5yZWFkX2RlbGF5 ID0gZmluYWwucmVhZF9kZWxheTsKKwlmX3BkYXRhLT5waHlfc2V0dGluZy5yeCA9IGZpbmFsLnJ4 OworCWZfcGRhdGEtPnBoeV9zZXR0aW5nLnR4ID0gZmluYWwudHg7CisKK291dDoKKwlpZiAocmV0 KQorCQlmX3BkYXRhLT51c2VfdHVuZWRfcGh5ID0gZmFsc2U7CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW50IGNxc3BpX2FtNjU0X29zcGlfZXhlY3V0ZV90dW5pbmcoc3RydWN0IHNwaV9t ZW0gKm1lbSwKKwkJCQkJICAgc3RydWN0IHNwaV9tZW1fb3AgKnJlYWRfb3AsCisJCQkJCSAgIHN0 cnVjdCBzcGlfbWVtX29wICp3cml0ZV9vcCkKK3sKKwlzdHJ1Y3QgY3FzcGlfc3QgKmNxc3BpID0K KwkJc3BpX2NvbnRyb2xsZXJfZ2V0X2RldmRhdGEobWVtLT5zcGktPmNvbnRyb2xsZXIpOworCXN0 cnVjdCBjcXNwaV9mbGFzaF9wZGF0YSAqZl9wZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm Y3FzcGktPnBkZXYtPmRldjsKKwlpbnQgcmV0OworCisJZl9wZGF0YSA9ICZjcXNwaS0+Zl9wZGF0 YVtzcGlfZ2V0X2NoaXBzZWxlY3QobWVtLT5zcGksIDApXTsKKworCS8qCisJICogc3BpLW1heC1w b3N0LWNvbmZpZy1mcmVxdWVuY3ktaHogbXVzdCBiZSBwcmVzZW50IGZvciBQSFkgdHVuaW5nLgor CSAqIElmIGFic2VudCwgcG9zdF9jb25maWdfbWF4X3NwZWVkX2h6IGlzIHplcm8gYW5kIHRoZXJl IGlzIG5vCisJICogY2FsaWJyYXRpb24gdGFyZ2V0LCBzbyBza2lwIHR1bmluZyBncmFjZWZ1bGx5 LgorCSAqLworCWlmICghbWVtLT5zcGktPnBvc3RfY29uZmlnX21heF9zcGVlZF9oeikgeworCQlk ZXZfZGJnKGRldiwKKwkJCSJObyBwb3N0LWNvbmZpZyBmcmVxdWVuY3kgY29uZmlndXJlZCwgc2tp cHBpbmcgdHVuaW5nXG4iKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCWlmICh3cml0 ZV9vcCkgeworCQkvKgorCQkgKiBGb3IgTkFORDogd3JpdGUgdGhlIGNhbGlicmF0aW9uIHBhdHRl cm4gdG8gdGhlIHBhZ2UgY2FjaGUuCisJCSAqIFRoZSB3cml0ZSBvcCBydW5zIGF0IHRoZSBjb25z ZXJ2YXRpdmUgYmFzZSBzcGVlZCAoc3BpLT5tYXhfc3BlZWRfaHopCisJCSAqIHNvIHRoZSB3cml0 ZSBpdHNlbGYgaXMgcmVsaWFibGUgYmVmb3JlIFBIWSBjYWxpYnJhdGlvbi4KKwkJICovCisJCXJl dCA9IGNxc3BpX3dyaXRlX3BhdHRlcm5fdG9fY2FjaGUoZl9wZGF0YSwgbWVtLCB3cml0ZV9vcCk7 CisJCWlmIChyZXQpIHsKKwkJCWRldl93YXJuKGRldiwKKwkJCQkgImZhaWxlZCB0byB3cml0ZSBw YXR0ZXJuIHRvIGNhY2hlOiAlZCwgc2tpcHBpbmcgdHVuaW5nXG4iLAorCQkJCSByZXQpOworCQkJ Z290byBvdXQ7CisJCX0KKworCQlmX3BkYXRhLT5waHlfd3JpdGVfb3AgPSAqd3JpdGVfb3A7CisJ fSBlbHNlIHsKKwkJaWYgKCFmX3BkYXRhLT5waHlfcGF0dGVybl9wYXJ0aXRpb25fb2Zmc2V0KSB7 CisJCQlkZXZfd2FybihkZXYsICJwYXR0ZXJuIHBhcnRpdGlvbiBub3QgZm91bmQsIHNraXBwaW5n IHR1bmluZ1xuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlyZWFkX29wLT5hZGRyLnZhbCA9IGZf cGRhdGEtPnBoeV9wYXR0ZXJuX3BhcnRpdGlvbl9vZmZzZXQ7CisJfQorCisJLyoKKwkgKiBWZXJp ZnkgdGhlIGNhbGlicmF0aW9uIHBhdHRlcm4gZXhpc3RzIHVzaW5nIHRoZSBjb25zZXJ2YXRpdmUg YmFzZQorCSAqIHNwZWVkLiAgQXQgaGlnaCBjbG9jayByYXRlcyB0aGUgRExMIGlzIG5vdCB5ZXQg dHJhaW5lZCwgc28gRFRSCisJICogZGF0YSBjYXB0dXJlIGlzIHVucmVsaWFibGUgYW5kIHRoZSBy ZWFkIHdvdWxkIHJldHVybiBnYXJiYWdlLgorCSAqIFNldHRpbmcgbWF4X2ZyZXEgdG8gMCBjYXVz ZXMgc3BpX21lbV9hZGp1c3Rfb3BfZnJlcSgpIHRvIGNhcCB0aGUKKwkgKiByZWFkIHRvIG1heF9z cGVlZF9oeiAodGhlIGJhc2UgcmF0ZSksIHdlbGwgd2l0aGluIHJlbGlhYmxlIERUUgorCSAqIG1h cmdpbnMuICBtYXhfZnJlcSBpcyBzZXQgdG8gcG9zdF9jb25maWdfbWF4X3NwZWVkX2h6IGJlbG93 IGFmdGVyCisJICogdGhlIHBhdHRlcm4gaXMgY29uZmlybWVkLCBzbyB0aGUgdHVuaW5nLWxvb3Ag cmVhZHMgcnVuIGF0IGZ1bGwgcmF0ZS4KKwkgKi8KKwlmX3BkYXRhLT5waHlfcmVhZF9vcCA9ICpy ZWFkX29wOworCWZfcGRhdGEtPnBoeV9yZWFkX29wLm1heF9mcmVxID0gMDsKKworCXJldCA9IGNx c3BpX3BoeV9jaGVja19wYXR0ZXJuKGZfcGRhdGEsIG1lbSk7CisJaWYgKHJldCkgeworCQlkZXZf ZXJyKGRldiwgInBhdHRlcm4gbm90IGZvdW5kOiAlZCwgc2tpcHBpbmcgdHVuaW5nXG4iLCByZXQp OworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFBhdHRlcm4gY29uZmlybWVkLiAgU2V0IHBo eV9yZWFkX29wLm1heF9mcmVxIHRvCisJICogcG9zdF9jb25maWdfbWF4X3NwZWVkX2h6IHNvIHRo YXQgdHVuaW5nLWxvb3AgcmVhZHMgYnlwYXNzIHRoZSBiYXNlCisJICogZnJlcXVlbmN5IGNhcCBp biBzcGlfbWVtX2FkanVzdF9vcF9mcmVxKCkgYW5kIHJ1biBhdCB0aGUgZnVsbAorCSAqIGNhbGli cmF0aW9uIHJhdGUuCisJICovCisJZl9wZGF0YS0+cGh5X3JlYWRfb3AubWF4X2ZyZXEgPSBtZW0t PnNwaS0+cG9zdF9jb25maWdfbWF4X3NwZWVkX2h6OworCisJaWYgKHJlYWRfb3AtPmNtZC5kdHIg fHwgcmVhZF9vcC0+YWRkci5kdHIgfHwgcmVhZF9vcC0+ZHVtbXkuZHRyIHx8CisJICAgIHJlYWRf b3AtPmRhdGEuZHRyKSB7CisJCWZfcGRhdGEtPnVzZV9kcXMgPSB0cnVlOworCQljcXNwaV9waHlf cHJlX2NvbmZpZyhjcXNwaSwgZl9wZGF0YSwgZmFsc2UpOworCQlyZXQgPSBjcXNwaV9waHlfdHVu aW5nX2RkcihmX3BkYXRhLCBtZW0pOworCX0gZWxzZSB7CisJCWZfcGRhdGEtPnVzZV9kcXMgPSBm YWxzZTsKKwkJY3FzcGlfcGh5X3ByZV9jb25maWcoY3FzcGksIGZfcGRhdGEsIHRydWUpOworCQly ZXQgPSBjcXNwaV9waHlfdHVuaW5nX3NkcihmX3BkYXRhLCBtZW0pOworCX0KKworCWlmIChyZXQp CisJCWRldl93YXJuKGRldiwgInR1bmluZyBmYWlsZWQ6ICVkXG4iLCByZXQpOworCisJY3FzcGlf cGh5X3Bvc3RfY29uZmlnKGNxc3BpLCBmX3BkYXRhLT5yZWFkX2RlbGF5KTsKKworb3V0OgorCS8q CisJICogT24gc3VjY2Vzcywgd3JpdGUgYmFjayB0aGUgdmFsaWRhdGVkIG1heGltdW0gc3BlZWQg aW50byB0aGUgY2FsbGVyJ3MKKwkgKiBvcCB0ZW1wbGF0ZXMgc28gdGhhdCB0aG9zZSBzcGVjaWZp YyBvcHMgYnlwYXNzIHRoZSBjYXAgaW4gc3Vic2VxdWVudAorCSAqIGV4ZWNfb3AgY2FsbHMuCisJ ICovCisJaWYgKCFyZXQpIHsKKwkJcmVhZF9vcC0+bWF4X2ZyZXEgPSBtZW0tPnNwaS0+cG9zdF9j b25maWdfbWF4X3NwZWVkX2h6OworCQlpZiAod3JpdGVfb3ApCisJCQl3cml0ZV9vcC0+bWF4X2Zy ZXEgPSBtZW0tPnNwaS0+cG9zdF9jb25maWdfbWF4X3NwZWVkX2h6OworCX0KKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBpbnQgY3FzcGlfbWVtX29wX2V4ZWN1dGVfdHVuaW5nKHN0cnVjdCBz cGlfbWVtICptZW0sCisJCQkJICAgICAgIHN0cnVjdCBzcGlfbWVtX29wICpyZWFkX29wLAorCQkJ CSAgICAgICBzdHJ1Y3Qgc3BpX21lbV9vcCAqd3JpdGVfb3ApCit7CisJc3RydWN0IGNxc3BpX3N0 ICpjcXNwaSA9CisJCXNwaV9jb250cm9sbGVyX2dldF9kZXZkYXRhKG1lbS0+c3BpLT5jb250cm9s bGVyKTsKKworCWlmICghY3FzcGktPmRkYXRhLT5leGVjdXRlX3R1bmluZykKKwkJcmV0dXJuIC1F T1BOT1RTVVBQOworCisJcmV0dXJuIGNxc3BpLT5kZGF0YS0+ZXhlY3V0ZV90dW5pbmcobWVtLCBy ZWFkX29wLCB3cml0ZV9vcCk7Cit9CisKIHN0YXRpYyBpbnQgY3FzcGlfb2ZfZ2V0X2ZsYXNoX3Bk YXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkJICAgIHN0cnVjdCBjcXNwaV9m bGFzaF9wZGF0YSAqZl9wZGF0YSwKIAkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsK KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcnRfbnA7CisKIAlpZiAob2ZfcHJvcGVydHlfcmVhZF91 MzIobnAsICJjZG5zLHJlYWQtZGVsYXkiLCAmZl9wZGF0YS0+cmVhZF9kZWxheSkpIHsKIAkJZGV2 X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgZGV0ZXJtaW5lIHJlYWQtZGVsYXlcbiIpOwogCQly ZXR1cm4gLUVOWElPOwpAQCAtMTU4OCw5ICszMzA3LDExIEBAIHN0YXRpYyBpbnQgY3FzcGlfb2Zf Z2V0X2ZsYXNoX3BkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCXJldHVybiAt RU5YSU87CiAJfQogCi0JaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAic3BpLW1heC1mcmVx dWVuY3kiLCAmZl9wZGF0YS0+Y2xrX3JhdGUpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNv dWxkbid0IGRldGVybWluZSBzcGktbWF4LWZyZXF1ZW5jeVxuIik7Ci0JCXJldHVybiAtRU5YSU87 CisJcGFydF9ucCA9IG9mX3BhcnNlX3BoYW5kbGUobnAsICJzcGktcGh5LXBhdHRlcm4tcGFydGl0 aW9uIiwgMCk7CisJaWYgKHBhcnRfbnApIHsKKwkJb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgo cGFydF9ucCwgInJlZyIsIDAsCisJCQkJCSAgICZmX3BkYXRhLT5waHlfcGF0dGVybl9wYXJ0aXRp b25fb2Zmc2V0KTsKKwkJb2Zfbm9kZV9wdXQocGFydF9ucCk7CiAJfQogCiAJcmV0dXJuIDA7CkBA IC0xNzQwLDYgKzM0NjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9jb250cm9sbGVyX21l bV9vcHMgY3FzcGlfbWVtX29wcyA9IHsKIAkuZXhlY19vcCA9IGNxc3BpX2V4ZWNfbWVtX29wLAog CS5nZXRfbmFtZSA9IGNxc3BpX2dldF9uYW1lLAogCS5zdXBwb3J0c19vcCA9IGNxc3BpX3N1cHBv cnRzX21lbV9vcCwKKwkuZXhlY3V0ZV90dW5pbmcgPSBjcXNwaV9tZW1fb3BfZXhlY3V0ZV90dW5p bmcsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9jb250cm9sbGVyX21lbV9jYXBzIGNx c3BpX21lbV9jYXBzID0gewpAQCAtMjEwOCw2ICszODMwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVj dCBjcXNwaV9kcml2ZXJfcGxhdGRhdGEgazJnX3FzcGkgPSB7CiBzdGF0aWMgY29uc3Qgc3RydWN0 IGNxc3BpX2RyaXZlcl9wbGF0ZGF0YSBhbTY1NF9vc3BpID0gewogCS5od2NhcHNfbWFzayA9IENR U1BJX1NVUFBPUlRTX09DVEFMIHwgQ1FTUElfU1VQUE9SVFNfUVVBRCwKIAkucXVpcmtzID0gQ1FT UElfTkVFRFNfV1JfREVMQVksCisJLmV4ZWN1dGVfdHVuaW5nID0gY3FzcGlfYW02NTRfb3NwaV9l eGVjdXRlX3R1bmluZywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3FzcGlfZHJpdmVyX3Bs YXRkYXRhIGludGVsX2xnbV9xc3BpID0gewotLSAKMi4zNC4xCgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4IE1URCBkaXNjdXNzaW9u IG1haWxpbmcgbGlzdApodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LW10ZC8K