From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH v3 6/7] drm/msm: remove msm_prop files Date: Mon, 11 Jun 2018 14:13:23 -0700 Message-ID: <1528751604-32541-7-git-send-email-jsanka@codeaurora.org> References: <1528751604-32541-1-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1528751604-32541-1-git-send-email-jsanka-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, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, Jeykumar Sankaran , seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org List-Id: dri-devel@lists.freedesktop.org UmVtb3ZlIGhhbmQgcm9sbGVkIG1zbSBwcm9wZXJ0eSBjYWNoaW5nIHRvIGhhbmRsZSBEUFUKY3Vz dG9tIHByb3BlcnRpZXMuIFRoaXMgY2hhbmdlIGFsc28gY2xlYW5zIHVwIGFsbCBpdHMKZGVwZW5k ZW5jaWVzIHRvIGNhY2hlIGFuZCByZXN0b3JlIHJlc3BlY3RpdmUgZHJtCnN0YXRlcy4KCmNoYW5n ZXMgaW4gdjI6CiAgICAtIG5vbmUKY2hhbmdlcyBpbiB2MzoKICAgIC0gcmViYXNlZCBvbiBodHRw czovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvc2VhbnBhdWwvCiAgICAgIGRwdS1zdGFnaW5nL2Nv bW1pdC80ODFkMjlkMzFjZDYyOWZkMjE2MzgxYjUzZGU1Njk1ZjY0NTQ2NWQ1CgpTaWduZWQtb2Zm LWJ5OiBKZXlrdW1hciBTYW5rYXJhbiA8anNhbmthQGNvZGVhdXJvcmEub3JnPgpSZXZpZXdlZC1i eTogU2VhbiBQYXVsIDxzZWFucGF1bEBjaHJvbWl1bS5vcmc+ZGQKLS0tCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMgfCAgIDIgLQogZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYyAgICAgIHwgMjM5ICstLS0tLS0tLQogZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaCAgICAgIHwgIDE2IC0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmggICB8ICAgMiAtCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyAgICAgfCAxMjMgKy0tLS0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5oICAgICB8ICAxMiAtCiBkcml2ZXJzL2dwdS9k cm0vbXNtL21zbV9kcnYuaCAgICAgICAgICAgICAgICAgfCAgMTYgKy0KIGRyaXZlcnMvZ3B1L2Ry bS9tc20vbXNtX3Byb3AuYyAgICAgICAgICAgICAgICB8IDY4OCAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fcHJvcC5oICAgICAgICAgICAgICAgIHwg NDM4IC0tLS0tLS0tLS0tLS0tLS0KIDkgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAx NTI4IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20v bXNtX3Byb3AuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX3By b3AuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3Jl X3BlcmYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuYwpp bmRleCA3ZWFmY2EzLi42YzBmNjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfY29yZV9wZXJmLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2NvcmVfcGVyZi5jCkBAIC0xOSw4ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvY2xr Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAKLSNpbmNsdWRlICJtc21fcHJvcC5oIgot CiAjaW5jbHVkZSAiZHB1X2ttcy5oIgogI2luY2x1ZGUgImRwdV90cmFjZS5oIgogI2luY2x1ZGUg ImRwdV9jcnRjLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwppbmRl eCA4MjU0Y2Q2Li40NjE2YTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9j cnRjLmMKQEAgLTU4MywxMCArNTgzLDYgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfZGVzdHJveShz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJaWYgKCFjcnRjKQogCQlyZXR1cm47CiAKLQlpZiAoZHB1 X2NydGMtPmJsb2JfaW5mbykKLQkJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KGRwdV9jcnRjLT5ibG9i X2luZm8pOwotCW1zbV9wcm9wZXJ0eV9kZXN0cm95KCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbyk7 Ci0KIAlfZHB1X2NydGNfZGVpbml0X2V2ZW50cyhkcHVfY3J0Yyk7CiAJZHB1X2NydGMtPnBoYW5k bGUgPSBOVUxMOwogCkBAIC0xMzQ2LDkgKzEzNDIsNyBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19k ZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAogCV9fZHJtX2F0b21pY19oZWxw ZXJfY3J0Y19kZXN0cm95X3N0YXRlKHN0YXRlKTsKIAotCS8qIGRlc3Ryb3kgdmFsdWUgaGVscGVy ICovCi0JbXNtX3Byb3BlcnR5X2Rlc3Ryb3lfc3RhdGUoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZv LCBjc3RhdGUsCi0JCQkmY3N0YXRlLT5wcm9wZXJ0eV9zdGF0ZSk7CisJa2ZyZWUoY3N0YXRlKTsK IH0KIAogc3RhdGljIGludCBfZHB1X2NydGNfd2FpdF9mb3JfZnJhbWVfZG9uZShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCkBAIC0xNTk2LDE3ICsxNTkwLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKmRwdV9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMp CiAKIAlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwogCW9sZF9jc3RhdGUgPSB0b19kcHVf Y3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7Ci0JY3N0YXRlID0gbXNtX3Byb3BlcnR5X2FsbG9jX3N0 YXRlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbyk7CisJY3N0YXRlID0ga21lbWR1cChvbGRfY3N0 YXRlLCBzaXplb2YoKm9sZF9jc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNzdGF0ZSkgewog CQlEUFVfRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBzdGF0ZVxuIik7CiAJCXJldHVybiBOVUxM OwogCX0KIAotCS8qIGR1cGxpY2F0ZSB2YWx1ZSBoZWxwZXIgKi8KLQltc21fcHJvcGVydHlfZHVw bGljYXRlX3N0YXRlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKLQkJCW9sZF9jc3RhdGUsIGNz dGF0ZSwKLQkJCSZjc3RhdGUtPnByb3BlcnR5X3N0YXRlLCBjc3RhdGUtPnByb3BlcnR5X3ZhbHVl cyk7Ci0KIAkvKiBkdXBsaWNhdGUgYmFzZSBoZWxwZXIgKi8KIAlfX2RybV9hdG9taWNfaGVscGVy X2NydGNfZHVwbGljYXRlX3N0YXRlKGNydGMsICZjc3RhdGUtPmJhc2UpOwogCkBAIC0xNjQyLDE3 ICsxNjMxLDEyIEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKIAl9CiAKIAlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwotCWNzdGF0ZSA9IG1z bV9wcm9wZXJ0eV9hbGxvY19zdGF0ZSgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8pOworCWNzdGF0 ZSA9IGt6YWxsb2Moc2l6ZW9mKCpjc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNzdGF0ZSkg ewogCQlEUFVfRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBzdGF0ZVxuIik7CiAJCXJldHVybjsK IAl9CiAKLQkvKiByZXNldCB2YWx1ZSBoZWxwZXIgKi8KLQltc21fcHJvcGVydHlfcmVzZXRfc3Rh dGUoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLCBjc3RhdGUsCi0JCQkmY3N0YXRlLT5wcm9wZXJ0 eV9zdGF0ZSwKLQkJCWNzdGF0ZS0+cHJvcGVydHlfdmFsdWVzKTsKLQogCV9kcHVfY3J0Y19ycF9y ZXNldCgmY3N0YXRlLT5ycCwgJmRwdV9jcnRjLT5ycF9sb2NrLAogCQkJJmRwdV9jcnRjLT5ycF9o ZWFkKTsKIApAQCAtMjE0NiwyMTIgKzIxMzAsNiBAQCB2b2lkIGRwdV9jcnRjX2NhbmNlbF9wZW5k aW5nX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCiAJ X2RwdV9jcnRjX2NvbXBsZXRlX2ZsaXAoY3J0YywgZmlsZSk7CiB9CiAKLS8qKgotICogZHB1X2Ny dGNfaW5zdGFsbF9wcm9wZXJ0aWVzIC0gaW5zdGFsbCBhbGwgZHJtIHByb3BlcnRpZXMgZm9yIGNy dGMKLSAqIEBjcnRjOiBQb2ludGVyIHRvIGRybSBjcnRjIHN0cnVjdHVyZQotICovCi1zdGF0aWMg dm9pZCBkcHVfY3J0Y19pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0IGRybV9jcnRjICpjcnRjLAot CQkJCXN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2cpCi17Ci0Jc3RydWN0IGRwdV9jcnRjICpk cHVfY3J0YzsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwotCXN0cnVjdCBkcHVfa21zX2luZm8g KmluZm87Ci0Jc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7Ci0KLQlEUFVfREVCVUcoIlxuIik7Ci0K LQlpZiAoIWNydGMgfHwgIWNhdGFsb2cpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNydGMgb3Ig Y2F0YWxvZ1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNy dGMpOwotCWRldiA9IGNydGMtPmRldjsKLQlkcHVfa21zID0gX2RwdV9jcnRjX2dldF9rbXMoY3J0 Yyk7Ci0KLQlpZiAoIWRwdV9rbXMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4i KTsKLQkJcmV0dXJuOwotCX0KLQotCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHB1X2tt c19pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbmZvKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVk IHRvIGFsbG9jYXRlIGluZm8gbWVtb3J5XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCW1zbV9wcm9w ZXJ0eV9pbnN0YWxsX2Jsb2IoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLCAiY2FwYWJpbGl0aWVz IiwKLQkJRFJNX01PREVfUFJPUF9JTU1VVEFCTEUsIENSVENfUFJPUF9JTkZPKTsKLQotCWRwdV9r bXNfaW5mb19yZXNldChpbmZvKTsKLQotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJo d192ZXJzaW9uIiwgY2F0YWxvZy0+aHd2ZXJzaW9uKTsKLQlkcHVfa21zX2luZm9fYWRkX2tleWlu dChpbmZvLCAibWF4X2xpbmV3aWR0aCIsCi0JCQljYXRhbG9nLT5jYXBzLT5tYXhfbWl4ZXJfd2lk dGgpOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtYXhfYmxlbmRzdGFnZXMiLAot CQkJY2F0YWxvZy0+Y2Fwcy0+bWF4X21peGVyX2JsZW5kc3RhZ2VzKTsKLQlpZiAoY2F0YWxvZy0+ Y2Fwcy0+cXNlZWRfdHlwZSA9PSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQyKQotCQlkcHVfa21zX2lu Zm9fYWRkX2tleXN0cihpbmZvLCAicXNlZWRfdHlwZSIsICJxc2VlZDIiKTsKLQlpZiAoY2F0YWxv Zy0+Y2Fwcy0+cXNlZWRfdHlwZSA9PSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQzKQotCQlkcHVfa21z X2luZm9fYWRkX2tleXN0cihpbmZvLCAicXNlZWRfdHlwZSIsICJxc2VlZDMiKTsKLQotCWlmIChk cHVfaXNfY3VzdG9tX2NsaWVudCgpKSB7Ci0JCWlmIChjYXRhbG9nLT5jYXBzLT5zbWFydF9kbWFf cmV2ID09IERQVV9TU1BQX1NNQVJUX0RNQV9WMSkKLQkJCWRwdV9rbXNfaW5mb19hZGRfa2V5c3Ry KGluZm8sCi0JCQkJCSJzbWFydF9kbWFfcmV2IiwgInNtYXJ0X2RtYV92MSIpOwotCQlpZiAoY2F0 YWxvZy0+Y2Fwcy0+c21hcnRfZG1hX3JldiA9PSBEUFVfU1NQUF9TTUFSVF9ETUFfVjIpCi0JCQlk cHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLAotCQkJCQkic21hcnRfZG1hX3JldiIsICJzbWFy dF9kbWFfdjIiKTsKLQl9Ci0KLQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAiaGFzX3Ny Y19zcGxpdCIsCi0JCQkJY2F0YWxvZy0+Y2Fwcy0+aGFzX3NyY19zcGxpdCk7Ci0JaWYgKGNhdGFs b2ctPnBlcmYubWF4X2J3X2xvdykKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1h eF9iYW5kd2lkdGhfbG93IiwKLQkJCQljYXRhbG9nLT5wZXJmLm1heF9id19sb3cgKiAxMDAwTEwp OwotCWlmIChjYXRhbG9nLT5wZXJmLm1heF9id19oaWdoKQotCQlkcHVfa21zX2luZm9fYWRkX2tl eWludChpbmZvLCAibWF4X2JhbmR3aWR0aF9oaWdoIiwKLQkJCQljYXRhbG9nLT5wZXJmLm1heF9i d19oaWdoICogMTAwMExMKTsKLQlpZiAoY2F0YWxvZy0+cGVyZi5taW5fY29yZV9pYikKLQkJZHB1 X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1pbl9jb3JlX2liIiwKLQkJCQljYXRhbG9nLT5w ZXJmLm1pbl9jb3JlX2liICogMTAwMExMKTsKLQlpZiAoY2F0YWxvZy0+cGVyZi5taW5fbGxjY19p YikKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1pbl9sbGNjX2liIiwKLQkJCQlj YXRhbG9nLT5wZXJmLm1pbl9sbGNjX2liICogMTAwMExMKTsKLQlpZiAoY2F0YWxvZy0+cGVyZi5t aW5fZHJhbV9pYikKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1pbl9kcmFtX2li IiwKLQkJCQljYXRhbG9nLT5wZXJmLm1pbl9kcmFtX2liICogMTAwMExMKTsKLQlpZiAoZHB1X2tt cy0+cGVyZi5tYXhfY29yZV9jbGtfcmF0ZSkKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5m bywgIm1heF9tZHBfY2xrIiwKLQkJCQlkcHVfa21zLT5wZXJmLm1heF9jb3JlX2Nsa19yYXRlKTsK LQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAiY29yZV9pYl9mZiIsCi0JCQljYXRhbG9n LT5wZXJmLmNvcmVfaWJfZmYpOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5c3RyKGluZm8sICJjb3Jl X2Nsa19mZiIsCi0JCQljYXRhbG9nLT5wZXJmLmNvcmVfY2xrX2ZmKTsKLQlkcHVfa21zX2luZm9f YWRkX2tleXN0cihpbmZvLCAiY29tcF9yYXRpb19ydCIsCi0JCQljYXRhbG9nLT5wZXJmLmNvbXBf cmF0aW9fcnQpOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5c3RyKGluZm8sICJjb21wX3JhdGlvX25y dCIsCi0JCQljYXRhbG9nLT5wZXJmLmNvbXBfcmF0aW9fbnJ0KTsKLQlkcHVfa21zX2luZm9fYWRk X2tleWludChpbmZvLCAiZGVzdF9zY2FsZV9wcmVmaWxsX2xpbmVzIiwKLQkJCWNhdGFsb2ctPnBl cmYuZGVzdF9zY2FsZV9wcmVmaWxsX2xpbmVzKTsKLQlkcHVfa21zX2luZm9fYWRkX2tleWludChp bmZvLCAidW5kZXJzaXplZF9wcmVmaWxsX2xpbmVzIiwKLQkJCWNhdGFsb2ctPnBlcmYudW5kZXJz aXplZF9wcmVmaWxsX2xpbmVzKTsKLQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAibWFj cm90aWxlX3ByZWZpbGxfbGluZXMiLAotCQkJY2F0YWxvZy0+cGVyZi5tYWNyb3RpbGVfcHJlZmls bF9saW5lcyk7Ci0JZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgInl1dl9udjEyX3ByZWZp bGxfbGluZXMiLAotCQkJY2F0YWxvZy0+cGVyZi55dXZfbnYxMl9wcmVmaWxsX2xpbmVzKTsKLQlk cHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAibGluZWFyX3ByZWZpbGxfbGluZXMiLAotCQkJ Y2F0YWxvZy0+cGVyZi5saW5lYXJfcHJlZmlsbF9saW5lcyk7Ci0JZHB1X2ttc19pbmZvX2FkZF9r ZXlpbnQoaW5mbywgImRvd25zY2FsaW5nX3ByZWZpbGxfbGluZXMiLAotCQkJY2F0YWxvZy0+cGVy Zi5kb3duc2NhbGluZ19wcmVmaWxsX2xpbmVzKTsKLQlkcHVfa21zX2luZm9fYWRkX2tleWludChp bmZvLCAieHRyYV9wcmVmaWxsX2xpbmVzIiwKLQkJCWNhdGFsb2ctPnBlcmYueHRyYV9wcmVmaWxs X2xpbmVzKTsKLQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAiYW1vcnRpemFibGVfdGhy ZXNob2xkIiwKLQkJCWNhdGFsb2ctPnBlcmYuYW1vcnRpemFibGVfdGhyZXNob2xkKTsKLQlkcHVf a21zX2luZm9fYWRkX2tleWludChpbmZvLCAibWluX3ByZWZpbGxfbGluZXMiLAotCQkJY2F0YWxv Zy0+cGVyZi5taW5fcHJlZmlsbF9saW5lcyk7Ci0KLQltc21fcHJvcGVydHlfc2V0X2Jsb2IoJmRw dV9jcnRjLT5wcm9wZXJ0eV9pbmZvLCAmZHB1X2NydGMtPmJsb2JfaW5mbywKLQkJCWluZm8tPmRh dGEsIERQVV9LTVNfSU5GT19EQVRBTEVOKGluZm8pLCBDUlRDX1BST1BfSU5GTyk7Ci0KLQlrZnJl ZShpbmZvKTsKLX0KLQotLyoqCi0gKiBkcHVfY3J0Y19hdG9taWNfc2V0X3Byb3BlcnR5IC0gYXRv bWljYWxseSBzZXQgYSBjcnRjIGRybSBwcm9wZXJ0eQotICogQGNydGM6IFBvaW50ZXIgdG8gZHJt IGNydGMgc3RydWN0dXJlCi0gKiBAc3RhdGU6IFBvaW50ZXIgdG8gZHJtIGNydGMgc3RhdGUgc3Ry dWN0dXJlCi0gKiBAcHJvcGVydHk6IFBvaW50ZXIgdG8gdGFyZ2V0ZWQgZHJtIHByb3BlcnR5Ci0g KiBAdmFsOiBVcGRhdGVkIHByb3BlcnR5IHZhbHVlCi0gKiBAUmV0dXJuczogWmVybyBvbiBzdWNj ZXNzCi0gKi8KLXN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX3NldF9wcm9wZXJ0eShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCi0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCi0JCXN0cnVj dCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQl1aW50NjRfdCB2YWwpCi17Ci0Jc3RydWN0IGRw dV9jcnRjICpkcHVfY3J0YzsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZTsKLQlpbnQg cmV0ID0gLUVJTlZBTDsKLQotCWlmICghY3J0YyB8fCAhc3RhdGUgfHwgIXByb3BlcnR5KSB7Ci0J CURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChzKVxuIik7Ci0JfSBlbHNlIHsKLQkJZHB1X2Ny dGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKLQkJY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3Rh dGUpOwotCQlyZXQgPSBtc21fcHJvcGVydHlfYXRvbWljX3NldCgmZHB1X2NydGMtPnByb3BlcnR5 X2luZm8sCi0JCQkJJmNzdGF0ZS0+cHJvcGVydHlfc3RhdGUsIHByb3BlcnR5LCB2YWwpOwotCQlp ZiAocmV0KQotCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0IHRoZSBwcm9wZXJ0eVxuIik7Ci0K LQkJRFBVX0RFQlVHKCJjcnRjJWQgJXNbJWRdIDw9IDB4JWxseCByZXQ9JWRcbiIsIGNydGMtPmJh c2UuaWQsCi0JCQkJcHJvcGVydHktPm5hbWUsIHByb3BlcnR5LT5iYXNlLmlkLCB2YWwsIHJldCk7 Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBkcHVfY3J0Y19zZXRfcHJvcGVydHkg LSBzZXQgYSBjcnRjIGRybSBwcm9wZXJ0eQotICogQGNydGM6IFBvaW50ZXIgdG8gZHJtIGNydGMg c3RydWN0dXJlCi0gKiBAcHJvcGVydHk6IFBvaW50ZXIgdG8gdGFyZ2V0ZWQgZHJtIHByb3BlcnR5 Ci0gKiBAdmFsOiBVcGRhdGVkIHByb3BlcnR5IHZhbHVlCi0gKiBAUmV0dXJuczogWmVybyBvbiBz dWNjZXNzCi0gKi8KLXN0YXRpYyBpbnQgZHB1X2NydGNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKLQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksIHVpbnQ2NF90IHZh bCkKLXsKLQlEUFVfREVCVUcoIlxuIik7Ci0KLQlyZXR1cm4gZHB1X2NydGNfYXRvbWljX3NldF9w cm9wZXJ0eShjcnRjLCBjcnRjLT5zdGF0ZSwgcHJvcGVydHksIHZhbCk7Ci19Ci0KLS8qKgotICog ZHB1X2NydGNfYXRvbWljX2dldF9wcm9wZXJ0eSAtIHJldHJpZXZlIGEgY3J0YyBkcm0gcHJvcGVy dHkKLSAqIEBjcnRjOiBQb2ludGVyIHRvIGRybSBjcnRjIHN0cnVjdHVyZQotICogQHN0YXRlOiBQ b2ludGVyIHRvIGRybSBjcnRjIHN0YXRlIHN0cnVjdHVyZQotICogQHByb3BlcnR5OiBQb2ludGVy IHRvIHRhcmdldGVkIGRybSBwcm9wZXJ0eQotICogQHZhbDogUG9pbnRlciB0byB2YXJpYWJsZSBm b3IgcmVjZWl2aW5nIHByb3BlcnR5IHZhbHVlCi0gKiBAUmV0dXJuczogWmVybyBvbiBzdWNjZXNz Ci0gKi8KLXN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCi0JCWNvbnN0IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCi0JCXN0 cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQl1aW50NjRfdCAqdmFsKQotewotCXN0cnVj dCBkcHVfY3J0YyAqZHB1X2NydGM7Ci0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGU7Ci0J c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwotCWludCBpLCByZXQgPSAtRUlOVkFMOwotCWJv b2wgaXNfY21kID0gdHJ1ZTsKLQotCWlmICghY3J0YyB8fCAhc3RhdGUpIHsKLQkJRFBVX0VSUk9S KCJpbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKLQl9IGVsc2UgewotCQlkcHVfY3J0YyA9IHRvX2Rw dV9jcnRjKGNydGMpOwotCQljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0ZSk7Ci0KLQkJ LyoqCi0JCSAqIHNldCB0aGUgY21kIGZsYWcgb25seSB3aGVuIGFsbCB0aGUgZW5jb2RlcnMgYXR0 YWNoZWQKLQkJICogdG8gdGhlIGNydGMgYXJlIGluIGNtZCBtb2RlLiBDb25zaWRlciBhbGwgb3Ro ZXIgY2FzZXMKLQkJICogYXMgdmlkZW8gbW9kZS4KLQkJICovCi0JCWRybV9mb3JfZWFjaF9lbmNv ZGVyKGVuY29kZXIsIGNydGMtPmRldikgewotCQkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykK LQkJCQlpc19jbWQgPSBkcHVfZW5jb2Rlcl9jaGVja19tb2RlKGVuY29kZXIsCi0JCQkJCQlNU01f RElTUExBWV9DQVBfQ01EX01PREUpOwotCQl9Ci0KLQkJaSA9IG1zbV9wcm9wZXJ0eV9pbmRleCgm ZHB1X2NydGMtPnByb3BlcnR5X2luZm8sIHByb3BlcnR5KTsKLQkJcmV0ID0gbXNtX3Byb3BlcnR5 X2F0b21pY19nZXQoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAotCQkJCSZjc3RhdGUtPnByb3Bl cnR5X3N0YXRlLAotCQkJCXByb3BlcnR5LCB2YWwpOwotCQlpZiAocmV0KQotCQkJRFJNX0VSUk9S KCJnZXQgcHJvcGVydHkgZmFpbGVkXG4iKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQogI2lmZGVm IENPTkZJR19ERUJVR19GUwogc3RhdGljIGludCBfZHB1X2RlYnVnZnNfc3RhdHVzX3Nob3coc3Ry dWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQogewpAQCAtMjcxMSw5ICsyNDg5LDYgQEAgc3Rh dGljIHZvaWQgZHB1X2NydGNfZWFybHlfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2NydGMgKmNydGMp CiAJLnNldF9jb25maWcgPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLAogCS5kZXN0cm95 ID0gZHB1X2NydGNfZGVzdHJveSwKIAkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFn ZV9mbGlwLAotCS5zZXRfcHJvcGVydHkgPSBkcHVfY3J0Y19zZXRfcHJvcGVydHksCi0JLmF0b21p Y19zZXRfcHJvcGVydHkgPSBkcHVfY3J0Y19hdG9taWNfc2V0X3Byb3BlcnR5LAotCS5hdG9taWNf Z2V0X3Byb3BlcnR5ID0gZHB1X2NydGNfYXRvbWljX2dldF9wcm9wZXJ0eSwKIAkucmVzZXQgPSBk cHVfY3J0Y19yZXNldCwKIAkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRwdV9jcnRjX2R1cGxp Y2F0ZV9zdGF0ZSwKIAkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcHVfY3J0Y19kZXN0cm95X3N0 YXRlLApAQCAtMjg3NiwxNCArMjY1MSw2IEBAIHN0cnVjdCBkcm1fY3J0YyAqZHB1X2NydGNfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKIAkJcmV0 dXJuIEVSUl9QVFIocmMpOwogCX0KIAotCS8qIGNyZWF0ZSBDUlRDIHByb3BlcnRpZXMgKi8KLQlt c21fcHJvcGVydHlfaW5pdCgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sICZjcnRjLT5iYXNlLCBk ZXYsCi0JCQlwcml2LT5jcnRjX3Byb3BlcnR5LCBkcHVfY3J0Yy0+cHJvcGVydHlfZGF0YSwKLQkJ CUNSVENfUFJPUF9DT1VOVCwgQ1JUQ19QUk9QX0JMT0JDT1VOVCwKLQkJCXNpemVvZihzdHJ1Y3Qg ZHB1X2NydGNfc3RhdGUpKTsKLQotCWRwdV9jcnRjX2luc3RhbGxfcHJvcGVydGllcyhjcnRjLCBr bXMtPmNhdGFsb2cpOwotCiAJZHB1X2NydGMtPnBoYW5kbGUgPSAma21zLT5waGFuZGxlOwogCiAJ RFBVX0RFQlVHKCIlczogc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIGNydGNcbiIsIGRwdV9jcnRj LT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9j cnRjLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCmluZGV4IGYx MDBlMDcuLmNjMjNiMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9jcnRjLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMu aApAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRl IDx1YXBpL2RybS9kcHVfZHJtLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Ci0jaW5jbHVk ZSAibXNtX3Byb3AuaCIKICNpbmNsdWRlICJkcHVfa21zLmgiCiAjaW5jbHVkZSAiZHB1X2NvcmVf cGVyZi5oIgogI2luY2x1ZGUgImRwdV9od19ibGsuaCIKQEAgLTIwMSwxMCArMjAwLDYgQEAgc3Ry dWN0IGRwdV9jcnRjIHsKIAlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudDsK IAl1MzIgdnN5bmNfY291bnQ7CiAKLQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gcHJvcGVydHlf aW5mbzsKLQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X2RhdGEgcHJvcGVydHlfZGF0YVtDUlRDX1BST1Bf Q09VTlRdOwotCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYl9pbmZvOwotCiAJc3RydWN0 IGRwdV9od19zdGFnZV9jZmcgc3RhZ2VfY2ZnOwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9v dDsKIApAQCAtMzI2LDggKzMyMSw2IEBAIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSB7CiAJYm9vbCBp c19wcHNwbGl0OwogCXN0cnVjdCBkcHVfcmVjdCBsbV9ib3VuZHNbQ1JUQ19EVUFMX01JWEVSU107 CiAKLQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlIHByb3BlcnR5X3N0YXRlOwotCXN0cnVjdCBt c21fcHJvcGVydHlfdmFsdWUgcHJvcGVydHlfdmFsdWVzW0NSVENfUFJPUF9DT1VOVF07CiAJdWlu dDY0X3QgaW5wdXRfZmVuY2VfdGltZW91dF9uczsKIAogCXN0cnVjdCBkcHVfY29yZV9wZXJmX3Bh cmFtcyBuZXdfcGVyZjsKQEAgLTMzOCwxNSArMzMxLDYgQEAgc3RydWN0IGRwdV9jcnRjX3N0YXRl IHsKIAljb250YWluZXJfb2YoeCwgc3RydWN0IGRwdV9jcnRjX3N0YXRlLCBiYXNlKQogCiAvKioK LSAqIGRwdV9jcnRjX2dldF9wcm9wZXJ0eSAtIHF1ZXJ5IGludGVnZXIgdmFsdWUgb2YgY3J0YyBw cm9wZXJ0eQotICogQFM6IFBvaW50ZXIgdG8gY3J0YyBzdGF0ZQotICogQFg6IFByb3BlcnR5IGlu ZGV4LCBmcm9tIGVudW0gbXNtX21kcF9jcnRjX3Byb3BlcnR5Ci0gKiBSZXR1cm5zOiBJbnRlZ2Vy IHZhbHVlIG9mIHJlcXVlc3RlZCBwcm9wZXJ0eQotICovCi0jZGVmaW5lIGRwdV9jcnRjX2dldF9w cm9wZXJ0eShTLCBYKSBcCi0JKChTKSAmJiAoKFgpIDwgQ1JUQ19QUk9QX0NPVU5UKSA/ICgoUykt PnByb3BlcnR5X3ZhbHVlc1soWCldLnZhbHVlKSA6IDApCi0KLS8qKgogICogZHB1X2NydGNfZ2V0 X21peGVyX3dpZHRoIC0gZ2V0IHRoZSBtaXhlciB3aWR0aAogICogTWl4ZXIgd2lkdGggd2lsbCBi ZSBzYW1lIGFzIHBhbmVsIHdpZHRoKC8yIGZvciBzcGxpdCkKICAqLwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmgKaW5kZXggM2RiZmQ4Yi4uY2U5MjkwMSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oCkBAIC0yMCw4ICsy MCw2IEBACiAjZGVmaW5lIF9fRFBVX0VOQ09ERVJfSF9fCiAKICNpbmNsdWRlIDxkcm0vZHJtX2Ny dGMuaD4KLQotI2luY2x1ZGUgIm1zbV9wcm9wLmgiCiAjaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIK IAogI2RlZmluZSBEUFVfRU5DT0RFUl9GUkFNRV9FVkVOVF9ET05FCQkJQklUKDApCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jCmluZGV4IGM2YmUxNTguLjYwOTBhY2Ug MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jCkBAIC0yMCw5ICsy MCw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZG1h LWJ1Zi5oPgotI2luY2x1ZGUgIm1zbV9wcm9wLmgiCi0jaW5jbHVkZSAibXNtX2Rydi5oIgogCisj aW5jbHVkZSAibXNtX2Rydi5oIgogI2luY2x1ZGUgImRwdV9rbXMuaCIKICNpbmNsdWRlICJkcHVf Zm9ybWF0cy5oIgogI2luY2x1ZGUgImRwdV9od19zc3BwLmgiCkBAIC0xMTksOSArMTE4LDYgQEAg c3RydWN0IGRwdV9wbGFuZSB7CiAKIAljb25zdCBzdHJ1Y3QgZHB1X3NzcHBfc3ViX2Jsa3MgKnBp cGVfc2JsazsKIAljaGFyIHBpcGVfbmFtZVtEUFVfTkFNRV9TSVpFXTsKLQlzdHJ1Y3QgbXNtX3By b3BlcnR5X2luZm8gcHJvcGVydHlfaW5mbzsKLQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X2RhdGEgcHJv cGVydHlfZGF0YVtQTEFORV9QUk9QX0NPVU5UXTsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2Ig KmJsb2JfaW5mbzsKIAogCS8qIGRlYnVnZnMgcmVsYXRlZCBzdHVmZiAqLwogCXN0cnVjdCBkZW50 cnkgKmRlYnVnZnNfcm9vdDsKQEAgLTEzOTksNyArMTM5NSw2IEBAIHN0YXRpYyBpbnQgZHB1X3Bs YW5lX3NzcHBfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAl9CiAKIAlf ZHB1X3BsYW5lX3NldF9xb3NfcmVtYXAocGxhbmUpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0 ODQsODkgKzE0NzksNiBAQCB2b2lkIGRwdV9wbGFuZV9yZXN0b3JlKHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lKQogCWRwdV9wbGFuZV9hdG9taWNfdXBkYXRlKHBsYW5lLCBwbGFuZS0+c3RhdGUpOwog fQogCi0vKiBoZWxwZXIgdG8gaW5zdGFsbCBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBjb21tb24gdG8g cGxhbmVzIGFuZCBjcnRjcyAqLwotc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9pbnN0YWxsX3Byb3Bl cnRpZXMoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0Jc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0 YWxvZywgdTMyIG1hc3Rlcl9wbGFuZV9pZCkKLXsKLQlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1ID0g dG9fZHB1X3BsYW5lKHBsYW5lKTsKLQlpbnQgenBvc19tYXggPSAyNTU7Ci0JaW50IHpwb3NfZGVm ID0gMDsKLQotCWlmICghcGxhbmUgfHwgIXBkcHUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBs YW5lXG4iKTsKLQkJcmV0dXJuOwotCX0gZWxzZSBpZiAoIXBkcHUtPnBpcGVfaHcgfHwgIXBkcHUt PnBpcGVfc2JsaykgewotCQlEUFVfRVJST1IoImludmFsaWQgcGxhbmUsIHBpcGVfaHcgJWQgcGlw ZV9zYmxrICVkXG4iLAotCQkJCXBkcHUtPnBpcGVfaHcgIT0gMCwgcGRwdS0+cGlwZV9zYmxrICE9 IDApOwotCQlyZXR1cm47Ci0JfSBlbHNlIGlmICghY2F0YWxvZykgewotCQlEUFVfRVJST1IoImlu dmFsaWQgY2F0YWxvZ1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwZHB1LT5jYXRhbG9nID0gY2F0 YWxvZzsKLQotCWlmIChkcHVfaXNfY3VzdG9tX2NsaWVudCgpKSB7Ci0JCWlmIChjYXRhbG9nLT5t aXhlcl9jb3VudCAmJgotCQkJCWNhdGFsb2ctPm1peGVyWzBdLnNibGstPm1heGJsZW5kc3RhZ2Vz KSB7Ci0JCQl6cG9zX21heCA9IGNhdGFsb2ctPm1peGVyWzBdLnNibGstPm1heGJsZW5kc3RhZ2Vz IC0gMTsKLQkJCWlmICh6cG9zX21heCA+IERQVV9TVEFHRV9NQVggLSBEUFVfU1RBR0VfMCAtIDEp Ci0JCQkJenBvc19tYXggPSBEUFVfU1RBR0VfTUFYIC0gRFBVX1NUQUdFXzAgLSAxOwotCQl9Ci0J fSBlbHNlIGlmIChwbGFuZS0+dHlwZSAhPSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKSB7Ci0JCS8q IHJlc2VydmUgenBvcyA9PSAwIGZvciBwcmltYXJ5IHBsYW5lcyAqLwotCQl6cG9zX2RlZiA9IGRy bV9wbGFuZV9pbmRleChwbGFuZSkgKyAxOwotCX0KLX0KLQotc3RhdGljIGludCBkcHVfcGxhbmVf YXRvbWljX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKLQkJc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQl1 aW50NjRfdCB2YWwpCi17Ci0Jc3RydWN0IGRwdV9wbGFuZSAqcGRwdSA9IHBsYW5lID8gdG9fZHB1 X3BsYW5lKHBsYW5lKSA6IE5VTEw7Ci0Jc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwot CWludCByZXQgPSAtRUlOVkFMOwotCi0JRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJcbiIpOwotCi0J aWYgKCFwbGFuZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgcGxhbmVcbiIpOwotCX0gZWxzZSBp ZiAoIXN0YXRlKSB7Ci0JCURQVV9FUlJPUl9QTEFORShwZHB1LCAiaW52YWxpZCBzdGF0ZVxuIik7 Ci0JfSBlbHNlIHsKLQkJcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKHN0YXRlKTsKLQkJcmV0 ID0gbXNtX3Byb3BlcnR5X2F0b21pY19zZXQoJnBkcHUtPnByb3BlcnR5X2luZm8sCi0JCQkJJnBz dGF0ZS0+cHJvcGVydHlfc3RhdGUsIHByb3BlcnR5LCB2YWwpOwotCX0KLQotCURQVV9ERUJVR19Q TEFORShwZHB1LCAiJXNbJWRdIDw9IDB4JWxseCByZXQ9JWRcbiIsCi0JCQlwcm9wZXJ0eS0+bmFt ZSwgcHJvcGVydHktPmJhc2UuaWQsIHZhbCwgcmV0KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0 YXRpYyBpbnQgZHB1X3BsYW5lX2F0b21pY19nZXRfcHJvcGVydHkoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCi0JCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLAotCQlzdHJ1Y3Qg ZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgKnZhbCkKLXsKLQlzdHJ1Y3QgZHB1X3Bs YW5lICpwZHB1ID0gcGxhbmUgPyB0b19kcHVfcGxhbmUocGxhbmUpIDogTlVMTDsKLQlzdHJ1Y3Qg ZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlpZiAoIXBs YW5lKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwbGFuZVxuIik7Ci0JfSBlbHNlIGlmICghc3Rh dGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHN0YXRlXG4iKTsKLQl9IGVsc2UgewotCQlEUFVf REVCVUdfUExBTkUocGRwdSwgIlxuIik7Ci0JCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShz dGF0ZSk7Ci0JCXJldCA9IG1zbV9wcm9wZXJ0eV9hdG9taWNfZ2V0KCZwZHB1LT5wcm9wZXJ0eV9p bmZvLAotCQkJCSZwc3RhdGUtPnByb3BlcnR5X3N0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKLQl9Ci0K LQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfZGVzdHJveShzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSkKIHsKIAlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1ID0gcGxhbmUgPyB0 b19kcHVfcGxhbmUocGxhbmUpIDogTlVMTDsKQEAgLTE1NzYsOSArMTQ4OCw2IEBAIHN0YXRpYyB2 b2lkIGRwdV9wbGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogCWlmIChwZHB1 KSB7CiAJCV9kcHVfcGxhbmVfc2V0X3Fvc19jdHJsKHBsYW5lLCBmYWxzZSwgRFBVX1BMQU5FX1FP U19QQU5JQ19DVFJMKTsKIAotCQlpZiAocGRwdS0+YmxvYl9pbmZvKQotCQkJZHJtX3Byb3BlcnR5 X2Jsb2JfcHV0KHBkcHUtPmJsb2JfaW5mbyk7Ci0JCW1zbV9wcm9wZXJ0eV9kZXN0cm95KCZwZHB1 LT5wcm9wZXJ0eV9pbmZvKTsKIAkJbXV0ZXhfZGVzdHJveSgmcGRwdS0+bG9jayk7CiAKIAkJZHJt X3BsYW5lX2hlbHBlcl9kaXNhYmxlKHBsYW5lKTsKQEAgLTE1OTYsNyArMTUwNSw2IEBAIHN0YXRp YyB2b2lkIGRwdV9wbGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogc3RhdGlj IHZvaWQgZHB1X3BsYW5lX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJ CXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQogewotCXN0cnVjdCBkcHVfcGxhbmUgKnBk cHU7CiAJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwogCiAJaWYgKCFwbGFuZSB8fCAh c3RhdGUpIHsKQEAgLTE2MDUsMTggKzE1MTMsMTMgQEAgc3RhdGljIHZvaWQgZHB1X3BsYW5lX2Rl c3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCXJldHVybjsKIAl9CiAKLQlw ZHB1ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsKIAlwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUo c3RhdGUpOwogCi0JRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJcbiIpOwotCiAJLyogcmVtb3ZlIHJl ZiBjb3VudCBmb3IgZnJhbWUgYnVmZmVycyAqLwogCWlmIChzdGF0ZS0+ZmIpCiAJCWRybV9mcmFt ZWJ1ZmZlcl9wdXQoc3RhdGUtPmZiKTsKIAotCS8qIGRlc3Ryb3kgdmFsdWUgaGVscGVyICovCi0J bXNtX3Byb3BlcnR5X2Rlc3Ryb3lfc3RhdGUoJnBkcHUtPnByb3BlcnR5X2luZm8sIHBzdGF0ZSwK LQkJCSZwc3RhdGUtPnByb3BlcnR5X3N0YXRlKTsKKwlrZnJlZShwc3RhdGUpOwogfQogCiBzdGF0 aWMgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqCkBAIC0xNjM2LDcgKzE1MzksNyBAQCBzdGF0aWMg dm9pZCBkcHVfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAog CW9sZF9zdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOwogCXBkcHUgPSB0 b19kcHVfcGxhbmUocGxhbmUpOwotCXBzdGF0ZSA9IG1zbV9wcm9wZXJ0eV9hbGxvY19zdGF0ZSgm cGRwdS0+cHJvcGVydHlfaW5mbyk7CisJcHN0YXRlID0ga21lbWR1cChvbGRfc3RhdGUsIHNpemVv Zigqb2xkX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwc3RhdGUpIHsKIAkJRFBVX0VSUk9S X1BMQU5FKHBkcHUsICJmYWlsZWQgdG8gYWxsb2NhdGUgc3RhdGVcbiIpOwogCQlyZXR1cm4gTlVM TDsKQEAgLTE2NDQsMTAgKzE1NDcsNiBAQCBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfZGVzdHJveV9z dGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAogCURQVV9ERUJVR19QTEFORShwZHB1LCAi XG4iKTsKIAotCS8qIGR1cGxpY2F0ZSB2YWx1ZSBoZWxwZXIgKi8KLQltc21fcHJvcGVydHlfZHVw bGljYXRlX3N0YXRlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCBvbGRfc3RhdGUsIHBzdGF0ZSwKLQkJ CSZwc3RhdGUtPnByb3BlcnR5X3N0YXRlLCBwc3RhdGUtPnByb3BlcnR5X3ZhbHVlcyk7Ci0KIAlw c3RhdGUtPnBlbmRpbmcgPSBmYWxzZTsKIAogCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVw bGljYXRlX3N0YXRlKHBsYW5lLCAmcHN0YXRlLT5iYXNlKTsKQEAgLTE2NzQsMTcgKzE1NzMsMTIg QEAgc3RhdGljIHZvaWQgZHB1X3BsYW5lX3Jlc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQog CQlwbGFuZS0+c3RhdGUgPSAwOwogCX0KIAotCXBzdGF0ZSA9IG1zbV9wcm9wZXJ0eV9hbGxvY19z dGF0ZSgmcGRwdS0+cHJvcGVydHlfaW5mbyk7CisJcHN0YXRlID0ga3phbGxvYyhzaXplb2YoKnBz dGF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghcHN0YXRlKSB7CiAJCURQVV9FUlJPUl9QTEFORShw ZHB1LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHN0YXRlXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCS8q IHJlc2V0IHZhbHVlIGhlbHBlciAqLwotCW1zbV9wcm9wZXJ0eV9yZXNldF9zdGF0ZSgmcGRwdS0+ cHJvcGVydHlfaW5mbywgcHN0YXRlLAotCQkJJnBzdGF0ZS0+cHJvcGVydHlfc3RhdGUsCi0JCQlw c3RhdGUtPnByb3BlcnR5X3ZhbHVlcyk7Ci0KIAlwc3RhdGUtPmJhc2UucGxhbmUgPSBwbGFuZTsK IAogCXBsYW5lLT5zdGF0ZSA9ICZwc3RhdGUtPmJhc2U7CkBAIC0xOTE3LDggKzE4MTEsNiBAQCBz dGF0aWMgdm9pZCBkcHVfcGxhbmVfZWFybHlfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSkKIAkJLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwK IAkJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAogCQku ZGVzdHJveSA9IGRwdV9wbGFuZV9kZXN0cm95LAotCQkuYXRvbWljX3NldF9wcm9wZXJ0eSA9IGRw dV9wbGFuZV9hdG9taWNfc2V0X3Byb3BlcnR5LAotCQkuYXRvbWljX2dldF9wcm9wZXJ0eSA9IGRw dV9wbGFuZV9hdG9taWNfZ2V0X3Byb3BlcnR5LAogCQkucmVzZXQgPSBkcHVfcGxhbmVfcmVzZXQs CiAJCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHB1X3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwK IAkJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHB1X3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCkBAIC0y MDYyLDEzICsxOTU0LDYgQEAgc3RydWN0IGRybV9wbGFuZSAqZHB1X3BsYW5lX2luaXQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKIAkvKiBzdWNjZXNzISBmaW5hbGl6ZSBpbml0aWFsaXphdGlvbiAq LwogCWRybV9wbGFuZV9oZWxwZXJfYWRkKHBsYW5lLCAmZHB1X3BsYW5lX2hlbHBlcl9mdW5jcyk7 CiAKLQltc21fcHJvcGVydHlfaW5pdCgmcGRwdS0+cHJvcGVydHlfaW5mbywgJnBsYW5lLT5iYXNl LCBkZXYsCi0JCQlwcml2LT5wbGFuZV9wcm9wZXJ0eSwgcGRwdS0+cHJvcGVydHlfZGF0YSwKLQkJ CVBMQU5FX1BST1BfQ09VTlQsIFBMQU5FX1BST1BfQkxPQkNPVU5ULAotCQkJc2l6ZW9mKHN0cnVj dCBkcHVfcGxhbmVfc3RhdGUpKTsKLQotCV9kcHVfcGxhbmVfaW5zdGFsbF9wcm9wZXJ0aWVzKHBs YW5lLCBrbXMtPmNhdGFsb2csIG1hc3Rlcl9wbGFuZV9pZCk7Ci0KIAkvKiBzYXZlIHVzZXIgZnJp ZW5kbHkgcGlwZSBuYW1lIGZvciBsYXRlciAqLwogCXNucHJpbnRmKHBkcHUtPnBpcGVfbmFtZSwg RFBVX05BTUVfU0laRSwgInBsYW5lJXUiLCBwbGFuZS0+YmFzZS5pZCk7CiAKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5oIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmgKaW5kZXggYTA2YzhiNC4uZjZmZTZkZCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmgKQEAgLTIxLDcgKzIxLDYg QEAKIAogI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgogCi0jaW5jbHVkZSAibXNtX3Byb3AuaCIK ICNpbmNsdWRlICJkcHVfa21zLmgiCiAjaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKICNpbmNsdWRl ICJkcHVfaHdfc3NwcC5oIgpAQCAtNDQsOCArNDMsNiBAQAogICovCiBzdHJ1Y3QgZHB1X3BsYW5l X3N0YXRlIHsKIAlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIGJhc2U7Ci0Jc3RydWN0IG1zbV9wcm9w ZXJ0eV9zdGF0ZSBwcm9wZXJ0eV9zdGF0ZTsKLQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3ZhbHVlIHBy b3BlcnR5X3ZhbHVlc1tQTEFORV9QUk9QX0NPVU5UXTsKIAlzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNz X3NwYWNlICphc3BhY2U7CiAJdm9pZCAqaW5wdXRfZmVuY2U7CiAJZW51bSBkcHVfc3RhZ2Ugc3Rh Z2U7CkBAIC03NCwxNSArNzEsNiBAQCBzdHJ1Y3QgZHB1X211bHRpcmVjdF9wbGFuZV9zdGF0ZXMg ewogCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlLCBiYXNlKQogCiAvKioK LSAqIGRwdV9wbGFuZV9nZXRfcHJvcGVydHkgLSBRdWVyeSBpbnRlZ2VyIHZhbHVlIG9mIHBsYW5l IHByb3BlcnR5Ci0gKiBAUzogUG9pbnRlciB0byBwbGFuZSBzdGF0ZQotICogQFg6IFByb3BlcnR5 IGluZGV4LCBmcm9tIGVudW0gbXNtX21kcF9wbGFuZV9wcm9wZXJ0eQotICogUmV0dXJuczogSW50 ZWdlciB2YWx1ZSBvZiByZXF1ZXN0ZWQgcHJvcGVydHkKLSAqLwotI2RlZmluZSBkcHVfcGxhbmVf Z2V0X3Byb3BlcnR5KFMsIFgpICgoUykgJiYgKChYKSA8IFBMQU5FX1BST1BfQ09VTlQpID8gXAot CSgoUyktPnByb3BlcnR5X3ZhbHVlc1soWCldLnZhbHVlKSA6IDApCi0KLS8qKgogICogZHB1X3Bs YW5lX3BpcGUgLSByZXR1cm4gc3NwcCBpZGVudGlmaWVyIGZvciB0aGUgZ2l2ZW4gcGxhbmUKICAq IEBwbGFuZTogICBQb2ludGVyIHRvIERSTSBwbGFuZSBvYmplY3QKICAqIFJldHVybnM6IHNzcHAg aWRlbnRpZmllciBvZiB0aGUgZ2l2ZW4gcGxhbmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vbXNtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKaW5kZXggOTA0 NDk5YS4uMWFmZmM3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKQEAgLTc0LDI2ICs3NCwxMyBAQCBz dHJ1Y3QgbXNtX2ZpbGVfcHJpdmF0ZSB7CiB9OwogCiBlbnVtIG1zbV9tZHBfcGxhbmVfcHJvcGVy dHkgewotCS8qICMgb2YgYmxvYiBwcm9wZXJ0aWVzICovCi0JUExBTkVfUFJPUF9CTE9CQ09VTlQs Ci0KIAkvKiByYW5nZSBwcm9wZXJ0aWVzICovCi0JUExBTkVfUFJPUF9aUE9TID0gUExBTkVfUFJP UF9CTE9CQ09VTlQsCisJUExBTkVfUFJPUF9aUE9TLAogCiAJLyogdG90YWwgIyBvZiBwcm9wZXJ0 aWVzICovCiAJUExBTkVfUFJPUF9DT1VOVAogfTsKIAotZW51bSBtc21fbWRwX2NydGNfcHJvcGVy dHkgewotCUNSVENfUFJPUF9JTkZPLAotCi0JLyogIyBvZiBibG9iIHByb3BlcnRpZXMgKi8KLQlD UlRDX1BST1BfQkxPQkNPVU5ULAotCi0JLyogdG90YWwgIyBvZiBwcm9wZXJ0aWVzICovCi0JQ1JU Q19QUk9QX0NPVU5UCi19OwotCiBzdHJ1Y3QgbXNtX3ZibGFua19jdHJsIHsKIAlzdHJ1Y3Qga3Ro cmVhZF93b3JrIHdvcms7CiAJc3RydWN0IGxpc3RfaGVhZCBldmVudF9saXN0OwpAQCAtMzU4LDcg KzM0NSw2IEBAIHN0cnVjdCBtc21fZHJtX3ByaXZhdGUgewogCiAJLyogUHJvcGVydGllcyAqLwog CXN0cnVjdCBkcm1fcHJvcGVydHkgKnBsYW5lX3Byb3BlcnR5W1BMQU5FX1BST1BfQ09VTlRdOwot CXN0cnVjdCBkcm1fcHJvcGVydHkgKmNydGNfcHJvcGVydHlbQ1JUQ19QUk9QX0NPVU5UXTsKIAog CS8qIENvbG9yIHByb2Nlc3NpbmcgcHJvcGVydGllcyBmb3IgdGhlIGNydGMgKi8KIAlzdHJ1Y3Qg ZHJtX3Byb3BlcnR5ICoqY3BfcHJvcGVydHk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL21zbV9wcm9wLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9wcm9wLmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMjdjZGUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9tc21fcHJvcC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjg4ICswLDAgQEAKLS8qIENv cHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNp b24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0g KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlICJtc21fcHJvcC5oIgotCi12b2lk IG1zbV9wcm9wZXJ0eV9pbml0KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3Ry dWN0IGRybV9tb2RlX29iamVjdCAqYmFzZSwKLQkJc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJ c3RydWN0IGRybV9wcm9wZXJ0eSAqKnByb3BlcnR5X2FycmF5LAotCQlzdHJ1Y3QgbXNtX3Byb3Bl cnR5X2RhdGEgKnByb3BlcnR5X2RhdGEsCi0JCXVpbnQzMl90IHByb3BlcnR5X2NvdW50LAotCQl1 aW50MzJfdCBibG9iX2NvdW50LAotCQl1aW50MzJfdCBzdGF0ZV9zaXplKQotewotCS8qIHByZXZl bnQgYWNjZXNzIGlmIGFueSBvZiB0aGVzZSBhcmUgTlVMTCAqLwotCWlmICghYmFzZSB8fCAhZGV2 IHx8ICFwcm9wZXJ0eV9hcnJheSB8fCAhcHJvcGVydHlfZGF0YSkgewotCQlwcm9wZXJ0eV9jb3Vu dCA9IDA7Ci0JCWJsb2JfY291bnQgPSAwOwotCi0JCURSTV9FUlJPUigiaW52YWxpZCBhcmd1bWVu dHMsIGZvcmNpbmcgemVybyBwcm9wZXJ0aWVzXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGNh bid0IGhhdmUgbW9yZSBibG9iIHByb3BlcnRpZXMgdGhhbiB0b3RhbCBwcm9wZXJ0aWVzICovCi0J aWYgKGJsb2JfY291bnQgPiBwcm9wZXJ0eV9jb3VudCkgewotCQlibG9iX2NvdW50ID0gcHJvcGVy dHlfY291bnQ7Ci0KLQkJREJHKCJDYXBwaW5nIG51bWJlciBvZiBibG9iIHByb3BlcnRpZXMgdG8g JWQiLCBibG9iX2NvdW50KTsKLQl9Ci0KLQlpZiAoIWluZm8pIHsKLQkJRFJNX0VSUk9SKCJpbmZv IHBvaW50ZXIgaXMgTlVMTFxuIik7Ci0JfSBlbHNlIHsKLQkJaW5mby0+YmFzZSA9IGJhc2U7Ci0J CWluZm8tPmRldiA9IGRldjsKLQkJaW5mby0+cHJvcGVydHlfYXJyYXkgPSBwcm9wZXJ0eV9hcnJh eTsKLQkJaW5mby0+cHJvcGVydHlfZGF0YSA9IHByb3BlcnR5X2RhdGE7Ci0JCWluZm8tPnByb3Bl cnR5X2NvdW50ID0gcHJvcGVydHlfY291bnQ7Ci0JCWluZm8tPmJsb2JfY291bnQgPSBibG9iX2Nv dW50OwotCQlpbmZvLT5pbnN0YWxsX3JlcXVlc3QgPSAwOwotCQlpbmZvLT5pbnN0YWxsX2NvdW50 ID0gMDsKLQkJaW5mby0+cmVjZW50X2lkeCA9IDA7Ci0JCWluZm8tPmlzX2FjdGl2ZSA9IGZhbHNl OwotCQlpbmZvLT5zdGF0ZV9zaXplID0gc3RhdGVfc2l6ZTsKLQkJaW5mby0+c3RhdGVfY2FjaGVf c2l6ZSA9IDA7Ci0JCW11dGV4X2luaXQoJmluZm8tPnByb3BlcnR5X2xvY2spOwotCi0JCW1lbXNl dChwcm9wZXJ0eV9kYXRhLAotCQkJCTAsCi0JCQkJc2l6ZW9mKHN0cnVjdCBtc21fcHJvcGVydHlf ZGF0YSkgKgotCQkJCXByb3BlcnR5X2NvdW50KTsKLQl9Ci19Ci0KLXZvaWQgbXNtX3Byb3BlcnR5 X2Rlc3Ryb3koc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvKQotewotCWlmICghaW5mbykK LQkJcmV0dXJuOwotCi0JLyogZnJlZSBzdGF0ZSBjYWNoZSAqLwotCXdoaWxlIChpbmZvLT5zdGF0 ZV9jYWNoZV9zaXplID4gMCkKLQkJa2ZyZWUoaW5mby0+c3RhdGVfY2FjaGVbLS0oaW5mby0+c3Rh dGVfY2FjaGVfc2l6ZSldKTsKLQotCW11dGV4X2Rlc3Ryb3koJmluZm8tPnByb3BlcnR5X2xvY2sp OwotfQotCi1pbnQgbXNtX3Byb3BlcnR5X3BvcF9kaXJ0eShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2lu Zm8gKmluZm8sCi0JCXN0cnVjdCBtc21fcHJvcGVydHlfc3RhdGUgKnByb3BlcnR5X3N0YXRlKQot ewotCXN0cnVjdCBsaXN0X2hlYWQgKml0ZW07Ci0JaW50IHJjID0gMDsKLQotCWlmICghaW5mbyB8 fCAhcHJvcGVydHlfc3RhdGUgfHwgIXByb3BlcnR5X3N0YXRlLT52YWx1ZXMpIHsKLQkJRFJNX0VS Uk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J bXV0ZXhfbG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Ci0JaWYgKGxpc3RfZW1wdHkoJnByb3Bl cnR5X3N0YXRlLT5kaXJ0eV9saXN0KSkgewotCQlyYyA9IC1FQUdBSU47Ci0JfSBlbHNlIHsKLQkJ aXRlbSA9IHByb3BlcnR5X3N0YXRlLT5kaXJ0eV9saXN0Lm5leHQ7Ci0JCWxpc3RfZGVsX2luaXQo aXRlbSk7Ci0JCXJjID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCBtc21fcHJvcGVydHlfdmFs dWUsIGRpcnR5X25vZGUpCi0JCQktIHByb3BlcnR5X3N0YXRlLT52YWx1ZXM7Ci0JCURSTV9ERUJV R19LTVMoInByb3BlcnR5ICVkIGRpcnR5XG4iLCByYyk7Ci0JfQotCW11dGV4X3VubG9jaygmaW5m by0+cHJvcGVydHlfbG9jayk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogX21zbV9wcm9w ZXJ0eV9zZXRfZGlydHlfbm9fbG9jayAtIGZsYWcgZ2l2ZW4gcHJvcGVydHkgYXMgYmVpbmcgZGly dHkKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGRv ZXNuJ3QgbXV0ZXggcHJvdGVjdCB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkaXJ0eSBsaW5rZWQgbGlzdC4KLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGlu Zm8gY29udGFpbmVyIHN0cnVjdAotICogQHByb3BlcnR5X3N0YXRlOiBQb2ludGVyIHRvIHByb3Bl cnR5IHN0YXRlIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBwcm9wZXJ0eV9pZHg6IFByb3BlcnR5IGlu ZGV4Ci0gKi8KLXN0YXRpYyB2b2lkIF9tc21fcHJvcGVydHlfc2V0X2RpcnR5X25vX2xvY2soCi0J CXN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV9z dGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCkKLXsKLQlpZiAo IWluZm8gfHwgIXByb3BlcnR5X3N0YXRlIHx8ICFwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzIHx8Ci0J CQlwcm9wZXJ0eV9pZHggPj0gaW5mby0+cHJvcGVydHlfY291bnQpIHsKLQkJRFJNX0VSUk9SKCJp bnZhbGlkIGFyZ3VtZW50KHMpLCBpZHggJXVcbiIsIHByb3BlcnR5X2lkeCk7Ci0JCXJldHVybjsK LQl9Ci0KLQkvKiBhdm9pZCByZS1pbnNlcnRpbmcgaWYgYWxyZWFkeSBkaXJ0eSAqLwotCWlmICgh bGlzdF9lbXB0eSgmcHJvcGVydHlfc3RhdGUtPnZhbHVlc1twcm9wZXJ0eV9pZHhdLmRpcnR5X25v ZGUpKSB7Ci0JCURSTV9ERUJVR19LTVMoInByb3BlcnR5ICV1IGFscmVhZHkgZGlydHlcbiIsIHBy b3BlcnR5X2lkeCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlsaXN0X2FkZF90YWlsKCZwcm9wZXJ0eV9z dGF0ZS0+dmFsdWVzW3Byb3BlcnR5X2lkeF0uZGlydHlfbm9kZSwKLQkJCSZwcm9wZXJ0eV9zdGF0 ZS0+ZGlydHlfbGlzdCk7Ci19Ci0KLS8qKgotICogX21zbV9wcm9wZXJ0eV9pbnN0YWxsX2ludGVn ZXIgLSBpbnN0YWxsIHN0YW5kYXJkIGRybSByYW5nZSBwcm9wZXJ0eQotICogQGluZm86IFBvaW50 ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKiBAbmFtZTogUHJvcGVydHkg bmFtZQotICogQGZsYWdzOiBPdGhlciBwcm9wZXJ0eSB0eXBlIGZsYWdzLCBlLmcuIERSTV9NT0RF X1BST1BfSU1NVVRBQkxFCi0gKiBAbWluOiBNaW4gcHJvcGVydHkgdmFsdWUKLSAqIEBtYXg6IE1h eCBwcm9wZXJ0eSB2YWx1ZQotICogQGluaXQ6IERlZmF1bHQgUHJvcGVydHkgdmFsdWUKLSAqIEBw cm9wZXJ0eV9pZHg6IFByb3BlcnR5IGluZGV4Ci0gKiBAZm9yY2VfZGlydHk6IFdoZXRoZXIgb3Ig bm90IHRvIGZpbHRlciAnZGlydHknIHN0YXR1cyBvbiB1bmNoYW5nZWQgdmFsdWVzCi0gKi8KLXN0 YXRpYyB2b2lkIF9tc21fcHJvcGVydHlfaW5zdGFsbF9pbnRlZ2VyKHN0cnVjdCBtc21fcHJvcGVy dHlfaW5mbyAqaW5mbywKLQkJY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzLCB1aW50NjRfdCBt aW4sIHVpbnQ2NF90IG1heCwKLQkJdWludDY0X3QgaW5pdCwgdWludDMyX3QgcHJvcGVydHlfaWR4 LCBib29sIGZvcmNlX2RpcnR5KQotewotCXN0cnVjdCBkcm1fcHJvcGVydHkgKipwcm9wOwotCi0J aWYgKCFpbmZvKQotCQlyZXR1cm47Ci0KLQkrK2luZm8tPmluc3RhbGxfcmVxdWVzdDsKLQotCWlm ICghbmFtZSB8fCAocHJvcGVydHlfaWR4ID49IGluZm8tPnByb3BlcnR5X2NvdW50KSkgewotCQlE Uk1fRVJST1IoImludmFsaWQgYXJndW1lbnQocyksICVzXG4iLCBuYW1lID8gbmFtZSA6ICJudWxs Iik7Ci0JfSBlbHNlIHsKLQkJcHJvcCA9ICZpbmZvLT5wcm9wZXJ0eV9hcnJheVtwcm9wZXJ0eV9p ZHhdOwotCQkvKgotCQkgKiBQcm9wZXJ0aWVzIG5lZWQgdG8gYmUgYXR0YWNoZWQgdG8gZWFjaCBk cm0gb2JqZWN0IHRoYXQKLQkJICogdXNlcyB0aGVtLCBidXQgb25seSBuZWVkIHRvIGJlIGNyZWF0 ZWQgb25jZQotCQkgKi8KLQkJaWYgKCpwcm9wID09IDApIHsKLQkJCSpwcm9wID0gZHJtX3Byb3Bl cnR5X2NyZWF0ZV9yYW5nZShpbmZvLT5kZXYsCi0JCQkJCWZsYWdzLCBuYW1lLCBtaW4sIG1heCk7 Ci0JCQlpZiAoKnByb3AgPT0gMCkKLQkJCQlEUk1fRVJST1IoImNyZWF0ZSAlcyBwcm9wZXJ0eSBm YWlsZWRcbiIsIG5hbWUpOwotCQl9Ci0KLQkJLyogc2F2ZSBpbml0IHZhbHVlIGZvciBsYXRlciAq LwotCQlpbmZvLT5wcm9wZXJ0eV9kYXRhW3Byb3BlcnR5X2lkeF0uZGVmYXVsdF92YWx1ZSA9IGlu aXQ7Ci0JCWluZm8tPnByb3BlcnR5X2RhdGFbcHJvcGVydHlfaWR4XS5mb3JjZV9kaXJ0eSA9IGZv cmNlX2RpcnR5OwotCi0JCS8qIGFsd2F5cyBhdHRhY2ggcHJvcGVydHksIGlmIGNyZWF0ZWQgKi8K LQkJaWYgKCpwcm9wKSB7Ci0JCQlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eShpbmZvLT5iYXNl LCAqcHJvcCwgaW5pdCk7Ci0JCQkrK2luZm8tPmluc3RhbGxfY291bnQ7Ci0JCX0KLQl9Ci19Ci0K LXZvaWQgbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2Uoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZv ICppbmZvLAotCQljb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MsIHVpbnQ2NF90IG1pbiwgdWlu dDY0X3QgbWF4LAotCQl1aW50NjRfdCBpbml0LCB1aW50MzJfdCBwcm9wZXJ0eV9pZHgpCi17Ci0J X21zbV9wcm9wZXJ0eV9pbnN0YWxsX2ludGVnZXIoaW5mbywgbmFtZSwgZmxhZ3MsCi0JCQltaW4s IG1heCwgaW5pdCwgcHJvcGVydHlfaWR4LCBmYWxzZSk7Ci19Ci0KLXZvaWQgbXNtX3Byb3BlcnR5 X2luc3RhbGxfdm9sYXRpbGVfcmFuZ2Uoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAot CQljb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MsIHVpbnQ2NF90IG1pbiwgdWludDY0X3QgbWF4 LAotCQl1aW50NjRfdCBpbml0LCB1aW50MzJfdCBwcm9wZXJ0eV9pZHgpCi17Ci0JX21zbV9wcm9w ZXJ0eV9pbnN0YWxsX2ludGVnZXIoaW5mbywgbmFtZSwgZmxhZ3MsCi0JCQltaW4sIG1heCwgaW5p dCwgcHJvcGVydHlfaWR4LCB0cnVlKTsKLX0KLQotdm9pZCBtc21fcHJvcGVydHlfaW5zdGFsbF9y b3RhdGlvbihzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCXN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLCB1bnNpZ25lZCBpbnQgcm90YXRpb24sCi0JCXVuc2lnbmVkIGludCBzdXBwb3J0 ZWRfcm90YXRpb25zLCB1aW50MzJfdCBwcm9wZXJ0eV9pZHgpCi17Ci0JaWYgKCFpbmZvIHx8ICFw bGFuZSkKLQkJcmV0dXJuOwotCi0JKytpbmZvLT5pbnN0YWxsX3JlcXVlc3Q7Ci0KLQlpZiAocHJv cGVydHlfaWR4ID49IGluZm8tPnByb3BlcnR5X2NvdW50KSB7Ci0JCURSTV9FUlJPUigiaW52YWxp ZCBwcm9wZXJ0eSBpbmRleCAlZFxuIiwgcHJvcGVydHlfaWR4KTsKLQkJcmV0dXJuOwotCX0KLQot CWlmIChkcm1fcGxhbmVfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KHBsYW5lLAotCQkJcm90YXRp b24sIHN1cHBvcnRlZF9yb3RhdGlvbnMpKSB7Ci0JCURSTV9FUlJPUigiY3JlYXRlIHJvdGF0aW9u IHByb3BlcnR5IGZhaWxlZFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAocGxhbmUtPnJvdGF0 aW9uX3Byb3BlcnR5KSB7Ci0JCWluZm8tPnByb3BlcnR5X2FycmF5W3Byb3BlcnR5X2lkeF0gPSBw bGFuZS0+cm90YXRpb25fcHJvcGVydHk7Ci0KLQkJLyogc2F2ZSBpbml0IHZhbHVlIGZvciBsYXRl ciAqLwotCQlpbmZvLT5wcm9wZXJ0eV9kYXRhW3Byb3BlcnR5X2lkeF0uZGVmYXVsdF92YWx1ZSA9 IHJvdGF0aW9uOwotCQlpbmZvLT5wcm9wZXJ0eV9kYXRhW3Byb3BlcnR5X2lkeF0uZm9yY2VfZGly dHkgPSBmYWxzZTsKLQotCQkrK2luZm8tPmluc3RhbGxfY291bnQ7Ci0JfQotfQotCi12b2lkIG1z bV9wcm9wZXJ0eV9pbnN0YWxsX2VudW0oc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAot CQljb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MsIGludCBpc19iaXRtYXNrLAotCQljb25zdCBz dHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0ICp2YWx1ZXMsIGludCBudW1fdmFsdWVzLAotCQl1aW50 MzJfdCBwcm9wZXJ0eV9pZHgpCi17Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eSAqKnByb3A7Ci0KLQlp ZiAoIWluZm8pCi0JCXJldHVybjsKLQotCSsraW5mby0+aW5zdGFsbF9yZXF1ZXN0OwotCi0JaWYg KCFuYW1lIHx8ICF2YWx1ZXMgfHwgIW51bV92YWx1ZXMgfHwKLQkJCShwcm9wZXJ0eV9pZHggPj0g aW5mby0+cHJvcGVydHlfY291bnQpKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChz KSwgJXNcbiIsIG5hbWUgPyBuYW1lIDogIm51bGwiKTsKLQl9IGVsc2UgewotCQlwcm9wID0gJmlu Zm8tPnByb3BlcnR5X2FycmF5W3Byb3BlcnR5X2lkeF07Ci0JCS8qCi0JCSAqIFByb3BlcnRpZXMg bmVlZCB0byBiZSBhdHRhY2hlZCB0byBlYWNoIGRybSBvYmplY3QgdGhhdAotCQkgKiB1c2VzIHRo ZW0sIGJ1dCBvbmx5IG5lZWQgdG8gYmUgY3JlYXRlZCBvbmNlCi0JCSAqLwotCQlpZiAoKnByb3Ag PT0gMCkgewotCQkJLyogJ2JpdG1hc2snIGlzIGEgc3BlY2lhbCB0eXBlIG9mICdlbnVtJyAqLwot CQkJaWYgKGlzX2JpdG1hc2spCi0JCQkJKnByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlX2JpdG1h c2soaW5mby0+ZGV2LAotCQkJCQkJRFJNX01PREVfUFJPUF9CSVRNQVNLIHwgZmxhZ3MsCi0JCQkJ CQluYW1lLCB2YWx1ZXMsIG51bV92YWx1ZXMsIC0xKTsKLQkJCWVsc2UKLQkJCQkqcHJvcCA9IGRy bV9wcm9wZXJ0eV9jcmVhdGVfZW51bShpbmZvLT5kZXYsCi0JCQkJCQlEUk1fTU9ERV9QUk9QX0VO VU0gfCBmbGFncywKLQkJCQkJCW5hbWUsIHZhbHVlcywgbnVtX3ZhbHVlcyk7Ci0JCQlpZiAoKnBy b3AgPT0gMCkKLQkJCQlEUk1fRVJST1IoImNyZWF0ZSAlcyBwcm9wZXJ0eSBmYWlsZWRcbiIsIG5h bWUpOwotCQl9Ci0KLQkJLyogc2F2ZSBpbml0IHZhbHVlIGZvciBsYXRlciAqLwotCQlpbmZvLT5w cm9wZXJ0eV9kYXRhW3Byb3BlcnR5X2lkeF0uZGVmYXVsdF92YWx1ZSA9IDA7Ci0JCWluZm8tPnBy b3BlcnR5X2RhdGFbcHJvcGVydHlfaWR4XS5mb3JjZV9kaXJ0eSA9IGZhbHNlOwotCi0JCS8qIHNl bGVjdCBmaXJzdCBkZWZpbmVkIHZhbHVlIGZvciBlbnVtcyAqLwotCQlpZiAoIWlzX2JpdG1hc2sp Ci0JCQlpbmZvLT5wcm9wZXJ0eV9kYXRhW3Byb3BlcnR5X2lkeF0uZGVmYXVsdF92YWx1ZSA9Ci0J CQkJdmFsdWVzLT50eXBlOwotCi0JCS8qIGFsd2F5cyBhdHRhY2ggcHJvcGVydHksIGlmIGNyZWF0 ZWQgKi8KLQkJaWYgKCpwcm9wKSB7Ci0JCQlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eShpbmZv LT5iYXNlLCAqcHJvcCwKLQkJCQkJaW5mby0+cHJvcGVydHlfZGF0YQotCQkJCQlbcHJvcGVydHlf aWR4XS5kZWZhdWx0X3ZhbHVlKTsKLQkJCSsraW5mby0+aW5zdGFsbF9jb3VudDsKLQkJfQotCX0K LX0KLQotdm9pZCBtc21fcHJvcGVydHlfaW5zdGFsbF9ibG9iKHN0cnVjdCBtc21fcHJvcGVydHlf aW5mbyAqaW5mbywKLQkJY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzLCB1aW50MzJfdCBwcm9w ZXJ0eV9pZHgpCi17Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eSAqKnByb3A7Ci0KLQlpZiAoIWluZm8p Ci0JCXJldHVybjsKLQotCSsraW5mby0+aW5zdGFsbF9yZXF1ZXN0OwotCi0JaWYgKCFuYW1lIHx8 IChwcm9wZXJ0eV9pZHggPj0gaW5mby0+YmxvYl9jb3VudCkpIHsKLQkJRFJNX0VSUk9SKCJpbnZh bGlkIGFyZ3VtZW50KHMpLCAlc1xuIiwgbmFtZSA/IG5hbWUgOiAibnVsbCIpOwotCX0gZWxzZSB7 Ci0JCXByb3AgPSAmaW5mby0+cHJvcGVydHlfYXJyYXlbcHJvcGVydHlfaWR4XTsKLQkJLyoKLQkJ ICogUHJvcGVydGllcyBuZWVkIHRvIGJlIGF0dGFjaGVkIHRvIGVhY2ggZHJtIG9iamVjdCB0aGF0 Ci0JCSAqIHVzZXMgdGhlbSwgYnV0IG9ubHkgbmVlZCB0byBiZSBjcmVhdGVkIG9uY2UKLQkJICov Ci0JCWlmICgqcHJvcCA9PSAwKSB7Ci0JCQkvKiB1c2UgJ2NyZWF0ZScgZm9yIGJsb2IgcHJvcGVy dHkgcGxhY2UgaG9sZGVyICovCi0JCQkqcHJvcCA9IGRybV9wcm9wZXJ0eV9jcmVhdGUoaW5mby0+ ZGV2LAotCQkJCQlEUk1fTU9ERV9QUk9QX0JMT0IgfCBmbGFncywgbmFtZSwgMCk7Ci0JCQlpZiAo KnByb3AgPT0gMCkKLQkJCQlEUk1fRVJST1IoImNyZWF0ZSAlcyBwcm9wZXJ0eSBmYWlsZWRcbiIs IG5hbWUpOwotCQl9Ci0KLQkJLyogc2F2ZSBpbml0IHZhbHVlIGZvciBsYXRlciAqLwotCQlpbmZv LT5wcm9wZXJ0eV9kYXRhW3Byb3BlcnR5X2lkeF0uZGVmYXVsdF92YWx1ZSA9IDA7Ci0JCWluZm8t PnByb3BlcnR5X2RhdGFbcHJvcGVydHlfaWR4XS5mb3JjZV9kaXJ0eSA9IHRydWU7Ci0KLQkJLyog YWx3YXlzIGF0dGFjaCBwcm9wZXJ0eSwgaWYgY3JlYXRlZCAqLwotCQlpZiAoKnByb3ApIHsKLQkJ CWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KGluZm8tPmJhc2UsICpwcm9wLCAtMSk7Ci0JCQkr K2luZm8tPmluc3RhbGxfY291bnQ7Ci0JCX0KLQl9Ci19Ci0KLWludCBtc21fcHJvcGVydHlfaW5z dGFsbF9nZXRfc3RhdHVzKHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbykKLXsKLQlpbnQg cmMgPSAtRU5PTUVNOwotCi0JaWYgKGluZm8gJiYgKGluZm8tPmluc3RhbGxfcmVxdWVzdCA9PSBp bmZvLT5pbnN0YWxsX2NvdW50KSkKLQkJcmMgPSAwOwotCi0JcmV0dXJuIHJjOwotfQotCi1pbnQg bXNtX3Byb3BlcnR5X2luZGV4KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3Ry dWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHkpCi17Ci0JdWludDMyX3QgY291bnQ7Ci0JaW50MzJf dCBpZHg7Ci0JaW50IHJjID0gLUVJTlZBTDsKLQotCWlmICghaW5mbyB8fCAhcHJvcGVydHkpIHsK LQkJRFJNX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKLQl9IGVsc2UgewotCQkvKgot CQkgKiBMaW5lYXIgc2VhcmNoLCBidXQgc3RhcnQgZnJvbSBsYXN0IGZvdW5kIGluZGV4LiBUaGlz IHdpbGwKLQkJICogaGVscCBpZiBhbnkgc2luZ2xlIHByb3BlcnR5IGlzIGFjY2Vzc2VkIG11bHRp cGxlIHRpbWVzIGluIGEKLQkJICogcm93LiBJZGVhbGx5LCB3ZSBjb3VsZCBrZWVwIGEgbGlzdCBv ZiBwcm9wZXJ0aWVzIHNvcnRlZCBpbgotCQkgKiB0aGUgb3JkZXIgb2YgbW9zdCByZWNlbnQgYWNj ZXNzLCBidXQgdGhhdCBtYXkgYmUgb3ZlcmtpbGwKLQkJICogZm9yIG5vdy4KLQkJICovCi0JCW11 dGV4X2xvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwotCQlpZHggPSBpbmZvLT5yZWNlbnRfaWR4 OwotCQljb3VudCA9IGluZm8tPnByb3BlcnR5X2NvdW50OwotCQl3aGlsZSAoY291bnQpIHsKLQkJ CS0tY291bnQ7Ci0KLQkJCS8qIHN0b3Agc2VhcmNoaW5nIG9uIG1hdGNoICovCi0JCQlpZiAoaW5m by0+cHJvcGVydHlfYXJyYXlbaWR4XSA9PSBwcm9wZXJ0eSkgewotCQkJCWluZm8tPnJlY2VudF9p ZHggPSBpZHg7Ci0JCQkJcmMgPSBpZHg7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCS8qIG1vdmUg dG8gbmV4dCB2YWxpZCBpbmRleCAqLwotCQkJaWYgKC0taWR4IDwgMCkKLQkJCQlpZHggPSBpbmZv LT5wcm9wZXJ0eV9jb3VudCAtIDE7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5wcm9wZXJ0 eV9sb2NrKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBtc21fcHJvcGVydHlfc2V0X2Rp cnR5KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IG1zbV9wcm9wZXJ0 eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0JCWludCBwcm9wZXJ0eV9pZHgpCi17Ci0JaWYgKCFp bmZvIHx8ICFwcm9wZXJ0eV9zdGF0ZSB8fCAhcHJvcGVydHlfc3RhdGUtPnZhbHVlcykgewotCQlE Uk1fRVJST1IoImludmFsaWQgYXJndW1lbnQocylcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0JbXV0ZXhfbG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Ci0JX21zbV9wcm9wZXJ0eV9zZXRf ZGlydHlfbm9fbG9jayhpbmZvLCBwcm9wZXJ0eV9zdGF0ZSwgcHJvcGVydHlfaWR4KTsKLQltdXRl eF91bmxvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwotCXJldHVybiAwOwotfQotCi1pbnQgbXNt X3Byb3BlcnR5X2F0b21pY19zZXQoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQlz dHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0ZSwKLQkJc3RydWN0IGRybV9w cm9wZXJ0eSAqcHJvcGVydHksIHVpbnQ2NF90IHZhbCkKLXsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5 X2Jsb2IgKmJsb2I7Ci0JaW50IHByb3BlcnR5X2lkeCwgcmMgPSAtRUlOVkFMOwotCi0JcHJvcGVy dHlfaWR4ID0gbXNtX3Byb3BlcnR5X2luZGV4KGluZm8sIHByb3BlcnR5KTsKLQlpZiAoIWluZm8g fHwgIXByb3BlcnR5X3N0YXRlIHx8Ci0JCQkocHJvcGVydHlfaWR4ID09IC1FSU5WQUwpIHx8ICFw cm9wZXJ0eV9zdGF0ZS0+dmFsdWVzKSB7Ci0JCURSTV9ERUJVRygiaW52YWxpZCBhcmd1bWVudChz KVxuIik7Ci0JfSBlbHNlIHsKLQkJLyogZXh0cmEgaGFuZGxpbmcgZm9yIGluY29taW5nIHByb3Bl cnRpZXMgKi8KLQkJbXV0ZXhfbG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Ci0JCWlmICgocHJv cGVydHktPmZsYWdzICYgRFJNX01PREVfUFJPUF9CTE9CKSAmJgotCQkJKHByb3BlcnR5X2lkeCA8 IGluZm8tPmJsb2JfY291bnQpKSB7Ci0JCQkvKiBEUk0gbG9va3VwIGFsc28gdGFrZXMgYSByZWZl cmVuY2UgKi8KLQkJCWJsb2IgPSBkcm1fcHJvcGVydHlfbG9va3VwX2Jsb2IoaW5mby0+ZGV2LAot CQkJCSh1aW50MzJfdCl2YWwpOwotCQkJaWYgKCFibG9iKSB7Ci0JCQkJRFJNX0VSUk9SKCJibG9i IG5vdCBmb3VuZFxuIik7Ci0JCQkJdmFsID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJREJHKCJCbG9i ICV1IHNhdmVkIiwgYmxvYi0+YmFzZS5pZCk7Ci0JCQkJdmFsID0gYmxvYi0+YmFzZS5pZDsKLQot CQkJCS8qIHNhdmUgYmxvYiAtIG5lZWQgdG8gY2xlYXIgcHJldmlvdXMgcmVmICovCi0JCQkJaWYg KHByb3BlcnR5X3N0YXRlLT52YWx1ZXNbcHJvcGVydHlfaWR4XS5ibG9iKQotCQkJCQlkcm1fcHJv cGVydHlfYmxvYl9wdXQoCi0JCQkJCQlwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzWwotCQkJCQkJcHJv cGVydHlfaWR4XS5ibG9iKTsKLQkJCQlwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzW3Byb3BlcnR5X2lk eF0uYmxvYiA9Ci0JCQkJCWJsb2I7Ci0JCQl9Ci0JCX0KLQotCQkvKiB1cGRhdGUgdmFsdWUgYW5k IGZsYWcgYXMgZGlydHkgKi8KLQkJaWYgKHByb3BlcnR5X3N0YXRlLT52YWx1ZXNbcHJvcGVydHlf aWR4XS52YWx1ZSAhPSB2YWwgfHwKLQkJCQlpbmZvLT5wcm9wZXJ0eV9kYXRhW3Byb3BlcnR5X2lk eF0uZm9yY2VfZGlydHkpIHsKLQkJCXByb3BlcnR5X3N0YXRlLT52YWx1ZXNbcHJvcGVydHlfaWR4 XS52YWx1ZSA9IHZhbDsKLQkJCV9tc21fcHJvcGVydHlfc2V0X2RpcnR5X25vX2xvY2soaW5mbywg cHJvcGVydHlfc3RhdGUsCi0JCQkJCXByb3BlcnR5X2lkeCk7Ci0KLQkJCURCRygiJXMgLSAlbGxk IiwgcHJvcGVydHktPm5hbWUsIHZhbCk7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5wcm9w ZXJ0eV9sb2NrKTsKLQkJcmMgPSAwOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotaW50IG1zbV9w cm9wZXJ0eV9hdG9taWNfZ2V0KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3Ry dWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0JCXN0cnVjdCBkcm1fcHJv cGVydHkgKnByb3BlcnR5LCB1aW50NjRfdCAqdmFsKQotewotCWludCBwcm9wZXJ0eV9pZHgsIHJj ID0gLUVJTlZBTDsKLQotCXByb3BlcnR5X2lkeCA9IG1zbV9wcm9wZXJ0eV9pbmRleChpbmZvLCBw cm9wZXJ0eSk7Ci0JaWYgKCFpbmZvIHx8IChwcm9wZXJ0eV9pZHggPT0gLUVJTlZBTCkgfHwKLQkJ CSFwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzIHx8ICF2YWwpIHsKLQkJRFJNX0RFQlVHKCJJbnZhbGlk IGFyZ3VtZW50KHMpXG4iKTsKLQl9IGVsc2UgewotCQltdXRleF9sb2NrKCZpbmZvLT5wcm9wZXJ0 eV9sb2NrKTsKLQkJKnZhbCA9IHByb3BlcnR5X3N0YXRlLT52YWx1ZXNbcHJvcGVydHlfaWR4XS52 YWx1ZTsKLQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5wcm9wZXJ0eV9sb2NrKTsKLQkJcmMgPSAwOwot CX0KLQotCXJldHVybiByYzsKLX0KLQotdm9pZCAqbXNtX3Byb3BlcnR5X2FsbG9jX3N0YXRlKHN0 cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbykKLXsKLQl2b2lkICpzdGF0ZSA9IE5VTEw7Ci0K LQlpZiAoIWluZm8pIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHByb3BlcnR5IGluZm9cbiIpOwot CQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZpbmZvLT5wcm9wZXJ0eV9sb2NrKTsK LQlpZiAoaW5mby0+c3RhdGVfY2FjaGVfc2l6ZSkKLQkJc3RhdGUgPSBpbmZvLT5zdGF0ZV9jYWNo ZVstLShpbmZvLT5zdGF0ZV9jYWNoZV9zaXplKV07Ci0JbXV0ZXhfdW5sb2NrKCZpbmZvLT5wcm9w ZXJ0eV9sb2NrKTsKLQotCWlmICghc3RhdGUgJiYgaW5mby0+c3RhdGVfc2l6ZSkKLQkJc3RhdGUg PSBrbWFsbG9jKGluZm8tPnN0YXRlX3NpemUsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFzdGF0ZSkK LQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgc3RhdGVcbiIpOwotCi0JcmV0dXJuIHN0 YXRlOwotfQotCi0vKioKLSAqIF9tc21fcHJvcGVydHlfZnJlZV9zdGF0ZSAtIGhlbHBlciBmdW5j dGlvbiBmb3IgZnJlZWluZyBsb2NhbCBzdGF0ZSBvYmplY3RzCi0gKiBAaW5mbzogUG9pbnRlciB0 byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBzdDogUG9pbnRlciB0byBzdGF0 ZSBvYmplY3QKLSAqLwotc3RhdGljIHZvaWQgX21zbV9wcm9wZXJ0eV9mcmVlX3N0YXRlKHN0cnVj dCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywgdm9pZCAqc3QpCi17Ci0JaWYgKCFpbmZvIHx8ICFz dCkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Ci0JaWYg KGluZm8tPnN0YXRlX2NhY2hlX3NpemUgPCBNU01fUFJPUF9TVEFURV9DQUNIRV9TSVpFKQotCQlp bmZvLT5zdGF0ZV9jYWNoZVsoaW5mby0+c3RhdGVfY2FjaGVfc2l6ZSkrK10gPSBzdDsKLQllbHNl Ci0JCWtmcmVlKHN0KTsKLQltdXRleF91bmxvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwotfQot Ci12b2lkIG1zbV9wcm9wZXJ0eV9yZXNldF9zdGF0ZShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8g KmluZm8sIHZvaWQgKnN0YXRlLAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0 eV9zdGF0ZSwKLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV92YWx1ZSAqcHJvcGVydHlfdmFsdWVzKQot ewotCXVpbnQzMl90IGk7Ci0KLQlpZiAoIWluZm8pIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHBy b3BlcnR5IGluZm9cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHN0YXRlKQotCQltZW1zZXQo c3RhdGUsIDAsIGluZm8tPnN0YXRlX3NpemUpOwotCi0JaWYgKHByb3BlcnR5X3N0YXRlKSB7Ci0J CXByb3BlcnR5X3N0YXRlLT5wcm9wZXJ0eV9jb3VudCA9IGluZm8tPnByb3BlcnR5X2NvdW50Owot CQlwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzID0gcHJvcGVydHlfdmFsdWVzOwotCQlJTklUX0xJU1Rf SEVBRCgmcHJvcGVydHlfc3RhdGUtPmRpcnR5X2xpc3QpOwotCX0KLQotCS8qCi0JICogQXNzaWdu IGRlZmF1bHQgcHJvcGVydHkgdmFsdWVzLiBUaGlzIGhlbHBlciBpcyBtb3N0bHkgdXNlZAotCSAq IHRvIGluaXRpYWxpemUgbmV3bHkgY3JlYXRlZCBzdGF0ZSBvYmplY3RzLgotCSAqLwotCWlmIChw cm9wZXJ0eV92YWx1ZXMpCi0JCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5wcm9wZXJ0eV9jb3VudDsg KytpKSB7Ci0JCQlwcm9wZXJ0eV92YWx1ZXNbaV0udmFsdWUgPQotCQkJCWluZm8tPnByb3BlcnR5 X2RhdGFbaV0uZGVmYXVsdF92YWx1ZTsKLQkJCXByb3BlcnR5X3ZhbHVlc1tpXS5ibG9iID0gTlVM TDsKLQkJCUlOSVRfTElTVF9IRUFEKCZwcm9wZXJ0eV92YWx1ZXNbaV0uZGlydHlfbm9kZSk7Ci0J CX0KLX0KLQotdm9pZCBtc21fcHJvcGVydHlfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBtc21fcHJv cGVydHlfaW5mbyAqaW5mbywKLQkJdm9pZCAqb2xkX3N0YXRlLCB2b2lkICpzdGF0ZSwKLQkJc3Ry dWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0JCXN0cnVjdCBtc21fcHJv cGVydHlfdmFsdWUgKnByb3BlcnR5X3ZhbHVlcykKLXsKLQl1aW50MzJfdCBpOwotCi0JaWYgKCFp bmZvIHx8ICFvbGRfc3RhdGUgfHwgIXN0YXRlKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBhcmd1 bWVudChzKVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltZW1jcHkoc3RhdGUsIG9sZF9zdGF0ZSwg aW5mby0+c3RhdGVfc2l6ZSk7Ci0KLQlpZiAoIXByb3BlcnR5X3N0YXRlKQotCQlyZXR1cm47Ci0K LQlJTklUX0xJU1RfSEVBRCgmcHJvcGVydHlfc3RhdGUtPmRpcnR5X2xpc3QpOwotCXByb3BlcnR5 X3N0YXRlLT52YWx1ZXMgPSBwcm9wZXJ0eV92YWx1ZXM7Ci0KLQlpZiAocHJvcGVydHlfc3RhdGUt PnZhbHVlcykKLQkJLyogYWRkIHJlZiBjb3VudCBmb3IgYmxvYnMgYW5kIGluaXRpYWxpemUgZGly dHkgbm9kZXMgKi8KLQkJZm9yIChpID0gMDsgaSA8IGluZm8tPnByb3BlcnR5X2NvdW50OyArK2kp IHsKLQkJCWlmIChwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzW2ldLmJsb2IpCi0JCQkJZHJtX3Byb3Bl cnR5X2Jsb2JfZ2V0KAotCQkJCQkJcHJvcGVydHlfc3RhdGUtPnZhbHVlc1tpXS5ibG9iKTsKLQkJ CUlOSVRfTElTVF9IRUFEKCZwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzW2ldLmRpcnR5X25vZGUpOwot CQl9Ci19Ci0KLXZvaWQgbXNtX3Byb3BlcnR5X2Rlc3Ryb3lfc3RhdGUoc3RydWN0IG1zbV9wcm9w ZXJ0eV9pbmZvICppbmZvLCB2b2lkICpzdGF0ZSwKLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0 ZSAqcHJvcGVydHlfc3RhdGUpCi17Ci0JdWludDMyX3QgaTsKLQotCWlmICghaW5mbyB8fCAhc3Rh dGUpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKLQkJcmV0dXJuOwot CX0KLQlpZiAocHJvcGVydHlfc3RhdGUgJiYgcHJvcGVydHlfc3RhdGUtPnZhbHVlcykgewotCQkv KiByZW1vdmUgcmVmIGNvdW50IGZvciBibG9icyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+ cHJvcGVydHlfY291bnQ7ICsraSkKLQkJCWlmIChwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzW2ldLmJs b2IpIHsKLQkJCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoCi0JCQkJCQlwcm9wZXJ0eV9zdGF0ZS0+ dmFsdWVzW2ldLmJsb2IpOwotCQkJCXByb3BlcnR5X3N0YXRlLT52YWx1ZXNbaV0uYmxvYiA9IE5V TEw7Ci0JCQl9Ci0JfQotCi0JX21zbV9wcm9wZXJ0eV9mcmVlX3N0YXRlKGluZm8sIHN0YXRlKTsK LX0KLQotdm9pZCAqbXNtX3Byb3BlcnR5X2dldF9ibG9iKHN0cnVjdCBtc21fcHJvcGVydHlfaW5m byAqaW5mbywKLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0J CXNpemVfdCAqYnl0ZV9sZW4sCi0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCkKLXsKLQlzdHJ1Y3Qg ZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2I7Ci0Jc2l6ZV90IGxlbiA9IDA7Ci0Jdm9pZCAqcmMgPSAw OwotCi0JaWYgKCFpbmZvIHx8ICFwcm9wZXJ0eV9zdGF0ZSB8fCAhcHJvcGVydHlfc3RhdGUtPnZh bHVlcyB8fAotCQkJKHByb3BlcnR5X2lkeCA+PSBpbmZvLT5ibG9iX2NvdW50KSkgewotCQlEUk1f RVJST1IoImludmFsaWQgYXJndW1lbnQocylcbiIpOwotCX0gZWxzZSB7Ci0JCWJsb2IgPSBwcm9w ZXJ0eV9zdGF0ZS0+dmFsdWVzW3Byb3BlcnR5X2lkeF0uYmxvYjsKLQkJaWYgKGJsb2IpIHsKLQkJ CWxlbiA9IGJsb2ItPmxlbmd0aDsKLQkJCXJjID0gJmJsb2ItPmRhdGE7Ci0JCX0KLQl9Ci0KLQlp ZiAoYnl0ZV9sZW4pCi0JCSpieXRlX2xlbiA9IGxlbjsKLQotCXJldHVybiByYzsKLX0KLQotaW50 IG1zbV9wcm9wZXJ0eV9zZXRfYmxvYihzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0J CXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqKmJsb2JfcmVmZXJlbmNlLAotCQl2b2lkICpibG9i X2RhdGEsCi0JCXNpemVfdCBieXRlX2xlbiwKLQkJdWludDMyX3QgcHJvcGVydHlfaWR4KQotewot CXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYiA9IE5VTEw7Ci0JaW50IHJjID0gLUVJTlZB TDsKLQotCWlmICghaW5mbyB8fCAhYmxvYl9yZWZlcmVuY2UgfHwgKHByb3BlcnR5X2lkeCA+PSBp bmZvLT5ibG9iX2NvdW50KSkgewotCQlEUk1fRVJST1IoImludmFsaWQgYXJndW1lbnQocylcbiIp OwotCX0gZWxzZSB7Ci0JCS8qIGNyZWF0ZSBibG9iICovCi0JCWlmIChibG9iX2RhdGEgJiYgYnl0 ZV9sZW4pIHsKLQkJCWJsb2IgPSBkcm1fcHJvcGVydHlfY3JlYXRlX2Jsb2IoaW5mby0+ZGV2LAot CQkJCQlieXRlX2xlbiwKLQkJCQkJYmxvYl9kYXRhKTsKLQkJCWlmIChJU19FUlJfT1JfTlVMTChi bG9iKSkgewotCQkJCXJjID0gUFRSX0VSUihibG9iKTsKLQkJCQlEUk1fRVJST1IoImZhaWxlZCB0 byBjcmVhdGUgYmxvYiwgJWRcbiIsIHJjKTsKLQkJCQlnb3RvIGV4aXQ7Ci0JCQl9Ci0JCX0KLQot CQkvKiB1cGRhdGUgZHJtIG9iamVjdCAqLwotCQlyYyA9IGRybV9vYmplY3RfcHJvcGVydHlfc2V0 X3ZhbHVlKGluZm8tPmJhc2UsCi0JCQkJaW5mby0+cHJvcGVydHlfYXJyYXlbcHJvcGVydHlfaWR4 XSwKLQkJCQlibG9iID8gYmxvYi0+YmFzZS5pZCA6IDApOwotCQlpZiAocmMpIHsKLQkJCURSTV9F UlJPUigiZmFpbGVkIHRvIHNldCBibG9iIHRvIHByb3BlcnR5XG4iKTsKLQkJCWlmIChibG9iKQot CQkJCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChibG9iKTsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCi0J CS8qIHVwZGF0ZSBsb2NhbCByZWZlcmVuY2UgKi8KLQkJaWYgKCpibG9iX3JlZmVyZW5jZSkKLQkJ CWRybV9wcm9wZXJ0eV9ibG9iX3B1dCgqYmxvYl9yZWZlcmVuY2UpOwotCQkqYmxvYl9yZWZlcmVu Y2UgPSBibG9iOwotCX0KLQotZXhpdDoKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBtc21fcHJvcGVy dHlfc2V0X3Byb3BlcnR5KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0 IG1zbV9wcm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0JCXVpbnQzMl90IHByb3BlcnR5 X2lkeCwKLQkJdWludDY0X3QgdmFsKQotewotCWludCByYyA9IC1FSU5WQUw7Ci0KLQlpZiAoIWlu Zm8gfHwgKHByb3BlcnR5X2lkeCA+PSBpbmZvLT5wcm9wZXJ0eV9jb3VudCkgfHwKLQkJCXByb3Bl cnR5X2lkeCA8IGluZm8tPmJsb2JfY291bnQgfHwKLQkJCSFwcm9wZXJ0eV9zdGF0ZSB8fCAhcHJv cGVydHlfc3RhdGUtPnZhbHVlcykgewotCQlEUk1fRVJST1IoImludmFsaWQgYXJndW1lbnQocylc biIpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKmRybV9wcm9wOwotCi0JCW11 dGV4X2xvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwotCi0JCS8qIHVwZGF0ZSBjYWNoZWQgdmFs dWUgKi8KLQkJcHJvcGVydHlfc3RhdGUtPnZhbHVlc1twcm9wZXJ0eV9pZHhdLnZhbHVlID0gdmFs OwotCi0JCS8qIHVwZGF0ZSB0aGUgbmV3IGRlZmF1bHQgdmFsdWUgZm9yIGltbXV0YWJsZXMgKi8K LQkJZHJtX3Byb3AgPSBpbmZvLT5wcm9wZXJ0eV9hcnJheVtwcm9wZXJ0eV9pZHhdOwotCQlpZiAo ZHJtX3Byb3AtPmZsYWdzICYgRFJNX01PREVfUFJPUF9JTU1VVEFCTEUpCi0JCQlpbmZvLT5wcm9w ZXJ0eV9kYXRhW3Byb3BlcnR5X2lkeF0uZGVmYXVsdF92YWx1ZSA9IHZhbDsKLQotCQltdXRleF91 bmxvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwotCi0JCS8qIHVwZGF0ZSBkcm0gb2JqZWN0ICov Ci0JCXJjID0gZHJtX29iamVjdF9wcm9wZXJ0eV9zZXRfdmFsdWUoaW5mby0+YmFzZSwgZHJtX3By b3AsIHZhbCk7Ci0JCWlmIChyYykKLQkJCURSTV9FUlJPUigiZmFpbGVkIHNldCBwcm9wZXJ0eSB2 YWx1ZSwgaWR4ICVkIHJjICVkXG4iLAotCQkJCQlwcm9wZXJ0eV9pZHgsIHJjKTsKLQotCX0KLQot CXJldHVybiByYzsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fcHJv cC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fcHJvcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA2Nzg1OTU1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNt X3Byb3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDQzOCArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMp IDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g KgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9NU01fUFJPUF9IXwotI2RlZmluZSBfTVNNX1BST1Bf SF8KLQotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlICJtc21fZHJ2LmgiCi0KLSNk ZWZpbmUgTVNNX1BST1BfU1RBVEVfQ0FDSEVfU0laRQkyCi0KLS8qKgotICogc3RydWN0IG1zbV9w cm9wZXJ0eV9kYXRhIC0gb3BhcXVlIHN0cnVjdHVyZSBmb3IgdHJhY2tpbmcgcGVyCi0gKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkcm0tb2JqZWN0IHBlciBwcm9wZXJ0eSBzdHVmZgotICog QGRlZmF1bHRfdmFsdWU6IERlZmF1bHQgcHJvcGVydHkgdmFsdWUgZm9yIHRoaXMgZHJtIG9iamVj dAotICogQGZvcmNlX2RpcnR5OiBBbHdheXMgZGlydHkgcHJvcGVydHkgb24gaW5jb21pbmcgc2V0 cywgcmF0aGVyIHRoYW4gY2hlY2tpbmcKLSAqICAgICAgICAgICAgICAgZm9yIG1vZGlmaWVkIHZh bHVlcwotICovCi1zdHJ1Y3QgbXNtX3Byb3BlcnR5X2RhdGEgewotCXVpbnQ2NF90IGRlZmF1bHRf dmFsdWU7Ci0JYm9vbCBmb3JjZV9kaXJ0eTsKLX07Ci0KLS8qKgotICogc3RydWN0IG1zbV9wcm9w ZXJ0eV92YWx1ZSAtIG9wYXF1ZSBzdHJ1Y3R1cmUgZm9yIHRyYWNraW5nIHBlcgotICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRybS1vYmplY3QgcGVyIHByb3BlcnR5IHN0dWZmCi0gKiBA dmFsdWU6IEN1cnJlbnQgcHJvcGVydHkgdmFsdWUgZm9yIHRoaXMgZHJtIG9iamVjdAotICogQGJs b2I6IFBvaW50ZXIgdG8gYXNzb2NpYXRlZCBibG9iIGRhdGEsIGlmIGF2YWlsYWJsZQotICogQGRp cnR5X25vZGU6IExpbmtlZCBsaXN0IG5vZGUgdG8gdHJhY2sgaWYgcHJvcGVydHkgaXMgZGlydHkg b3Igbm90Ci0gKi8KLXN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUgewotCXVpbnQ2NF90IHZhbHVl OwotCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGRp cnR5X25vZGU7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbzogU3RydWN0 dXJlIGZvciBwcm9wZXJ0eS9zdGF0ZSBoZWxwZXIgZnVuY3Rpb25zCi0gKiBAYmFzZTogUG9pbnRl ciB0byBiYXNlIGRybSBvYmplY3QgKHBsYW5lL2NydGMvZXRjLikKLSAqIEBkZXY6IFBvaW50ZXIg dG8gZHJtIGRldmljZSBvYmplY3QKLSAqIEBwcm9wZXJ0eV9hcnJheTogUG9pbnRlciB0byBhcnJh eSBmb3Igc3RvcmluZyBjcmVhdGVkIHByb3BlcnR5IG9iamVjdHMKLSAqIEBwcm9wZXJ0eV9kYXRh OiBQb2ludGVyIHRvIGFycmF5IGZvciBzdG9yaW5nIHByaXZhdGUgcHJvcGVydHkgZGF0YQotICog QHByb3BlcnR5X2NvdW50OiBUb3RhbCBudW1iZXIgb2YgcHJvcGVydGllcwotICogQGJsb2JfY291 bnQ6IFRvdGFsIG51bWJlciBvZiBibG9iIHByb3BlcnRpZXMsIHNob3VsZCBiZSA8PSBjb3VudAot ICogQGluc3RhbGxfcmVxdWVzdDogVG90YWwgbnVtYmVyIG9mIHByb3BlcnR5ICdpbnN0YWxsJyBy ZXF1ZXN0cwotICogQGluc3RhbGxfY291bnQ6IFRvdGFsIG51bWJlciBvZiBzdWNjZXNzZnVsICdp bnN0YWxsJyByZXF1ZXN0cwotICogQHJlY2VudF9pZHg6IEluZGV4IG9mIHByb3BlcnR5IG1vc3Qg cmVjZW50bHkgYWNjZXNzZWQgYnkgc2V0L2dldAotICogQGlzX2FjdGl2ZTogV2hldGhlciBvciBu b3QgZHJtIGNvbXBvbmVudCBwcm9wZXJ0aWVzIGFyZSAnYWN0aXZlJwotICogQHN0YXRlX2NhY2hl OiBDYWNoZSBvZiBsb2NhbCBzdGF0ZXMsIHRvIHByZXZlbnQgYWxsb2MvZnJlZSB0aHJhc2hpbmcK LSAqIEBzdGF0ZV9zaXplOiBTaXplIG9mIGxvY2FsIHN0YXRlIHN0cnVjdHVyZXMKLSAqIEBzdGF0 ZV9jYWNoZV9zaXplOiBOdW1iZXIgb2Ygc3RhdGUgc3RydWN0dXJlcyBjdXJyZW50bHkgc3RvcmVk IGluIHN0YXRlX2NhY2hlCi0gKiBAcHJvcGVydHlfbG9jazogTXV0ZXggdG8gcHJvdGVjdCBsb2Nh bCB2YXJpYWJsZXMKLSAqLwotc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvIHsKLQlzdHJ1Y3QgZHJt X21vZGVfb2JqZWN0ICpiYXNlOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0KLQlzdHJ1Y3Qg ZHJtX3Byb3BlcnR5ICoqcHJvcGVydHlfYXJyYXk7Ci0Jc3RydWN0IG1zbV9wcm9wZXJ0eV9kYXRh ICpwcm9wZXJ0eV9kYXRhOwotCXVpbnQzMl90IHByb3BlcnR5X2NvdW50OwotCXVpbnQzMl90IGJs b2JfY291bnQ7Ci0JdWludDMyX3QgaW5zdGFsbF9yZXF1ZXN0OwotCXVpbnQzMl90IGluc3RhbGxf Y291bnQ7Ci0KLQlpbnQzMl90IHJlY2VudF9pZHg7Ci0KLQlib29sIGlzX2FjdGl2ZTsKLQotCXZv aWQgKnN0YXRlX2NhY2hlW01TTV9QUk9QX1NUQVRFX0NBQ0hFX1NJWkVdOwotCXVpbnQzMl90IHN0 YXRlX3NpemU7Ci0JaW50MzJfdCBzdGF0ZV9jYWNoZV9zaXplOwotCXN0cnVjdCBtdXRleCBwcm9w ZXJ0eV9sb2NrOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlIC0gU3Ry dWN0dXJlIGZvciBsb2NhbCBwcm9wZXJ0eSBzdGF0ZSBpbmZvcm1hdGlvbgotICogQHByb3BlcnR5 X2NvdW50OiBUb3RhbCBudW1iZXIgb2YgcHJvcGVydGllcwotICogQHZhbHVlczogUG9pbnRlciB0 byBhcnJheSBvZiBtc21fcHJvcGVydHlfdmFsdWUgb2JqZWN0cwotICogQGRpcnR5X2xpc3Q6IExp c3Qgb2YgYWxsIHByb3BlcnRpZXMgdGhhdCBoYXZlIGJlZW4gJ2F0b21pY19zZXQnIGJ1dCBub3QK LSAqICAgICAgICAgICAgICB5ZXQgY2xlYXJlZCB3aXRoICdtc21fcHJvcGVydHlfcG9wX2RpcnR5 JwotICovCi1zdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlIHsKLQl1aW50MzJfdCBwcm9wZXJ0eV9j b3VudDsKLQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3ZhbHVlICp2YWx1ZXM7Ci0Jc3RydWN0IGxpc3Rf aGVhZCBkaXJ0eV9saXN0OwotfTsKLQotLyoqCi0gKiBtc21fcHJvcGVydHlfaW5kZXhfdG9fZHJt X3Byb3BlcnR5IC0gZ2V0IGRybSBwcm9wZXJ0eSBzdHJ1Y3QgZnJvbSBwcm9wIGluZGV4Ci0gKiBA aW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBwcm9w ZXJ0eV9pZHg6IFByb3BlcnR5IGluZGV4Ci0gKiBSZXR1cm5zOiBkcm1fcHJvcGVydHkgcG9pbnRl ciBhc3NvY2lhdGVkIHdpdGggcHJvcGVydHkgaW5kZXgKLSAqLwotc3RhdGljIGlubGluZQotc3Ry dWN0IGRybV9wcm9wZXJ0eSAqbXNtX3Byb3BlcnR5X2luZGV4X3RvX2RybV9wcm9wZXJ0eSgKLQkJ c3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLCB1aW50MzJfdCBwcm9wZXJ0eV9pZHgpCi17 Ci0JaWYgKCFpbmZvIHx8IHByb3BlcnR5X2lkeCA+PSBpbmZvLT5wcm9wZXJ0eV9jb3VudCkKLQkJ cmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gaW5mby0+cHJvcGVydHlfYXJyYXlbcHJvcGVydHlfaWR4 XTsKLX0KLQotLyoqCi0gKiBtc21fcHJvcGVydHlfZ2V0X2RlZmF1bHQgLSBxdWVyeSBkZWZhdWx0 IHZhbHVlIG9mIGEgcHJvcGVydHkKLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8g Y29udGFpbmVyIHN0cnVjdAotICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5kZXgKLSAqIFJl dHVybnM6IERlZmF1bHQgdmFsdWUgZm9yIHNwZWNpZmllZCBwcm9wZXJ0eQotICovCi1zdGF0aWMg aW5saW5lCi11aW50NjRfdCBtc21fcHJvcGVydHlfZ2V0X2RlZmF1bHQoc3RydWN0IG1zbV9wcm9w ZXJ0eV9pbmZvICppbmZvLAotCQl1aW50MzJfdCBwcm9wZXJ0eV9pZHgpCi17Ci0JdWludDY0X3Qg cmMgPSAwOwotCi0JaWYgKCFpbmZvKQotCQlyZXR1cm4gMDsKLQotCW11dGV4X2xvY2soJmluZm8t PnByb3BlcnR5X2xvY2spOwotCWlmIChwcm9wZXJ0eV9pZHggPCBpbmZvLT5wcm9wZXJ0eV9jb3Vu dCkKLQkJcmMgPSBpbmZvLT5wcm9wZXJ0eV9kYXRhW3Byb3BlcnR5X2lkeF0uZGVmYXVsdF92YWx1 ZTsKLQltdXRleF91bmxvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwotCi0JcmV0dXJuIHJjOwot fQotCi0vKioKLSAqIG1zbV9wcm9wZXJ0eV9zZXRfaXNfYWN0aXZlIC0gc2V0IG92ZXJhbGwgJ2Fj dGl2ZScgc3RhdHVzIGZvciBhbGwgcHJvcGVydGllcwotICogQGluZm86IFBvaW50ZXIgdG8gcHJv cGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKiBAaXNfYWN0aXZlOiBOZXcgJ2lzIGFjdGl2 ZScgc3RhdHVzCi0gKi8KLXN0YXRpYyBpbmxpbmUKLXZvaWQgbXNtX3Byb3BlcnR5X3NldF9pc19h Y3RpdmUoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLCBib29sIGlzX2FjdGl2ZSkKLXsK LQlpZiAoaW5mbykgewotCQltdXRleF9sb2NrKCZpbmZvLT5wcm9wZXJ0eV9sb2NrKTsKLQkJaW5m by0+aXNfYWN0aXZlID0gaXNfYWN0aXZlOwotCQltdXRleF91bmxvY2soJmluZm8tPnByb3BlcnR5 X2xvY2spOwotCX0KLX0KLQotLyoqCi0gKiBtc21fcHJvcGVydHlfZ2V0X2lzX2FjdGl2ZSAtIHF1 ZXJ5IHByb3BlcnR5ICdpcyBhY3RpdmUnIHN0YXR1cwotICogQGluZm86IFBvaW50ZXIgdG8gcHJv cGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKiBSZXR1cm5zOiBDdXJyZW50ICdpcyBhY3Rp dmUncyBzdGF0dXMKLSAqLwotc3RhdGljIGlubGluZQotYm9vbCBtc21fcHJvcGVydHlfZ2V0X2lz X2FjdGl2ZShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8pCi17Ci0JYm9vbCByYyA9IGZh bHNlOwotCi0JaWYgKGluZm8pIHsKLQkJbXV0ZXhfbG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7 Ci0JCXJjID0gaW5mby0+aXNfYWN0aXZlOwotCQltdXRleF91bmxvY2soJmluZm8tPnByb3BlcnR5 X2xvY2spOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBtc21fcHJvcGVydHlfcG9w X2RpcnR5IC0gZGV0ZXJtaW5lIG5leHQgZGlydHkgcHJvcGVydHkgYW5kIGNsZWFyCi0gKiAgICAg ICAgICAgICAgICAgICAgICAgICAgaXRzIGRpcnR5IGZsYWcKLSAqIEBpbmZvOiBQb2ludGVyIHRv IHByb3BlcnR5IGluZm8gY29udGFpbmVyIHN0cnVjdAotICogQHByb3BlcnR5X3N0YXRlOiBQb2lu dGVyIHRvIHByb3BlcnR5IHN0YXRlIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIFJldHVybnM6IFZhbGlk IG1zbSBwcm9wZXJ0eSBpbmRleCBvbiBzdWNjZXNzLAotICogICAgICAgICAgLUVBR0FJTiBpZiBu byBkaXJ0eSBwcm9wZXJ0aWVzIGFyZSBhdmFpbGFibGUKLSAqICAgICAgICAgIFByb3BlcnR5IGlu ZGljaWVzIHJldHVybmVkIGZyb20gdGhpcyBmdW5jdGlvbiBhcmUgc2ltaWxhcgotICogICAgICAg ICAgdG8gdGhvc2UgcmV0dXJuZWQgYnkgdGhlIG1zbV9wcm9wZXJ0eV9pbmRleCBmdW5jdGlvbi4K LSAqLwotaW50IG1zbV9wcm9wZXJ0eV9wb3BfZGlydHkoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZv ICppbmZvLAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0ZSk7Ci0K LS8qKgotICogbXNtX3Byb3BlcnR5X2luaXQgLSBpbml0aWFsaXplIHByb3BlcnR5IGluZm8gc3Ry dWN0dXJlCi0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1 Y3QKLSAqIEBiYXNlOiBQb2ludGVyIHRvIGJhc2UgZHJtIG9iamVjdCAocGxhbmUvY3J0Yy9ldGMu KQotICogQGRldjogUG9pbnRlciB0byBkcm0gZGV2aWNlIG9iamVjdAotICogQHByb3BlcnR5X2Fy cmF5OiBQb2ludGVyIHRvIGFycmF5IGZvciBzdG9yaW5nIGNyZWF0ZWQgcHJvcGVydHkgb2JqZWN0 cwotICogQHByb3BlcnR5X2RhdGE6IFBvaW50ZXIgdG8gYXJyYXkgZm9yIHN0b3JpbmcgcHJpdmF0 ZSBwcm9wZXJ0eSBkYXRhCi0gKiBAcHJvcGVydHlfY291bnQ6IFRvdGFsIG51bWJlciBvZiBwcm9w ZXJ0aWVzCi0gKiBAYmxvYl9jb3VudDogVG90YWwgbnVtYmVyIG9mIGJsb2IgcHJvcGVydGllcywg c2hvdWxkIGJlIDw9IGNvdW50Ci0gKiBAc3RhdGVfc2l6ZTogU2l6ZSBvZiBsb2NhbCBzdGF0ZSBv YmplY3QKLSAqLwotdm9pZCBtc21fcHJvcGVydHlfaW5pdChzdHJ1Y3QgbXNtX3Byb3BlcnR5X2lu Zm8gKmluZm8sCi0JCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKmJhc2UsCi0JCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKipwcm9wZXJ0eV9hcnJheSwKLQkJ c3RydWN0IG1zbV9wcm9wZXJ0eV9kYXRhICpwcm9wZXJ0eV9kYXRhLAotCQl1aW50MzJfdCBwcm9w ZXJ0eV9jb3VudCwKLQkJdWludDMyX3QgYmxvYl9jb3VudCwKLQkJdWludDMyX3Qgc3RhdGVfc2l6 ZSk7Ci0KLS8qKgotICogbXNtX3Byb3BlcnR5X2Rlc3Ryb3kgLSBkZXN0cm95IGhlbHBlciBpbmZv IHN0cnVjdHVyZQotICoKLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFp bmVyIHN0cnVjdAotICovCi12b2lkIG1zbV9wcm9wZXJ0eV9kZXN0cm95KHN0cnVjdCBtc21fcHJv cGVydHlfaW5mbyAqaW5mbyk7Ci0KLS8qKgotICogbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2Ug LSBpbnN0YWxsIHN0YW5kYXJkIGRybSByYW5nZSBwcm9wZXJ0eQotICogQGluZm86IFBvaW50ZXIg dG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKiBAbmFtZTogUHJvcGVydHkgbmFt ZQotICogQGZsYWdzOiBPdGhlciBwcm9wZXJ0eSB0eXBlIGZsYWdzLCBlLmcuIERSTV9NT0RFX1BS T1BfSU1NVVRBQkxFCi0gKiBAbWluOiBNaW4gcHJvcGVydHkgdmFsdWUKLSAqIEBtYXg6IE1heCBw cm9wZXJ0eSB2YWx1ZQotICogQGluaXQ6IERlZmF1bHQgUHJvcGVydHkgdmFsdWUKLSAqIEBwcm9w ZXJ0eV9pZHg6IFByb3BlcnR5IGluZGV4Ci0gKi8KLXZvaWQgbXNtX3Byb3BlcnR5X2luc3RhbGxf cmFuZ2Uoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQljb25zdCBjaGFyICpuYW1l LAotCQlpbnQgZmxhZ3MsCi0JCXVpbnQ2NF90IG1pbiwKLQkJdWludDY0X3QgbWF4LAotCQl1aW50 NjRfdCBpbml0LAotCQl1aW50MzJfdCBwcm9wZXJ0eV9pZHgpOwotCi0vKioKLSAqIG1zbV9wcm9w ZXJ0eV9pbnN0YWxsX3ZvbGF0aWxlX3JhbmdlIC0gaW5zdGFsbCBkcm0gcmFuZ2UgcHJvcGVydHkK LSAqCVRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byBtc21fcHJvcGVydHlfaW5zdGFsbF9yYW5n ZSwgYnV0IGFzc3VtZXMKLSAqCXRoYXQgdGhlIHByb3BlcnR5IGlzIG1lYW50IGZvciBob2xkaW5n IHVzZXIgcG9pbnRlcnMgb3IgZGVzY3JpcHRvcnMKLSAqCXRoYXQgbWF5IHJlZmVyZW5jZSB2b2xh dGlsZSBkYXRhIHdpdGhvdXQgaGF2aW5nIGFuIHVwZGF0ZWQgdmFsdWUuCi0gKiBAaW5mbzogUG9p bnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBuYW1lOiBQcm9wZXJ0 eSBuYW1lCi0gKiBAZmxhZ3M6IE90aGVyIHByb3BlcnR5IHR5cGUgZmxhZ3MsIGUuZy4gRFJNX01P REVfUFJPUF9JTU1VVEFCTEUKLSAqIEBtaW46IE1pbiBwcm9wZXJ0eSB2YWx1ZQotICogQG1heDog TWF4IHByb3BlcnR5IHZhbHVlCi0gKiBAaW5pdDogRGVmYXVsdCBQcm9wZXJ0eSB2YWx1ZQotICog QHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5kZXgKLSAqLwotdm9pZCBtc21fcHJvcGVydHlfaW5z dGFsbF92b2xhdGlsZV9yYW5nZShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCWNv bnN0IGNoYXIgKm5hbWUsCi0JCWludCBmbGFncywKLQkJdWludDY0X3QgbWluLAotCQl1aW50NjRf dCBtYXgsCi0JCXVpbnQ2NF90IGluaXQsCi0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCk7Ci0KLS8q KgotICogbXNtX3Byb3BlcnR5X2luc3RhbGxfcm90YXRpb24gLSBpbnN0YWxsIHN0YW5kYXJkIGRy bSByb3RhdGlvbiBwcm9wZXJ0eQotICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBj b250YWluZXIgc3RydWN0Ci0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtX3BsYW5lIHdoaWNoIHRo aXMgcHJvcGVydHkgaXMgaW5zdGFsbGVkIG9uCi0gKiBAcm90YXRpb246IFRoZSBkZWZhdWx0IHZh bHVlIGZvciB0aGlzIG5ldyBwcm9wZXJ0eQotICogQHN1cHBvcnRlZF9yb3RhdGlvbnM6IEJpdG1h c2sgb2Ygc3VwcG9ydGVkIHJvdGF0aW9uIHZhbHVlcyAoc2VlCi0gKiAgICAgICAgICAgICAgICAg ICAgICAgZHJtX3BsYW5lX2NyZWF0ZV9yb3RhdGlvbl9wcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxz KQotICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5kZXgKLSAqLwotdm9pZCBtc21fcHJvcGVy dHlfaW5zdGFsbF9yb3RhdGlvbihzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCXN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAotCQl1bnNpZ25lZCBpbnQgcm90YXRpb24sCi0JCXVuc2ln bmVkIGludCBzdXBwb3J0ZWRfcm90YXRpb25zLAotCQl1aW50MzJfdCBwcm9wZXJ0eV9pZHgpOwot Ci0vKioKLSAqIG1zbV9wcm9wZXJ0eV9pbnN0YWxsX2VudW0gLSBpbnN0YWxsIHN0YW5kYXJkIGRy bSBlbnVtL2JpdG1hc2sgcHJvcGVydHkKLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGlu Zm8gY29udGFpbmVyIHN0cnVjdAotICogQG5hbWU6IFByb3BlcnR5IG5hbWUKLSAqIEBmbGFnczog T3RoZXIgcHJvcGVydHkgdHlwZSBmbGFncywgZS5nLiBEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRQot ICogQGlzX2JpdG1hc2s6IFNldCB0byBub24temVybyB0byBjcmVhdGUgYSBiaXRtYXNrIHByb3Bl cnR5LCByYXRoZXIgdGhhbiBhbgotICogICAgICAgICAgICAgIGVudW1lcmF0aW9uIG9uZQotICog QHZhbHVlczogQXJyYXkgb2YgYWxsb3dhYmxlIGVudW1lcmF0aW9uL2JpdG1hc2sgdmFsdWVzCi0g KiBAbnVtX3ZhbHVlczogU2l6ZSBvZiB2YWx1ZXMgYXJyYXkKLSAqIEBwcm9wZXJ0eV9pZHg6IFBy b3BlcnR5IGluZGV4Ci0gKi8KLXZvaWQgbXNtX3Byb3BlcnR5X2luc3RhbGxfZW51bShzdHJ1Y3Qg bXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCWNvbnN0IGNoYXIgKm5hbWUsCi0JCWludCBmbGFn cywKLQkJaW50IGlzX2JpdG1hc2ssCi0JCWNvbnN0IHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3Qg KnZhbHVlcywKLQkJaW50IG51bV92YWx1ZXMsCi0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCk7Ci0K LS8qKgotICogbXNtX3Byb3BlcnR5X2luc3RhbGxfYmxvYiAtIGluc3RhbGwgc3RhbmRhcmQgZHJt IGJsb2IgcHJvcGVydHkKLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFp bmVyIHN0cnVjdAotICogQG5hbWU6IFByb3BlcnR5IG5hbWUKLSAqIEBmbGFnczogRXh0cmEgZmxh Z3MgZm9yIHByb3BlcnR5IGNyZWF0aW9uCi0gKiBAcHJvcGVydHlfaWR4OiBQcm9wZXJ0eSBpbmRl eAotICovCi12b2lkIG1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2Ioc3RydWN0IG1zbV9wcm9wZXJ0 eV9pbmZvICppbmZvLAotCQljb25zdCBjaGFyICpuYW1lLAotCQlpbnQgZmxhZ3MsCi0JCXVpbnQz Ml90IHByb3BlcnR5X2lkeCk7Ci0KLS8qKgotICogbXNtX3Byb3BlcnR5X2luc3RhbGxfZ2V0X3N0 YXR1cyAtIHF1ZXJ5IG92ZXJhbCBzdGF0dXMgb2YgcHJvcGVydHkgYWRkaXRpb25zCi0gKiBAaW5m bzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIFJldHVybnM6 IFplcm8gaWYgcHJldmlvdXMgcHJvcGVydHkgaW5zdGFsbCBjYWxscyB3ZXJlIGFsbCBzdWNjZXNz ZnVsCi0gKi8KLWludCBtc21fcHJvcGVydHlfaW5zdGFsbF9nZXRfc3RhdHVzKHN0cnVjdCBtc21f cHJvcGVydHlfaW5mbyAqaW5mbyk7Ci0KLS8qKgotICogbXNtX3Byb3BlcnR5X2luZGV4IC0gZGV0 ZXJtaW5lIHByb3BlcnR5IGluZGV4IGZyb20gZHJtX3Byb3BlcnR5IHB0cgotICogQGluZm86IFBv aW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKiBAcHJvcGVydHk6IElu Y29taW5nIHByb3BlcnR5IHBvaW50ZXIKLSAqIFJldHVybnM6IFZhbGlkIHByb3BlcnR5IGluZGV4 LCBvciAtRUlOVkFMIG9uIGVycm9yCi0gKi8KLWludCBtc21fcHJvcGVydHlfaW5kZXgoc3RydWN0 IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0 eSk7Ci0KLS8qKgotICogbXNtX3Byb3BlcnR5X3NldF9kaXJ0eSAtIGZvcmNpYmx5IGZsYWcgYSBw cm9wZXJ0eSBhcyBkaXJ0eQotICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250 YWluZXIgc3RydWN0Ci0gKiBAcHJvcGVydHlfc3RhdGU6IFBvaW50ZXIgdG8gcHJvcGVydHkgc3Rh dGUgY29udGFpbmVyIHN0cnVjdAotICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5kZXgKLSAq IFJldHVybnM6IFplcm8gb24gc3VjY2VzcwotICovCi1pbnQgbXNtX3Byb3BlcnR5X3NldF9kaXJ0 eShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCXN0cnVjdCBtc21fcHJvcGVydHlf c3RhdGUgKnByb3BlcnR5X3N0YXRlLAotCQlpbnQgcHJvcGVydHlfaWR4KTsKLQotLyoqCi0gKiBt c21fcHJvcGVydHlfYXRvbWljX3NldCAtIGhlbHBlciBmdW5jdGlvbiBmb3IgYXRvbWljIHByb3Bl cnR5IHNldCBjYWxsYmFjawotICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250 YWluZXIgc3RydWN0Ci0gKiBAcHJvcGVydHlfc3RhdGU6IFBvaW50ZXIgdG8gbG9jYWwgc3RhdGUg c3RydWN0dXJlCi0gKiBAcHJvcGVydHk6IEluY29taW5nIHByb3BlcnR5IHBvaW50ZXIKLSAqIEB2 YWw6IEluY29taW5nIHByb3BlcnR5IHZhbHVlCi0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MK LSAqLwotaW50IG1zbV9wcm9wZXJ0eV9hdG9taWNfc2V0KHN0cnVjdCBtc21fcHJvcGVydHlfaW5m byAqaW5mbywKLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0J CXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQl1aW50NjRfdCB2YWwpOwotCi0vKioK LSAqIG1zbV9wcm9wZXJ0eV9hdG9taWNfZ2V0IC0gaGVscGVyIGZ1bmN0aW9uIGZvciBhdG9taWMg cHJvcGVydHkgZ2V0IGNhbGxiYWNrCi0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZv IGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBwcm9wZXJ0eV9zdGF0ZTogUG9pbnRlciB0byBsb2NhbCBz dGF0ZSBzdHJ1Y3R1cmUKLSAqIEBwcm9wZXJ0eTogSW5jb21pbmcgcHJvcGVydHkgcG9pbnRlcgot ICogQHZhbDogUG9pbnRlciB0byB2YXJpYWJsZSBmb3IgcmVjZWl2aW5nIHByb3BlcnR5IHZhbHVl Ci0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IG1zbV9wcm9wZXJ0eV9hdG9t aWNfZ2V0KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IG1zbV9wcm9w ZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3Bl cnR5LAotCQl1aW50NjRfdCAqdmFsKTsKLQotLyoqCi0gKiBtc21fcHJvcGVydHlfYWxsb2Nfc3Rh dGUgLSBoZWxwZXIgZnVuY3Rpb24gZm9yIGFsbG9jYXRpbmcgbG9jYWwgc3RhdGUgb2JqZWN0cwot ICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKi8K LXZvaWQgKm1zbV9wcm9wZXJ0eV9hbGxvY19zdGF0ZShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8g KmluZm8pOwotCi0vKioKLSAqIG1zbV9wcm9wZXJ0eV9yZXNldF9zdGF0ZSAtIGhlbHBlciBmdW5j dGlvbiBmb3Igc3RhdGUgcmVzZXQgY2FsbGJhY2sKLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3Bl cnR5IGluZm8gY29udGFpbmVyIHN0cnVjdAotICogQHN0YXRlOiBQb2ludGVyIHRvIGxvY2FsIHN0 YXRlIHN0cnVjdHVyZQotICogQHByb3BlcnR5X3N0YXRlOiBQb2ludGVyIHRvIHByb3BlcnR5IHN0 YXRlIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBwcm9wZXJ0eV92YWx1ZXM6IFBvaW50ZXIgdG8gcHJv cGVydHkgdmFsdWVzIGNhY2hlIGFycmF5Ci0gKi8KLXZvaWQgbXNtX3Byb3BlcnR5X3Jlc2V0X3N0 YXRlKHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywgdm9pZCAqc3RhdGUsCi0JCXN0cnVj dCBtc21fcHJvcGVydHlfc3RhdGUgKnByb3BlcnR5X3N0YXRlLAotCQlzdHJ1Y3QgbXNtX3Byb3Bl cnR5X3ZhbHVlICpwcm9wZXJ0eV92YWx1ZXMpOwotCi0vKioKLSAqIG1zbV9wcm9wZXJ0eV9kdXBs aWNhdGVfc3RhdGUgLSBoZWxwZXIgZnVuY3Rpb24gZm9yIGR1cGxpY2F0ZSBzdGF0ZSBjYgotICog QGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKiBAb2xk X3N0YXRlOiBQb2ludGVyIHRvIG9yaWdpbmFsIHN0YXRlIHN0cnVjdHVyZQotICogQHN0YXRlOiBQ b2ludGVyIHRvIG5ld2x5IGNyZWF0ZWQgc3RhdGUgc3RydWN0dXJlCi0gKiBAcHJvcGVydHlfc3Rh dGU6IFBvaW50ZXIgdG8gZGVzdGluYXRpb24gcHJvcGVydHkgc3RhdGUgY29udGFpbmVyIHN0cnVj dAotICogQHByb3BlcnR5X3ZhbHVlczogUG9pbnRlciB0byBwcm9wZXJ0eSB2YWx1ZXMgY2FjaGUg YXJyYXkKLSAqLwotdm9pZCBtc21fcHJvcGVydHlfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBtc21f cHJvcGVydHlfaW5mbyAqaW5mbywKLQkJdm9pZCAqb2xkX3N0YXRlLAotCQl2b2lkICpzdGF0ZSwK LQkJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0JCXN0cnVjdCBt c21fcHJvcGVydHlfdmFsdWUgKnByb3BlcnR5X3ZhbHVlcyk7Ci0KLS8qKgotICogbXNtX3Byb3Bl cnR5X2Rlc3Ryb3lfc3RhdGUgLSBoZWxwZXIgZnVuY3Rpb24gZm9yIGRlc3Ryb3kgc3RhdGUgY2IK LSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVyIHN0cnVjdAotICog QHN0YXRlOiBQb2ludGVyIHRvIGxvY2FsIHN0YXRlIHN0cnVjdHVyZQotICogQHByb3BlcnR5X3N0 YXRlOiBQb2ludGVyIHRvIHByb3BlcnR5IHN0YXRlIGNvbnRhaW5lciBzdHJ1Y3QKLSAqLwotdm9p ZCBtc21fcHJvcGVydHlfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmlu Zm8sCi0JCXZvaWQgKnN0YXRlLAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0 eV9zdGF0ZSk7Ci0KLS8qKgotICogbXNtX3Byb3BlcnR5X2dldF9ibG9iIC0gb2J0YWluIGNhY2hl ZCBkYXRhIHBvaW50ZXIgZm9yIGRybSBibG9iIHByb3BlcnR5Ci0gKiBAaW5mbzogUG9pbnRlciB0 byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBwcm9wZXJ0eV9zdGF0ZTogUG9p bnRlciB0byBwcm9wZXJ0eSBzdGF0ZSBjb250YWluZXIgc3RydWN0Ci0gKiBAYnl0ZV9sZW46IE9w dGlvbmFsIHBvaW50ZXIgdG8gdmFyaWFibGUgZm9yIGFjY2VwdGluZyBibG9iIHNpemUKLSAqIEBw cm9wZXJ0eV9pZHg6IFByb3BlcnR5IGluZGV4Ci0gKiBSZXR1cm5zOiBQb2ludGVyIHRvIGJsb2Ig ZGF0YQotICovCi12b2lkICptc21fcHJvcGVydHlfZ2V0X2Jsb2Ioc3RydWN0IG1zbV9wcm9wZXJ0 eV9pbmZvICppbmZvLAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0 ZSwKLQkJc2l6ZV90ICpieXRlX2xlbiwKLQkJdWludDMyX3QgcHJvcGVydHlfaWR4KTsKLQotLyoq Ci0gKiBtc21fcHJvcGVydHlfc2V0X2Jsb2IgLSB1cGRhdGUgYmxvYiBwcm9wZXJ0eSBvbiBhIGRy bSBvYmplY3QKLSAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgYmxvYiBwcm9wZXJ0eSB2YWx1 ZSBvZiB0aGUgZ2l2ZW4gZHJtIG9iamVjdC4gSXRzCi0gKiBpbnRlbmRlZCB1c2UgaXMgdG8gdXBk YXRlIGJsb2IgcHJvcGVydGllcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkIHdpdGggdGhlCi0gKiBE Uk1fTU9ERV9QUk9QX0lNTVVUQUJMRSBmbGFnIHNldC4KLSAqIEBpbmZvOiBQb2ludGVyIHRvIHBy b3BlcnR5IGluZm8gY29udGFpbmVyIHN0cnVjdAotICogQGJsb2JfcmVmZXJlbmNlOiBSZWZlcmVu Y2UgdG8gYSBwb2ludGVyIHRoYXQgaG9sZHMgdGhlIGNyZWF0ZWQgZGF0YSBibG9iCi0gKiBAYmxv Yl9kYXRhOiBQb2ludGVyIHRvIGJsb2IgZGF0YQotICogQGJ5dGVfbGVuOiBMZW5ndGggb2YgYmxv YiBkYXRhLCBpbiBieXRlcwotICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5kZXgKLSAqIFJl dHVybnM6IFplcm8gb24gc3VjY2VzcwotICovCi1pbnQgbXNtX3Byb3BlcnR5X3NldF9ibG9iKHN0 cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9i ICoqYmxvYl9yZWZlcmVuY2UsCi0JCXZvaWQgKmJsb2JfZGF0YSwKLQkJc2l6ZV90IGJ5dGVfbGVu LAotCQl1aW50MzJfdCBwcm9wZXJ0eV9pZHgpOwotCi0vKioKLSAqIG1zbV9wcm9wZXJ0eV9zZXRf cHJvcGVydHkgLSB1cGRhdGUgcHJvcGVydHkgb24gYSBkcm0gb2JqZWN0Ci0gKiBUaGlzIGZ1bmN0 aW9uIHVwZGF0ZXMgdGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBnaXZlbiBkcm0gb2JqZWN0LiBJ dHMKLSAqIGludGVuZGVkIHVzZSBpcyB0byB1cGRhdGUgcHJvcGVydGllcyB0aGF0IGhhdmUgYmVl biBjcmVhdGVkIHdpdGggdGhlCi0gKiBEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSBmbGFnIHNldC4K LSAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCBvbiBhIGJsb2IuCi0gKiBA aW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBwcm9w ZXJ0eV9zdGF0ZTogUG9pbnRlciB0byBwcm9wZXJ0eSBzdGF0ZSBjb250YWluZXIgc3RydWN0Ci0g KiBAcHJvcGVydHlfaWR4OiBQcm9wZXJ0eSBpbmRleAotICogQHZhbDogdmFsdWUgb2YgdGhlIHBy b3BlcnR5IHRvIHNldAotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0gKi8KLWludCBtc21f cHJvcGVydHlfc2V0X3Byb3BlcnR5KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJ c3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0JCXVpbnQzMl90IHBy b3BlcnR5X2lkeCwKLQkJdWludDY0X3QgdmFsKTsKLQotI2VuZGlmIC8qIF9NU01fUFJPUF9IXyAq LwotCi0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIg b2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2 ZSBQcm9qZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K