From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kenneth Feng Subject: [PATCH] drm/amd/powerplay: bug fix for pcie parameters override Date: Fri, 11 Oct 2019 18:09:08 +0800 Message-ID: <1570788548-7106-1-git-send-email-kenneth.feng@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Kenneth Feng QnVnIGZpeCBmb3IgcGNpZSBwYXJhbWVyZXJzIG92ZXJyaWRlIG9uIHN3c211LgpCZWxvdyBpcyBh IHNjZW5hcmlvIHRvIGhhdmUgdGhpcyBwcm9ibGVtLgpwcHRhYmxlIGRlZmluaXRpb24gb24gcGNp ZSBkcG06CjAgLT4gcGNpZSBnZW4gc3BlZWQ6MSwgcGNpZSBsYW5lczogKjE2CjEgLT4gcGNpZSBn ZW4gc3BlZWQ6NCwgcGNpZSBsYW5lczogKjE2ClRoZW4gaWYgd2UgaGF2ZSBhIHN5c3RlbSBvbmx5 IGhhdmUgdGhlIGNhcGJpbGl0eToKcGNpZSBnZW4gc3BlZWQ6IDMsIHBjaWUgbGFuZXM6ICo4LAp3 ZSB3aWxsIG92ZXJyaWRlIGRwbSAxIHRvIHBjaWUgZ2VuIHNwZWVkIDMsIHBjaWUgbGFuZXMgKjgu CkJ1dCB0aGUgY29kZSBza2lwcyB0aGUgZHBtIDAgY29uZmlndXJhdGlvbi4KU28gdGhlIHJlYWwg cGNpZSBkcG0gcGFyYW1ldGVycyBhcmU6CjAgLT4gcGNpZSBnZW4gc3BlZWQ6MSwgcGNpZSBsYW5l czogKjE2CjEgLT4gcGNpZSBnZW4gc3BlZWQ6MywgcGNpZSBsYW5lczogKjgKVGhlbiB0aGUgd3Jv bmcgcGNpZSBsYW5lcyB3aWxsIGJlIHRvZ2dsZWQuCgpTaWduZWQtb2ZmLWJ5OiBLZW5uZXRoIEZl bmcgPGtlbm5ldGguZmVuZ0BhbWQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJw bGF5L2FtZGdwdV9zbXUuYyAgICAgIHwgICA0NCAtCiBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2Vy cGxheS9pbmMvYW1kZ3B1X3NtdS5oICB8ICAgIDggKwogZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dl cnBsYXkvbmF2aTEwX3BwdC5jICAgICAgfCAgIDIzICsKIGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93 ZXJwbGF5L3NtdV92MTFfMC5jICAgICAgIHwgICA0NCArCiBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bv d2VycGxheS9zbXVfdjExXzAuY19taTEwMCB8IDE0MDQgKysrKysrKysrKysrKysrKysrKysrKysK IGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L3ZlZ2EyMF9wcHQuYyAgICAgIHwgICAyNSAr LQogNiBmaWxlcyBjaGFuZ2VkLCAxNTAzIGluc2VydGlvbnMoKyksIDQ1IGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L3NtdV92MTFf MC5jX21pMTAwCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvYW1k Z3B1X3NtdS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvYW1kZ3B1X3NtdS5jCmlu ZGV4IGM5MjY2ZWEuLmRlNTRkYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93 ZXJwbGF5L2FtZGdwdV9zbXUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9h bWRncHVfc211LmMKQEAgLTk0NSw1MCArOTQ1LDYgQEAgc3RhdGljIGludCBzbXVfZmluaV9mYl9h bGxvY2F0aW9ucyhzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSkKIAlyZXR1cm4gMDsKIH0KIAotc3Rh dGljIGludCBzbXVfb3ZlcnJpZGVfcGNpZV9wYXJhbWV0ZXJzKHN0cnVjdCBzbXVfY29udGV4dCAq c211KQotewotCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gc211LT5hZGV2OwotCXVpbnQz Ml90IHBjaWVfZ2VuID0gMCwgcGNpZV93aWR0aCA9IDAsIHNtdV9wY2llX2FyZzsKLQlpbnQgcmV0 OwotCi0JaWYgKGFkZXYtPmZsYWdzICYgQU1EX0lTX0FQVSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAo YWRldi0+cG0ucGNpZV9nZW5fbWFzayAmIENBSUxfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfR0VO NCkKLQkJcGNpZV9nZW4gPSAzOwotCWVsc2UgaWYgKGFkZXYtPnBtLnBjaWVfZ2VuX21hc2sgJiBD QUlMX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX0dFTjMpCi0JCXBjaWVfZ2VuID0gMjsKLQllbHNl IGlmIChhZGV2LT5wbS5wY2llX2dlbl9tYXNrICYgQ0FJTF9QQ0lFX0xJTktfU1BFRURfU1VQUE9S VF9HRU4yKQotCQlwY2llX2dlbiA9IDE7Ci0JZWxzZSBpZiAoYWRldi0+cG0ucGNpZV9nZW5fbWFz ayAmIENBSUxfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfR0VOMSkKLQkJcGNpZV9nZW4gPSAwOwot Ci0JLyogQml0IDMxOjE2OiBMQ0xLIERQTSBsZXZlbC4gMCBpcyBEUE0wLCBhbmQgMSBpcyBEUE0x Ci0JICogQml0IDE1Ojg6ICBQQ0lFIEdFTiwgMCB0byAzIGNvcnJlc3BvbmRzIHRvIEdFTjEgdG8g R0VONAotCSAqIEJpdCA3OjA6ICAgUENJRSBsYW5lIHdpZHRoLCAxIHRvIDcgY29ycmVzcG9uZHMg aXMgeDEgdG8geDMyCi0JICovCi0JaWYgKGFkZXYtPnBtLnBjaWVfbWx3X21hc2sgJiBDQUlMX1BD SUVfTElOS19XSURUSF9TVVBQT1JUX1gxNikKLQkJcGNpZV93aWR0aCA9IDY7Ci0JZWxzZSBpZiAo YWRldi0+cG0ucGNpZV9tbHdfbWFzayAmIENBSUxfUENJRV9MSU5LX1dJRFRIX1NVUFBPUlRfWDEy KQotCQlwY2llX3dpZHRoID0gNTsKLQllbHNlIGlmIChhZGV2LT5wbS5wY2llX21sd19tYXNrICYg Q0FJTF9QQ0lFX0xJTktfV0lEVEhfU1VQUE9SVF9YOCkKLQkJcGNpZV93aWR0aCA9IDQ7Ci0JZWxz ZSBpZiAoYWRldi0+cG0ucGNpZV9tbHdfbWFzayAmIENBSUxfUENJRV9MSU5LX1dJRFRIX1NVUFBP UlRfWDQpCi0JCXBjaWVfd2lkdGggPSAzOwotCWVsc2UgaWYgKGFkZXYtPnBtLnBjaWVfbWx3X21h c2sgJiBDQUlMX1BDSUVfTElOS19XSURUSF9TVVBQT1JUX1gyKQotCQlwY2llX3dpZHRoID0gMjsK LQllbHNlIGlmIChhZGV2LT5wbS5wY2llX21sd19tYXNrICYgQ0FJTF9QQ0lFX0xJTktfV0lEVEhf U1VQUE9SVF9YMSkKLQkJcGNpZV93aWR0aCA9IDE7Ci0KLQlzbXVfcGNpZV9hcmcgPSAoMSA8PCAx NikgfCAocGNpZV9nZW4gPDwgOCkgfCBwY2llX3dpZHRoOwotCXJldCA9IHNtdV9zZW5kX3NtY19t c2dfd2l0aF9wYXJhbShzbXUsCi0JCQkJCSAgU01VX01TR19PdmVycmlkZVBjaWVQYXJhbWV0ZXJz LAotCQkJCQkgIHNtdV9wY2llX2FyZyk7Ci0JaWYgKHJldCkKLQkJcHJfZXJyKCJbJXNdIEF0dGVt cHQgdG8gb3ZlcnJpZGUgcGNpZSBwYXJhbXMgZmFpbGVkIVxuIiwgX19mdW5jX18pOwotCXJldHVy biByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgc211X3NtY190YWJsZV9od19pbml0KHN0cnVjdCBzbXVf Y29udGV4dCAqc211LAogCQkJCSBib29sIGluaXRpYWxpemUpCiB7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvYW1kZ3B1X3NtdS5oIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9wb3dlcnBsYXkvaW5jL2FtZGdwdV9zbXUuaAppbmRleCBjY2Y3MTFjLi44MDlkZTBk IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvYW1kZ3B1X3Nt dS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2luYy9hbWRncHVfc211LmgK QEAgLTQ2OCw2ICs0NjgsNyBAQCBzdHJ1Y3QgcHB0YWJsZV9mdW5jcyB7CiAJaW50ICgqZ2V0X3Bv d2VyX2xpbWl0KShzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSwgdWludDMyX3QgKmxpbWl0LCBib29s IGFzaWNfZGVmYXVsdCk7CiAJaW50ICgqZ2V0X2RwbV9jbGtfbGltaXRlZCkoc3RydWN0IHNtdV9j b250ZXh0ICpzbXUsIGVudW0gc211X2Nsa190eXBlIGNsa190eXBlLAogCQkJCSAgIHVpbnQzMl90 IGRwbV9sZXZlbCwgdWludDMyX3QgKmZyZXEpOworCWludCAoKnVwZGF0ZV9wY2llX3BhcmFtZXRl cnMpKHN0cnVjdCBzbXVfY29udGV4dCAqc211LCB1aW50MzJfdCBwY2llX2dlbl9jYXAsIHVpbnQz Ml90IHBjaWVfd2lkdGhfY2FwKTsKIH07CiAKIHN0cnVjdCBzbXVfZnVuY3MKQEAgLTU1MCw2ICs1 NTEsNyBAQCBzdHJ1Y3Qgc211X2Z1bmNzCiAJaW50ICgqbW9kZTJfcmVzZXQpKHN0cnVjdCBzbXVf Y29udGV4dCAqc211KTsKIAlpbnQgKCpnZXRfZHBtX3VsdGltYXRlX2ZyZXEpKHN0cnVjdCBzbXVf Y29udGV4dCAqc211LCBlbnVtIHNtdV9jbGtfdHlwZSBjbGtfdHlwZSwgdWludDMyX3QgKm1pbiwg dWludDMyX3QgKm1heCk7CiAJaW50ICgqc2V0X3NvZnRfZnJlcV9saW1pdGVkX3JhbmdlKShzdHJ1 Y3Qgc211X2NvbnRleHQgKnNtdSwgZW51bSBzbXVfY2xrX3R5cGUgY2xrX3R5cGUsIHVpbnQzMl90 IG1pbiwgdWludDMyX3QgbWF4KTsKKwlpbnQgKCpvdmVycmlkZV9wY2llX3BhcmFtZXRlcnMpKHN0 cnVjdCBzbXVfY29udGV4dCAqc211KTsKIH07CiAKICNkZWZpbmUgc211X2luaXRfbWljcm9jb2Rl KHNtdSkgXApAQCAtNzgyLDYgKzc4NCwxMiBAQCBzdHJ1Y3Qgc211X2Z1bmNzCiAjZGVmaW5lIHNt dV9zZXRfc29mdF9mcmVxX2xpbWl0ZWRfcmFuZ2Uoc211LCBjbGtfdHlwZSwgbWluLCBtYXgpIFwK IAkJKChzbXUpLT5mdW5jcy0+c2V0X3NvZnRfZnJlcV9saW1pdGVkX3JhbmdlID8gKHNtdSktPmZ1 bmNzLT5zZXRfc29mdF9mcmVxX2xpbWl0ZWRfcmFuZ2UoKHNtdSksIChjbGtfdHlwZSksIChtaW4p LCAobWF4KSkgOiAtRUlOVkFMKQogCisjZGVmaW5lIHNtdV9vdmVycmlkZV9wY2llX3BhcmFtZXRl cnMoc211KSBcCisJCSgoc211KS0+ZnVuY3MtPm92ZXJyaWRlX3BjaWVfcGFyYW1ldGVycyA/IChz bXUpLT5mdW5jcy0+b3ZlcnJpZGVfcGNpZV9wYXJhbWV0ZXJzKChzbXUpKSA6IDApCisKKyNkZWZp bmUgc211X3VwZGF0ZV9wY2llX3BhcmFtZXRlcnMoc211LCBwY2llX2dlbl9jYXAsIHBjaWVfd2lk dGhfY2FwKSBcCisJCSgoc211KS0+cHB0X2Z1bmNzLT51cGRhdGVfcGNpZV9wYXJhbWV0ZXJzID8g KHNtdSktPnBwdF9mdW5jcy0+dXBkYXRlX3BjaWVfcGFyYW1ldGVycygoc211KSwgKHBjaWVfZ2Vu X2NhcCksIChwY2llX3dpZHRoX2NhcCkpIDogMCkKKwogZXh0ZXJuIGludCBzbXVfZ2V0X2F0b21f ZGF0YV90YWJsZShzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSwgdWludDMyX3QgdGFibGUsCiAJCQkJ ICAgdWludDE2X3QgKnNpemUsIHVpbnQ4X3QgKmZyZXYsIHVpbnQ4X3QgKmNyZXYsCiAJCQkJICAg dWludDhfdCAqKmFkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBs YXkvbmF2aTEwX3BwdC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvbmF2aTEwX3Bw dC5jCmluZGV4IGE1ODNjZjguLmEyZjMzY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvcG93ZXJwbGF5L25hdmkxMF9wcHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2Vy cGxheS9uYXZpMTBfcHB0LmMKQEAgLTE1OTIsNiArMTU5MiwyOCBAQCBzdGF0aWMgaW50IG5hdmkx MF9nZXRfcG93ZXJfbGltaXQoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsCiAJcmV0dXJuIDA7CiB9 CiAKK3N0YXRpYyBpbnQgbmF2aTEwX3VwZGF0ZV9wY2llX3BhcmFtZXRlcnMoc3RydWN0IHNtdV9j b250ZXh0ICpzbXUsCisJCQkJICAgICB1aW50MzJfdCBwY2llX2dlbl9jYXAsCisJCQkJICAgICB1 aW50MzJfdCBwY2llX3dpZHRoX2NhcCkKK3sKKwlQUFRhYmxlX3QgKnBwdGFibGUgPSBzbXUtPnNt dV90YWJsZS5kcml2ZXJfcHB0YWJsZTsKKwlpbnQgcmV0LCBpOworCXVpbnQzMl90IHNtdV9wY2ll X2FyZzsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fTElOS19MRVZFTFM7IGkrKykgeworCQlzbXVf cGNpZV9hcmcgPSAoaSA8PCAxNikgfAorCQkJKChwcHRhYmxlLT5QY2llR2VuU3BlZWRbaV0gPD0g cGNpZV9nZW5fY2FwKSA/IChwcHRhYmxlLT5QY2llR2VuU3BlZWRbaV0gPDwgOCkgOgorCQkJCShw Y2llX2dlbl9jYXAgPDwgOCkpIHwgKChwcHRhYmxlLT5QY2llTGFuZUNvdW50W2ldIDw9IHBjaWVf d2lkdGhfY2FwKSA/CisJCQkJCXBwdGFibGUtPlBjaWVMYW5lQ291bnRbaV0gOiBwY2llX3dpZHRo X2NhcCk7CisJCXJldCA9IHNtdV9zZW5kX3NtY19tc2dfd2l0aF9wYXJhbShzbXUsCisJCQkJCSAg U01VX01TR19PdmVycmlkZVBjaWVQYXJhbWV0ZXJzLAorCQkJCQkgIHNtdV9wY2llX2FyZyk7CisJ fQorCisJcmV0dXJuIHJldDsKK30KKworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBwdGFibGVfZnVu Y3MgbmF2aTEwX3BwdF9mdW5jcyA9IHsKIAkudGFibGVzX2luaXQgPSBuYXZpMTBfdGFibGVzX2lu aXQsCiAJLmFsbG9jX2RwbV9jb250ZXh0ID0gbmF2aTEwX2FsbG9jYXRlX2RwbV9jb250ZXh0LApA QCAtMTYzMCw2ICsxNjUyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwcHRhYmxlX2Z1bmNzIG5h dmkxMF9wcHRfZnVuY3MgPSB7CiAJLmdldF90aGVybWFsX3RlbXBlcmF0dXJlX3JhbmdlID0gbmF2 aTEwX2dldF90aGVybWFsX3RlbXBlcmF0dXJlX3JhbmdlLAogCS5kaXNwbGF5X2Rpc2FibGVfbWVt b3J5X2Nsb2NrX3N3aXRjaCA9IG5hdmkxMF9kaXNwbGF5X2Rpc2FibGVfbWVtb3J5X2Nsb2NrX3N3 aXRjaCwKIAkuZ2V0X3Bvd2VyX2xpbWl0ID0gbmF2aTEwX2dldF9wb3dlcl9saW1pdCwKKwkudXBk YXRlX3BjaWVfcGFyYW1ldGVycyA9IG5hdmkxMF91cGRhdGVfcGNpZV9wYXJhbWV0ZXJzLAogfTsK IAogdm9pZCBuYXZpMTBfc2V0X3BwdF9mdW5jcyhzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSkKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L3NtdV92MTFfMC5jIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvc211X3YxMV8wLmMKaW5kZXggYzllOTBkNS4uYTgx MmFlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvc211X3YxMV8w LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvc211X3YxMV8wLmMKQEAgLTM1 LDYgKzM1LDcgQEAKICNpbmNsdWRlICJ2ZWdhMjBfcHB0LmgiCiAjaW5jbHVkZSAiYXJjdHVydXNf cHB0LmgiCiAjaW5jbHVkZSAibmF2aTEwX3BwdC5oIgorI2luY2x1ZGUgImFtZF9wY2llLmgiCiAK ICNpbmNsdWRlICJhc2ljX3JlZy90aG0vdGhtXzExXzBfMl9vZmZzZXQuaCIKICNpbmNsdWRlICJh c2ljX3JlZy90aG0vdGhtXzExXzBfMl9zaF9tYXNrLmgiCkBAIC0xNzkyLDYgKzE3OTMsNDggQEAg c3RhdGljIGludCBzbXVfdjExXzBfc2V0X3NvZnRfZnJlcV9saW1pdGVkX3JhbmdlKHN0cnVjdCBz bXVfY29udGV4dCAqc211LCBlbnVtIHMKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHNt dV92MTFfMF9vdmVycmlkZV9wY2llX3BhcmFtZXRlcnMoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUp Cit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBzbXUtPmFkZXY7CisJdWludDMyX3Qg cGNpZV9nZW4gPSAwLCBwY2llX3dpZHRoID0gMDsKKwlpbnQgcmV0OworCisJaWYgKGFkZXYtPnBt LnBjaWVfZ2VuX21hc2sgJiBDQUlMX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX0dFTjQpCisJCXBj aWVfZ2VuID0gMzsKKwllbHNlIGlmIChhZGV2LT5wbS5wY2llX2dlbl9tYXNrICYgQ0FJTF9QQ0lF X0xJTktfU1BFRURfU1VQUE9SVF9HRU4zKQorCQlwY2llX2dlbiA9IDI7CisJZWxzZSBpZiAoYWRl di0+cG0ucGNpZV9nZW5fbWFzayAmIENBSUxfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfR0VOMikK KwkJcGNpZV9nZW4gPSAxOworCWVsc2UgaWYgKGFkZXYtPnBtLnBjaWVfZ2VuX21hc2sgJiBDQUlM X1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX0dFTjEpCisJCXBjaWVfZ2VuID0gMDsKKworCS8qIEJp dCAzMToxNjogTENMSyBEUE0gbGV2ZWwuIDAgaXMgRFBNMCwgYW5kIDEgaXMgRFBNMQorCSAqIEJp dCAxNTo4OiAgUENJRSBHRU4sIDAgdG8gMyBjb3JyZXNwb25kcyB0byBHRU4xIHRvIEdFTjQKKwkg KiBCaXQgNzowOiAgIFBDSUUgbGFuZSB3aWR0aCwgMSB0byA3IGNvcnJlc3BvbmRzIGlzIHgxIHRv IHgzMgorCSAqLworCWlmIChhZGV2LT5wbS5wY2llX21sd19tYXNrICYgQ0FJTF9QQ0lFX0xJTktf V0lEVEhfU1VQUE9SVF9YMTYpCisJCXBjaWVfd2lkdGggPSA2OworCWVsc2UgaWYgKGFkZXYtPnBt LnBjaWVfbWx3X21hc2sgJiBDQUlMX1BDSUVfTElOS19XSURUSF9TVVBQT1JUX1gxMikKKwkJcGNp ZV93aWR0aCA9IDU7CisJZWxzZSBpZiAoYWRldi0+cG0ucGNpZV9tbHdfbWFzayAmIENBSUxfUENJ RV9MSU5LX1dJRFRIX1NVUFBPUlRfWDgpCisJCXBjaWVfd2lkdGggPSA0OworCWVsc2UgaWYgKGFk ZXYtPnBtLnBjaWVfbWx3X21hc2sgJiBDQUlMX1BDSUVfTElOS19XSURUSF9TVVBQT1JUX1g0KQor CQlwY2llX3dpZHRoID0gMzsKKwllbHNlIGlmIChhZGV2LT5wbS5wY2llX21sd19tYXNrICYgQ0FJ TF9QQ0lFX0xJTktfV0lEVEhfU1VQUE9SVF9YMikKKwkJcGNpZV93aWR0aCA9IDI7CisJZWxzZSBp ZiAoYWRldi0+cG0ucGNpZV9tbHdfbWFzayAmIENBSUxfUENJRV9MSU5LX1dJRFRIX1NVUFBPUlRf WDEpCisJCXBjaWVfd2lkdGggPSAxOworCisJcmV0ID0gc211X3VwZGF0ZV9wY2llX3BhcmFtZXRl cnMoc211LCBwY2llX2dlbiwgcGNpZV93aWR0aCk7CisKKwlpZiAocmV0KQorCQlwcl9lcnIoIlsl c10gQXR0ZW1wdCB0byBvdmVycmlkZSBwY2llIHBhcmFtcyBmYWlsZWQhXG4iLCBfX2Z1bmNfXyk7 CisKKwlyZXR1cm4gcmV0OworCit9CisKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbXVfZnVuY3Mg c211X3YxMV8wX2Z1bmNzID0gewogCS5pbml0X21pY3JvY29kZSA9IHNtdV92MTFfMF9pbml0X21p Y3JvY29kZSwKIAkubG9hZF9taWNyb2NvZGUgPSBzbXVfdjExXzBfbG9hZF9taWNyb2NvZGUsCkBA IC0xODQ0LDYgKzE4ODcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNtdV9mdW5jcyBzbXVfdjEx XzBfZnVuY3MgPSB7CiAJLmJhY29fcmVzZXQgPSBzbXVfdjExXzBfYmFjb19yZXNldCwKIAkuZ2V0 X2RwbV91bHRpbWF0ZV9mcmVxID0gc211X3YxMV8wX2dldF9kcG1fdWx0aW1hdGVfZnJlcSwKIAku c2V0X3NvZnRfZnJlcV9saW1pdGVkX3JhbmdlID0gc211X3YxMV8wX3NldF9zb2Z0X2ZyZXFfbGlt aXRlZF9yYW5nZSwKKwkub3ZlcnJpZGVfcGNpZV9wYXJhbWV0ZXJzID0gc211X3YxMV8wX292ZXJy aWRlX3BjaWVfcGFyYW1ldGVycywKIH07CiAKIHZvaWQgc211X3YxMV8wX3NldF9zbXVfZnVuY3Mo c3RydWN0IHNtdV9jb250ZXh0ICpzbXUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L3Bvd2VycGxheS9zbXVfdjExXzAuY19taTEwMCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJw bGF5L3NtdV92MTFfMC5jX21pMTAwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjJlNzc4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxh eS9zbXVfdjExXzAuY19taTEwMApAQCAtMCwwICsxLDE0MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQg MjAxOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNs dWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29m dHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICog QVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKwor I2luY2x1ZGUgInBwX2RlYnVnLmgiCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNs dWRlICJhbWRncHUuaCIKKyNpbmNsdWRlICJhbWRncHVfc211LmgiCisjaW5jbHVkZSAiYXRvbWZp cm13YXJlLmgiCisjaW5jbHVkZSAiYW1kZ3B1X2F0b21maXJtd2FyZS5oIgorI2luY2x1ZGUgInNt dV92MTFfMC5oIgorI2luY2x1ZGUgInNtdTExX2RyaXZlcl9pZl9hcmN0dXJ1cy5oIgorI2luY2x1 ZGUgInNvYzE1X2NvbW1vbi5oIgorI2luY2x1ZGUgImF0b20uaCIKKyNpbmNsdWRlICJ2ZWdhMjBf cHB0LmgiCisjaW5jbHVkZSAiYXJjdHVydXNfcHB0LmgiCisjaW5jbHVkZSAicHBfdGhlcm1hbC5o IgorCisjaW5jbHVkZSAiYXNpY19yZWcvdGhtL3RobV8xMV8wXzJfb2Zmc2V0LmgiCisjaW5jbHVk ZSAiYXNpY19yZWcvdGhtL3RobV8xMV8wXzJfc2hfbWFzay5oIgorI2luY2x1ZGUgImFzaWNfcmVn L21wL21wXzlfMF9vZmZzZXQuaCIKKyNpbmNsdWRlICJhc2ljX3JlZy9tcC9tcF85XzBfc2hfbWFz ay5oIgorI2luY2x1ZGUgImFzaWNfcmVnL25iaW8vbmJpb183XzRfb2Zmc2V0LmgiCisjaW5jbHVk ZSAiYXNpY19yZWcvc211aW8vc211aW9fOV8wX29mZnNldC5oIgorI2luY2x1ZGUgImFzaWNfcmVn L3NtdWlvL3NtdWlvXzlfMF9zaF9tYXNrLmgiCisKK01PRFVMRV9GSVJNV0FSRSgiYW1kZ3B1L3Zl Z2EyMF9zbWMuYmluIik7CitNT0RVTEVfRklSTVdBUkUoImFtZGdwdS9hcmN0dXJ1c19zbWMuYmlu Iik7CisKKyNkZWZpbmUgU01VMTFfVE9PTF9TSVpFCQkweDE5MDAwCisjZGVmaW5lIFNNVTExX1RI RVJNQUxfTUlOSU1VTV9BTEVSVF9URU1QICAgICAgMAorI2RlZmluZSBTTVUxMV9USEVSTUFMX01B WElNVU1fQUxFUlRfVEVNUCAgICAgIDI1NQorCisjZGVmaW5lIFNNVTExX1RFTVBFUkFUVVJFX1VO SVRTX1BFUl9DRU5USUdSQURFUyAxMDAwCisjZGVmaW5lIFNNVTExX1ZPTFRBR0VfU0NBTEUgNAor CisjZGVmaW5lIFNNQ19EUE1fRkVBVFVSRSAoRkVBVFVSRV9EUE1fUFJFRkVUQ0hFUl9NQVNLIHwg XAorCQkJIEZFQVRVUkVfRFBNX0dGWENMS19NQVNLIHwgXAorCQkJIEZFQVRVUkVfRFBNX1VDTEtf TUFTSyB8IFwKKwkJCSBGRUFUVVJFX0RQTV9TT0NDTEtfTUFTSyB8IFwKKwkJCSBGRUFUVVJFX0RQ TV9NUDBDTEtfTUFTSykKKworc3RhdGljIGludCBzbXVfdjExXzBfc2VuZF9tc2dfd2l0aG91dF93 YWl0aW5nKHN0cnVjdCBzbXVfY29udGV4dCAqc211LAorCQkJCQkgICAgICB1aW50MTZfdCBtc2cp Cit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBzbXUtPmFkZXY7CisJV1JFRzMyX1NP QzE1KE1QMSwgMCwgbW1NUDFfU01OX0MyUE1TR182NiwgbXNnKTsKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBzbXVfdjExXzBfcmVhZF9hcmcoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsIHVp bnQzMl90ICphcmcpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBzbXUtPmFkZXY7 CisKKwkqYXJnID0gUlJFRzMyX1NPQzE1KE1QMSwgMCwgbW1NUDFfU01OX0MyUE1TR184Mik7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc211X3YxMV8wX3dhaXRfZm9yX3Jlc3BvbnNlKHN0 cnVjdCBzbXVfY29udGV4dCAqc211KQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0g c211LT5hZGV2OworCXVpbnQzMl90IGN1cl92YWx1ZSwgaTsKKworCWZvciAoaSA9IDA7IGkgPCBh ZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgeworCQljdXJfdmFsdWUgPSBSUkVHMzJfU09DMTUoTVAx LCAwLCBtbU1QMV9TTU5fQzJQTVNHXzkwKTsKKwkJaWYgKChjdXJfdmFsdWUgJiBNUDFfQzJQTVNH XzkwX19DT05URU5UX01BU0spICE9IDApCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCX0KKwor CS8qIHRpbWVvdXQgbWVhbnMgd3JvbmcgbG9naWMgKi8KKwlpZiAoaSA9PSBhZGV2LT51c2VjX3Rp bWVvdXQpCisJCXJldHVybiAtRVRJTUU7CisKKwlyZXR1cm4gUlJFRzMyX1NPQzE1KE1QMSwgMCwg bW1NUDFfU01OX0MyUE1TR185MCkgPT0gMHgxID8gMCA6IC1FSU87Cit9CisKK3N0YXRpYyBpbnQg c211X3YxMV8wX3NlbmRfbXNnKHN0cnVjdCBzbXVfY29udGV4dCAqc211LCB1aW50MTZfdCBtc2cp Cit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBzbXUtPmFkZXY7CisJaW50IHJldCA9 IDAsIGluZGV4ID0gMDsKKworCWluZGV4ID0gc211X21zZ19nZXRfaW5kZXgoc211LCBtc2cpOwor CWlmIChpbmRleCA8IDApCisJCXJldHVybiBpbmRleDsKKworCXNtdV92MTFfMF93YWl0X2Zvcl9y ZXNwb25zZShzbXUpOworCisJV1JFRzMyX1NPQzE1KE1QMSwgMCwgbW1NUDFfU01OX0MyUE1TR185 MCwgMCk7CisKKwlzbXVfdjExXzBfc2VuZF9tc2dfd2l0aG91dF93YWl0aW5nKHNtdSwgKHVpbnQx Nl90KWluZGV4KTsKKworCXJldCA9IHNtdV92MTFfMF93YWl0X2Zvcl9yZXNwb25zZShzbXUpOwor CisJaWYgKHJldCkKKwkJcHJfZXJyKCJGYWlsZWQgdG8gc2VuZCBtZXNzYWdlIDB4JXgsIHJlc3Bv bnNlIDB4JXhcbiIsIGluZGV4LAorCQkgICAgICAgcmV0KTsKKworCXJldHVybiByZXQ7CisKK30K Kworc3RhdGljIGludAorc211X3YxMV8wX3NlbmRfbXNnX3dpdGhfcGFyYW0oc3RydWN0IHNtdV9j b250ZXh0ICpzbXUsIHVpbnQxNl90IG1zZywKKwkJCSAgICAgIHVpbnQzMl90IHBhcmFtKQorewor CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBzbXUtPmFkZXY7CisJaW50IHJldCA9IDAs IGluZGV4ID0gMDsKKworCWluZGV4ID0gc211X21zZ19nZXRfaW5kZXgoc211LCBtc2cpOworCWlm IChpbmRleCA8IDApCisJCXJldHVybiBpbmRleDsKKworCXJldCA9IHNtdV92MTFfMF93YWl0X2Zv cl9yZXNwb25zZShzbXUpOworCWlmIChyZXQpCisJCXByX2VycigiRmFpbGVkIHRvIHNlbmQgbWVz c2FnZSAweCV4LCByZXNwb25zZSAweCV4LCBwYXJhbSAweCV4XG4iLAorCQkgICAgICAgaW5kZXgs IHJldCwgcGFyYW0pOworCisJV1JFRzMyX1NPQzE1KE1QMSwgMCwgbW1NUDFfU01OX0MyUE1TR185 MCwgMCk7CisKKwlXUkVHMzJfU09DMTUoTVAxLCAwLCBtbU1QMV9TTU5fQzJQTVNHXzgyLCBwYXJh bSk7CisKKwlzbXVfdjExXzBfc2VuZF9tc2dfd2l0aG91dF93YWl0aW5nKHNtdSwgKHVpbnQxNl90 KWluZGV4KTsKKworCXJldCA9IHNtdV92MTFfMF93YWl0X2Zvcl9yZXNwb25zZShzbXUpOworCWlm IChyZXQpCisJCXByX2VycigiRmFpbGVkIHRvIHNlbmQgbWVzc2FnZSAweCV4LCByZXNwb25zZSAw eCV4IHBhcmFtIDB4JXhcbiIsCisJCSAgICAgICBpbmRleCwgcmV0LCBwYXJhbSk7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNtdV92MTFfMF9pbml0X21pY3JvY29kZShzdHJ1Y3Qg c211X2NvbnRleHQgKnNtdSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHNtdS0+ YWRldjsKKwljb25zdCBjaGFyICpjaGlwX25hbWU7CisJY2hhciBmd19uYW1lWzMwXTsKKwlpbnQg ZXJyID0gMDsKKwljb25zdCBzdHJ1Y3Qgc21jX2Zpcm13YXJlX2hlYWRlcl92MV8wICpoZHI7CisJ Y29uc3Qgc3RydWN0IGNvbW1vbl9maXJtd2FyZV9oZWFkZXIgKmhlYWRlcjsKKwlzdHJ1Y3QgYW1k Z3B1X2Zpcm13YXJlX2luZm8gKnVjb2RlID0gTlVMTDsKKworCXN3aXRjaCAoYWRldi0+YXNpY190 eXBlKSB7CisJY2FzZSBDSElQX1ZFR0EyMDoKKwkJY2hpcF9uYW1lID0gInZlZ2EyMCI7CisJCWJy ZWFrOworCWNhc2UgQ0hJUF9BUkNUVVJVUzoKKwkJY2hpcF9uYW1lID0gImFyY3R1cnVzIjsKKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJc25wcmludGYoZndfbmFtZSwgc2l6 ZW9mKGZ3X25hbWUpLCAiYW1kZ3B1LyVzX3NtYy5iaW4iLCBjaGlwX25hbWUpOworCisJZXJyID0g cmVxdWVzdF9maXJtd2FyZSgmYWRldi0+cG0uZncsIGZ3X25hbWUsIGFkZXYtPmRldik7CisJaWYg KGVycikKKwkJZ290byBvdXQ7CisJZXJyID0gYW1kZ3B1X3Vjb2RlX3ZhbGlkYXRlKGFkZXYtPnBt LmZ3KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWhkciA9IChjb25zdCBzdHJ1Y3Qgc21j X2Zpcm13YXJlX2hlYWRlcl92MV8wICopIGFkZXYtPnBtLmZ3LT5kYXRhOworCWFtZGdwdV91Y29k ZV9wcmludF9zbWNfaGRyKCZoZHItPmhlYWRlcik7CisJYWRldi0+cG0uZndfdmVyc2lvbiA9IGxl MzJfdG9fY3B1KGhkci0+aGVhZGVyLnVjb2RlX3ZlcnNpb24pOworCisJaWYgKGFkZXYtPmZpcm13 YXJlLmxvYWRfdHlwZSA9PSBBTURHUFVfRldfTE9BRF9QU1ApIHsKKwkJdWNvZGUgPSAmYWRldi0+ ZmlybXdhcmUudWNvZGVbQU1ER1BVX1VDT0RFX0lEX1NNQ107CisJCXVjb2RlLT51Y29kZV9pZCA9 IEFNREdQVV9VQ09ERV9JRF9TTUM7CisJCXVjb2RlLT5mdyA9IGFkZXYtPnBtLmZ3OworCQloZWFk ZXIgPSAoY29uc3Qgc3RydWN0IGNvbW1vbl9maXJtd2FyZV9oZWFkZXIgKil1Y29kZS0+ZnctPmRh dGE7CisJCWFkZXYtPmZpcm13YXJlLmZ3X3NpemUgKz0KKwkJCUFMSUdOKGxlMzJfdG9fY3B1KGhl YWRlci0+dWNvZGVfc2l6ZV9ieXRlcyksIFBBR0VfU0laRSk7CisJfQorCitvdXQ6CisJaWYgKGVy cikgeworCQlEUk1fRVJST1IoInNtdV92MTFfMDogRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIl c1wiXG4iLAorCQkJICBmd19uYW1lKTsKKwkJcmVsZWFzZV9maXJtd2FyZShhZGV2LT5wbS5mdyk7 CisJCWFkZXYtPnBtLmZ3ID0gTlVMTDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlu dCBzbXVfdjExXzBfbG9hZF9taWNyb2NvZGUoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUpCit7CisJ c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBzbXUtPmFkZXY7CisJY29uc3QgdWludDMyX3Qg KnNyYzsKKwljb25zdCBzdHJ1Y3Qgc21jX2Zpcm13YXJlX2hlYWRlcl92MV8wICpoZHI7CisJdWlu dDMyX3QgYWRkcl9zdGFydCA9IE1QMV9TUkFNOworCXVpbnQzMl90IGk7CisJdWludDMyX3QgbXAx X2Z3X2ZsYWdzOworCisJaGRyID0gKGNvbnN0IHN0cnVjdCBzbWNfZmlybXdhcmVfaGVhZGVyX3Yx XzAgKikgYWRldi0+cG0uZnctPmRhdGE7CisJc3JjID0gKGNvbnN0IHVpbnQzMl90ICopKGFkZXYt PnBtLmZ3LT5kYXRhICsKKwkJbGUzMl90b19jcHUoaGRyLT5oZWFkZXIudWNvZGVfYXJyYXlfb2Zm c2V0X2J5dGVzKSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgTVAxX1NNQ19TSVpFLzQgLSAxOyBpKysp IHsKKwkJaWYgKGFtZGdwdV9lbXVfbW9kZSA9PSAxICYmIGkgJSA1MDAgPT0gMCkKKwkJCW1zbGVl cCgxKTsKKwkJV1JFRzMyX1BDSUUoYWRkcl9zdGFydCwgc3JjW2ldKTsKKwkJYWRkcl9zdGFydCAr PSA0OworCX0KKworCVdSRUczMl9QQ0lFKE1QMV9QdWJsaWMgfCAoc21uTVAxX1BVQl9DVFJMICYg MHhmZmZmZmZmZiksCisJCTEgJiBNUDFfU01OX1BVQl9DVFJMX19SRVNFVF9NQVNLKTsKKwlXUkVH MzJfUENJRShNUDFfUHVibGljIHwgKHNtbk1QMV9QVUJfQ1RSTCAmIDB4ZmZmZmZmZmYpLAorCQkx ICYgfk1QMV9TTU5fUFVCX0NUUkxfX1JFU0VUX01BU0spOworCisJZm9yIChpID0gMDsgaSA8IGFk ZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCW1wMV9md19mbGFncyA9IFJSRUczMl9QQ0lFKE1Q MV9QdWJsaWMgfAorCQkJKHNtbk1QMV9GSVJNV0FSRV9GTEFHUyAmIDB4ZmZmZmZmZmYpKTsKKwkJ aWYgKChtcDFfZndfZmxhZ3MgJiBNUDFfRklSTVdBUkVfRkxBR1NfX0lOVEVSUlVQVFNfRU5BQkxF RF9NQVNLKSA+PgorCQkJTVAxX0ZJUk1XQVJFX0ZMQUdTX19JTlRFUlJVUFRTX0VOQUJMRURfX1NI SUZUKQorCQkJYnJlYWs7CisJCXVkZWxheSgxKTsKKwl9CisKKwlpZiAoaSA9PSBhZGV2LT51c2Vj X3RpbWVvdXQpCisJCXJldHVybiAtRVRJTUU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBzbXVfdjExXzBfY2hlY2tfZndfc3RhdHVzKHN0cnVjdCBzbXVfY29udGV4dCAqc211KQorewor CXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gc211LT5hZGV2OworCXVpbnQzMl90IG1wMV9m d19mbGFnczsKKworCW1wMV9md19mbGFncyA9IFJSRUczMl9QQ0lFKE1QMV9QdWJsaWMgfAorCQkJ CSAgIChzbW5NUDFfRklSTVdBUkVfRkxBR1MgJiAweGZmZmZmZmZmKSk7CisKKwlpZiAoKG1wMV9m d19mbGFncyAmIE1QMV9GSVJNV0FSRV9GTEFHU19fSU5URVJSVVBUU19FTkFCTEVEX01BU0spID4+ CisJICAgIE1QMV9GSVJNV0FSRV9GTEFHU19fSU5URVJSVVBUU19FTkFCTEVEX19TSElGVCkKKwkJ cmV0dXJuIDA7CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBzbXVfdjExXzBfY2hl Y2tfZndfdmVyc2lvbihzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSkKK3sKKwl1aW50MzJfdCBpZl92 ZXJzaW9uID0gMHhmZiwgc211X3ZlcnNpb24gPSAweGZmOworCXVpbnQxNl90IHNtdV9tYWpvcjsK Kwl1aW50OF90IHNtdV9taW5vciwgc211X2RlYnVnOworCWludCByZXQgPSAwOworCisJcmV0ID0g c211X2dldF9zbWNfdmVyc2lvbihzbXUsICZpZl92ZXJzaW9uLCAmc211X3ZlcnNpb24pOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzbXVfbWFqb3IgPSAoc211X3ZlcnNpb24gPj4gMTYp ICYgMHhmZmZmOworCXNtdV9taW5vciA9IChzbXVfdmVyc2lvbiA+PiA4KSAmIDB4ZmY7CisJc211 X2RlYnVnID0gKHNtdV92ZXJzaW9uID4+IDApICYgMHhmZjsKKworCXByX2luZm8oIlNNVSBEcml2 ZXIgSUYgVmVyc2lvbiA9IDB4JTA4eCwgU01VIEZXIFZlcnNpb24gPSAweCUwOHggKCVkLiVkLiVk KVxuIiwKKwkJaWZfdmVyc2lvbiwgc211X3ZlcnNpb24sIHNtdV9tYWpvciwgc211X21pbm9yLCBz bXVfZGVidWcpOworCisJaWYgKGlmX3ZlcnNpb24gIT0gc211LT5zbWNfaWZfdmVyc2lvbikgewor CQlwcl9lcnIoIlNNVSBkcml2ZXIgaWYgdmVyc2lvbiBub3QgbWF0Y2hlZFxuIik7CisJCXJldCA9 IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzbXVfdjExXzBf c2V0X3BwdGFibGVfdjJfMChzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSwgdm9pZCAqKnRhYmxlLCB1 aW50MzJfdCAqc2l6ZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHNtdS0+YWRl djsKKwl1aW50MzJfdCBwcHRfb2Zmc2V0X2J5dGVzOworCWNvbnN0IHN0cnVjdCBzbWNfZmlybXdh cmVfaGVhZGVyX3YyXzAgKnYyOworCisJdjIgPSAoY29uc3Qgc3RydWN0IHNtY19maXJtd2FyZV9o ZWFkZXJfdjJfMCAqKSBhZGV2LT5wbS5mdy0+ZGF0YTsKKworCXBwdF9vZmZzZXRfYnl0ZXMgPSBs ZTMyX3RvX2NwdSh2Mi0+cHB0X29mZnNldF9ieXRlcyk7CisJKnNpemUgPSBsZTMyX3RvX2NwdSh2 Mi0+cHB0X3NpemVfYnl0ZXMpOworCSp0YWJsZSA9ICh1aW50OF90ICopdjIgKyBwcHRfb2Zmc2V0 X2J5dGVzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc211X3YxMV8wX3NldF9wcHRh YmxlX3YyXzEoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsIHZvaWQgKip0YWJsZSwgdWludDMyX3Qg KnNpemUsIHVpbnQzMl90IHBwdGFibGVfaWQpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYgPSBzbXUtPmFkZXY7CisJY29uc3Qgc3RydWN0IHNtY19maXJtd2FyZV9oZWFkZXJfdjJfMSAq djJfMTsKKwlzdHJ1Y3Qgc21jX3NvZnRfcHB0YWJsZV9lbnRyeSAqZW50cmllczsKKwl1aW50MzJf dCBwcHRhYmxlX2NvdW50ID0gMDsKKwlpbnQgaSA9IDA7CisKKwl2Ml8xID0gKGNvbnN0IHN0cnVj dCBzbWNfZmlybXdhcmVfaGVhZGVyX3YyXzEgKikgYWRldi0+cG0uZnctPmRhdGE7CisJZW50cmll cyA9IChzdHJ1Y3Qgc21jX3NvZnRfcHB0YWJsZV9lbnRyeSAqKQorCQkoKHVpbnQ4X3QgKil2Ml8x ICsgbGUzMl90b19jcHUodjJfMS0+cHB0YWJsZV9lbnRyeV9vZmZzZXQpKTsKKwlwcHRhYmxlX2Nv dW50ID0gbGUzMl90b19jcHUodjJfMS0+cHB0YWJsZV9jb3VudCk7CisJZm9yIChpID0gMDsgaSA8 IHBwdGFibGVfY291bnQ7IGkrKykgeworCQlpZiAobGUzMl90b19jcHUoZW50cmllc1tpXS5pZCkg PT0gcHB0YWJsZV9pZCkgeworCQkJKnRhYmxlID0gKCh1aW50OF90ICopdjJfMSArIGxlMzJfdG9f Y3B1KGVudHJpZXNbaV0ucHB0X29mZnNldF9ieXRlcykpOworCQkJKnNpemUgPSBsZTMyX3RvX2Nw dShlbnRyaWVzW2ldLnBwdF9zaXplX2J5dGVzKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYg KGkgPT0gcHB0YWJsZV9jb3VudCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBzbXVfdjExXzBfc2V0dXBfcHB0YWJsZShzdHJ1Y3Qgc211X2NvbnRleHQg KnNtdSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHNtdS0+YWRldjsKKwljb25z dCBzdHJ1Y3Qgc21jX2Zpcm13YXJlX2hlYWRlcl92MV8wICpoZHI7CisJaW50IHJldCwgaW5kZXg7 CisJdWludDMyX3Qgc2l6ZTsKKwl1aW50OF90IGZyZXYsIGNyZXY7CisJdm9pZCAqdGFibGU7CisJ dWludDE2X3QgdmVyc2lvbl9tYWpvciwgdmVyc2lvbl9taW5vcjsKKworCWhkciA9IChjb25zdCBz dHJ1Y3Qgc21jX2Zpcm13YXJlX2hlYWRlcl92MV8wICopIGFkZXYtPnBtLmZ3LT5kYXRhOworCXZl cnNpb25fbWFqb3IgPSBsZTE2X3RvX2NwdShoZHItPmhlYWRlci5oZWFkZXJfdmVyc2lvbl9tYWpv cik7CisJdmVyc2lvbl9taW5vciA9IGxlMTZfdG9fY3B1KGhkci0+aGVhZGVyLmhlYWRlcl92ZXJz aW9uX21pbm9yKTsKKwlpZiAodmVyc2lvbl9tYWpvciA9PSAyICYmIChzbXUtPnNtdV90YWJsZS5i b290X3ZhbHVlcy5wcF90YWJsZV9pZCA+IDAgfHwgYW1kZ3B1X2VtdV9tb2RlKSkgeworCQlzd2l0 Y2ggKHZlcnNpb25fbWlub3IpIHsKKwkJY2FzZSAwOgorCQkJcmV0ID0gc211X3YxMV8wX3NldF9w cHRhYmxlX3YyXzAoc211LCAmdGFibGUsICZzaXplKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJ CQlpZiAoYW1kZ3B1X2VtdV9tb2RlKQorCQkJCXNtdS0+c211X3RhYmxlLmJvb3RfdmFsdWVzLnBw X3RhYmxlX2lkID0gMjMwMDsKKwkJCXJldCA9IHNtdV92MTFfMF9zZXRfcHB0YWJsZV92Ml8xKHNt dSwgJnRhYmxlLCAmc2l6ZSwKKwkJCQkJCQkgc211LT5zbXVfdGFibGUuYm9vdF92YWx1ZXMucHBf dGFibGVfaWQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRUlOVkFMOworCQkJ YnJlYWs7CisJCX0KKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwl9IGVsc2UgeworCQlp bmRleCA9IGdldF9pbmRleF9pbnRvX21hc3Rlcl90YWJsZShhdG9tX21hc3Rlcl9saXN0X29mX2Rh dGFfdGFibGVzX3YyXzEsCisJCQkJCQkgICAgcG93ZXJwbGF5aW5mbyk7CisKKwkJcmV0ID0gc211 X2dldF9hdG9tX2RhdGFfdGFibGUoc211LCBpbmRleCwgKHVpbnQxNl90ICopJnNpemUsICZmcmV2 LCAmY3JldiwKKwkJCQkJICAgICAgKHVpbnQ4X3QgKiopJnRhYmxlKTsKKwkJaWYgKHJldCkKKwkJ CXJldHVybiByZXQ7CisJfQorCisJaWYgKCFzbXUtPnNtdV90YWJsZS5wb3dlcl9wbGF5X3RhYmxl KQorCQlzbXUtPnNtdV90YWJsZS5wb3dlcl9wbGF5X3RhYmxlID0gdGFibGU7CisJaWYgKCFzbXUt PnNtdV90YWJsZS5wb3dlcl9wbGF5X3RhYmxlX3NpemUpCisJCXNtdS0+c211X3RhYmxlLnBvd2Vy X3BsYXlfdGFibGVfc2l6ZSA9IHNpemU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBz bXVfdjExXzBfaW5pdF9kcG1fY29udGV4dChzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSkKK3sKKwlz dHJ1Y3Qgc211X2RwbV9jb250ZXh0ICpzbXVfZHBtID0gJnNtdS0+c211X2RwbTsKKworCWlmIChz bXVfZHBtLT5kcG1fY29udGV4dCB8fCBzbXVfZHBtLT5kcG1fY29udGV4dF9zaXplICE9IDApCisJ CXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHNtdV9hbGxvY19kcG1fY29udGV4dChzbXUpOwor fQorCitzdGF0aWMgaW50IHNtdV92MTFfMF9maW5pX2RwbV9jb250ZXh0KHN0cnVjdCBzbXVfY29u dGV4dCAqc211KQoreworCXN0cnVjdCBzbXVfZHBtX2NvbnRleHQgKnNtdV9kcG0gPSAmc211LT5z bXVfZHBtOworCisJaWYgKCFzbXVfZHBtLT5kcG1fY29udGV4dCB8fCBzbXVfZHBtLT5kcG1fY29u dGV4dF9zaXplID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJa2ZyZWUoc211X2RwbS0+ZHBt X2NvbnRleHQpOworCWtmcmVlKHNtdV9kcG0tPmdvbGRlbl9kcG1fY29udGV4dCk7CisJa2ZyZWUo c211X2RwbS0+ZHBtX2N1cnJlbnRfcG93ZXJfc3RhdGUpOworCWtmcmVlKHNtdV9kcG0tPmRwbV9y ZXF1ZXN0X3Bvd2VyX3N0YXRlKTsKKwlzbXVfZHBtLT5kcG1fY29udGV4dCA9IE5VTEw7CisJc211 X2RwbS0+Z29sZGVuX2RwbV9jb250ZXh0ID0gTlVMTDsKKwlzbXVfZHBtLT5kcG1fY29udGV4dF9z aXplID0gMDsKKwlzbXVfZHBtLT5kcG1fY3VycmVudF9wb3dlcl9zdGF0ZSA9IE5VTEw7CisJc211 X2RwbS0+ZHBtX3JlcXVlc3RfcG93ZXJfc3RhdGUgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgc211X3YxMV8wX2luaXRfc21jX3RhYmxlcyhzdHJ1Y3Qgc211X2NvbnRleHQg KnNtdSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHNtdS0+YWRldjsKKwlzdHJ1 Y3Qgc211X3RhYmxlX2NvbnRleHQgKnNtdV90YWJsZSA9ICZzbXUtPnNtdV90YWJsZTsKKwlzdHJ1 Y3Qgc211X3RhYmxlICp0YWJsZXMgPSBOVUxMOworCWludCByZXQgPSAwOworCisJaWYgKHNtdV90 YWJsZS0+dGFibGVzIHx8IHNtdV90YWJsZS0+dGFibGVfY291bnQgIT0gMCkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwl0YWJsZXMgPSBrY2FsbG9jKFRBQkxFX0NPVU5ULCBzaXplb2Yoc3RydWN0IHNt dV90YWJsZSksIEdGUF9LRVJORUwpOworCWlmICghdGFibGVzKQorCQlyZXR1cm4gLUVOT01FTTsK KworCXNtdV90YWJsZS0+dGFibGVzID0gdGFibGVzOworCXNtdV90YWJsZS0+dGFibGVfY291bnQg PSBUQUJMRV9DT1VOVDsKKworCVNNVV9UQUJMRV9JTklUKHRhYmxlcywgVEFCTEVfUFBUQUJMRSwg c2l6ZW9mKFBQVGFibGVfdCksCisJCSAgICAgICBQQUdFX1NJWkUsIEFNREdQVV9HRU1fRE9NQUlO X1ZSQU0pOworCVNNVV9UQUJMRV9JTklUKHRhYmxlcywgVEFCTEVfU01VX01FVFJJQ1MsIHNpemVv ZihTbXVNZXRyaWNzX3QpLAorCQkgICAgICAgUEFHRV9TSVpFLCBBTURHUFVfR0VNX0RPTUFJTl9W UkFNKTsKKwlyZXQgPSBzbXVfdjExXzBfaW5pdF9kcG1fY29udGV4dChzbXUpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbXVfdjExXzBf ZmluaV9zbWNfdGFibGVzKHN0cnVjdCBzbXVfY29udGV4dCAqc211KQoreworCXN0cnVjdCBzbXVf dGFibGVfY29udGV4dCAqc211X3RhYmxlID0gJnNtdS0+c211X3RhYmxlOworCWludCByZXQgPSAw OworCisJaWYgKCFzbXVfdGFibGUtPnRhYmxlcyB8fCBzbXVfdGFibGUtPnRhYmxlX2NvdW50ID09 IDApCisJCXJldHVybiAtRUlOVkFMOworCisJa2ZyZWUoc211X3RhYmxlLT50YWJsZXMpOworCXNt dV90YWJsZS0+dGFibGVzID0gTlVMTDsKKwlzbXVfdGFibGUtPnRhYmxlX2NvdW50ID0gMDsKKwor CXJldCA9IHNtdV92MTFfMF9maW5pX2RwbV9jb250ZXh0KHNtdSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbXVfdjExXzBfaW5pdF9wb3dl cihzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSkKK3sKKwlzdHJ1Y3Qgc211X3Bvd2VyX2NvbnRleHQg KnNtdV9wb3dlciA9ICZzbXUtPnNtdV9wb3dlcjsKKworCWlmICghc211LT5wbV9lbmFibGVkKQor CQlyZXR1cm4gMDsKKwlpZiAoc211X3Bvd2VyLT5wb3dlcl9jb250ZXh0IHx8IHNtdV9wb3dlci0+ cG93ZXJfY29udGV4dF9zaXplICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJc211X3Bvd2Vy LT5wb3dlcl9jb250ZXh0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNtdV8xMV8wX2RwbV9jb250 ZXh0KSwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFzbXVfcG93ZXItPnBvd2VyX2NvbnRl eHQpCisJCXJldHVybiAtRU5PTUVNOworCXNtdV9wb3dlci0+cG93ZXJfY29udGV4dF9zaXplID0g c2l6ZW9mKHN0cnVjdCBzbXVfMTFfMF9kcG1fY29udGV4dCk7CisKKwlzbXUtPm1ldHJpY3NfdGlt ZSA9IDA7CisJc211LT5tZXRyaWNzX3RhYmxlID0ga3phbGxvYyhzaXplb2YoU211TWV0cmljc190 KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzbXUtPm1ldHJpY3NfdGFibGUpIHsKKwkJa2ZyZWUoc211 X3Bvd2VyLT5wb3dlcl9jb250ZXh0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgc211X3YxMV8wX2ZpbmlfcG93ZXIoc3RydWN0IHNtdV9jb250 ZXh0ICpzbXUpCit7CisJc3RydWN0IHNtdV9wb3dlcl9jb250ZXh0ICpzbXVfcG93ZXIgPSAmc211 LT5zbXVfcG93ZXI7CisKKwlpZiAoIXNtdS0+cG1fZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisJaWYg KCFzbXVfcG93ZXItPnBvd2VyX2NvbnRleHQgfHwgc211X3Bvd2VyLT5wb3dlcl9jb250ZXh0X3Np emUgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrZnJlZShzbXUtPm1ldHJpY3NfdGFibGUp OworCWtmcmVlKHNtdV9wb3dlci0+cG93ZXJfY29udGV4dCk7CisJc211LT5tZXRyaWNzX3RhYmxl ID0gTlVMTDsKKwlzbXVfcG93ZXItPnBvd2VyX2NvbnRleHQgPSBOVUxMOworCXNtdV9wb3dlci0+ cG93ZXJfY29udGV4dF9zaXplID0gMDsKKworCXJldHVybiAwOworfQorCitpbnQgc211X3YxMV8w X2dldF92Ymlvc19ib290dXBfdmFsdWVzKHN0cnVjdCBzbXVfY29udGV4dCAqc211KQoreworCWlu dCByZXQsIGluZGV4OworCXVpbnQxNl90IHNpemU7CisJdWludDhfdCBmcmV2LCBjcmV2OworCXN0 cnVjdCBhdG9tX2NvbW1vbl90YWJsZV9oZWFkZXIgKmhlYWRlcjsKKwlzdHJ1Y3QgYXRvbV9maXJt d2FyZV9pbmZvX3YzXzMgKnZfM18zOworCXN0cnVjdCBhdG9tX2Zpcm13YXJlX2luZm9fdjNfMSAq dl8zXzE7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBzbXUtPmFkZXY7CisKKwlpbmRl eCA9IGdldF9pbmRleF9pbnRvX21hc3Rlcl90YWJsZShhdG9tX21hc3Rlcl9saXN0X29mX2RhdGFf dGFibGVzX3YyXzEsCisJCQkJCSAgICBmaXJtd2FyZWluZm8pOworCisJcmV0ID0gc211X2dldF9h dG9tX2RhdGFfdGFibGUoc211LCBpbmRleCwgJnNpemUsICZmcmV2LCAmY3JldiwKKwkJCQkgICAg ICAodWludDhfdCAqKikmaGVhZGVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYg KGhlYWRlci0+Zm9ybWF0X3JldmlzaW9uICE9IDMpIHsKKwkJcHJfZXJyKCJ1bmtub3duIGF0b21f ZmlybXdhcmVfaW5mbyB2ZXJzaW9uISBmb3Igc211MTFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlzd2l0Y2ggKGhlYWRlci0+Y29udGVudF9yZXZpc2lvbikgeworCWNhc2UgMDoKKwlj YXNlIDE6CisJY2FzZSAyOgorCQl2XzNfMSA9IChzdHJ1Y3QgYXRvbV9maXJtd2FyZV9pbmZvX3Yz XzEgKiloZWFkZXI7CisJCXNtdS0+c211X3RhYmxlLmJvb3RfdmFsdWVzLnJldmlzaW9uID0gdl8z XzEtPmZpcm13YXJlX3JldmlzaW9uOworCQlzbXUtPnNtdV90YWJsZS5ib290X3ZhbHVlcy5nZnhj bGsgPSB2XzNfMS0+Ym9vdHVwX3NjbGtfaW4xMGtoejsKKwkJc211LT5zbXVfdGFibGUuYm9vdF92 YWx1ZXMudWNsayA9IHZfM18xLT5ib290dXBfbWNsa19pbjEwa2h6OworCQlzbXUtPnNtdV90YWJs ZS5ib290X3ZhbHVlcy5zb2NjbGsgPSAwOworCQlpZiAoYWRldi0+YXNpY190eXBlICE9IENISVBf QVJDVFVSVVMpCisJCQlzbXUtPnNtdV90YWJsZS5ib290X3ZhbHVlcy5kY2VmY2xrID0gMDsKKwkJ c211LT5zbXVfdGFibGUuYm9vdF92YWx1ZXMudmRkYyA9IHZfM18xLT5ib290dXBfdmRkY19tdjsK KwkJc211LT5zbXVfdGFibGUuYm9vdF92YWx1ZXMudmRkY2kgPSB2XzNfMS0+Ym9vdHVwX3ZkZGNp X212OworCQlzbXUtPnNtdV90YWJsZS5ib290X3ZhbHVlcy5tdmRkYyA9IHZfM18xLT5ib290dXBf bXZkZGNfbXY7CisJCXNtdS0+c211X3RhYmxlLmJvb3RfdmFsdWVzLnZkZF9nZnggPSB2XzNfMS0+ Ym9vdHVwX3ZkZGdmeF9tdjsKKwkJc211LT5zbXVfdGFibGUuYm9vdF92YWx1ZXMuY29vbGluZ19p ZCA9IHZfM18xLT5jb29saW5nc29sdXRpb25faWQ7CisJCXNtdS0+c211X3RhYmxlLmJvb3RfdmFs dWVzLnBwX3RhYmxlX2lkID0gMDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCWRlZmF1bHQ6CisJCXZf M18zID0gKHN0cnVjdCBhdG9tX2Zpcm13YXJlX2luZm9fdjNfMyAqKWhlYWRlcjsKKwkJc211LT5z bXVfdGFibGUuYm9vdF92YWx1ZXMucmV2aXNpb24gPSB2XzNfMy0+ZmlybXdhcmVfcmV2aXNpb247 CisJCXNtdS0+c211X3RhYmxlLmJvb3RfdmFsdWVzLmdmeGNsayA9IHZfM18zLT5ib290dXBfc2Ns a19pbjEwa2h6OworCQlzbXUtPnNtdV90YWJsZS5ib290X3ZhbHVlcy51Y2xrID0gdl8zXzMtPmJv b3R1cF9tY2xrX2luMTBraHo7CisJCXNtdS0+c211X3RhYmxlLmJvb3RfdmFsdWVzLnNvY2NsayA9 IDA7CisJCWlmIChhZGV2LT5hc2ljX3R5cGUgIT0gQ0hJUF9BUkNUVVJVUykKKwkJCXNtdS0+c211 X3RhYmxlLmJvb3RfdmFsdWVzLmRjZWZjbGsgPSAwOworCQlzbXUtPnNtdV90YWJsZS5ib290X3Zh bHVlcy52ZGRjID0gdl8zXzMtPmJvb3R1cF92ZGRjX212OworCQlzbXUtPnNtdV90YWJsZS5ib290 X3ZhbHVlcy52ZGRjaSA9IHZfM18zLT5ib290dXBfdmRkY2lfbXY7CisJCXNtdS0+c211X3RhYmxl LmJvb3RfdmFsdWVzLm12ZGRjID0gdl8zXzMtPmJvb3R1cF9tdmRkY19tdjsKKwkJc211LT5zbXVf dGFibGUuYm9vdF92YWx1ZXMudmRkX2dmeCA9IHZfM18zLT5ib290dXBfdmRkZ2Z4X212OworCQlz bXUtPnNtdV90YWJsZS5ib290X3ZhbHVlcy5jb29saW5nX2lkID0gdl8zXzMtPmNvb2xpbmdzb2x1 dGlvbl9pZDsKKwkJc211LT5zbXVfdGFibGUuYm9vdF92YWx1ZXMucHBfdGFibGVfaWQgPSB2XzNf My0+cHBsaWJfcHB0YWJsZV9pZDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBz bXVfdjExXzBfZ2V0X2Nsa19pbmZvX2Zyb21fdmJpb3Moc3RydWN0IHNtdV9jb250ZXh0ICpzbXUp Cit7CisJaW50IHJldCwgaW5kZXg7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBzbXUt PmFkZXY7CisJc3RydWN0IGF0b21fZ2V0X3NtdV9jbG9ja19pbmZvX3BhcmFtZXRlcnNfdjNfMSBp bnB1dCA9IHswfTsKKwlzdHJ1Y3QgYXRvbV9nZXRfc211X2Nsb2NrX2luZm9fb3V0cHV0X3BhcmFt ZXRlcnNfdjNfMSAqb3V0cHV0OworCisJaW5wdXQuY2xrX2lkID0gU01VMTFfU1lTUExMMF9TT0ND TEtfSUQ7CisJaW5wdXQuY29tbWFuZCA9IEdFVF9TTVVfQ0xPQ0tfSU5GT19WM18xX0dFVF9DTE9D S19GUkVROworCWluZGV4ID0gZ2V0X2luZGV4X2ludG9fbWFzdGVyX3RhYmxlKGF0b21fbWFzdGVy X2xpc3Rfb2ZfY29tbWFuZF9mdW5jdGlvbnNfdjJfMSwKKwkJCQkJICAgIGdldHNtdWNsb2NraW5m byk7CisKKwlyZXQgPSBhbWRncHVfYXRvbV9leGVjdXRlX3RhYmxlKGFkZXYtPm1vZGVfaW5mby5h dG9tX2NvbnRleHQsIGluZGV4LAorCQkJCQkodWludDMyX3QgKikmaW5wdXQpOworCWlmIChyZXQp CisJCXJldHVybiAtRUlOVkFMOworCisJb3V0cHV0ID0gKHN0cnVjdCBhdG9tX2dldF9zbXVfY2xv Y2tfaW5mb19vdXRwdXRfcGFyYW1ldGVyc192M18xICopJmlucHV0OworCXNtdS0+c211X3RhYmxl LmJvb3RfdmFsdWVzLnNvY2NsayA9IGxlMzJfdG9fY3B1KG91dHB1dC0+YXRvbV9zbXVfb3V0cHV0 Y2xrZnJlcS5zbXVfY2xvY2tfZnJlcV9oeikgLyAxMDAwMDsKKworCWlmIChhZGV2LT5hc2ljX3R5 cGUgIT0gQ0hJUF9BUkNUVVJVUykgeworCQltZW1zZXQoJmlucHV0LCAwLCBzaXplb2YoaW5wdXQp KTsKKwkJaW5wdXQuY2xrX2lkID0gU01VMTFfU1lTUExMMF9EQ0VGQ0xLX0lEOworCQlpbnB1dC5j b21tYW5kID0gR0VUX1NNVV9DTE9DS19JTkZPX1YzXzFfR0VUX0NMT0NLX0ZSRVE7CisJCWluZGV4 ID0gZ2V0X2luZGV4X2ludG9fbWFzdGVyX3RhYmxlKGF0b21fbWFzdGVyX2xpc3Rfb2ZfY29tbWFu ZF9mdW5jdGlvbnNfdjJfMSwKKwkJCQkJCSAgICBnZXRzbXVjbG9ja2luZm8pOworCisJCXJldCA9 IGFtZGdwdV9hdG9tX2V4ZWN1dGVfdGFibGUoYWRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwg aW5kZXgsCisJCQkJCQkodWludDMyX3QgKikmaW5wdXQpOworCQlpZiAocmV0KQorCQkJcmV0dXJu IC1FSU5WQUw7CisKKwkJb3V0cHV0ID0gKHN0cnVjdCBhdG9tX2dldF9zbXVfY2xvY2tfaW5mb19v dXRwdXRfcGFyYW1ldGVyc192M18xICopJmlucHV0OworCQlzbXUtPnNtdV90YWJsZS5ib290X3Zh bHVlcy5kY2VmY2xrID0gbGUzMl90b19jcHUob3V0cHV0LT5hdG9tX3NtdV9vdXRwdXRjbGtmcmVx LnNtdV9jbG9ja19mcmVxX2h6KSAvIDEwMDAwOworCisJCW1lbXNldCgmaW5wdXQsIDAsIHNpemVv ZihpbnB1dCkpOworCQlpbnB1dC5jbGtfaWQgPSBTTVUxMV9TWVNQTEwwX0VDTEtfSUQ7CisJCWlu cHV0LmNvbW1hbmQgPSBHRVRfU01VX0NMT0NLX0lORk9fVjNfMV9HRVRfQ0xPQ0tfRlJFUTsKKwkJ aW5kZXggPSBnZXRfaW5kZXhfaW50b19tYXN0ZXJfdGFibGUoYXRvbV9tYXN0ZXJfbGlzdF9vZl9j b21tYW5kX2Z1bmN0aW9uc192Ml8xLAorCQkJCQkJICAgIGdldHNtdWNsb2NraW5mbyk7CisKKwkJ cmV0ID0gYW1kZ3B1X2F0b21fZXhlY3V0ZV90YWJsZShhZGV2LT5tb2RlX2luZm8uYXRvbV9jb250 ZXh0LCBpbmRleCwKKwkJCQkJCSh1aW50MzJfdCAqKSZpbnB1dCk7CisJCWlmIChyZXQpCisJCQly ZXR1cm4gLUVJTlZBTDsKKworCQlvdXRwdXQgPSAoc3RydWN0IGF0b21fZ2V0X3NtdV9jbG9ja19p bmZvX291dHB1dF9wYXJhbWV0ZXJzX3YzXzEgKikmaW5wdXQ7CisJCXNtdS0+c211X3RhYmxlLmJv b3RfdmFsdWVzLmVjbGsgPSBsZTMyX3RvX2NwdShvdXRwdXQtPmF0b21fc211X291dHB1dGNsa2Zy ZXEuc211X2Nsb2NrX2ZyZXFfaHopIC8gMTAwMDA7CisKKwkJbWVtc2V0KCZpbnB1dCwgMCwgc2l6 ZW9mKGlucHV0KSk7CisJCWlucHV0LmNsa19pZCA9IFNNVTExX1NZU1BMTDBfVkNMS19JRDsKKwkJ aW5wdXQuY29tbWFuZCA9IEdFVF9TTVVfQ0xPQ0tfSU5GT19WM18xX0dFVF9DTE9DS19GUkVROwor CQlpbmRleCA9IGdldF9pbmRleF9pbnRvX21hc3Rlcl90YWJsZShhdG9tX21hc3Rlcl9saXN0X29m X2NvbW1hbmRfZnVuY3Rpb25zX3YyXzEsCisJCQkJCQkgICAgZ2V0c211Y2xvY2tpbmZvKTsKKwor CQlyZXQgPSBhbWRncHVfYXRvbV9leGVjdXRlX3RhYmxlKGFkZXYtPm1vZGVfaW5mby5hdG9tX2Nv bnRleHQsIGluZGV4LAorCQkJCQkJKHVpbnQzMl90ICopJmlucHV0KTsKKwkJaWYgKHJldCkKKwkJ CXJldHVybiAtRUlOVkFMOworCisJCW91dHB1dCA9IChzdHJ1Y3QgYXRvbV9nZXRfc211X2Nsb2Nr X2luZm9fb3V0cHV0X3BhcmFtZXRlcnNfdjNfMSAqKSZpbnB1dDsKKwkJc211LT5zbXVfdGFibGUu Ym9vdF92YWx1ZXMudmNsayA9IGxlMzJfdG9fY3B1KG91dHB1dC0+YXRvbV9zbXVfb3V0cHV0Y2xr ZnJlcS5zbXVfY2xvY2tfZnJlcV9oeikgLyAxMDAwMDsKKworCQltZW1zZXQoJmlucHV0LCAwLCBz aXplb2YoaW5wdXQpKTsKKwkJaW5wdXQuY2xrX2lkID0gU01VMTFfU1lTUExMMF9EQ0xLX0lEOwor CQlpbnB1dC5jb21tYW5kID0gR0VUX1NNVV9DTE9DS19JTkZPX1YzXzFfR0VUX0NMT0NLX0ZSRVE7 CisJCWluZGV4ID0gZ2V0X2luZGV4X2ludG9fbWFzdGVyX3RhYmxlKGF0b21fbWFzdGVyX2xpc3Rf b2ZfY29tbWFuZF9mdW5jdGlvbnNfdjJfMSwKKwkJCQkJCSAgICBnZXRzbXVjbG9ja2luZm8pOwor CisJCXJldCA9IGFtZGdwdV9hdG9tX2V4ZWN1dGVfdGFibGUoYWRldi0+bW9kZV9pbmZvLmF0b21f Y29udGV4dCwgaW5kZXgsCisJCQkJCQkodWludDMyX3QgKikmaW5wdXQpOworCQlpZiAocmV0KQor CQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJb3V0cHV0ID0gKHN0cnVjdCBhdG9tX2dldF9zbXVfY2xv Y2tfaW5mb19vdXRwdXRfcGFyYW1ldGVyc192M18xICopJmlucHV0OworCQlzbXUtPnNtdV90YWJs ZS5ib290X3ZhbHVlcy5kY2xrID0gbGUzMl90b19jcHUob3V0cHV0LT5hdG9tX3NtdV9vdXRwdXRj bGtmcmVxLnNtdV9jbG9ja19mcmVxX2h6KSAvIDEwMDAwOworCX0KKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IHNtdV92MTFfMF9ub3RpZnlfbWVtb3J5X3Bvb2xfbG9jYXRpb24oc3RydWN0 IHNtdV9jb250ZXh0ICpzbXUpCit7CisJc3RydWN0IHNtdV90YWJsZV9jb250ZXh0ICpzbXVfdGFi bGUgPSAmc211LT5zbXVfdGFibGU7CisJc3RydWN0IHNtdV90YWJsZSAqbWVtb3J5X3Bvb2wgPSAm c211X3RhYmxlLT5tZW1vcnlfcG9vbDsKKwlpbnQgcmV0ID0gMDsKKwl1aW50NjRfdCBhZGRyZXNz OworCXVpbnQzMl90IGFkZHJlc3NfbG93LCBhZGRyZXNzX2hpZ2g7CisKKwlpZiAobWVtb3J5X3Bv b2wtPnNpemUgPT0gMCB8fCBtZW1vcnlfcG9vbC0+Y3B1X2FkZHIgPT0gTlVMTCkKKwkJcmV0dXJu IHJldDsKKworCWFkZHJlc3MgPSAodWludHB0cl90KW1lbW9yeV9wb29sLT5jcHVfYWRkcjsKKwlh ZGRyZXNzX2hpZ2ggPSAodWludDMyX3QpdXBwZXJfMzJfYml0cyhhZGRyZXNzKTsKKwlhZGRyZXNz X2xvdyAgPSAodWludDMyX3QpbG93ZXJfMzJfYml0cyhhZGRyZXNzKTsKKworCXJldCA9IHNtdV9z ZW5kX3NtY19tc2dfd2l0aF9wYXJhbShzbXUsCisJCQkJCSAgU01VX01TR19TZXRTeXN0ZW1WaXJ0 dWFsRHJhbUFkZHJIaWdoLAorCQkJCQkgIGFkZHJlc3NfaGlnaCk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKwlyZXQgPSBzbXVfc2VuZF9zbWNfbXNnX3dpdGhfcGFyYW0oc211LAorCQkJCQkg IFNNVV9NU0dfU2V0U3lzdGVtVmlydHVhbERyYW1BZGRyTG93LAorCQkJCQkgIGFkZHJlc3NfbG93 KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJYWRkcmVzcyA9IG1lbW9yeV9wb29sLT5t Y19hZGRyZXNzOworCWFkZHJlc3NfaGlnaCA9ICh1aW50MzJfdCl1cHBlcl8zMl9iaXRzKGFkZHJl c3MpOworCWFkZHJlc3NfbG93ICA9ICh1aW50MzJfdClsb3dlcl8zMl9iaXRzKGFkZHJlc3MpOwor CisJcmV0ID0gc211X3NlbmRfc21jX21zZ193aXRoX3BhcmFtKHNtdSwgU01VX01TR19EcmFtTG9n U2V0RHJhbUFkZHJIaWdoLAorCQkJCQkgIGFkZHJlc3NfaGlnaCk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKwlyZXQgPSBzbXVfc2VuZF9zbWNfbXNnX3dpdGhfcGFyYW0oc211LCBTTVVfTVNH X0RyYW1Mb2dTZXREcmFtQWRkckxvdywKKwkJCQkJICBhZGRyZXNzX2xvdyk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKwlyZXQgPSBzbXVfc2VuZF9zbWNfbXNnX3dpdGhfcGFyYW0oc211LCBT TVVfTVNHX0RyYW1Mb2dTZXREcmFtU2l6ZSwKKwkJCQkJICAodWludDMyX3QpbWVtb3J5X3Bvb2wt PnNpemUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50IHNtdV92MTFfMF9jaGVja19wcHRhYmxlKHN0cnVjdCBzbXVfY29udGV4dCAqc211 KQoreworCWludCByZXQ7CisKKwlyZXQgPSBzbXVfY2hlY2tfcG93ZXJwbGF5X3RhYmxlKHNtdSk7 CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzbXVfdjExXzBfcGFyc2VfcHB0YWJsZShz dHJ1Y3Qgc211X2NvbnRleHQgKnNtdSkKK3sKKwlpbnQgcmV0OworCisJc3RydWN0IHNtdV90YWJs ZV9jb250ZXh0ICp0YWJsZV9jb250ZXh0ID0gJnNtdS0+c211X3RhYmxlOworCisJaWYgKHRhYmxl X2NvbnRleHQtPmRyaXZlcl9wcHRhYmxlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXRhYmxlX2Nv bnRleHQtPmRyaXZlcl9wcHRhYmxlID0ga3phbGxvYyhzaXplb2YoUFBUYWJsZV90KSwgR0ZQX0tF Uk5FTCk7CisKKwlpZiAoIXRhYmxlX2NvbnRleHQtPmRyaXZlcl9wcHRhYmxlKQorCQlyZXR1cm4g LUVOT01FTTsKKworCXJldCA9IHNtdV9zdG9yZV9wb3dlcnBsYXlfdGFibGUoc211KTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhbWRncHVfZW11X21vZGUgIT0gMSkKKwkJ cmV0ID0gc211X2FwcGVuZF9wb3dlcnBsYXlfdGFibGUoc211KTsKKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQgc211X3YxMV8wX3BvcHVsYXRlX3NtY19wcHRhYmxlKHN0cnVjdCBzbXVf Y29udGV4dCAqc211KQoreworCWludCByZXQ7CisKKwlyZXQgPSBzbXVfc2V0X2RlZmF1bHRfZHBt X3RhYmxlKHNtdSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNtdV92MTFfMF93 cml0ZV9wcHRhYmxlKHN0cnVjdCBzbXVfY29udGV4dCAqc211KQoreworCXN0cnVjdCBzbXVfdGFi bGVfY29udGV4dCAqdGFibGVfY29udGV4dCA9ICZzbXUtPnNtdV90YWJsZTsKKwlpbnQgcmV0ID0g MDsKKworCXJldCA9IHNtdV91cGRhdGVfdGFibGUoc211LCBUQUJMRV9QUFRBQkxFLCB0YWJsZV9j b250ZXh0LT5kcml2ZXJfcHB0YWJsZSwgdHJ1ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50IHNtdV92MTFfMF9zZXRfZGVlcF9zbGVlcF9kY2VmY2xrKHN0cnVjdCBzbXVfY29udGV4 dCAqc211LCB1aW50MzJfdCBjbGspCit7CisJaW50IHJldDsKKworCXJldCA9IHNtdV9zZW5kX3Nt Y19tc2dfd2l0aF9wYXJhbShzbXUsCisJCQkJCSAgU01VX01TR19TZXRNaW5EZWVwU2xlZXBEY2Vm Y2xrLCBjbGspOworCWlmIChyZXQpCisJCXByX2VycigiU01VMTEgYXR0ZW1wdCB0byBzZXQgZGl2 aWRlciBmb3IgRENFRkNMSyBGYWlsZWQhIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IHNtdV92MTFfMF9zZXRfbWluX2RjZWZfZGVlcF9zbGVlcChzdHJ1Y3Qgc211X2NvbnRleHQg KnNtdSkKK3sKKwlzdHJ1Y3Qgc211X3RhYmxlX2NvbnRleHQgKnRhYmxlX2NvbnRleHQgPSAmc211 LT5zbXVfdGFibGU7CisKKwlpZiAoIXNtdS0+cG1fZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisJaWYg KCF0YWJsZV9jb250ZXh0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzbXVfc2V0X2Rl ZXBfc2xlZXBfZGNlZmNsayhzbXUsCisJCQkJCSAgdGFibGVfY29udGV4dC0+Ym9vdF92YWx1ZXMu ZGNlZmNsayAvIDEwMCk7Cit9CisKK3N0YXRpYyBpbnQgc211X3YxMV8wX3NldF90b29sX3RhYmxl X2xvY2F0aW9uKHN0cnVjdCBzbXVfY29udGV4dCAqc211KQoreworCWludCByZXQgPSAwOworCXN0 cnVjdCBzbXVfdGFibGUgKnRvb2xfdGFibGUgPSAmc211LT5zbXVfdGFibGUudGFibGVzW1RBQkxF X1BNU1RBVFVTTE9HXTsKKworCWlmICh0b29sX3RhYmxlLT5tY19hZGRyZXNzKSB7CisJCXJldCA9 IHNtdV9zZW5kX3NtY19tc2dfd2l0aF9wYXJhbShzbXUsCisJCQkJU01VX01TR19TZXRUb29sc0Ry YW1BZGRySGlnaCwKKwkJCQl1cHBlcl8zMl9iaXRzKHRvb2xfdGFibGUtPm1jX2FkZHJlc3MpKTsK KwkJaWYgKCFyZXQpCisJCQlyZXQgPSBzbXVfc2VuZF9zbWNfbXNnX3dpdGhfcGFyYW0oc211LAor CQkJCVNNVV9NU0dfU2V0VG9vbHNEcmFtQWRkckxvdywKKwkJCQlsb3dlcl8zMl9iaXRzKHRvb2xf dGFibGUtPm1jX2FkZHJlc3MpKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 IHNtdV92MTFfMF9pbml0X2Rpc3BsYXkoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUpCit7CisJaW50 IHJldCA9IDA7CisKKwlpZiAoIXNtdS0+cG1fZW5hYmxlZCkKKwkJcmV0dXJuIHJldDsKKworCWlm IChzbXUtPmFkZXYtPmFzaWNfdHlwZSAhPSBDSElQX0FSQ1RVUlVTKQorCQlyZXQgPSBzbXVfc2Vu ZF9zbWNfbXNnX3dpdGhfcGFyYW0oc211LCBTTVVfTVNHX051bU9mRGlzcGxheXMsIDApOworCisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzbXVfdjExXzBfdXBkYXRlX2ZlYXR1cmVfZW5h YmxlX3N0YXRlKHN0cnVjdCBzbXVfY29udGV4dCAqc211LCB1aW50MzJfdCBmZWF0dXJlX2lkLCBi b29sIGVuYWJsZWQpCit7CisJdWludDMyX3QgZmVhdHVyZV9sb3cgPSAwLCBmZWF0dXJlX2hpZ2gg PSAwOworCWludCByZXQgPSAwOworCisJaWYgKCFzbXUtPnBtX2VuYWJsZWQpCisJCXJldHVybiBy ZXQ7CisJaWYgKGZlYXR1cmVfaWQgPj0gMCAmJiBmZWF0dXJlX2lkIDwgMzEpCisJCWZlYXR1cmVf bG93ID0gKDEgPDwgZmVhdHVyZV9pZCk7CisJZWxzZSBpZiAoZmVhdHVyZV9pZCA+IDMxICYmIGZl YXR1cmVfaWQgPCA2MykKKwkJZmVhdHVyZV9oaWdoID0gKDEgPDwgZmVhdHVyZV9pZCk7CisJZWxz ZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChlbmFibGVkKSB7CisJCXJldCA9IHNtdV9zZW5k X3NtY19tc2dfd2l0aF9wYXJhbShzbXUsIFNNVV9NU0dfRW5hYmxlU211RmVhdHVyZXNMb3csCisJ CQkJCQkgIGZlYXR1cmVfbG93KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXJldCA9 IHNtdV9zZW5kX3NtY19tc2dfd2l0aF9wYXJhbShzbXUsIFNNVV9NU0dfRW5hYmxlU211RmVhdHVy ZXNIaWdoLAorCQkJCQkJICBmZWF0dXJlX2hpZ2gpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJl dDsKKworCX0gZWxzZSB7CisJCXJldCA9IHNtdV9zZW5kX3NtY19tc2dfd2l0aF9wYXJhbShzbXUs IFNNVV9NU0dfRGlzYWJsZVNtdUZlYXR1cmVzTG93LAorCQkJCQkJICBmZWF0dXJlX2xvdyk7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlyZXQgPSBzbXVfc2VuZF9zbWNfbXNnX3dpdGhf cGFyYW0oc211LCBTTVVfTVNHX0Rpc2FibGVTbXVGZWF0dXJlc0hpZ2gsCisJCQkJCQkgIGZlYXR1 cmVfaGlnaCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJfQorCisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGludCBzbXVfdjExXzBfc2V0X2FsbG93ZWRfbWFzayhzdHJ1Y3Qgc211 X2NvbnRleHQgKnNtdSkKK3sKKwlzdHJ1Y3Qgc211X2ZlYXR1cmUgKmZlYXR1cmUgPSAmc211LT5z bXVfZmVhdHVyZTsKKwlpbnQgcmV0ID0gMDsKKwl1aW50MzJfdCBmZWF0dXJlX21hc2tbMl07CisK KwltdXRleF9sb2NrKCZmZWF0dXJlLT5tdXRleCk7CisJaWYgKGJpdG1hcF9lbXB0eShmZWF0dXJl LT5hbGxvd2VkLCBTTVVfRkVBVFVSRV9NQVgpIHx8IGZlYXR1cmUtPmZlYXR1cmVfbnVtIDwgNjQp CisJCWdvdG8gZmFpbGVkOworCisJYml0bWFwX2NvcHkoKHVuc2lnbmVkIGxvbmcgKilmZWF0dXJl X21hc2ssIGZlYXR1cmUtPmFsbG93ZWQsIDY0KTsKKworCXJldCA9IHNtdV9zZW5kX3NtY19tc2df d2l0aF9wYXJhbShzbXUsIFNNVV9NU0dfU2V0QWxsb3dlZEZlYXR1cmVzTWFza0hpZ2gsCisJCQkJ CSAgZmVhdHVyZV9tYXNrWzFdKTsKKwlpZiAocmV0KSB7CisJCXByaW50aygiamFjay0tPiBzZW5k IHNldF9hbGxvd2VkX2hpZ2ggRmFpbGVkIVxuICIpOworCQlnb3RvIGZhaWxlZDsKKwl9IGVsc2Ug eworCQlwcmludGsoImphY2stLT4gc2VuZCBzZXRfYWxsb3dlZF9oaWdoICBEb25lIVxuICIpOwor CX0KKworCXJldCA9IHNtdV9zZW5kX3NtY19tc2dfd2l0aF9wYXJhbShzbXUsIFNNVV9NU0dfU2V0 QWxsb3dlZEZlYXR1cmVzTWFza0xvdywKKwkJCQkJICBmZWF0dXJlX21hc2tbMF0pOworCWlmIChy ZXQpIHsKKwkJcHJpbnRrKCJqYWNrLS0+IHNlbmQgc2V0X2FsbG93ZWRfbG93IEZhaWxlZCFcbiAi KTsKKwkJZ290byBmYWlsZWQ7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCJqYWNrLS0+IHNlbmQgc2V0 X2FsbG93ZWRfbG93ICBEb25lIVxuICIpOworCX0KKworZmFpbGVkOgorCW11dGV4X3VubG9jaygm ZmVhdHVyZS0+bXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc211X3YxMV8w X2dldF9lbmFibGVkX21hc2soc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsCisJCQkJICAgICAgdWlu dDMyX3QgKmZlYXR1cmVfbWFzaywgdWludDMyX3QgbnVtKQoreworCXVpbnQzMl90IGZlYXR1cmVf bWFza19oaWdoID0gMCwgZmVhdHVyZV9tYXNrX2xvdyA9IDA7CisJaW50IHJldCA9IDA7CisKKwlp ZiAoIWZlYXR1cmVfbWFzayB8fCBudW0gPCAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9 IHNtdV9zZW5kX3NtY19tc2coc211LCBTTVVfTVNHX0dldEVuYWJsZWRTbXVGZWF0dXJlc0hpZ2gp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gc211X3JlYWRfc21jX2FyZyhzbXUs ICZmZWF0dXJlX21hc2tfaGlnaCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9 IHNtdV9zZW5kX3NtY19tc2coc211LCBTTVVfTVNHX0dldEVuYWJsZWRTbXVGZWF0dXJlc0xvdyk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBzbXVfcmVhZF9zbWNfYXJnKHNtdSwg JmZlYXR1cmVfbWFza19sb3cpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmZWF0dXJl X21hc2tbMF0gPSBmZWF0dXJlX21hc2tfbG93OworCWZlYXR1cmVfbWFza1sxXSA9IGZlYXR1cmVf bWFza19oaWdoOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGJvb2wgc211X3YxMV8wX2lz X2RwbV9ydW5uaW5nKHN0cnVjdCBzbXVfY29udGV4dCAqc211KQoreworCWludCByZXQgPSAwOwor CXVpbnQzMl90IGZlYXR1cmVfbWFza1syXTsKKwl1bnNpZ25lZCBsb25nIGZlYXR1cmVfZW5hYmxl ZDsKKwlyZXQgPSBzbXVfdjExXzBfZ2V0X2VuYWJsZWRfbWFzayhzbXUsIGZlYXR1cmVfbWFzaywg Mik7CisJZmVhdHVyZV9lbmFibGVkID0gKHVuc2lnbmVkIGxvbmcpKCh1aW50NjRfdClmZWF0dXJl X21hc2tbMF0gfAorCQkJICAgKCh1aW50NjRfdClmZWF0dXJlX21hc2tbMV0gPDwgMzIpKTsKKwly ZXR1cm4gISEoZmVhdHVyZV9lbmFibGVkICYgU01DX0RQTV9GRUFUVVJFKTsKK30KKworc3RhdGlj IGludCBzbXVfdjExXzBfc3lzdGVtX2ZlYXR1cmVzX2NvbnRyb2woc3RydWN0IHNtdV9jb250ZXh0 ICpzbXUsCisJCQkJCSAgICAgYm9vbCBlbikKK3sKKwlzdHJ1Y3Qgc211X2ZlYXR1cmUgKmZlYXR1 cmUgPSAmc211LT5zbXVfZmVhdHVyZTsKKwl1aW50MzJfdCBmZWF0dXJlX21hc2tbMl07CisJaW50 IHJldCA9IDA7CisKKwlpZiAoc211LT5wbV9lbmFibGVkKSB7CisJCXJldCA9IHNtdV9zZW5kX3Nt Y19tc2coc211LCAoZW4gPyBTTVVfTVNHX0VuYWJsZUFsbFNtdUZlYXR1cmVzIDoKKwkJCQkJICAg ICBTTVVfTVNHX0Rpc2FibGVBbGxTbXVGZWF0dXJlcykpOworCQlpZiAocmV0KSB7CisJCQlwcmlu dGsoImphY2stLT4gc2VuZCBlbmFibGVfYWxsX2ZlYXR1cmVzIEZhaWxlZCFcbiAiKTsKKwkJCXJl dHVybiByZXQ7CisJCX0gZWxzZSB7CisJCQlwcmludGsoImphY2stLT4gc2VuZCBlbmFibGVfYWxs X2ZlYXR1cmVzIERvbmUhXG4gIik7CisJCX0KKwl9CisKKwlyZXQgPSBzbXVfZmVhdHVyZV9nZXRf ZW5hYmxlZF9tYXNrKHNtdSwgZmVhdHVyZV9tYXNrLCAyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJYml0bWFwX2NvcHkoZmVhdHVyZS0+ZW5hYmxlZCwgKHVuc2lnbmVkIGxvbmcgKikm ZmVhdHVyZV9tYXNrLAorCQkgICAgZmVhdHVyZS0+ZmVhdHVyZV9udW0pOworCWJpdG1hcF9jb3B5 KGZlYXR1cmUtPnN1cHBvcnRlZCwgKHVuc2lnbmVkIGxvbmcgKikmZmVhdHVyZV9tYXNrLAorCQkg ICAgZmVhdHVyZS0+ZmVhdHVyZV9udW0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCBzbXVfdjExXzBfbm90aWZ5X2Rpc3BsYXlfY2hhbmdlKHN0cnVjdCBzbXVfY29udGV4dCAqc211 KQoreworCWludCByZXQgPSAwOworCisJaWYgKCFzbXUtPnBtX2VuYWJsZWQpCisJCXJldHVybiBy ZXQ7CisJaWYgKHNtdV9mZWF0dXJlX2lzX2VuYWJsZWQoc211LCBGRUFUVVJFX0RQTV9VQ0xLX0JJ VCkpCisJICAgIHJldCA9IHNtdV9zZW5kX3NtY19tc2dfd2l0aF9wYXJhbShzbXUsIFNNVV9NU0df U2V0VWNsa0Zhc3RTd2l0Y2gsIDEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAor c211X3YxMV8wX2dldF9tYXhfc3VzdGFpbmFibGVfY2xvY2soc3RydWN0IHNtdV9jb250ZXh0ICpz bXUsIHVpbnQzMl90ICpjbG9jaywKKwkJCQkgICAgUFBDTEtfZSBjbG9ja19zZWxlY3QpCit7CisJ aW50IHJldCA9IDA7CisKKwlpZiAoIXNtdS0+cG1fZW5hYmxlZCkKKwkJcmV0dXJuIHJldDsKKwly ZXQgPSBzbXVfc2VuZF9zbWNfbXNnX3dpdGhfcGFyYW0oc211LCBTTVVfTVNHX0dldERjTW9kZU1h eERwbUZyZXEsCisJCQkJCSAgY2xvY2tfc2VsZWN0IDw8IDE2KTsKKwlpZiAocmV0KSB7CisJCXBy X2VycigiW0dldE1heFN1c3RhaW5hYmxlQ2xvY2tdIEZhaWxlZCB0byBnZXQgbWF4IERDIGNsb2Nr IGZyb20gU01DISIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNtdV9yZWFkX3NtY19h cmcoc211LCBjbG9jayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgqY2xvY2sg IT0gMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBpZiBEQyBsaW1pdCBpcyB6ZXJvLCByZXR1cm4gQUMg bGltaXQgKi8KKwlyZXQgPSBzbXVfc2VuZF9zbWNfbXNnX3dpdGhfcGFyYW0oc211LCBTTVVfTVNH X0dldE1heERwbUZyZXEsCisJCQkJCSAgY2xvY2tfc2VsZWN0IDw8IDE2KTsKKwlpZiAocmV0KSB7 CisJCXByX2VycigiW0dldE1heFN1c3RhaW5hYmxlQ2xvY2tdIGZhaWxlZCB0byBnZXQgbWF4IEFD IGNsb2NrIGZyb20gU01DISIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNtdV9yZWFk X3NtY19hcmcoc211LCBjbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNt dV92MTFfMF9pbml0X21heF9zdXN0YWluYWJsZV9jbG9ja3Moc3RydWN0IHNtdV9jb250ZXh0ICpz bXUpCit7CisJc3RydWN0IHNtdV8xMV8wX21heF9zdXN0YWluYWJsZV9jbG9ja3MgKm1heF9zdXN0 YWluYWJsZV9jbG9ja3M7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBzbXUtPmFkZXY7 CisJaW50IHJldCA9IDA7CisKKwltYXhfc3VzdGFpbmFibGVfY2xvY2tzID0ga3phbGxvYyhzaXpl b2Yoc3RydWN0IHNtdV8xMV8wX21heF9zdXN0YWluYWJsZV9jbG9ja3MpLAorCQkJCQkgR0ZQX0tF Uk5FTCk7CisJc211LT5zbXVfdGFibGUubWF4X3N1c3RhaW5hYmxlX2Nsb2NrcyA9ICh2b2lkICop bWF4X3N1c3RhaW5hYmxlX2Nsb2NrczsKKworCW1heF9zdXN0YWluYWJsZV9jbG9ja3MtPnVjbG9j ayA9IHNtdS0+c211X3RhYmxlLmJvb3RfdmFsdWVzLnVjbGsgLyAxMDA7CisJbWF4X3N1c3RhaW5h YmxlX2Nsb2Nrcy0+c29jX2Nsb2NrID0gc211LT5zbXVfdGFibGUuYm9vdF92YWx1ZXMuc29jY2xr IC8gMTAwOworCWlmIChhZGV2LT5hc2ljX3R5cGUgIT0gQ0hJUF9BUkNUVVJVUykgeworCQltYXhf c3VzdGFpbmFibGVfY2xvY2tzLT5kY2VmX2Nsb2NrID0gc211LT5zbXVfdGFibGUuYm9vdF92YWx1 ZXMuZGNlZmNsayAvIDEwMDsKKwkJbWF4X3N1c3RhaW5hYmxlX2Nsb2Nrcy0+ZGlzcGxheV9jbG9j ayA9IDB4RkZGRkZGRkY7CisJCW1heF9zdXN0YWluYWJsZV9jbG9ja3MtPnBoeV9jbG9jayA9IDB4 RkZGRkZGRkY7CisJCW1heF9zdXN0YWluYWJsZV9jbG9ja3MtPnBpeGVsX2Nsb2NrID0gMHhGRkZG RkZGRjsKKwl9CisKKwlpZiAoc211X2ZlYXR1cmVfaXNfZW5hYmxlZChzbXUsIEZFQVRVUkVfRFBN X1VDTEtfQklUKSkgeworCQlyZXQgPSBzbXVfdjExXzBfZ2V0X21heF9zdXN0YWluYWJsZV9jbG9j ayhzbXUsCisJCQkJCQkJICAmKG1heF9zdXN0YWluYWJsZV9jbG9ja3MtPnVjbG9jayksCisJCQkJ CQkJICBQUENMS19VQ0xLKTsKKwkJaWYgKHJldCkgeworCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0 byBnZXQgbWF4IFVDTEsgZnJvbSBTTUMhIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQlyZXR1 cm4gcmV0OworCQl9CisJfQorCisJaWYgKHNtdV9mZWF0dXJlX2lzX2VuYWJsZWQoc211LCBGRUFU VVJFX0RQTV9TT0NDTEtfQklUKSkgeworCQlyZXQgPSBzbXVfdjExXzBfZ2V0X21heF9zdXN0YWlu YWJsZV9jbG9jayhzbXUsCisJCQkJCQkJICAmKG1heF9zdXN0YWluYWJsZV9jbG9ja3MtPnNvY19j bG9jayksCisJCQkJCQkJICBQUENMS19TT0NDTEspOworCQlpZiAocmV0KSB7CisJCQlwcl9lcnIo Ilslc10gZmFpbGVkIHRvIGdldCBtYXggU09DQ0xLIGZyb20gU01DISIsCisJCQkgICAgICAgX19m dW5jX18pOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWlmIChtYXhfc3VzdGFpbmFibGVf Y2xvY2tzLT5zb2NfY2xvY2sgPCBtYXhfc3VzdGFpbmFibGVfY2xvY2tzLT51Y2xvY2spCisJCW1h eF9zdXN0YWluYWJsZV9jbG9ja3MtPnVjbG9jayA9IG1heF9zdXN0YWluYWJsZV9jbG9ja3MtPnNv Y19jbG9jazsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtdV92MTFfMF9nZXRfY3Vy cmVudF9jbGtfZnJlcShzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSwgdWludDMyX3QgY2xrX2lkLCB1 aW50MzJfdCAqdmFsdWUpCit7CisJc3RhdGljIFNtdU1ldHJpY3NfdCBtZXRyaWNzID0gezB9Owor CWludCByZXQgPSAwOworCisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQg PSBzbXVfdXBkYXRlX3RhYmxlKHNtdSwgVEFCTEVfU01VX01FVFJJQ1MsICh2b2lkICopJm1ldHJp Y3MsIGZhbHNlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJKnZhbHVlID0gbWV0cmlj cy5DdXJyQ2xvY2tbY2xrX2lkXTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc211 X3YxMV8wX2dldF90aGVybWFsX3JhbmdlKHN0cnVjdCBzbXVfY29udGV4dCAqc211LAorCQkJCXN0 cnVjdCBQUF9UZW1wZXJhdHVyZVJhbmdlICpyYW5nZSkKK3sKKwlQUFRhYmxlX3QgKnBwdGFibGUg PSBzbXUtPnNtdV90YWJsZS5kcml2ZXJfcHB0YWJsZTsKKwltZW1jcHkocmFuZ2UsICZTTVU3VGhl cm1hbFdpdGhEZWxheVBvbGljeVswXSwgc2l6ZW9mKHN0cnVjdCBQUF9UZW1wZXJhdHVyZVJhbmdl KSk7CisKKwlyYW5nZS0+bWF4ID0gcHB0YWJsZS0+VGVkZ2VMaW1pdCAqCisJCVBQX1RFTVBFUkFU VVJFX1VOSVRTX1BFUl9DRU5USUdSQURFUzsKKwlyYW5nZS0+ZWRnZV9lbWVyZ2VuY3lfbWF4ID0g KHBwdGFibGUtPlRlZGdlTGltaXQgKyBDVEZfT0ZGU0VUX0VER0UpICoKKwkJUFBfVEVNUEVSQVRV UkVfVU5JVFNfUEVSX0NFTlRJR1JBREVTOworCXJhbmdlLT5ob3RzcG90X2NyaXRfbWF4ID0gcHB0 YWJsZS0+VGhvdHNwb3RMaW1pdCAqCisJCVBQX1RFTVBFUkFUVVJFX1VOSVRTX1BFUl9DRU5USUdS QURFUzsKKwlyYW5nZS0+aG90c3BvdF9lbWVyZ2VuY3lfbWF4ID0gKHBwdGFibGUtPlRob3RzcG90 TGltaXQgKyBDVEZfT0ZGU0VUX0hPVFNQT1QpICoKKwkJUFBfVEVNUEVSQVRVUkVfVU5JVFNfUEVS X0NFTlRJR1JBREVTOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc211X3YxMV8wX3Nl dF90aGVybWFsX3JhbmdlKHN0cnVjdCBzbXVfY29udGV4dCAqc211LAorCQkJc3RydWN0IFBQX1Rl bXBlcmF0dXJlUmFuZ2UgKnJhbmdlKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0g c211LT5hZGV2OworCWludCBsb3cgPSBTTVUxMV9USEVSTUFMX01JTklNVU1fQUxFUlRfVEVNUCAq CisJCVBQX1RFTVBFUkFUVVJFX1VOSVRTX1BFUl9DRU5USUdSQURFUzsKKwlpbnQgaGlnaCA9IFNN VTExX1RIRVJNQUxfTUFYSU1VTV9BTEVSVF9URU1QICoKKwkJUFBfVEVNUEVSQVRVUkVfVU5JVFNf UEVSX0NFTlRJR1JBREVTOworCXVpbnQzMl90IHZhbDsKKworCWlmIChsb3cgPCByYW5nZS0+bWlu KQorCQlsb3cgPSByYW5nZS0+bWluOworCWlmIChoaWdoID4gcmFuZ2UtPm1heCkKKwkJaGlnaCA9 IHJhbmdlLT5tYXg7CisKKwlpZiAobG93ID4gaGlnaCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2 YWwgPSBSUkVHMzJfU09DMTUoVEhNLCAwLCBtbVRITV9USEVSTUFMX0lOVF9DVFJMKTsKKwl2YWwg PSBSRUdfU0VUX0ZJRUxEKHZhbCwgVEhNX1RIRVJNQUxfSU5UX0NUUkwsIE1BWF9JSF9DUkVESVQs IDUpOworCXZhbCA9IFJFR19TRVRfRklFTEQodmFsLCBUSE1fVEhFUk1BTF9JTlRfQ1RSTCwgVEhF Uk1fSUhfSFdfRU5BLCAxKTsKKwl2YWwgPSBSRUdfU0VUX0ZJRUxEKHZhbCwgVEhNX1RIRVJNQUxf SU5UX0NUUkwsIERJR19USEVSTV9JTlRILCAoaGlnaCAvIFBQX1RFTVBFUkFUVVJFX1VOSVRTX1BF Ul9DRU5USUdSQURFUykpOworCXZhbCA9IFJFR19TRVRfRklFTEQodmFsLCBUSE1fVEhFUk1BTF9J TlRfQ1RSTCwgRElHX1RIRVJNX0lOVEwsIChsb3cgLyBQUF9URU1QRVJBVFVSRV9VTklUU19QRVJf Q0VOVElHUkFERVMpKTsKKwl2YWwgPSB2YWwgJiAoflRITV9USEVSTUFMX0lOVF9DVFJMX19USEVS TV9UUklHR0VSX01BU0tfTUFTSyk7CisKKwlXUkVHMzJfU09DMTUoVEhNLCAwLCBtbVRITV9USEVS TUFMX0lOVF9DVFJMLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc211X3Yx MV8wX2VuYWJsZV90aGVybWFsX2FsZXJ0KHN0cnVjdCBzbXVfY29udGV4dCAqc211KQoreworCXN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gc211LT5hZGV2OworCXVpbnQzMl90IHZhbCA9IDA7 CisKKwl2YWwgfD0gKDEgPDwgVEhNX1RIRVJNQUxfSU5UX0VOQV9fVEhFUk1fSU5USF9DTFJfX1NI SUZUKTsKKwl2YWwgfD0gKDEgPDwgVEhNX1RIRVJNQUxfSU5UX0VOQV9fVEhFUk1fSU5UTF9DTFJf X1NISUZUKTsKKwl2YWwgfD0gKDEgPDwgVEhNX1RIRVJNQUxfSU5UX0VOQV9fVEhFUk1fVFJJR0dF Ul9DTFJfX1NISUZUKTsKKworCVdSRUczMl9TT0MxNShUSE0sIDAsIG1tVEhNX1RIRVJNQUxfSU5U X0VOQSwgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtdV92MTFfMF9zZXRf dGhlcm1hbF9mYW5fdGFibGUoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUpCit7CisJaW50IHJldDsK KwlzdHJ1Y3Qgc211X3RhYmxlX2NvbnRleHQgKnRhYmxlX2NvbnRleHQgPSAmc211LT5zbXVfdGFi bGU7CisJUFBUYWJsZV90ICpwcHRhYmxlID0gdGFibGVfY29udGV4dC0+ZHJpdmVyX3BwdGFibGU7 CisKKwlyZXQgPSBzbXVfc2VuZF9zbWNfbXNnX3dpdGhfcGFyYW0oc211LCBTTVVfTVNHX1NldEZh blRlbXBlcmF0dXJlVGFyZ2V0LAorCQkJKHVpbnQzMl90KXBwdGFibGUtPkZhblRhcmdldFRlbXBl cmF0dXJlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc211X3YxMV8wX3N0YXJ0 X3RoZXJtYWxfY29udHJvbChzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSkKK3sKKwlpbnQgcmV0ID0g MDsKKwlzdHJ1Y3QgUFBfVGVtcGVyYXR1cmVSYW5nZSByYW5nZSA9IHsKKwkJVEVNUF9SQU5HRV9N SU4sCisJCVRFTVBfUkFOR0VfTUFYLAorCQlURU1QX1JBTkdFX01BWCwKKwkJVEVNUF9SQU5HRV9N SU4sCisJCVRFTVBfUkFOR0VfTUFYLAorCQlURU1QX1JBTkdFX01BWCwKKwkJVEVNUF9SQU5HRV9N SU4sCisJCVRFTVBfUkFOR0VfTUFYLAorCQlURU1QX1JBTkdFX01BWH07CisJc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYgPSBzbXUtPmFkZXY7CisKKwlpZiAoIXNtdS0+cG1fZW5hYmxlZCkKKwkJ cmV0dXJuIHJldDsKKwlzbXVfdjExXzBfZ2V0X3RoZXJtYWxfcmFuZ2Uoc211LCAmcmFuZ2UpOwor CisJaWYgKHNtdS0+c211X3RhYmxlLnRoZXJtYWxfY29udHJvbGxlcl90eXBlKSB7CisJCXJldCA9 IHNtdV92MTFfMF9zZXRfdGhlcm1hbF9yYW5nZShzbXUsICZyYW5nZSk7CisJCWlmIChyZXQpCisJ CQlyZXR1cm4gcmV0OworCisJCXJldCA9IHNtdV92MTFfMF9lbmFibGVfdGhlcm1hbF9hbGVydChz bXUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJaWYgKGFkZXYtPmFzaWNfdHlwZSAh PSBDSElQX0FSQ1RVUlVTKSB7CisJCQlyZXQgPSBzbXVfdjExXzBfc2V0X3RoZXJtYWxfZmFuX3Rh YmxlKHNtdSk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlhZGV2 LT5wbS5kcG0udGhlcm1hbC5taW5fdGVtcCA9IHJhbmdlLm1pbjsKKwlhZGV2LT5wbS5kcG0udGhl cm1hbC5tYXhfdGVtcCA9IHJhbmdlLm1heDsKKwlhZGV2LT5wbS5kcG0udGhlcm1hbC5tYXhfZWRn ZV9lbWVyZ2VuY3lfdGVtcCA9IHJhbmdlLmVkZ2VfZW1lcmdlbmN5X21heDsKKwlhZGV2LT5wbS5k cG0udGhlcm1hbC5taW5faG90c3BvdF90ZW1wID0gcmFuZ2UuaG90c3BvdF9taW47CisJYWRldi0+ cG0uZHBtLnRoZXJtYWwubWF4X2hvdHNwb3RfY3JpdF90ZW1wID0gcmFuZ2UuaG90c3BvdF9jcml0 X21heDsKKwlhZGV2LT5wbS5kcG0udGhlcm1hbC5tYXhfaG90c3BvdF9lbWVyZ2VuY3lfdGVtcCA9 IHJhbmdlLmhvdHNwb3RfZW1lcmdlbmN5X21heDsKKwlhZGV2LT5wbS5kcG0udGhlcm1hbC5taW5f bWVtX3RlbXAgPSByYW5nZS5tZW1fbWluOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCBzbXVfdjExXzBfZ2V0X21ldHJpY3NfdGFibGUoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsCisJ CVNtdU1ldHJpY3NfdCAqbWV0cmljc190YWJsZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICgh c211LT5tZXRyaWNzX3RpbWUgfHwgdGltZV9hZnRlcihqaWZmaWVzLCBzbXUtPm1ldHJpY3NfdGlt ZSArIEhaIC8gMTAwMCkpIHsKKwkJcmV0ID0gc211X3VwZGF0ZV90YWJsZShzbXUsIFRBQkxFX1NN VV9NRVRSSUNTLAorCQkJCSh2b2lkICopbWV0cmljc190YWJsZSwgZmFsc2UpOworCQlpZiAocmV0 KSB7CisJCQlwcl9pbmZvKCJGYWlsZWQgdG8gZXhwb3J0IFNNVSBtZXRyaWNzIHRhYmxlIVxuIik7 CisJCQlyZXR1cm4gcmV0OworCQl9CisJCW1lbWNweShzbXUtPm1ldHJpY3NfdGFibGUsIG1ldHJp Y3NfdGFibGUsIHNpemVvZihTbXVNZXRyaWNzX3QpKTsKKwkJc211LT5tZXRyaWNzX3RpbWUgPSBq aWZmaWVzOworCX0gZWxzZQorCQltZW1jcHkobWV0cmljc190YWJsZSwgc211LT5tZXRyaWNzX3Rh YmxlLCBzaXplb2YoU211TWV0cmljc190KSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IHNtdV92MTFfMF9nZXRfY3VycmVudF9hY3Rpdml0eV9wZXJjZW50KHN0cnVjdCBzbXVfY29u dGV4dCAqc211LAorCQkJCQkJICBlbnVtIGFtZF9wcF9zZW5zb3JzIHNlbnNvciwKKwkJCQkJCSAg dWludDMyX3QgKnZhbHVlKQoreworCWludCByZXQgPSAwOworCVNtdU1ldHJpY3NfdCBtZXRyaWNz OworCisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBzbXVfdjExXzBf Z2V0X21ldHJpY3NfdGFibGUoc211LCAmbWV0cmljcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCXN3aXRjaCAoc2Vuc29yKSB7CisJY2FzZSBBTURHUFVfUFBfU0VOU09SX0dQVV9MT0FE OgorCQkqdmFsdWUgPSBtZXRyaWNzLkF2ZXJhZ2VHZnhBY3Rpdml0eTsKKwkJYnJlYWs7CisJY2Fz ZSBBTURHUFVfUFBfU0VOU09SX01FTV9MT0FEOgorCQkqdmFsdWUgPSBtZXRyaWNzLkF2ZXJhZ2VV Y2xrQWN0aXZpdHk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2VycigiSW52YWxpZCBzZW5z b3IgZm9yIHJldHJpZXZpbmcgY2xvY2sgYWN0aXZpdHlcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbXVfdjExXzBfdGhlcm1hbF9nZXRf dGVtcGVyYXR1cmUoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsCisJCQkJCSAgICAgZW51bSBhbWRf cHBfc2Vuc29ycyBzZW5zb3IsCisJCQkJCSAgICAgdWludDMyX3QgKnZhbHVlKQoreworCXN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2ID0gc211LT5hZGV2OworCVNtdU1ldHJpY3NfdCBtZXRyaWNz OworCXVpbnQzMl90IHRlbXAgPSAwOworCWludCByZXQgPSAwOworCisJaWYgKCF2YWx1ZSkKKwkJ cmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBzbXVfdjExXzBfZ2V0X21ldHJpY3NfdGFibGUoc211 LCAmbWV0cmljcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAoc2Vuc29y KSB7CisJY2FzZSBBTURHUFVfUFBfU0VOU09SX0hPVFNQT1RfVEVNUDoKKwkJdGVtcCA9IFJSRUcz Ml9TT0MxNShUSE0sIDAsIG1tQ0dfTVVMVF9USEVSTUFMX1NUQVRVUyk7CisJCXRlbXAgPSAodGVt cCAmIENHX01VTFRfVEhFUk1BTF9TVEFUVVNfX0NURl9URU1QX01BU0spID4+CisJCQkJQ0dfTVVM VF9USEVSTUFMX1NUQVRVU19fQ1RGX1RFTVBfX1NISUZUOworCisJCXRlbXAgPSB0ZW1wICYgMHgx ZmY7CisJCXRlbXAgKj0gU01VMTFfVEVNUEVSQVRVUkVfVU5JVFNfUEVSX0NFTlRJR1JBREVTOwor CisJCSp2YWx1ZSA9IHRlbXA7CisJCWJyZWFrOworCWNhc2UgQU1ER1BVX1BQX1NFTlNPUl9FREdF X1RFTVA6CisJCSp2YWx1ZSA9IG1ldHJpY3MuVGVtcGVyYXR1cmVFZGdlICoKKwkJCVBQX1RFTVBF UkFUVVJFX1VOSVRTX1BFUl9DRU5USUdSQURFUzsKKwkJYnJlYWs7CisJY2FzZSBBTURHUFVfUFBf U0VOU09SX01FTV9URU1QOgorCQkqdmFsdWUgPSBtZXRyaWNzLlRlbXBlcmF0dXJlSEJNICoKKwkJ CVBQX1RFTVBFUkFUVVJFX1VOSVRTX1BFUl9DRU5USUdSQURFUzsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJcHJfZXJyKCJJbnZhbGlkIHNlbnNvciBmb3IgcmV0cmlldmluZyB0ZW1wXG4iKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc211X3Yx MV8wX2dldF9ncHVfcG93ZXIoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsIHVpbnQzMl90ICp2YWx1 ZSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlTbXVNZXRyaWNzX3QgbWV0cmljczsKKworCWlmICghdmFs dWUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gc211X3YxMV8wX2dldF9tZXRyaWNzX3Rh YmxlKHNtdSwgJm1ldHJpY3MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkqdmFsdWUg PSBtZXRyaWNzLkN1cnJTb2NrZXRQb3dlciA8PCA4OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgc211X3YxMV8wX2dldF9jbG9ja19yYW5nZXMoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUs CisJCQkJICAgICAgdWludDMyX3QgKmNsb2NrLAorCQkJCSAgICAgIFBQQ0xLX2UgY2xvY2tfc2Vs ZWN0LAorCQkJCSAgICAgIGJvb2wgbWF4KQoreworCWludCByZXQ7CisJKmNsb2NrID0gMDsKKwlp ZiAobWF4KSB7CisJCXJldCA9IHNtdV9zZW5kX3NtY19tc2dfd2l0aF9wYXJhbShzbXUsIFNNVV9N U0dfR2V0TWF4RHBtRnJlcSwKKwkJCQkJICAgIChjbG9ja19zZWxlY3QgPDwgMTYpKTsKKwkJaWYg KHJldCkgeworCQkJcHJfZXJyKCJbR2V0Q2xvY2tSYW5nZXNdIEZhaWxlZCB0byBnZXQgbWF4IGNs b2NrIGZyb20gU01DIVxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCXNtdV9yZWFkX3NtY19h cmcoc211LCBjbG9jayk7CisJfSBlbHNlIHsKKwkJcmV0ID0gc211X3NlbmRfc21jX21zZ193aXRo X3BhcmFtKHNtdSwgU01VX01TR19HZXRNaW5EcG1GcmVxLAorCQkJCQkgICAgKGNsb2NrX3NlbGVj dCA8PCAxNikpOworCQlpZiAocmV0KSB7CisJCQlwcl9lcnIoIltHZXRDbG9ja1Jhbmdlc10gRmFp bGVkIHRvIGdldCBtaW4gY2xvY2sgZnJvbSBTTUMhXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0K KwkJc211X3JlYWRfc21jX2FyZyhzbXUsIGNsb2NrKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHVpbnQzMl90IHNtdV92MTFfMF9kcG1fZ2V0X3NjbGsoc3RydWN0IHNtdV9jb250ZXh0 ICpzbXUsIGJvb2wgbG93KQoreworCXVpbnQzMl90IGdmeF9jbGs7CisJaW50IHJldDsKKworCWlm ICghc211X2ZlYXR1cmVfaXNfZW5hYmxlZChzbXUsIEZFQVRVUkVfRFBNX0dGWENMS19CSVQpKSB7 CisJCXByX2VycigiW0dldFNjbGtzXTogZ2Z4Y2xrIGRwbSBub3QgZW5hYmxlZCFcbiIpOworCQly ZXR1cm4gLUVQRVJNOworCX0KKworCWlmIChsb3cpIHsKKwkJcmV0ID0gc211X3YxMV8wX2dldF9j bG9ja19yYW5nZXMoc211LCAmZ2Z4X2NsaywgUFBDTEtfR0ZYQ0xLLCBmYWxzZSk7CisJCWlmIChy ZXQpIHsKKwkJCXByX2VycigiW0dldFNjbGtzXTogZmFpbCB0byBnZXQgbWluIFBQQ0xLX0dGWENM S1xuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfSBlbHNlIHsKKwkJcmV0ID0gc211X3YxMV8w X2dldF9jbG9ja19yYW5nZXMoc211LCAmZ2Z4X2NsaywgUFBDTEtfR0ZYQ0xLLCB0cnVlKTsKKwkJ aWYgKHJldCkgeworCQkJcHJfZXJyKCJbR2V0U2Nsa3NdOiBmYWlsIHRvIGdldCBtYXggUFBDTEtf R0ZYQ0xLXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gKGdmeF9jbGsg KiAxMDApOworfQorCitzdGF0aWMgdWludDMyX3Qgc211X3YxMV8wX2RwbV9nZXRfbWNsayhzdHJ1 Y3Qgc211X2NvbnRleHQgKnNtdSwgYm9vbCBsb3cpCit7CisJdWludDMyX3QgbWVtX2NsazsKKwlp bnQgcmV0OworCisJaWYgKCFzbXVfZmVhdHVyZV9pc19lbmFibGVkKHNtdSwgRkVBVFVSRV9EUE1f VUNMS19CSVQpKSB7CisJCXByX2VycigiW0dldE1jbGtzXTogbWVtY2xrIGRwbSBub3QgZW5hYmxl ZCFcbiIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWlmIChsb3cpIHsKKwkJcmV0ID0gc211 X3YxMV8wX2dldF9jbG9ja19yYW5nZXMoc211LCAmbWVtX2NsaywgUFBDTEtfVUNMSywgZmFsc2Up OworCQlpZiAocmV0KSB7CisJCQlwcl9lcnIoIltHZXRNY2xrc106IGZhaWwgdG8gZ2V0IG1pbiBQ UENMS19VQ0xLXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9IGVsc2UgeworCQlyZXQgPSBz bXVfdjExXzBfZ2V0X2Nsb2NrX3JhbmdlcyhzbXUsICZtZW1fY2xrLCBQUENMS19HRlhDTEssIHRy dWUpOworCQlpZiAocmV0KSB7CisJCQlwcl9lcnIoIltHZXRNY2xrc106IGZhaWwgdG8gZ2V0IG1h eCBQUENMS19VQ0xLXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gKG1l bV9jbGsgKiAxMDApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNtdV9mdW5jcyBzbXVfdjEx XzBfZnVuY3MgPSB7CisJLmluaXRfbWljcm9jb2RlID0gc211X3YxMV8wX2luaXRfbWljcm9jb2Rl LAorCS5sb2FkX21pY3JvY29kZSA9IHNtdV92MTFfMF9sb2FkX21pY3JvY29kZSwKKwkuY2hlY2tf Zndfc3RhdHVzID0gc211X3YxMV8wX2NoZWNrX2Z3X3N0YXR1cywKKwkuY2hlY2tfZndfdmVyc2lv biA9IHNtdV92MTFfMF9jaGVja19md192ZXJzaW9uLAorCS5zZW5kX3NtY19tc2cgPSBzbXVfdjEx XzBfc2VuZF9tc2csCisJLnNlbmRfc21jX21zZ193aXRoX3BhcmFtID0gc211X3YxMV8wX3NlbmRf bXNnX3dpdGhfcGFyYW0sCisJLnJlYWRfc21jX2FyZyA9IHNtdV92MTFfMF9yZWFkX2FyZywKKwku c2V0dXBfcHB0YWJsZSA9IHNtdV92MTFfMF9zZXR1cF9wcHRhYmxlLAorCS5pbml0X3NtY190YWJs ZXMgPSBzbXVfdjExXzBfaW5pdF9zbWNfdGFibGVzLAorCS5maW5pX3NtY190YWJsZXMgPSBzbXVf djExXzBfZmluaV9zbWNfdGFibGVzLAorCS5pbml0X3Bvd2VyID0gc211X3YxMV8wX2luaXRfcG93 ZXIsCisJLmZpbmlfcG93ZXIgPSBzbXVfdjExXzBfZmluaV9wb3dlciwKKwkuZ2V0X3ZiaW9zX2Jv b3R1cF92YWx1ZXMgPSBzbXVfdjExXzBfZ2V0X3ZiaW9zX2Jvb3R1cF92YWx1ZXMsCisJLmdldF9j bGtfaW5mb19mcm9tX3ZiaW9zID0gc211X3YxMV8wX2dldF9jbGtfaW5mb19mcm9tX3ZiaW9zLAor CS5ub3RpZnlfbWVtb3J5X3Bvb2xfbG9jYXRpb24gPSBzbXVfdjExXzBfbm90aWZ5X21lbW9yeV9w b29sX2xvY2F0aW9uLAorCS5jaGVja19wcHRhYmxlID0gc211X3YxMV8wX2NoZWNrX3BwdGFibGUs CisJLnBhcnNlX3BwdGFibGUgPSBzbXVfdjExXzBfcGFyc2VfcHB0YWJsZSwKKwkucG9wdWxhdGVf c21jX3BwdGFibGUgPSBzbXVfdjExXzBfcG9wdWxhdGVfc21jX3BwdGFibGUsCisJLndyaXRlX3Bw dGFibGUgPSBzbXVfdjExXzBfd3JpdGVfcHB0YWJsZSwKKwkuc2V0X21pbl9kY2VmX2RlZXBfc2xl ZXAgPSBzbXVfdjExXzBfc2V0X21pbl9kY2VmX2RlZXBfc2xlZXAsCisJLnNldF90b29sX3RhYmxl X2xvY2F0aW9uID0gc211X3YxMV8wX3NldF90b29sX3RhYmxlX2xvY2F0aW9uLAorCS5pbml0X2Rp c3BsYXkgPSBzbXVfdjExXzBfaW5pdF9kaXNwbGF5LAorCS5zZXRfYWxsb3dlZF9tYXNrID0gc211 X3YxMV8wX3NldF9hbGxvd2VkX21hc2ssCisJLmdldF9lbmFibGVkX21hc2sgPSBzbXVfdjExXzBf Z2V0X2VuYWJsZWRfbWFzaywKKwkuaXNfZHBtX3J1bm5pbmcgPSBzbXVfdjExXzBfaXNfZHBtX3J1 bm5pbmcsCisJLnN5c3RlbV9mZWF0dXJlc19jb250cm9sID0gc211X3YxMV8wX3N5c3RlbV9mZWF0 dXJlc19jb250cm9sLAorCS51cGRhdGVfZmVhdHVyZV9lbmFibGVfc3RhdGUgPSBzbXVfdjExXzBf dXBkYXRlX2ZlYXR1cmVfZW5hYmxlX3N0YXRlLAorCS5ub3RpZnlfZGlzcGxheV9jaGFuZ2UgPSBz bXVfdjExXzBfbm90aWZ5X2Rpc3BsYXlfY2hhbmdlLAorCS5nZXRfY3VycmVudF9jbGtfZnJlcSA9 IHNtdV92MTFfMF9nZXRfY3VycmVudF9jbGtfZnJlcSwKKwkuaW5pdF9tYXhfc3VzdGFpbmFibGVf Y2xvY2tzID0gc211X3YxMV8wX2luaXRfbWF4X3N1c3RhaW5hYmxlX2Nsb2NrcywKKwkuc3RhcnRf dGhlcm1hbF9jb250cm9sID0gc211X3YxMV8wX3N0YXJ0X3RoZXJtYWxfY29udHJvbCwKK307CisK K3ZvaWQgc211X3YxMV8wX3NldF9zbXVfZnVuY3Moc3RydWN0IHNtdV9jb250ZXh0ICpzbXUpCit7 CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBzbXUtPmFkZXY7CisKKwlzbXUtPmZ1bmNz ID0gJnNtdV92MTFfMF9mdW5jczsKKwlzd2l0Y2ggKGFkZXYtPmFzaWNfdHlwZSkgeworCWNhc2Ug Q0hJUF9WRUdBMjA6CisJCXZlZ2EyMF9zZXRfcHB0X2Z1bmNzKHNtdSk7CisJCWJyZWFrOworCWNh c2UgQ0hJUF9BUkNUVVJVUzoKKwkJYXJjdHVydXNfc2V0X3BwdF9mdW5jcyhzbXUpOworCQlicmVh azsKKwlkZWZhdWx0OgorCQlwcl93YXJuKCJVbmtub3duIGFzaWMgZm9yIHNtdTExXG4iKTsKKwl9 Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS92ZWdhMjBfcHB0 LmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS92ZWdhMjBfcHB0LmMKaW5kZXggZjY1 NWViZC4uYWRjYTg0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkv dmVnYTIwX3BwdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L3ZlZ2EyMF9w cHQuYwpAQCAtMzEzNSw2ICszMTM1LDI4IEBAIHN0YXRpYyBpbnQgdmVnYTIwX2dldF90aGVybWFs X3RlbXBlcmF0dXJlX3JhbmdlKHN0cnVjdCBzbXVfY29udGV4dCAqc211LAogCXJldHVybiAwOwog fQogCitzdGF0aWMgaW50IHZlZ2EyMF91cGRhdGVfcGNpZV9wYXJhbWV0ZXJzKHN0cnVjdCBzbXVf Y29udGV4dCAqc211LAorCQkJCSAgICAgdWludDMyX3QgcGNpZV9nZW5fY2FwLAorCQkJCSAgICAg dWludDMyX3QgcGNpZV93aWR0aF9jYXApCit7CisJUFBUYWJsZV90ICpwcHRhYmxlID0gc211LT5z bXVfdGFibGUuZHJpdmVyX3BwdGFibGU7CisJaW50IHJldCwgaTsKKwl1aW50MzJfdCBzbXVfcGNp ZV9hcmc7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0xJTktfTEVWRUxTOyBpKyspIHsKKwkJc211 X3BjaWVfYXJnID0gKGkgPDwgMTYpIHwKKwkJCSgocHB0YWJsZS0+UGNpZUdlblNwZWVkW2ldIDw9 IHBjaWVfZ2VuX2NhcCkgPyAocHB0YWJsZS0+UGNpZUdlblNwZWVkW2ldIDw8IDgpIDoKKwkJCQko cGNpZV9nZW5fY2FwIDw8IDgpKSB8ICgocHB0YWJsZS0+UGNpZUxhbmVDb3VudFtpXSA8PSBwY2ll X3dpZHRoX2NhcCkgPworCQkJCQlwcHRhYmxlLT5QY2llTGFuZUNvdW50W2ldIDogcGNpZV93aWR0 aF9jYXApOworCQlyZXQgPSBzbXVfc2VuZF9zbWNfbXNnX3dpdGhfcGFyYW0oc211LAorCQkJCQkg IFNNVV9NU0dfT3ZlcnJpZGVQY2llUGFyYW1ldGVycywKKwkJCQkJICBzbXVfcGNpZV9hcmcpOwor CX0KKworCXJldHVybiByZXQ7Cit9CisKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBwcHRhYmxlX2Z1 bmNzIHZlZ2EyMF9wcHRfZnVuY3MgPSB7CiAJLnRhYmxlc19pbml0ID0gdmVnYTIwX3RhYmxlc19p bml0LAogCS5hbGxvY19kcG1fY29udGV4dCA9IHZlZ2EyMF9hbGxvY2F0ZV9kcG1fY29udGV4dCwK QEAgLTMxNzcsNyArMzE5OSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHB0YWJsZV9mdW5jcyB2 ZWdhMjBfcHB0X2Z1bmNzID0gewogCS5nZXRfZmFuX3NwZWVkX3BlcmNlbnQgPSB2ZWdhMjBfZ2V0 X2Zhbl9zcGVlZF9wZXJjZW50LAogCS5nZXRfZmFuX3NwZWVkX3JwbSA9IHZlZ2EyMF9nZXRfZmFu X3NwZWVkX3JwbSwKIAkuc2V0X3dhdGVybWFya3NfdGFibGUgPSB2ZWdhMjBfc2V0X3dhdGVybWFy a3NfdGFibGUsCi0JLmdldF90aGVybWFsX3RlbXBlcmF0dXJlX3JhbmdlID0gdmVnYTIwX2dldF90 aGVybWFsX3RlbXBlcmF0dXJlX3JhbmdlCisJLmdldF90aGVybWFsX3RlbXBlcmF0dXJlX3Jhbmdl ID0gdmVnYTIwX2dldF90aGVybWFsX3RlbXBlcmF0dXJlX3JhbmdlLAorCS51cGRhdGVfcGNpZV9w YXJhbWV0ZXJzID0gdmVnYTIwX3VwZGF0ZV9wY2llX3BhcmFtZXRlcnMKIH07CiAKIHZvaWQgdmVn YTIwX3NldF9wcHRfZnVuY3Moc3RydWN0IHNtdV9jb250ZXh0ICpzbXUpCi0tIAoyLjcuNAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWls aW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4