From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sravanthi Kollukuduru Subject: [DPU PATCH v2 14/14] drm/msm/dpu: use private obj to track hw resources Date: Mon, 18 Jun 2018 19:02:52 +0530 Message-ID: <1529328772-5022-15-git-send-email-skolluku@codeaurora.org> References: <1529328772-5022-1-git-send-email-skolluku@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1529328772-5022-1-git-send-email-skolluku-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Sravanthi Kollukuduru , Jeykumar Sankaran , seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org RnJvbTogSmV5a3VtYXIgU2Fua2FyYW4gPGpzYW5rYUBjb2RlYXVyb3JhLm9yZz4KClN3aXRjaCB0 byBzdGF0ZSBiYXNlZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBUaGlzIHBhdGNoCm92ZXJoYXVscyB0 aGUgcmVzb3VyY2UgbWFuYWdlciBhbmQgSFcgYWxsb2NhdGlvbiBtZXRob2RzIGJ5Cm1haW50YWlu aW5nIHRoZSBnbG9iYWwgcmVzb3VyY2UgcG9vbCBhbmQgYWxsb2NhdGVkIGh3CmJsb2NrcyBpbiBy ZXNwZWN0aXZlIGRybSBjb21wb25lbnQgc3RhdGVzLgoKR2xvYmFsIHJlc291cmNlIG1hbmFnZXIo Uk0pIGlzIHRyYWNrZWQgaW4gcHJpdmF0ZSBvYmplY3QuCkFsbG9jYXRpb24gc3RyYXRlZ3kgaXMg c3dpdGNoZWQgZnJvbSBzaW5nbGUgcG9pbnQgYWxsb2NhdGlvbgpvZiBIVyByZXNvdXJjZXMgZm9y IHRoZSBkaXNwbGF5IHBpcGVsaW5lIHRvIHBlciBjb21wb25lbnQKYmFzZWQgYWxsb2NhdGlvbiwg d2hlcmUgZWFjaCBkcm0gY29tcG9uZW50IGFsbG9jYXRlcyBIVwpibG9ja3MgbWFwcGVkIHRvIGl0 J3MgZG9tYWluIGFuZCB0cmFja3MgdGhlbSBpbiB0aGVpciByZXNwZWN0aXZlCnN0YXRlIG9iamVj dHMuCgpGaXggcmVzb3VyY2UgY29udGVudGlvbiBkdWUgdG8gcmFjZSBjb25kaXRpb25zIGJldHdl ZW4KdXNlciBzcGFjZSBhbmQgZGlzcGxheSB0aHJlYWQgYnkgcmVzZXJ2aW5nIHJlc291cmNlcwpv bmx5IGluIGF0b21pYyBjaGVjay4KCmNoYW5nZXMgaW4gdjI6CiAgICAtIHNwbGl0IGlycmVsZXZh bnQgY2hhbmdlcyB0byBzZXBhcmF0ZSBwYXRjaGVzKFNlYW4pCiAgICAtIHZhbGlkYXRlIGRwdSBw cml2IHN0YXRlIGJlZm9yZSB1c2luZyhKb3JkYW4pCgpTaWduZWQtb2ZmLWJ5OiBKZXlrdW1hciBT YW5rYXJhbiA8anNhbmthQGNvZGVhdXJvcmEub3JnPgpTaWduZWQtb2ZmLWJ5OiBTcmF2YW50aGkg S29sbHVrdWR1cnUgPHNrb2xsdWt1QGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgICAgICAgICAgIHwgMTU5ICsrLS0tCiBkcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oICAgICAgICAgICB8ICAzMiArLQogZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyAgICAgICAgfCAxMzQgKyst LQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oICAgfCAg IDIgKy0KIC4uLi9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c192aWQuYyAg IHwgIDIyICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMgICAgICAg ICAgICB8ICAxOSArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oICAg ICAgICAgICAgfCAgIDggKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5j ICAgICAgICAgICAgIHwgNzkyICsrKysrKy0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X3JtLmggICAgICAgICAgICAgfCAxNDAgKystLQogOSBmaWxlcyBj aGFuZ2VkLCA0NDUgaW5zZXJ0aW9ucygrKSwgODYzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCmluZGV4IDMxN2RkMmUuLjZjNzhjMTFjMyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCkBAIC00Nyw2ICs0Nyw4IEBA CiAjZGVmaW5lIFJJR0hUX01JWEVSIDEKIAogI2RlZmluZSBNSVNSX0JVRkZfU0laRQkJCTI1Ngor I2RlZmluZSBNQVhfVkRJU1BMQVlfU1BMSVQJCTEwODAKKwogCiBzdGF0aWMgaW5saW5lIHN0cnVj dCBkcHVfa21zICpfZHB1X2NydGNfZ2V0X2ttcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CkBA IC0yNzYsMTYgKzI3OCw3IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ibGVuZF9zZXR1cChzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpCiAKIAlEUFVfREVCVUcoIiVzXG4iLCBkcHVfY3J0Yy0+bmFtZSk7 CiAKLQlpZiAoY3N0YXRlLT5udW1fbWl4ZXJzID4gQ1JUQ19EVUFMX01JWEVSUykgewotCQlEUFVf RVJST1IoImludmFsaWQgbnVtYmVyIG1peGVyczogJWRcbiIsIGNzdGF0ZS0+bnVtX21peGVycyk7 Ci0JCXJldHVybjsKLQl9Ci0KIAlmb3IgKGkgPSAwOyBpIDwgY3N0YXRlLT5udW1fbWl4ZXJzOyBp KyspIHsKLQkJaWYgKCFtaXhlcltpXS5od19sbSB8fCAhbWl4ZXJbaV0ubG1fY3RsKSB7Ci0JCQlE UFVfRVJST1IoImludmFsaWQgbG0gb3IgY3RsIGFzc2lnbmVkIHRvIG1peGVyXG4iKTsKLQkJCXJl dHVybjsKLQkJfQogCQltaXhlcltpXS5taXhlcl9vcF9tb2RlID0gMDsKIAkJbWl4ZXJbaV0uZmx1 c2hfbWFzayA9IDA7CiAJCWlmIChtaXhlcltpXS5sbV9jdGwtPm9wcy5jbGVhcl9hbGxfYmxlbmRz dGFnZXMpCkBAIC01NzksNzUgKzU3MiwyNyBAQCB2b2lkIGRwdV9jcnRjX2NvbXBsZXRlX2NvbW1p dChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJRFBVX0VWVDMyX1ZFUkJPU0UoRFJNSUQoY3J0Yykp OwogfQogCi1zdGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4ZXJfZm9yX2VuY29kZXIoCi0J CXN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJc3RydWN0IGRybV9lbmNvZGVyICplbmMpCitzdGF0 aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4ZXJzKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSkKIHsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZSA9IHRvX2RwdV9jcnRj X3N0YXRlKGNydGMtPnN0YXRlKTsKLQlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcyA9IF9kcHVfY3J0 Y19nZXRfa21zKGNydGMpOwotCXN0cnVjdCBkcHVfcm0gKnJtID0gJmRwdV9rbXMtPnJtOworCXN0 cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Y19zdGF0 ZSk7CiAJc3RydWN0IGRwdV9jcnRjX21peGVyICptaXhlcjsKLQlzdHJ1Y3QgZHB1X2h3X2N0bCAq bGFzdF92YWxpZF9jdGwgPSBOVUxMOwogCWludCBpOwotCXN0cnVjdCBkcHVfcm1faHdfaXRlciBs bV9pdGVyLCBjdGxfaXRlcjsKLQotCWRwdV9ybV9pbml0X2h3X2l0ZXIoJmxtX2l0ZXIsIGVuYy0+ YmFzZS5pZCwgRFBVX0hXX0JMS19MTSk7Ci0JZHB1X3JtX2luaXRfaHdfaXRlcigmY3RsX2l0ZXIs IGVuYy0+YmFzZS5pZCwgRFBVX0hXX0JMS19DVEwpOwotCi0JLyogU2V0IHVwIGFsbCB0aGUgbWl4 ZXJzIGFuZCBjdGxzIHJlc2VydmVkIGJ5IHRoaXMgZW5jb2RlciAqLwotCWZvciAoaSA9IGNzdGF0 ZS0+bnVtX21peGVyczsgaSA8IEFSUkFZX1NJWkUoY3N0YXRlLT5taXhlcnMpOyBpKyspIHsKLQkJ bWl4ZXIgPSAmY3N0YXRlLT5taXhlcnNbaV07Ci0KLQkJaWYgKCFkcHVfcm1fZ2V0X2h3KHJtLCAm bG1faXRlcikpCi0JCQlicmVhazsKLQkJbWl4ZXItPmh3X2xtID0gKHN0cnVjdCBkcHVfaHdfbWl4 ZXIgKilsbV9pdGVyLmh3OwotCi0JCS8qIENUTCBtYXkgYmUgPD0gTE1zLCBpZiA8LCBtdWx0aXBs ZSBMTXMgY29udHJvbGxlZCBieSAxIENUTCAqLwotCQlpZiAoIWRwdV9ybV9nZXRfaHcocm0sICZj dGxfaXRlcikpIHsKLQkJCURQVV9ERUJVRygibm8gY3RsIGFzc2lnbmVkIHRvIGxtICVkLCB1c2lu ZyBwcmV2aW91c1xuIiwKLQkJCQkJbWl4ZXItPmh3X2xtLT5pZHggLSBMTV8wKTsKLQkJCW1peGVy LT5sbV9jdGwgPSBsYXN0X3ZhbGlkX2N0bDsKLQkJfSBlbHNlIHsKLQkJCW1peGVyLT5sbV9jdGwg PSAoc3RydWN0IGRwdV9od19jdGwgKiljdGxfaXRlci5odzsKLQkJCWxhc3RfdmFsaWRfY3RsID0g bWl4ZXItPmxtX2N0bDsKLQkJfQotCi0JCS8qIFNob3VsZG4ndCBoYXBwZW4sIG1peGVycyBhcmUg YWx3YXlzID49IGN0bHMgKi8KLQkJaWYgKCFtaXhlci0+bG1fY3RsKSB7Ci0JCQlEUFVfRVJST1Io Im5vIHZhbGlkIGN0bHMgZm91bmQgZm9yIGxtICVkXG4iLAotCQkJCQltaXhlci0+aHdfbG0tPmlk eCAtIExNXzApOwotCQkJcmV0dXJuOwotCQl9CiAKLQkJbWl4ZXItPmVuY29kZXIgPSBlbmM7Ci0K LQkJY3N0YXRlLT5udW1fbWl4ZXJzKys7Ci0JCURQVV9ERUJVRygic2V0dXAgbWl4ZXIgJWQ6IGxt ICVkXG4iLAotCQkJCWksIG1peGVyLT5od19sbS0+aWR4IC0gTE1fMCk7Ci0JCURQVV9ERUJVRygi c2V0dXAgbWl4ZXIgJWQ6IGN0bCAlZFxuIiwKLQkJCQlpLCBtaXhlci0+bG1fY3RsLT5pZHggLSBD VExfMCk7CisJaWYgKGNzdGF0ZS0+bnVtX21peGVycyA+IGNzdGF0ZS0+bnVtX2N0bHMpIHsKKwkJ RFBVX0VSUk9SKAorCQkJImxtIGNvdW50KCVkKSA+IGN0bCBjb3VudCglZCkuIE5vIHN1cHBvcnQg Zm9yIHN1Y2ggdG9wb2xvZ2llc1xuIiwKKwkJCWNzdGF0ZS0+bnVtX21peGVycywgY3N0YXRlLT5u dW1fY3Rscyk7CisJCXJldHVybjsKIAl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXR1 cF9taXhlcnMoc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCXN0cnVjdCBkcHVfY3J0YyAqZHB1 X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0 ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuYzsKIAotCWNzdGF0ZS0+bnVtX21peGVycyA9IDA7Ci0JbWVtc2V0KGNzdGF0ZS0+bWl4ZXJz LCAwLCBzaXplb2YoY3N0YXRlLT5taXhlcnMpKTsKLQotCW11dGV4X2xvY2soJmRwdV9jcnRjLT5j cnRjX2xvY2spOwotCS8qIENoZWNrIGZvciBtaXhlcnMgb24gYWxsIGVuY29kZXJzIGF0dGFjaGVk IHRvIHRoaXMgY3J0YyAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jLCAmY3J0Yy0+ZGV2LT5t b2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKLQkJaWYgKGVuYy0+Y3J0YyAhPSBjcnRj KQotCQkJY29udGludWU7CisJLyogU2V0IHVwIGFsbCB0aGUgbWl4ZXJzIGFuZCBjdGxzIHJlc2Vy dmVkIGJ5IHRoaXMgZW5jb2RlciAqLworCWZvciAoaSA9IDA7IGkgPCBjc3RhdGUtPm51bV9taXhl cnM7IGkrKykgeworCQljc3RhdGUtPm1peGVyc1tpXS5sbV9jdGwgPSBjc3RhdGUtPmh3X2N0bHNb aV07CiAKLQkJX2RwdV9jcnRjX3NldHVwX21peGVyX2Zvcl9lbmNvZGVyKGNydGMsIGVuYyk7CisJ CURQVV9ERUJVRygic2V0dXAgbWl4ZXIgJWQ6IGxtKCVkKSAtIGN0bCglZClcbiIsCisJCQkJaSwg bWl4ZXItPmh3X2xtLT5pZHggLSBMTV8wLAorCQkJCW1peGVyLT5sbV9jdGwtPmlkeCAtIENUTF8w KTsKIAl9Ci0KLQltdXRleF91bmxvY2soJmRwdV9jcnRjLT5jcnRjX2xvY2spOwogfQogCiBzdGF0 aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbG1fYm91bmRzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK QEAgLTY4OCw3ICs2MzMsNyBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19hdG9taWNfYmVnaW4oc3Ry dWN0IGRybV9jcnRjICpjcnRjLAogCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9zdGF0ZSkK IHsKIAlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwotCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAq Y3N0YXRlOworCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqbmV3X2NzdGF0ZTsKIAlzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXI7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBs b25nIGZsYWdzOwpAQCAtNzA4LDE0ICs2NTMsMTEgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfYXRv bWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAlEUFVfREVCVUcoImNydGMlZFxuIiwg Y3J0Yy0+YmFzZS5pZCk7CiAKIAlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwotCWNzdGF0 ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKwluZXdfY3N0YXRlID0gdG9fZHB1 X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwogCWRldiA9IGNydGMtPmRldjsKIAlzbW11X3N0YXRl ID0gJmRwdV9jcnRjLT5zbW11X3N0YXRlOwogCi0JaWYgKCFjc3RhdGUtPm51bV9taXhlcnMpIHsK LQkJX2RwdV9jcnRjX3NldHVwX21peGVycyhjcnRjKTsKLQkJX2RwdV9jcnRjX3NldHVwX2xtX2Jv dW5kcyhjcnRjLCBjcnRjLT5zdGF0ZSk7Ci0JfQorCV9kcHVfY3J0Y19zZXR1cF9sbV9ib3VuZHMo Y3J0YywgY3J0Yy0+c3RhdGUpOwogCiAJaWYgKGRwdV9jcnRjLT5ldmVudCkgewogCQlXQVJOX09O KGRwdV9jcnRjLT5ldmVudCk7CkBAIC03MzksNyArNjgxLDcgQEAgc3RhdGljIHZvaWQgZHB1X2Ny dGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkgKiBpdCBtZWFucyB3ZSBh cmUgdHJ5aW5nIHRvIGZsdXNoIGEgQ1JUQyB3aG9zZSBzdGF0ZSBpcyBkaXNhYmxlZDoKIAkgKiBu b3RoaW5nIGVsc2UgbmVlZHMgdG8gYmUgZG9uZS4KIAkgKi8KLQlpZiAodW5saWtlbHkoIWNzdGF0 ZS0+bnVtX21peGVycykpCisJaWYgKHVubGlrZWx5KCFuZXdfY3N0YXRlLT5udW1fbWl4ZXJzKSkK IAkJcmV0dXJuOwogCiAJX2RwdV9jcnRjX2JsZW5kX3NldHVwKGNydGMpOwpAQCAtMTE1Nyw5ICsx MDk5LDkgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfaGFuZGxlX3Bvd2VyX2V2ZW50KHUzMiBldmVu dF90eXBlLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjID0gYXJnOwogCXN0 cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7CisJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGU7 CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCXN0cnVjdCBkcHVfY3J0Y19taXhlciAq bTsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZTsKIAl1MzIgaSwgbWlzcl9zdGF0dXM7 CiAKIAlpZiAoIWNydGMpIHsKQEAgLTExNjcsNiArMTEwOSw3IEBAIHN0YXRpYyB2b2lkIGRwdV9j cnRjX2hhbmRsZV9wb3dlcl9ldmVudCh1MzIgZXZlbnRfdHlwZSwgdm9pZCAqYXJnKQogCQlyZXR1 cm47CiAJfQogCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CisJY3N0YXRlID0gdG9fZHB1 X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwogCiAJbXV0ZXhfbG9jaygmZHB1X2NydGMtPmNydGNf bG9jayk7CiAKQEAgLTEyMjYsNiArMTE2OSw4IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Rpc2Fi bGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsK IAlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2OwogCXN0cnVjdCBkcm1fZXZlbnQgZXZlbnQ7 CisJc3RydWN0IGRwdV9wcml2YXRlX3N0YXRlICpkcHVfcHJpdl9zdGF0ZTsKKwlzdHJ1Y3QgZHB1 X2ttcyAqZHB1X2ttczsKIAl1MzIgcG93ZXJfb247CiAJaW50IHJldDsKIApAQCAtMTIzNyw2ICsx MTgyLDEwIEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpj cnRjKQogCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKIAltb2RlID0g JmNzdGF0ZS0+YmFzZS5hZGp1c3RlZF9tb2RlOwogCXByaXYgPSBjcnRjLT5kZXYtPmRldl9wcml2 YXRlOworCWRwdV9rbXMgPSB0b19kcHVfa21zKHByaXYtPmttcyk7CisKKwkvKiBhY2Nlc3Npbmcg YWZ0ZXIgc3dhcCBzdGF0ZS4gcGl2X29iai5zdGF0ZSBpcyB0aGUgY3VycmVudCBzdGF0ZSAqLwor CWRwdV9wcml2X3N0YXRlID0gdG9fZHB1X3ByaXZhdGVfc3RhdGUoZHB1X2ttcy0+cHJpdl9vYmou c3RhdGUpOwogCiAJRFBVX0RFQlVHKCJjcnRjJWRcbiIsIGNydGMtPmJhc2UuaWQpOwogCkBAIC0x Mjg5LDE0ICsxMjM4LDE0IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Rpc2FibGUoc3RydWN0IGRy bV9jcnRjICpjcnRjKQogCQlkcHVfcG93ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQoZHB1X2Ny dGMtPnBoYW5kbGUsCiAJCQkJZHB1X2NydGMtPnBvd2VyX2V2ZW50KTsKIAotCi0JbWVtc2V0KGNz dGF0ZS0+bWl4ZXJzLCAwLCBzaXplb2YoY3N0YXRlLT5taXhlcnMpKTsKLQljc3RhdGUtPm51bV9t aXhlcnMgPSAwOwotCiAJLyogZGlzYWJsZSBjbGsgJiBidyBjb250cm9sIHVudGlsIGNsayAmIGJ3 IHByb3BlcnRpZXMgYXJlIHNldCAqLwogCWNzdGF0ZS0+YndfY29udHJvbCA9IGZhbHNlOwogCWNz dGF0ZS0+Yndfc3BsaXRfdm90ZSA9IGZhbHNlOwogCisJcmV0ID0gZHB1X3JtX3JlbGVhc2VfY3J0 Y19yZXMoJmRwdV9wcml2X3N0YXRlLT5ybSwgY3N0YXRlKTsKKwlpZiAocmV0KQorCQlEUFVfRVJS T1IoImVycm9yIGluIHJlbGVhc2luZyBjcnRjIHJlc291cmNlc1xuIik7CisKIAltdXRleF91bmxv Y2soJmRwdV9jcnRjLT5jcnRjX2xvY2spOwogfQogCkBAIC0xMzU2LDYgKzEzMDUsMzEgQEAgc3Rh dGljIHZvaWQgZHB1X2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAogfQogCitz dGF0aWMgc3RydWN0IGRwdV9jcnRjX3RvcG9sb2d5CitkcHVfY3J0Y19nZXRfdG9wb2xvZ3koc3Ry dWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGUsCisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlKQoreworCXN0cnVjdCBkcHVfY3J0Y190b3BvbG9neSB0b3BvbG9neTsKKworCW1lbXNldCgm dG9wb2xvZ3ksIDAsIHNpemVvZih0b3BvbG9neSkpOworCisJLyogVXNlIHNwbGl0IHRvcG9sb2d5 IGZvciB3aWR0aCA+IDEwODAgKi8KKwl0b3BvbG9neS5udW1fbG1zID0gKG1vZGUtPnZkaXNwbGF5 ID4gTUFYX1ZESVNQTEFZX1NQTElUKSA/IDIgOiAxOworCXRvcG9sb2d5Lm51bV9jdGxzID0gdG9w b2xvZ3kubnVtX2xtczsKKworCXRvcG9sb2d5Lm5lZWRzX3JlYWxsb2MgPSAodG9wb2xvZ3kubnVt X2xtcyAhPSBjc3RhdGUtPm51bV9taXhlcnMpIHx8CisJCSh0b3BvbG9neS5udW1fY3RscyAhPSBj c3RhdGUtPm51bV9jdGxzKTsKKworCWlmICh0b3BvbG9neS5uZWVkc19yZWFsbG9jKQorCQlEUFVf REVCVUcoCisJCSJjcnRjICVkIG5lZWRzIGh3IHJlYWxsb2NhdGlvbi4gbG0gKCVkIC0gJWQpIGN0 bCglZCAtICVkKVxuIiwKKwkJCWdldF9jcnRjX2lkKGNzdGF0ZSksCisJCQljc3RhdGUtPm51bV9t aXhlcnMsIHRvcG9sb2d5Lm51bV9sbXMsCisJCQljc3RhdGUtPm51bV9jdGxzLCB0b3BvbG9neS5u dW1fY3Rscyk7CisKKwlyZXR1cm4gdG9wb2xvZ3k7Cit9CisKIHN0cnVjdCBwbGFuZV9zdGF0ZSB7 CiAJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqZHB1X3BzdGF0ZTsKIAljb25zdCBzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpkcm1fcHN0YXRlOwpAQCAtMTM3Myw2ICsxMzQ3LDggQEAgc3RhdGljIGlu dCBkcHVfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAogCWNvbnN0IHN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZTsKIAlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsK IAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwlzdHJ1Y3QgZHB1X2NydGNfdG9wb2xv Z3kgdG9wb2xvZ3k7CisJc3RydWN0IGRwdV9wcml2YXRlX3N0YXRlICpkcHVfcHJpdl9zdGF0ZTsK IAogCWludCBjbnQgPSAwLCByYyA9IDAsIG1peGVyX3dpZHRoLCBpLCB6X3BvczsKIApAQCAtMTU4 Niw2ICsxNTYyLDI1IEBAIHN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKIAkJfQogCX0KIAorCS8qIFJlc291cmNlIGFsbG9jYXRpb24gKi8KKwlk cHVfcHJpdl9zdGF0ZSA9IGRwdV9nZXRfcHJpdmF0ZV9zdGF0ZShzdGF0ZS0+c3RhdGUpOworCWlm IChJU19FUlIoZHB1X3ByaXZfc3RhdGUpKQorCQlnb3RvIGVuZDsKKworCXRvcG9sb2d5ID0gZHB1 X2NydGNfZ2V0X3RvcG9sb2d5KGNzdGF0ZSwgJnN0YXRlLT5hZGp1c3RlZF9tb2RlKTsKKwlpZiAo IXRvcG9sb2d5Lm5lZWRzX3JlYWxsb2MpCisJCWdvdG8gZW5kOworCisJZHB1X3JtX3JlbGVhc2Vf Y3J0Y19yZXMoJmRwdV9wcml2X3N0YXRlLT5ybSwgY3N0YXRlKTsKKwlyYyA9IGRwdV9ybV9yZXNl cnZlX2NydGNfcmVzKCZkcHVfcHJpdl9zdGF0ZS0+cm0sIGNzdGF0ZSwgJnRvcG9sb2d5KTsKKwlp ZiAocmMpIHsKKwkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgcmVzb3VyY2VzIGZvciBj cnRjOiAlZFxuIiwKKwkJCQljcnRjLT5iYXNlLmlkKTsKKwkJZ290byBlbmQ7CisJfQorCisJX2Rw dV9jcnRjX3NldHVwX21peGVycyhzdGF0ZSk7CisKIGVuZDoKIAlyZXR1cm4gcmM7CiB9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaAppbmRleCBmM2VkZmYzLi41MGMzZDRi IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKQEAgLTMwLDYgKzMw LDggQEAKIC8qIGRlZmluZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW4tZmxpZ2h0IGZyYW1lIGV2 ZW50cyAqLwogI2RlZmluZSBEUFVfQ1JUQ19GUkFNRV9FVkVOVF9TSVpFCTQKIAorc3RydWN0IGRw dV9rbXM7CisKIC8qKgogICogZW51bSBkcHVfY3J0Y19jbGllbnRfdHlwZTogY3J0YyBjbGllbnQg dHlwZQogICogQFJUX0NMSUVOVDoJUmVhbFRpbWUgY2xpZW50IGxpa2UgdmlkZW8vY21kIG1vZGUg ZGlzcGxheQpAQCAtODMsMTUgKzg1LDE1IEBAIHN0cnVjdCBkcHVfY3J0Y19zbW11X3N0YXRlX2Rh dGEgewogLyoqCiAgKiBzdHJ1Y3QgZHB1X2NydGNfbWl4ZXI6IHN0b3JlcyB0aGUgbWFwIGZvciBl YWNoIHZpcnR1YWwgcGlwZWxpbmUgaW4gdGhlIENSVEMKICAqIEBod19sbToJTE0gSFcgRHJpdmVy IGNvbnRleHQKLSAqIEBsbV9jdGw6CUNUTCBQYXRoIEhXIGRyaXZlciBjb250ZXh0Ci0gKiBAZW5j b2RlcjoJRW5jb2RlciBhdHRhY2hlZCB0byB0aGlzIGxtICYgY3RsCisgKiBAbG1fY3RsOglDVEwg cGF0aCBmb3IgYXNzb2NpYXRlZCBMTSBIVworICogQGh3X3BwOglQaW5ncG9uZyBIVyBkcml2ZXIg Y29udGV4dAogICogQG1peGVyX29wX21vZGU6CW1peGVyIGJsZW5kaW5nIG9wZXJhdGlvbiBtb2Rl CiAgKiBAZmx1c2hfbWFzazoJbWl4ZXIgZmx1c2ggbWFzayBmb3IgY3RsLCBtaXhlciBhbmQgcGlw ZQogICovCiBzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgewogCXN0cnVjdCBkcHVfaHdfbWl4ZXIgKmh3 X2xtOwogCXN0cnVjdCBkcHVfaHdfY3RsICpsbV9jdGw7Ci0Jc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyOworCXN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKmh3X3BwOwogCXUzMiBtaXhlcl9vcF9t b2RlOwogCXUzMiBmbHVzaF9tYXNrOwogfTsKQEAgLTEzNCw2ICsxMzYsMTMgQEAgc3RydWN0IGRw dV9jcnRjX2V2ZW50IHsKICAqLwogI2RlZmluZSBEUFVfQ1JUQ19NQVhfRVZFTlRfQ09VTlQJMTYK IAorc3RydWN0IGRwdV9jcnRjX3RvcG9sb2d5IHsKKwlib29sIG5lZWRzX3JlYWxsb2M7CisJaW50 IG51bV9jdGxzOworCWludCBudW1fbG1zOworCWludCBudW1faW50ZnM7Cit9OworCiAvKioKICAq IHN0cnVjdCBkcHVfY3J0YyAtIHZpcnR1YWxpemVkIENSVEMgZGF0YSBzdHJ1Y3R1cmUKICAqIEBi YXNlICAgICAgICAgIDogQmFzZSBkcm0gY3J0YyBzdHJ1Y3R1cmUKQEAgLTI0Myw2ICsyNTIsOCBA QCBzdHJ1Y3QgZHB1X2NydGMgewogICogQG1peGVycyAgICAgICAgOiBMaXN0IG9mIGFjdGl2ZSBt aXhlcnMKICAqIEBudW1fY3RscyAgICAgIDogTnVtYmVyIG9mIGN0bCBwYXRocyBpbiB1c2UKICAq IEBod19jdGxzICAgICAgIDogTGlzdCBvZiBhY3RpdmVsIGN0bCBwYXRocworICogQG51bV9pbnRm ICAgICAgOiBOdW1lZXIgb2YgaW50ZXJmYWNlcyBpbiB1c2VzCisgKiBAaHdfaW50ZnMgICAgICA6 IExpc3Qgb2YgaW50ZXJmYWNlcyBpbiB1c2UKICAqLwogc3RydWN0IGRwdV9jcnRjX3N0YXRlIHsK IAlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgYmFzZTsKQEAgLTI2MiwxMSArMjczLDI2IEBAIHN0cnVj dCBkcHVfY3J0Y19zdGF0ZSB7CiAKIAl1MzIgbnVtX2N0bHM7CiAJc3RydWN0IGRwdV9od19jdGwg Kmh3X2N0bHNbQ1JUQ19EVUFMX01JWEVSU107CisKKwkvKioKKwkgKiBhcyBkcm0gZW5jb2RlcnMg ZG9lc24ndCBoYXZlIGRlZGljYXRlcyBzdGF0ZSBvYmplY3RzCisJICogYW5kIGRybSBjb25uZWN0 b3JzIGFyZSBub3Qgb3duZWQgYnkgRFBVLCBtYWludGFpbgorCSAqIEhXIGludGVyZmFjZSBhbmQg b3RoZXIgaW50ZXJmYWNlIHJlbGF0ZWQgYmxvY2tzCisJICogaW4gY3J0YyBzdGF0ZQorCSAqCisJ ICogVE9ETzogTm8gc3VwcG9ydCBmb3IgY2xvbmUgbW9kZSB5ZXQgd2hlcmUgYSBjcnRjCisJICog Y2FuIGJlIGF0dGFjaGVkIHdpdGggbW9yZSB0aGFuIG9uZSBlbmNvZGVyL2Nvbm5lY3Rvci4KKwkg Ki8KKwl1MzIgbnVtX2ludGZzOworCXN0cnVjdCBkcHVfaHdfaW50ZiAqaHdfaW50ZnNbQ1JUQ19E VUFMX01JWEVSU107CiB9OwogCiAjZGVmaW5lIHRvX2RwdV9jcnRjX3N0YXRlKHgpIFwKIAljb250 YWluZXJfb2YoeCwgc3RydWN0IGRwdV9jcnRjX3N0YXRlLCBiYXNlKQogCisvKiBnZXQgY3J0YyBp ZCBmcm9tIGRwdSBjcnRjIHN0YXRlKi8KKyNkZWZpbmUgZ2V0X2NydGNfaWQoeCkgKCh4LT5iYXNl LmNydGMpLT5iYXNlLmlkKQorCiAvKioKICAqIGRwdV9jcnRjX2dldF9taXhlcl93aWR0aCAtIGdl dCB0aGUgbWl4ZXIgd2lkdGgKICAqIE1peGVyIHdpZHRoIHdpbGwgYmUgc2FtZSBhcyBwYW5lbCB3 aWR0aCgvMiBmb3Igc3BsaXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfZW5jb2Rlci5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Vu Y29kZXIuYwppbmRleCA1ZTgyMGJjLi4xMjhiMGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKQEAgLTY5LDggKzY5LDYgQEAKIAogI2RlZmluZSBJRExF X1NIT1JUX1RJTUVPVVQJMQogCi0jZGVmaW5lIE1BWF9WRElTUExBWV9TUExJVCAxMDgwCi0KIC8q KgogICogZW51bSBkcHVfZW5jX3JjX2V2ZW50cyAtIGV2ZW50cyBmb3IgcmVzb3VyY2UgY29udHJv bCBzdGF0ZSBtYWNoaW5lCiAgKiBARFBVX0VOQ19SQ19FVkVOVF9LSUNLT0ZGOgpAQCAtNTgwLDI1 ICs1NzgsMzIgQEAgc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX2FkanVzdF9tb2RlKHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJfQogfQogCi1zdGF0aWMgc3RydWN0IG1zbV9kaXNw bGF5X3RvcG9sb2d5IGRwdV9lbmNvZGVyX2dldF90b3BvbG9neSgKK3N0YXRpYyBzdHJ1Y3QgZHB1 X2NydGNfdG9wb2xvZ3kgZHB1X2VuY29kZXJfZ2V0X3RvcG9sb2d5KAogCQkJc3RydWN0IGRwdV9l bmNvZGVyX3ZpcnQgKmRwdV9lbmMsCi0JCQlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcywKLQkJCXN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQorCQkJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpj c3RhdGUpCiB7Ci0Jc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5OworCXN0cnVj dCBkcHVfY3J0Y190b3BvbG9neSB0b3BvbG9neTsKIAlpbnQgaSwgaW50Zl9jb3VudCA9IDA7CiAK KwltZW1zZXQoJnRvcG9sb2d5LCAwLCBzaXplb2YodG9wb2xvZ3kpKTsKKwogCWZvciAoaSA9IDA7 IGkgPCBNQVhfUEhZU19FTkNPREVSU19QRVJfVklSVFVBTDsgaSsrKQogCQlpZiAoZHB1X2VuYy0+ cGh5c19lbmNzW2ldKQogCQkJaW50Zl9jb3VudCsrOwogCi0JLyogVXNlciBzcGxpdCB0b3BvbG9n eSBmb3Igd2lkdGggPiAxMDgwICovCi0JdG9wb2xvZ3kubnVtX2xtID0gKG1vZGUtPnZkaXNwbGF5 ID4gTUFYX1ZESVNQTEFZX1NQTElUKSA/IDIgOiAxOwotCXRvcG9sb2d5Lm51bV9lbmMgPSAwOwot CXRvcG9sb2d5Lm51bV9pbnRmID0gaW50Zl9jb3VudDsKKwl0b3BvbG9neS5udW1faW50ZnMgPSBp bnRmX2NvdW50OworCisJdG9wb2xvZ3kubmVlZHNfcmVhbGxvYyA9IChjc3RhdGUtPm51bV9pbnRm cyAhPSB0b3BvbG9neS5udW1faW50ZnMpOworCisJaWYgKHRvcG9sb2d5Lm5lZWRzX3JlYWxsb2Mp CisJCURQVV9ERUJVR19FTkMoZHB1X2VuYywKKwkJCSJjcnRjICVkIG5lZWRzIGh3IHJlYWxsb2Nh dGlvbi4gaW50ZiAoJWQgLSAlZClcbiIsCisJCQlnZXRfY3J0Y19pZChjc3RhdGUpLAorCQkJY3N0 YXRlLT5udW1faW50ZnMsIHRvcG9sb2d5Lm51bV9pbnRmcyk7CiAKIAlyZXR1cm4gdG9wb2xvZ3k7 CiB9CisKIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfdmlydF9hdG9taWNfY2hlY2soCiAJCXN0cnVj dCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlLApAQCAtNjA5LDcgKzYxNCwxMCBAQCBzdGF0aWMgaW50IGRwdV9lbmNvZGVyX3ZpcnRfYXRv bWljX2NoZWNrKAogCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOwogCWNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlOwogCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGpfbW9kZTsK LQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kgdG9wb2xvZ3k7CisJc3RydWN0IGRwdV9jcnRj X3RvcG9sb2d5IHRvcG9sb2d5OworCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqZHB1X2NzdGF0ZTsK KwlzdHJ1Y3QgZHB1X3ByaXZhdGVfc3RhdGUgKmRwdV9wcml2X3N0YXRlOworCXN0cnVjdCBkcHVf ZW5jb2Rlcl9od19yZXNvdXJjZXMgZW5jX2h3X3JlczsKIAlpbnQgaSA9IDA7CiAJaW50IHJldCA9 IDA7CiAKQEAgLTYyNiw2ICs2MzQsNyBAQCBzdGF0aWMgaW50IGRwdV9lbmNvZGVyX3ZpcnRfYXRv bWljX2NoZWNrKAogCWRwdV9rbXMgPSB0b19kcHVfa21zKHByaXYtPmttcyk7CiAJbW9kZSA9ICZj cnRjX3N0YXRlLT5tb2RlOwogCWFkal9tb2RlID0gJmNydGNfc3RhdGUtPmFkanVzdGVkX21vZGU7 CisJZHB1X2NzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGNfc3RhdGUpOwogCURQVV9FVlQz MihEUk1JRChkcm1fZW5jKSk7CiAKIAkvKgpAQCAtNjU1LDI3ICs2NjQsMzMgQEAgc3RhdGljIGlu dCBkcHVfZW5jb2Rlcl92aXJ0X2F0b21pY19jaGVjaygKIAkJfQogCX0KIAotCXRvcG9sb2d5ID0g ZHB1X2VuY29kZXJfZ2V0X3RvcG9sb2d5KGRwdV9lbmMsIGRwdV9rbXMsIGFkal9tb2RlKTsKKwlp ZiAocmV0KQorCQlnb3RvIGVuZDsKIAotCS8qIFJlc2VydmUgZHluYW1pYyByZXNvdXJjZXMgbm93 LiBJbmRpY2F0aW5nIEF0b21pY1Rlc3QgcGhhc2UgKi8KLQlpZiAoIXJldCkgewotCQkvKgotCQkg KiBBdm9pZCByZXNlcnZpbmcgcmVzb3VyY2VzIHdoZW4gbW9kZSBzZXQgaXMgcGVuZGluZy4gVG9w b2xvZ3kKLQkJICogaW5mbyBtYXkgbm90IGJlIGF2YWlsYWJsZSB0byBjb21wbGV0ZSByZXNlcnZh dGlvbi4KLQkJICovCi0JCWlmIChkcm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChjcnRjX3N0 YXRlKQotCQkJCSYmIGRwdV9lbmMtPm1vZGVfc2V0X2NvbXBsZXRlKSB7Ci0JCQlyZXQgPSBkcHVf cm1fcmVzZXJ2ZSgmZHB1X2ttcy0+cm0sIGRybV9lbmMsIGNydGNfc3RhdGUsCi0JCQkJY29ubl9z dGF0ZSwgdG9wb2xvZ3ksIHRydWUpOwotCQkJZHB1X2VuYy0+bW9kZV9zZXRfY29tcGxldGUgPSBm YWxzZTsKLQkJfQorCS8qIGh3IHJlc291cmNlIGFsbG9jYXRpb24gKi8KKwlkcHVfZW5jb2Rlcl9n ZXRfaHdfcmVzb3VyY2VzKGRybV9lbmMsICZlbmNfaHdfcmVzLCBjb25uX3N0YXRlKTsKKworCWRw dV9wcml2X3N0YXRlID0gZHB1X2dldF9wcml2YXRlX3N0YXRlKGNydGNfc3RhdGUtPnN0YXRlKTsK KwlpZiAoSVNfRVJSKGRwdV9wcml2X3N0YXRlKSkKKwkJZ290byBlbmQ7CisKKwl0b3BvbG9neSA9 IGRwdV9lbmNvZGVyX2dldF90b3BvbG9neShkcHVfZW5jLCBkcHVfY3N0YXRlKTsKKwlpZiAoIXRv cG9sb2d5Lm5lZWRzX3JlYWxsb2MpCisJCWdvdG8gZW5kOworCisJZHB1X3JtX3JlbGVhc2VfZW5j b2Rlcl9yZXMoJmRwdV9wcml2X3N0YXRlLT5ybSwgZHB1X2NzdGF0ZSk7CisJcmV0ID0gZHB1X3Jt X3Jlc2VydmVfZW5jb2Rlcl9yZXMoJmRwdV9wcml2X3N0YXRlLT5ybSwKKwkJCQkJCSAgICAgZHB1 X2NzdGF0ZSwgJmVuY19od19yZXMpOworCWlmIChyZXQpIHsKKwkJRFBVX0VSUk9SX0VOQyhkcHVf ZW5jLAorCQkJCSJmYWlsZWQgdG8gYWxsb2NhdGUgaHcgcmVzb3VyY2VzXG4iKTsKKwkJZ290byBl bmQ7CiAJfQogCi0JaWYgKCFyZXQpCi0JCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGpfbW9kZSwg MCk7CisJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkal9tb2RlLCAwKTsKIAogCURQVV9FVlQzMihE Uk1JRChkcm1fZW5jKSwgYWRqX21vZGUtPmZsYWdzLCBhZGpfbW9kZS0+cHJpdmF0ZV9mbGFncyk7 Ci0KK2VuZDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMDMxLDExICsxMDQ2LDggQEAgc3RhdGlj IHZvaWQgZHB1X2VuY29kZXJfdmlydF9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9l bmMsCiAJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CiAJc3RydWN0IGxpc3RfaGVhZCAqY29ubmVj dG9yX2xpc3Q7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4gPSBOVUxMLCAqY29ubl9pdGVy OwotCXN0cnVjdCBkcHVfcm1faHdfaXRlciBwcF9pdGVyLCBjdGxfaXRlcjsKLQlzdHJ1Y3QgbXNt X2Rpc3BsYXlfdG9wb2xvZ3kgdG9wb2xvZ3k7Ci0Jc3RydWN0IGRwdV9od19jdGwgKmh3X2N0bFtN QVhfQ0hBTk5FTFNfUEVSX0VOQ107Ci0KLQlpbnQgaSA9IDAsIHJldDsKKwlzdHJ1Y3QgZHB1X2Ny dGNfc3RhdGUgKmRwdV9jc3RhdGU7CisJaW50IGkgPSAwOwogCiAJaWYgKCFkcm1fZW5jKSB7CiAJ CURQVV9FUlJPUigiaW52YWxpZCBlbmNvZGVyXG4iKTsKQEAgLTEwNjMsNTIgKzEwNzUsMTYgQEAg c3RhdGljIHZvaWQgZHB1X2VuY29kZXJfdmlydF9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIg KmRybV9lbmMsCiAJCXJldHVybjsKIAl9CiAKLQl0b3BvbG9neSA9IGRwdV9lbmNvZGVyX2dldF90 b3BvbG9neShkcHVfZW5jLCBkcHVfa21zLCBhZGpfbW9kZSk7Ci0KLQkvKiBSZXNlcnZlIGR5bmFt aWMgcmVzb3VyY2VzIG5vdy4gSW5kaWNhdGluZyBub24tQXRvbWljVGVzdCBwaGFzZSAqLwotCXJl dCA9IGRwdV9ybV9yZXNlcnZlKCZkcHVfa21zLT5ybSwgZHJtX2VuYywgZHJtX2VuYy0+Y3J0Yy0+ c3RhdGUsCi0JCQljb25uLT5zdGF0ZSwgdG9wb2xvZ3ksIGZhbHNlKTsKLQlpZiAocmV0KSB7Ci0J CURQVV9FUlJPUl9FTkMoZHB1X2VuYywKLQkJCQkiZmFpbGVkIHRvIHJlc2VydmUgaHcgcmVzb3Vy Y2VzLCAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuOwotCX0KLQotCWRwdV9ybV9pbml0X2h3X2l0ZXIo JnBwX2l0ZXIsIGRybV9lbmMtPmJhc2UuaWQsIERQVV9IV19CTEtfUElOR1BPTkcpOwotCWZvciAo aSA9IDA7IGkgPCBNQVhfQ0hBTk5FTFNfUEVSX0VOQzsgaSsrKSB7Ci0JCWRwdV9lbmMtPmh3X3Bw W2ldID0gTlVMTDsKLQkJaWYgKCFkcHVfcm1fZ2V0X2h3KCZkcHVfa21zLT5ybSwgJnBwX2l0ZXIp KQotCQkJYnJlYWs7Ci0JCWRwdV9lbmMtPmh3X3BwW2ldID0gKHN0cnVjdCBkcHVfaHdfcGluZ3Bv bmcgKikgcHBfaXRlci5odzsKLQl9Ci0KLQlkcHVfcm1faW5pdF9od19pdGVyKCZjdGxfaXRlciwg ZHJtX2VuYy0+YmFzZS5pZCwgRFBVX0hXX0JMS19DVEwpOwotCWZvciAoaSA9IDA7IGkgPCBNQVhf Q0hBTk5FTFNfUEVSX0VOQzsgaSsrKSB7Ci0JCWh3X2N0bFtpXSA9IE5VTEw7Ci0JCWlmICghZHB1 X3JtX2dldF9odygmZHB1X2ttcy0+cm0sICZjdGxfaXRlcikpCi0JCQlicmVhazsKLQkJaHdfY3Rs W2ldID0gKHN0cnVjdCBkcHVfaHdfY3RsICopY3RsX2l0ZXIuaHc7Ci0JfQorCWRwdV9jc3RhdGUg PSB0b19kcHVfY3J0Y19zdGF0ZShkcm1fZW5jLT5jcnRjLT5zdGF0ZSk7CiAKIAlmb3IgKGkgPSAw OyBpIDwgZHB1X2VuYy0+bnVtX3BoeXNfZW5jczsgaSsrKSB7CiAJCXN0cnVjdCBkcHVfZW5jb2Rl cl9waHlzICpwaHlzID0gZHB1X2VuYy0+cGh5c19lbmNzW2ldOwogCiAJCWlmIChwaHlzKSB7Ci0J CQlpZiAoIWRwdV9lbmMtPmh3X3BwW2ldKSB7Ci0JCQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLAot CQkJCSAgICAibm8gcHAgYmxvY2sgYXNzaWduZWQgYXQgaWR4OiAlZFxuIiwgaSk7Ci0JCQkJcmV0 dXJuOwotCQkJfQotCQkJcGh5cy0+aHdfcHAgPSBkcHVfZW5jLT5od19wcFtpXTsKLQotCQkJaWYg KCFod19jdGxbaV0pIHsKLQkJCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsCi0JCQkJICAgICJubyBj dGwgYmxvY2sgYXNzaWduZWQgYXQgaWR4OiAlZFxuIiwgaSk7Ci0JCQkJcmV0dXJuOwotCQkJfQot CQkJcGh5cy0+aHdfY3RsID0gaHdfY3RsW2ldOwotCisJCQlkcHVfZW5jLT5od19wcFtpXSA9IGRw dV9jc3RhdGUtPm1peGVyc1tpXS5od19wcDsKKwkJCXBoeXMtPmh3X3BwID0gZHB1X2NzdGF0ZS0+ bWl4ZXJzW2ldLmh3X3BwOwogCQkJcGh5cy0+Y29ubmVjdG9yID0gY29ubi0+c3RhdGUtPmNvbm5l Y3RvcjsKKwkJCXBoeXMtPmh3X2N0bCA9IGRwdV9jc3RhdGUtPm1peGVyc1tpXS5sbV9jdGw7CiAJ CQlpZiAocGh5cy0+b3BzLm1vZGVfc2V0KQogCQkJCXBoeXMtPm9wcy5tb2RlX3NldChwaHlzLCBt b2RlLCBhZGpfbW9kZSk7CiAJCX0KQEAgLTEyNTIsNyArMTIyOCw5IEBAIHN0YXRpYyB2b2lkIGRw dV9lbmNvZGVyX3ZpcnRfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCiAJc3Ry dWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsKIAlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKLQlpbnQgaSA9IDA7CisJc3RydWN0IGRwdV9w cml2YXRlX3N0YXRlICpkcHVfcHJpdl9zdGF0ZTsKKwlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNz dGF0ZTsKKwlpbnQgcmMsIGkgPSAwOwogCiAJaWYgKCFkcm1fZW5jKSB7CiAJCURQVV9FUlJPUigi aW52YWxpZCBlbmNvZGVyXG4iKTsKQEAgLTEyNjYsNiArMTI0NCw3IEBAIHN0YXRpYyB2b2lkIGRw dV9lbmNvZGVyX3ZpcnRfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCiAJfQog CiAJbW9kZSA9ICZkcm1fZW5jLT5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKKwljc3RhdGUg PSB0b19kcHVfY3J0Y19zdGF0ZShkcm1fZW5jLT5jcnRjLT5zdGF0ZSk7CiAKIAlkcHVfZW5jID0g dG9fZHB1X2VuY29kZXJfdmlydChkcm1fZW5jKTsKIAlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJc biIpOwpAQCAtMTI3Myw2ICsxMjUyLDkgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfdmlydF9k aXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYykKIAlwcml2ID0gZHJtX2VuYy0+ZGV2 LT5kZXZfcHJpdmF0ZTsKIAlkcHVfa21zID0gdG9fZHB1X2ttcyhwcml2LT5rbXMpOwogCisJLyog YWNjZXNzaW5nIGFmdGVyIHN3YXAgc3RhdGUuIHBpdl9vYmouc3RhdGUgaXMgdGhlIGN1cnJlbnQg c3RhdGUgKi8KKwlkcHVfcHJpdl9zdGF0ZSA9IHRvX2RwdV9wcml2YXRlX3N0YXRlKGRwdV9rbXMt PnByaXZfb2JqLnN0YXRlKTsKKwogCURQVV9FVlQzMihEUk1JRChkcm1fZW5jKSk7CiAKIAkvKiB3 YWl0IGZvciBpZGxlICovCkBAIC0xMzAyLDkgKzEyODQsMTEgQEAgc3RhdGljIHZvaWQgZHB1X2Vu Y29kZXJfdmlydF9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYykKIAogCWRwdV9l bmMtPmN1cl9tYXN0ZXIgPSBOVUxMOwogCi0JRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAiZW5jb2Rl ciBkaXNhYmxlZFxuIik7CisJcmMgPSBkcHVfcm1fcmVsZWFzZV9lbmNvZGVyX3JlcygmZHB1X3By aXZfc3RhdGUtPnJtLCBjc3RhdGUpOworCWlmIChyYykKKwkJRFBVX0VSUk9SKCJlcnJvciBpbiBy ZWxlYXNpbmcgZW5jb2RlciByZXNvdXJjZXNcbiIpOwogCi0JZHB1X3JtX3JlbGVhc2UoJmRwdV9r bXMtPnJtLCBkcm1fZW5jKTsKKwlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJlbmNvZGVyIGRpc2Fi bGVkXG4iKTsKIH0KIAogc3RhdGljIGVudW0gZHB1X2ludGYgZHB1X2VuY29kZXJfZ2V0X2ludGYo c3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXMuaAppbmRleCAzNWNlODhhLi5lMjEwNTRmIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzLmgK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oCkBA IC0zODgsNyArMzg4LDcgQEAgc3RhdGljIGlubGluZSBlbnVtIGRwdV8zZF9ibGVuZF9tb2RlIGRw dV9lbmNvZGVyX2hlbHBlcl9nZXRfM2RfYmxlbmRfbW9kZSgKIAlkcHVfY3N0YXRlID0gdG9fZHB1 X2NydGNfc3RhdGUocGh5c19lbmMtPnBhcmVudC0+Y3J0Yy0+c3RhdGUpOwogCiAJaWYgKHBoeXNf ZW5jLT5zcGxpdF9yb2xlID09IEVOQ19ST0xFX1NPTE8gJiYKLQkgICAgKGRwdV9jc3RhdGUtPm51 bV9taXhlcnMgPT0gMikpCisJCShkcHVfY3N0YXRlLT5udW1fbWl4ZXJzID09IDIpKQogCQlyZXR1 cm4gQkxFTkRfM0RfSF9ST1dfSU5UOwogCiAJcmV0dXJuIEJMRU5EXzNEX05PTkU7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5j IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c192aWQuYwpp bmRleCBjNzRmNGM0Li5jYmM3ZjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlkLmMKQEAgLTQ2NywzNSArNDY3LDI1IEBAIHN0 YXRpYyBpbnQgZHB1X2VuY29kZXJfcGh5c192aWRfY29udHJvbF92YmxhbmtfaXJxKAogCiBzdGF0 aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9lbmFibGUoc3RydWN0IGRwdV9lbmNvZGVyX3Bo eXMgKnBoeXNfZW5jKQogewotCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0 IGRwdV9lbmNvZGVyX3BoeXNfdmlkICp2aWRfZW5jOwotCXN0cnVjdCBkcHVfcm1faHdfaXRlciBp dGVyOwogCXN0cnVjdCBkcHVfaHdfY3RsICpjdGw7Ci0JdTMyIGZsdXNoX21hc2sgPSAwOworCXN0 cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOworCXUzMiBpLCBmbHVzaF9tYXNrID0gMDsKIAog CWlmICghcGh5c19lbmMgfHwgIXBoeXNfZW5jLT5wYXJlbnQgfHwgIXBoeXNfZW5jLT5wYXJlbnQt PmRldiB8fAogCQkJIXBoeXNfZW5jLT5wYXJlbnQtPmRldi0+ZGV2X3ByaXZhdGUpIHsKIAkJRFBV X0VSUk9SKCJpbnZhbGlkIGVuY29kZXIvZGV2aWNlXG4iKTsKIAkJcmV0dXJuOwogCX0KLQlwcml2 ID0gcGh5c19lbmMtPnBhcmVudC0+ZGV2LT5kZXZfcHJpdmF0ZTsKLQogCXZpZF9lbmMgPSB0b19k cHVfZW5jb2Rlcl9waHlzX3ZpZChwaHlzX2VuYyk7CiAJY3RsID0gcGh5c19lbmMtPmh3X2N0bDsK IAotCWRwdV9ybV9pbml0X2h3X2l0ZXIoJml0ZXIsIHBoeXNfZW5jLT5wYXJlbnQtPmJhc2UuaWQs IERQVV9IV19CTEtfSU5URik7Ci0Jd2hpbGUgKGRwdV9ybV9nZXRfaHcoJnBoeXNfZW5jLT5kcHVf a21zLT5ybSwgJml0ZXIpKSB7Ci0JCXN0cnVjdCBkcHVfaHdfaW50ZiAqaHdfaW50ZiA9IChzdHJ1 Y3QgZHB1X2h3X2ludGYgKilpdGVyLmh3OworCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHBo eXNfZW5jLT5wYXJlbnQtPmNydGMtPnN0YXRlKTsKKwlmb3IgKGkgPSAwOyBpIDwgY3N0YXRlLT5u dW1faW50ZnM7IGkrKykJeworCQlzdHJ1Y3QgZHB1X2h3X2ludGYgKmh3X2ludGYgPSBjc3RhdGUt Pmh3X2ludGZzW2ldOwogCi0JCWlmIChod19pbnRmLT5pZHggPT0gcGh5c19lbmMtPmludGZfaWR4 KSB7CisJCWlmIChod19pbnRmICYmIChod19pbnRmLT5pZHggPT0gcGh5c19lbmMtPmludGZfaWR4 KSkKIAkJCXZpZF9lbmMtPmh3X2ludGYgPSBod19pbnRmOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0K LQlpZiAoIXZpZF9lbmMtPmh3X2ludGYpIHsKLQkJRFBVX0VSUk9SKCJod19pbnRmIG5vdCBhc3Np Z25lZFxuIik7Ci0JCXJldHVybjsKIAl9CiAKIAlEUFVfREVCVUdfVklERU5DKHZpZF9lbmMsICJc biIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5j IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jCmluZGV4IGIzZWFmM2Yu LjhiZDEyMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9r bXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMKQEAgLTEw MDUsNiArMTAwNSw3IEBAIHN0YXRpYyBsb25nIGRwdV9rbXNfcm91bmRfcGl4Y2xrKHN0cnVjdCBt c21fa21zICprbXMsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKIHN0YXRpYyB2b2lkIF9kcHVfa21zX2h3 X2Rlc3Ryb3koc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCiB7CiAJc3RydWN0IGRybV9kZXZpY2Ug KmRldjsKKwlzdHJ1Y3QgZHB1X3ByaXZhdGVfc3RhdGUgKmRwdV9wcml2X3N0YXRlOwogCWludCBp OwogCiAJZGV2ID0gZHB1X2ttcy0+ZGV2OwpAQCAtMTAzOSw5ICsxMDQwLDEyIEBAIHN0YXRpYyB2 b2lkIF9kcHVfa21zX2h3X2Rlc3Ryb3koc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCiAJCX0KIAl9 CiAKLQlpZiAoZHB1X2ttcy0+cm1faW5pdCkKLQkJZHB1X3JtX2Rlc3Ryb3koJmRwdV9rbXMtPnJt KTsKLQlkcHVfa21zLT5ybV9pbml0ID0gZmFsc2U7CisJZHB1X3ByaXZfc3RhdGUgPSB0b19kcHVf cHJpdmF0ZV9zdGF0ZShkcHVfa21zLT5wcml2X29iai5zdGF0ZSk7CisJaWYgKGRwdV9wcml2X3N0 YXRlKSB7CisJCWlmIChkcHVfcHJpdl9zdGF0ZS0+cm1faW5pdCkKKwkJCWRwdV9ybV9kZXN0cm95 KCZkcHVfcHJpdl9zdGF0ZS0+cm0pOworCQlkcHVfcHJpdl9zdGF0ZS0+cm1faW5pdCA9IGZhbHNl OworCX0KIAogCWlmIChkcHVfa21zLT5jYXRhbG9nKQogCQlkcHVfaHdfY2F0YWxvZ19kZWluaXQo ZHB1X2ttcy0+Y2F0YWxvZyk7CkBAIC0xMzkxLDYgKzEzOTUsNyBAQCBzdGF0aWMgaW50IGRwdV9r bXNfaHdfaW5pdChzdHJ1Y3QgbXNtX2ttcyAqa21zKQogCXN0cnVjdCBkcHVfa21zICpkcHVfa21z OwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CiAJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJp djsKKwlzdHJ1Y3QgZHB1X3ByaXZhdGVfc3RhdGUgKmRwdV9wcml2X3N0YXRlOwogCWludCBpLCBy YyA9IC1FSU5WQUw7CiAKIAlpZiAoIWttcykgewpAQCAtMTUxMiwxNiArMTUxNywxNiBAQCBzdGF0 aWMgaW50IGRwdV9rbXNfaHdfaW5pdChzdHJ1Y3QgbXNtX2ttcyAqa21zKQogCQlnb3RvIHBvd2Vy X2Vycm9yOwogCX0KIAotCXJjID0gZHB1X3JtX2luaXQoJmRwdV9rbXMtPnJtLCBkcHVfa21zLT5j YXRhbG9nLCBkcHVfa21zLT5tbWlvLAotCQkJZHB1X2ttcy0+ZGV2KTsKKwlkcHVfcHJpdl9zdGF0 ZSA9IHRvX2RwdV9wcml2YXRlX3N0YXRlKGRwdV9rbXMtPnByaXZfb2JqLnN0YXRlKTsKKwlyYyA9 IGRwdV9ybV9pbml0KCZkcHVfcHJpdl9zdGF0ZS0+cm0sIGRwdV9rbXMtPmNhdGFsb2csIGRwdV9r bXMtPm1taW8pOwogCWlmIChyYykgewogCQlEUFVfRVJST1IoInJtIGluaXQgZmFpbGVkOiAlZFxu IiwgcmMpOwogCQlnb3RvIHBvd2VyX2Vycm9yOwogCX0KIAotCWRwdV9rbXMtPnJtX2luaXQgPSB0 cnVlOworCWRwdV9wcml2X3N0YXRlLT5ybV9pbml0ID0gdHJ1ZTsKIAotCWRwdV9rbXMtPmh3X21k cCA9IGRwdV9ybV9nZXRfbWRwKCZkcHVfa21zLT5ybSk7CisJZHB1X2ttcy0+aHdfbWRwID0gZHB1 X3JtX2dldF9tZHAoJmRwdV9wcml2X3N0YXRlLT5ybSk7CiAJaWYgKElTX0VSUl9PUl9OVUxMKGRw dV9rbXMtPmh3X21kcCkpIHsKIAkJcmMgPSBQVFJfRVJSKGRwdV9rbXMtPmh3X21kcCk7CiAJCWlm ICghZHB1X2ttcy0+aHdfbWRwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2ttcy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5o CmluZGV4IDkyNGQ4OTY3Li4xZTRiNWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfa21zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2ttcy5oCkBAIC0zMiwxMCArMzIsMTAgQEAKICNpbmNsdWRlICJkcHVfaHdfbG0uaCIKICNp bmNsdWRlICJkcHVfaHdfaW50ZXJydXB0cy5oIgogI2luY2x1ZGUgImRwdV9od190b3AuaCIKLSNp bmNsdWRlICJkcHVfcm0uaCIKICNpbmNsdWRlICJkcHVfcG93ZXJfaGFuZGxlLmgiCiAjaW5jbHVk ZSAiZHB1X2lycS5oIgogI2luY2x1ZGUgImRwdV9jb3JlX3BlcmYuaCIKKyNpbmNsdWRlICJkcHVf cm0uaCIKIAogI2RlZmluZSBEUk1JRCh4KSAoKHgpID8gKHgpLT5iYXNlLmlkIDogLTEpCiAKQEAg LTE4NCw5ICsxODQsNiBAQCBzdHJ1Y3QgZHB1X2ttcyB7CiAJc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN1c3BlbmRfc3RhdGU7CiAJYm9vbCBzdXNwZW5kX2Jsb2NrOwogCi0Jc3RydWN0IGRwdV9y bSBybTsKLQlib29sIHJtX2luaXQ7Ci0KIAlzdHJ1Y3QgZHB1X2h3X3ZiaWYgKmh3X3ZiaWZbVkJJ Rl9NQVhdOwogCXN0cnVjdCBkcHVfaHdfbWRwICpod19tZHA7CiAKQEAgLTIwMiw2ICsxOTksOSBA QCBzdHJ1Y3QgZHB1X2ttcyB7CiAKIHN0cnVjdCBkcHVfcHJpdmF0ZV9zdGF0ZSB7CiAJc3RydWN0 IGRybV9wcml2YXRlX3N0YXRlIGJhc2U7CisKKwlzdHJ1Y3QgZHB1X3JtIHJtOworCWJvb2wgcm1f aW5pdDsKIH07CiAKIHN0cnVjdCB2c3luY19pbmZvIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X3JtLmMKaW5kZXggZWY5NDVkNi4uMDE4ZDAxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X3JtLmMKQEAgLTIwLDEzMiArMjAsNTkgQEAKICNpbmNsdWRlICJkcHVfaHdf cGluZ3BvbmcuaCIKICNpbmNsdWRlICJkcHVfaHdfaW50Zi5oIgogI2luY2x1ZGUgImRwdV9lbmNv ZGVyLmgiCi0KLSNkZWZpbmUgUkVTRVJWRURfQllfT1RIRVIoaCwgcikgXAotCSgoaCktPnJzdnAg JiYgKChoKS0+cnN2cC0+ZW5jX2lkICE9IChyKS0+ZW5jX2lkKSkKLQotI2RlZmluZSBSTV9SUV9M T0NLKHIpICgociktPnRvcF9jdHJsICYgQklUKERQVV9STV9UT1BDVExfUkVTRVJWRV9MT0NLKSkK LSNkZWZpbmUgUk1fUlFfQ0xFQVIocikgKChyKS0+dG9wX2N0cmwgJiBCSVQoRFBVX1JNX1RPUENU TF9SRVNFUlZFX0NMRUFSKSkKLSNkZWZpbmUgUk1fUlFfRFMocikgKChyKS0+dG9wX2N0cmwgJiBC SVQoRFBVX1JNX1RPUENUTF9EUykpCi0jZGVmaW5lIFJNX0lTX1RPUE9MT0dZX01BVENIKHQsIHIp ICgodCkubnVtX2xtID09IChyKS5udW1fbG0gJiYgXAotCQkJCSh0KS5udW1fY29tcF9lbmMgPT0g KHIpLm51bV9lbmMgJiYgXAotCQkJCSh0KS5udW1faW50ZiA9PSAocikubnVtX2ludGYpCi0KLXN0 cnVjdCBkcHVfcm1fdG9wb2xvZ3lfZGVmIHsKLQllbnVtIGRwdV9ybV90b3BvbG9neV9uYW1lIHRv cF9uYW1lOwotCWludCBudW1fbG07Ci0JaW50IG51bV9jb21wX2VuYzsKLQlpbnQgbnVtX2ludGY7 Ci0JaW50IG51bV9jdGw7Ci0JaW50IG5lZWRzX3NwbGl0X2Rpc3BsYXk7Ci19OwotCi1zdGF0aWMg Y29uc3Qgc3RydWN0IGRwdV9ybV90b3BvbG9neV9kZWYgZ190b3BfdGFibGVbXSA9IHsKLQl7ICAg RFBVX1JNX1RPUE9MT0dZX05PTkUsICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBmYWxzZSB9 LAotCXsgICBEUFVfUk1fVE9QT0xPR1lfU0lOR0xFUElQRSwgICAgICAgICAgIDEsIDAsIDEsIDEs IGZhbHNlIH0sCi0JeyAgIERQVV9STV9UT1BPTE9HWV9EVUFMUElQRSwgICAgICAgICAgICAgMiwg MCwgMiwgMiwgdHJ1ZSAgfSwKLQl7ICAgRFBVX1JNX1RPUE9MT0dZX0RVQUxQSVBFXzNETUVSR0Us ICAgICAyLCAwLCAxLCAxLCBmYWxzZSB9LAotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X3JtX3Jl cXVpcmVtZW50cyAtIFJlc2VydmF0aW9uIHJlcXVpcmVtZW50cyBwYXJhbWV0ZXIgYnVuZGxlCi0g KiBAdG9wX2N0cmw6ICB0b3BvbG9neSBjb250cm9sIHByZWZlcmVuY2UgZnJvbSBrZXJuZWwgY2xp ZW50Ci0gKiBAdG9wOiAgICAgICBzZWxlY3RlZCB0b3BvbG9neSBmb3IgdGhlIGRpc3BsYXkKLSAq IEBod19yZXM6CSAgIEhhcmR3YXJlIHJlc291cmNlcyByZXF1aXJlZCBhcyByZXBvcnRlZCBieSB0 aGUgZW5jb2RlcnMKLSAqLwotc3RydWN0IGRwdV9ybV9yZXF1aXJlbWVudHMgewotCXVpbnQ2NF90 IHRvcF9jdHJsOwotCWNvbnN0IHN0cnVjdCBkcHVfcm1fdG9wb2xvZ3lfZGVmICp0b3BvbG9neTsK LQlzdHJ1Y3QgZHB1X2VuY29kZXJfaHdfcmVzb3VyY2VzIGh3X3JlczsKLX07Ci0KLS8qKgotICog c3RydWN0IGRwdV9ybV9yc3ZwIC0gVXNlIENhc2UgUmVzZXJ2YXRpb24gdGFnZ2luZyBzdHJ1Y3R1 cmUKLSAqCVVzZWQgdG8gdGFnIEhXIGJsb2NrcyBhcyByZXNlcnZlZCBieSBhIENSVEMtPkVuY29k ZXItPkNvbm5lY3RvciBjaGFpbgotICoJQnkgdXNpbmcgYXMgYSB0YWcsIHJhdGhlciB0aGFuIGxp c3RzIG9mIHBvaW50ZXJzIHRvIEhXIGJsb2NrcyB1c2VkCi0gKgl3ZSBjYW4gYXZvaWQgc29tZSBs aXN0IG1hbmFnZW1lbnQgc2luY2Ugd2UgZG9uJ3Qga25vdyBob3cgbWFueSBibG9ja3MKLSAqCW9m IGVhY2ggdHlwZSBhIGdpdmVuIHVzZSBjYXNlIG1heSByZXF1aXJlLgotICogQGxpc3Q6CUxpc3Qg aGVhZCBmb3IgbGlzdCBvZiBhbGwgcmVzZXJ2YXRpb25zCi0gKiBAc2VxOglHbG9iYWwgUlNWUCBz ZXF1ZW5jZSBudW1iZXIgZm9yIGRlYnVnZ2luZywgZXNwZWNpYWxseSBmb3IKLSAqCQlkaWZmZXJl bnRpYXRpbmcgZGlmZmVyZW5jdCBhbGxvY2F0aW9ucyBmb3Igc2FtZSBlbmNvZGVyLgotICogQGVu Y19pZDoJUmVzZXJ2YXRpb25zIGFyZSB0cmFja2VkIGJ5IEVuY29kZXIgRFJNIG9iamVjdCBJRC4K LSAqCQlDUlRDcyBtYXkgYmUgY29ubmVjdGVkIHRvIG11bHRpcGxlIEVuY29kZXJzLgotICoJCUFu IGVuY29kZXIgb3IgY29ubmVjdG9yIGlkIGlkZW50aWZpZXMgdGhlIGRpc3BsYXkgcGF0aC4KLSAq IEB0b3BvbG9neQlEUk08LT5IVyB0b3BvbG9neSB1c2UgY2FzZQotICovCi1zdHJ1Y3QgZHB1X3Jt X3JzdnAgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQl1aW50MzJfdCBzZXE7Ci0JdWludDMy X3QgZW5jX2lkOwotCWVudW0gZHB1X3JtX3RvcG9sb2d5X25hbWUgdG9wb2xvZ3k7Ci19OworI2lu Y2x1ZGUgImRwdV9ybS5oIgogCiAvKioKICAqIHN0cnVjdCBkcHVfcm1faHdfYmxrIC0gaGFyZHdh cmUgYmxvY2sgdHJhY2tpbmcgbGlzdCBtZW1iZXIKLSAqIEBsaXN0OglMaXN0IGhlYWQgZm9yIGxp c3Qgb2YgYWxsIGhhcmR3YXJlIGJsb2NrcyB0cmFja2luZyBpdGVtcwotICogQHJzdnA6CVBvaW50 ZXIgdG8gdXNlIGNhc2UgcmVzZXJ2YXRpb24gaWYgcmVzZXJ2ZWQgYnkgYSBjbGllbnQKLSAqIEBy c3ZwX254dDoJVGVtcG9yYXJ5IHBvaW50ZXIgdXNlZCBkdXJpbmcgcmVzZXJ2YXRpb24gdG8gdGhl IGluY29taW5nCi0gKgkJcmVxdWVzdC4gV2lsbCBiZSBzd2FwcGVkIGludG8gcnN2cCBpZiBwcm9w b3NhbCBpcyBhY2NlcHRlZAogICogQHR5cGU6CVR5cGUgb2YgaGFyZHdhcmUgYmxvY2sgdGhpcyBz dHJ1Y3R1cmUgdHJhY2tzCisgKiBAZHJtX2lkOglEUk0gY29tcG9uZW50IElEIGFzc29jaWF0ZWQg d2l0aCB0aGUgSFcgYmxvY2sKICAqIEBpZDoJCUhhcmR3YXJlIElEIG51bWJlciwgd2l0aGluIGl0 J3Mgb3duIHNwYWNlLCBpZS4gTE1fWAotICogQGNhdGFsb2c6CVBvaW50ZXIgdG8gdGhlIGhhcmR3 YXJlIGNhdGFsb2cgZW50cnkgZm9yIHRoaXMgYmxvY2sKICAqIEBodzoJCVBvaW50ZXIgdG8gdGhl IGhhcmR3YXJlIHJlZ2lzdGVyIGFjY2VzcyBvYmplY3QgZm9yIHRoaXMgYmxvY2sKICAqLwogc3Ry dWN0IGRwdV9ybV9od19ibGsgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgZHB1 X3JtX3JzdnAgKnJzdnA7Ci0Jc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwX254dDsKIAllbnVtIGRw dV9od19ibGtfdHlwZSB0eXBlOwogCXVpbnQzMl90IGlkOworCXVpbnQzMl90IHJtX2lkOwogCXN0 cnVjdCBkcHVfaHdfYmxrICpodzsKIH07CiAKLS8qKgotICogZHB1X3JtX2RiZ19yc3ZwX3N0YWdl IC0gZW51bSBvZiBzdGVwcyBpbiBtYWtpbmcgcmVzZXJ2YXRpb24gZm9yIGV2ZW50IGxvZ2dpbmcK LSAqLwotZW51bSBkcHVfcm1fZGJnX3JzdnBfc3RhZ2UgewotCURQVV9STV9TVEFHRV9CRUdJTiwK LQlEUFVfUk1fU1RBR0VfQUZURVJfQ0xFQVIsCi0JRFBVX1JNX1NUQUdFX0FGVEVSX1JTVlBORVhU LAotCURQVV9STV9TVEFHRV9GSU5BTAorc3RhdGljIGNoYXIgKmJsa19uYW1lW0RQVV9IV19CTEtf TUFYXSA9IHsKKwkiSFdfVE9QIiwKKwkiSFdfU1NQUCIsCisJIkhXX0xNIiwKKwkiSFdfQ1RMIiwK KwkiSFdfQ0RNIiwKKwkiSFdfUElOR1BPTkciLAorCSJIV19JTlRGIiwKKwkiSFdfV0IiCiB9Owog Ci1zdGF0aWMgdm9pZCBfZHB1X3JtX3ByaW50X3JzdnBzKAotCQlzdHJ1Y3QgZHB1X3JtICpybSwK LQkJZW51bSBkcHVfcm1fZGJnX3JzdnBfc3RhZ2Ugc3RhZ2UpCit2b2lkIGRwdV9ybV9wcmludF9z dGF0ZShzdHJ1Y3QgZHB1X3JtICpybSkKIHsKLQlzdHJ1Y3QgZHB1X3JtX3JzdnAgKnJzdnA7Ci0J c3RydWN0IGRwdV9ybV9od19ibGsgKmJsazsKLQllbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlOwor CWludCBpOworCisJbXV0ZXhfbG9jaygmcm0tPnJtX2xvY2spOwogCi0JRFBVX0RFQlVHKCIlZFxu Iiwgc3RhZ2UpOworCURQVV9FUlJPUigiRFBVIFJNIHN0YXRlOlxuIik7CisJZm9yIChpID0gMDsg aSA8IERQVV9IV19CTEtfTUFYOyBpKyspIHsKKwkJaW50IGJsa19sZW4gPSBybS0+aHdfYmxrc19s ZW5baV07CisJCWludCAqZHJtX21hcCA9IHJtLT5od19kcm1fbWFwW2ldOworCQlpbnQgajsKIAot CWxpc3RfZm9yX2VhY2hfZW50cnkocnN2cCwgJnJtLT5yc3ZwcywgbGlzdCkgewotCQlEUFVfREVC VUcoIiVkIHJzdnBbcyV1ZSV1XSB0b3BvbG9neSAlZFxuIiwgc3RhZ2UsIHJzdnAtPnNlcSwKLQkJ CQlyc3ZwLT5lbmNfaWQsIHJzdnAtPnRvcG9sb2d5KTsKLQkJRFBVX0VWVDMyKHN0YWdlLCByc3Zw LT5zZXEsIHJzdnAtPmVuY19pZCwgcnN2cC0+dG9wb2xvZ3kpOwotCX0KKwkJaWYgKCFibGtfbGVu KQorCQkJY29udGludWU7CiAKLQlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgRFBVX0hXX0JMS19NQVg7 IHR5cGUrKykgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsaywgJnJtLT5od19ibGtzW3R5cGVd LCBsaXN0KSB7Ci0JCQlpZiAoIWJsay0+cnN2cCAmJiAhYmxrLT5yc3ZwX254dCkKKwkJRFBVX0VS Uk9SKCIlc1x0dG90YWw6ICVkXG4iLCBibGtfbmFtZVtpXSwgYmxrX2xlbik7CisKKwkJZm9yIChq ID0gMDsgaiA8IGJsa19sZW47IGorKykgeworCQkJaWYgKCFkcm1fbWFwW2pdKQogCQkJCWNvbnRp bnVlOwogCi0JCQlEUFVfREVCVUcoIiVkIHJzdnBbcyV1ZSV1LT5zJXVlJXVdICVkICVkXG4iLCBz dGFnZSwKLQkJCQkoYmxrLT5yc3ZwKSA/IGJsay0+cnN2cC0+c2VxIDogMCwKLQkJCQkoYmxrLT5y c3ZwKSA/IGJsay0+cnN2cC0+ZW5jX2lkIDogMCwKLQkJCQkoYmxrLT5yc3ZwX254dCkgPyBibGst PnJzdnBfbnh0LT5zZXEgOiAwLAotCQkJCShibGstPnJzdnBfbnh0KSA/IGJsay0+cnN2cF9ueHQt PmVuY19pZCA6IDAsCi0JCQkJYmxrLT50eXBlLCBibGstPmlkKTsKLQotCQkJRFBVX0VWVDMyKHN0 YWdlLAotCQkJCShibGstPnJzdnApID8gYmxrLT5yc3ZwLT5zZXEgOiAwLAotCQkJCShibGstPnJz dnApID8gYmxrLT5yc3ZwLT5lbmNfaWQgOiAwLAotCQkJCShibGstPnJzdnBfbnh0KSA/IGJsay0+ cnN2cF9ueHQtPnNlcSA6IDAsCi0JCQkJKGJsay0+cnN2cF9ueHQpID8gYmxrLT5yc3ZwX254dC0+ ZW5jX2lkIDogMCwKLQkJCQlibGstPnR5cGUsIGJsay0+aWQpOworCQkJRFBVX0VSUk9SKCJcdGlk eDolZCBkcm1faWQ6ICVkXG4iLCBqLCBkcm1fbWFwW2pdKTsKIAkJfQogCX0KKworCW11dGV4X3Vu bG9jaygmcm0tPnJtX2xvY2spOwogfQogCiBzdHJ1Y3QgZHB1X2h3X21kcCAqZHB1X3JtX2dldF9t ZHAoc3RydWN0IGRwdV9ybSAqcm0pCkBAIC0xNTUsMTcgKzgyLDE5IEBAIHN0cnVjdCBkcHVfaHdf bWRwICpkcHVfcm1fZ2V0X21kcChzdHJ1Y3QgZHB1X3JtICpybSkKIAogdm9pZCBkcHVfcm1faW5p dF9od19pdGVyKAogCQlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgKml0ZXIsCi0JCXVpbnQzMl90IGVu Y19pZCwKKwkJdWludDMyX3QgZHJtX2lkLAogCQllbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlKQog ewogCW1lbXNldChpdGVyLCAwLCBzaXplb2YoKml0ZXIpKTsKLQlpdGVyLT5lbmNfaWQgPSBlbmNf aWQ7CisJaXRlci0+ZHJtX2lkID0gZHJtX2lkOwogCWl0ZXItPnR5cGUgPSB0eXBlOwogfQogCiBz dGF0aWMgYm9vbCBfZHB1X3JtX2dldF9od19sb2NrZWQoc3RydWN0IGRwdV9ybSAqcm0sIHN0cnVj dCBkcHVfcm1faHdfaXRlciAqaSkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpibGtfbGlzdDsKKwlz dHJ1Y3QgZHB1X3JtX2h3X2JsayAqKmJsa19saXN0OworCXVpbnQzMl90IGJsa19sZW4sIGluZGV4 OworCXVpbnQzMl90ICpkcm1fbWFwOwogCiAJaWYgKCFybSB8fCAhaSB8fCBpLT50eXBlID49IERQ VV9IV19CTEtfTUFYKSB7CiAJCURQVV9FUlJPUigiaW52YWxpZCBybVxuIik7CkBAIC0xNzMsMzMg KzEwMiwzMCBAQCBzdGF0aWMgYm9vbCBfZHB1X3JtX2dldF9od19sb2NrZWQoc3RydWN0IGRwdV9y bSAqcm0sIHN0cnVjdCBkcHVfcm1faHdfaXRlciAqaSkKIAl9CiAKIAlpLT5odyA9IE5VTEw7Ci0J YmxrX2xpc3QgPSAmcm0tPmh3X2Jsa3NbaS0+dHlwZV07Ci0KLQlpZiAoaS0+YmxrICYmICgmaS0+ YmxrLT5saXN0ID09IGJsa19saXN0KSkgewotCQlEUFVfREVCVUcoImF0dGVtcHQgcmVzdW1lIGl0 ZXJhdGlvbiBwYXN0IGxhc3RcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaS0+YmxrID0g bGlzdF9wcmVwYXJlX2VudHJ5KGktPmJsaywgYmxrX2xpc3QsIGxpc3QpOworCWJsa19saXN0ID0g cm0tPmh3X2Jsa3NbaS0+dHlwZV07CisJYmxrX2xlbiA9IHJtLT5od19ibGtzX2xlbltpLT50eXBl XTsKKwlkcm1fbWFwID0gcm0tPmh3X2RybV9tYXBbaS0+dHlwZV07CiAKLQlsaXN0X2Zvcl9lYWNo X2VudHJ5X2NvbnRpbnVlKGktPmJsaywgYmxrX2xpc3QsIGxpc3QpIHsKLQkJc3RydWN0IGRwdV9y bV9yc3ZwICpyc3ZwID0gaS0+YmxrLT5yc3ZwOworCWZvciAoaW5kZXggPSBpLT5pbmRleDsgaW5k ZXggPCBibGtfbGVuOyBpbmRleCsrKSB7CisJCXN0cnVjdCBkcHVfcm1faHdfYmxrICpibGsgPSBi bGtfbGlzdFtpbmRleF07CiAKLQkJaWYgKGktPmJsay0+dHlwZSAhPSBpLT50eXBlKSB7Ci0JCQlE UFVfRVJST1IoImZvdW5kIGluY29ycmVjdCBibG9jayB0eXBlICVkIG9uICVkIGxpc3RcbiIsCi0J CQkJCWktPmJsay0+dHlwZSwgaS0+dHlwZSk7CisJCWlmICghYmxrKSB7CisJCQlEUFVfRVJST1Io ImludmFsaWQgYmxvY2suIGluZGV4OiAlZCB0eXBlOiAlZFxuIiwKKwkJCQkJaW5kZXgsIGktPnR5 cGUpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKLQkJaWYgKChpLT5lbmNfaWQgPT0gMCkgfHwg KHJzdnAgJiYgcnN2cC0+ZW5jX2lkID09IGktPmVuY19pZCkpIHsKLQkJCWktPmh3ID0gaS0+Ymxr LT5odzsKKwkJaWYgKGRybV9tYXBbaW5kZXhdID09IGktPmRybV9pZCkgeworCQkJaS0+aHcgPSBi bGstPmh3OworCQkJaS0+aW5kZXggPSBpbmRleCArIDE7CisJCQlpLT5ibGsgPSBibGs7CiAJCQlE UFVfREVCVUcoImZvdW5kIHR5cGUgJWQgaWQgJWQgZm9yIGVuYyAlZFxuIiwKLQkJCQkJaS0+dHlw ZSwgaS0+YmxrLT5pZCwgaS0+ZW5jX2lkKTsKKwkJCQkJaS0+dHlwZSwgYmxrLT5pZCwgaS0+ZHJt X2lkKTsKIAkJCXJldHVybiB0cnVlOwogCQl9CiAJfQogCi0JRFBVX0RFQlVHKCJubyBtYXRjaCwg dHlwZSAlZCBmb3IgZW5jICVkXG4iLCBpLT50eXBlLCBpLT5lbmNfaWQpOworCURQVV9ERUJVRygi bm8gbWF0Y2gsIHR5cGUgJWQgZm9yIGVuYyAlZFxuIiwgaS0+dHlwZSwgaS0+ZHJtX2lkKTsKIAog CXJldHVybiBmYWxzZTsKIH0KQEAgLTIyNCw5ICsxNTAsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X3Jt X2h3X2Rlc3Ryb3koZW51bSBkcHVfaHdfYmxrX3R5cGUgdHlwZSwgdm9pZCAqaHcpCiAJY2FzZSBE UFVfSFdfQkxLX0NUTDoKIAkJZHB1X2h3X2N0bF9kZXN0cm95KGh3KTsKIAkJYnJlYWs7Ci0JY2Fz ZSBEUFVfSFdfQkxLX0NETToKLQkJZHB1X2h3X2NkbV9kZXN0cm95KGh3KTsKLQkJYnJlYWs7CiAJ Y2FzZSBEUFVfSFdfQkxLX1BJTkdQT05HOgogCQlkcHVfaHdfcGluZ3BvbmdfZGVzdHJveShodyk7 CiAJCWJyZWFrOwpAQCAtMjQ2LDI2ICsxNjksMjUgQEAgc3RhdGljIHZvaWQgX2RwdV9ybV9od19k ZXN0cm95KGVudW0gZHB1X2h3X2Jsa190eXBlIHR5cGUsIHZvaWQgKmh3KQogCiBpbnQgZHB1X3Jt X2Rlc3Ryb3koc3RydWN0IGRwdV9ybSAqcm0pCiB7Ci0KLQlzdHJ1Y3QgZHB1X3JtX3JzdnAgKnJz dnBfY3VyLCAqcnN2cF9ueHQ7Ci0Jc3RydWN0IGRwdV9ybV9od19ibGsgKmh3X2N1ciwgKmh3X254 dDsKIAllbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlOworCXVpbnQzMl90IGk7CiAKIAlpZiAoIXJt KSB7CiAJCURQVV9FUlJPUigiaW52YWxpZCBybVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0K IAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyc3ZwX2N1ciwgcnN2cF9ueHQsICZybS0+cnN2 cHMsIGxpc3QpIHsKLQkJbGlzdF9kZWwoJnJzdnBfY3VyLT5saXN0KTsKLQkJa2ZyZWUocnN2cF9j dXIpOwotCX0KKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgRFBVX0hXX0JMS19NQVg7IHR5cGUrKykg eworCQl1aW50MzJfdCBod19ibGtfbGVuID0gcm0tPmh3X2Jsa3NfbGVuW3R5cGVdOwogCisJCWZv ciAoaSA9IDA7IGkgPCBod19ibGtfbGVuOyBpKyspIHsKKwkJCXN0cnVjdCBkcHVfcm1faHdfYmxr ICpod19jdXIgPSBybS0+aHdfYmxrc1t0eXBlXVtpXTsKIAotCWZvciAodHlwZSA9IDA7IHR5cGUg PCBEUFVfSFdfQkxLX01BWDsgdHlwZSsrKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSho d19jdXIsIGh3X254dCwgJnJtLT5od19ibGtzW3R5cGVdLAotCQkJCWxpc3QpIHsKLQkJCWxpc3Rf ZGVsKCZod19jdXItPmxpc3QpOworCQkJaWYgKCFod19jdXIpIHsKKwkJCQlEUFVfRVJST1IoIklu dmFsaWQgaHcgYmxvY2suIHR5cGU6JWQgaTogJWRcbiIsCisJCQkJCXR5cGUsIGkpOworCQkJCXJl dHVybiAtRUlOVkFMOworCQkJfQogCQkJX2RwdV9ybV9od19kZXN0cm95KGh3X2N1ci0+dHlwZSwg aHdfY3VyLT5odyk7CiAJCQlrZnJlZShod19jdXIpOwogCQl9CkBAIC0zMDAsOSArMjIyLDYgQEAg c3RhdGljIGludCBfZHB1X3JtX2h3X2Jsa19jcmVhdGUoCiAJY2FzZSBEUFVfSFdfQkxLX0NUTDoK IAkJaHcgPSBkcHVfaHdfY3RsX2luaXQoaWQsIG1taW8sIGNhdCk7CiAJCWJyZWFrOwotCWNhc2Ug RFBVX0hXX0JMS19DRE06Ci0JCWh3ID0gZHB1X2h3X2NkbV9pbml0KGlkLCBtbWlvLCBjYXQsIGh3 X21kcCk7Ci0JCWJyZWFrOwogCWNhc2UgRFBVX0hXX0JMS19QSU5HUE9ORzoKIAkJaHcgPSBkcHVf aHdfcGluZ3BvbmdfaW5pdChpZCwgbW1pbywgY2F0KTsKIAkJYnJlYWs7CkBAIC0zMzQsMzUgKzI1 MywyNCBAQCBzdGF0aWMgaW50IF9kcHVfcm1faHdfYmxrX2NyZWF0ZSgKIAlibGstPnR5cGUgPSB0 eXBlOwogCWJsay0+aWQgPSBpZDsKIAlibGstPmh3ID0gaHc7Ci0JbGlzdF9hZGRfdGFpbCgmYmxr LT5saXN0LCAmcm0tPmh3X2Jsa3NbdHlwZV0pOworCWJsay0+cm1faWQgPSBybS0+aHdfYmxrc19s ZW5bdHlwZV07CisKKwlybS0+aHdfYmxrc1t0eXBlXVtybS0+aHdfYmxrc19sZW5bdHlwZV0rK10g PSBibGs7CiAKIAlyZXR1cm4gMDsKIH0KIAogaW50IGRwdV9ybV9pbml0KHN0cnVjdCBkcHVfcm0g KnJtLAogCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXQsCi0JCXZvaWQgX19pb21lbSAqbW1pbywK LQkJc3RydWN0IGRybV9kZXZpY2UgKmRldikKKwkJdm9pZCBfX2lvbWVtICptbWlvKQogewogCWlu dCByYywgaTsKLQllbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlOwotCi0JaWYgKCFybSB8fCAhY2F0 IHx8ICFtbWlvIHx8ICFkZXYpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGttc1xuIik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KIAogCS8qIENsZWFyLCBzZXR1cCBsaXN0cyAqLwogCW1lbXNldChy bSwgMCwgc2l6ZW9mKCpybSkpOwogCiAJbXV0ZXhfaW5pdCgmcm0tPnJtX2xvY2spOwogCi0JSU5J VF9MSVNUX0hFQUQoJnJtLT5yc3Zwcyk7Ci0JZm9yICh0eXBlID0gMDsgdHlwZSA8IERQVV9IV19C TEtfTUFYOyB0eXBlKyspCi0JCUlOSVRfTElTVF9IRUFEKCZybS0+aHdfYmxrc1t0eXBlXSk7Ci0K LQlybS0+ZGV2ID0gZGV2OwotCiAJLyogU29tZSBvZiB0aGUgc3ViLWJsb2NrcyByZXF1aXJlIGFu IG1kcHRvcCB0byBiZSBjcmVhdGVkICovCiAJcm0tPmh3X21kcCA9IGRwdV9od19tZHB0b3BfaW5p dChNRFBfVE9QLCBtbWlvLCBjYXQpOwogCWlmIChJU19FUlJfT1JfTlVMTChybS0+aHdfbWRwKSkg ewpAQCAtMzg3LDE4ICsyOTUsNiBAQCBpbnQgZHB1X3JtX2luaXQoc3RydWN0IGRwdV9ybSAqcm0s CiAJCQlEUFVfRVJST1IoImZhaWxlZDogbG0gaHcgbm90IGF2YWlsYWJsZVxuIik7CiAJCQlnb3Rv IGZhaWw7CiAJCX0KLQotCQlpZiAoIXJtLT5sbV9tYXhfd2lkdGgpIHsKLQkJCXJtLT5sbV9tYXhf d2lkdGggPSBsbS0+c2Jsay0+bWF4d2lkdGg7Ci0JCX0gZWxzZSBpZiAocm0tPmxtX21heF93aWR0 aCAhPSBsbS0+c2Jsay0+bWF4d2lkdGgpIHsKLQkJCS8qCi0JCQkgKiBEb24ndCBleHBlY3QgdG8g aGF2ZSBodyB3aGVyZSBsbSBtYXggd2lkdGhzIGRpZmZlci4KLQkJCSAqIElmIGZvdW5kLCB0YWtl IHRoZSBtaW4uCi0JCQkgKi8KLQkJCURQVV9FUlJPUigidW5zdXBwb3J0ZWQ6IGxtIG1heHdpZHRo IGRpZmZlcnNcbiIpOwotCQkJaWYgKHJtLT5sbV9tYXhfd2lkdGggPiBsbS0+c2Jsay0+bWF4d2lk dGgpCi0JCQkJcm0tPmxtX21heF93aWR0aCA9IGxtLT5zYmxrLT5tYXh3aWR0aDsKLQkJfQogCX0K IAogCWZvciAoaSA9IDA7IGkgPCBjYXQtPnBpbmdwb25nX2NvdW50OyBpKyspIHsKQEAgLTQzMywx NSArMzI5LDYgQEAgaW50IGRwdV9ybV9pbml0KHN0cnVjdCBkcHVfcm0gKnJtLAogCQl9CiAJfQog Ci0JZm9yIChpID0gMDsgaSA8IGNhdC0+Y2RtX2NvdW50OyBpKyspIHsKLQkJcmMgPSBfZHB1X3Jt X2h3X2Jsa19jcmVhdGUocm0sIGNhdCwgbW1pbywgRFBVX0hXX0JMS19DRE0sCi0JCQkJY2F0LT5j ZG1baV0uaWQsICZjYXQtPmNkbVtpXSk7Ci0JCWlmIChyYykgewotCQkJRFBVX0VSUk9SKCJmYWls ZWQ6IGNkbSBodyBub3QgYXZhaWxhYmxlXG4iKTsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCX0KLQog CXJldHVybiAwOwogCiBmYWlsOgpAQCAtNDU1LDggKzM0Miw3IEBAIGludCBkcHVfcm1faW5pdChz dHJ1Y3QgZHB1X3JtICpybSwKICAqCXByb3Bvc2VkIHVzZSBjYXNlIHJlcXVpcmVtZW50cywgaW5j bC4gaGFyZHdpcmVkIGRlcGVuZGVudCBibG9ja3MgbGlrZQogICoJcGluZ3BvbmcKICAqIEBybTog ZHB1IHJlc291cmNlIG1hbmFnZXIgaGFuZGxlCi0gKiBAcnN2cDogcmVzZXJ2YXRpb24gY3VycmVu dGx5IGJlaW5nIGNyZWF0ZWQKLSAqIEByZXFzOiBwcm9wb3NlZCB1c2UgY2FzZSByZXF1aXJlbWVu dHMKKyAqIEBzdGF0ZTogZHB1IGNydGMgc3RhdGUgaGFuZGxlCiAgKiBAbG06IHByb3Bvc2VkIGxh eWVyIG1peGVyLCBmdW5jdGlvbiBjaGVja3MgaWYgbG0sIGFuZCBhbGwgb3RoZXIgaGFyZHdpcmVk CiAgKiAgICAgIGJsb2NrcyBjb25uZWN0ZWQgdG8gdGhlIGxtIChwcCkgaXMgYXZhaWxhYmxlIGFu ZCBhcHByb3ByaWF0ZQogICogQHBwOiBvdXRwdXQgcGFyYW1ldGVyLCBwaW5ncG9uZyBibG9jayBh dHRhY2hlZCB0byB0aGUgbGF5ZXIgbWl4ZXIuCkBAIC00NjcsOCArMzUzLDcgQEAgaW50IGRwdV9y bV9pbml0KHN0cnVjdCBkcHVfcm0gKnJtLAogICovCiBzdGF0aWMgYm9vbCBfZHB1X3JtX2NoZWNr X2xtX2FuZF9nZXRfY29ubmVjdGVkX2Jsa3MoCiAJCXN0cnVjdCBkcHVfcm0gKnJtLAotCQlzdHJ1 Y3QgZHB1X3JtX3JzdnAgKnJzdnAsCi0JCXN0cnVjdCBkcHVfcm1fcmVxdWlyZW1lbnRzICpyZXFz LAorCQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKnN0YXRlLAogCQlzdHJ1Y3QgZHB1X3JtX2h3X2Js ayAqbG0sCiAJCXN0cnVjdCBkcHVfcm1faHdfYmxrICoqcHAsCiAJCXN0cnVjdCBkcHVfcm1faHdf YmxrICpwcmltYXJ5X2xtKQpAQCAtNDkzLDEyICszNzgsNiBAQCBzdGF0aWMgYm9vbCBfZHB1X3Jt X2NoZWNrX2xtX2FuZF9nZXRfY29ubmVjdGVkX2Jsa3MoCiAJCX0KIAl9CiAKLQkvKiBBbHJlYWR5 IHJlc2VydmVkPyAqLwotCWlmIChSRVNFUlZFRF9CWV9PVEhFUihsbSwgcnN2cCkpIHsKLQkJRFBV X0RFQlVHKCJsbSAlZCBhbHJlYWR5IHJlc2VydmVkXG4iLCBsbV9jZmctPmlkKTsKLQkJcmV0dXJu IGZhbHNlOwotCX0KLQogCWRwdV9ybV9pbml0X2h3X2l0ZXIoJml0ZXIsIDAsIERQVV9IV19CTEtf UElOR1BPTkcpOwogCXdoaWxlIChfZHB1X3JtX2dldF9od19sb2NrZWQocm0sICZpdGVyKSkgewog CQlpZiAoaXRlci5ibGstPmlkID09IGxtX2NmZy0+cGluZ3BvbmcpIHsKQEAgLTUxMiwzNSArMzkx LDI0IEBAIHN0YXRpYyBib29sIF9kcHVfcm1fY2hlY2tfbG1fYW5kX2dldF9jb25uZWN0ZWRfYmxr cygKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCWlmIChSRVNFUlZFRF9CWV9PVEhFUigqcHAsIHJz dnApKSB7Ci0JCURQVV9ERUJVRygibG0gJWQgcHAgJWQgYWxyZWFkeSByZXNlcnZlZFxuIiwgbG0t PmlkLAotCQkJCSgqcHApLT5pZCk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KIAlyZXR1cm4gdHJ1 ZTsKIH0KIAogc3RhdGljIGludCBfZHB1X3JtX3Jlc2VydmVfbG1zKAotCQlzdHJ1Y3QgZHB1X3Jt ICpybSwKLQkJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwLAotCQlzdHJ1Y3QgZHB1X3JtX3JlcXVp cmVtZW50cyAqcmVxcykKLQorCXN0cnVjdCBkcHVfcm0gKnJtLCBzdHJ1Y3QgZHB1X2NydGNfc3Rh dGUgKnN0YXRlLAorCXN0cnVjdCBkcHVfY3J0Y190b3BvbG9neSAqdG9wb2xvZ3kpCiB7CiAJc3Ry dWN0IGRwdV9ybV9od19ibGsgKmxtW01BWF9CTE9DS1NdOwogCXN0cnVjdCBkcHVfcm1faHdfYmxr ICpwcFtNQVhfQkxPQ0tTXTsKIAlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgaXRlcl9pLCBpdGVyX2o7 CiAJaW50IGxtX2NvdW50ID0gMDsKLQlpbnQgaSwgcmMgPSAwOwotCi0JaWYgKCFyZXFzLT50b3Bv bG9neS0+bnVtX2xtKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBudW1iZXIgb2YgbG06ICVkXG4i LCByZXFzLT50b3BvbG9neS0+bnVtX2xtKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWludCBp LCBkcm1faWQgPSBnZXRfY3J0Y19pZChzdGF0ZSk7CisJaW50ICpsbV9kcm1fbWFwID0gcm0tPmh3 X2RybV9tYXBbRFBVX0hXX0JMS19MTV07CisJaW50ICpwcF9kcm1fbWFwID0gcm0tPmh3X2RybV9t YXBbRFBVX0hXX0JMS19QSU5HUE9OR107CiAKIAkvKiBGaW5kIGEgcHJpbWFyeSBtaXhlciAqLwog CWRwdV9ybV9pbml0X2h3X2l0ZXIoJml0ZXJfaSwgMCwgRFBVX0hXX0JMS19MTSk7Ci0Jd2hpbGUg KGxtX2NvdW50ICE9IHJlcXMtPnRvcG9sb2d5LT5udW1fbG0gJiYKKwl3aGlsZSAobG1fY291bnQg IT0gdG9wb2xvZ3ktPm51bV9sbXMgJiYKIAkJCV9kcHVfcm1fZ2V0X2h3X2xvY2tlZChybSwgJml0 ZXJfaSkpIHsKIAkJbWVtc2V0KCZsbSwgMCwgc2l6ZW9mKGxtKSk7CiAJCW1lbXNldCgmcHAsIDAs IHNpemVvZihwcCkpOwpAQCAtNTQ5LDggKzQxNyw3IEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9yZXNl cnZlX2xtcygKIAkJbG1bbG1fY291bnRdID0gaXRlcl9pLmJsazsKIAogCQlpZiAoIV9kcHVfcm1f Y2hlY2tfbG1fYW5kX2dldF9jb25uZWN0ZWRfYmxrcygKLQkJCQlybSwgcnN2cCwgcmVxcywgbG1b bG1fY291bnRdLAotCQkJCSZwcFtsbV9jb3VudF0sIE5VTEwpKQorCQkJCXJtLCBzdGF0ZSwgbG1b bG1fY291bnRdLCAmcHBbbG1fY291bnRdLCBOVUxMKSkKIAkJCWNvbnRpbnVlOwogCiAJCSsrbG1f Y291bnQ7CkBAIC01NTgsMTQgKzQyNSwxNCBAQCBzdGF0aWMgaW50IF9kcHVfcm1fcmVzZXJ2ZV9s bXMoCiAJCS8qIFZhbGlkIHByaW1hcnkgbWl4ZXIgZm91bmQsIGZpbmQgbWF0Y2hpbmcgcGVlcnMg Ki8KIAkJZHB1X3JtX2luaXRfaHdfaXRlcigmaXRlcl9qLCAwLCBEUFVfSFdfQkxLX0xNKTsKIAot CQl3aGlsZSAobG1fY291bnQgIT0gcmVxcy0+dG9wb2xvZ3ktPm51bV9sbSAmJgorCQl3aGlsZSAo bG1fY291bnQgIT0gdG9wb2xvZ3ktPm51bV9sbXMgJiYKIAkJCQlfZHB1X3JtX2dldF9od19sb2Nr ZWQocm0sICZpdGVyX2opKSB7CiAJCQlpZiAoaXRlcl9pLmJsayA9PSBpdGVyX2ouYmxrKQogCQkJ CWNvbnRpbnVlOwogCiAJCQlpZiAoIV9kcHVfcm1fY2hlY2tfbG1fYW5kX2dldF9jb25uZWN0ZWRf YmxrcygKLQkJCQkJcm0sIHJzdnAsIHJlcXMsIGl0ZXJfai5ibGssCi0JCQkJCSZwcFtsbV9jb3Vu dF0sIGl0ZXJfaS5ibGspKQorCQkJCXJtLCBzdGF0ZSwgaXRlcl9qLmJsaywKKwkJCQkmcHBbbG1f Y291bnRdLCBpdGVyX2kuYmxrKSkKIAkJCQljb250aW51ZTsKIAogCQkJbG1bbG1fY291bnRdID0g aXRlcl9qLmJsazsKQEAgLTU3Myw3ICs0NDAsNyBAQCBzdGF0aWMgaW50IF9kcHVfcm1fcmVzZXJ2 ZV9sbXMoCiAJCX0KIAl9CiAKLQlpZiAobG1fY291bnQgIT0gcmVxcy0+dG9wb2xvZ3ktPm51bV9s bSkgeworCWlmIChsbV9jb3VudCAhPSB0b3BvbG9neS0+bnVtX2xtcykgewogCQlEUFVfREVCVUco InVuYWJsZSB0byBmaW5kIGFwcHJvcHJpYXRlIG1peGVyc1xuIik7CiAJCXJldHVybiAtRU5BVkFJ TDsKIAl9CkBAIC01ODIsNDkyICs0NDksMjY1IEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZl X2xtcygKIAkJaWYgKCFsbVtpXSkKIAkJCWJyZWFrOwogCi0JCWxtW2ldLT5yc3ZwX254dCA9IHJz dnA7Ci0JCXBwW2ldLT5yc3ZwX254dCA9IHJzdnA7CisJCWxtX2RybV9tYXBbbG1baV0tPnJtX2lk XSA9IGRybV9pZDsKKwkJcHBfZHJtX21hcFtwcFtpXS0+cm1faWRdID0gZHJtX2lkOwogCi0JCURQ VV9FVlQzMihsbVtpXS0+dHlwZSwgcnN2cC0+ZW5jX2lkLCBsbVtpXS0+aWQsIHBwW2ldLT5pZCk7 CisJCXN0YXRlLT5taXhlcnNbaV0uaHdfbG0gPSAoc3RydWN0IGRwdV9od19taXhlciAqKWxtW2ld LT5odzsKKwkJc3RhdGUtPm1peGVyc1tpXS5od19wcCA9IChzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25n ICopcHBbaV0tPmh3OwogCX0KIAotCXJldHVybiByYzsKKwlzdGF0ZS0+bnVtX21peGVycyA9IHRv cG9sb2d5LT5udW1fbG1zOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX2RwdV9ybV9y ZXNlcnZlX2N0bHMoCi0JCXN0cnVjdCBkcHVfcm0gKnJtLAotCQlzdHJ1Y3QgZHB1X3JtX3JzdnAg KnJzdnAsCi0JCWNvbnN0IHN0cnVjdCBkcHVfcm1fdG9wb2xvZ3lfZGVmICp0b3ApCisJCXN0cnVj dCBkcHVfcm0gKnJtLCBzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKnN0YXRlLAorCQlzdHJ1Y3QgZHB1 X2NydGNfdG9wb2xvZ3kgKnRvcG9sb2d5KQogewogCXN0cnVjdCBkcHVfcm1faHdfYmxrICpjdGxz W01BWF9CTE9DS1NdOwogCXN0cnVjdCBkcHVfcm1faHdfaXRlciBpdGVyOwotCWludCBpID0gMDsK Kwlib29sIG5lZWRzX3NwbGl0X2Rpc3BsYXk7CisJaW50IGkgPSAwLCBkcm1faWQgPSBnZXRfY3J0 Y19pZChzdGF0ZSk7CisJaW50ICpjdGxfZHJtX21hcCA9IHJtLT5od19kcm1fbWFwW0RQVV9IV19C TEtfQ1RMXTsKIAogCW1lbXNldCgmY3RscywgMCwgc2l6ZW9mKGN0bHMpKTsKIAorCW5lZWRzX3Nw bGl0X2Rpc3BsYXkgPSAodG9wb2xvZ3ktPm51bV9jdGxzID09IDIpOworCiAJZHB1X3JtX2luaXRf aHdfaXRlcigmaXRlciwgMCwgRFBVX0hXX0JMS19DVEwpOwogCXdoaWxlIChfZHB1X3JtX2dldF9o d19sb2NrZWQocm0sICZpdGVyKSkgewogCQljb25zdCBzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsID0g dG9fZHB1X2h3X2N0bChpdGVyLmJsay0+aHcpOwogCQl1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0g Y3RsLT5jYXBzLT5mZWF0dXJlczsKIAkJYm9vbCBoYXNfc3BsaXRfZGlzcGxheTsKIAotCQlpZiAo UkVTRVJWRURfQllfT1RIRVIoaXRlci5ibGssIHJzdnApKQotCQkJY29udGludWU7Ci0KIAkJaGFz X3NwbGl0X2Rpc3BsYXkgPSBCSVQoRFBVX0NUTF9TUExJVF9ESVNQTEFZKSAmIGZlYXR1cmVzOwog CiAJCURQVV9ERUJVRygiY3RsICVkIGNhcHMgMHglbFhcbiIsIGl0ZXIuYmxrLT5pZCwgZmVhdHVy ZXMpOwogCi0JCWlmICh0b3AtPm5lZWRzX3NwbGl0X2Rpc3BsYXkgIT0gaGFzX3NwbGl0X2Rpc3Bs YXkpCisJCWlmIChuZWVkc19zcGxpdF9kaXNwbGF5ICE9IGhhc19zcGxpdF9kaXNwbGF5KQogCQkJ Y29udGludWU7CiAKIAkJY3Rsc1tpXSA9IGl0ZXIuYmxrOwogCQlEUFVfREVCVUcoImN0bCAlZCBt YXRjaFxuIiwgaXRlci5ibGstPmlkKTsKIAotCQlpZiAoKytpID09IHRvcC0+bnVtX2N0bCkKKwkJ aWYgKCsraSA9PSB0b3BvbG9neS0+bnVtX2N0bHMpCiAJCQlicmVhazsKIAl9CiAKLQlpZiAoaSAh PSB0b3AtPm51bV9jdGwpCi0JCXJldHVybiAtRU5BVkFJTDsKLQotCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKGN0bHMpICYmIGkgPCB0b3AtPm51bV9jdGw7IGkrKykgewotCQljdGxzW2ldLT5y c3ZwX254dCA9IHJzdnA7Ci0JCURQVV9FVlQzMihjdGxzW2ldLT50eXBlLCByc3ZwLT5lbmNfaWQs IGN0bHNbaV0tPmlkKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfZHB1X3Jt X3Jlc2VydmVfY2RtKAotCQlzdHJ1Y3QgZHB1X3JtICpybSwKLQkJc3RydWN0IGRwdV9ybV9yc3Zw ICpyc3ZwLAotCQl1aW50MzJfdCBpZCwKLQkJZW51bSBkcHVfaHdfYmxrX3R5cGUgdHlwZSkKLXsK LQlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgaXRlcjsKLQotCWRwdV9ybV9pbml0X2h3X2l0ZXIoJml0 ZXIsIDAsIERQVV9IV19CTEtfQ0RNKTsKLQl3aGlsZSAoX2RwdV9ybV9nZXRfaHdfbG9ja2VkKHJt LCAmaXRlcikpIHsKLQkJY29uc3Qgc3RydWN0IGRwdV9od19jZG0gKmNkbSA9IHRvX2RwdV9od19j ZG0oaXRlci5ibGstPmh3KTsKLQkJY29uc3Qgc3RydWN0IGRwdV9jZG1fY2ZnICpjYXBzID0gY2Rt LT5jYXBzOwotCQlib29sIG1hdGNoID0gZmFsc2U7Ci0KLQkJaWYgKFJFU0VSVkVEX0JZX09USEVS KGl0ZXIuYmxrLCByc3ZwKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICh0eXBlID09IERQVV9IV19C TEtfSU5URiAmJiBpZCAhPSBJTlRGX01BWCkKLQkJCW1hdGNoID0gdGVzdF9iaXQoaWQsICZjYXBz LT5pbnRmX2Nvbm5lY3QpOwotCi0JCURQVV9ERUJVRygidHlwZSAlZCBpZCAlZCwgY2RtIGludGZz ICVsdSBtYXRjaCAlZFxuIiwKLQkJCQl0eXBlLCBpZCwgY2Fwcy0+aW50Zl9jb25uZWN0LCBtYXRj aCk7CisJaWYgKGkgIT0gdG9wb2xvZ3ktPm51bV9jdGxzKQorCQlyZXR1cm4gLUVJTlZBTDsKIAot CQlpZiAoIW1hdGNoKQotCQkJY29udGludWU7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo Y3RscykgJiYgaSA8IHRvcG9sb2d5LT5udW1fY3RsczsgaSsrKSB7CisJCWN0bF9kcm1fbWFwW2N0 bHNbaV0tPnJtX2lkXSA9IGRybV9pZDsKKwkJc3RhdGUtPmh3X2N0bHNbaV0gPSAoc3RydWN0IGRw dV9od19jdGwgKiljdGxzW2ldLT5odzsKIAotCQlpdGVyLmJsay0+cnN2cF9ueHQgPSByc3ZwOwot CQlEUFVfRVZUMzIoaXRlci5ibGstPnR5cGUsIHJzdnAtPmVuY19pZCwgaXRlci5ibGstPmlkKTsK LQkJYnJlYWs7CisJCURQVV9FVlQzMihjdGxzW2ldLT50eXBlLCBnZXRfY3J0Y19pZChzdGF0ZSks IGN0bHNbaV0tPmlkKTsKIAl9CiAKLQlpZiAoIWl0ZXIuaHcpIHsKLQkJRFBVX0VSUk9SKCJjb3Vs ZG4ndCByZXNlcnZlIGNkbSBmb3IgdHlwZSAlZCBpZCAlZFxuIiwgdHlwZSwgaWQpOwotCQlyZXR1 cm4gLUVOQVZBSUw7Ci0JfQorCXN0YXRlLT5udW1fY3RscyA9IHRvcG9sb2d5LT5udW1fY3RsczsK IAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9kcHVfcm1fcmVzZXJ2ZV9pbnRmKAorc3Rh dGljIHN0cnVjdCBkcHVfcm1faHdfYmxrICpfZHB1X3JtX2dldF9od19pZCgKIAkJc3RydWN0IGRw dV9ybSAqcm0sCi0JCXN0cnVjdCBkcHVfcm1fcnN2cCAqcnN2cCwKIAkJdWludDMyX3QgaWQsCi0J CWVudW0gZHB1X2h3X2Jsa190eXBlIHR5cGUsCi0JCWJvb2wgbmVlZHNfY2RtKQorCQllbnVtIGRw dV9od19ibGtfdHlwZSB0eXBlKQogewogCXN0cnVjdCBkcHVfcm1faHdfaXRlciBpdGVyOwotCWlu dCByZXQgPSAwOwogCiAJLyogRmluZCB0aGUgYmxvY2sgZW50cnkgaW4gdGhlIHJtLCBhbmQgbm90 ZSB0aGUgcmVzZXJ2YXRpb24gKi8KIAlkcHVfcm1faW5pdF9od19pdGVyKCZpdGVyLCAwLCB0eXBl KTsKIAl3aGlsZSAoX2RwdV9ybV9nZXRfaHdfbG9ja2VkKHJtLCAmaXRlcikpIHsKIAkJaWYgKGl0 ZXIuYmxrLT5pZCAhPSBpZCkKIAkJCWNvbnRpbnVlOwotCi0JCWlmIChSRVNFUlZFRF9CWV9PVEhF UihpdGVyLmJsaywgcnN2cCkpIHsKLQkJCURQVV9FUlJPUigidHlwZSAlZCBpZCAlZCBhbHJlYWR5 IHJlc2VydmVkXG4iLCB0eXBlLCBpZCk7Ci0JCQlyZXR1cm4gLUVOQVZBSUw7Ci0JCX0KLQotCQlp dGVyLmJsay0+cnN2cF9ueHQgPSByc3ZwOwotCQlEUFVfRVZUMzIoaXRlci5ibGstPnR5cGUsIHJz dnAtPmVuY19pZCwgaXRlci5ibGstPmlkKTsKIAkJYnJlYWs7CiAJfQogCi0JLyogU2hvdWxkbid0 IGhhcHBlbiBzaW5jZSBpbnRmcyBhcmUgZml4ZWQgYXQgcHJvYmUgKi8KIAlpZiAoIWl0ZXIuaHcp IHsKIAkJRFBVX0VSUk9SKCJjb3VsZG4ndCBmaW5kIHR5cGUgJWQgaWQgJWRcbiIsIHR5cGUsIGlk KTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBOVUxMOwogCX0KIAotCWlmIChuZWVkc19j ZG0pCi0JCXJldCA9IF9kcHVfcm1fcmVzZXJ2ZV9jZG0ocm0sIHJzdnAsIGlkLCB0eXBlKTsKLQot CXJldHVybiByZXQ7CisJcmV0dXJuIGl0ZXIuYmxrOwogfQogCiBzdGF0aWMgaW50IF9kcHVfcm1f cmVzZXJ2ZV9pbnRmX3JlbGF0ZWRfaHcoCiAJCXN0cnVjdCBkcHVfcm0gKnJtLAotCQlzdHJ1Y3Qg ZHB1X3JtX3JzdnAgKnJzdnAsCisJCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqc3RhdGUsCiAJCXN0 cnVjdCBkcHVfZW5jb2Rlcl9od19yZXNvdXJjZXMgKmh3X3JlcykKIHsKLQlpbnQgaSwgcmV0ID0g MDsKLQl1MzIgaWQ7CisJc3RydWN0IGRwdV9ybV9od19ibGsgKmludGZbSU5URl9NQVhdID0ge307 CisJdTMyIGksIGlkLCBpbnRmX2NvdW50ID0gMDsKKwl1MzIgZHJtX2lkID0gZ2V0X2NydGNfaWQo c3RhdGUpOworCWludCAqaW50Zl9kcm1fbWFwID0gcm0tPmh3X2RybV9tYXBbRFBVX0hXX0JMS19J TlRGXTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGh3X3Jlcy0+aW50ZnMpOyBpKysp IHsKIAkJaWYgKGh3X3Jlcy0+aW50ZnNbaV0gPT0gSU5URl9NT0RFX05PTkUpCiAJCQljb250aW51 ZTsKLQkJaWQgPSBpICsgSU5URl8wOwotCQlyZXQgPSBfZHB1X3JtX3Jlc2VydmVfaW50ZihybSwg cnN2cCwgaWQsCi0JCQkJRFBVX0hXX0JMS19JTlRGLCBod19yZXMtPm5lZWRzX2NkbSk7Ci0JCWlm IChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KIAotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBp bnQgX2RwdV9ybV9tYWtlX25leHRfcnN2cCgKLQkJc3RydWN0IGRwdV9ybSAqcm0sCi0JCXN0cnVj dCBkcm1fZW5jb2RlciAqZW5jLAotCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUs Ci0JCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlLAotCQlzdHJ1Y3QgZHB1 X3JtX3JzdnAgKnJzdnAsCi0JCXN0cnVjdCBkcHVfcm1fcmVxdWlyZW1lbnRzICpyZXFzKQotewot CWludCByZXQ7Ci0Jc3RydWN0IGRwdV9ybV90b3BvbG9neV9kZWYgdG9wb2xvZ3k7Ci0KLQkvKiBD cmVhdGUgcmVzZXJ2YXRpb24gaW5mbywgdGFnIHJlc2VydmVkIGJsb2NrcyB3aXRoIGl0IGFzIHdl IGdvICovCi0JcnN2cC0+c2VxID0gKytybS0+cnN2cF9uZXh0X3NlcTsKLQlyc3ZwLT5lbmNfaWQg PSBlbmMtPmJhc2UuaWQ7Ci0JcnN2cC0+dG9wb2xvZ3kgPSByZXFzLT50b3BvbG9neS0+dG9wX25h bWU7Ci0JbGlzdF9hZGRfdGFpbCgmcnN2cC0+bGlzdCwgJnJtLT5yc3Zwcyk7Ci0KLQlyZXQgPSBf ZHB1X3JtX3Jlc2VydmVfbG1zKHJtLCByc3ZwLCByZXFzKTsKLQlpZiAocmV0KSB7Ci0JCURQVV9F UlJPUigidW5hYmxlIHRvIGZpbmQgYXBwcm9wcmlhdGUgbWl4ZXJzXG4iKTsKLQkJcmV0dXJuIHJl dDsKLQl9CisJCWlkID0gaSArIElOVEZfMDsKKwkJaW50ZltpXSA9IF9kcHVfcm1fZ2V0X2h3X2lk KHJtLCBpZCwgRFBVX0hXX0JMS19JTlRGKTsKKwkJaWYgKCFpbnRmW2ldKQorCQkJcmV0dXJuIC1F SU5WQUw7CiAKLQkvKgotCSAqIERvIGFzc2lnbm1lbnQgcHJlZmVycmluZyB0byBnaXZlIGF3YXkg bG93LXJlc291cmNlIENUTHMgZmlyc3Q6Ci0JICogLSBDaGVjayBtaXhlcnMgd2l0aG91dCBTcGxp dCBEaXNwbGF5Ci0JICogLSBPbmx5IHRoZW4gYWxsb3cgdG8gZ3JhYiBmcm9tIENUTHMgd2l0aCBz cGxpdCBkaXNwbGF5IGNhcGFiaWxpdHkKLQkgKi8KLQlfZHB1X3JtX3Jlc2VydmVfY3RscyhybSwg cnN2cCwgcmVxcy0+dG9wb2xvZ3kpOwotCWlmIChyZXQgJiYgIXJlcXMtPnRvcG9sb2d5LT5uZWVk c19zcGxpdF9kaXNwbGF5KSB7Ci0JCW1lbWNweSgmdG9wb2xvZ3ksIHJlcXMtPnRvcG9sb2d5LCBz aXplb2YodG9wb2xvZ3kpKTsKLQkJdG9wb2xvZ3kubmVlZHNfc3BsaXRfZGlzcGxheSA9IHRydWU7 Ci0JCV9kcHVfcm1fcmVzZXJ2ZV9jdGxzKHJtLCByc3ZwLCAmdG9wb2xvZ3kpOwotCX0KLQlpZiAo cmV0KSB7Ci0JCURQVV9FUlJPUigidW5hYmxlIHRvIGZpbmQgYXBwcm9wcmlhdGUgQ1RMXG4iKTsK LQkJcmV0dXJuIHJldDsKKwkJLyogUmVzZXJ2ZSBvdGhlciBJTlRGIHJlbGF0ZWQgYmxvY2tzIGlm IG5lZWRlZCAqLwogCX0KIAotCS8qIEFzc2lnbiBJTlRGcyBhbmQgYmxrcyB3aG9zZSB1c2FnZSBp cyB0aWVkIHRvIHRoZW06IENUTCAmIENETSAqLwotCXJldCA9IF9kcHVfcm1fcmVzZXJ2ZV9pbnRm X3JlbGF0ZWRfaHcocm0sIHJzdnAsICZyZXFzLT5od19yZXMpOwotCWlmIChyZXQpCi0JCXJldHVy biByZXQ7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IF9kcHVfcm1fcG9wdWxhdGVf cmVxdWlyZW1lbnRzKAotCQlzdHJ1Y3QgZHB1X3JtICpybSwKLQkJc3RydWN0IGRybV9lbmNvZGVy ICplbmMsCi0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUsCi0JCXN0cnVjdCBkcHVfcm1fcmVxdWlyZW1l bnRzICpyZXFzLAotCQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kgcmVxX3RvcG9sb2d5KQot ewotCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJmNydGNfc3RhdGUtPm1v ZGU7Ci0JaW50IGk7Ci0KLQltZW1zZXQocmVxcywgMCwgc2l6ZW9mKCpyZXFzKSk7Ci0KLQlkcHVf ZW5jb2Rlcl9nZXRfaHdfcmVzb3VyY2VzKGVuYywgJnJlcXMtPmh3X3JlcywgY29ubl9zdGF0ZSk7 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRFBVX1JNX1RPUE9MT0dZX01BWDsgaSsrKSB7Ci0JCWlmIChS TV9JU19UT1BPTE9HWV9NQVRDSChnX3RvcF90YWJsZVtpXSwKLQkJCQkJcmVxX3RvcG9sb2d5KSkg ewotCQkJcmVxcy0+dG9wb2xvZ3kgPSAmZ190b3BfdGFibGVbaV07Ci0JCQlicmVhazsKLQkJfQot CX0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShod19yZXMtPmludGZzKTsgaSsrKSB7CisJ CWlmICghaW50ZltpXSkKKwkJCWNvbnRpbnVlOwogCi0JaWYgKCFyZXFzLT50b3BvbG9neSkgewot CQlEUFVfRVJST1IoImludmFsaWQgdG9wb2xvZ3kgZm9yIHRoZSBkaXNwbGF5XG4iKTsKLQkJcmV0 dXJuIC1FSU5WQUw7CisJCWludGZfZHJtX21hcFtpbnRmW2ldLT5ybV9pZF0gPSBkcm1faWQ7CisJ CXN0YXRlLT5od19pbnRmc1tpbnRmX2NvdW50KytdID0KKwkJCShzdHJ1Y3QgZHB1X2h3X2ludGYg KilpbnRmW2ldLT5odzsKIAl9CiAKLQkvKioKLQkgKiBTZXQgdGhlIHJlcXVpcmVtZW50IGJhc2Vk IG9uIGNhcHMgaWYgbm90IHNldCBmcm9tIHVzZXIgc3BhY2UKLQkgKiBUaGlzIHdpbGwgZW5zdXJl IHRvIHNlbGVjdCBMTSB0aWVkIHdpdGggRFMgYmxvY2tzCi0JICogQ3VycmVudGx5LCBEUyBibG9j a3MgYXJlIHRpZWQgd2l0aCBMTSAwIGFuZCBMTSAxIChwcmltYXJ5IGRpc3BsYXkpCi0JICovCi0J aWYgKCFSTV9SUV9EUyhyZXFzKSAmJiBybS0+aHdfbWRwLT5jYXBzLT5oYXNfZGVzdF9zY2FsZXIg JiYKLQkJY29ubl9zdGF0ZS0+Y29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9D T05ORUNUT1JfRFNJKQotCQlyZXFzLT50b3BfY3RybCB8PSBCSVQoRFBVX1JNX1RPUENUTF9EUyk7 Ci0KLQlEUFVfREVCVUcoInRvcF9jdHJsOiAweCVsbFhcbiIsIHJlcXMtPnRvcF9jdHJsKTsKLQlE UFVfREVCVUcoIm51bV9sbTogJWQgbnVtX2N0bDogJWQgdG9wb2xvZ3k6ICVkIHNwbGl0X2Rpc3Bs YXk6ICVkXG4iLAotCQkJcmVxcy0+dG9wb2xvZ3ktPm51bV9sbSwgcmVxcy0+dG9wb2xvZ3ktPm51 bV9jdGwsCi0JCQlyZXFzLT50b3BvbG9neS0+dG9wX25hbWUsCi0JCQlyZXFzLT50b3BvbG9neS0+ bmVlZHNfc3BsaXRfZGlzcGxheSk7Ci0JRFBVX0VWVDMyKG1vZGUtPmhkaXNwbGF5LCBybS0+bG1f bWF4X3dpZHRoLCByZXFzLT50b3BvbG9neS0+bnVtX2xtLAotCQkJcmVxcy0+dG9wX2N0cmwsIHJl cXMtPnRvcG9sb2d5LT50b3BfbmFtZSwKLQkJCXJlcXMtPnRvcG9sb2d5LT5udW1fY3RsKTsKKwlz dGF0ZS0+bnVtX2ludGZzID0gaW50Zl9jb3VudDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMg c3RydWN0IGRwdV9ybV9yc3ZwICpfZHB1X3JtX2dldF9yc3ZwKAorc3RhdGljIGludCBfZHB1X3Jt X3JlbGVhc2VfaHdfYmxrKAogCQlzdHJ1Y3QgZHB1X3JtICpybSwKLQkJc3RydWN0IGRybV9lbmNv ZGVyICplbmMpCisJCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqc3RhdGUsCisJCWVudW0gZHB1X2h3 X2Jsa190eXBlIHR5cGUpCiB7Ci0Jc3RydWN0IGRwdV9ybV9yc3ZwICppOwotCi0JaWYgKCFybSB8 fCAhZW5jKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gTlVM TDsKLQl9Ci0KLQlpZiAobGlzdF9lbXB0eSgmcm0tPnJzdnBzKSkKLQkJcmV0dXJuIE5VTEw7Ci0K LQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZybS0+cnN2cHMsIGxpc3QpCi0JCWlmIChpLT5lbmNf aWQgPT0gZW5jLT5iYXNlLmlkKQotCQkJcmV0dXJuIGk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KKwlz dHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgaXRlcjsKKwlpbnQgZHJtX2lkID0gZ2V0X2NydGNfaWQoc3Rh dGUpOworCWludCBudW1fcmVsZWFzZWQgPSAwOworCWludCAqZHJtX21hcCA9IHJtLT5od19kcm1f bWFwW3R5cGVdOwogCi1zdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3IgKl9kcHVfcm1fZ2V0X2Nv bm5lY3RvcigKLQkJc3RydWN0IGRybV9lbmNvZGVyICplbmMpCi17Ci0Jc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm4gPSBOVUxMOwotCXN0cnVjdCBsaXN0X2hlYWQgKmNvbm5lY3Rvcl9saXN0ID0K LQkJCSZlbmMtPmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3Q7CisJZHB1X3JtX2luaXRf aHdfaXRlcigmaXRlciwgZHJtX2lkLCB0eXBlKTsKKwl3aGlsZSAoX2RwdV9ybV9nZXRfaHdfbG9j a2VkKHJtLCAmaXRlcikpIHsKKwkJZHJtX21hcFtpdGVyLmJsay0+cm1faWRdID0gMDsKKwkJbnVt X3JlbGVhc2VkKys7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm4sIGNvbm5lY3Rvcl9saXN0 LCBoZWFkKQotCQlpZiAoY29ubi0+ZW5jb2RlciA9PSBlbmMpCi0JCQlyZXR1cm4gY29ubjsKKwkJ RFBVX0VWVDMyKGl0ZXIuYmxrLT50eXBlLCBkcm1faWQsIGl0ZXIuYmxrLT5pZCk7CisJfQogCi0J cmV0dXJuIE5VTEw7CisJcmV0dXJuIG51bV9yZWxlYXNlZDsKIH0KIAotLyoqCi0gKiBfZHB1X3Jt X3JlbGVhc2VfcnN2cCAtIHJlbGVhc2UgcmVzb3VyY2VzIGFuZCByZWxlYXNlIGEgcmVzZXJ2YXRp b24KLSAqIEBybToJS01TIGhhbmRsZQotICogQHJzdnA6CVJTVlAgcG9pbnRlciB0byByZWxlYXNl IGFuZCByZWxlYXNlIHJlc291cmNlcyBmb3IKLSAqLwotc3RhdGljIHZvaWQgX2RwdV9ybV9yZWxl YXNlX3JzdnAoCi0JCXN0cnVjdCBkcHVfcm0gKnJtLAotCQlzdHJ1Y3QgZHB1X3JtX3JzdnAgKnJz dnAsCi0JCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uKQorc3RhdGljIGludCBfZHB1X3JtX3Jl bGVhc2VfbG1zKHN0cnVjdCBkcHVfcm0gKnJtLCBzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKnN0YXRl KQogewotCXN0cnVjdCBkcHVfcm1fcnN2cCAqcnN2cF9jLCAqcnN2cF9uOwotCXN0cnVjdCBkcHVf cm1faHdfYmxrICpibGs7Ci0JZW51bSBkcHVfaHdfYmxrX3R5cGUgdHlwZTsKKwlpbnQgbnVtX2xt LCBudW1fcHA7CiAKLQlpZiAoIXJzdnApCi0JCXJldHVybjsKKwkvKiBSZWxlYXNlIExNIGJsb2Nr cyAqLworCW51bV9sbSA9IF9kcHVfcm1fcmVsZWFzZV9od19ibGsocm0sIHN0YXRlLCBEUFVfSFdf QkxLX0xNKTsKIAotCURQVV9ERUJVRygicmVsIHJzdnAgJWQgZW5jICVkXG4iLCByc3ZwLT5zZXEs IHJzdnAtPmVuY19pZCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnN2cF9jLCByc3Zw X24sICZybS0+cnN2cHMsIGxpc3QpIHsKLQkJaWYgKHJzdnAgPT0gcnN2cF9jKSB7Ci0JCQlsaXN0 X2RlbCgmcnN2cF9jLT5saXN0KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JZm9yICh0eXBlID0g MDsgdHlwZSA8IERQVV9IV19CTEtfTUFYOyB0eXBlKyspIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRy eShibGssICZybS0+aHdfYmxrc1t0eXBlXSwgbGlzdCkgewotCQkJaWYgKGJsay0+cnN2cCA9PSBy c3ZwKSB7Ci0JCQkJYmxrLT5yc3ZwID0gTlVMTDsKLQkJCQlEUFVfREVCVUcoInJlbCByc3ZwICVk IGVuYyAlZCAlZCAlZFxuIiwKLQkJCQkJCXJzdnAtPnNlcSwgcnN2cC0+ZW5jX2lkLAotCQkJCQkJ YmxrLT50eXBlLCBibGstPmlkKTsKLQkJCX0KLQkJCWlmIChibGstPnJzdnBfbnh0ID09IHJzdnAp IHsKLQkJCQlibGstPnJzdnBfbnh0ID0gTlVMTDsKLQkJCQlEUFVfREVCVUcoInJlbCByc3ZwX254 dCAlZCBlbmMgJWQgJWQgJWRcbiIsCi0JCQkJCQlyc3ZwLT5zZXEsIHJzdnAtPmVuY19pZCwKLQkJ CQkJCWJsay0+dHlwZSwgYmxrLT5pZCk7Ci0JCQl9Ci0JCX0KKwkvKiBSbGVhc2UgcGluZyBwb25n IGJsb2NrcyAqLworCW51bV9wcCA9IF9kcHVfcm1fcmVsZWFzZV9od19ibGsocm0sIHN0YXRlLCBE UFVfSFdfQkxLX1BJTkdQT05HKTsKKwlpZiAobnVtX3BwICE9IG51bV9sbSkgeworCQlEUFVfRVJS T1IoImxtIGNoYWluIGNvdW50IG1pc21hdGNoIGxtOiAlZCBwcDolZFxuIiwKKwkJCQludW1fbG0s IG51bV9wcCk7CisJCXJldHVybiAwOwogCX0KIAotCWtmcmVlKHJzdnApOworCXJldHVybiBudW1f bG07CiB9CiAKLXZvaWQgZHB1X3JtX3JlbGVhc2Uoc3RydWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jKQoraW50IGRwdV9ybV9yZXNlcnZlX2NydGNfcmVzKHN0cnVjdCBkcHVf cm0gKnJtLCBzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKnN0YXRlLAorCXN0cnVjdCBkcHVfY3J0Y190 b3BvbG9neSAqdG9wb2xvZ3kpCiB7Ci0Jc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwOwotCXN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uOwotCi0JaWYgKCFybSB8fCAhZW5jKSB7Ci0JCURQVV9FUlJP UigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm47Ci0JfQorCWludCByYyA9IDA7CiAKIAlt dXRleF9sb2NrKCZybS0+cm1fbG9jayk7CiAKLQlyc3ZwID0gX2RwdV9ybV9nZXRfcnN2cChybSwg ZW5jKTsKLQlpZiAoIXJzdnApIHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gZmluZCByc3ZwIGZv ciBlbmMgJWRcbiIsIGVuYy0+YmFzZS5pZCk7Ci0JCWdvdG8gZW5kOworCXJjID0gX2RwdV9ybV9y ZXNlcnZlX2xtcyhybSwgc3RhdGUsIHRvcG9sb2d5KTsKKwlpZiAocmMpICB7CisJCURQVV9FUlJP UigidW5hYmxlIHRvIGFsbG9jYXRlIGxtIGZvciBjcnRjOiAlZFxuIiwKKwkJCQlnZXRfY3J0Y19p ZChzdGF0ZSkpOworCQlnb3RvIHJlc2VydmVfZG9uZTsKIAl9CiAKLQljb25uID0gX2RwdV9ybV9n ZXRfY29ubmVjdG9yKGVuYyk7Ci0JaWYgKCFjb25uKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRv IGdldCBjb25uZWN0b3IgZm9yIGVuYyAlZFxuIiwgZW5jLT5iYXNlLmlkKTsKLQkJZ290byBlbmQ7 CisJcmMgPSBfZHB1X3JtX3Jlc2VydmVfY3RscyhybSwgc3RhdGUsIHRvcG9sb2d5KTsKKwlpZiAo cmMpICB7CisJCURQVV9FUlJPUigidW5hYmxlIHRvIGFsbG9jYXRlIGN0bCBmb3IgY3J0YzogJWRc biIsCisJCQkJZ2V0X2NydGNfaWQoc3RhdGUpKTsKKwkJZ290byByZXNlcnZlX2RvbmU7CiAJfQog Ci0JX2RwdV9ybV9yZWxlYXNlX3JzdnAocm0sIHJzdnAsIGNvbm4pOwotZW5kOgorcmVzZXJ2ZV9k b25lOgogCW11dGV4X3VubG9jaygmcm0tPnJtX2xvY2spOworCisJcmV0dXJuIDA7CiB9CiAKLXN0 YXRpYyBpbnQgX2RwdV9ybV9jb21taXRfcnN2cCgKLQkJc3RydWN0IGRwdV9ybSAqcm0sCi0JCXN0 cnVjdCBkcHVfcm1fcnN2cCAqcnN2cCwKLQkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNv bm5fc3RhdGUpCisKK2ludCBkcHVfcm1fcmVsZWFzZV9jcnRjX3JlcyhzdHJ1Y3QgZHB1X3JtICpy bSwgc3RydWN0IGRwdV9jcnRjX3N0YXRlICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgZHB1X3JtX2h3X2Js ayAqYmxrOwotCWVudW0gZHB1X2h3X2Jsa190eXBlIHR5cGU7Ci0JaW50IHJldCA9IDA7CisJaW50 IHJjID0gMCwgbnVtX3JlbGVhc2VkOwogCi0JLyogU3dhcCBuZXh0IHJzdnAgdG8gYmUgdGhlIGFj dGl2ZSAqLwotCWZvciAodHlwZSA9IDA7IHR5cGUgPCBEUFVfSFdfQkxLX01BWDsgdHlwZSsrKSB7 Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxrLCAmcm0tPmh3X2Jsa3NbdHlwZV0sIGxpc3QpIHsK LQkJCWlmIChibGstPnJzdnBfbnh0KSB7Ci0JCQkJYmxrLT5yc3ZwID0gYmxrLT5yc3ZwX254dDsK LQkJCQlibGstPnJzdnBfbnh0ID0gTlVMTDsKLQkJCX0KLQkJfQorCW11dGV4X2xvY2soJnJtLT5y bV9sb2NrKTsKKworCW51bV9yZWxlYXNlZCA9IF9kcHVfcm1fcmVsZWFzZV9sbXMocm0sIHN0YXRl KTsKKwlpZiAobnVtX3JlbGVhc2VkICE9IHN0YXRlLT5udW1fbWl4ZXJzKSB7CisJCURQVV9FUlJP UigKKwkJImxtIHJlbGVhc2UgY291bnQgZG9lc24ndCBtYXRjaCBmb3IgY3J0YzogJWQgKCVkICE9 ICVkKVxuIiwKKwkJCWdldF9jcnRjX2lkKHN0YXRlKSwgbnVtX3JlbGVhc2VkLCBzdGF0ZS0+bnVt X21peGVycyk7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byByZWxlYXNlX2RvbmU7CiAJfQogCi0J aWYgKCFyZXQpIHsKLQkJRFBVX0RFQlVHKCJyc3J2IGVuYyAlZCB0b3BvbG9neSAlZFxuIiwgcnN2 cC0+ZW5jX2lkLAotCQkJCXJzdnAtPnRvcG9sb2d5KTsKLQkJRFBVX0VWVDMyKHJzdnAtPmVuY19p ZCwgcnN2cC0+dG9wb2xvZ3kpOworCW51bV9yZWxlYXNlZCA9IF9kcHVfcm1fcmVsZWFzZV9od19i bGsocm0sIHN0YXRlLCBEUFVfSFdfQkxLX0NUTCk7CisJaWYgKG51bV9yZWxlYXNlZCAhPSBzdGF0 ZS0+bnVtX2N0bHMpIHsKKwkJRFBVX0VSUk9SKAorCQkibG0gcmVsZWFzZSBjb3VudCBkb2Vzbid0 IG1hdGNoIGZvciBjcnRjOiAlZCAoJWQgIT0gJWQpXG4iLAorCQkJZ2V0X2NydGNfaWQoc3RhdGUp LCBudW1fcmVsZWFzZWQsIHN0YXRlLT5udW1fY3Rscyk7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290 byByZWxlYXNlX2RvbmU7CiAJfQorIHJlbGVhc2VfZG9uZToKKwltdXRleF91bmxvY2soJnJtLT5y bV9sb2NrKTsKIAotCXJldHVybiByZXQ7CisJc3RhdGUtPm51bV9taXhlcnMgPSAwOworCXN0YXRl LT5udW1fY3RscyA9IDA7CisJbWVtc2V0KCZzdGF0ZS0+bWl4ZXJzLCAwLCBzaXplb2Yoc3RhdGUt Pm1peGVycykpOworCW1lbXNldCgmc3RhdGUtPmh3X2N0bHMsIDAsIHNpemVvZihzdGF0ZS0+aHdf Y3RscykpOworCisJcmV0dXJuIHJjOwogfQogCi1pbnQgZHB1X3JtX3Jlc2VydmUoCi0JCXN0cnVj dCBkcHVfcm0gKnJtLAotCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuYywKLQkJc3RydWN0IGRybV9j cnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29u bl9zdGF0ZSwKLQkJc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5LAotCQlib29s IHRlc3Rfb25seSkKK2ludCBkcHVfcm1fcmVzZXJ2ZV9lbmNvZGVyX3JlcygKKwlzdHJ1Y3QgZHB1 X3JtICpybSwgc3RydWN0IGRwdV9jcnRjX3N0YXRlICpzdGF0ZSwKKwlzdHJ1Y3QgZHB1X2VuY29k ZXJfaHdfcmVzb3VyY2VzICpod19yZXMpCiB7Ci0Jc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwX2N1 ciwgKnJzdnBfbnh0OwotCXN0cnVjdCBkcHVfcm1fcmVxdWlyZW1lbnRzIHJlcXM7Ci0JaW50IHJl dDsKLQotCWlmICghcm0gfHwgIWVuYyB8fCAhY3J0Y19zdGF0ZSB8fCAhY29ubl9zdGF0ZSkgewot CQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JLyogQ2hlY2sgaWYgdGhpcyBpcyBqdXN0IGEgcGFnZS1mbGlwICovCi0JaWYgKCFkcm1f YXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSkKLQkJcmV0dXJuIDA7Ci0KLQlE UFVfREVCVUcoInJlc2VydmluZyBodyBmb3IgY29ubiAlZCBlbmMgJWQgY3J0YyAlZCB0ZXN0X29u bHkgJWRcbiIsCi0JCQljb25uX3N0YXRlLT5jb25uZWN0b3ItPmJhc2UuaWQsIGVuYy0+YmFzZS5p ZCwKLQkJCWNydGNfc3RhdGUtPmNydGMtPmJhc2UuaWQsIHRlc3Rfb25seSk7Ci0JRFBVX0VWVDMy KGVuYy0+YmFzZS5pZCwgY29ubl9zdGF0ZS0+Y29ubmVjdG9yLT5iYXNlLmlkKTsKKwlpbnQgcmMg PSAwOwogCiAJbXV0ZXhfbG9jaygmcm0tPnJtX2xvY2spOwogCi0JX2RwdV9ybV9wcmludF9yc3Zw cyhybSwgRFBVX1JNX1NUQUdFX0JFR0lOKTsKKwlyYyA9IF9kcHVfcm1fcmVzZXJ2ZV9pbnRmX3Jl bGF0ZWRfaHcocm0sIHN0YXRlLCBod19yZXMpOworCWlmIChyYykKKwkJRFBVX0VSUk9SKCJ1bmFi bGUgdG8gYWxsb2NhdGUgaW50ZiBmb3IgY3J0YzogJWRcbiIsCisJCQkJZ2V0X2NydGNfaWQoc3Rh dGUpKTsKIAotCXJldCA9IF9kcHVfcm1fcG9wdWxhdGVfcmVxdWlyZW1lbnRzKHJtLCBlbmMsIGNy dGNfc3RhdGUsCi0JCQljb25uX3N0YXRlLCAmcmVxcywgdG9wb2xvZ3kpOwotCWlmIChyZXQpIHsK LQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gcG9wdWxhdGUgaHcgcmVxdWlyZW1lbnRzXG4iKTsKLQkJ Z290byBlbmQ7Ci0JfQorCW11dGV4X3VubG9jaygmcm0tPnJtX2xvY2spOwogCi0JLyoKLQkgKiBX ZSBvbmx5IHN1cHBvcnQgb25lIGFjdGl2ZSByZXNlcnZhdGlvbiBwZXItaHctYmxvY2suIEJ1dCB0 byBpbXBsZW1lbnQKLQkgKiB0cmFuc2FjdGlvbmFsIHNlbWFudGljcyBmb3IgdGVzdC1vbmx5LCBh bmQgZm9yIGFsbG93aW5nIGZhaWx1cmUgd2hpbGUKLQkgKiBtb2RpZnlpbmcgeW91ciBleGlzdGlu ZyByZXNlcnZhdGlvbiwgb3ZlciB0aGUgY291cnNlIG9mIHRoaXMKLQkgKiBmdW5jdGlvbiB3ZSBj YW4gaGF2ZSB0d28gcmVzZXJ2YXRpb25zOgotCSAqIEN1cnJlbnQ6IEV4aXN0aW5nIHJlc2VydmF0 aW9uCi0JICogTmV4dDogUHJvcG9zZWQgcmVzZXJ2YXRpb24uIFRoZSBwcm9wb3NlZCByZXNlcnZh dGlvbiBtYXkgZmFpbCwgb3IgbWF5Ci0JICogICAgICAgYmUgZGlzY2FyZGVkIGlmIGluIHRlc3Qt b25seSBtb2RlLgotCSAqIElmIHJlc2VydmF0aW9uIGlzIHN1Y2Nlc3NmdWwsIGFuZCB3ZSdyZSBu b3QgaW4gdGVzdC1vbmx5LCB0aGVuIHdlCi0JICogcmVwbGFjZSB0aGUgY3VycmVudCB3aXRoIHRo ZSBuZXh0LgotCSAqLwotCXJzdnBfbnh0ID0ga3phbGxvYyhzaXplb2YoKnJzdnBfbnh0KSwgR0ZQ X0tFUk5FTCk7Ci0JaWYgKCFyc3ZwX254dCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVu ZDsKLQl9CisJcmV0dXJuIHJjOworfQogCi0JcnN2cF9jdXIgPSBfZHB1X3JtX2dldF9yc3ZwKHJt LCBlbmMpOwotCi0JLyoKLQkgKiBVc2VyIGNhbiByZXF1ZXN0IHRoYXQgd2UgY2xlYXIgb3V0IGFu eSByZXNlcnZhdGlvbiBkdXJpbmcgdGhlCi0JICogYXRvbWljX2NoZWNrIHBoYXNlIGJ5IHVzaW5n IHRoaXMgQ0xFQVIgYml0Ci0JICovCi0JaWYgKHJzdnBfY3VyICYmIHRlc3Rfb25seSAmJiBSTV9S UV9DTEVBUigmcmVxcykpIHsKLQkJRFBVX0RFQlVHKCJ0ZXN0X29ubHkgJiBDTEVBUjogY2xlYXIg cnN2cFtzJWRlJWRdXG4iLAotCQkJCXJzdnBfY3VyLT5zZXEsIHJzdnBfY3VyLT5lbmNfaWQpOwot CQlfZHB1X3JtX3JlbGVhc2VfcnN2cChybSwgcnN2cF9jdXIsIGNvbm5fc3RhdGUtPmNvbm5lY3Rv cik7Ci0JCXJzdnBfY3VyID0gTlVMTDsKLQkJX2RwdV9ybV9wcmludF9yc3ZwcyhybSwgRFBVX1JN X1NUQUdFX0FGVEVSX0NMRUFSKTsKLQl9CitpbnQgZHB1X3JtX3JlbGVhc2VfZW5jb2Rlcl9yZXMo c3RydWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJaW50 IG51bV9yZWxlYXNlZDsKKwlpbnQgcmMgPSAwOwogCi0JLyogQ2hlY2sgdGhlIHByb3Bvc2VkIHJl c2VydmF0aW9uLCBzdG9yZSBpdCBpbiBodydzICJuZXh0IiBmaWVsZCAqLwotCXJldCA9IF9kcHVf cm1fbWFrZV9uZXh0X3JzdnAocm0sIGVuYywgY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSwKLQkJCXJz dnBfbnh0LCAmcmVxcyk7Ci0KLQlfZHB1X3JtX3ByaW50X3JzdnBzKHJtLCBEUFVfUk1fU1RBR0Vf QUZURVJfUlNWUE5FWFQpOwotCi0JaWYgKHJldCkgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBy ZXNlcnZlIGh3IHJlc291cmNlczogJWRcbiIsIHJldCk7Ci0JCV9kcHVfcm1fcmVsZWFzZV9yc3Zw KHJtLCByc3ZwX254dCwgY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsKLQl9IGVsc2UgaWYgKHRlc3Rf b25seSAmJiAhUk1fUlFfTE9DSygmcmVxcykpIHsKLQkJLyoKLQkJICogTm9ybWFsbHksIGlmIHRl c3Rfb25seSwgdGVzdCB0aGUgcmVzZXJ2YXRpb24gYW5kIHRoZW4gdW5kbwotCQkgKiBIb3dldmVy LCBpZiB0aGUgdXNlciByZXF1ZXN0cyBMT0NLLCB0aGVuIGtlZXAgdGhlIHJlc2VydmF0aW9uCi0J CSAqIG1hZGUgZHVyaW5nIHRoZSBhdG9taWNfY2hlY2sgcGhhc2UuCi0JCSAqLwotCQlEUFVfREVC VUcoInRlc3Rfb25seTogZGlzY2FyZCB0ZXN0IHJzdnBbcyVkZSVkXVxuIiwKLQkJCQlyc3ZwX254 dC0+c2VxLCByc3ZwX254dC0+ZW5jX2lkKTsKLQkJX2RwdV9ybV9yZWxlYXNlX3JzdnAocm0sIHJz dnBfbnh0LCBjb25uX3N0YXRlLT5jb25uZWN0b3IpOwotCX0gZWxzZSB7Ci0JCWlmICh0ZXN0X29u bHkgJiYgUk1fUlFfTE9DSygmcmVxcykpCi0JCQlEUFVfREVCVUcoInRlc3Rfb25seSAmIExPQ0s6 IGxvY2sgcnN2cFtzJWRlJWRdXG4iLAotCQkJCQlyc3ZwX254dC0+c2VxLCByc3ZwX254dC0+ZW5j X2lkKTsKLQotCQlfZHB1X3JtX3JlbGVhc2VfcnN2cChybSwgcnN2cF9jdXIsIGNvbm5fc3RhdGUt PmNvbm5lY3Rvcik7Ci0KLQkJcmV0ID0gX2RwdV9ybV9jb21taXRfcnN2cChybSwgcnN2cF9ueHQs IGNvbm5fc3RhdGUpOwotCX0KKwltdXRleF9sb2NrKCZybS0+cm1fbG9jayk7CiAKLQlfZHB1X3Jt X3ByaW50X3JzdnBzKHJtLCBEUFVfUk1fU1RBR0VfRklOQUwpOworCW51bV9yZWxlYXNlZCA9IF9k cHVfcm1fcmVsZWFzZV9od19ibGsocm0sIHN0YXRlLCBEUFVfSFdfQkxLX0lOVEYpOworCWlmIChu dW1fcmVsZWFzZWQgIT0gc3RhdGUtPm51bV9pbnRmcykgeworCQlEUFVfRVJST1IoCisJCSJpbnRm IHJlbGVhc2UgY291bnQgZG9lc24ndCBtYXRjaCBmb3IgY3J0YzogJWQgKCVkICE9ICVkKVxuIiwK KwkJCWdldF9jcnRjX2lkKHN0YXRlKSwgbnVtX3JlbGVhc2VkLCBzdGF0ZS0+bnVtX2ludGZzKTsK KwkJcmMgPSAtRUlOVkFMOworCX0KIAotZW5kOgogCW11dGV4X3VubG9jaygmcm0tPnJtX2xvY2sp OwogCi0JcmV0dXJuIHJldDsKKwlzdGF0ZS0+bnVtX2ludGZzID0gMDsKKwltZW1zZXQoJnN0YXRl LT5od19pbnRmcywgMCwgc2l6ZW9mKHN0YXRlLT5od19pbnRmcykpOworCisJcmV0dXJuIHJjOwog fQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uaCBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oCmluZGV4IDA1YTcxOGMuLmZh MmNkNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oCkBAIC0xNiw2MSAr MTYsMjYgQEAKICNkZWZpbmUgX19EUFVfUk1fSF9fCiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+ Ci0KICNpbmNsdWRlICJtc21fa21zLmgiCiAjaW5jbHVkZSAiZHB1X2h3X3RvcC5oIgotCi0vKioK LSAqIGVudW0gZHB1X3JtX3RvcG9sb2d5X25hbWUgLSBIVyByZXNvdXJjZSB1c2UgY2FzZSBpbiB1 c2UgYnkgY29ubmVjdG9yCi0gKiBARFBVX1JNX1RPUE9MT0dZX05PTkU6ICAgICAgICAgICAgICAg ICBObyB0b3BvbG9neSBpbiB1c2UgY3VycmVudGx5Ci0gKiBARFBVX1JNX1RPUE9MT0dZX1NJTkdM RVBJUEU6ICAgICAgICAgICAxIExNLCAxIFBQLCAxIElOVEYvV0IKLSAqIEBEUFVfUk1fVE9QT0xP R1lfRFVBTFBJUEU6ICAgICAgICAgICAgIDIgTE0sIDIgUFAsIDIgSU5URi9XQgotICogQERQVV9S TV9UT1BPTE9HWV9EVUFMUElQRV8zRE1FUkdFOiAgICAgMiBMTSwgMiBQUCwgM0RNdXgsIDEgSU5U Ri9XQgotICovCi1lbnVtIGRwdV9ybV90b3BvbG9neV9uYW1lIHsKLQlEUFVfUk1fVE9QT0xPR1lf Tk9ORSA9IDAsCi0JRFBVX1JNX1RPUE9MT0dZX1NJTkdMRVBJUEUsCi0JRFBVX1JNX1RPUE9MT0dZ X0RVQUxQSVBFLAotCURQVV9STV9UT1BPTE9HWV9EVUFMUElQRV8zRE1FUkdFLAotCURQVV9STV9U T1BPTE9HWV9NQVgsCi19OwotCi0vKioKLSAqIGVudW0gZHB1X3JtX3RvcG9sb2d5X2NvbnRyb2wg LSBIVyByZXNvdXJjZSB1c2UgY2FzZSBpbiB1c2UgYnkgY29ubmVjdG9yCi0gKiBARFBVX1JNX1RP UENUTF9SRVNFUlZFX0xPQ0s6IElmIHNldCwgaW4gQXRvbWljVGVzdCBwaGFzZSwgYWZ0ZXIgYSBz dWNjZXNzZnVsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QsIHJlc2VydmUg dGhlIHJlc291cmNlcyBmb3IgdGhpcyBkaXNwbGF5LgotICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOb3JtYWwgYmVoYXZpb3Igd291bGQgbm90IGltcGFjdCB0aGUgcmVzZXJ2YXRpb24K LSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCBkdXJpbmcgdGhlIEF0b21pY1Rl c3QgcGhhc2UuCi0gKiBARFBVX1JNX1RPUENUTF9SRVNFUlZFX0NMRUFSOiBJZiBzZXQsIGluIEF0 b21pY1Rlc3QgcGhhc2UsIGJlZm9yZSB0ZXN0aW5nLAotICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVsZWFzZSBhbnkgcmVzZXJ2YXRpb24gaGVsZCBieSB0aGlzIGRpc3BsYXkuCi0g KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgYmVoYXZpb3Igd291bGQgbm90 IGltcGFjdCB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmF0aW9u IGxpc3QgZHVyaW5nIHRoZSBBdG9taWNUZXN0IHBoYXNlLgotICogQERQVV9STV9UT1BDVExfRFMg IDogUmVxdWlyZSBsYXllciBtaXhlcnMgd2l0aCBEUyBjYXBhYmlsaXRpZXMKLSAqLwotZW51bSBk cHVfcm1fdG9wb2xvZ3lfY29udHJvbCB7Ci0JRFBVX1JNX1RPUENUTF9SRVNFUlZFX0xPQ0ssCi0J RFBVX1JNX1RPUENUTF9SRVNFUlZFX0NMRUFSLAotCURQVV9STV9UT1BDVExfRFMsCi19OworI2lu Y2x1ZGUgImRwdV9jcnRjLmgiCisjaW5jbHVkZSAiZHB1X2VuY29kZXIuaCIKIAogLyoqCiAgKiBz dHJ1Y3QgZHB1X3JtIC0gRFBVIGR5bmFtaWMgaGFyZHdhcmUgcmVzb3VyY2UgbWFuYWdlcgotICog QGRldjogZGV2aWNlIGhhbmRsZSBmb3IgZXZlbnQgbG9nZ2luZyBwdXJwb3NlcwotICogQHJzdnBz OiBsaXN0IG9mIGhhcmR3YXJlIHJlc2VydmF0aW9ucyBieSBlYWNoIGNydGMtPmVuY29kZXItPmNv bm5lY3RvcgorICogQGh3X2Jsa3NfbGVuIC0gbnVtYmVyIG9mIGh3IGJsb2NrcyBwZXIgdHlwZQog ICogQGh3X2Jsa3M6IGFycmF5IG9mIGxpc3RzIG9mIGhhcmR3YXJlIHJlc291cmNlcyBwcmVzZW50 IGluIHRoZSBzeXN0ZW0sIG9uZQogICoJbGlzdCBwZXIgdHlwZSBvZiBoYXJkd2FyZSBibG9jawor ICogQGh3X2RybV9tYXAgLSBhcnJheSB0byB0cmFjayBlYWNoIGh3IGJsb2NrIHR5cGUgYXNzaWdu bWVudHMKICAqIEBod19tZHA6IGhhcmR3YXJlIG9iamVjdCBmb3IgbWRwX3RvcAogICogQGxtX21h eF93aWR0aDogY2FjaGVkIGxheWVyIG1peGVyIG1heGltdW0gd2lkdGgKLSAqIEByc3ZwX25leHRf c2VxOiBzZXF1ZW5jZSBudW1iZXIgZm9yIG5leHQgcmVzZXJ2YXRpb24gZm9yIGRlYnVnZ2luZyBw dXJwb3NlcwogICogQHJtX2xvY2s6IHJlc291cmNlIG1hbmFnZXIgbXV0ZXgKICAqLwogc3RydWN0 IGRwdV9ybSB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJz dnBzOwotCXN0cnVjdCBsaXN0X2hlYWQgaHdfYmxrc1tEUFVfSFdfQkxLX01BWF07CisJdWludDMy X3QgaHdfYmxrc19sZW5bRFBVX0hXX0JMS19NQVhdOworCXN0cnVjdCBkcHVfcm1faHdfYmxrICpo d19ibGtzW0RQVV9IV19CTEtfTUFYXVtNQVhfQkxPQ0tTXTsKKwlpbnQgaHdfZHJtX21hcFtEUFVf SFdfQkxLX01BWF1bTUFYX0JMT0NLU107CiAJc3RydWN0IGRwdV9od19tZHAgKmh3X21kcDsKLQl1 aW50MzJfdCBsbV9tYXhfd2lkdGg7Ci0JdWludDMyX3QgcnN2cF9uZXh0X3NlcTsKIAlzdHJ1Y3Qg bXV0ZXggcm1fbG9jazsKIH07CiAKQEAgLTkwLDIzICs1NSwyOCBAQCBzdHJ1Y3QgZHB1X3JtIHsK IHN0cnVjdCBkcHVfcm1faHdfaXRlciB7CiAJdm9pZCAqaHc7CiAJc3RydWN0IGRwdV9ybV9od19i bGsgKmJsazsKLQl1aW50MzJfdCBlbmNfaWQ7CisJdWludDMyX3QgZHJtX2lkOwogCWVudW0gZHB1 X2h3X2Jsa190eXBlIHR5cGU7CisJdWludDMyX3QgaW5kZXg7CiB9OwogCiAvKioKKyAqIGRwdV9y bV9wcmludF9zdGF0ZSAtIHByaW50cyBjdXJyZW50IFJNIHN0YXRlIG9uIHJlc291cmNlIHBvb2wK KyAqIEBybTogRFBVIFJlc291cmNlIE1hbmFnZXIgaGFuZGxlCisgKi8KK3ZvaWQgZHB1X3JtX3By aW50X3N0YXRlKHN0cnVjdCBkcHVfcm0gKnJtKTsKKworLyoqCiAgKiBkcHVfcm1faW5pdCAtIFJl YWQgaGFyZHdhcmUgY2F0YWxvZyBhbmQgY3JlYXRlIHJlc2VydmF0aW9uIHRyYWNraW5nIG9iamVj dHMKICAqCWZvciBhbGwgSFcgYmxvY2tzLgogICogQHJtOiBEUFUgUmVzb3VyY2UgTWFuYWdlciBo YW5kbGUKICAqIEBjYXQ6IFBvaW50ZXIgdG8gaGFyZHdhcmUgY2F0YWxvZwogICogQG1taW86IG1h cHBlZCByZWdpc3RlciBpbyBhZGRyZXNzIG9mIE1EUAotICogQGRldjogZGV2aWNlIGhhbmRsZSBm b3IgZXZlbnQgbG9nZ2luZyBwdXJwb3NlcwogICogQFJldHVybjogMCBvbiBTdWNjZXNzIG90aGVy d2lzZSAtRVJST1IKICAqLwogaW50IGRwdV9ybV9pbml0KHN0cnVjdCBkcHVfcm0gKnJtLAogCQlz dHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXQsCi0JCXZvaWQgKm1taW8sCi0JCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpOworCQl2b2lkICptbWlvKTsKIAogLyoqCiAgKiBkcHVfcm1fZGVzdHJveSAtIEZy ZWUgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgZHB1X3JtX2luaXQKQEAgLTExNiw3NSArODYsNDcg QEAgaW50IGRwdV9ybV9pbml0KHN0cnVjdCBkcHVfcm0gKnJtLAogaW50IGRwdV9ybV9kZXN0cm95 KHN0cnVjdCBkcHVfcm0gKnJtKTsKIAogLyoqCi0gKiBkcHVfcm1fcmVzZXJ2ZSAtIEdpdmVuIGEg Q1JUQy0+RW5jb2Rlci0+Q29ubmVjdG9yIGRpc3BsYXkgY2hhaW4sIGFuYWx5emUKLSAqCXRoZSB1 c2UgY29ubmVjdGlvbnMgYW5kIHVzZXIgcmVxdWlyZW1lbnRzLCBzcGVjaWZpZWQgdGhyb3VnaCBy ZWxhdGVkCi0gKgl0b3BvbG9neSBjb250cm9sIHByb3BlcnRpZXMsIGFuZCByZXNlcnZlIGhhcmR3 YXJlIGJsb2NrcyB0byB0aGF0Ci0gKglkaXNwbGF5IGNoYWluLgotICoJSFcgYmxvY2tzIGNhbiB0 aGVuIGJlIGFjY2Vzc2VkIHRocm91Z2ggZHB1X3JtX2dldF8qIGZ1bmN0aW9ucy4KLSAqCUhXIFJl c2VydmF0aW9ucyBzaG91bGQgYmUgcmVsZWFzZWQgdmlhIGRwdV9ybV9yZWxlYXNlX2h3LgorICog ZHB1X3JtX3Jlc2VydmVfY3J0Y19yZXMgLSBSZXNlcnZlIEhXIGJsb2NrcyBmb3IgQ1JUQwogICog QHJtOiBEUFUgUmVzb3VyY2UgTWFuYWdlciBoYW5kbGUKLSAqIEBkcm1fZW5jOiBEUk0gRW5jb2Rl ciBoYW5kbGUKLSAqIEBjcnRjX3N0YXRlOiBQcm9wb3NlZCBBdG9taWMgRFJNIENSVEMgU3RhdGUg aGFuZGxlCi0gKiBAY29ubl9zdGF0ZTogUHJvcG9zZWQgQXRvbWljIERSTSBDb25uZWN0b3IgU3Rh dGUgaGFuZGxlCi0gKiBAdG9wb2xvZ3k6IFBvaW50ZXIgdG8gdG9wb2xvZ3kgaW5mbyBmb3IgdGhl IGRpc3BsYXkKLSAqIEB0ZXN0X29ubHk6IEF0b21pYy1UZXN0IHBoYXNlLCBkaXNjYXJkIHJlc3Vs dHMgKHVubGVzcyBwcm9wZXJ0eSBvdmVycmlkZXMpCi0gKiBAUmV0dXJuOiAwIG9uIFN1Y2Nlc3Mg b3RoZXJ3aXNlIC1FUlJPUgorICogQHN0YXRlOiBEUFUgQ1JUQyBzdGF0ZSB0byBjYWNoZSBIVyBi bG9jayBoYW5kbGVzCisgKiBAdG9wb2xvZ3k6IHRvcG9sb2d5IHJlcXVpcmVtZW50IGZvciB0aGUg ZGlzcGxheQorICogQFJldHVybjogMCBvbiBTdWNjZXNzIG90aGVyd2lzZSAtIEVSUk9SCiAgKi8K LWludCBkcHVfcm1fcmVzZXJ2ZShzdHJ1Y3QgZHB1X3JtICpybSwKLQkJc3RydWN0IGRybV9lbmNv ZGVyICpkcm1fZW5jLAotCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCXN0 cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlLAotCQlzdHJ1Y3QgbXNtX2Rpc3Bs YXlfdG9wb2xvZ3kgdG9wb2xvZ3ksCi0JCWJvb2wgdGVzdF9vbmx5KTsKK2ludCBkcHVfcm1fcmVz ZXJ2ZV9jcnRjX3JlcyhzdHJ1Y3QgZHB1X3JtICpybSwgc3RydWN0IGRwdV9jcnRjX3N0YXRlICpz dGF0ZSwKKwkJc3RydWN0IGRwdV9jcnRjX3RvcG9sb2d5ICp0b3BvbG9neSk7CiAKIC8qKgotICog ZHB1X3JtX3Jlc2VydmUgLSBHaXZlbiB0aGUgZW5jb2RlciBmb3IgdGhlIGRpc3BsYXkgY2hhaW4s IHJlbGVhc2UgYW55Ci0gKglIVyBibG9ja3MgcHJldmlvdXNseSByZXNlcnZlZCBmb3IgdGhhdCB1 c2UgY2FzZS4KKyAqIGRwdV9ybV9yZWxlYXNlX2NydGNfcmVzIC0gUmVsZWFzZSBIVyBibG9ja3Mg b2YgdGhlIENSVEMKICAqIEBybTogRFBVIFJlc291cmNlIE1hbmFnZXIgaGFuZGxlCi0gKiBAZW5j OiBEUk0gRW5jb2RlciBoYW5kbGUKLSAqIEBSZXR1cm46IDAgb24gU3VjY2VzcyBvdGhlcndpc2Ug LUVSUk9SCisgKiBAc3RhdGU6IERQVSBDUlRDIHN0YXRlIHRvIGNhY2hlIEhXIGJsb2NrIGhhbmRs ZXMKKyAqIEBSZXR1cm46IDAgb24gU3VjY2VzcyBvdGhlcndpc2UgLSBFUlJPUgogICovCi12b2lk IGRwdV9ybV9yZWxlYXNlKHN0cnVjdCBkcHVfcm0gKnJtLCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Yyk7CitpbnQgZHB1X3JtX3JlbGVhc2VfY3J0Y19yZXMoc3RydWN0IGRwdV9ybSAqcm0sIHN0cnVj dCBkcHVfY3J0Y19zdGF0ZSAqc3RhdGUpOwogCiAvKioKLSAqIGRwdV9ybV9nZXRfbWRwIC0gUmV0 cmlldmUgSFcgYmxvY2sgZm9yIE1EUCBUT1AuCi0gKglUaGlzIGlzIG5ldmVyIHJlc2VydmVkLCBh bmQgaXMgdXNhYmxlIGJ5IGFueSBkaXNwbGF5LgorICogZHB1X3JtX3Jlc2VydmVfZW5jb2Rlcl9y ZXMgLSBSZXNlcnZlIEhXIGJsb2NrcyBmb3IgRW5jb2Rlci9Db25uZWN0b3IKICAqIEBybTogRFBV IFJlc291cmNlIE1hbmFnZXIgaGFuZGxlCi0gKiBAUmV0dXJuOiBQb2ludGVyIHRvIGh3IGJsb2Nr IG9yIE5VTEwKKyAqIEBzdGF0ZTogRFBVIENSVEMgc3RhdGUgdG8gY2FjaGUgSFcgYmxvY2sgaGFu ZGxlcworICogQGh3X3JlczogaW50ZXJmYWNlIGJsb2NrIHJlbGF0ZWQgaW5mbworICogQFJldHVy bjogMCBvbiBTdWNjZXNzIG90aGVyd2lzZSAtIEVSUk9SCiAgKi8KLXN0cnVjdCBkcHVfaHdfbWRw ICpkcHVfcm1fZ2V0X21kcChzdHJ1Y3QgZHB1X3JtICpybSk7CitpbnQgZHB1X3JtX3Jlc2VydmVf ZW5jb2Rlcl9yZXMoc3RydWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqc3Rh dGUsCisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9od19yZXNvdXJjZXMgKmh3X3Jlcyk7CiAKIC8qKgot ICogZHB1X3JtX2luaXRfaHdfaXRlciAtIHNldHVwIGdpdmVuIGl0ZXJhdG9yIGZvciBuZXcgaXRl cmF0aW9uIG92ZXIgaHcgbGlzdAotICoJdXNpbmcgZHB1X3JtX2dldF9odwotICogQGl0ZXI6IGl0 ZXIgb2JqZWN0IHRvIGluaXRpYWxpemUKLSAqIEBlbmNfaWQ6IERSTSBJRCBvZiBFbmNvZGVyIGNs aWVudCB3aXNoZXMgdG8gc2VhcmNoIGZvciwgb3IgMCBmb3IgQW55IEVuY29kZXIKLSAqIEB0eXBl OiBIYXJkd2FyZSBCbG9jayBUeXBlIGNsaWVudCB3aXNoZXMgdG8gc2VhcmNoIGZvci4KLSAqLwot dm9pZCBkcHVfcm1faW5pdF9od19pdGVyKAotCQlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgKml0ZXIs Ci0JCXVpbnQzMl90IGVuY19pZCwKLQkJZW51bSBkcHVfaHdfYmxrX3R5cGUgdHlwZSk7Ci0vKioK LSAqIGRwdV9ybV9nZXRfaHcgLSByZXRyaWV2ZSByZXNlcnZlZCBodyBvYmplY3QgZ2l2ZW4gZW5j b2RlciBhbmQgaHcgdHlwZQotICoJTWVhbnQgdG8gZG8gYSBzaW5nbGUgcGFzcyB0aHJvdWdoIHRo ZSBoYXJkd2FyZSBsaXN0IHRvIGl0ZXJhdGl2ZWx5Ci0gKglyZXRyaWV2ZSBoYXJkd2FyZSBibG9j a3Mgb2YgYSBnaXZlbiB0eXBlIGZvciBhIGdpdmVuIGVuY29kZXIuCi0gKglJbml0aWFsaXplIGFu IGl0ZXJhdG9yIG9iamVjdC4KLSAqCVNldCBodyBibG9jayB0eXBlIG9mIGludGVyZXN0LiBTZXQg ZW5jb2RlciBpZCBvZiBpbnRlcmVzdCwgMCBmb3IgYW55LgotICoJRnVuY3Rpb24gcmV0dXJucyBm aXJzdCBodyBvZiB0eXBlIGZvciB0aGF0IGVuY29kZXIuCi0gKglTdWJzZXF1ZW50IGNhbGxzIHdp bGwgcmV0dXJuIHRoZSBuZXh0IHJlc2VydmVkIGh3IG9mIHRoYXQgdHlwZSBpbi1vcmRlci4KLSAq CUl0ZXJhdG9yIEhXIHBvaW50ZXIgd2lsbCBiZSBudWxsIG9uIGZhaWx1cmUgdG8gZmluZCBody4K KyAqIGRwdV9ybV9yZWxlYXNlX2VuY29kZXJfcmVzIC0gUmVsZWFzZSBIVyBibG9ja3Mgb2YgdGhl IEVuY29kZXIvQ29ubmVjdG9yCiAgKiBAcm06IERQVSBSZXNvdXJjZSBNYW5hZ2VyIGhhbmRsZQot ICogQGl0ZXI6IGl0ZXJhdG9yIG9iamVjdAotICogQFJldHVybjogdHJ1ZSBvbiBtYXRjaCBmb3Vu ZCwgZmFsc2Ugb24gbm8gbWF0Y2ggZm91bmQKKyAqIEBzdGF0ZTogRFBVIENSVEMgc3RhdGUgdG8g Y2FjaGUgSFcgYmxvY2sgaGFuZGxlcworICogQFJldHVybjogMCBvbiBTdWNjZXNzIG90aGVyd2lz ZSAtIEVSUk9SCiAgKi8KLWJvb2wgZHB1X3JtX2dldF9odyhzdHJ1Y3QgZHB1X3JtICpybSwgc3Ry dWN0IGRwdV9ybV9od19pdGVyICppdGVyKTsKK2ludCBkcHVfcm1fcmVsZWFzZV9lbmNvZGVyX3Jl cyhzdHJ1Y3QgZHB1X3JtICpybSwgc3RydWN0IGRwdV9jcnRjX3N0YXRlICpzdGF0ZSk7CiAKIC8q KgotICogZHB1X3JtX2NoZWNrX3Byb3BlcnR5X3RvcGN0bCAtIHZhbGlkYXRlIHByb3BlcnR5IGJp dG1hc2sgYmVmb3JlIGl0IGlzIHNldAotICogQHZhbDogdXNlcidzIHByb3Bvc2VkIHRvcG9sb2d5 IGNvbnRyb2wgYml0bWFzawotICogQFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGVycm9yCisgKiBk cHVfcm1fZ2V0X21kcCAtIFJldHJpZXZlIEhXIGJsb2NrIGZvciBNRFAgVE9QLgorICoJVGhpcyBp cyBuZXZlciByZXNlcnZlZCwgYW5kIGlzIHVzYWJsZSBieSBhbnkgZGlzcGxheS4KKyAqIEBybTog RFBVIFJlc291cmNlIE1hbmFnZXIgaGFuZGxlCisgKiBAUmV0dXJuOiBQb2ludGVyIHRvIGh3IGJs b2NrIG9yIE5VTEwKICAqLwotaW50IGRwdV9ybV9jaGVja19wcm9wZXJ0eV90b3BjdGwodWludDY0 X3QgdmFsKTsKK3N0cnVjdCBkcHVfaHdfbWRwICpkcHVfcm1fZ2V0X21kcChzdHJ1Y3QgZHB1X3Jt ICpybSk7CiAKICNlbmRpZiAvKiBfX0RQVV9STV9IX18gKi8KLS0gClRoZSBRdWFsY29tbSBJbm5v dmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0s CmEgTGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QK RnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=