From: Jeykumar Sankaran Subject: [DPU PATCH v4 5/6] drm/msm: hook up DPU with upstream DSI Date: Fri, 1 Jun 2018 10:45:52 -0700 Message-ID: <1527875153-27446-6-git-send-email-jsanka@codeaurora.org> References: <1527875153-27446-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: <1527875153-27446-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, Rajesh Yadav List-Id: dri-devel@lists.freedesktop.org U3dpdGNoIERQVSBmcm9tIGRzaS1zdGFnaW5nIHRvIHVwc3RyZWFtIGRzaSBkcml2ZXIuIFRvIG1h a2UKdGhlIHN3aXRjaCBhdG9taWMsIHRoaXMgY2hhbmdlIGluY2x1ZGVzOgotIHJlbW92ZSBkcHUg Y29ubmVjdG9yIGxheWVycwotIGNsZWFuIHVwIGRwdSBjb25uZWN0b3IgZGVwZW5kZW5jaWVzIGlu IGVuY29kZXIvY3J0YwotIGNvbXBpbGUgb3V0IHdyaXRlYmFjayBhbmQgZGlzcGxheSBwb3J0IGRy aXZlcnMKLSBjb21waWxlIG91dCBkc2ktc3RhZ2luZyBkcml2ZXIgKHNlcGFyYXRlIHBhdGNoIHN1 Ym1pdHRlZCB0bwogIHJlbW92ZSB0aGUgZHJpdmVyKQotIGFkYXB0IHVwc3RyZWFtIGRldmljZSBo aWVyYXJjaHkKCmNoYW5nZXMgaW4gdjI6CgktIHJlbW92ZSBmaWxlcyBub3QgYXBwbGljYWJsZSB1 cHN0cmVhbSAoU2VhbiBQYXVsKQoJLSByZW1vdmUgY29tcGlsZWQgb3V0IG5vbi1kc2kgZGlzcGxh eSBpbml0IChTZWFuIFBhdWwpCgktIHNwbGl0IHVucmVsYXRlZCBjaGFuZ2VzIGludG8gc2VwYXJh dGUgcGF0Y2ggc2V0IChTZWFuIFBhdWwpCmNoYW5nZXMgaW4gdjM6CgktIGZpeCBjb21waWxhdGlv biB3YXJuaW5nCiAgICAgICAgLSBjb21waWxlIG91dCBkc2kgc3RhZ2luZwpjaGFuZ2VzIGluIHY0 OgoJLSByZW1vdmUgdG9wX2N0cmwgY2hlY2sgaW4gcm0gcmVsZWFzZQoKU2lnbmVkLW9mZi1ieTog SmV5a3VtYXIgU2Fua2FyYW4gPGpzYW5rYUBjb2RlYXVyb3JhLm9yZz4KU2lnbmVkLW9mZi1ieTog U2VhbiBQYXVsIDxzZWFucGF1bEBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IFJhamVzaCBZ YWRhdiA8cnlhZGF2QGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vTWFr ZWZpbGUgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMiAtCiBkcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmMgICAgICB8IDExODUgLS0tLS0tLS0tLS0tLS0tLS0t LS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuaCAgICAgIHwg IDU1NSAtLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMg ICAgICAgICAgIHwgICAgOSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5j b2Rlci5jICAgICAgICB8ICAxNzkgKy0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfZW5jb2Rlci5oICAgICAgICB8ICAgMTAgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9lbmNvZGVyX3BoeXMuaCAgIHwgICAgOCArLQogLi4uL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jICAgfCAgICA2ICstCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMgICAgICAgICAgICB8ICA0ODggKy0tLS0tLS0KIGRyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuaCAgICAgICAgICAgIHwgICAgNiAtCiBk cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uYyAgICAgICAgICAgICB8ICAgNjUg Ky0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oICAgICAgICAgICAgIHwg ICAxMSArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9kYmcuYyAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDMgLQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMgICAgICAgICAgICAgICAg ICAgICAgfCAgIDQ3ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCAgICAgICAgICAg ICAgICAgICAgICB8ICAgMzkgLQogMTUgZmlsZXMgY2hhbmdlZCwgMTU5IGluc2VydGlvbnMoKyks IDI0NzQgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKaW5k ZXggZDk0N2YyYS4uZDc1NThlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtl ZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCkBAIC0xLDcgKzEsNiBAQAog IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogY2NmbGFncy15IDo9IC1JZHJpdmVy cy9ncHUvZHJtL21zbQogY2NmbGFncy15ICs9IC1JZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEKLWNjZmxhZ3MteSArPSAtSWRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcKIGNjZmxh Z3MtJChDT05GSUdfRFJNX01TTV9EU0kpICs9IC1JZHJpdmVycy9ncHUvZHJtL21zbS9kc2kKIAog bXNtLXkgOj0gXApAQCAtNDgsNyArNDcsNiBAQCBtc20teSA6PSBcCiAJZGlzcC9tZHA1L21kcDVf cGxhbmUubyBcCiAJZGlzcC9tZHA1L21kcDVfc21wLm8gXAogCWRpc3AvZHB1MS9kcHVfY29sb3Jf cHJvY2Vzc2luZy5vIFwKLQlkaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5vIFwKIAlkaXNwL2RwdTEv ZHB1X2NvcmVfaXJxLm8gXAogCWRpc3AvZHB1MS9kcHVfY29yZV9wZXJmLm8gXAogCWRpc3AvZHB1 MS9kcHVfY3J0Yy5vIFwKQEAgLTE0MSwyNiArMTM5LDYgQEAgbXNtLSQoQ09ORklHX0RSTV9NU01f RFNJKSArPSBkc2kvZHNpLm8gXAogCQkJZHNpL3BoeS9kc2lfcGh5Lm8gXAogCQkJZGlzcC9tZHA1 L21kcDVfY21kX2VuY29kZXIubwogCi1tc20tJChDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORykg Kz0gZHNpLXN0YWdpbmcvZHNpX3BoeS5vIFwKLQkJCQlkc2ktc3RhZ2luZy9kc2lfcHdyLm8gXAot CQkJCWRzaS1zdGFnaW5nL2RzaV9waHkubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX3BoeV9od192 Ml8wLm8gXAotCQkJCWRzaS1zdGFnaW5nL2RzaV9waHlfaHdfdjNfMC5vIFwKLQkJCQlkc2ktc3Rh Z2luZy9kc2lfcGh5X3RpbWluZ19jYWxjLm8gXAotCQkJCWRzaS1zdGFnaW5nL2RzaV9waHlfdGlt aW5nX3YyXzAubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfdjNfMC5vIFwKLQkJ CQlkc2ktc3RhZ2luZy9kc2lfY3RybF9od19jbW4ubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX2N0 cmxfaHdfMV80Lm8gXAotCQkJCWRzaS1zdGFnaW5nL2RzaV9jdHJsX2h3XzJfMC5vIFwKLQkJCQlk c2ktc3RhZ2luZy9kc2lfY3RybF9od18yXzIubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX2N0cmwu byBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX2NhdGFsb2cubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNp X2RybS5vIFwKLQkJCQlkc2ktc3RhZ2luZy9kc2lfZGlzcGxheS5vIFwKLQkJCQlkc2ktc3RhZ2lu Zy9kc2lfcGFuZWwubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX2Nsa19tYW5hZ2VyLm8gXAotCQkJ CWRzaS1zdGFnaW5nL2RzaV9kaXNwbGF5X3Rlc3QubwotCiBtc20tJChDT05GSUdfRFJNX01TTV9E U0lfMjhOTV9QSFkpICs9IGRzaS9waHkvZHNpX3BoeV8yOG5tLm8KIG1zbS0kKENPTkZJR19EUk1f TVNNX0RTSV8yME5NX1BIWSkgKz0gZHNpL3BoeS9kc2lfcGh5XzIwbm0ubwogbXNtLSQoQ09ORklH X0RSTV9NU01fRFNJXzI4Tk1fODk2MF9QSFkpICs9IGRzaS9waHkvZHNpX3BoeV8yOG5tXzg5NjAu bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rv ci5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5jCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Njk5MTlmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuYworKysgL2Rldi9udWxsCkBAIC0x LDExODUgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3Vu ZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2RlZmluZSBw cl9mbXQoZm10KQkiW2RybTolczolZF0gIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXwotI2luY2x1 ZGUgIm1zbV9kcnYuaCIKLSNpbmNsdWRlICJkcHVfZGJnLmgiCi0KLSNpbmNsdWRlICJkcHVfa21z LmgiCi0jaW5jbHVkZSAiZHB1X2Nvbm5lY3Rvci5oIgotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RT SV9TVEFHSU5HCi0jaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+Ci0jaW5jbHVkZSAiZHNpX2Ry bS5oIgotI2luY2x1ZGUgImRzaV9kaXNwbGF5LmgiCi0jZW5kaWYKLQotI2RlZmluZSBCTF9OT0RF X05BTUVfU0laRSAzMgotCi0jZGVmaW5lIERQVV9ERUJVR19DT05OKGMsIGZtdCwgLi4uKSBEUFVf REVCVUcoImNvbm4lZCAiIGZtdCxcCi0JCShjKSA/IChjKS0+YmFzZS5iYXNlLmlkIDogLTEsICMj X19WQV9BUkdTX18pCi0KLSNkZWZpbmUgRFBVX0VSUk9SX0NPTk4oYywgZm10LCAuLi4pIERQVV9F UlJPUigiY29ubiVkICIgZm10LFwKLQkJKGMpID8gKGMpLT5iYXNlLmJhc2UuaWQgOiAtMSwgIyNf X1ZBX0FSR1NfXykKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgZV90 b3BvbG9neV9uYW1lW10gPSB7Ci0Je0RQVV9STV9UT1BPTE9HWV9OT05FLAkiZHB1X25vbmUifSwK LQl7RFBVX1JNX1RPUE9MT0dZX1NJTkdMRVBJUEUsCSJkcHVfc2luZ2xlcGlwZSJ9LAotCXtEUFVf Uk1fVE9QT0xPR1lfRFVBTFBJUEUsCSJkcHVfZHVhbHBpcGUifSwKLQl7RFBVX1JNX1RPUE9MT0dZ X0RVQUxQSVBFXzNETUVSR0UsCSJkcHVfZHVhbHBpcGVtZXJnZSJ9LAotfTsKLQotc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgZV90b3BvbG9neV9jb250cm9sW10gPSB7Ci0J e0RQVV9STV9UT1BDVExfUkVTRVJWRV9MT0NLLAkicmVzZXJ2ZV9sb2NrIn0sCi0Je0RQVV9STV9U T1BDVExfUkVTRVJWRV9DTEVBUiwJInJlc2VydmVfY2xlYXIifSwKLQl7RFBVX1JNX1RPUENUTF9E U1BQLAkJImRzcHAifSwKLX07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wcm9wX2VudW1fbGlz dCBlX3Bvd2VyX21vZGVbXSA9IHsKLQl7RFBVX01PREVfRFBNU19PTiwJIk9OIn0sCi0Je0RQVV9N T0RFX0RQTVNfTFAxLAkiTFAxIn0sCi0Je0RQVV9NT0RFX0RQTVNfTFAyLAkiTFAyIn0sCi0Je0RQ VV9NT0RFX0RQTVNfT0ZGLAkiT0ZGIn0sCi19OwotCi0jaWZkZWYgQ09ORklHX0RSTV9NU01fRFNJ X1NUQUdJTkcKLXN0YXRpYyBpbnQgZHB1X2JhY2tsaWdodF9kZXZpY2VfdXBkYXRlX3N0YXR1cyhz dHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCi17Ci0JaW50IGJyaWdodG5lc3M7Ci0Jc3RydWN0 IGRzaV9kaXNwbGF5ICpkaXNwbGF5OwotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Ci0J aW50IGJsX2x2bDsKLQlzdHJ1Y3QgZHJtX2V2ZW50IGV2ZW50OwotCi0JYnJpZ2h0bmVzcyA9IGJk LT5wcm9wcy5icmlnaHRuZXNzOwotCi0JaWYgKChiZC0+cHJvcHMucG93ZXIgIT0gRkJfQkxBTktf VU5CTEFOSykgfHwKLQkJCShiZC0+cHJvcHMuc3RhdGUgJiBCTF9DT1JFX0ZCQkxBTkspIHx8Ci0J CQkoYmQtPnByb3BzLnN0YXRlICYgQkxfQ09SRV9TVVNQRU5ERUQpKQotCQlicmlnaHRuZXNzID0g MDsKLQotCWNfY29ubiA9IGJsX2dldF9kYXRhKGJkKTsKLQlkaXNwbGF5ID0gKHN0cnVjdCBkc2lf ZGlzcGxheSAqKSBjX2Nvbm4tPmRpc3BsYXk7Ci0JaWYgKGJyaWdodG5lc3MgPiBkaXNwbGF5LT5w YW5lbC0+YmxfY29uZmlnLmJsX21heF9sZXZlbCkKLQkJYnJpZ2h0bmVzcyA9IGRpc3BsYXktPnBh bmVsLT5ibF9jb25maWcuYmxfbWF4X2xldmVsOwotCi0JLyogbWFwIFVJIGJyaWdodG5lc3MgaW50 byBkcml2ZXIgYmFja2xpZ2h0IGxldmVsIHdpdGggcm91bmRpbmcgKi8KLQlibF9sdmwgPSBtdWx0 X2ZyYWMoYnJpZ2h0bmVzcywgZGlzcGxheS0+cGFuZWwtPmJsX2NvbmZpZy5ibF9tYXhfbGV2ZWws Ci0JCQlkaXNwbGF5LT5wYW5lbC0+YmxfY29uZmlnLmJyaWdodG5lc3NfbWF4X2xldmVsKTsKLQot CWlmICghYmxfbHZsICYmIGJyaWdodG5lc3MpCi0JCWJsX2x2bCA9IDE7Ci0KLQlpZiAoY19jb25u LT5vcHMuc2V0X2JhY2tsaWdodCkgewotCQlldmVudC50eXBlID0gRFJNX0VWRU5UX1NZU19CQUNL TElHSFQ7Ci0JCWV2ZW50Lmxlbmd0aCA9IHNpemVvZih1MzIpOwotCQltc21fbW9kZV9vYmplY3Rf ZXZlbnRfbm90aWZ5KCZjX2Nvbm4tPmJhc2UuYmFzZSwKLQkJCQljX2Nvbm4tPmJhc2UuZGV2LCAm ZXZlbnQsICh1OCAqKSZicmlnaHRuZXNzKTsKLQkJY19jb25uLT5vcHMuc2V0X2JhY2tsaWdodChj X2Nvbm4tPmRpc3BsYXksIGJsX2x2bCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgZHB1X2JhY2tsaWdodF9kZXZpY2VfZ2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9k ZXZpY2UgKmJkKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGJhY2ts aWdodF9vcHMgZHB1X2JhY2tsaWdodF9kZXZpY2Vfb3BzID0gewotCS51cGRhdGVfc3RhdHVzID0g ZHB1X2JhY2tsaWdodF9kZXZpY2VfdXBkYXRlX3N0YXR1cywKLQkuZ2V0X2JyaWdodG5lc3MgPSBk cHVfYmFja2xpZ2h0X2RldmljZV9nZXRfYnJpZ2h0bmVzcywKLX07Ci0KLXN0YXRpYyBpbnQgZHB1 X2JhY2tsaWdodF9zZXR1cChzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uLAotCQkJCQlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9w czsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXk7Ci0Jc3RydWN0IGRzaV9iYWNrbGlnaHRf Y29uZmlnICpibF9jb25maWc7Ci0Jc3RhdGljIGludCBkaXNwbGF5X2NvdW50OwotCWNoYXIgYmxf bm9kZV9uYW1lW0JMX05PREVfTkFNRV9TSVpFXTsKLQotCWlmICghY19jb25uIHx8ICFkZXYgfHwg IWRldi0+ZGV2KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbVxuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0gZWxzZSBpZiAoY19jb25uLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9D T05ORUNUT1JfRFNJKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCW1lbXNldCgmcHJvcHMsIDAsIHNp emVvZihwcm9wcykpOwotCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwotCXByb3BzLnBvd2Vy ID0gRkJfQkxBTktfVU5CTEFOSzsKLQotCWRpc3BsYXkgPSAoc3RydWN0IGRzaV9kaXNwbGF5ICop IGNfY29ubi0+ZGlzcGxheTsKLQlibF9jb25maWcgPSAmZGlzcGxheS0+cGFuZWwtPmJsX2NvbmZp ZzsKLQlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IGJsX2NvbmZpZy0+YnJpZ2h0bmVzc19tYXhfbGV2 ZWw7Ci0JcHJvcHMuYnJpZ2h0bmVzcyA9IGJsX2NvbmZpZy0+YnJpZ2h0bmVzc19tYXhfbGV2ZWw7 Ci0Jc25wcmludGYoYmxfbm9kZV9uYW1lLCBCTF9OT0RFX05BTUVfU0laRSwgInBhbmVsJXUtYmFj a2xpZ2h0IiwKLQkJCQkJCQlkaXNwbGF5X2NvdW50KTsKLQljX2Nvbm4tPmJsX2RldmljZSA9IGJh Y2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoYmxfbm9kZV9uYW1lLCBkZXYtPmRldiwKLQkJCWNfY29u biwgJmRwdV9iYWNrbGlnaHRfZGV2aWNlX29wcywgJnByb3BzKTsKLQlpZiAoSVNfRVJSX09SX05V TEwoY19jb25uLT5ibF9kZXZpY2UpKSB7Ci0JCURQVV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVy IGJhY2tsaWdodDogJWxkXG4iLAotCQkJCSAgICBQVFJfRVJSKGNfY29ubi0+YmxfZGV2aWNlKSk7 Ci0JCWNfY29ubi0+YmxfZGV2aWNlID0gTlVMTDsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCWRp c3BsYXlfY291bnQrKzsKLQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLWludCBkcHVfY29ubmVj dG9yX3RyaWdnZXJfZXZlbnQodm9pZCAqZHJtX2Nvbm5lY3RvciwKLQkJdWludDMyX3QgZXZlbnRf aWR4LCB1aW50MzJfdCBpbnN0YW5jZV9pZHgsCi0JCXVpbnQzMl90IGRhdGEwLCB1aW50MzJfdCBk YXRhMSwKLQkJdWludDMyX3QgZGF0YTIsIHVpbnQzMl90IGRhdGEzKQotewotCXN0cnVjdCBkcHVf Y29ubmVjdG9yICpjX2Nvbm47Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0Jdm9pZCAoKmNi X2Z1bmMpKHVpbnQzMl90IGV2ZW50X2lkeCwKLQkJCXVpbnQzMl90IGluc3RhbmNlX2lkeCwgdm9p ZCAqdXNyLAotCQkJdWludDMyX3QgZGF0YTAsIHVpbnQzMl90IGRhdGExLAotCQkJdWludDMyX3Qg ZGF0YTIsIHVpbnQzMl90IGRhdGEzKTsKLQl2b2lkICp1c3I7Ci0JaW50IHJjID0gMDsKLQotCS8q Ci0JICogVGhpcyBmdW5jdGlvbiBtYXkgcG90ZW50aWFsbHkgYmUgY2FsbGVkIGZyb20gYW4gSVNS IGNvbnRleHQsIHNvCi0JICogYXZvaWQgZXhjZXNzaXZlIGxvZ2dpbmcvZXRjLgotCSAqLwotCWlm ICghZHJtX2Nvbm5lY3RvcikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZWxzZSBpZiAoZXZlbnRfaWR4 ID49IERQVV9DT05OX0VWRU5UX0NPVU5UKQotCQlyZXR1cm4gLUVJTlZBTDsKLQljX2Nvbm4gPSB0 b19kcHVfY29ubmVjdG9yKGRybV9jb25uZWN0b3IpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNf Y29ubi0+ZXZlbnRfbG9jaywgaXJxX2ZsYWdzKTsKLQljYl9mdW5jID0gY19jb25uLT5ldmVudF90 YWJsZVtldmVudF9pZHhdLmNiX2Z1bmM7Ci0JdXNyID0gY19jb25uLT5ldmVudF90YWJsZVtldmVu dF9pZHhdLnVzcjsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjX2Nvbm4tPmV2ZW50X2xvY2ss IGlycV9mbGFncyk7Ci0KLQlpZiAoY2JfZnVuYykKLQkJY2JfZnVuYyhldmVudF9pZHgsIGluc3Rh bmNlX2lkeCwgdXNyLAotCQkJZGF0YTAsIGRhdGExLCBkYXRhMiwgZGF0YTMpOwotCWVsc2UKLQkJ cmMgPSAtRUFHQUlOOwotCi0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHB1X2Nvbm5lY3Rvcl9yZWdp c3Rlcl9ldmVudChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQl1aW50MzJfdCBl dmVudF9pZHgsCi0JCXZvaWQgKCpjYl9mdW5jKSh1aW50MzJfdCBldmVudF9pZHgsCi0JCQl1aW50 MzJfdCBpbnN0YW5jZV9pZHgsIHZvaWQgKnVzciwKLQkJCXVpbnQzMl90IGRhdGEwLCB1aW50MzJf dCBkYXRhMSwKLQkJCXVpbnQzMl90IGRhdGEyLCB1aW50MzJfdCBkYXRhMyksCi0JCXZvaWQgKnVz cikKLXsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCXVuc2lnbmVkIGxvbmcgaXJx X2ZsYWdzOwotCi0JaWYgKCFjb25uZWN0b3IpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNvbm5l Y3RvclxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZSBpZiAoZXZlbnRfaWR4ID49IERQ VV9DT05OX0VWRU5UX0NPVU5UKSB7Ci0JCURQVV9FUlJPUigiY29ubiVkLCBpbnZhbGlkIGV2ZW50 ICVkXG4iLAotCQkJCWNvbm5lY3Rvci0+YmFzZS5pZCwgZXZlbnRfaWR4KTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQotCXNw aW5fbG9ja19pcnFzYXZlKCZjX2Nvbm4tPmV2ZW50X2xvY2ssIGlycV9mbGFncyk7Ci0JY19jb25u LT5ldmVudF90YWJsZVtldmVudF9pZHhdLmNiX2Z1bmMgPSBjYl9mdW5jOwotCWNfY29ubi0+ZXZl bnRfdGFibGVbZXZlbnRfaWR4XS51c3IgPSB1c3I7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm Y19jb25uLT5ldmVudF9sb2NrLCBpcnFfZmxhZ3MpOwotCi0JLyogb3B0aW9uYWxseSBub3RpZnkg ZGlzcGxheSBvZiBldmVudCByZWdpc3RyYXRpb24gKi8KLQlpZiAoY19jb25uLT5vcHMuZW5hYmxl X2V2ZW50ICYmIGNfY29ubi0+ZGlzcGxheSkKLQkJY19jb25uLT5vcHMuZW5hYmxlX2V2ZW50KGNv bm5lY3RvciwgZXZlbnRfaWR4LAotCQkJCWNiX2Z1bmMgIT0gTlVMTCwgY19jb25uLT5kaXNwbGF5 KTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBkcHVfY29ubmVjdG9yX3VucmVnaXN0ZXJfZXZlbnQo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJdWludDMyX3QgZXZlbnRfaWR4KQot ewotCSh2b2lkKWRwdV9jb25uZWN0b3JfcmVnaXN0ZXJfZXZlbnQoY29ubmVjdG9yLCBldmVudF9p ZHgsIDAsIDApOwotfQotCi0jaWZkZWYgQ09ORklHX0RSTV9NU01fRFNJX1NUQUdJTkcKLXN0YXRp YyB1MzIgZGl0aGVyX21hdHJpeFtESVRIRVJfTUFUUklYX1NaXSA9IHsKLQkxNSwgNywgMTMsIDUs IDMsIDExLCAxLCA5LCAxMiwgNCwgMTQsIDYsIDAsIDgsIDIsIDEwCi19OwotCi1zdGF0aWMgaW50 IF9kcHVfY29ubmVjdG9yX2dldF9kZWZhdWx0X2RpdGhlcl9jZmdfdjEoCi0JCXN0cnVjdCBkcHVf Y29ubmVjdG9yICpjX2Nvbm4sIHZvaWQgKmNmZykKLXsKLQlzdHJ1Y3QgZHJtX21zbV9kaXRoZXIg KmRpdGhlcl9jZmcgPSAoc3RydWN0IGRybV9tc21fZGl0aGVyICopY2ZnOwotCWVudW0gZHNpX3Bp eGVsX2Zvcm1hdCBkc3RfZm9ybWF0ID0gRFNJX1BJWEVMX0ZPUk1BVF9NQVg7Ci0KLQlpZiAoIWNf Y29ubiB8fCAhY2ZnKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChzKSwgY19jb25u ICVwSywgY2ZnICVwS1xuIiwKLQkJCQljX2Nvbm4sIGNmZyk7Ci0JCXJldHVybiAtRUlOVkFMOwot CX0KLQotCWlmICghY19jb25uLT5vcHMuZ2V0X2RzdF9mb3JtYXQpIHsKLQkJRFBVX0RFQlVHKCJn ZXRfZHN0X2Zvcm1hdCBpcyB1bmF2YWlsYWJsZVxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWRz dF9mb3JtYXQgPSBjX2Nvbm4tPm9wcy5nZXRfZHN0X2Zvcm1hdChjX2Nvbm4tPmRpc3BsYXkpOwot CXN3aXRjaCAoZHN0X2Zvcm1hdCkgewotCWNhc2UgRFNJX1BJWEVMX0ZPUk1BVF9SR0I4ODg6Ci0J CWRpdGhlcl9jZmctPmMwX2JpdGRlcHRoID0gODsKLQkJZGl0aGVyX2NmZy0+YzFfYml0ZGVwdGgg PSA4OwotCQlkaXRoZXJfY2ZnLT5jMl9iaXRkZXB0aCA9IDg7Ci0JCWRpdGhlcl9jZmctPmMzX2Jp dGRlcHRoID0gODsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfUElYRUxfRk9STUFUX1JHQjY2NjoKLQlj YXNlIERTSV9QSVhFTF9GT1JNQVRfUkdCNjY2X0xPT1NFOgotCQlkaXRoZXJfY2ZnLT5jMF9iaXRk ZXB0aCA9IDY7Ci0JCWRpdGhlcl9jZmctPmMxX2JpdGRlcHRoID0gNjsKLQkJZGl0aGVyX2NmZy0+ YzJfYml0ZGVwdGggPSA2OwotCQlkaXRoZXJfY2ZnLT5jM19iaXRkZXB0aCA9IDY7Ci0JCWJyZWFr OwotCWRlZmF1bHQ6Ci0JCURQVV9ERUJVRygibm8gZGVmYXVsdCBkaXRoZXIgY29uZmlnIGZvciBk c3RfZm9ybWF0ICVkXG4iLAotCQkJZHN0X2Zvcm1hdCk7Ci0JCXJldHVybiAtRU5PREFUQTsKLQl9 Ci0KLQltZW1jcHkoJmRpdGhlcl9jZmctPm1hdHJpeCwgZGl0aGVyX21hdHJpeCwKLQkJCXNpemVv Zih1MzIpICogRElUSEVSX01BVFJJWF9TWik7Ci0JZGl0aGVyX2NmZy0+dGVtcG9yYWxfZW4gPSAw OwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfZHB1X2Nvbm5lY3Rvcl9pbnN0YWxsX2Rp dGhlcl9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQlzdHJ1Y3QgZHB1X2ttcyAq ZHB1X2ttcywgc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubikKLXsKLQljaGFyIHByb3BfbmFt ZVtEUk1fUFJPUF9OQU1FX0xFTl07Ci0Jc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZyA9IE5V TEw7Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iX3B0cjsKLQl2b2lkICpjZmc7Ci0J aW50IHJldCA9IDA7Ci0JdTMyIHZlcnNpb24gPSAwLCBsZW4gPSAwOwotCWJvb2wgZGVmYWx1dF9k aXRoZXJfbmVlZGVkID0gZmFsc2U7Ci0KLQlpZiAoIWRldiB8fCAhZHB1X2ttcyB8fCAhY19jb25u KSB7Ci0JCURQVV9FUlJPUigiaW52bGQgYXJncyAocyksIGRldiAlcEssIGRwdV9rbXMgJXBLLCBj X2Nvbm4gJXBLXG4iLAotCQkJCWRldiwgZHB1X2ttcywgY19jb25uKTsKLQkJcmV0dXJuOwotCX0K LQotCWNhdGFsb2cgPSBkcHVfa21zLT5jYXRhbG9nOwotCXZlcnNpb24gPSBEUFVfQ09MT1JfUFJP Q0VTU19NQUpPUigKLQkJCWNhdGFsb2ctPnBpbmdwb25nWzBdLnNibGstPmRpdGhlci52ZXJzaW9u KTsKLQlzbnByaW50Zihwcm9wX25hbWUsIEFSUkFZX1NJWkUocHJvcF9uYW1lKSwgIiVzJWQiLAot CQkJIkRQVV9QUF9ESVRIRVJfViIsIHZlcnNpb24pOwotCXN3aXRjaCAodmVyc2lvbikgewotCWNh c2UgMToKLQkJbXNtX3Byb3BlcnR5X2luc3RhbGxfYmxvYigmY19jb25uLT5wcm9wZXJ0eV9pbmZv LCBwcm9wX25hbWUsCi0JCQlEUk1fTU9ERV9QUk9QX0JMT0IsCi0JCQlDT05ORUNUT1JfUFJPUF9Q UF9ESVRIRVIpOwotCQlsZW4gPSBzaXplb2Yoc3RydWN0IGRybV9tc21fZGl0aGVyKTsKLQkJY2Zn ID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCQlpZiAoIWNmZykKLQkJCXJldHVybjsKLQot CQlyZXQgPSBfZHB1X2Nvbm5lY3Rvcl9nZXRfZGVmYXVsdF9kaXRoZXJfY2ZnX3YxKGNfY29ubiwg Y2ZnKTsKLQkJaWYgKCFyZXQpCi0JCQlkZWZhbHV0X2RpdGhlcl9uZWVkZWQgPSB0cnVlOwotCQli cmVhazsKLQlkZWZhdWx0OgotCQlEUFVfRVJST1IoInVuc3VwcG9ydGVkIGRpdGhlciB2ZXJzaW9u ICVkXG4iLCB2ZXJzaW9uKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChkZWZhbHV0X2RpdGhlcl9u ZWVkZWQpIHsKLQkJYmxvYl9wdHIgPSBkcm1fcHJvcGVydHlfY3JlYXRlX2Jsb2IoZGV2LCBsZW4s IGNmZyk7Ci0JCWlmIChJU19FUlJfT1JfTlVMTChibG9iX3B0cikpCi0JCQlnb3RvIGV4aXQ7Ci0J CWNfY29ubi0+YmxvYl9kaXRoZXIgPSBibG9iX3B0cjsKLQl9Ci1leGl0OgotCWtmcmVlKGNmZyk7 Ci19Ci0jZW5kaWYKLQotaW50IGRwdV9jb25uZWN0b3JfZ2V0X2RpdGhlcl9jZmcoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm4sCi0JCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUs IHZvaWQgKipjZmcsCi0JCQlzaXplX3QgKmxlbikKLXsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAq Y19jb25uID0gTlVMTDsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9zdGF0ZSAqY19zdGF0ZSA9IE5V TEw7Ci0Jc2l6ZV90IGRpdGhlcl9zeiA9IDA7Ci0KLQlpZiAoIWNvbm4gfHwgIXN0YXRlIHx8ICEo KmNmZykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY19jb25uID0gdG9fZHB1X2Nvbm5lY3Rvcihj b25uKTsKLQljX3N0YXRlID0gdG9fZHB1X2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSk7Ci0KLQkvKiB0 cnkgdG8gZ2V0IHVzZXIgY29uZmlnIGRhdGEgZmlyc3QgKi8KLQkqY2ZnID0gbXNtX3Byb3BlcnR5 X2dldF9ibG9iKCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sCi0JCQkJCSZjX3N0YXRlLT5wcm9wZXJ0 eV9zdGF0ZSwKLQkJCQkJJmRpdGhlcl9zeiwKLQkJCQkJQ09OTkVDVE9SX1BST1BfUFBfRElUSEVS KTsKLQkvKiBpZiB1c2VyIGNvbmZpZyBkYXRhIGRvZXNuJ3QgZXhpc3QsIHVzZSBkZWZhdWx0IGRp dGhlciBibG9iICovCi0JaWYgKCpjZmcgPT0gTlVMTCAmJiBjX2Nvbm4tPmJsb2JfZGl0aGVyKSB7 Ci0JCSpjZmcgPSAmY19jb25uLT5ibG9iX2RpdGhlci0+ZGF0YTsKLQkJZGl0aGVyX3N6ID0gY19j b25uLT5ibG9iX2RpdGhlci0+bGVuZ3RoOwotCX0KLQkqbGVuID0gZGl0aGVyX3N6OwotCXJldHVy biAwOwotfQotCi1pbnQgZHB1X2Nvbm5lY3Rvcl9nZXRfaW5mbyhzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLAotCQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyAqaW5mbykKLXsKLQlzdHJ1 Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCi0JaWYgKCFjb25uZWN0b3IgfHwgIWluZm8pIHsK LQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpLCBjb25uICVwSywgaW5mbyAlcEtcbiIs Ci0JCQkJY29ubmVjdG9yLCBpbmZvKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY19jb25u ID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCi0JaWYgKCFjX2Nvbm4tPmRpc3BsYXkg fHwgIWNfY29ubi0+b3BzLmdldF9pbmZvKSB7Ci0JCURQVV9FUlJPUigiZGlzcGxheSBpbmZvIG5v dCBzdXBwb3J0ZWQgZm9yICVwS1xuIiwKLQkJCQljX2Nvbm4tPmRpc3BsYXkpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gY19jb25uLT5vcHMuZ2V0X2luZm8oaW5mbywgY19jb25u LT5kaXNwbGF5KTsKLX0KLQotc3RhdGljIGludCBfZHB1X2Nvbm5lY3Rvcl91cGRhdGVfcG93ZXJf bG9ja2VkKHN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm4pCi17Ci0Jc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcjsKLQl2b2lkICpkaXNwbGF5OwotCWludCAoKnNldF9wb3dlcikoc3Ry dWN0IGRybV9jb25uZWN0b3IgKiwgaW50LCB2b2lkICopOwotCWludCBtb2RlLCByYyA9IDA7Ci0K LQlpZiAoIWNfY29ubikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JY29ubmVjdG9yID0gJmNfY29ubi0+ YmFzZTsKLQotCXN3aXRjaCAoY19jb25uLT5kcG1zX21vZGUpIHsKLQljYXNlIERSTV9NT0RFX0RQ TVNfT046Ci0JCW1vZGUgPSBjX2Nvbm4tPmxwX21vZGU7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX01P REVfRFBNU19TVEFOREJZOgotCQltb2RlID0gRFBVX01PREVfRFBNU19TVEFOREJZOwotCQlicmVh azsKLQljYXNlIERSTV9NT0RFX0RQTVNfU1VTUEVORDoKLQkJbW9kZSA9IERQVV9NT0RFX0RQTVNf U1VTUEVORDsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fTU9ERV9EUE1TX09GRjoKLQkJbW9kZSA9IERQ VV9NT0RFX0RQTVNfT0ZGOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQltb2RlID0gY19jb25uLT5s cF9tb2RlOwotCQlEUFVfRVJST1IoImNvbm4gJWQgZHBtcyBzZXQgdG8gdW5yZWNvZ25pemVkIG1v ZGUgJWRcbiIsCi0JCQkJY29ubmVjdG9yLT5iYXNlLmlkLCBtb2RlKTsKLQkJYnJlYWs7Ci0JfQot Ci0JRFBVX0VWVDMyKGNvbm5lY3Rvci0+YmFzZS5pZCwgY19jb25uLT5kcG1zX21vZGUsIGNfY29u bi0+bHBfbW9kZSwgbW9kZSk7Ci0JRFBVX0RFQlVHKCJjb25uICVkIC0gZHBtcyAlZCwgbHAgJWQs IHBhbmVsICVkXG4iLCBjb25uZWN0b3ItPmJhc2UuaWQsCi0JCQljX2Nvbm4tPmRwbXNfbW9kZSwg Y19jb25uLT5scF9tb2RlLCBtb2RlKTsKLQotCWlmIChtb2RlICE9IGNfY29ubi0+bGFzdF9wYW5l bF9wb3dlcl9tb2RlICYmIGNfY29ubi0+b3BzLnNldF9wb3dlcikgewotCQlkaXNwbGF5ID0gY19j b25uLT5kaXNwbGF5OwotCQlzZXRfcG93ZXIgPSBjX2Nvbm4tPm9wcy5zZXRfcG93ZXI7Ci0KLQkJ bXV0ZXhfdW5sb2NrKCZjX2Nvbm4tPmxvY2spOwotCQlyYyA9IHNldF9wb3dlcihjb25uZWN0b3Is IG1vZGUsIGRpc3BsYXkpOwotCQltdXRleF9sb2NrKCZjX2Nvbm4tPmxvY2spOwotCX0KLQljX2Nv bm4tPmxhc3RfcGFuZWxfcG93ZXJfbW9kZSA9IG1vZGU7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLWlu dCBkcHVfY29ubmVjdG9yX3ByZV9raWNrb2ZmKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsKLQlzdHJ1Y3QgZHB1X2Nvbm5l Y3Rvcl9zdGF0ZSAqY19zdGF0ZTsKLQlpbnQgaWR4LCByYyA9IDA7Ci0KLQlpZiAoIWNvbm5lY3Rv cikgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRcbiIpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQljX2Nvbm4gPSB0b19kcHVfY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0JY19zdGF0 ZSA9IHRvX2RwdV9jb25uZWN0b3Jfc3RhdGUoY29ubmVjdG9yLT5zdGF0ZSk7Ci0KLQlpZiAoIWNf Y29ubi0+ZGlzcGxheSkgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRcbiIpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0jaWZkZWYgQ09ORklHX0RSTV9NU01fRFNJX1NUQUdJTkcKLQlp ZiAoY19jb25uLT5vcHMuc2V0X2JhY2tsaWdodCkgewotCQlEUFVfREVCVUcoImNvbm4lZDogU2V0 IGJhY2tsaWdodCB0byAyNTVcbiIsIGNvbm5lY3Rvci0+YmFzZS5pZCk7Ci0JCWNfY29ubi0+b3Bz LnNldF9iYWNrbGlnaHQoY19jb25uLT5kaXNwbGF5LCAyNTUpOwotCX0KLSNlbmRpZgotCi0Jd2hp bGUgKChpZHggPSBtc21fcHJvcGVydHlfcG9wX2RpcnR5KCZjX2Nvbm4tPnByb3BlcnR5X2luZm8s Ci0JCQkJCSZjX3N0YXRlLT5wcm9wZXJ0eV9zdGF0ZSkpID49IDApIHsKLQkJc3dpdGNoIChpZHgp IHsKLQkJY2FzZSBDT05ORUNUT1JfUFJPUF9MUDoKLQkJCW11dGV4X2xvY2soJmNfY29ubi0+bG9j ayk7Ci0JCQljX2Nvbm4tPmxwX21vZGUgPSBkcHVfY29ubmVjdG9yX2dldF9wcm9wZXJ0eSgKLQkJ CQkJY29ubmVjdG9yLT5zdGF0ZSwgQ09OTkVDVE9SX1BST1BfTFApOwotCQkJX2RwdV9jb25uZWN0 b3JfdXBkYXRlX3Bvd2VyX2xvY2tlZChjX2Nvbm4pOwotCQkJbXV0ZXhfdW5sb2NrKCZjX2Nvbm4t PmxvY2spOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBub3RoaW5nIHRvIGRvIGZvciBt b3N0IHByb3BlcnRpZXMgKi8KLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JRFBVX0VWVDMyX1ZFUkJP U0UoY29ubmVjdG9yLT5iYXNlLmlkKTsKLQotCXJldHVybiByYzsKLX0KLQotdm9pZCBkcHVfY29u bmVjdG9yX2Nsa19jdHJsKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZW5h YmxlKQotewotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RTSV9TVEFHSU5HCi0Jc3RydWN0IGRwdV9j b25uZWN0b3IgKmNfY29ubjsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXk7Ci0JdTMyIHN0 YXRlID0gZW5hYmxlID8gRFNJX0NMS19PTiA6IERTSV9DTEtfT0ZGOwotCi0JaWYgKCFjb25uZWN0 b3IpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNvbm5lY3RvclxuIik7Ci0JCXJldHVybjsKLQl9 Ci0KLQljX2Nvbm4gPSB0b19kcHVfY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0JZGlzcGxheSA9IChz dHJ1Y3QgZHNpX2Rpc3BsYXkgKikgY19jb25uLT5kaXNwbGF5OwotCi0JaWYgKGRpc3BsYXkgJiYg Y19jb25uLT5vcHMuY2xrX2N0cmwpCi0JCWNfY29ubi0+b3BzLmNsa19jdHJsKGRpc3BsYXktPm1k cF9jbGtfaGFuZGxlLAotCQkJCURTSV9BTExfQ0xLUywgc3RhdGUpOwotI2VuZGlmCi19Ci0KLXN0 YXRpYyB2b2lkIGRwdV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQotewotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Ci0KLQlpZiAoIWNvbm5l Y3RvcikgewotCQlEUFVfRVJST1IoImludmFsaWQgY29ubmVjdG9yXG4iKTsKLQkJcmV0dXJuOwot CX0KLQotCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQotCWlmIChjX2Nv bm4tPm9wcy5wdXRfbW9kZXMpCi0JCWNfY29ubi0+b3BzLnB1dF9tb2Rlcyhjb25uZWN0b3IsIGNf Y29ubi0+ZGlzcGxheSk7Ci0KLQlpZiAoY19jb25uLT5ibG9iX2NhcHMpCi0JCWRybV9wcm9wZXJ0 eV9ibG9iX3B1dChjX2Nvbm4tPmJsb2JfY2Fwcyk7Ci0JaWYgKGNfY29ubi0+YmxvYl9oZHIpCi0J CWRybV9wcm9wZXJ0eV9ibG9iX3B1dChjX2Nvbm4tPmJsb2JfaGRyKTsKLQlpZiAoY19jb25uLT5i bG9iX2RpdGhlcikKLQkJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KGNfY29ubi0+YmxvYl9kaXRoZXIp OwotCW1zbV9wcm9wZXJ0eV9kZXN0cm95KCZjX2Nvbm4tPnByb3BlcnR5X2luZm8pOwotCi0JaWYg KGNfY29ubi0+YmxfZGV2aWNlKQotCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoY19jb25u LT5ibF9kZXZpY2UpOwotCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOwotCW11 dGV4X2Rlc3Ryb3koJmNfY29ubi0+bG9jayk7Ci0JZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5l Y3Rvcik7Ci0Ja2ZyZWUoY19jb25uKTsKLX0KLQotLyoqCi0gKiBfZHB1X2Nvbm5lY3Rvcl9kZXN0 cm95X2ZiIC0gY2xlYW4gdXAgY29ubmVjdG9yIHN0YXRlJ3Mgb3V0X2ZiIGJ1ZmZlcgotICogQGNf Y29ubjogUG9pbnRlciB0byBkcHUgY29ubmVjdG9yIHN0cnVjdHVyZQotICogQGNfc3RhdGU6IFBv aW50ZXIgdG8gZHB1IGNvbm5lY3RvciBzdGF0ZSBzdHJ1Y3R1cmUKLSAqLwotc3RhdGljIHZvaWQg X2RwdV9jb25uZWN0b3JfZGVzdHJveV9mYihzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uLAot CQlzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9zdGF0ZSAqY19zdGF0ZSkKLXsKLQlpZiAoIWNfc3RhdGUg fHwgIWNfc3RhdGUtPm91dF9mYikgewotCQlEUFVfRVJST1IoImludmFsaWQgc3RhdGUgJXBLXG4i LCBjX3N0YXRlKTsKLQkJcmV0dXJuOwotCX0KLQotCWRybV9mcmFtZWJ1ZmZlcl9wdXQoY19zdGF0 ZS0+b3V0X2ZiKTsKLQljX3N0YXRlLT5vdXRfZmIgPSBOVUxMOwotCi0JaWYgKGNfY29ubikKLQkJ Y19zdGF0ZS0+cHJvcGVydHlfdmFsdWVzW0NPTk5FQ1RPUl9QUk9QX09VVF9GQl0udmFsdWUgPQot CQkJbXNtX3Byb3BlcnR5X2dldF9kZWZhdWx0KCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sCi0JCQkJ CUNPTk5FQ1RPUl9QUk9QX09VVF9GQik7Ci0JZWxzZQotCQljX3N0YXRlLT5wcm9wZXJ0eV92YWx1 ZXNbQ09OTkVDVE9SX1BST1BfT1VUX0ZCXS52YWx1ZSA9IH4wOwotfQotCi1zdGF0aWMgdm9pZCBk cHVfY29ubmVjdG9yX2F0b21pY19kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsCi0JCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSkKLXsKLQlzdHJ1 Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uID0gTlVMTDsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9z dGF0ZSAqY19zdGF0ZSA9IE5VTEw7Ci0KLQlpZiAoIXN0YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52 YWxpZCBzdGF0ZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIFRoZSBiYXNlIERSTSBm cmFtZXdvcmsgY3VycmVudGx5IGFsd2F5cyBwYXNzZXMgaW4gYSBOVUxMCi0JICogY29ubmVjdG9y IHBvaW50ZXIuIFRoaXMgaXMgbm90IGNvcnJlY3QsIGJ1dCBhdHRlbXB0IHRvCi0JICogaGFuZGxl IHRoYXQgY2FzZSBhcyBtdWNoIGFzIHBvc3NpYmxlLgotCSAqLwotCWlmIChjb25uZWN0b3IpCi0J CWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQljX3N0YXRlID0gdG9fZHB1 X2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSk7Ci0KLQlpZiAoY19zdGF0ZS0+b3V0X2ZiKQotCQlfZHB1 X2Nvbm5lY3Rvcl9kZXN0cm95X2ZiKGNfY29ubiwgY19zdGF0ZSk7Ci0KLQlpZiAoIWNfY29ubikg ewotCQlrZnJlZShjX3N0YXRlKTsKLQl9IGVsc2UgewotCQkvKiBkZXN0cm95IHZhbHVlIGhlbHBl ciAqLwotCQltc21fcHJvcGVydHlfZGVzdHJveV9zdGF0ZSgmY19jb25uLT5wcm9wZXJ0eV9pbmZv LCBjX3N0YXRlLAotCQkJCSZjX3N0YXRlLT5wcm9wZXJ0eV9zdGF0ZSk7Ci0JfQotfQotCi1zdGF0 aWMgdm9pZCBkcHVfY29ubmVjdG9yX2F0b21pY19yZXNldChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yKQotewotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Ci0Jc3RydWN0IGRw dV9jb25uZWN0b3Jfc3RhdGUgKmNfc3RhdGU7Ci0KLQlpZiAoIWNvbm5lY3RvcikgewotCQlEUFVf RVJST1IoImludmFsaWQgY29ubmVjdG9yXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWNfY29ubiA9 IHRvX2RwdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQotCWlmIChjb25uZWN0b3ItPnN0YXRlKSB7 Ci0JCWRwdV9jb25uZWN0b3JfYXRvbWljX2Rlc3Ryb3lfc3RhdGUoY29ubmVjdG9yLCBjb25uZWN0 b3ItPnN0YXRlKTsKLQkJY29ubmVjdG9yLT5zdGF0ZSA9IDA7Ci0JfQotCi0JY19zdGF0ZSA9IG1z bV9wcm9wZXJ0eV9hbGxvY19zdGF0ZSgmY19jb25uLT5wcm9wZXJ0eV9pbmZvKTsKLQlpZiAoIWNf c3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJzdGF0ZSBhbGxvYyBmYWlsZWRcbiIpOwotCQlyZXR1cm47 Ci0JfQotCi0JLyogcmVzZXQgdmFsdWUgaGVscGVyLCB6ZXJvIG91dCBzdGF0ZSBzdHJ1Y3R1cmUg YW5kIHJlc2V0IHByb3BlcnRpZXMgKi8KLQltc21fcHJvcGVydHlfcmVzZXRfc3RhdGUoJmNfY29u bi0+cHJvcGVydHlfaW5mbywgY19zdGF0ZSwKLQkJCSZjX3N0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwK LQkJCWNfc3RhdGUtPnByb3BlcnR5X3ZhbHVlcyk7Ci0KLQljX3N0YXRlLT5iYXNlLmNvbm5lY3Rv ciA9IGNvbm5lY3RvcjsKLQljb25uZWN0b3ItPnN0YXRlID0gJmNfc3RhdGUtPmJhc2U7Ci19Ci0K LXN0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqCi1kcHVfY29ubmVjdG9yX2F0b21p Y19kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlz dHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCXN0cnVjdCBkcHVfY29ubmVjdG9yX3N0YXRl ICpjX3N0YXRlLCAqY19vbGRzdGF0ZTsKLQotCWlmICghY29ubmVjdG9yIHx8ICFjb25uZWN0b3It PnN0YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjb25uZWN0b3IgJXBLXG4iLCBjb25uZWN0 b3IpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQljX2Nvbm4gPSB0b19kcHVfY29ubmVjdG9yKGNv bm5lY3Rvcik7Ci0JY19vbGRzdGF0ZSA9IHRvX2RwdV9jb25uZWN0b3Jfc3RhdGUoY29ubmVjdG9y LT5zdGF0ZSk7Ci0JY19zdGF0ZSA9IG1zbV9wcm9wZXJ0eV9hbGxvY19zdGF0ZSgmY19jb25uLT5w cm9wZXJ0eV9pbmZvKTsKLQlpZiAoIWNfc3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJzdGF0ZSBhbGxv YyBmYWlsZWRcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQkvKiBkdXBsaWNhdGUgdmFsdWUg aGVscGVyICovCi0JbXNtX3Byb3BlcnR5X2R1cGxpY2F0ZV9zdGF0ZSgmY19jb25uLT5wcm9wZXJ0 eV9pbmZvLAotCQkJY19vbGRzdGF0ZSwgY19zdGF0ZSwKLQkJCSZjX3N0YXRlLT5wcm9wZXJ0eV9z dGF0ZSwgY19zdGF0ZS0+cHJvcGVydHlfdmFsdWVzKTsKLQotCS8qIGFkZGl0aW9uYWwgaGFuZGxp bmcgZm9yIGRybSBmcmFtZWJ1ZmZlciBvYmplY3RzICovCi0JaWYgKGNfc3RhdGUtPm91dF9mYikK LQkJZHJtX2ZyYW1lYnVmZmVyX2dldChjX3N0YXRlLT5vdXRfZmIpOwotCi0JcmV0dXJuICZjX3N0 YXRlLT5iYXNlOwotfQotCi1zdGF0aWMgaW50IF9kcHVfY29ubmVjdG9yX3VwZGF0ZV9ibF9zY2Fs ZShzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uLAotCQlpbnQgaWR4LAotCQl1aW50NjRfdCB2 YWx1ZSkKLXsKLSNpZmRlZiBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORwotCXN0cnVjdCBkc2lf ZGlzcGxheSAqZHNpX2Rpc3BsYXkgPSBjX2Nvbm4tPmRpc3BsYXk7Ci0Jc3RydWN0IGRzaV9iYWNr bGlnaHRfY29uZmlnICpibF9jb25maWc7Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX2Rpc3Bs YXkgfHwgIWRzaV9kaXNwbGF5LT5wYW5lbCkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zKHMp IGRzaV9kaXNwbGF5ICVwSywgcGFuZWwgJXBLXG4iLAotCQkJZHNpX2Rpc3BsYXksCi0JCQkoKGRz aV9kaXNwbGF5KSA/IGRzaV9kaXNwbGF5LT5wYW5lbCA6IE5VTEwpKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JYmxfY29uZmlnID0gJmRzaV9kaXNwbGF5LT5wYW5lbC0+YmxfY29uZmlnOwot CWlmIChpZHggPT0gQ09OTkVDVE9SX1BST1BfQkxfU0NBTEUpIHsKLQkJYmxfY29uZmlnLT5ibF9z Y2FsZSA9IHZhbHVlOwotCQlpZiAodmFsdWUgPiBNQVhfQkxfU0NBTEVfTEVWRUwpCi0JCQlibF9j b25maWctPmJsX3NjYWxlID0gTUFYX0JMX1NDQUxFX0xFVkVMOwotCQlEUFVfREVCVUcoInNldCB0 byBwYW5lbDogYmxfc2NhbGUgPSAldSwgYmxfbGV2ZWwgPSAldVxuIiwKLQkJCWJsX2NvbmZpZy0+ Ymxfc2NhbGUsIGJsX2NvbmZpZy0+YmxfbGV2ZWwpOwotCQlyYyA9IGNfY29ubi0+b3BzLnNldF9i YWNrbGlnaHQoZHNpX2Rpc3BsYXksCi0JCQkJCSAgICAgICBibF9jb25maWctPmJsX2xldmVsKTsK LQl9IGVsc2UgaWYgKGlkeCA9PSBDT05ORUNUT1JfUFJPUF9BRF9CTF9TQ0FMRSkgewotCQlibF9j b25maWctPmJsX3NjYWxlX2FkID0gdmFsdWU7Ci0JCWlmICh2YWx1ZSA+IE1BWF9BRF9CTF9TQ0FM RV9MRVZFTCkKLQkJCWJsX2NvbmZpZy0+Ymxfc2NhbGVfYWQgPSBNQVhfQURfQkxfU0NBTEVfTEVW RUw7Ci0JCURQVV9ERUJVRygic2V0IHRvIHBhbmVsOiBibF9zY2FsZV9hZCA9ICV1LCBibF9sZXZl bCA9ICV1XG4iLAotCQkJYmxfY29uZmlnLT5ibF9zY2FsZV9hZCwgYmxfY29uZmlnLT5ibF9sZXZl bCk7Ci0JCXJjID0gY19jb25uLT5vcHMuc2V0X2JhY2tsaWdodChkc2lfZGlzcGxheSwKLQkJCQkJ ICAgICAgIGJsX2NvbmZpZy0+YmxfbGV2ZWwpOwotCX0KLQlyZXR1cm4gcmM7Ci0jZWxzZQotCXJl dHVybiAwOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgZHB1X2Nvbm5lY3Rvcl9hdG9taWNfc2V0 X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXN0cnVjdCBkcm1f Y29ubmVjdG9yX3N0YXRlICpzdGF0ZSwKLQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHks Ci0JCXVpbnQ2NF90IHZhbCkKLXsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCXN0 cnVjdCBkcHVfY29ubmVjdG9yX3N0YXRlICpjX3N0YXRlOwotCWludCBpZHgsIHJjOwotCi0JaWYg KCFjb25uZWN0b3IgfHwgIXN0YXRlIHx8ICFwcm9wZXJ0eSkgewotCQlEUFVfRVJST1IoImludmFs aWQgYXJndW1lbnQocyksIGNvbm4gJXBLLCBzdGF0ZSAlcEssIHBycCAlcEtcbiIsCi0JCQkJY29u bmVjdG9yLCBzdGF0ZSwgcHJvcGVydHkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljX2Nv bm4gPSB0b19kcHVfY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0JY19zdGF0ZSA9IHRvX2RwdV9jb25u ZWN0b3Jfc3RhdGUoc3RhdGUpOwotCi0JLyogZ2VuZXJpYyBwcm9wZXJ0eSBoYW5kbGluZyAqLwot CXJjID0gbXNtX3Byb3BlcnR5X2F0b21pY19zZXQoJmNfY29ubi0+cHJvcGVydHlfaW5mbywKLQkJ CSZjX3N0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwgcHJvcGVydHksIHZhbCk7Ci0JaWYgKHJjKQotCQln b3RvIGVuZDsKLQotCS8qIGNvbm5lY3Rvci1zcGVjaWZpYyBwcm9wZXJ0eSBoYW5kbGluZyAqLwot CWlkeCA9IG1zbV9wcm9wZXJ0eV9pbmRleCgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLCBwcm9wZXJ0 eSk7Ci0Jc3dpdGNoIChpZHgpIHsKLQljYXNlIENPTk5FQ1RPUl9QUk9QX09VVF9GQjoKLQkJLyog Y2xlYXIgb2xkIGZiLCBpZiBwcmVzZW50ICovCi0JCWlmIChjX3N0YXRlLT5vdXRfZmIpCi0JCQlf ZHB1X2Nvbm5lY3Rvcl9kZXN0cm95X2ZiKGNfY29ubiwgY19zdGF0ZSk7Ci0KLQkJLyogY29udmVy dCBmYiB2YWwgdG8gZHJtIGZyYW1lYnVmZmVyIGFuZCBwcmVwYXJlIGl0ICovCi0JCWNfc3RhdGUt Pm91dF9mYiA9Ci0JCQlkcm1fZnJhbWVidWZmZXJfbG9va3VwKGNvbm5lY3Rvci0+ZGV2LCBOVUxM LCB2YWwpOwotCQlpZiAoIWNfc3RhdGUtPm91dF9mYiAmJiB2YWwpIHsKLQkJCURQVV9FUlJPUigi ZmFpbGVkIHRvIGxvb2sgdXAgZmIgJWxsZFxuIiwgdmFsKTsKLQkJCXJjID0gLUVGQVVMVDsKLQkJ fSBlbHNlIGlmICghY19zdGF0ZS0+b3V0X2ZiICYmICF2YWwpIHsKLQkJCURQVV9ERUJVRygiY2xl YXJlZCBmYl9pZFxuIik7Ci0JCQlyYyA9IDA7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBDT05ORUNU T1JfUFJPUF9CTF9TQ0FMRToKLQljYXNlIENPTk5FQ1RPUl9QUk9QX0FEX0JMX1NDQUxFOgotCQly YyA9IF9kcHVfY29ubmVjdG9yX3VwZGF0ZV9ibF9zY2FsZShjX2Nvbm4sIGlkeCwgdmFsKTsKLQkJ YnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JLyogY2hlY2sgZm9yIGN1c3RvbSBw cm9wZXJ0eSBoYW5kbGluZyAqLwotCWlmICghcmMgJiYgY19jb25uLT5vcHMuc2V0X3Byb3BlcnR5 KSB7Ci0JCXJjID0gY19jb25uLT5vcHMuc2V0X3Byb3BlcnR5KGNvbm5lY3RvciwKLQkJCQlzdGF0 ZSwKLQkJCQlpZHgsCi0JCQkJdmFsLAotCQkJCWNfY29ubi0+ZGlzcGxheSk7Ci0KLQkJLyogcG90 ZW50aWFsbHkgY2xlYW4gdXAgb3V0X2ZiIGlmIHJjICE9IDAgKi8KLQkJaWYgKChpZHggPT0gQ09O TkVDVE9SX1BST1BfT1VUX0ZCKSAmJiByYykKLQkJCV9kcHVfY29ubmVjdG9yX2Rlc3Ryb3lfZmIo Y19jb25uLCBjX3N0YXRlKTsKLQl9Ci1lbmQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50 IGRwdV9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsCi0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQl1aW50NjRfdCB2YWwpCi17 Ci0JaWYgKCFjb25uZWN0b3IpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNvbm5lY3RvclxuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiBkcHVfY29ubmVjdG9yX2F0b21pY19z ZXRfcHJvcGVydHkoY29ubmVjdG9yLAotCQkJY29ubmVjdG9yLT5zdGF0ZSwgcHJvcGVydHksIHZh bCk7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X2Nvbm5lY3Rvcl9hdG9taWNfZ2V0X3Byb3BlcnR5KHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCWNvbnN0IHN0cnVjdCBkcm1fY29ubmVj dG9yX3N0YXRlICpzdGF0ZSwKLQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCi0JCXVp bnQ2NF90ICp2YWwpCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsKLQlzdHJ1Y3Qg ZHB1X2Nvbm5lY3Rvcl9zdGF0ZSAqY19zdGF0ZTsKLQlpbnQgaWR4LCByYyA9IC1FSU5WQUw7Ci0K LQlpZiAoIWNvbm5lY3RvciB8fCAhc3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3Vt ZW50KHMpLCBjb25uICVwSywgc3RhdGUgJXBLXG4iLAotCQkJCWNvbm5lY3Rvciwgc3RhdGUpOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljX2Nvbm4gPSB0b19kcHVfY29ubmVjdG9yKGNvbm5l Y3Rvcik7Ci0JY19zdGF0ZSA9IHRvX2RwdV9jb25uZWN0b3Jfc3RhdGUoc3RhdGUpOwotCi0JaWR4 ID0gbXNtX3Byb3BlcnR5X2luZGV4KCZjX2Nvbm4tPnByb3BlcnR5X2luZm8sIHByb3BlcnR5KTsK LQkvKiBnZXQgY2FjaGVkIHByb3BlcnR5IHZhbHVlICovCi0JcmMgPSBtc21fcHJvcGVydHlfYXRv bWljX2dldCgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLAotCQkJJmNfc3RhdGUtPnByb3BlcnR5X3N0 YXRlLCBwcm9wZXJ0eSwgdmFsKTsKLQotCS8qIGFsbG93IGZvciBjdXN0b20gb3ZlcnJpZGUgKi8K LQlpZiAoY19jb25uLT5vcHMuZ2V0X3Byb3BlcnR5KQotCQlyYyA9IGNfY29ubi0+b3BzLmdldF9w cm9wZXJ0eShjb25uZWN0b3IsCi0JCQkJKHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICopc3Rh dGUsCi0JCQkJaWR4LAotCQkJCXZhbCwKLQkJCQljX2Nvbm4tPmRpc3BsYXkpOwotCXJldHVybiBy YzsKLX0KLQotc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKLWRwdV9jb25uZWN0b3Jf ZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCi17Ci0J ZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX3Vua25v d247Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsKLQotCWlmICghY29ubmVjdG9yKSB7 Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjb25uZWN0b3JcbiIpOwotCQlyZXR1cm4gc3RhdHVzOwot CX0KLQotCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQotCWlmIChjX2Nv bm4tPm9wcy5kZXRlY3QpCi0JCXN0YXR1cyA9IGNfY29ubi0+b3BzLmRldGVjdChjb25uZWN0b3Is Ci0JCQkJZm9yY2UsCi0JCQkJY19jb25uLT5kaXNwbGF5KTsKLQotCXJldHVybiBzdGF0dXM7Ci19 Ci0KLWludCBkcHVfY29ubmVjdG9yX2dldF9kcG1zKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsKLQlpbnQgcmM7Ci0KLQlp ZiAoIWNvbm5lY3RvcikgewotCQlEUFVfREVCVUcoImludmFsaWQgY29ubmVjdG9yXG4iKTsKLQkJ cmV0dXJuIERSTV9NT0RFX0RQTVNfT0ZGOwotCX0KLQotCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0 b3IoY29ubmVjdG9yKTsKLQotCW11dGV4X2xvY2soJmNfY29ubi0+bG9jayk7Ci0JcmMgPSBjX2Nv bm4tPmRwbXNfbW9kZTsKLQltdXRleF91bmxvY2soJmNfY29ubi0+bG9jayk7Ci0KLQlyZXR1cm4g cmM7Ci19Ci0KLWludCBkcHVfY29ubmVjdG9yX3NldF9wcm9wZXJ0eV9mb3JfY29tbWl0KHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICph dG9taWNfc3RhdGUsCi0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCwgdWludDY0X3QgdmFsdWUpCi17 Ci0Jc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlOwotCXN0cnVjdCBkcm1fcHJvcGVy dHkgKnByb3BlcnR5OwotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm47Ci0KLQlpZiAoIWNv bm5lY3RvciB8fCAhYXRvbWljX3N0YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVu dChzKSwgY29ubiAlZCwgc3RhdGUgJWRcbiIsCi0JCQkJY29ubmVjdG9yICE9IE5VTEwsIGF0b21p Y19zdGF0ZSAhPSBOVUxMKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY19jb25uID0gdG9f ZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCXByb3BlcnR5ID0gbXNtX3Byb3BlcnR5X2luZGV4 X3RvX2RybV9wcm9wZXJ0eSgKLQkJCSZjX2Nvbm4tPnByb3BlcnR5X2luZm8sIHByb3BlcnR5X2lk eCk7Ci0JaWYgKCFwcm9wZXJ0eSkgewotCQlEUFVfRVJST1IoImludmFsaWQgcHJvcGVydHkgaW5k ZXggJWRcbiIsIHByb3BlcnR5X2lkeCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXN0YXRl ID0gZHJtX2F0b21pY19nZXRfY29ubmVjdG9yX3N0YXRlKGF0b21pY19zdGF0ZSwgY29ubmVjdG9y KTsKLQlpZiAoSVNfRVJSX09SX05VTEwoc3RhdGUpKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRv IGdldCBjb25uICVkIHN0YXRlXG4iLAotCQkJCWNvbm5lY3Rvci0+YmFzZS5pZCk7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCXJldHVybiBkcHVfY29ubmVjdG9yX2F0b21pY19zZXRfcHJvcGVy dHkoCi0JCQljb25uZWN0b3IsIHN0YXRlLCBwcm9wZXJ0eSwgdmFsdWUpOwotfQotCi0jaWZkZWYg Q09ORklHX0RFQlVHX0ZTCi0vKioKLSAqIGRwdV9jb25uZWN0b3JfaW5pdF9kZWJ1Z2ZzIC0gaW5p dGlhbGl6ZSBjb25uZWN0b3IgZGVidWdmcwotICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0g Y29ubmVjdG9yCi0gKi8KLXN0YXRpYyBpbnQgZHB1X2Nvbm5lY3Rvcl9pbml0X2RlYnVnZnMoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAq ZHB1X2Nvbm5lY3RvcjsKLQotCWlmICghY29ubmVjdG9yIHx8ICFjb25uZWN0b3ItPmRlYnVnZnNf ZW50cnkpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNvbm5lY3RvclxuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCWRwdV9jb25uZWN0b3IgPSB0b19kcHVfY29ubmVjdG9yKGNvbm5lY3Rv cik7Ci0KLQlpZiAoIWRlYnVnZnNfY3JlYXRlX2Jvb2woImZiX2ttYXAiLCAwNjAwLCBjb25uZWN0 b3ItPmRlYnVnZnNfZW50cnksCi0JCQkmZHB1X2Nvbm5lY3Rvci0+ZmJfa21hcCkpIHsKLQkJRFBV X0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGNvbm5lY3RvciBmYl9rbWFwXG4iKTsKLQkJcmV0dXJu IC1FTk9NRU07Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0jZWxzZQotc3RhdGljIGludCBkcHVfY29u bmVjdG9yX2luaXRfZGVidWdmcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewot CXJldHVybiAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgZHB1X2Nvbm5lY3Rvcl9sYXRlX3Jl Z2lzdGVyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0JcmV0dXJuIGRwdV9j b25uZWN0b3JfaW5pdF9kZWJ1Z2ZzKGNvbm5lY3Rvcik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9j b25uZWN0b3JfZWFybHlfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KQotewotCS8qIGRlYnVnZnMgdW5kZXIgY29ubmVjdG9yLT5kZWJ1Z2ZzIGFyZSBkZWxldGVkIGJ5 IGRybV9kZWJ1Z2ZzICovCi19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9m dW5jcyBkcHVfY29ubmVjdG9yX29wcyA9IHsKLQkucmVzZXQgPSAgICAgICAgICAgICAgICAgIGRw dV9jb25uZWN0b3JfYXRvbWljX3Jlc2V0LAotCS5kZXRlY3QgPSAgICAgICAgICAgICAgICAgZHB1 X2Nvbm5lY3Rvcl9kZXRlY3QsCi0JLmRlc3Ryb3kgPSAgICAgICAgICAgICAgICBkcHVfY29ubmVj dG9yX2Rlc3Ryb3ksCi0JLmZpbGxfbW9kZXMgPSAgICAgICAgICAgICBkcm1faGVscGVyX3Byb2Jl X3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCi0JLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcHVf Y29ubmVjdG9yX2F0b21pY19kdXBsaWNhdGVfc3RhdGUsCi0JLmF0b21pY19kZXN0cm95X3N0YXRl ID0gICBkcHVfY29ubmVjdG9yX2F0b21pY19kZXN0cm95X3N0YXRlLAotCS5hdG9taWNfc2V0X3By b3BlcnR5ID0gICAgZHB1X2Nvbm5lY3Rvcl9hdG9taWNfc2V0X3Byb3BlcnR5LAotCS5hdG9taWNf Z2V0X3Byb3BlcnR5ID0gICAgZHB1X2Nvbm5lY3Rvcl9hdG9taWNfZ2V0X3Byb3BlcnR5LAotCS5z ZXRfcHJvcGVydHkgPSAgICAgICAgICAgZHB1X2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHksCi0JLmxh dGVfcmVnaXN0ZXIgPSAgICAgICAgICBkcHVfY29ubmVjdG9yX2xhdGVfcmVnaXN0ZXIsCi0JLmVh cmx5X3VucmVnaXN0ZXIgPSAgICAgICBkcHVfY29ubmVjdG9yX2Vhcmx5X3VucmVnaXN0ZXIsCi19 OwotCi1zdGF0aWMgaW50IGRwdV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IpCi17Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubjsKLQotCWlm ICghY29ubmVjdG9yKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjb25uZWN0b3JcbiIpOwotCQly ZXR1cm4gMDsKLQl9Ci0KLQljX2Nvbm4gPSB0b19kcHVfY29ubmVjdG9yKGNvbm5lY3Rvcik7Ci0J aWYgKCFjX2Nvbm4tPm9wcy5nZXRfbW9kZXMpIHsKLQkJRFBVX0RFQlVHKCJtaXNzaW5nIGdldF9t b2RlcyBjYWxsYmFja1xuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiBjX2Nvbm4tPm9w cy5nZXRfbW9kZXMoY29ubmVjdG9yLCBjX2Nvbm4tPmRpc3BsYXkpOwotfQotCi1zdGF0aWMgZW51 bSBkcm1fbW9kZV9zdGF0dXMKLWRwdV9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAotCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKLXsK LQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwotCi0JaWYgKCFjb25uZWN0b3IgfHwgIW1v ZGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpLCBjb25uICVwSywgbW9kZSAl cEtcbiIsCi0JCQkJY29ubmVjdG9yLCBtb2RlKTsKLQkJcmV0dXJuIE1PREVfRVJST1I7Ci0JfQot Ci0JY19jb25uID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCi0JaWYgKGNfY29ubi0+ b3BzLm1vZGVfdmFsaWQpCi0JCXJldHVybiBjX2Nvbm4tPm9wcy5tb2RlX3ZhbGlkKGNvbm5lY3Rv ciwgbW9kZSwgY19jb25uLT5kaXNwbGF5KTsKLQotCS8qIGFzc3VtZSBhbGwgbW9kZXMgb2theSBi eSBkZWZhdWx0ICovCi0JcmV0dXJuIE1PREVfT0s7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHJtX2Vu Y29kZXIgKgotZHB1X2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uID0gdG9fZHB1X2Nv bm5lY3Rvcihjb25uZWN0b3IpOwotCi0JaWYgKCFjb25uZWN0b3IpIHsKLQkJRFBVX0VSUk9SKCJp bnZhbGlkIGNvbm5lY3RvclxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCS8qCi0JICogVGhp cyBpcyB0cnVlIGZvciBub3csIHJldmlzaXQgdGhpcyBjb2RlIHdoZW4gbXVsdGlwbGUgZW5jb2Rl cnMgYXJlCi0JICogc3VwcG9ydGVkLgotCSAqLwotCXJldHVybiBjX2Nvbm4tPmVuY29kZXI7Ci19 Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgZHB1X2Nv bm5lY3Rvcl9oZWxwZXJfb3BzID0gewotCS5nZXRfbW9kZXMgPSAgICBkcHVfY29ubmVjdG9yX2dl dF9tb2RlcywKLQkubW9kZV92YWxpZCA9ICAgZHB1X2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkLAotCS5i ZXN0X2VuY29kZXIgPSBkcHVfY29ubmVjdG9yX2Jlc3RfZW5jb2RlciwKLX07Ci0KLXN0cnVjdCBk cm1fY29ubmVjdG9yICpkcHVfY29ubmVjdG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK LQkJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAotCQlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5l bCwKLQkJdm9pZCAqZGlzcGxheSwKLQkJY29uc3Qgc3RydWN0IGRwdV9jb25uZWN0b3Jfb3BzICpv cHMsCi0JCWludCBjb25uZWN0b3JfcG9sbCwKLQkJaW50IGNvbm5lY3Rvcl90eXBlKQotewotCXN0 cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7Ci0Jc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7Ci0J c3RydWN0IGRwdV9rbXNfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25u ID0gTlVMTDsKLQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyBkaXNwbGF5X2luZm87Ci0JaW50IHJj OwotCi0JaWYgKCFkZXYgfHwgIWRldi0+ZGV2X3ByaXZhdGUgfHwgIWVuY29kZXIpIHsKLQkJRFBV X0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpLCBkZXYgJXBLLCBlbmMgJXBLXG4iLAotCQkJCWRl diwgZW5jb2Rlcik7Ci0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCX0KLQotCXByaXYgPSBk ZXYtPmRldl9wcml2YXRlOwotCWlmICghcHJpdi0+a21zKSB7Ci0JCURQVV9FUlJPUigiaW52YWxp ZCBrbXMgcmVmZXJlbmNlXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfQotCi0J Y19jb25uID0ga3phbGxvYyhzaXplb2YoKmNfY29ubiksIEdGUF9LRVJORUwpOwotCWlmICghY19j b25uKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jIGRwdSBjb25uZWN0b3JcbiIpOwot CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci0KLQltZW1zZXQoJmRpc3BsYXlfaW5mbywg MCwgc2l6ZW9mKGRpc3BsYXlfaW5mbykpOwotCi0JcmMgPSBkcm1fY29ubmVjdG9yX2luaXQoZGV2 LAotCQkJJmNfY29ubi0+YmFzZSwKLQkJCSZkcHVfY29ubmVjdG9yX29wcywKLQkJCWNvbm5lY3Rv cl90eXBlKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyb3JfZnJlZV9jb25uOwotCi0Jc3Bpbl9sb2Nr X2luaXQoJmNfY29ubi0+ZXZlbnRfbG9jayk7Ci0KLQljX2Nvbm4tPmNvbm5lY3Rvcl90eXBlID0g Y29ubmVjdG9yX3R5cGU7Ci0JY19jb25uLT5lbmNvZGVyID0gZW5jb2RlcjsKLQljX2Nvbm4tPnBh bmVsID0gcGFuZWw7Ci0JY19jb25uLT5kaXNwbGF5ID0gZGlzcGxheTsKLQotCWNfY29ubi0+ZHBt c19tb2RlID0gRFJNX01PREVfRFBNU19PTjsKLQljX2Nvbm4tPmxwX21vZGUgPSAwOwotCWNfY29u bi0+bGFzdF9wYW5lbF9wb3dlcl9tb2RlID0gRFBVX01PREVfRFBNU19PTjsKLQotCWRwdV9rbXMg PSB0b19kcHVfa21zKHByaXYtPmttcyk7Ci0KLQlpZiAob3BzKQotCQljX2Nvbm4tPm9wcyA9ICpv cHM7Ci0KLQljX2Nvbm4tPmJhc2UuaGVscGVyX3ByaXZhdGUgPSAmZHB1X2Nvbm5lY3Rvcl9oZWxw ZXJfb3BzOwotCWNfY29ubi0+YmFzZS5wb2xsZWQgPSBjb25uZWN0b3JfcG9sbDsKLQljX2Nvbm4t PmJhc2UuaW50ZXJsYWNlX2FsbG93ZWQgPSAwOwotCWNfY29ubi0+YmFzZS5kb3VibGVzY2FuX2Fs bG93ZWQgPSAwOwotCi0Jc25wcmludGYoY19jb25uLT5uYW1lLAotCQkJRFBVX0NPTk5FQ1RPUl9O QU1FX1NJWkUsCi0JCQkiY29ubiV1IiwKLQkJCWNfY29ubi0+YmFzZS5iYXNlLmlkKTsKLQotCW11 dGV4X2luaXQoJmNfY29ubi0+bG9jayk7Ci0KLQlyYyA9IGRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRh Y2hfZW5jb2RlcigmY19jb25uLT5iYXNlLCBlbmNvZGVyKTsKLQlpZiAocmMpIHsKLQkJRFBVX0VS Uk9SKCJmYWlsZWQgdG8gYXR0YWNoIGVuY29kZXIgdG8gY29ubmVjdG9yLCAlZFxuIiwgcmMpOwot CQlnb3RvIGVycm9yX2NsZWFudXBfY29ubjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfRFJNX01TTV9E U0lfU1RBR0lORwotCXJjID0gZHB1X2JhY2tsaWdodF9zZXR1cChjX2Nvbm4sIGRldik7Ci0JaWYg KHJjKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIHNldHVwIGJhY2tsaWdodCwgcmM9JWRcbiIs IHJjKTsKLQkJZ290byBlcnJvcl9jbGVhbnVwX2Nvbm47Ci0JfQotI2VuZGlmCi0KLQkvKiBjcmVh dGUgcHJvcGVydGllcyAqLwotCW1zbV9wcm9wZXJ0eV9pbml0KCZjX2Nvbm4tPnByb3BlcnR5X2lu Zm8sICZjX2Nvbm4tPmJhc2UuYmFzZSwgZGV2LAotCQkJcHJpdi0+Y29ubl9wcm9wZXJ0eSwgY19j b25uLT5wcm9wZXJ0eV9kYXRhLAotCQkJQ09OTkVDVE9SX1BST1BfQ09VTlQsIENPTk5FQ1RPUl9Q Uk9QX0JMT0JDT1VOVCwKLQkJCXNpemVvZihzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9zdGF0ZSkpOwot Ci0JaWYgKGNfY29ubi0+b3BzLnBvc3RfaW5pdCkgewotCQlpbmZvID0ga21hbGxvYyhzaXplb2Yo KmluZm8pLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFpbmZvKSB7Ci0JCQlEUFVfRVJST1IoImZhaWxl ZCB0byBhbGxvY2F0ZSBpbmZvIGJ1ZmZlclxuIik7Ci0JCQlyYyA9IC1FTk9NRU07Ci0JCQlnb3Rv IGVycm9yX2NsZWFudXBfY29ubjsKLQkJfQotCi0JCWRwdV9rbXNfaW5mb19yZXNldChpbmZvKTsK LQkJcmMgPSBjX2Nvbm4tPm9wcy5wb3N0X2luaXQoJmNfY29ubi0+YmFzZSwgaW5mbywgZGlzcGxh eSk7Ci0JCWlmIChyYykgewotCQkJRFBVX0VSUk9SKCJwb3N0LWluaXQgZmFpbGVkLCAlZFxuIiwg cmMpOwotCQkJa2ZyZWUoaW5mbyk7Ci0JCQlnb3RvIGVycm9yX2NsZWFudXBfY29ubjsKLQkJfQot Ci0JCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJmNfY29ubi0+cHJvcGVydHlfaW5mbywKLQkJ CQkiY2FwYWJpbGl0aWVzIiwKLQkJCQlEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSwKLQkJCQlDT05O RUNUT1JfUFJPUF9EUFVfSU5GTyk7Ci0KLQkJbXNtX3Byb3BlcnR5X3NldF9ibG9iKCZjX2Nvbm4t PnByb3BlcnR5X2luZm8sCi0JCQkJJmNfY29ubi0+YmxvYl9jYXBzLAotCQkJCURQVV9LTVNfSU5G T19EQVRBKGluZm8pLAotCQkJCURQVV9LTVNfSU5GT19EQVRBTEVOKGluZm8pLAotCQkJCUNPTk5F Q1RPUl9QUk9QX0RQVV9JTkZPKTsKLQkJa2ZyZWUoaW5mbyk7Ci0JfQotCi0jaWZkZWYgQ09ORklH X0RSTV9NU01fRFNJX1NUQUdJTkcKLQlpZiAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09O TkVDVE9SX0RTSSkgewotCQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRzaV9kaXNwbGF5OwotCi0JCWRz aV9kaXNwbGF5ID0gKHN0cnVjdCBkc2lfZGlzcGxheSAqKShkaXNwbGF5KTsKLQkJaWYgKGRzaV9k aXNwbGF5ICYmIGRzaV9kaXNwbGF5LT5wYW5lbCAmJgotCQkJZHNpX2Rpc3BsYXktPnBhbmVsLT5o ZHJfcHJvcHMuaGRyX2VuYWJsZWQgPT0gdHJ1ZSkgewotCQkJbXNtX3Byb3BlcnR5X2luc3RhbGxf YmxvYigmY19jb25uLT5wcm9wZXJ0eV9pbmZvLAotCQkJCSJoZHJfcHJvcGVydGllcyIsCi0JCQkJ RFJNX01PREVfUFJPUF9JTU1VVEFCTEUsCi0JCQkJQ09OTkVDVE9SX1BST1BfSERSX0lORk8pOwot Ci0JCQltc21fcHJvcGVydHlfc2V0X2Jsb2IoJmNfY29ubi0+cHJvcGVydHlfaW5mbywKLQkJCQkm Y19jb25uLT5ibG9iX2hkciwKLQkJCQkmZHNpX2Rpc3BsYXktPnBhbmVsLT5oZHJfcHJvcHMsCi0J CQkJc2l6ZW9mKGRzaV9kaXNwbGF5LT5wYW5lbC0+aGRyX3Byb3BzKSwKLQkJCQlDT05ORUNUT1Jf UFJPUF9IRFJfSU5GTyk7Ci0JCX0KLQl9Ci0KLQkvKiBpbnN0YWxsIFBQX0RJVEhFUiBwcm9wZXJ0 aWVzICovCi0JX2RwdV9jb25uZWN0b3JfaW5zdGFsbF9kaXRoZXJfcHJvcGVydHkoZGV2LCBkcHVf a21zLCBjX2Nvbm4pOwotCi0JbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJmNfY29ubi0+cHJv cGVydHlfaW5mbywgImJsX3NjYWxlIiwKLQkJMHgwLCAwLCBNQVhfQkxfU0NBTEVfTEVWRUwsIE1B WF9CTF9TQ0FMRV9MRVZFTCwKLQkJQ09OTkVDVE9SX1BST1BfQkxfU0NBTEUpOwotCi0JbXNtX3By b3BlcnR5X2luc3RhbGxfcmFuZ2UoJmNfY29ubi0+cHJvcGVydHlfaW5mbywgImFkX2JsX3NjYWxl IiwKLQkJMHgwLCAwLCBNQVhfQURfQkxfU0NBTEVfTEVWRUwsIE1BWF9BRF9CTF9TQ0FMRV9MRVZF TCwKLQkJQ09OTkVDVE9SX1BST1BfQURfQkxfU0NBTEUpOwotI2VuZGlmCi0KLQkvKiBlbnVtL2Jp dG1hc2sgcHJvcGVydGllcyAqLwotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2VudW0oJmNfY29ubi0+ cHJvcGVydHlfaW5mbywgInRvcG9sb2d5X25hbWUiLAotCQkJRFJNX01PREVfUFJPUF9JTU1VVEFC TEUsIDAsIGVfdG9wb2xvZ3lfbmFtZSwKLQkJCUFSUkFZX1NJWkUoZV90b3BvbG9neV9uYW1lKSwK LQkJCUNPTk5FQ1RPUl9QUk9QX1RPUE9MT0dZX05BTUUpOwotCW1zbV9wcm9wZXJ0eV9pbnN0YWxs X2VudW0oJmNfY29ubi0+cHJvcGVydHlfaW5mbywgInRvcG9sb2d5X2NvbnRyb2wiLAotCQkJMCwg MSwgZV90b3BvbG9neV9jb250cm9sLAotCQkJQVJSQVlfU0laRShlX3RvcG9sb2d5X2NvbnRyb2wp LAotCQkJQ09OTkVDVE9SX1BST1BfVE9QT0xPR1lfQ09OVFJPTCk7Ci0JbXNtX3Byb3BlcnR5X2lu c3RhbGxfZW51bSgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLCAiTFAiLAotCQkJMCwgMCwgZV9wb3dl cl9tb2RlLAotCQkJQVJSQVlfU0laRShlX3Bvd2VyX21vZGUpLAotCQkJQ09OTkVDVE9SX1BST1Bf TFApOwotCi0JcmMgPSBtc21fcHJvcGVydHlfaW5zdGFsbF9nZXRfc3RhdHVzKCZjX2Nvbm4tPnBy b3BlcnR5X2luZm8pOwotCWlmIChyYykgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBjcmVhdGUg b25lIG9yIG1vcmUgcHJvcGVydGllc1xuIik7Ci0JCWdvdG8gZXJyb3JfZGVzdHJveV9wcm9wZXJ0 eTsKLQl9Ci0KLQlEUFVfREVCVUcoImNvbm5lY3RvciAlZCBhdHRhY2ggZW5jb2RlciAlZFxuIiwK LQkJCWNfY29ubi0+YmFzZS5iYXNlLmlkLCBlbmNvZGVyLT5iYXNlLmlkKTsKLQotCXByaXYtPmNv bm5lY3RvcnNbcHJpdi0+bnVtX2Nvbm5lY3RvcnMrK10gPSAmY19jb25uLT5iYXNlOwotCi0JcmV0 dXJuICZjX2Nvbm4tPmJhc2U7Ci0KLWVycm9yX2Rlc3Ryb3lfcHJvcGVydHk6Ci0JaWYgKGNfY29u bi0+YmxvYl9jYXBzKQotCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoY19jb25uLT5ibG9iX2NhcHMp OwotCWlmIChjX2Nvbm4tPmJsb2JfaGRyKQotCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoY19jb25u LT5ibG9iX2hkcik7Ci0JaWYgKGNfY29ubi0+YmxvYl9kaXRoZXIpCi0JCWRybV9wcm9wZXJ0eV9i bG9iX3B1dChjX2Nvbm4tPmJsb2JfZGl0aGVyKTsKLQotCW1zbV9wcm9wZXJ0eV9kZXN0cm95KCZj X2Nvbm4tPnByb3BlcnR5X2luZm8pOwotZXJyb3JfY2xlYW51cF9jb25uOgotCW11dGV4X2Rlc3Ry b3koJmNfY29ubi0+bG9jayk7Ci0JZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKCZjX2Nvbm4tPmJhc2Up OwotZXJyb3JfZnJlZV9jb25uOgotCWtmcmVlKGNfY29ubik7Ci0KLQlyZXR1cm4gRVJSX1BUUihy Yyk7Ci19Ci0KLWludCBkcHVfY29ubmVjdG9yX3JlZ2lzdGVyX2N1c3RvbV9ldmVudChzdHJ1Y3Qg ZHB1X2ttcyAqa21zLAotCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubl9kcm0sIHUzMiBldmVu dCwgYm9vbCB2YWwpCi17Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlzd2l0Y2ggKGV2ZW50KSB7 Ci0JY2FzZSBEUk1fRVZFTlRfU1lTX0JBQ0tMSUdIVDoKLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0J ZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCXJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmggYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGVkNTE2ZmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2Nvbm5lY3Rvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTU1ICswLDAgQEAKLS8qIENv cHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNp b24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0g KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpZm5kZWYgX0RQVV9DT05ORUNUT1JfSF8KLSNk ZWZpbmUgX0RQVV9DT05ORUNUT1JfSF8KLQotI2luY2x1ZGUgPHVhcGkvZHJtL21zbV9kcm1fcHAu aD4KLSNpbmNsdWRlIDxkcm0vZHJtUC5oPgotI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Ci0j aW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgotCi0jaW5jbHVkZSAibXNtX2Rydi5oIgotI2luY2x1 ZGUgIm1zbV9wcm9wLmgiCi0jaW5jbHVkZSAiZHB1X2ttcy5oIgotCi0jZGVmaW5lIERQVV9DT05O RUNUT1JfTkFNRV9TSVpFCTE2Ci0KLXN0cnVjdCBkcHVfY29ubmVjdG9yOwotc3RydWN0IGRwdV9j b25uZWN0b3Jfc3RhdGU7Ci0KLS8qKgotICogc3RydWN0IGRwdV9jb25uZWN0b3Jfb3BzIC0gY2Fs bGJhY2sgZnVuY3Rpb25zIGZvciBnZW5lcmljIGRwdSBjb25uZWN0b3IKLSAqIEluZGl2aWR1YWwg Y2FsbGJhY2tzIGRvY3VtZW50ZWQgYmVsb3cuCi0gKi8KLXN0cnVjdCBkcHVfY29ubmVjdG9yX29w cyB7Ci0JLyoqCi0JICogcG9zdF9pbml0IC0gcGVyZm9ybSBhZGRpdGlvbmFsIGluaXRpYWxpemF0 aW9uIHN0ZXBzCi0JICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVj dHVyZQotCSAqIEBpbmZvOiBQb2ludGVyIHRvIGRwdSBjb25uZWN0b3IgaW5mbyBzdHJ1Y3R1cmUK LQkgKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRpc3BsYXkgaGFuZGxlCi0JICogUmV0 dXJuczogWmVybyBvbiBzdWNjZXNzCi0JICovCi0JaW50ICgqcG9zdF9pbml0KShzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQkJdm9pZCAqaW5mbywKLQkJCXZvaWQgKmRpc3BsYXkp OwotCi0JLyoqCi0JICogZGV0ZWN0IC0gZGV0ZXJtaW5lIGlmIGNvbm5lY3RvciBpcyBjb25uZWN0 ZWQKLQkgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0J ICogQGZvcmNlOiBGb3JjZSBkZXRlY3Qgc2V0dGluZyBmcm9tIGRybSBmcmFtZXdvcmsKLQkgKiBA ZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRpc3BsYXkgaGFuZGxlCi0JICogUmV0dXJuczog Q29ubmVjdG9yICdpcyBjb25uZWN0ZWQnIHN0YXR1cwotCSAqLwotCWVudW0gZHJtX2Nvbm5lY3Rv cl9zdGF0dXMgKCpkZXRlY3QpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCQli b29sIGZvcmNlLAotCQkJdm9pZCAqZGlzcGxheSk7Ci0KLQkvKioKLQkgKiBnZXRfbW9kZXMgLSBh ZGQgZHJtIG1vZGVzIHZpYSBkcm1fbW9kZV9wcm9iZWRfYWRkKCkKLQkgKiBAY29ubmVjdG9yOiBQ b2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0JICogQGRpc3BsYXk6IFBvaW50ZXIg dG8gcHJpdmF0ZSBkaXNwbGF5IGhhbmRsZQotCSAqIFJldHVybnM6IE51bWJlciBvZiBtb2RlcyBh ZGRlZAotCSAqLwotCWludCAoKmdldF9tb2Rlcykoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKLQkJCXZvaWQgKmRpc3BsYXkpOwotCi0JLyoqCi0JICogcHV0X21vZGVzIC0gZnJlZSB1 cCBkcm0gbW9kZXMgb2YgdGhlIGNvbm5lY3RvcgotCSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8g ZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLQkgKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRl IGRpc3BsYXkgaGFuZGxlCi0JICovCi0Jdm9pZCAoKnB1dF9tb2Rlcykoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvciwKLQkJCXZvaWQgKmRpc3BsYXkpOwotCi0JLyoqCi0JICogdXBkYXRl X3BwcyAtIHVwZGF0ZSBwcHMgY29tbWFuZCBmb3IgdGhlIGRpc3BsYXkgcGFuZWwKLQkgKiBAcHBz X2NtZDogUG9pbnRlciB0byBwcHMgY29tbWFuZAotCSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHBy aXZhdGUgZGlzcGxheSBoYW5kbGUKLQkgKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLQkgKi8K LQlpbnQgKCp1cGRhdGVfcHBzKShjaGFyICpwcHNfY21kLCB2b2lkICpkaXNwbGF5KTsKLQotCS8q KgotCSAqIG1vZGVfdmFsaWQgLSBkZXRlcm1pbmUgaWYgc3BlY2lmaWVkIG1vZGUgaXMgdmFsaWQK LQkgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0JICog QG1vZGU6IFBvaW50ZXIgdG8gZHJtIG1vZGUgc3RydWN0dXJlCi0JICogQGRpc3BsYXk6IFBvaW50 ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IGhhbmRsZQotCSAqIFJldHVybnM6IFZhbGlkaXR5IHN0YXR1 cyBmb3Igc3BlY2lmaWVkIG1vZGUKLQkgKi8KLQllbnVtIGRybV9tb2RlX3N0YXR1cyAoKm1vZGVf dmFsaWQpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCQlzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSwKLQkJCXZvaWQgKmRpc3BsYXkpOwotCi0JLyoqCi0JICogc2V0X3By b3BlcnR5IC0gc2V0IHByb3BlcnR5IHZhbHVlCi0JICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBk cm0gY29ubmVjdG9yIHN0cnVjdHVyZQotCSAqIEBzdGF0ZTogUG9pbnRlciB0byBkcm0gY29ubmVj dG9yIHN0YXRlIHN0cnVjdHVyZQotCSAqIEBwcm9wZXJ0eV9pbmRleDogRFJNIHByb3BlcnR5IGlu ZGV4Ci0JICogQHZhbHVlOiBJbmNvbWluZyBwcm9wZXJ0eSB2YWx1ZQotCSAqIEBkaXNwbGF5OiBQ b2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBzdHJ1Y3R1cmUKLQkgKiBSZXR1cm5zOiBaZXJvIG9u IHN1Y2Nlc3MKLQkgKi8KLQlpbnQgKCpzZXRfcHJvcGVydHkpKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsCi0JCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUsCi0JCQlp bnQgcHJvcGVydHlfaW5kZXgsCi0JCQl1aW50NjRfdCB2YWx1ZSwKLQkJCXZvaWQgKmRpc3BsYXkp OwotCi0JLyoqCi0JICogZ2V0X3Byb3BlcnR5IC0gZ2V0IHByb3BlcnR5IHZhbHVlCi0JICogQGNv bm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotCSAqIEBzdGF0ZTog UG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0YXRlIHN0cnVjdHVyZQotCSAqIEBwcm9wZXJ0eV9p bmRleDogRFJNIHByb3BlcnR5IGluZGV4Ci0JICogQHZhbHVlOiBQb2ludGVyIHRvIHZhcmlhYmxl IGZvciBhY2NlcHRpbmcgcHJvcGVydHkgdmFsdWUKLQkgKiBAZGlzcGxheTogUG9pbnRlciB0byBw cml2YXRlIGRpc3BsYXkgc3RydWN0dXJlCi0JICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0J ICovCi0JaW50ICgqZ2V0X3Byb3BlcnR5KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y LAotCQkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlLAotCQkJaW50IHByb3BlcnR5 X2luZGV4LAotCQkJdWludDY0X3QgKnZhbHVlLAotCQkJdm9pZCAqZGlzcGxheSk7Ci0KLQkvKioK LQkgKiBnZXRfaW5mbyAtIGdldCBkaXNwbGF5IGluZm9ybWF0aW9uCi0JICogQGluZm86IFBvaW50 ZXIgdG8gbXNtIGRpc3BsYXkgaW5mbyBzdHJ1Y3R1cmUKLQkgKiBAZGlzcGxheTogUG9pbnRlciB0 byBwcml2YXRlIGRpc3BsYXkgc3RydWN0dXJlCi0JICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNz Ci0JICovCi0JaW50ICgqZ2V0X2luZm8pKHN0cnVjdCBtc21fZGlzcGxheV9pbmZvICppbmZvLCB2 b2lkICpkaXNwbGF5KTsKLQotCS8qKgotCSAqIGdldF9tb2RlX2luZm8gLSByZXRyaWV2ZSBtb2Rl IGluZm9ybWF0aW9uCi0JICogQGRybV9tb2RlOiBEaXNwbGF5IG1vZGUgc2V0IGZvciB0aGUgZGlz cGxheQotCSAqIEBtb2RlX2luZm86IE91dCBwYXJhbWV0ZXIuIGluZm9ybWF0aW9uIG9mIHRoZSBk aXNwbGF5IG1vZGUKLQkgKiBAbWF4X21peGVyX3dpZHRoOiBtYXggd2lkdGggc3VwcG9ydGVkIGJ5 IEhXIGxheWVyIG1peGVyCi0JICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0JICovCi0JaW50 ICgqZ2V0X21vZGVfaW5mbykoY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9tb2Rl LAotCQkJc3RydWN0IG1zbV9tb2RlX2luZm8gKm1vZGVfaW5mbywKLQkJCXUzMiBtYXhfbWl4ZXJf d2lkdGgpOwotCi0JLyoqCi0JICogZW5hYmxlX2V2ZW50IC0gbm90aWZ5IGRpc3BsYXkgb2YgZXZl bnQgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uCi0JICogQGNvbm5lY3RvcjogUG9pbnRlciB0 byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotCSAqIEBldmVudF9pZHg6IERQVSBjb25uZWN0b3Ig ZXZlbnQgaW5kZXgKLQkgKiBAZW5hYmxlOiBXaGV0aGVyIHRoZSBldmVudCBpcyBiZWluZyBlbmFi bGVkL2Rpc2FibGVkCi0JICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IHN0 cnVjdHVyZQotCSAqLwotCXZvaWQgKCplbmFibGVfZXZlbnQpKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsCi0JCQl1aW50MzJfdCBldmVudF9pZHgsIGJvb2wgZW5hYmxlLCB2b2lkICpk aXNwbGF5KTsKLQotCWludCAoKnNldF9iYWNrbGlnaHQpKHZvaWQgKmRpc3BsYXksIHUzMiBibF9s dmwpOwotCi0JLyoqCi0JICogc29mdF9yZXNldCAtIHBlcmZvcm0gYSBzb2Z0IHJlc2V0IG9uIHRo ZSBjb25uZWN0b3IKLQkgKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRpc3BsYXkgc3Ry dWN0dXJlCi0JICogUmV0dXJuOiBaZXJvIG9uIHN1Y2Nlc3MsIC1FUlJPUiBvdGhlcndpc2UKLQkg Ki8KLQlpbnQgKCpzb2Z0X3Jlc2V0KSh2b2lkICpkaXNwbGF5KTsKLQotCS8qKgotCSAqIHByZV9r aWNrb2ZmIC0gdHJpZ2dlciBkaXNwbGF5IHRvIHByb2dyYW0ga2lja29mZi10aW1lIGZlYXR1cmVz Ci0JICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotCSAq IEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBzdHJ1Y3R1cmUKLQkgKiBSZXR1 cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLQkgKi8KLQlpbnQgKCpwcmVfa2lja29mZikoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJCXZvaWQgKmRpc3BsYXkpOwotCi0JLyoqCi0JICog Y2xrX2N0cmwgLSBwZXJmb3JtIGNsayBlbmFibGUvZGlzYWJsZSBvbiB0aGUgY29ubmVjdG9yCi0J ICogQGhhbmRsZTogUG9pbnRlciB0byBjbGsgaGFuZGxlCi0JICogQHR5cGU6IFR5cGUgb2YgY2xr cwotCSAqIEBlbmFibGU6IFN0YXRlIG9mIGNsa3MKLQkgKi8KLQlpbnQgKCpjbGtfY3RybCkodm9p ZCAqaGFuZGxlLCB1MzIgdHlwZSwgdTMyIHN0YXRlKTsKLQotCS8qKgotCSAqIHNldF9wb3dlciAt IHVwZGF0ZSBkcG1zIHNldHRpbmcKLQkgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25u ZWN0b3Igc3RydWN0dXJlCi0JICogQHBvd2VyX21vZGU6IE9uZSBvZiB0aGUgZm9sbG93aW5nLAot CSAqICAgICAgICAgICAgICBEUFVfTU9ERV9EUE1TX09OCi0JICogICAgICAgICAgICAgIERQVV9N T0RFX0RQTVNfTFAxCi0JICogICAgICAgICAgICAgIERQVV9NT0RFX0RQTVNfTFAyCi0JICogICAg ICAgICAgICAgIERQVV9NT0RFX0RQTVNfT0ZGCi0JICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJp dmF0ZSBkaXNwbGF5IHN0cnVjdHVyZQotCSAqIFJldHVybnM6IFplcm8gb24gc3VjY2VzcwotCSAq LwotCWludCAoKnNldF9wb3dlcikoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJ CWludCBwb3dlcl9tb2RlLCB2b2lkICpkaXNwbGF5KTsKLQotCS8qKgotCSAqIGdldF9kc3RfZm9y bWF0IC0gZ2V0IGRzdF9mb3JtYXQgZnJvbSBkaXNwbGF5Ci0JICogQGRpc3BsYXk6IFBvaW50ZXIg dG8gcHJpdmF0ZSBkaXNwbGF5IGhhbmRsZQotCSAqIFJldHVybnM6IGRzdF9mb3JtYXQgb2YgZGlz cGxheQotCSAqLwotCWVudW0gZHNpX3BpeGVsX2Zvcm1hdCAoKmdldF9kc3RfZm9ybWF0KSh2b2lk ICpkaXNwbGF5KTsKLQotCS8qKgotCSAqIHBvc3Rfa2lja29mZiAtIGRpc3BsYXkgdG8gcHJvZ3Jh bSBwb3N0IGtpY2tvZmYtdGltZSBmZWF0dXJlcwotCSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8g ZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLQkgKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLQkg Ki8KLQlpbnQgKCpwb3N0X2tpY2tvZmYpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip OwotCi0JLyoqCi0JICogc2VuZF9ocGRfZXZlbnQgLSBzZW5kIEhQRCB1ZXZlbnQgbm90aWZpY2F0 aW9uIHRvIHVzZXJzcGFjZQotCSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxh eSBzdHJ1Y3R1cmUKLQkgKi8KLQl2b2lkICgqc2VuZF9ocGRfZXZlbnQpKHZvaWQgKmRpc3BsYXkp OwotfTsKLQotLyoqCi0gKiBlbnVtIGRwdV9jb25uZWN0b3JfZXZlbnRzIC0gbGlzdCBvZiByZWNv Z25pemVkIGNvbm5lY3RvciBldmVudHMKLSAqLwotZW51bSBkcHVfY29ubmVjdG9yX2V2ZW50cyB7 Ci0JRFBVX0NPTk5fRVZFTlRfVklEX0RPTkUsIC8qIHZpZGVvIG1vZGUgZnJhbWUgZG9uZSAqLwot CURQVV9DT05OX0VWRU5UX0NNRF9ET05FLCAvKiBjb21tYW5kIG1vZGUgZnJhbWUgZG9uZSAqLwot CURQVV9DT05OX0VWRU5UX0NPVU5ULAotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2Nvbm5lY3Rv cl9ldnQgLSBsb2NhbCBldmVudCByZWdpc3RyYXRpb24gZW50cnkgc3RydWN0dXJlCi0gKiBAY2Jf ZnVuYzogUG9pbnRlciB0byBkZXNpcmVkIGNhbGxiYWNrIGZ1bmN0aW9uCi0gKiBAdXNyOiBVc2Vy IHBvaW50ZXIgdG8gcGFzcyB0byBjYWxsYmFjayBvbiBldmVudCB0cmlnZ2VyCi0gKi8KLXN0cnVj dCBkcHVfY29ubmVjdG9yX2V2dCB7Ci0Jdm9pZCAoKmNiX2Z1bmMpKHVpbnQzMl90IGV2ZW50X2lk eCwKLQkJCXVpbnQzMl90IGluc3RhbmNlX2lkeCwgdm9pZCAqdXNyLAotCQkJdWludDMyX3QgZGF0 YTAsIHVpbnQzMl90IGRhdGExLAotCQkJdWludDMyX3QgZGF0YTIsIHVpbnQzMl90IGRhdGEzKTsK LQl2b2lkICp1c3I7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfY29ubmVjdG9yIC0gbG9jYWwg ZHB1IGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIEBiYXNlOiBCYXNlIGRybSBjb25uZWN0b3Igc3Ry dWN0dXJlCi0gKiBAY29ubmVjdG9yX3R5cGU6IFNldCB0byBvbmUgb2YgRFJNX01PREVfQ09OTkVD VE9SXyB0eXBlcwotICogQGVuY29kZXI6IFBvaW50ZXIgdG8gcHJlZmVycmVkIGRybSBlbmNvZGVy Ci0gKiBAcGFuZWw6IFBvaW50ZXIgdG8gZHJtIHBhbmVsLCBpZiBwcmVzZW50Ci0gKiBAZGlzcGxh eTogUG9pbnRlciB0byBwcml2YXRlIGRpc3BsYXkgZGF0YSBzdHJ1Y3R1cmUKLSAqIEBtbXVfc2Vj dXJlOiBNTVUgaWQgZm9yIHNlY3VyZSBidWZmZXJzCi0gKiBAbW11X3Vuc2VjdXJlOiBNTVUgaWQg Zm9yIHVuc2VjdXJlIGJ1ZmZlcnMKLSAqIEBuYW1lOiBBU0NJSSBuYW1lIG9mIGNvbm5lY3Rvcgot ICogQGxvY2s6IE11dGV4IGxvY2sgb2JqZWN0IGZvciB0aGlzIHN0cnVjdHVyZQotICogQG9wczog TG9jYWwgY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciB0YWJsZQotICogQGRwbXNfbW9kZTogRFBN UyBwcm9wZXJ0eSBzZXR0aW5nIGZyb20gdXNlciBzcGFjZQotICogQGxwX21vZGU6IExQIHByb3Bl cnR5IHNldHRpbmcgZnJvbSB1c2VyIHNwYWNlCi0gKiBAbGFzdF9wYW5lbF9wb3dlcl9tb2RlOiBM YXN0IGNvbnNvbGlkYXRlZCBkcG1zL2xwIG1vZGUgc2V0dGluZwotICogQHByb3BlcnR5X2luZm86 IFByaXZhdGUgc3RydWN0dXJlIGZvciBnZW5lcmljIHByb3BlcnR5IGhhbmRsaW5nCi0gKiBAcHJv cGVydHlfZGF0YTogQXJyYXkgb2YgcHJpdmF0ZSBkYXRhIGZvciBnZW5lcmljIHByb3BlcnR5IGhh bmRsaW5nCi0gKiBAYmxvYl9jYXBzOiBQb2ludGVyIHRvIGJsb2Igc3RydWN0dXJlIGZvciAnY2Fw YWJpbGl0aWVzJyBwcm9wZXJ0eQotICogQGJsb2JfaGRyOiBQb2ludGVyIHRvIGJsb2Igc3RydWN0 dXJlIGZvciAnaGRyX3Byb3BlcnRpZXMnIHByb3BlcnR5Ci0gKiBAYmxvYl9kaXRoZXI6IFBvaW50 ZXIgdG8gYmxvYiBzdHJ1Y3R1cmUgZm9yIGRlZmF1bHQgZGl0aGVyIGNvbmZpZwotICogQGZiX2tt YXA6IHRydWUgaWYga2VybmVsIG1hcHBpbmcgb2YgZnJhbWVidWZmZXIgaXMgcmVxdWVzdGVkCi0g KiBAZXZlbnRfdGFibGU6IEFycmF5IG9mIHJlZ2lzdGVyZWQgZXZlbnRzCi0gKiBAZXZlbnRfbG9j azogTG9jayBvYmplY3QgZm9yIGV2ZW50X3RhYmxlCi0gKiBAYmxfZGV2aWNlOiBiYWNrbGlnaHQg ZGV2aWNlIG5vZGUKLSAqLwotc3RydWN0IGRwdV9jb25uZWN0b3IgewotCXN0cnVjdCBkcm1fY29u bmVjdG9yIGJhc2U7Ci0KLQlpbnQgY29ubmVjdG9yX3R5cGU7Ci0KLQlzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXI7Ci0Jc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7Ci0Jdm9pZCAqZGlzcGxheTsK LQotCXN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZVtEUFVfSU9NTVVfRE9NQUlO X01BWF07Ci0KLQljaGFyIG5hbWVbRFBVX0NPTk5FQ1RPUl9OQU1FX1NJWkVdOwotCi0Jc3RydWN0 IG11dGV4IGxvY2s7Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3Jfb3BzIG9wczsKLQlpbnQgZHBtc19t b2RlOwotCWludCBscF9tb2RlOwotCWludCBsYXN0X3BhbmVsX3Bvd2VyX21vZGU7Ci0KLQlzdHJ1 Y3QgbXNtX3Byb3BlcnR5X2luZm8gcHJvcGVydHlfaW5mbzsKLQlzdHJ1Y3QgbXNtX3Byb3BlcnR5 X2RhdGEgcHJvcGVydHlfZGF0YVtDT05ORUNUT1JfUFJPUF9DT1VOVF07Ci0Jc3RydWN0IGRybV9w cm9wZXJ0eV9ibG9iICpibG9iX2NhcHM7Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9i X2hkcjsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2JfZGl0aGVyOwotCi0JYm9vbCBm Yl9rbWFwOwotCXN0cnVjdCBkcHVfY29ubmVjdG9yX2V2dCBldmVudF90YWJsZVtEUFVfQ09OTl9F VkVOVF9DT1VOVF07Ci0Jc3BpbmxvY2tfdCBldmVudF9sb2NrOwotCi0Jc3RydWN0IGJhY2tsaWdo dF9kZXZpY2UgKmJsX2RldmljZTsKLX07Ci0KLS8qKgotICogdG9fZHB1X2Nvbm5lY3RvciAtIGNv bnZlcnQgZHJtX2Nvbm5lY3RvciBwb2ludGVyIHRvIGRwdSBjb25uZWN0b3IgcG9pbnRlcgotICog QFg6IFBvaW50ZXIgdG8gZHJtX2Nvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIFJldHVybnM6IFBvaW50 ZXIgdG8gZHB1X2Nvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqLwotI2RlZmluZSB0b19kcHVfY29ubmVj dG9yKHgpICAgICBjb250YWluZXJfb2YoKHgpLCBzdHJ1Y3QgZHB1X2Nvbm5lY3RvciwgYmFzZSkK LQotLyoqCi0gKiBkcHVfY29ubmVjdG9yX2dldF9kaXNwbGF5IC0gZ2V0IGRwdSBjb25uZWN0b3In cyBwcml2YXRlIGRpc3BsYXkgcG9pbnRlcgotICogQEM6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3Rv ciBzdHJ1Y3R1cmUKLSAqIFJldHVybnM6IFBvaW50ZXIgdG8gYXNzb2NpYXRlZCBwcml2YXRlIGRp c3BsYXkgc3RydWN0dXJlCi0gKi8KLSNkZWZpbmUgZHB1X2Nvbm5lY3Rvcl9nZXRfZGlzcGxheShD KSBcCi0JKChDKSA/IHRvX2RwdV9jb25uZWN0b3IoKEMpKS0+ZGlzcGxheSA6IDApCi0KLS8qKgot ICogZHB1X2Nvbm5lY3Rvcl9nZXRfcGFuZWwgLSBnZXQgZHB1IGNvbm5lY3RvcidzIHByaXZhdGUg cGFuZWwgcG9pbnRlcgotICogQEM6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUK LSAqIFJldHVybnM6IFBvaW50ZXIgdG8gYXNzb2NpYXRlZCBwcml2YXRlIGRpc3BsYXkgc3RydWN0 dXJlCi0gKi8KLSNkZWZpbmUgZHB1X2Nvbm5lY3Rvcl9nZXRfcGFuZWwoQykgXAotCSgoQykgPyB0 b19kcHVfY29ubmVjdG9yKChDKSktPnBhbmVsIDogTlVMTCkKLQotLyoqCi0gKiBkcHVfY29ubmVj dG9yX2dldF9lbmNvZGVyIC0gZ2V0IGRwdSBjb25uZWN0b3IncyBwcml2YXRlIGVuY29kZXIgcG9p bnRlcgotICogQEM6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIFJldHVy bnM6IFBvaW50ZXIgdG8gYXNzb2NpYXRlZCBwcml2YXRlIGVuY29kZXIgc3RydWN0dXJlCi0gKi8K LSNkZWZpbmUgZHB1X2Nvbm5lY3Rvcl9nZXRfZW5jb2RlcihDKSBcCi0JKChDKSA/IHRvX2RwdV9j b25uZWN0b3IoKEMpKS0+ZW5jb2RlciA6IDApCi0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl9nZXRf cHJvcGluZm8gLSBnZXQgZHB1IGNvbm5lY3RvcidzIHByb3BlcnR5IGluZm8gcG9pbnRlcgotICog QEM6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIFJldHVybnM6IFBvaW50 ZXIgdG8gYXNzb2NpYXRlZCBwcml2YXRlIHByb3BlcnR5IGluZm8gc3RydWN0dXJlCi0gKi8KLSNk ZWZpbmUgZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGluZm8oQykgXAotCSgoQykgPyAmdG9fZHB1X2Nv bm5lY3RvcigoQykpLT5wcm9wZXJ0eV9pbmZvIDogMCkKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2Nv bm5lY3Rvcl9zdGF0ZSAtIHByaXZhdGUgY29ubmVjdG9yIHN0YXR1cyBzdHJ1Y3R1cmUKLSAqIEBi YXNlOiBCYXNlIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBAb3V0X2ZiOiBQb2ludGVyIHRv IG91dHB1dCBmcmFtZSBidWZmZXIsIGlmIGFwcGxpY2FibGUKLSAqIEBwcm9wZXJ0eV9zdGF0ZTog TG9jYWwgc3RvcmFnZSBmb3IgbXNtX3Byb3AgcHJvcGVydGllcwotICogQHByb3BlcnR5X3ZhbHVl czogTG9jYWwgY2FjaGUgb2YgY3VycmVudCBjb25uZWN0b3IgcHJvcGVydHkgdmFsdWVzCi0gKiBA cHJvcGVydHlfYmxvYnM6IGJsb2IgcHJvcGVydGllcwotICovCi1zdHJ1Y3QgZHB1X2Nvbm5lY3Rv cl9zdGF0ZSB7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgYmFzZTsKLQlzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpvdXRfZmI7Ci0Jc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSBwcm9wZXJ0 eV9zdGF0ZTsKLQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3ZhbHVlIHByb3BlcnR5X3ZhbHVlc1tDT05O RUNUT1JfUFJPUF9DT1VOVF07Ci0KLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKnByb3BlcnR5 X2Jsb2JzW0NPTk5FQ1RPUl9QUk9QX0JMT0JDT1VOVF07Ci19OwotCi0vKioKLSAqIHRvX2RwdV9j b25uZWN0b3Jfc3RhdGUgLSBjb252ZXJ0IGRybV9jb25uZWN0b3Jfc3RhdGUgcG9pbnRlciB0bwot ICogICAgICAgICAgICAgICAgICAgICAgICAgIGRwdSBjb25uZWN0b3Igc3RhdGUgcG9pbnRlcgot ICogQFg6IFBvaW50ZXIgdG8gZHJtX2Nvbm5lY3Rvcl9zdGF0ZSBzdHJ1Y3R1cmUKLSAqIFJldHVy bnM6IFBvaW50ZXIgdG8gZHB1X2Nvbm5lY3Rvcl9zdGF0ZSBzdHJ1Y3R1cmUKLSAqLwotI2RlZmlu ZSB0b19kcHVfY29ubmVjdG9yX3N0YXRlKHgpIFwKLQljb250YWluZXJfb2YoKHgpLCBzdHJ1Y3Qg ZHB1X2Nvbm5lY3Rvcl9zdGF0ZSwgYmFzZSkKLQotLyoqCi0gKiBkcHVfY29ubmVjdG9yX2dldF9w cm9wZXJ0eSAtIHF1ZXJ5IGludGVnZXIgdmFsdWUgb2YgY29ubmVjdG9yIHByb3BlcnR5Ci0gKiBA UzogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0YXRlCi0gKiBAWDogUHJvcGVydHkgaW5kZXgs IGZyb20gZW51bSBtc21fbWRwX2Nvbm5lY3Rvcl9wcm9wZXJ0eQotICogUmV0dXJuczogSW50ZWdl ciB2YWx1ZSBvZiByZXF1ZXN0ZWQgcHJvcGVydHkKLSAqLwotI2RlZmluZSBkcHVfY29ubmVjdG9y X2dldF9wcm9wZXJ0eShTLCBYKSBcCi0JKChTKSAmJiAoKFgpIDwgQ09OTkVDVE9SX1BST1BfQ09V TlQpID8gXAotCSAodG9fZHB1X2Nvbm5lY3Rvcl9zdGF0ZSgoUykpLT5wcm9wZXJ0eV92YWx1ZXNb KFgpXS52YWx1ZSkgOiAwKQotCi0vKioKLSAqIGRwdV9jb25uZWN0b3JfZ2V0X3Byb3BlcnR5X3N0 YXRlIC0gcmV0cmlldmUgcHJvcGVydHkgc3RhdGUgY2FjaGUKLSAqIEBTOiBQb2ludGVyIHRvIGRy bSBjb25uZWN0b3Igc3RhdGUKLSAqIFJldHVybnM6IFBvaW50ZXIgdG8gbG9jYWwgcHJvcGVydHkg c3RhdGUgc3RydWN0dXJlCi0gKi8KLSNkZWZpbmUgZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHlf c3RhdGUoUykgXAotCSgoUykgPyAoJnRvX2RwdV9jb25uZWN0b3Jfc3RhdGUoKFMpKS0+cHJvcGVy dHlfc3RhdGUpIDogTlVMTCkKLQotLyoqCi0gKiBkcHVfY29ubmVjdG9yX2dldF9vdXRfZmIgLSBx dWVyeSBvdXRfZmIgdmFsdWUgZnJvbSBkcHUgY29ubmVjdG9yIHN0YXRlCi0gKiBAUzogUG9pbnRl ciB0byBkcm0gY29ubmVjdG9yIHN0YXRlCi0gKiBSZXR1cm5zOiBPdXRwdXQgZmIgYXNzb2NpYXRl ZCB3aXRoIHNwZWNpZmllZCBjb25uZWN0b3Igc3RhdGUKLSAqLwotI2RlZmluZSBkcHVfY29ubmVj dG9yX2dldF9vdXRfZmIoUykgXAotCSgoUykgPyB0b19kcHVfY29ubmVjdG9yX3N0YXRlKChTKSkt Pm91dF9mYiA6IDApCi0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl9nZXRfdG9wb2xvZ3lfbmFtZSAt IGhlbHBlciBhY2Nlc3NvciB0byByZXRyaWV2ZSB0b3BvbG9neV9uYW1lCi0gKiBAY29ubmVjdG9y OiBwb2ludGVyIHRvIGRybSBjb25uZWN0b3IKLSAqIFJldHVybnM6IHZhbHVlIG9mIHRoZSBDT05O RUNUT1JfUFJPUF9UT1BPTE9HWV9OQU1FIHByb3BlcnR5IG9yIDAKLSAqLwotc3RhdGljIGlubGlu ZSB1aW50NjRfdCBkcHVfY29ubmVjdG9yX2dldF90b3BvbG9neV9uYW1lKAotCQlzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCWlmICghY29ubmVjdG9yIHx8ICFjb25uZWN0b3It PnN0YXRlKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHko Y29ubmVjdG9yLT5zdGF0ZSwKLQkJCUNPTk5FQ1RPUl9QUk9QX1RPUE9MT0dZX05BTUUpOwotfQot Ci0vKioKLSAqIGRwdV9jb25uZWN0b3JfZ2V0X2xwIC0gaGVscGVyIGFjY2Vzc29yIHRvIHJldHJp ZXZlIExQIHN0YXRlCi0gKiBAY29ubmVjdG9yOiBwb2ludGVyIHRvIGRybSBjb25uZWN0b3IKLSAq IFJldHVybnM6IHZhbHVlIG9mIHRoZSBDT05ORUNUT1JfUFJPUF9MUCBwcm9wZXJ0eSBvciAwCi0g Ki8KLXN0YXRpYyBpbmxpbmUgdWludDY0X3QgZHB1X2Nvbm5lY3Rvcl9nZXRfbHAoCi0JCXN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0JaWYgKCFjb25uZWN0b3IgfHwgIWNvbm5l Y3Rvci0+c3RhdGUpCi0JCXJldHVybiAwOwotCXJldHVybiBkcHVfY29ubmVjdG9yX2dldF9wcm9w ZXJ0eShjb25uZWN0b3ItPnN0YXRlLAotCQkJQ09OTkVDVE9SX1BST1BfTFApOwotfQotCi0vKioK LSAqIGRwdV9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5X2Zvcl9jb21taXQgLSBhZGQgcHJvcGVydHkg c2V0IHRvIGF0b21pYyBzdGF0ZQotICoJQWRkIGEgY29ubmVjdG9yIHN0YXRlIHByb3BlcnR5IHVw ZGF0ZSBmb3IgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBpbmRleAotICoJdG8gdGhlIGF0b21pYyBz dGF0ZSBpbiBwcmVwYXJhdGlvbiBmb3IgYSBkcm1fYXRvbWljX2NvbW1pdC4KLSAqIEBjb25uZWN0 b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvcgotICogQGF0b21pY19zdGF0ZTogUG9pbnRlciB0 byBEUk0gYXRvbWljIHN0YXRlIHN0cnVjdHVyZSBmb3IgY29tbWl0Ci0gKiBAcHJvcGVydHlfaWR4 OiBDb25uZWN0b3IgcHJvcGVydHkgaW5kZXgKLSAqIEB2YWx1ZTogVXBkYXRlZCBwcm9wZXJ0eSB2 YWx1ZQotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0gKi8KLWludCBkcHVfY29ubmVjdG9y X3NldF9wcm9wZXJ0eV9mb3JfY29tbWl0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Is Ci0JCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICphdG9taWNfc3RhdGUsCi0JCXVpbnQzMl90IHBy b3BlcnR5X2lkeCwgdWludDY0X3QgdmFsdWUpOwotCi0vKioKLSAqIGRwdV9jb25uZWN0b3JfaW5p dCAtIGNyZWF0ZSBkcm0gY29ubmVjdG9yIG9iamVjdCBmb3IgYSBnaXZlbiBkaXNwbGF5Ci0gKiBA ZGV2OiBQb2ludGVyIHRvIGRybSBkZXZpY2Ugc3RydWN0Ci0gKiBAZW5jb2RlcjogUG9pbnRlciB0 byBhc3NvY2lhdGVkIGVuY29kZXIKLSAqIEBwYW5lbDogUG9pbnRlciB0byBhc3NvY2lhdGVkIHBh bmVsLCBjYW4gYmUgTlVMTAotICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gYXNzb2NpYXRlZCBkaXNw bGF5IG9iamVjdAotICogQG9wczogUG9pbnRlciB0byBjYWxsYmFjayBvcGVyYXRpb25zIGZ1bmN0 aW9uIHRhYmxlCi0gKiBAY29ubmVjdG9yX3BvbGw6IFNldCB0byBhcHByb3ByaWF0ZSBEUk1fQ09O TkVDVE9SX1BPTExfIHNldHRpbmcKLSAqIEBjb25uZWN0b3JfdHlwZTogU2V0IHRvIGFwcHJvcHJp YXRlIERSTV9NT0RFX0NPTk5FQ1RPUl8gdHlwZQotICogUmV0dXJuczogUG9pbnRlciB0byBuZXds eSBjcmVhdGVkIGRybSBjb25uZWN0b3Igc3RydWN0Ci0gKi8KLXN0cnVjdCBkcm1fY29ubmVjdG9y ICpkcHVfY29ubmVjdG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyLAotCQlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCwKLQkJdm9pZCAq ZGlzcGxheSwKLQkJY29uc3Qgc3RydWN0IGRwdV9jb25uZWN0b3Jfb3BzICpvcHMsCi0JCWludCBj b25uZWN0b3JfcG9sbCwKLQkJaW50IGNvbm5lY3Rvcl90eXBlKTsKLQotLyoqCi0gKiBkcHVfY29u bmVjdG9yX2dldF9pbmZvIC0gcXVlcnkgZGlzcGxheSBzcGVjaWZpYyBpbmZvcm1hdGlvbgotICog QGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIG9iamVjdAotICogQGluZm86IFBv aW50ZXIgdG8gbXNtIGRpc3BsYXkgaW5mb3JtYXRpb24gc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBa ZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGRwdV9jb25uZWN0b3JfZ2V0X2luZm8oc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gKmluZm8p OwotCi0vKioKLSAqIGRwdV9jb25uZWN0b3JfY2xrX2N0cmwgLSBlbmFibGVzL2Rpc2FibGVzIHRo ZSBjb25uZWN0b3IgY2xrcwotICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9y IG9iamVjdAotICogQGVuYWJsZTogdHJ1ZS9mYWxzZSB0byBlbmFibGUvZGlzYWJsZQotICovCi12 b2lkIGRwdV9jb25uZWN0b3JfY2xrX2N0cmwoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwgYm9vbCBlbmFibGUpOwotCi0vKioKLSAqIGRwdV9jb25uZWN0b3JfZ2V0X2RwbXMgLSBxdWVy eSBkcG1zIHNldHRpbmcKLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBz dHJ1Y3R1cmUKLSAqIFJldHVybnM6IEN1cnJlbnQgRFBNUyBzZXR0aW5nIGZvciBjb25uZWN0b3IK LSAqLwotaW50IGRwdV9jb25uZWN0b3JfZ2V0X2RwbXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3Rvcik7Ci0KLS8qKgotICogZHB1X2Nvbm5lY3Rvcl90cmlnZ2VyX2V2ZW50IC0gaW5kaWNh dGUgdGhhdCBhbiBldmVudCBoYXMgb2NjdXJyZWQKLSAqCUFueSBjYWxsYmFja3MgdGhhdCBoYXZl IGJlZW4gcmVnaXN0ZXJlZCBhZ2FpbnN0IHRoaXMgZXZlbnQgd2lsbAotICoJYmUgY2FsbGVkIGZy b20gdGhlIHNhbWUgdGhyZWFkIGNvbnRleHQuCi0gKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRy bSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBAZXZlbnRfaWR4OiBJbmRleCBvZiBldmVudCB0byB0 cmlnZ2VyCi0gKiBAaW5zdGFuY2VfaWR4OiBFdmVudC1zcGVjaWZpYyAiaW5zdGFuY2UgaW5kZXgi IHRvIHBhc3MgdG8gY2FsbGJhY2sKLSAqIEBkYXRhMDogRXZlbnQtc3BlY2lmaWMgImRhdGEiIHRv IHBhc3MgdG8gY2FsbGJhY2sKLSAqIEBkYXRhMTogRXZlbnQtc3BlY2lmaWMgImRhdGEiIHRvIHBh c3MgdG8gY2FsbGJhY2sKLSAqIEBkYXRhMjogRXZlbnQtc3BlY2lmaWMgImRhdGEiIHRvIHBhc3Mg dG8gY2FsbGJhY2sKLSAqIEBkYXRhMzogRXZlbnQtc3BlY2lmaWMgImRhdGEiIHRvIHBhc3MgdG8g Y2FsbGJhY2sKLSAqIFJldHVybnM6IFplcm8gb24gc3VjY2VzcwotICovCi1pbnQgZHB1X2Nvbm5l Y3Rvcl90cmlnZ2VyX2V2ZW50KHZvaWQgKmRybV9jb25uZWN0b3IsCi0JCXVpbnQzMl90IGV2ZW50 X2lkeCwgdWludDMyX3QgaW5zdGFuY2VfaWR4LAotCQl1aW50MzJfdCBkYXRhMCwgdWludDMyX3Qg ZGF0YTEsCi0JCXVpbnQzMl90IGRhdGEyLCB1aW50MzJfdCBkYXRhMyk7Ci0KLS8qKgotICogZHB1 X2Nvbm5lY3Rvcl9yZWdpc3Rlcl9ldmVudCAtIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24g Zm9yIGFuIGV2ZW50Ci0gKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3Ry dWN0dXJlCi0gKiBAZXZlbnRfaWR4OiBJbmRleCBvZiBldmVudCB0byByZWdpc3RlcgotICogQGNi X2Z1bmM6IFBvaW50ZXIgdG8gZGVzaXJlZCBjYWxsYmFjayBmdW5jdGlvbgotICogQHVzcjogVXNl ciBwb2ludGVyIHRvIHBhc3MgdG8gY2FsbGJhY2sgb24gZXZlbnQgdHJpZ2dlcgotICogUmV0dXJu czogWmVybyBvbiBzdWNjZXNzCi0gKi8KLWludCBkcHVfY29ubmVjdG9yX3JlZ2lzdGVyX2V2ZW50 KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXVpbnQzMl90IGV2ZW50X2lkeCwK LQkJdm9pZCAoKmNiX2Z1bmMpKHVpbnQzMl90IGV2ZW50X2lkeCwKLQkJCXVpbnQzMl90IGluc3Rh bmNlX2lkeCwgdm9pZCAqdXNyLAotCQkJdWludDMyX3QgZGF0YTAsIHVpbnQzMl90IGRhdGExLAot CQkJdWludDMyX3QgZGF0YTIsIHVpbnQzMl90IGRhdGEzKSwKLQkJdm9pZCAqdXNyKTsKLQotLyoq Ci0gKiBkcHVfY29ubmVjdG9yX3VucmVnaXN0ZXJfZXZlbnQgLSB1bnJlZ2lzdGVyIGFsbCBjYWxs YmFja3MgZm9yIGFuIGV2ZW50Ci0gKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0 b3Igc3RydWN0dXJlCi0gKiBAZXZlbnRfaWR4OiBJbmRleCBvZiBldmVudCB0byByZWdpc3Rlcgot ICovCi12b2lkIGRwdV9jb25uZWN0b3JfdW5yZWdpc3Rlcl9ldmVudChzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yLAotCQl1aW50MzJfdCBldmVudF9pZHgpOwotCi0vKioKLSAqIGRwdV9j b25uZWN0b3JfcmVnaXN0ZXJfY3VzdG9tX2V2ZW50IC0gcmVnaXN0ZXIgZm9yIGFzeW5jIGV2ZW50 cwotICogQGttczogUG9pbnRlciB0byBkcHVfa21zCi0gKiBAY29ubl9kcm06IFBvaW50ZXIgdG8g ZHJtIGNvbm5lY3RvciBvYmplY3QKLSAqIEBldmVudDogRXZlbnQgZm9yIHdoaWNoIHJlcXVlc3Qg aXMgYmVpbmcgc2VudAotICogQGVuOiBGbGFnIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBldmVudAot ICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0gKi8KLWludCBkcHVfY29ubmVjdG9yX3JlZ2lz dGVyX2N1c3RvbV9ldmVudChzdHJ1Y3QgZHB1X2ttcyAqa21zLAotCQlzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubl9kcm0sIHUzMiBldmVudCwgYm9vbCBlbik7Ci0KLS8qKgotICogZHB1X2Nvbm5l Y3Rvcl9wcmVfa2lja29mZiAtIHRyaWdnZXIga2lja29mZiB0aW1lIGZlYXR1cmUgcHJvZ3JhbW1p bmcKLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBvYmplY3QKLSAqIFJl dHVybnM6IFplcm8gb24gc3VjY2VzcwotICovCi1pbnQgZHB1X2Nvbm5lY3Rvcl9wcmVfa2lja29m ZihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKLQotLyoqCi0gKiBkcHVfY29ubmVj dG9yX25lZWRzX29mZnNldCAtIGFkanVzdCB0aGUgb3V0cHV0IGZlbmNlIG9mZnNldCBiYXNlZCBv bgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5IHR5cGUKLSAqIEBjb25u ZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBvYmplY3QKLSAqIFJldHVybnM6IHRydWUg aWYgb2Zmc2V0IGlzIHJlcXVpcmVkLCBmYWxzZSBmb3IgYWxsIG90aGVyIGNhc2VzLgotICovCi1z dGF0aWMgaW5saW5lIGJvb2wgZHB1X2Nvbm5lY3Rvcl9uZWVkc19vZmZzZXQoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uOwot Ci0JaWYgKCFjb25uZWN0b3IpCi0JCXJldHVybiBmYWxzZTsKLQotCWNfY29ubiA9IHRvX2RwdV9j b25uZWN0b3IoY29ubmVjdG9yKTsKLQlyZXR1cm4gKGNfY29ubi0+Y29ubmVjdG9yX3R5cGUgIT0g RFJNX01PREVfQ09OTkVDVE9SX1ZJUlRVQUwpOwotfQotCi0vKioKLSAqIGRwdV9jb25uZWN0b3Jf Z2V0X2RpdGhlcl9jZmcgLSBnZXQgZGl0aGVyIHByb3BlcnR5IGRhdGEKLSAqIEBjb25uOiBQb2lu dGVyIHRvIGRybV9jb25uZWN0b3Igc3RydWN0Ci0gKiBAc3RhdGU6IFBvaW50ZXIgdG8gZHJtX2Nv bm5lY3Rvcl9zdGF0ZSBzdHJ1Y3QKLSAqIEBjZmc6IFBvaW50ZXIgdG8gcG9pbnRlciB0byBkaXRo ZXIgY2ZnCi0gKiBAbGVuOiBsZW5ndGggb2YgdGhlIGRpdGhlciBkYXRhCi0gKiBSZXR1cm5zOiBa ZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGRwdV9jb25uZWN0b3JfZ2V0X2RpdGhlcl9jZmcoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm4sCi0JCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpz dGF0ZSwgdm9pZCAqKmNmZywgc2l6ZV90ICpsZW4pOwotCi0jZW5kaWYgLyogX0RQVV9DT05ORUNU T1JfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9j cnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCmluZGV4IGMw ZTgwMzUuLjQ4OTIwYjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRj LmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJkcHVfcGxhbmUuaCIKICNpbmNsdWRlICJk cHVfY29sb3JfcHJvY2Vzc2luZy5oIgogI2luY2x1ZGUgImRwdV9lbmNvZGVyLmgiCi0jaW5jbHVk ZSAiZHB1X2Nvbm5lY3Rvci5oIgogI2luY2x1ZGUgImRwdV92YmlmLmgiCiAjaW5jbHVkZSAiZHB1 X3Bvd2VyX2hhbmRsZS5oIgogI2luY2x1ZGUgImRwdV9jb3JlX3BlcmYuaCIKQEAgLTMzNDcsNyAr MzM0Niw2IEBAIHN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX2dldF9wcm9wZXJ0eShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCiAJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGU7CiAJc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyOwogCWludCBpLCByZXQgPSAtRUlOVkFMOwotCWJvb2wgY29u bl9vZmZzZXQgPSAwOwogCWJvb2wgaXNfY21kID0gdHJ1ZTsKIAogCWlmICghY3J0YyB8fCAhc3Rh dGUpIHsKQEAgLTMzNTYsMTMgKzMzNTQsNiBAQCBzdGF0aWMgaW50IGRwdV9jcnRjX2F0b21pY19n ZXRfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQlkcHVfY3J0YyA9IHRvX2RwdV9j cnRjKGNydGMpOwogCQljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0ZSk7CiAKLQkJZm9y IChpID0gMDsgaSA8IGNzdGF0ZS0+bnVtX2Nvbm5lY3RvcnM7ICsraSkgewotCQkJY29ubl9vZmZz ZXQgPSBkcHVfY29ubmVjdG9yX25lZWRzX29mZnNldCgKLQkJCQkJCWNzdGF0ZS0+Y29ubmVjdG9y c1tpXSk7Ci0JCQlpZiAoY29ubl9vZmZzZXQpCi0JCQkJYnJlYWs7Ci0JCX0KLQogCQkvKioKIAkJ ICogc2V0IHRoZSBjbWQgZmxhZyBvbmx5IHdoZW4gYWxsIHRoZSBlbmNvZGVycyBhdHRhY2hlZAog CQkgKiB0byB0aGUgY3J0YyBhcmUgaW4gY21kIG1vZGUuIENvbnNpZGVyIGFsbCBvdGhlciBjYXNl cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIu YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKaW5kZXggMzg1 NDQxMC4uNDM4NjM2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2VuY29kZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5j b2Rlci5jCkBAIC03MCw2ICs3MCw4IEBACiAKICNkZWZpbmUgSURMRV9TSE9SVF9USU1FT1VUCTEK IAorI2RlZmluZSBNQVhfVkRJU1BMQVlfU1BMSVQgMTA4MAorCiAvKioKICAqIGVudW0gZHB1X2Vu Y19yY19ldmVudHMgLSBldmVudHMgZm9yIHJlc291cmNlIGNvbnRyb2wgc3RhdGUgbWFjaGluZQog ICogQERQVV9FTkNfUkNfRVZFTlRfS0lDS09GRjoKQEAgLTE3Miw3ICsxNzQsNiBAQCBlbnVtIGRw dV9lbmNfcmNfc3RhdGVzIHsKICAqIEBmcmFtZV9kb25lX3RpbWVyOgkJd2F0Y2hkb2cgdGltZXIg Zm9yIGZyYW1lIGRvbmUgZXZlbnQKICAqIEB2c3luY19ldmVudF90aW1lcjoJCXZzeW5jIHRpbWVy CiAgKiBAZGlzcF9pbmZvOgkJCWxvY2FsIGNvcHkgb2YgbXNtX2Rpc3BsYXlfaW5mbyBzdHJ1Y3QK LSAqIEBtb2RlX2luZm86CQkJbG9jYWwgY29weSBvZiBtc21fbW9kZV9pbmZvIHN0cnVjdAogICog QG1pc3JfZW5hYmxlOgkJbWlzciBlbmFibGUvZGlzYWJsZSBzdGF0dXMKICAqIEBtaXNyX2ZyYW1l X2NvdW50OgkJbWlzciBmcmFtZSBjb3VudCBiZWZvcmUgc3RhcnQgY2FwdHVyaW5nIHRoZSBkYXRh CiAgKiBAaWRsZV9wY19zdXBwb3J0ZWQ6CQlpbmRpY2F0ZSBpZiBpZGxlIHBvd2VyIGNvbGxhcHMg aXMgc3VwcG9ydGVkCkBAIC0yMTQsNyArMjE1LDYgQEAgc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQg ewogCXN0cnVjdCB0aW1lcl9saXN0IHZzeW5jX2V2ZW50X3RpbWVyOwogCiAJc3RydWN0IG1zbV9k aXNwbGF5X2luZm8gZGlzcF9pbmZvOwotCXN0cnVjdCBtc21fbW9kZV9pbmZvIG1vZGVfaW5mbzsK IAlib29sIG1pc3JfZW5hYmxlOwogCXUzMiBtaXNyX2ZyYW1lX2NvdW50OwogCkBAIC00OTcsOCAr NDk3LDYgQEAgdm9pZCBkcHVfZW5jb2Rlcl9nZXRfaHdfcmVzb3VyY2VzKHN0cnVjdCBkcm1fZW5j b2RlciAqZHJtX2VuYywKIAkJaWYgKHBoeXMgJiYgcGh5cy0+b3BzLmdldF9od19yZXNvdXJjZXMp CiAJCQlwaHlzLT5vcHMuZ2V0X2h3X3Jlc291cmNlcyhwaHlzLCBod19yZXMsIGNvbm5fc3RhdGUp OwogCX0KLQotCWh3X3Jlcy0+dG9wb2xvZ3kgPSBkcHVfZW5jLT5tb2RlX2luZm8udG9wb2xvZ3k7 CiB9CiAKIHZvaWQgZHB1X2VuY29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9l bmMpCkBAIC02MDUsNiArNjAzLDI1IEBAIHN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl9hZGp1c3Rf bW9kZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCX0KIH0KIAorc3RhdGljIHN0 cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSBkcHVfZW5jb2Rlcl9nZXRfdG9wb2xvZ3koCisJCQlz dHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKKwkJCXN0cnVjdCBkcHVfa21zICpkcHVf a21zLAorCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IG1zbV9k aXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5OworCWludCBpLCBpbnRmX2NvdW50ID0gMDsKKworCWZv ciAoaSA9IDA7IGkgPCBNQVhfUEhZU19FTkNPREVSU19QRVJfVklSVFVBTDsgaSsrKQorCQlpZiAo ZHB1X2VuYy0+cGh5c19lbmNzW2ldKQorCQkJaW50Zl9jb3VudCsrOworCisJLyogVXNlciBzcGxp dCB0b3BvbG9neSBmb3Igd2lkdGggPiAxMDgwICovCisJdG9wb2xvZ3kubnVtX2xtID0gKG1vZGUt PnZkaXNwbGF5ID4gTUFYX1ZESVNQTEFZX1NQTElUKSA/IDIgOiAxOworCXRvcG9sb2d5Lm51bV9l bmMgPSAwOworCXRvcG9sb2d5Lm51bV9pbnRmID0gaW50Zl9jb3VudDsKKworCXJldHVybiB0b3Bv bG9neTsKK30KIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfdmlydF9hdG9taWNfY2hlY2soCiAJCXN0 cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRj X3N0YXRlLApAQCAtNjE1LDYgKzYzMiw3IEBAIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfdmlydF9h dG9taWNfY2hlY2soCiAJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CiAJY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGU7CiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkal9tb2Rl OworCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9neTsKIAlpbnQgaSA9IDA7CiAJ aW50IHJldCA9IDA7CiAKQEAgLTY2MCw2ICs2NzgsOCBAQCBzdGF0aWMgaW50IGRwdV9lbmNvZGVy X3ZpcnRfYXRvbWljX2NoZWNrKAogCQl9CiAJfQogCisJdG9wb2xvZ3kgPSBkcHVfZW5jb2Rlcl9n ZXRfdG9wb2xvZ3koZHB1X2VuYywgZHB1X2ttcywgYWRqX21vZGUpOworCiAJLyogUmVzZXJ2ZSBk eW5hbWljIHJlc291cmNlcyBub3cuIEluZGljYXRpbmcgQXRvbWljVGVzdCBwaGFzZSAqLwogCWlm ICghcmV0KSB7CiAJCS8qCkBAIC02NjksNyArNjg5LDcgQEAgc3RhdGljIGludCBkcHVfZW5jb2Rl cl92aXJ0X2F0b21pY19jaGVjaygKIAkJaWYgKGRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0 KGNydGNfc3RhdGUpCiAJCQkJJiYgZHB1X2VuYy0+bW9kZV9zZXRfY29tcGxldGUpIHsKIAkJCXJl dCA9IGRwdV9ybV9yZXNlcnZlKCZkcHVfa21zLT5ybSwgZHJtX2VuYywgY3J0Y19zdGF0ZSwKLQkJ CQljb25uX3N0YXRlLCB0cnVlKTsKKwkJCQljb25uX3N0YXRlLCB0b3BvbG9neSwgdHJ1ZSk7CiAJ CQlkcHVfZW5jLT5tb2RlX3NldF9jb21wbGV0ZSA9IGZhbHNlOwogCQl9CiAJfQpAQCAtNjkwLDcg KzcxMCw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl91cGRhdGVfdnN5bmNfc291cmNlKHN0 cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jLAogCXN0cnVjdCBkcHVfa21zICpkcHVfa21z OwogCXN0cnVjdCBkcHVfaHdfbWRwICpod19tZHB0b3A7CiAJc3RydWN0IGRybV9lbmNvZGVyICpk cm1fZW5jOwotCXN0cnVjdCBtc21fbW9kZV9pbmZvICptb2RlX2luZm87CiAJaW50IGk7CiAKIAlp ZiAoIWRwdV9lbmMgfHwgIWRpc3BfaW5mbykgewpAQCAtNzIwLDE5ICs3MzksMTIgQEAgc3RhdGlj IHZvaWQgX2RwdV9lbmNvZGVyX3VwZGF0ZV92c3luY19zb3VyY2Uoc3RydWN0IGRwdV9lbmNvZGVy X3ZpcnQgKmRwdV9lbmMsCiAJCXJldHVybjsKIAl9CiAKLQltb2RlX2luZm8gPSAmZHB1X2VuYy0+ bW9kZV9pbmZvOwotCWlmICghbW9kZV9pbmZvKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBtb2Rl IGluZm9cbiIpOwotCQlyZXR1cm47Ci0JfQotCiAJaWYgKGh3X21kcHRvcC0+b3BzLnNldHVwX3Zz eW5jX3NvdXJjZSAmJgogCQkJZGlzcF9pbmZvLT5jYXBhYmlsaXRpZXMgJiBNU01fRElTUExBWV9D QVBfQ01EX01PREUpIHsKIAkJZm9yIChpID0gMDsgaSA8IGRwdV9lbmMtPm51bV9waHlzX2VuY3M7 IGkrKykKIAkJCXZzeW5jX2NmZy5wcG51bWJlcltpXSA9IGRwdV9lbmMtPmh3X3BwW2ldLT5pZHg7 CiAKIAkJdnN5bmNfY2ZnLnBwX2NvdW50ID0gZHB1X2VuYy0+bnVtX3BoeXNfZW5jczsKLQkJdnN5 bmNfY2ZnLmZyYW1lX3JhdGUgPSBtb2RlX2luZm8tPmZyYW1lX3JhdGU7CiAJCWlmIChkaXNwX2lu Zm8tPmlzX3RlX3VzaW5nX3dhdGNoZG9nX3RpbWVyKQogCQkJdnN5bmNfY2ZnLnZzeW5jX3NvdXJj ZSA9IERQVV9WU1lOQ19TT1VSQ0VfV0RfVElNRVJfMDsKIAkJZWxzZQpAQCAtNzg5LDkgKzgwMSw2 IEBAIHN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sX2hlbHBlcihzdHJ1 Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJCWRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoJnBy aXYtPnBoYW5kbGUsCiAJCQkJZHB1X2ttcy0+Y29yZV9jbGllbnQsIHRydWUpOwogCi0JCS8qIGVu YWJsZSBEU0kgY2xrcyAqLwotCQlkcHVfY29ubmVjdG9yX2Nsa19jdHJsKGRwdV9lbmMtPmN1cl9t YXN0ZXItPmNvbm5lY3RvciwgdHJ1ZSk7Ci0KIAkJLyogZW5hYmxlIGFsbCB0aGUgaXJxICovCiAJ CV9kcHVfZW5jb2Rlcl9pcnFfY29udHJvbChkcm1fZW5jLCB0cnVlKTsKIApAQCAtNzk5LDkgKzgw OCw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sX2hlbHBlcihz dHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJCS8qIGRpc2FibGUgYWxsIHRoZSBpcnEgKi8K IAkJX2RwdV9lbmNvZGVyX2lycV9jb250cm9sKGRybV9lbmMsIGZhbHNlKTsKIAotCQkvKiBkaXNh YmxlIERTSSBjbGtzICovCi0JCWRwdV9jb25uZWN0b3JfY2xrX2N0cmwoZHB1X2VuYy0+Y3VyX21h c3Rlci0+Y29ubmVjdG9yLCBmYWxzZSk7Ci0KIAkJLyogZGlzYWJsZSBEUFUgY29yZSBjbGtzICov CiAJCWRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoJnByaXYtPnBoYW5kbGUsCiAJCQkJZHB1X2tt cy0+Y29yZV9jbGllbnQsIGZhbHNlKTsKQEAgLTgxMyw3ICs4MTksNiBAQCBzdGF0aWMgdm9pZCBf ZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbF9oZWxwZXIoc3RydWN0IGRybV9lbmNvZGVyICpk cm1fZW5jLAogc3RhdGljIGludCBkcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sKHN0cnVjdCBk cm1fZW5jb2RlciAqZHJtX2VuYywKIAkJdTMyIHN3X2V2ZW50KQogewotCXVuc2lnbmVkIGludCBs cCwgaWRsZV90aW1lb3V0OwogCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jOwogCXN0 cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IG1zbV9kcm1fdGhyZWFkICpkaXNw X3RocmVhZDsKQEAgLTkxOSwyNSArOTI0LDEzIEBAIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfcmVz b3VyY2VfY29udHJvbChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJCQlyZXR1cm4gMDsK IAkJfQogCi0JCS8qIHNldCBpZGxlIHRpbWVvdXQgYmFzZWQgb24gbWFzdGVyIGNvbm5lY3Rvcidz IGxwIHZhbHVlICovCi0JCWlmIChkcHVfZW5jLT5jdXJfbWFzdGVyKQotCQkJbHAgPSBkcHVfY29u bmVjdG9yX2dldF9scCgKLQkJCQkJZHB1X2VuYy0+Y3VyX21hc3Rlci0+Y29ubmVjdG9yKTsKLQkJ ZWxzZQotCQkJbHAgPSBEUFVfTU9ERV9EUE1TX09OOwotCi0JCWlmIChscCA9PSBEUFVfTU9ERV9E UE1TX0xQMikKLQkJCWlkbGVfdGltZW91dCA9IElETEVfU0hPUlRfVElNRU9VVDsKLQkJZWxzZQot CQkJaWRsZV90aW1lb3V0ID0gZHB1X2VuYy0+aWRsZV90aW1lb3V0OwotCiAJCWt0aHJlYWRfcXVl dWVfZGVsYXllZF93b3JrKAogCQkJJmRpc3BfdGhyZWFkLT53b3JrZXIsCiAJCQkmZHB1X2VuYy0+ ZGVsYXllZF9vZmZfd29yaywKLQkJCW1zZWNzX3RvX2ppZmZpZXMoaWRsZV90aW1lb3V0KSk7CisJ CQltc2Vjc190b19qaWZmaWVzKGRwdV9lbmMtPmlkbGVfdGltZW91dCkpOwogCiAJCURQVV9FVlQz MihEUk1JRChkcm1fZW5jKSwgc3dfZXZlbnQsIGRwdV9lbmMtPnJjX3N0YXRlLAotCQkJCWlkbGVf dGltZW91dCwgRFBVX0VWVExPR19GVU5DX0NBU0UyKTsKKwkJCQlkcHVfZW5jLT5pZGxlX3RpbWVv dXQsIERQVV9FVlRMT0dfRlVOQ19DQVNFMik7CiAJCURQVV9ERUJVR19FTkMoZHB1X2VuYywgInN3 X2V2ZW50OiVkLCB3b3JrIHNjaGVkdWxlZFxuIiwKIAkJCQlzd19ldmVudCk7CiAJCWJyZWFrOwpA QCAtMTEzMiw4ICsxMTI1LDkgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfdmlydF9tb2RlX3Nl dChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7 CiAJc3RydWN0IGxpc3RfaGVhZCAqY29ubmVjdG9yX2xpc3Q7CiAJc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm4gPSBOVUxMLCAqY29ubl9pdGVyOwotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpkcHVf Y29ubiA9IE5VTEw7CiAJc3RydWN0IGRwdV9ybV9od19pdGVyIHBwX2l0ZXI7CisJc3RydWN0IG1z bV9kaXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5OworCWVudW0gZHB1X3JtX3RvcG9sb2d5X25hbWUg dG9wb2xvZ3lfbmFtZTsKIAlpbnQgaSA9IDAsIHJldDsKIAogCWlmICghZHJtX2VuYykgewpAQCAt MTE2MiwzMyArMTE1NiwxMSBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl92aXJ0X21vZGVfc2V0 KHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAkJcmV0dXJuOwogCX0KIAotCWRwdV9jb25u ID0gdG9fZHB1X2Nvbm5lY3Rvcihjb25uKTsKLQlpZiAoZHB1X2Nvbm4pIHsKLQkJcmV0ID0gZHB1 X2Nvbm4tPm9wcy5nZXRfbW9kZV9pbmZvKGFkal9tb2RlLCAmZHB1X2VuYy0+bW9kZV9pbmZvLAot CQkJCWRwdV9rbXMtPmNhdGFsb2ctPmNhcHMtPm1heF9taXhlcl93aWR0aCk7Ci0JCWlmIChyZXQp IHsKLQkJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywKLQkJCQkiaW52YWxpZCB0b3BvbG9neSBmb3Ig dGhlIG1vZGVcbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JLyogcmVsZWFzZSByZXNvdXJj ZXMgYmVmb3JlIHNlYW1sZXNzIG1vZGUgY2hhbmdlICovCi0JaWYgKG1zbV9pc19tb2RlX3NlYW1s ZXNzX2RtcyhhZGpfbW9kZSkpIHsKLQkJLyogcmVzdG9yZSByZXNvdXJjZSBzdGF0ZSBiZWZvcmUg cmVsZWFzaW5nIHRoZW0gKi8KLQkJcmV0ID0gZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbChk cm1fZW5jLAotCQkJCURQVV9FTkNfUkNfRVZFTlRfUFJFX01PREVTRVQpOwotCQlpZiAocmV0KSB7 Ci0JCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsCi0JCQkJCSJkcHUgcmVzb3VyY2UgY29udHJvbCBm YWlsZWQ6ICVkXG4iLAotCQkJCQlyZXQpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQorCXRvcG9sb2d5 ID0gZHB1X2VuY29kZXJfZ2V0X3RvcG9sb2d5KGRwdV9lbmMsIGRwdV9rbXMsIGFkal9tb2RlKTsK IAogCS8qIFJlc2VydmUgZHluYW1pYyByZXNvdXJjZXMgbm93LiBJbmRpY2F0aW5nIG5vbi1BdG9t aWNUZXN0IHBoYXNlICovCiAJcmV0ID0gZHB1X3JtX3Jlc2VydmUoJmRwdV9rbXMtPnJtLCBkcm1f ZW5jLCBkcm1fZW5jLT5jcnRjLT5zdGF0ZSwKLQkJCWNvbm4tPnN0YXRlLCBmYWxzZSk7CisJCQlj b25uLT5zdGF0ZSwgdG9wb2xvZ3ksIGZhbHNlKTsKIAlpZiAocmV0KSB7CiAJCURQVV9FUlJPUl9F TkMoZHB1X2VuYywKIAkJCQkiZmFpbGVkIHRvIHJlc2VydmUgaHcgcmVzb3VyY2VzLCAlZFxuIiwg cmV0KTsKQEAgLTEyMDMsNiArMTE3NSw3IEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3ZpcnRf bW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCQlkcHVfZW5jLT5od19wcFtp XSA9IChzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICopIHBwX2l0ZXIuaHc7CiAJfQogCisJdG9wb2xv Z3lfbmFtZSA9IGRwdV9ybV9nZXRfdG9wb2xvZ3lfbmFtZSh0b3BvbG9neSk7CiAJZm9yIChpID0g MDsgaSA8IGRwdV9lbmMtPm51bV9waHlzX2VuY3M7IGkrKykgewogCQlzdHJ1Y3QgZHB1X2VuY29k ZXJfcGh5cyAqcGh5cyA9IGRwdV9lbmMtPnBoeXNfZW5jc1tpXTsKIApAQCAtMTIxNCw2ICsxMTg3 LDcgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfdmlydF9tb2RlX3NldChzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmRybV9lbmMsCiAJCQl9CiAJCQlwaHlzLT5od19wcCA9IGRwdV9lbmMtPmh3X3BwW2ld OwogCQkJcGh5cy0+Y29ubmVjdG9yID0gY29ubi0+c3RhdGUtPmNvbm5lY3RvcjsKKwkJCXBoeXMt PnRvcG9sb2d5X25hbWUgPSB0b3BvbG9neV9uYW1lOwogCQkJaWYgKHBoeXMtPm9wcy5tb2RlX3Nl dCkKIAkJCQlwaHlzLT5vcHMubW9kZV9zZXQocGh5cywgbW9kZSwgYWRqX21vZGUpOwogCQl9CkBA IC0xNzExLDggKzE2ODUsNiBAQCBpbnQgZHB1X2VuY29kZXJfaGVscGVyX3dhaXRfZXZlbnRfdGlt ZW91dCgKIHZvaWQgZHB1X2VuY29kZXJfaGVscGVyX2h3X3Jlc2V0KHN0cnVjdCBkcHVfZW5jb2Rl cl9waHlzICpwaHlzX2VuYykKIHsKIAlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYzsK LQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqZHB1X2NvbjsKLQl2b2lkICpkcHVfY29uX2Rpc3A7CiAJ c3RydWN0IGRwdV9od19jdGwgKmN0bDsKIAlpbnQgcmM7CiAKQEAgLTE3MjksMjIgKzE3MDEsNiBA QCB2b2lkIGRwdV9lbmNvZGVyX2hlbHBlcl9od19yZXNldChzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5 cyAqcGh5c19lbmMpCiAJRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAiY3RsICVkIHJlc2V0XG4iLCAg Y3RsLT5pZHgpOwogCURQVV9FVlQzMihEUk1JRChwaHlzX2VuYy0+cGFyZW50KSwgY3RsLT5pZHgp OwogCi0JaWYgKHBoeXNfZW5jLT5vcHMuaXNfbWFzdGVyICYmIHBoeXNfZW5jLT5vcHMuaXNfbWFz dGVyKHBoeXNfZW5jKSAmJgotCQkJcGh5c19lbmMtPmNvbm5lY3RvcikgewotCQlkcHVfY29uID0g dG9fZHB1X2Nvbm5lY3RvcihwaHlzX2VuYy0+Y29ubmVjdG9yKTsKLQkJZHB1X2Nvbl9kaXNwID0g ZHB1X2Nvbm5lY3Rvcl9nZXRfZGlzcGxheShwaHlzX2VuYy0+Y29ubmVjdG9yKTsKLQotCQlpZiAo ZHB1X2Nvbi0+b3BzLnNvZnRfcmVzZXQpIHsKLQkJCXJjID0gZHB1X2Nvbi0+b3BzLnNvZnRfcmVz ZXQoZHB1X2Nvbl9kaXNwKTsKLQkJCWlmIChyYykgewotCQkJCURQVV9FUlJPUl9FTkMoZHB1X2Vu YywKLQkJCQkJCSJjb25uZWN0b3Igc29mdCByZXNldCBmYWlsdXJlXG4iKTsKLQkJCQlEUFVfREJH X0RVTVAoImFsbCIsICJkYmdfYnVzIiwgInZiaWZfZGJnX2J1cyIsCi0JCQkJCQkJCSJwYW5pYyIp OwotCQkJfQotCQl9Ci0JfQotCiAJcmMgPSBjdGwtPm9wcy5yZXNldChjdGwpOwogCWlmIChyYykg ewogCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJjdGwgJWQgcmVzZXQgZmFpbHVyZVxuIiwgIGN0 bC0+aWR4KTsKQEAgLTE4NjIsMjIgKzE4MTgsNiBAQCB2b2lkIGRwdV9lbmNvZGVyX3RyaWdnZXJf a2lja29mZl9wZW5kaW5nKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYykKIAl9CiB9CiAKLXN0 YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl9zZXR1cF9kaXRoZXIoc3RydWN0IGRwdV9lbmNvZGVyX3Bo eXMgKnBoeXMpCi17Ci0Jdm9pZCAqZGl0aGVyX2NmZzsKLQlpbnQgcmV0ID0gMDsKLQlzaXplX3Qg bGVuID0gMDsKLQotCWlmICghcGh5cyB8fCAhcGh5cy0+Y29ubmVjdG9yIHx8ICFwaHlzLT5od19w cCB8fAotCQkJIXBoeXMtPmh3X3BwLT5vcHMuc2V0dXBfZGl0aGVyKQotCQlyZXR1cm47Ci0KLQly ZXQgPSBkcHVfY29ubmVjdG9yX2dldF9kaXRoZXJfY2ZnKHBoeXMtPmNvbm5lY3RvciwKLQkJCQlw aHlzLT5jb25uZWN0b3ItPnN0YXRlLCAmZGl0aGVyX2NmZywgJmxlbik7Ci0JaWYgKCFyZXQpCi0J CXBoeXMtPmh3X3BwLT5vcHMuc2V0dXBfZGl0aGVyKHBoeXMtPmh3X3BwLCBkaXRoZXJfY2ZnLCBs ZW4pOwotfQotCiBzdGF0aWMgdTMyIF9kcHVfZW5jb2Rlcl9jYWxjdWxhdGVfbGluZXRpbWUoc3Ry dWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCiAJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlKQogewpAQCAtMjAyOCw3ICsxOTY4LDYgQEAgdm9pZCBkcHVfZW5jb2Rlcl9wcmVwYXJl X2Zvcl9raWNrb2ZmKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAlzdHJ1Y3QgZHB1X2Vu Y29kZXJfcGh5cyAqcGh5czsKIAlib29sIG5lZWRzX2h3X3Jlc2V0ID0gZmFsc2U7CiAJdW5zaWdu ZWQgaW50IGk7Ci0JaW50IHJjOwogCiAJaWYgKCFkcm1fZW5jIHx8ICFwYXJhbXMpIHsKIAkJRFBV X0VSUk9SKCJpbnZhbGlkIGFyZ3NcbiIpOwpAQCAtMjA0OCw3ICsxOTg3LDYgQEAgdm9pZCBkcHVf ZW5jb2Rlcl9wcmVwYXJlX2Zvcl9raWNrb2ZmKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywK IAkJCQlwaHlzLT5vcHMucHJlcGFyZV9mb3Jfa2lja29mZihwaHlzLCBwYXJhbXMpOwogCQkJaWYg KHBoeXMtPmVuYWJsZV9zdGF0ZSA9PSBEUFVfRU5DX0VSUl9ORUVEU19IV19SRVNFVCkKIAkJCQlu ZWVkc19od19yZXNldCA9IHRydWU7Ci0JCQlfZHB1X2VuY29kZXJfc2V0dXBfZGl0aGVyKHBoeXMp OwogCQl9CiAJfQogCURQVV9BVFJBQ0VfRU5EKCJlbmNfcHJlcGFyZV9mb3Jfa2lja29mZiIpOwpA QCAtMjA2NCwxNCArMjAwMiw2IEBAIHZvaWQgZHB1X2VuY29kZXJfcHJlcGFyZV9mb3Jfa2lja29m ZihzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJCQkJcGh5cy0+b3BzLmh3X3Jlc2V0KHBo eXMpOwogCQl9CiAJfQotCi0JaWYgKGRwdV9lbmMtPmN1cl9tYXN0ZXIgJiYgZHB1X2VuYy0+Y3Vy X21hc3Rlci0+Y29ubmVjdG9yKSB7Ci0JCXJjID0gZHB1X2Nvbm5lY3Rvcl9wcmVfa2lja29mZihk cHVfZW5jLT5jdXJfbWFzdGVyLT5jb25uZWN0b3IpOwotCQlpZiAocmMpCi0JCQlEUFVfRVJST1Jf RU5DKGRwdV9lbmMsICJraWNrb2ZmIGNvbm4lZCBmYWlsZWQgcmMgJWRcbiIsCi0JCQkJCWRwdV9l bmMtPmN1cl9tYXN0ZXItPmNvbm5lY3Rvci0+YmFzZS5pZCwKLQkJCQkJcmMpOwotCX0KIH0KIAog dm9pZCBkcHVfZW5jb2Rlcl9raWNrb2ZmKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYykKQEAg LTI3MDQsOCArMjYzNCw3IEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX2ZyYW1lX2RvbmVfdGlt ZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIAkJLmVhcmx5X3VucmVnaXN0ZXIgPSBkcHVfZW5j b2Rlcl9lYXJseV91bnJlZ2lzdGVyLAogfTsKIAotc3RydWN0IGRybV9lbmNvZGVyICpkcHVfZW5j b2Rlcl9pbml0KAotCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAoraW50IGRwdV9lbmNvZGVyX3Nl dHVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jLAogCQlz dHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyAqZGlzcF9pbmZvKQogewogCXN0cnVjdCBtc21fZHJtX3By aXZhdGUgKnByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMjcxNSwxMSArMjY0NCw3IEBAIHN0 cnVjdCBkcm1fZW5jb2RlciAqZHB1X2VuY29kZXJfaW5pdCgKIAlpbnQgZHJtX2VuY19tb2RlID0g RFJNX01PREVfRU5DT0RFUl9OT05FOwogCWludCByZXQgPSAwOwogCi0JZHB1X2VuYyA9IGt6YWxs b2Moc2l6ZW9mKCpkcHVfZW5jKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkcHVfZW5jKSB7Ci0JCXJl dCA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbDsKLQl9CisJZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVy X3ZpcnQoZW5jKTsKIAogCW11dGV4X2luaXQoJmRwdV9lbmMtPmVuY19sb2NrKTsKIAlyZXQgPSBk cHVfZW5jb2Rlcl9zZXR1cF9kaXNwbGF5KGRwdV9lbmMsIGRwdV9rbXMsIGRpc3BfaW5mbywKQEAg LTI3MjksMTYgKzI2NTQsMTIgQEAgc3RydWN0IGRybV9lbmNvZGVyICpkcHVfZW5jb2Rlcl9pbml0 KAogCiAJZHB1X2VuYy0+Y3VyX21hc3RlciA9IE5VTEw7CiAJc3Bpbl9sb2NrX2luaXQoJmRwdV9l bmMtPmVuY19zcGlubG9jayk7Ci0JZHJtX2VuYyA9ICZkcHVfZW5jLT5iYXNlOwotCWRybV9lbmNv ZGVyX2luaXQoZGV2LCBkcm1fZW5jLCAmZHB1X2VuY29kZXJfZnVuY3MsIGRybV9lbmNfbW9kZSwg TlVMTCk7Ci0JZHJtX2VuY29kZXJfaGVscGVyX2FkZChkcm1fZW5jLCAmZHB1X2VuY29kZXJfaGVs cGVyX2Z1bmNzKTsKIAogCWF0b21pY19zZXQoJmRwdV9lbmMtPmZyYW1lX2RvbmVfdGltZW91dCwg MCk7CiAJdGltZXJfc2V0dXAoJmRwdV9lbmMtPmZyYW1lX2RvbmVfdGltZXIsCiAJCQlkcHVfZW5j b2Rlcl9mcmFtZV9kb25lX3RpbWVvdXQsIDApOwogCi0JaWYgKChkaXNwX2luZm8tPmludGZfdHlw ZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKSAmJgotCQkJZGlzcF9pbmZvLT5pc19wcmltYXJ5 KQorCWlmIChkaXNwX2luZm8tPmludGZfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKQog CQl0aW1lcl9zZXR1cCgmZHB1X2VuYy0+dnN5bmNfZXZlbnRfdGltZXIsCiAJCQkJZHB1X2VuY29k ZXJfdnN5bmNfZXZlbnRfaGFuZGxlciwKIAkJCQkwKTsKQEAgLTI3NTYsMTQgKzI2NzcsMzggQEAg c3RydWN0IGRybV9lbmNvZGVyICpkcHVfZW5jb2Rlcl9pbml0KAogCiAJRFBVX0RFQlVHX0VOQyhk cHVfZW5jLCAiY3JlYXRlZFxuIik7CiAKLQlyZXR1cm4gZHJtX2VuYzsKKwlyZXR1cm4gcmV0Owog CiBmYWlsOgogCURQVV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBlbmNvZGVyXG4iKTsKIAlpZiAo ZHJtX2VuYykKIAkJZHB1X2VuY29kZXJfZGVzdHJveShkcm1fZW5jKTsKIAotCXJldHVybiBFUlJf UFRSKHJldCk7CisJcmV0dXJuIHJldDsKKworCit9CisKK3N0cnVjdCBkcm1fZW5jb2RlciAqZHB1 X2VuY29kZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQlpbnQgZHJtX2VuY19tb2Rl KQoreworCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jID0gTlVMTDsKKwlpbnQgcmMg PSAwOworCisJZHB1X2VuYyA9IGRldm1fa3phbGxvYyhkZXYtPmRldiwgc2l6ZW9mKCpkcHVfZW5j KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcHVfZW5jKQorCQlyZXR1cm4gRVJSX1BUUihFTk9NRU0p OworCisJcmMgPSBkcm1fZW5jb2Rlcl9pbml0KGRldiwgJmRwdV9lbmMtPmJhc2UsICZkcHVfZW5j b2Rlcl9mdW5jcywKKwkJCWRybV9lbmNfbW9kZSwgTlVMTCk7CisJaWYgKHJjKSB7CisJCWRldm1f a2ZyZWUoZGV2LT5kZXYsIGRwdV9lbmMpOworCQlyZXR1cm4gRVJSX1BUUihyYyk7CisJfQorCisJ ZHJtX2VuY29kZXJfaGVscGVyX2FkZCgmZHB1X2VuYy0+YmFzZSwgJmRwdV9lbmNvZGVyX2hlbHBl cl9mdW5jcyk7CisKKwlyZXR1cm4gJmRwdV9lbmMtPmJhc2U7CiB9CiAKIGludCBkcHVfZW5jb2Rl cl93YWl0X2Zvcl9ldmVudChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaAppbmRleCBiMjU2MTlkLi5kODUzYWQ5 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmgKQEAgLTQ1 LDcgKzQ1LDYgQEAgc3RydWN0IGRwdV9lbmNvZGVyX2h3X3Jlc291cmNlcyB7CiAJZW51bSBkcHVf aW50Zl9tb2RlIHdic1tXQl9NQVhdOwogCWJvb2wgbmVlZHNfY2RtOwogCXUzMiBkaXNwbGF5X251 bV9vZl9oX3RpbGVzOwotCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9neTsKIH07 CiAKIC8qKgpAQCAtMTYwLDYgKzE1OSwxNSBAQCBpbnQgZHB1X2VuY29kZXJfd2FpdF9mb3JfZXZl bnQoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jb2RlciwKICAqLwogc3RydWN0IGRybV9lbmNv ZGVyICpkcHVfZW5jb2Rlcl9pbml0KAogCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQlpbnQg ZHJtX2VuY19tb2RlKTsKKworLyoqCisgKiBkcHVfZW5jb2Rlcl9zZXR1cCAtIHNldHVwIGRwdV9l bmNvZGVyIGZvciB0aGUgZGlzcGxheSBwcm9iZWQKKyAqIEBkZXY6CQlQb2ludGVyIHRvIGRybSBk ZXZpY2Ugc3RydWN0dXJlCisgKiBAZW5jOgkJUG9pbnRlciB0byB0aGUgZHJtX2VuY29kZXIKKyAq IEBkaXNwX2luZm86CVBvaW50ZXIgdG8gdGhlIGRpc3BsYXkgaW5mbworICovCitpbnQgZHB1X2Vu Y29kZXJfc2V0dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9lbmNvZGVyICpl bmMsCiAJCXN0cnVjdCBtc21fZGlzcGxheV9pbmZvICpkaXNwX2luZm8pOwogCiAvKioKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXMuaCBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXMuaAppbmRleCA1 NzZjNDc1Li4zNWJlZWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfZW5jb2Rlcl9waHlzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2VuY29kZXJfcGh5cy5oCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiZHB1X2h3X3di LmgiCiAjaW5jbHVkZSAiZHB1X2h3X2NkbS5oIgogI2luY2x1ZGUgImRwdV9lbmNvZGVyLmgiCi0j aW5jbHVkZSAiZHB1X2Nvbm5lY3Rvci5oIgogCiAjZGVmaW5lIERQVV9FTkNPREVSX05BTUVfTUFY CTE2CiAKQEAgLTIyMSw2ICsyMjAsNyBAQCBzdHJ1Y3QgZHB1X2VuY29kZXJfaXJxIHsKICAqIEBz cGxpdF9yb2xlOgkJUm9sZSB0byBwbGF5IGluIGEgc3BsaXQtcGFuZWwgY29uZmlndXJhdGlvbgog ICogQGludGZfbW9kZToJCUludGVyZmFjZSBtb2RlCiAgKiBAaW50Zl9pZHg6CQlJbnRlcmZhY2Ug aW5kZXggb24gZHB1IGhhcmR3YXJlCisgKiBAdG9wb2xvZ3lfbmFtZToJdG9wb2xvZ3kgc2VsZWN0 ZWQgZm9yIHRoZSBkaXNwbGF5CiAgKiBAZW5jX3NwaW5sb2NrOglWaXJ0dWFsLUVuY29kZXItV2lk ZSBTcGluIExvY2sgZm9yIElSUSBwdXJwb3NlcwogICogQGVuYWJsZV9zdGF0ZToJRW5hYmxlIHN0 YXRlIHRyYWNraW5nCiAgKiBAdmJsYW5rX3JlZmNvdW50OglSZWZlcmVuY2UgY291bnQgb2YgdmJs YW5rIHJlcXVlc3QKQEAgLTI1MCw2ICsyNTAsNyBAQCBzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyB7 CiAJZW51bSBkcHVfZW5jX3NwbGl0X3JvbGUgc3BsaXRfcm9sZTsKIAllbnVtIGRwdV9pbnRmX21v ZGUgaW50Zl9tb2RlOwogCWVudW0gZHB1X2ludGYgaW50Zl9pZHg7CisJZW51bSBkcHVfcm1fdG9w b2xvZ3lfbmFtZSB0b3BvbG9neV9uYW1lOwogCXNwaW5sb2NrX3QgKmVuY19zcGlubG9jazsKIAll bnVtIGRwdV9lbmNfZW5hYmxlX3N0YXRlIGVuYWJsZV9zdGF0ZTsKIAlhdG9taWNfdCB2Ymxhbmtf cmVmY291bnQ7CkBAIC00NDMsMTQgKzQ0NCwxMSBAQCBpbnQgZHB1X2VuY29kZXJfaGVscGVyX3dh aXRfZXZlbnRfdGltZW91dCgKIHN0YXRpYyBpbmxpbmUgZW51bSBkcHVfM2RfYmxlbmRfbW9kZSBk cHVfZW5jb2Rlcl9oZWxwZXJfZ2V0XzNkX2JsZW5kX21vZGUoCiAJCXN0cnVjdCBkcHVfZW5jb2Rl cl9waHlzICpwaHlzX2VuYykKIHsKLQllbnVtIGRwdV9ybV90b3BvbG9neV9uYW1lIHRvcG9sb2d5 OwotCiAJaWYgKCFwaHlzX2VuYyB8fCBwaHlzX2VuYy0+ZW5hYmxlX3N0YXRlID09IERQVV9FTkNf RElTQUJMSU5HKQogCQlyZXR1cm4gQkxFTkRfM0RfTk9ORTsKIAotCXRvcG9sb2d5ID0gZHB1X2Nv bm5lY3Rvcl9nZXRfdG9wb2xvZ3lfbmFtZShwaHlzX2VuYy0+Y29ubmVjdG9yKTsKIAlpZiAocGh5 c19lbmMtPnNwbGl0X3JvbGUgPT0gRU5DX1JPTEVfU09MTyAmJgotCSAgICB0b3BvbG9neSA9PSBE UFVfUk1fVE9QT0xPR1lfRFVBTFBJUEVfM0RNRVJHRSkKKwkgICAgcGh5c19lbmMtPnRvcG9sb2d5 X25hbWUgPT0gRFBVX1JNX1RPUE9MT0dZX0RVQUxQSVBFXzNETUVSR0UpCiAJCXJldHVybiBCTEVO RF8zRF9IX1JPV19JTlQ7CiAKIAlyZXR1cm4gQkxFTkRfM0RfTk9ORTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlkLmMgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jCmluZGV4IGI2 ODA3MTguLjczZTU5MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9lbmNvZGVyX3BoeXNfdmlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2VuY29kZXJfcGh5c192aWQuYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgImRw dV9od19pbnRlcnJ1cHRzLmgiCiAjaW5jbHVkZSAiZHB1X2NvcmVfaXJxLmgiCiAjaW5jbHVkZSAi ZHB1X2Zvcm1hdHMuaCIKLSNpbmNsdWRlICJkc2lfZGlzcGxheS5oIgogI2luY2x1ZGUgImRwdV90 cmFjZS5oIgogCiAjZGVmaW5lIERQVV9ERUJVR19WSURFTkMoZSwgZm10LCAuLi4pIERQVV9ERUJV RygiZW5jJWQgaW50ZiVkICIgZm10LCBcCkBAIC0zNTYsMTMgKzM1NSwxMCBAQCBzdGF0aWMgdm9p ZCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF91bmRlcnJ1bl9pcnEodm9pZCAqYXJnLCBpbnQgaXJxX2lk eCkKIAogc3RhdGljIGJvb2wgX2RwdV9lbmNvZGVyX3BoeXNfaXNfZHVhbF9jdGwoc3RydWN0IGRw dV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jKQogewotCWVudW0gZHB1X3JtX3RvcG9sb2d5X25hbWUg dG9wb2xvZ3k7Ci0KIAlpZiAoIXBoeXNfZW5jKQogCQlyZXR1cm4gZmFsc2U7CiAKLQl0b3BvbG9n eSA9IGRwdV9jb25uZWN0b3JfZ2V0X3RvcG9sb2d5X25hbWUocGh5c19lbmMtPmNvbm5lY3Rvcik7 Ci0JaWYgKHRvcG9sb2d5ID09IERQVV9STV9UT1BPTE9HWV9EVUFMUElQRSkKKwlpZiAocGh5c19l bmMtPnRvcG9sb2d5X25hbWUgPT0gRFBVX1JNX1RPUE9MT0dZX0RVQUxQSVBFKQogCQlyZXR1cm4g dHJ1ZTsKIAogCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9r bXMuYwppbmRleCAwZmJlYjc1Li4zN2M3YzY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2ttcy5jCkBAIC0yNywxOCArMjcsNiBAQAogI2luY2x1ZGUgIm1zbV9tbXUuaCIKICNp bmNsdWRlICJtc21fZ2VtLmgiCiAKLSNpZmRlZiBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORwot I2luY2x1ZGUgImRzaV9kaXNwbGF5LmgiCi0jaW5jbHVkZSAiZHNpX2RybS5oIgotI2VuZGlmCi0j aWZkZWYgQ09ORklHX0RSTV9NU01fV1JJVEVCQUNLCi0jaW5jbHVkZSAiZHB1X3diLmgiCi0jZW5k aWYKLSNpZmRlZiBDT05GSUdfRFJNX01TTV9ESVNQTEFZUE9SVAotI2luY2x1ZGUgImRwL2RwX2Rp c3BsYXkuaCIKLSNpbmNsdWRlICJkcF9kcm0uaCIKLSNlbmRpZgotI2luY2x1ZGUgImRwdV9jb25u ZWN0b3IuaCIKICNpbmNsdWRlICJkcHVfa21zLmgiCiAjaW5jbHVkZSAiZHB1X2NvcmVfaXJxLmgi CiAjaW5jbHVkZSAiZHB1X2Zvcm1hdHMuaCIKQEAgLTQ3Myw5ICs0NjEsNyBAQCBzdGF0aWMgdm9p ZCBkcHVfa21zX2NvbXBsZXRlX2NvbW1pdChzdHJ1Y3QgbXNtX2ttcyAqa21zLAogCXN0cnVjdCBt c21fZHJtX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCXN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGU7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm47Ci0Jc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlOwotCWludCBp LCByYyA9IDA7CisJaW50IGk7CiAKIAlpZiAoIWttcyB8fCAhb2xkX3N0YXRlKQogCQlyZXR1cm47 CkBAIC00ODgsMTkgKzQ3NCw2IEBAIHN0YXRpYyB2b2lkIGRwdV9rbXNfY29tcGxldGVfY29tbWl0 KHN0cnVjdCBtc21fa21zICprbXMsCiAJZm9yX2VhY2hfb2xkX2NydGNfaW5fc3RhdGUob2xkX3N0 YXRlLCBjcnRjLCBvbGRfY3J0Y19zdGF0ZSwgaSkKIAkJZHB1X2NydGNfY29tcGxldGVfY29tbWl0 KGNydGMsIG9sZF9jcnRjX3N0YXRlKTsKIAotCWZvcl9lYWNoX29sZF9jb25uZWN0b3JfaW5fc3Rh dGUob2xkX3N0YXRlLCBjb25uLCBvbGRfY29ubl9zdGF0ZSwgaSkgewotCQlzdHJ1Y3QgZHB1X2Nv bm5lY3RvciAqY19jb25uOwotCi0JCWNfY29ubiA9IHRvX2RwdV9jb25uZWN0b3IoY29ubik7Ci0J CWlmICghY19jb25uLT5vcHMucG9zdF9raWNrb2ZmKQotCQkJY29udGludWU7Ci0JCXJjID0gY19j b25uLT5vcHMucG9zdF9raWNrb2ZmKGNvbm4pOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiQ29u bmVjdG9yIFBvc3Qga2lja29mZiBmYWlsZWQgcmM9JWRcbiIsCi0JCQkJCSByYyk7Ci0JCX0KLQl9 Ci0KIAlkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKCZwcml2LT5waGFuZGxlLCBkcHVfa21zLT5j b3JlX2NsaWVudCwgZmFsc2UpOwogCXBtX3J1bnRpbWVfcHV0X3N5bmMoZHB1X2ttcy0+ZGV2LT5k ZXYpOwogCkBAIC01NTMsMzE3ICs1MjYsMzYgQEAgc3RhdGljIHZvaWQgZHB1X2ttc193YWl0X2Zv cl9jb21taXRfZG9uZShzdHJ1Y3QgbXNtX2ttcyAqa21zLAogCWRybV9jcnRjX3ZibGFua19wdXQo Y3J0Yyk7CiB9CiAKLS8qKgotICogX2RwdV9rbXNfZ2V0X2Rpc3BsYXlzIC0gcXVlcnkgZm9yIHVu ZGVybHlpbmcgZGlzcGxheSBoYW5kbGVzIGFuZCBjYWNoZSB0aGVtCi0gKiBAZHB1X2ttczogICAg UG9pbnRlciB0byBkcHUga21zIHN0cnVjdHVyZQotICogUmV0dXJuczogICAgIFplcm8gb24gc3Vj Y2VzcwotICovCi1zdGF0aWMgaW50IF9kcHVfa21zX2dldF9kaXNwbGF5cyhzdHJ1Y3QgZHB1X2tt cyAqZHB1X2ttcykKLXsKLQlpbnQgcmMgPSAtRU5PTUVNOwotCi0JaWYgKCFkcHVfa21zKSB7Ci0J CURQVV9FUlJPUigiaW52YWxpZCBkcHUga21zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0jaWZkZWYgQ09ORklHX0RSTV9NU01fRFNJX1NUQUdJTkcKLQkvKiBkc2kgKi8KLQlkcHVfa21z LT5kc2lfZGlzcGxheXMgPSBOVUxMOwotCWRwdV9rbXMtPmRzaV9kaXNwbGF5X2NvdW50ID0gZHNp X2Rpc3BsYXlfZ2V0X251bV9vZl9kaXNwbGF5cygpOwotCWlmIChkcHVfa21zLT5kc2lfZGlzcGxh eV9jb3VudCkgewotCQlkcHVfa21zLT5kc2lfZGlzcGxheXMgPSBrY2FsbG9jKGRwdV9rbXMtPmRz aV9kaXNwbGF5X2NvdW50LAotCQkJCXNpemVvZih2b2lkICopLAotCQkJCUdGUF9LRVJORUwpOwot CQlpZiAoIWRwdV9rbXMtPmRzaV9kaXNwbGF5cykgewotCQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8g YWxsb2NhdGUgZHNpIGRpc3BsYXlzXG4iKTsKLQkJCWdvdG8gZXhpdF9kZWluaXRfZHNpOwotCQl9 Ci0JCWRwdV9rbXMtPmRzaV9kaXNwbGF5X2NvdW50ID0KLQkJCWRzaV9kaXNwbGF5X2dldF9hY3Rp dmVfZGlzcGxheXMoZHB1X2ttcy0+ZHNpX2Rpc3BsYXlzLAotCQkJCQlkcHVfa21zLT5kc2lfZGlz cGxheV9jb3VudCk7Ci0JfQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfRFJNX01TTV9XUklURUJB Q0sKLQkvKiB3YiAqLwotCWRwdV9rbXMtPndiX2Rpc3BsYXlzID0gTlVMTDsKLQlkcHVfa21zLT53 Yl9kaXNwbGF5X2NvdW50ID0gZHB1X3diX2dldF9udW1fb2ZfZGlzcGxheXMoKTsKLQlpZiAoZHB1 X2ttcy0+d2JfZGlzcGxheV9jb3VudCkgewotCQlkcHVfa21zLT53Yl9kaXNwbGF5cyA9IGtjYWxs b2MoZHB1X2ttcy0+d2JfZGlzcGxheV9jb3VudCwKLQkJCQlzaXplb2Yodm9pZCAqKSwKLQkJCQlH RlBfS0VSTkVMKTsKLQkJaWYgKCFkcHVfa21zLT53Yl9kaXNwbGF5cykgewotCQkJRFBVX0VSUk9S KCJmYWlsZWQgdG8gYWxsb2NhdGUgd2IgZGlzcGxheXNcbiIpOwotCQkJZ290byBleGl0X2RlaW5p dF93YjsKLQkJfQotCQlkcHVfa21zLT53Yl9kaXNwbGF5X2NvdW50ID0KLQkJCXdiX2Rpc3BsYXlf Z2V0X2Rpc3BsYXlzKGRwdV9rbXMtPndiX2Rpc3BsYXlzLAotCQkJCQlkcHVfa21zLT53Yl9kaXNw bGF5X2NvdW50KTsKLQl9Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RJU1BMQVlQ T1JUCi0JLyogZHAgKi8KLQlkcHVfa21zLT5kcF9kaXNwbGF5cyA9IE5VTEw7Ci0JZHB1X2ttcy0+ ZHBfZGlzcGxheV9jb3VudCA9IGRwX2Rpc3BsYXlfZ2V0X251bV9vZl9kaXNwbGF5cygpOwotCWlm IChkcHVfa21zLT5kcF9kaXNwbGF5X2NvdW50KSB7Ci0JCWRwdV9rbXMtPmRwX2Rpc3BsYXlzID0g a2NhbGxvYyhkcHVfa21zLT5kcF9kaXNwbGF5X2NvdW50LAotCQkJCXNpemVvZih2b2lkICopLCBH RlBfS0VSTkVMKTsKLQkJaWYgKCFkcHVfa21zLT5kcF9kaXNwbGF5cykgewotCQkJRFBVX0VSUk9S KCJmYWlsZWQgdG8gYWxsb2NhdGUgZHAgZGlzcGxheXNcbiIpOwotCQkJZ290byBleGl0X2RlaW5p dF9kcDsKLQkJfQotCQlkcHVfa21zLT5kcF9kaXNwbGF5X2NvdW50ID0KLQkJCWRwX2Rpc3BsYXlf Z2V0X2Rpc3BsYXlzKGRwdV9rbXMtPmRwX2Rpc3BsYXlzLAotCQkJCQlkcHVfa21zLT5kcF9kaXNw bGF5X2NvdW50KTsKLQl9Ci0jZW5kaWYKLQotCXJldHVybiAwOwotCi0jaWZkZWYgQ09ORklHX0RS TV9NU01fRElTUExBWVBPUlQKLWV4aXRfZGVpbml0X2RwOgotCWtmcmVlKGRwdV9rbXMtPmRwX2Rp c3BsYXlzKTsKLQlkcHVfa21zLT5kcF9kaXNwbGF5X2NvdW50ID0gMDsKLQlkcHVfa21zLT5kcF9k aXNwbGF5cyA9IE5VTEw7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfRFJNX01TTV9XUklURUJBQ0sK LWV4aXRfZGVpbml0X3diOgotCWtmcmVlKGRwdV9rbXMtPndiX2Rpc3BsYXlzKTsKLQlkcHVfa21z LT53Yl9kaXNwbGF5X2NvdW50ID0gMDsKLQlkcHVfa21zLT53Yl9kaXNwbGF5cyA9IE5VTEw7Ci0j ZW5kaWYKLSNpZmRlZiBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORwotZXhpdF9kZWluaXRfZHNp OgotCWtmcmVlKGRwdV9rbXMtPmRzaV9kaXNwbGF5cyk7Ci0JZHB1X2ttcy0+ZHNpX2Rpc3BsYXlf Y291bnQgPSAwOwotCWRwdV9rbXMtPmRzaV9kaXNwbGF5cyA9IE5VTEw7Ci0JcmV0dXJuIHJjOwot I2Vsc2UKLQlyZXR1cm4gcmM7Ci0jZW5kaWYKLX0KLQotLyoqCi0gKiBfZHB1X2ttc19yZWxlYXNl X2Rpc3BsYXlzIC0gcmVsZWFzZSBjYWNoZSBvZiB1bmRlcmx5aW5nIGRpc3BsYXkgaGFuZGxlcwot ICogQGRwdV9rbXM6ICAgIFBvaW50ZXIgdG8gZHB1IGttcyBzdHJ1Y3R1cmUKLSAqLwotc3RhdGlj IHZvaWQgX2RwdV9rbXNfcmVsZWFzZV9kaXNwbGF5cyhzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcykK LXsKLQlpZiAoIWRwdV9rbXMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGRwdSBrbXNcbiIpOwot CQlyZXR1cm47Ci0JfQotCi0Ja2ZyZWUoZHB1X2ttcy0+d2JfZGlzcGxheXMpOwotCWRwdV9rbXMt PndiX2Rpc3BsYXlzID0gTlVMTDsKLQlkcHVfa21zLT53Yl9kaXNwbGF5X2NvdW50ID0gMDsKLQot CWtmcmVlKGRwdV9rbXMtPmRzaV9kaXNwbGF5cyk7Ci0JZHB1X2ttcy0+ZHNpX2Rpc3BsYXlzID0g TlVMTDsKLQlkcHVfa21zLT5kc2lfZGlzcGxheV9jb3VudCA9IDA7Ci19Ci0KLSNpZmRlZiBDT05G SUdfRFJNX01TTV9EU0lfU1RBR0lORwogc3RhdGljIHZvaWQgX2RwdV9rbXNfaW5pdGlhbGl6ZV9k c2koc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IG1zbV9kcm1fcHJpdmF0 ZSAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMsCi0JCQkJICAgIHVuc2ln bmVkIG1heF9lbmNvZGVycykKLXsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9jb25uZWN0b3Jf b3BzIGRzaV9vcHMgPSB7Ci0JCS5wb3N0X2luaXQgPSAgZHNpX2Nvbm5fcG9zdF9pbml0LAotCQku ZGV0ZWN0ID0gICAgIGRzaV9jb25uX2RldGVjdCwKLQkJLmdldF9tb2RlcyA9ICBkc2lfY29ubmVj dG9yX2dldF9tb2RlcywKLQkJLnB1dF9tb2RlcyA9ICBkc2lfY29ubmVjdG9yX3B1dF9tb2RlcywK LQkJLm1vZGVfdmFsaWQgPSBkc2lfY29ubl9tb2RlX3ZhbGlkLAotCQkuZ2V0X2luZm8gPSAgIGRz aV9kaXNwbGF5X2dldF9pbmZvLAotCQkuc2V0X2JhY2tsaWdodCA9IGRzaV9kaXNwbGF5X3NldF9i YWNrbGlnaHQsCi0JCS5zb2Z0X3Jlc2V0ICAgPSBkc2lfZGlzcGxheV9zb2Z0X3Jlc2V0LAotCQku cHJlX2tpY2tvZmYgID0gZHNpX2Nvbm5fcHJlX2tpY2tvZmYsCi0JCS5jbGtfY3RybCA9IGRzaV9k aXNwbGF5X2Nsa19jdHJsLAotCQkuc2V0X3Bvd2VyID0gZHNpX2Rpc3BsYXlfc2V0X3Bvd2VyLAot CQkuZ2V0X21vZGVfaW5mbyA9IGRzaV9jb25uX2dldF9tb2RlX2luZm8sCi0JCS5nZXRfZHN0X2Zv cm1hdCA9IGRzaV9kaXNwbGF5X2dldF9kc3RfZm9ybWF0LAotCQkucG9zdF9raWNrb2ZmID0gZHNp X2Nvbm5fcG9zdF9raWNrb2ZmCi0JfTsKLQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyBpbmZvOwot CXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQl2b2lkICpkaXNwbGF5LCAqY29ubmVjdG9y OwotCWludCBpLCByYzsKLQotCS8qIGRzaSAqLwotCWZvciAoaSA9IDA7IGkgPCBkcHVfa21zLT5k c2lfZGlzcGxheV9jb3VudCAmJgotCQlwcml2LT5udW1fZW5jb2RlcnMgPCBtYXhfZW5jb2RlcnM7 ICsraSkgewotCQlkaXNwbGF5ID0gZHB1X2ttcy0+ZHNpX2Rpc3BsYXlzW2ldOwotCQllbmNvZGVy ID0gTlVMTDsKLQotCQltZW1zZXQoJmluZm8sIDB4MCwgc2l6ZW9mKGluZm8pKTsKLQkJcmMgPSBk c2lfZGlzcGxheV9nZXRfaW5mbygmaW5mbywgZGlzcGxheSk7Ci0JCWlmIChyYykgewotCQkJRFBV X0VSUk9SKCJkc2kgZ2V0X2luZm8gJWQgZmFpbGVkXG4iLCBpKTsKLQkJCWNvbnRpbnVlOwotCQl9 Ci0KLQkJZW5jb2RlciA9IGRwdV9lbmNvZGVyX2luaXQoZGV2LCAmaW5mbyk7Ci0JCWlmIChJU19F UlJfT1JfTlVMTChlbmNvZGVyKSkgewotCQkJRFBVX0VSUk9SKCJlbmNvZGVyIGluaXQgZmFpbGVk IGZvciBkc2kgJWRcbiIsIGkpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlyYyA9IGRzaV9kaXNw bGF5X2RybV9icmlkZ2VfaW5pdChkaXNwbGF5LCBlbmNvZGVyKTsKLQkJaWYgKHJjKSB7Ci0JCQlE UFVfRVJST1IoImRzaSBicmlkZ2UgJWQgaW5pdCBmYWlsZWQsICVkXG4iLCBpLCByYyk7Ci0JCQlk cHVfZW5jb2Rlcl9kZXN0cm95KGVuY29kZXIpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQljb25u ZWN0b3IgPSBkcHVfY29ubmVjdG9yX2luaXQoZGV2LAotCQkJCQllbmNvZGVyLAotCQkJCQkwLAot CQkJCQlkaXNwbGF5LAotCQkJCQkmZHNpX29wcywKLQkJCQkJRFJNX0NPTk5FQ1RPUl9QT0xMX0hQ RCwKLQkJCQkJRFJNX01PREVfQ09OTkVDVE9SX0RTSSk7Ci0JCWlmIChjb25uZWN0b3IpIHsKLQkJ CXByaXYtPmVuY29kZXJzW3ByaXYtPm51bV9lbmNvZGVycysrXSA9IGVuY29kZXI7Ci0JCX0gZWxz ZSB7Ci0JCQlEUFVfRVJST1IoImRzaSAlZCBjb25uZWN0b3IgaW5pdCBmYWlsZWRcbiIsIGkpOwot CQkJZHNpX2Rpc3BsYXlfZHJtX2JyaWRnZV9kZWluaXQoZGlzcGxheSk7Ci0JCQlkcHVfZW5jb2Rl cl9kZXN0cm95KGVuY29kZXIpOwotCQl9Ci0JfQotfQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdf RFJNX01TTV9XUklURUJBQ0sKLXN0YXRpYyB2b2lkIF9kcHVfa21zX2luaXRpYWxpemVfd2Ioc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2 LAotCQkJCSAgIHN0cnVjdCBkcHVfa21zICpkcHVfa21zLAotCQkJCSAgIHVuc2lnbmVkIG1heF9l bmNvZGVycykKKwkJCQkgICAgc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCiB7Ci0Jc3RhdGljIGNv bnN0IHN0cnVjdCBkcHVfY29ubmVjdG9yX29wcyB3Yl9vcHMgPSB7Ci0JCS5wb3N0X2luaXQgPSAg ICBkcHVfd2JfY29ubmVjdG9yX3Bvc3RfaW5pdCwKLQkJLmRldGVjdCA9ICAgICAgIGRwdV93Yl9j b25uZWN0b3JfZGV0ZWN0LAotCQkuZ2V0X21vZGVzID0gICAgZHB1X3diX2Nvbm5lY3Rvcl9nZXRf bW9kZXMsCi0JCS5zZXRfcHJvcGVydHkgPSBkcHVfd2JfY29ubmVjdG9yX3NldF9wcm9wZXJ0eSwK LQkJLmdldF9pbmZvID0gICAgIGRwdV93Yl9nZXRfaW5mbywKLQkJLnNvZnRfcmVzZXQgPSAgIE5V TEwsCi0JCS5nZXRfbW9kZV9pbmZvID0gZHB1X3diX2dldF9tb2RlX2luZm8sCi0JCS5nZXRfZHN0 X2Zvcm1hdCA9IE5VTEwKLQl9OwotCXN0cnVjdCBtc21fZGlzcGxheV9pbmZvIGluZm87Ci0Jc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwotCXZvaWQgKmRpc3BsYXksICpjb25uZWN0b3I7CisJ c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gTlVMTDsKIAlpbnQgaSwgcmM7CiAKLQkvKiB3 YiAqLwotCWZvciAoaSA9IDA7IGkgPCBkcHVfa21zLT53Yl9kaXNwbGF5X2NvdW50ICYmCi0JCXBy aXYtPm51bV9lbmNvZGVycyA8IG1heF9lbmNvZGVyczsgKytpKSB7Ci0JCWRpc3BsYXkgPSBkcHVf a21zLT53Yl9kaXNwbGF5c1tpXTsKLQkJZW5jb2RlciA9IE5VTEw7Ci0KLQkJbWVtc2V0KCZpbmZv LCAweDAsIHNpemVvZihpbmZvKSk7Ci0JCXJjID0gZHB1X3diX2dldF9pbmZvKCZpbmZvLCBkaXNw bGF5KTsKLQkJaWYgKHJjKSB7Ci0JCQlEUFVfRVJST1IoIndiIGdldF9pbmZvICVkIGZhaWxlZFxu IiwgaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWVuY29kZXIgPSBkcHVfZW5jb2Rlcl9pbml0 KGRldiwgJmluZm8pOwotCQlpZiAoSVNfRVJSX09SX05VTEwoZW5jb2RlcikpIHsKLQkJCURQVV9F UlJPUigiZW5jb2RlciBpbml0IGZhaWxlZCBmb3Igd2IgJWRcbiIsIGkpOwotCQkJY29udGludWU7 Ci0JCX0KLQotCQlyYyA9IGRwdV93Yl9kcm1faW5pdChkaXNwbGF5LCBlbmNvZGVyKTsKLQkJaWYg KHJjKSB7Ci0JCQlEUFVfRVJST1IoIndiIGJyaWRnZSAlZCBpbml0IGZhaWxlZCwgJWRcbiIsIGks IHJjKTsKLQkJCWRwdV9lbmNvZGVyX2Rlc3Ryb3koZW5jb2Rlcik7Ci0JCQljb250aW51ZTsKLQkJ fQotCi0JCWNvbm5lY3RvciA9IGRwdV9jb25uZWN0b3JfaW5pdChkZXYsCi0JCQkJZW5jb2RlciwK LQkJCQkwLAotCQkJCWRpc3BsYXksCi0JCQkJJndiX29wcywKLQkJCQlEUk1fQ09OTkVDVE9SX1BP TExfSFBELAotCQkJCURSTV9NT0RFX0NPTk5FQ1RPUl9WSVJUVUFMKTsKLQkJaWYgKGNvbm5lY3Rv cikgewotCQkJcHJpdi0+ZW5jb2RlcnNbcHJpdi0+bnVtX2VuY29kZXJzKytdID0gZW5jb2RlcjsK LQkJfSBlbHNlIHsKLQkJCURQVV9FUlJPUigid2IgJWQgY29ubmVjdG9yIGluaXQgZmFpbGVkXG4i LCBpKTsKLQkJCWRwdV93Yl9kcm1fZGVpbml0KGRpc3BsYXkpOwotCQkJZHB1X2VuY29kZXJfZGVz dHJveShlbmNvZGVyKTsKLQkJfQorCS8qVE9ETzogU3VwcG9ydCB0d28gaW5kZXBlbmRlbnQgRFNJ IGNvbm5lY3RvcnMgKi8KKwllbmNvZGVyID0gZHB1X2VuY29kZXJfaW5pdChkZXYsIERSTV9NT0RF X0NPTk5FQ1RPUl9EU0kpOworCWlmIChJU19FUlJfT1JfTlVMTChlbmNvZGVyKSkgeworCQlEUFVf RVJST1IoImVuY29kZXIgaW5pdCBmYWlsZWQgZm9yIGRzaSBkaXNwbGF5XG4iKTsKKwkJcmV0dXJu OwogCX0KLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0RSTV9NU01fRElTUExBWVBPUlQKLXN0 YXRpYyB2b2lkIF9kcHVfa21zX2luaXRpYWxpemVfZHAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK LQkJCQkgICBzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2LAotCQkJCSAgIHN0cnVjdCBkcHVf a21zICpkcHVfa21zLAotCQkJCSAgIHVuc2lnbmVkIG1heF9lbmNvZGVycykKLXsKLQlzdGF0aWMg Y29uc3Qgc3RydWN0IGRwdV9jb25uZWN0b3Jfb3BzIGRwX29wcyA9IHsKLQkJLnBvc3RfaW5pdCAg PSBkcF9jb25uZWN0b3JfcG9zdF9pbml0LAotCQkuZGV0ZWN0ICAgICA9IGRwX2Nvbm5lY3Rvcl9k ZXRlY3QsCi0JCS5nZXRfbW9kZXMgID0gZHBfY29ubmVjdG9yX2dldF9tb2RlcywKLQkJLm1vZGVf dmFsaWQgPSBkcF9jb25uZWN0b3JfbW9kZV92YWxpZCwKLQkJLmdldF9pbmZvICAgPSBkcF9jb25u ZWN0b3JfZ2V0X2luZm8sCi0JCS5nZXRfbW9kZV9pbmZvICA9IGRwX2Nvbm5lY3Rvcl9nZXRfbW9k ZV9pbmZvLAotCQkuc2VuZF9ocGRfZXZlbnQgPSBkcF9jb25uZWN0b3Jfc2VuZF9ocGRfZXZlbnQs Ci0JfTsKLQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyBpbmZvOwotCXN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlcjsKLQl2b2lkICpkaXNwbGF5LCAqY29ubmVjdG9yOwotCWludCBpLCByYzsKIAot CS8qIGRwICovCi0JZm9yIChpID0gMDsgaSA8IGRwdV9rbXMtPmRwX2Rpc3BsYXlfY291bnQgJiYK LQkJCXByaXYtPm51bV9lbmNvZGVycyA8IG1heF9lbmNvZGVyczsgKytpKSB7Ci0JCWRpc3BsYXkg PSBkcHVfa21zLT5kcF9kaXNwbGF5c1tpXTsKLQkJZW5jb2RlciA9IE5VTEw7CisJcHJpdi0+ZW5j b2RlcnNbcHJpdi0+bnVtX2VuY29kZXJzKytdID0gZW5jb2RlcjsKIAotCQltZW1zZXQoJmluZm8s IDB4MCwgc2l6ZW9mKGluZm8pKTsKLQkJcmMgPSBkcF9jb25uZWN0b3JfZ2V0X2luZm8oJmluZm8s IGRpc3BsYXkpOwotCQlpZiAocmMpIHsKLQkJCURQVV9FUlJPUigiZHAgZ2V0X2luZm8gJWQgZmFp bGVkXG4iLCBpKTsKLQkJCWNvbnRpbnVlOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBy aXYtPmRzaSk7IGkrKykgeworCQlpZiAoIXByaXYtPmRzaVtpXSkgeworCQkJRFBVX0RFQlVHKCJp bnZhbGlkIG1zbV9kc2kgZm9yIGN0cmwgJWRcbiIsIGkpOworCQkJcmV0dXJuOwogCQl9CiAKLQkJ ZW5jb2RlciA9IGRwdV9lbmNvZGVyX2luaXQoZGV2LCAmaW5mbyk7Ci0JCWlmIChJU19FUlJfT1Jf TlVMTChlbmNvZGVyKSkgewotCQkJRFBVX0VSUk9SKCJkcCBlbmNvZGVyIGluaXQgZmFpbGVkICVk XG4iLCBpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcmMgPSBkcF9kcm1fYnJpZGdlX2luaXQo ZGlzcGxheSwgZW5jb2Rlcik7CisJCXJjID0gbXNtX2RzaV9tb2Rlc2V0X2luaXQocHJpdi0+ZHNp W2ldLCBkZXYsIGVuY29kZXIpOwogCQlpZiAocmMpIHsKLQkJCURQVV9FUlJPUigiZHAgYnJpZGdl ICVkIGluaXQgZmFpbGVkLCAlZFxuIiwgaSwgcmMpOwotCQkJZHB1X2VuY29kZXJfZGVzdHJveShl bmNvZGVyKTsKKwkJCURQVV9FUlJPUigibW9kZXNldF9pbml0IGZhaWxlZCBmb3IgZHNpWyVkXSwg cmMgPSAlZFxuIiwKKwkJCQlpLCByYyk7CiAJCQljb250aW51ZTsKIAkJfQotCi0JCWNvbm5lY3Rv ciA9IGRwdV9jb25uZWN0b3JfaW5pdChkZXYsCi0JCQkJCWVuY29kZXIsCi0JCQkJCU5VTEwsCi0J CQkJCWRpc3BsYXksCi0JCQkJCSZkcF9vcHMsCi0JCQkJCURSTV9DT05ORUNUT1JfUE9MTF9IUEQs Ci0JCQkJCURSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCk7Ci0JCWlmIChjb25uZWN0b3Ip IHsKLQkJCXByaXYtPmVuY29kZXJzW3ByaXYtPm51bV9lbmNvZGVycysrXSA9IGVuY29kZXI7Ci0J CX0gZWxzZSB7Ci0JCQlEUFVfRVJST1IoImRwICVkIGNvbm5lY3RvciBpbml0IGZhaWxlZFxuIiwg aSk7Ci0JCQlkcF9kcm1fYnJpZGdlX2RlaW5pdChkaXNwbGF5KTsKLQkJCWRwdV9lbmNvZGVyX2Rl c3Ryb3koZW5jb2Rlcik7Ci0JCX0KIAl9CiB9Ci0jZW5kaWYKIAogLyoqCiAgKiBfZHB1X2ttc19z ZXR1cF9kaXNwbGF5cyAtIGNyZWF0ZSBlbmNvZGVycywgYnJpZGdlcyBhbmQgY29ubmVjdG9ycwpA QCAtODc3LDI2ICs1NjksMTIgQEAgc3RhdGljIHZvaWQgX2RwdV9rbXNfc2V0dXBfZGlzcGxheXMo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAq cHJpdiwKIAkJCQkgICAgc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCiB7Ci0JdW5zaWduZWQgbWF4 X2VuY29kZXJzOwotCi0JbWF4X2VuY29kZXJzID0gZHB1X2ttcy0+ZHNpX2Rpc3BsYXlfY291bnQg KyBkcHVfa21zLT53Yl9kaXNwbGF5X2NvdW50ICsKLQkJCQlkcHVfa21zLT5kcF9kaXNwbGF5X2Nv dW50OwotCWlmIChtYXhfZW5jb2RlcnMgPiBBUlJBWV9TSVpFKHByaXYtPmVuY29kZXJzKSkgewot CQltYXhfZW5jb2RlcnMgPSBBUlJBWV9TSVpFKHByaXYtPmVuY29kZXJzKTsKLQkJRFBVX0VSUk9S KCJjYXBwaW5nIG51bWJlciBvZiBkaXNwbGF5cyB0byAlZCIsIG1heF9lbmNvZGVycyk7Ci0JfQot Ci0jaWZkZWYgQ09ORklHX0RSTV9NU01fRFNJX1NUQUdJTkcKLQlfZHB1X2ttc19pbml0aWFsaXpl X2RzaShkZXYsIHByaXYsIGRwdV9rbXMsIG1heF9lbmNvZGVycyk7Ci0jZW5kaWYKKwlfZHB1X2tt c19pbml0aWFsaXplX2RzaShkZXYsIHByaXYsIGRwdV9rbXMpOwogCi0jaWZkZWYgQ09ORklHX0RS TV9NU01fV1JJVEVCQUNLCi0JX2RwdV9rbXNfaW5pdGlhbGl6ZV93YihkZXYsIHByaXYsIGRwdV9r bXMsIG1heF9lbmNvZGVycyk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19EUk1fTVNNX0RJU1BM QVlQT1JUCi0JX2RwdV9rbXNfaW5pdGlhbGl6ZV9kcChkZXYsIHByaXYsIGRwdV9rbXMsIG1heF9l bmNvZGVycyk7Ci0jZW5kaWYKKwkvKioKKwkgKiBFeHRlbmQgdGhpcyBmdW5jdGlvbiB0byBpbml0 aWFsaXplIG90aGVyCisJICogdHlwZXMgb2YgZGlzcGxheXMKKwkgKi8KIH0KIAogc3RhdGljIHZv aWQgX2RwdV9rbXNfZHJtX29ial9kZXN0cm95KHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQpAQCAt OTMxLDggKzYwOSw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfa21zX2RybV9vYmpfZGVzdHJveShzdHJ1 Y3QgZHB1X2ttcyAqZHB1X2ttcykKIAlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX2VuY29kZXJz OyBpKyspCiAJCXByaXYtPmVuY29kZXJzW2ldLT5mdW5jcy0+ZGVzdHJveShwcml2LT5lbmNvZGVy c1tpXSk7CiAJcHJpdi0+bnVtX2VuY29kZXJzID0gMDsKLQotCV9kcHVfa21zX3JlbGVhc2VfZGlz cGxheXMoZHB1X2ttcyk7CiB9CiAKIHN0YXRpYyBpbnQgX2RwdV9rbXNfZHJtX29ial9pbml0KHN0 cnVjdCBkcHVfa21zICpkcHVfa21zKQpAQCAtOTYzLDEyICs2MzksMTIgQEAgc3RhdGljIGludCBf ZHB1X2ttc19kcm1fb2JqX2luaXQoc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCiAJcmV0ID0gZHB1 X2NvcmVfaXJxX2RvbWFpbl9hZGQoZHB1X2ttcyk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsX2ly cTsKKwogCS8qCi0JICogUXVlcnkgZm9yIHVuZGVybHlpbmcgZGlzcGxheSBkcml2ZXJzLCBhbmQg Y3JlYXRlIGNvbm5lY3RvcnMsCi0JICogYnJpZGdlcyBhbmQgZW5jb2RlcnMgZm9yIHRoZW0uCisJ ICogQ3JlYXRlIGVuY29kZXIgYW5kIHF1ZXJ5IGRpc3BsYXkgZHJpdmVycyB0byBjcmVhdGUKKwkg KiBicmlkZ2VzIGFuZCBjb25uZWN0b3JzCiAJICovCi0JaWYgKCFfZHB1X2ttc19nZXRfZGlzcGxh eXMoZHB1X2ttcykpCi0JCSh2b2lkKV9kcHVfa21zX3NldHVwX2Rpc3BsYXlzKGRldiwgcHJpdiwg ZHB1X2ttcyk7CisJX2RwdV9rbXNfc2V0dXBfZGlzcGxheXMoZGV2LCBwcml2LCBkcHVfa21zKTsK IAogCW1heF9jcnRjX2NvdW50ID0gbWluKGNhdGFsb2ctPm1peGVyX2NvdW50LCBwcml2LT5udW1f ZW5jb2RlcnMpOwogCkBAIC0xMzg2LDggKzEwNjIsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2ttc19o d19kZXN0cm95KHN0cnVjdCBkcHVfa21zICpkcHVfa21zLAogCQlkcHVfcG93ZXJfaGFuZGxlX3Vu cmVnaXN0ZXJfZXZlbnQoCiAJCQkJJnByaXYtPnBoYW5kbGUsIGRwdV9rbXMtPnBvd2VyX2V2ZW50 KTsKIAotCV9kcHVfa21zX3JlbGVhc2VfZGlzcGxheXMoZHB1X2ttcyk7Ci0KIAkvKiBzYWZlIHRv IGNhbGwgdGhlc2UgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHNodXRkb3duICovCiAJX2RwdV9kZWJ1 Z2ZzX2Rlc3Ryb3koZHB1X2ttcyk7CiAJX2RwdV9rbXNfbW11X2Rlc3Ryb3koZHB1X2ttcyk7CkBA IC0xNTkwLDUzICsxMjY0LDEwIEBAIHN0YXRpYyBpbnQgZHB1X2ttc19hdG9taWNfY2hlY2soc3Ry dWN0IG1zbV9rbXMgKmttcywKIAkJZHB1X2ttcy0+YXNwYWNlW2RvbWFpbl0gOiBOVUxMOwogfQog Ci1zdGF0aWMgdm9pZCBfZHB1X2ttc19wb3N0X29wZW4oc3RydWN0IG1zbV9rbXMgKmttcywgc3Ry dWN0IGRybV9maWxlICpmaWxlKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBOVUxMOwot CXN0cnVjdCBkcHVfa21zICpkcHVfa21zID0gTlVMTDsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yID0gTlVMTDsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXIgY29ubl9p dGVyOwotCXN0cnVjdCBkcHVfY29ubmVjdG9yICpkcHVfY29ubiA9IE5VTEw7Ci0KLQlpZiAoIWtt cykgewotCQlEUFVfRVJST1IoImludmFsaWQga21zXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWRw dV9rbXMgPSB0b19kcHVfa21zKGttcyk7Ci0JZGV2ID0gZHB1X2ttcy0+ZGV2OwotCi0JaWYgKCFk ZXYpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGRldmljZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0K LQlpZiAoIWRldi0+bW9kZV9jb25maWcucG9sbF9lbmFibGVkKQotCQlyZXR1cm47Ci0KLQltdXRl eF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKLQlkcm1fY29ubmVjdG9yX2xpc3RfaXRl cl9iZWdpbihkZXYsICZjb25uX2l0ZXIpOwotCWRybV9mb3JfZWFjaF9jb25uZWN0b3JfaXRlcihj b25uZWN0b3IsICZjb25uX2l0ZXIpIHsKLQkJLyogT25seSBoYW5kbGUgSFBEIGNhcGFibGUgY29u bmVjdG9ycy4gKi8KLQkJaWYgKCEoY29ubmVjdG9yLT5wb2xsZWQgJiBEUk1fQ09OTkVDVE9SX1BP TExfSFBEKSkKLQkJCWNvbnRpbnVlOwotCi0JCWRwdV9jb25uID0gdG9fZHB1X2Nvbm5lY3Rvcihj b25uZWN0b3IpOwotCi0JCWlmIChkcHVfY29ubi0+b3BzLnNlbmRfaHBkX2V2ZW50KQotCQkJZHB1 X2Nvbm4tPm9wcy5zZW5kX2hwZF9ldmVudChkcHVfY29ubi0+ZGlzcGxheSk7Ci0JfQotCWRybV9j b25uZWN0b3JfbGlzdF9pdGVyX2VuZCgmY29ubl9pdGVyKTsKLQltdXRleF91bmxvY2soJmRldi0+ bW9kZV9jb25maWcubXV0ZXgpOwotCi19Ci0KIHN0YXRpYyBpbnQgZHB1X2ttc19wbV9zdXNwZW5k KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldjsKIAlzdHJ1 Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggY3R4OwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7CiAJc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOwogCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOwogCWlu dCByZXQgPSAwLCBudW1fY3J0Y3MgPSAwOwpAQCAtMTY4MCw0NSArMTMxMSw2IEBAIHN0YXRpYyBp bnQgZHB1X2ttc19wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAl9CiAKIAlzdGF0ZS0+ YWNxdWlyZV9jdHggPSAmY3R4OwotCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2JlZ2luKGRkZXYs ICZjb25uX2l0ZXIpOwotCWRybV9mb3JfZWFjaF9jb25uZWN0b3JfaXRlcihjb25uLCAmY29ubl9p dGVyKSB7Ci0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKLQkJdWludDY0X3Qg bHA7Ci0KLQkJaWYgKCFjb25uLT5zdGF0ZSB8fCAhY29ubi0+c3RhdGUtPmNydGMgfHwKLQkJCQlj b25uLT5kcG1zICE9IERSTV9NT0RFX0RQTVNfT04pCi0JCQljb250aW51ZTsKLQotCQlscCA9IGRw dV9jb25uZWN0b3JfZ2V0X2xwKGNvbm4pOwotCQlpZiAobHAgPT0gRFBVX01PREVfRFBNU19MUDEp IHsKLQkJCS8qIHRyYW5zaXRpb24gTFAxLT5MUDIgb24gcG0gc3VzcGVuZCAqLwotCQkJcmV0ID0g ZHB1X2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHlfZm9yX2NvbW1pdChjb25uLCBzdGF0ZSwKLQkJCQkJ Q09OTkVDVE9SX1BST1BfTFAsIERQVV9NT0RFX0RQTVNfTFAyKTsKLQkJCWlmIChyZXQpIHsKLQkJ CQlEUk1fRVJST1IoImZhaWxlZCB0byBzZXQgbHAyIGZvciBjb25uICVkXG4iLAotCQkJCQkJY29u bi0+YmFzZS5pZCk7Ci0JCQkJZHJtX2F0b21pY19zdGF0ZV9wdXQoc3RhdGUpOwotCQkJCWdvdG8g dW5sb2NrOwotCQkJfQotCQl9Ci0KLQkJaWYgKGxwICE9IERQVV9NT0RFX0RQTVNfTFAyKSB7Ci0J CQkvKiBmb3JjZSBDUlRDIHRvIGJlIGluYWN0aXZlICovCi0JCQljcnRjX3N0YXRlID0gZHJtX2F0 b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwKLQkJCQkJY29ubi0+c3RhdGUtPmNydGMpOwotCQkJ aWYgKElTX0VSUl9PUl9OVUxMKGNydGNfc3RhdGUpKSB7Ci0JCQkJRFJNX0VSUk9SKCJmYWlsZWQg dG8gZ2V0IGNydGMgJWQgc3RhdGVcbiIsCi0JCQkJCQljb25uLT5zdGF0ZS0+Y3J0Yy0+YmFzZS5p ZCk7Ci0JCQkJZHJtX2F0b21pY19zdGF0ZV9wdXQoc3RhdGUpOwotCQkJCWdvdG8gdW5sb2NrOwot CQkJfQotCi0JCQlpZiAobHAgIT0gRFBVX01PREVfRFBNU19MUDEpCi0JCQkJY3J0Y19zdGF0ZS0+ YWN0aXZlID0gZmFsc2U7Ci0JCQkrK251bV9jcnRjczsKLQkJfQotCX0KLQlkcm1fY29ubmVjdG9y X2xpc3RfaXRlcl9lbmQoJmNvbm5faXRlcik7CiAKIAkvKiBjaGVjayBmb3Igbm90aGluZyB0byBk byAqLwogCWlmIChudW1fY3J0Y3MgPT0gMCkgewpAQCAtMTc5MCw2ICsxMzgyLDM0IEBAIHN0YXRp YyBpbnQgZHB1X2ttc19wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogCXJldHVybiAwOwog fQogCit2b2lkIF9kcHVfa21zX3NldF9lbmNvZGVyX21vZGUoc3RydWN0IG1zbV9rbXMgKmttcywK KwkJCQkgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSBib29sIGNtZF9tb2RlKQor eworCXN0cnVjdCBtc21fZGlzcGxheV9pbmZvIGluZm87CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0 ZSAqcHJpdiA9IGVuY29kZXItPmRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGksIHJjID0gMDsKKwor CW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKworCWluZm8uaW50Zl90eXBlID0gZW5j b2Rlci0+ZW5jb2Rlcl90eXBlOworCWluZm8uY2FwYWJpbGl0aWVzID0gY21kX21vZGUgPyBNU01f RElTUExBWV9DQVBfQ01EX01PREUgOgorCQkJTVNNX0RJU1BMQVlfQ0FQX1ZJRF9NT0RFOworCisJ LyogVE9ETzogTm8gc3VwcG9ydCBmb3IgRFNJIHN3YXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShwcml2LT5kc2kpOyBpKyspIHsKKwkJaWYgKHByaXYtPmRzaVtpXSkgeworCQkJaW5m by5oX3RpbGVfaW5zdGFuY2VbaW5mby5udW1fb2ZfaF90aWxlc10gPSBpOworCQkJaW5mby5udW1f b2ZfaF90aWxlcysrOworCQl9CisJfQorCisJcmMgPSBkcHVfZW5jb2Rlcl9zZXR1cChlbmNvZGVy LT5kZXYsIGVuY29kZXIsICZpbmZvKTsKKwlpZiAocmMpCisJCURQVV9FUlJPUigiZmFpbGVkIHRv IHNldHVwIERQVSBlbmNvZGVyICVkOiByYzolZFxuIiwKKwkJCWVuY29kZXItPmJhc2UuaWQsIHJj KTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBtc21fa21zX2Z1bmNzIGttc19mdW5jcyA9IHsK IAkuaHdfaW5pdCAgICAgICAgID0gZHB1X2ttc19od19pbml0LAogCS5wb3N0aW5pdCAgICAgICAg PSBkcHVfa21zX3Bvc3Rpbml0LApAQCAtMTgxMyw3ICsxNDMzLDcgQEAgc3RhdGljIGludCBkcHVf a21zX3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJLnBtX3Jlc3VtZSAgICAgICA9IGRw dV9rbXNfcG1fcmVzdW1lLAogCS5kZXN0cm95ICAgICAgICAgPSBkcHVfa21zX2Rlc3Ryb3ksCiAJ LmdldF9hZGRyZXNzX3NwYWNlID0gX2RwdV9rbXNfZ2V0X2FkZHJlc3Nfc3BhY2UsCi0JLnBvc3Rv cGVuID0gX2RwdV9rbXNfcG9zdF9vcGVuLAorCS5zZXRfZW5jb2Rlcl9tb2RlID0gX2RwdV9rbXNf c2V0X2VuY29kZXJfbW9kZSwKIH07CiAKIC8qIHRoZSBjYWxsZXIgYXBpIG5lZWRzIHRvIHR1cm4g b24gY2xvY2sgYmVmb3JlIGNhbGxpbmcgaXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9rbXMuaAppbmRleCAzNzExZGFmOC4uNWIwYzA4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9rbXMuaApAQCAtMjAwLDEyICsyMDAsNiBAQCBzdHJ1Y3QgZHB1X2ttcyB7 CiAKIAlzdHJ1Y3QgZHB1X2h3X3ZiaWYgKmh3X3ZiaWZbVkJJRl9NQVhdOwogCXN0cnVjdCBkcHVf aHdfbWRwICpod19tZHA7Ci0JaW50IGRzaV9kaXNwbGF5X2NvdW50OwotCXZvaWQgKipkc2lfZGlz cGxheXM7Ci0JaW50IHdiX2Rpc3BsYXlfY291bnQ7Ci0Jdm9pZCAqKndiX2Rpc3BsYXlzOwotCWlu dCBkcF9kaXNwbGF5X2NvdW50OwotCXZvaWQgKipkcF9kaXNwbGF5czsKIAogCWJvb2wgaGFzX2Rh bmdlcl9jdHJsOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9ybS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKaW5kZXgg YzhjMTJkMy4uZGM3NDBjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X3JtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMK QEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlICJkcHVfaHdfaW50Zi5oIgogI2luY2x1ZGUgImRw dV9od193Yi5oIgogI2luY2x1ZGUgImRwdV9lbmNvZGVyLmgiCi0jaW5jbHVkZSAiZHB1X2Nvbm5l Y3Rvci5oIgogCiAjZGVmaW5lIFJFU0VSVkVEX0JZX09USEVSKGgsIHIpIFwKIAkoKGgpLT5yc3Zw ICYmICgoaCktPnJzdnAtPmVuY19pZCAhPSAociktPmVuY19pZCkpCkBAIC0xNTgsNiArMTU3LDE4 IEBAIHN0cnVjdCBkcHVfaHdfbWRwICpkcHVfcm1fZ2V0X21kcChzdHJ1Y3QgZHB1X3JtICpybSkK IAlyZXR1cm4gcm0tPmh3X21kcDsKIH0KIAorZW51bSBkcHVfcm1fdG9wb2xvZ3lfbmFtZQorZHB1 X3JtX2dldF90b3BvbG9neV9uYW1lKHN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9n eSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBEUFVfUk1fVE9QT0xPR1lfTUFYOyBp KyspCisJCWlmIChSTV9JU19UT1BPTE9HWV9NQVRDSChnX3RvcF90YWJsZVtpXSwgdG9wb2xvZ3kp KQorCQkJcmV0dXJuIGdfdG9wX3RhYmxlW2ldLnRvcF9uYW1lOworCisJcmV0dXJuIERQVV9STV9U T1BPTE9HWV9OT05FOworfQorCiB2b2lkIGRwdV9ybV9pbml0X2h3X2l0ZXIoCiAJCXN0cnVjdCBk cHVfcm1faHdfaXRlciAqaXRlciwKIAkJdWludDMyX3QgZW5jX2lkLApAQCAtOTU0LDIwICs5NjUs MTkgQEAgc3RhdGljIGludCBfZHB1X3JtX3BvcHVsYXRlX3JlcXVpcmVtZW50cygKIAkJc3RydWN0 IGRybV9lbmNvZGVyICplbmMsCiAJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwK IAkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUsCi0JCXN0cnVjdCBkcHVf cm1fcmVxdWlyZW1lbnRzICpyZXFzKQorCQlzdHJ1Y3QgZHB1X3JtX3JlcXVpcmVtZW50cyAqcmVx cywKKwkJc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHJlcV90b3BvbG9neSkKIHsKIAljb25z dCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZjcnRjX3N0YXRlLT5tb2RlOwogCWlu dCBpOwogCiAJbWVtc2V0KHJlcXMsIDAsIHNpemVvZigqcmVxcykpOwogCi0JcmVxcy0+dG9wX2N0 cmwgPSBkcHVfY29ubmVjdG9yX2dldF9wcm9wZXJ0eShjb25uX3N0YXRlLAotCQkJQ09OTkVDVE9S X1BST1BfVE9QT0xPR1lfQ09OVFJPTCk7CiAJZHB1X2VuY29kZXJfZ2V0X2h3X3Jlc291cmNlcyhl bmMsICZyZXFzLT5od19yZXMsIGNvbm5fc3RhdGUpOwogCiAJZm9yIChpID0gMDsgaSA8IERQVV9S TV9UT1BPTE9HWV9NQVg7IGkrKykgewogCQlpZiAoUk1fSVNfVE9QT0xPR1lfTUFUQ0goZ190b3Bf dGFibGVbaV0sCi0JCQkJCXJlcXMtPmh3X3Jlcy50b3BvbG9neSkpIHsKKwkJCQkJcmVxX3RvcG9s b2d5KSkgewogCQkJcmVxcy0+dG9wb2xvZ3kgPSAmZ190b3BfdGFibGVbaV07CiAJCQlicmVhazsK IAkJfQpAQCAtOTc4LDEwICs5ODgsNiBAQCBzdGF0aWMgaW50IF9kcHVfcm1fcG9wdWxhdGVfcmVx dWlyZW1lbnRzKAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBEU0MgYmxvY2tzIGFyZSBo YXJkd2lyZWQgZm9yIGNvbnRyb2wgcGF0aCAwIGFuZCAxICovCi0JaWYgKHJlcXMtPnRvcG9sb2d5 LT5udW1fY29tcF9lbmMpCi0JCXJlcXMtPnRvcF9jdHJsIHw9IEJJVChEUFVfUk1fVE9QQ1RMX0RT UFApOwotCiAJLyoqCiAJICogU2V0IHRoZSByZXF1aXJlbWVudCBiYXNlZCBvbiBjYXBzIGlmIG5v dCBzZXQgZnJvbSB1c2VyIHNwYWNlCiAJICogVGhpcyB3aWxsIGVuc3VyZSB0byBzZWxlY3QgTE0g dGllZCB3aXRoIERTIGJsb2NrcwpAQCAtMTA4OSw3ICsxMDk1LDYgQEAgdm9pZCBkcHVfcm1fcmVs ZWFzZShzdHJ1Y3QgZHB1X3JtICpybSwgc3RydWN0IGRybV9lbmNvZGVyICplbmMpCiB7CiAJc3Ry dWN0IGRwdV9ybV9yc3ZwICpyc3ZwOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOwotCXVp bnQ2NF90IHRvcF9jdHJsOwogCiAJaWYgKCFybSB8fCAhZW5jKSB7CiAJCURQVV9FUlJPUigiaW52 YWxpZCBwYXJhbXNcbiIpOwpAQCAtMTExMCwyNCArMTExNSw3IEBAIHZvaWQgZHB1X3JtX3JlbGVh c2Uoc3RydWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jKQogCQlnb3RvIGVu ZDsKIAl9CiAKLQl0b3BfY3RybCA9IGRwdV9jb25uZWN0b3JfZ2V0X3Byb3BlcnR5KGNvbm4tPnN0 YXRlLAotCQkJQ09OTkVDVE9SX1BST1BfVE9QT0xPR1lfQ09OVFJPTCk7Ci0KLQlpZiAodG9wX2N0 cmwgJiBCSVQoRFBVX1JNX1RPUENUTF9SRVNFUlZFX0xPQ0spKSB7Ci0JCURQVV9ERUJVRygicnN2 cFtzJWRlJWRdIG5vdCByZWxlYXNpbmcgbG9ja2VkIHJlc291cmNlc1xuIiwKLQkJCQlyc3ZwLT5z ZXEsIHJzdnAtPmVuY19pZCk7Ci0JfSBlbHNlIHsKLQkJRFBVX0RFQlVHKCJyZWxlYXNlIHJzdnBb cyVkZSVkXVxuIiwgcnN2cC0+c2VxLAotCQkJCXJzdnAtPmVuY19pZCk7Ci0JCV9kcHVfcm1fcmVs ZWFzZV9yc3ZwKHJtLCByc3ZwLCBjb25uKTsKLQotCQkodm9pZCkgbXNtX3Byb3BlcnR5X3NldF9w cm9wZXJ0eSgKLQkJCQlkcHVfY29ubmVjdG9yX2dldF9wcm9waW5mbyhjb25uKSwKLQkJCQlkcHVf Y29ubmVjdG9yX2dldF9wcm9wZXJ0eV9zdGF0ZShjb25uLT5zdGF0ZSksCi0JCQkJQ09OTkVDVE9S X1BST1BfVE9QT0xPR1lfTkFNRSwKLQkJCQlEUFVfUk1fVE9QT0xPR1lfTk9ORSk7Ci0JfQotCisJ X2RwdV9ybV9yZWxlYXNlX3JzdnAocm0sIHJzdnAsIGNvbm4pOwogZW5kOgogCW11dGV4X3VubG9j aygmcm0tPnJtX2xvY2spOwogfQpAQCAtMTE0MSwxOCArMTEyOSw2IEBAIHN0YXRpYyBpbnQgX2Rw dV9ybV9jb21taXRfcnN2cCgKIAllbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlOwogCWludCByZXQg PSAwOwogCi0JcmV0ID0gbXNtX3Byb3BlcnR5X3NldF9wcm9wZXJ0eSgKLQkJCWRwdV9jb25uZWN0 b3JfZ2V0X3Byb3BpbmZvKGNvbm5fc3RhdGUtPmNvbm5lY3RvciksCi0JCQlkcHVfY29ubmVjdG9y X2dldF9wcm9wZXJ0eV9zdGF0ZShjb25uX3N0YXRlKSwKLQkJCUNPTk5FQ1RPUl9QUk9QX1RPUE9M T0dZX05BTUUsCi0JCQlyc3ZwLT50b3BvbG9neSk7Ci0JaWYgKHJldCkgewotCQlEUFVfRVJST1Io ImZhaWxlZCB0byBzZXQgdG9wb2xvZ3kgbmFtZSBwcm9wZXJ0eSwgcmV0ICVkXG4iLAotCQkJCXJl dCk7Ci0JCV9kcHVfcm1fcmVsZWFzZV9yc3ZwKHJtLCByc3ZwLCBjb25uX3N0YXRlLT5jb25uZWN0 b3IpOwotCQlyZXR1cm4gcmV0OwotCX0KLQogCS8qIFN3YXAgbmV4dCByc3ZwIHRvIGJlIHRoZSBh Y3RpdmUgKi8KIAlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgRFBVX0hXX0JMS19NQVg7IHR5cGUrKykg ewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsaywgJnJtLT5od19ibGtzW3R5cGVdLCBsaXN0KSB7 CkBAIC0xMTc3LDYgKzExNTMsNyBAQCBpbnQgZHB1X3JtX3Jlc2VydmUoCiAJCXN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jLAogCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJCXN0 cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlLAorCQlzdHJ1Y3QgbXNtX2Rpc3Bs YXlfdG9wb2xvZ3kgdG9wb2xvZ3ksCiAJCWJvb2wgdGVzdF9vbmx5KQogewogCXN0cnVjdCBkcHVf cm1fcnN2cCAqcnN2cF9jdXIsICpyc3ZwX254dDsKQEAgLTEyMDIsNyArMTE3OSw3IEBAIGludCBk cHVfcm1fcmVzZXJ2ZSgKIAlfZHB1X3JtX3ByaW50X3JzdnBzKHJtLCBEUFVfUk1fU1RBR0VfQkVH SU4pOwogCiAJcmV0ID0gX2RwdV9ybV9wb3B1bGF0ZV9yZXF1aXJlbWVudHMocm0sIGVuYywgY3J0 Y19zdGF0ZSwKLQkJCWNvbm5fc3RhdGUsICZyZXFzKTsKKwkJCWNvbm5fc3RhdGUsICZyZXFzLCB0 b3BvbG9neSk7CiAJaWYgKHJldCkgewogCQlEUFVfRVJST1IoImZhaWxlZCB0byBwb3B1bGF0ZSBo dyByZXF1aXJlbWVudHNcbiIpOwogCQlnb3RvIGVuZDsKQEAgLTEyMzcsMTIgKzEyMTQsNiBAQCBp bnQgZHB1X3JtX3Jlc2VydmUoCiAJCV9kcHVfcm1fcmVsZWFzZV9yc3ZwKHJtLCByc3ZwX2N1ciwg Y29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsKIAkJcnN2cF9jdXIgPSBOVUxMOwogCQlfZHB1X3JtX3By aW50X3JzdnBzKHJtLCBEUFVfUk1fU1RBR0VfQUZURVJfQ0xFQVIpOwotCQkodm9pZCkgbXNtX3By b3BlcnR5X3NldF9wcm9wZXJ0eSgKLQkJCQlkcHVfY29ubmVjdG9yX2dldF9wcm9waW5mbygKLQkJ CQkJCWNvbm5fc3RhdGUtPmNvbm5lY3RvciksCi0JCQkJZHB1X2Nvbm5lY3Rvcl9nZXRfcHJvcGVy dHlfc3RhdGUoY29ubl9zdGF0ZSksCi0JCQkJQ09OTkVDVE9SX1BST1BfVE9QT0xPR1lfTkFNRSwK LQkJCQlEUFVfUk1fVE9QT0xPR1lfTk9ORSk7CiAJfQogCiAJLyogQ2hlY2sgdGhlIHByb3Bvc2Vk IHJlc2VydmF0aW9uLCBzdG9yZSBpdCBpbiBodydzICJuZXh0IiBmaWVsZCAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmggYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uaAppbmRleCA4YTZjYmNmLi40Yzc3ODc0IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uaApAQCAtMTI4LDYgKzEyOCw3IEBAIGludCBk cHVfcm1faW5pdChzdHJ1Y3QgZHB1X3JtICpybSwKICAqIEBkcm1fZW5jOiBEUk0gRW5jb2RlciBo YW5kbGUKICAqIEBjcnRjX3N0YXRlOiBQcm9wb3NlZCBBdG9taWMgRFJNIENSVEMgU3RhdGUgaGFu ZGxlCiAgKiBAY29ubl9zdGF0ZTogUHJvcG9zZWQgQXRvbWljIERSTSBDb25uZWN0b3IgU3RhdGUg aGFuZGxlCisgKiBAdG9wb2xvZ3k6IFBvaW50ZXIgdG8gdG9wb2xvZ3kgaW5mbyBmb3IgdGhlIGRp c3BsYXkKICAqIEB0ZXN0X29ubHk6IEF0b21pYy1UZXN0IHBoYXNlLCBkaXNjYXJkIHJlc3VsdHMg KHVubGVzcyBwcm9wZXJ0eSBvdmVycmlkZXMpCiAgKiBAUmV0dXJuOiAwIG9uIFN1Y2Nlc3Mgb3Ro ZXJ3aXNlIC1FUlJPUgogICovCkBAIC0xMzUsNiArMTM2LDcgQEAgaW50IGRwdV9ybV9yZXNlcnZl KHN0cnVjdCBkcHVfcm0gKnJtLAogCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJCXN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAkJc3RydWN0IGRybV9jb25uZWN0b3Jf c3RhdGUgKmNvbm5fc3RhdGUsCisJCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9n eSwKIAkJYm9vbCB0ZXN0X29ubHkpOwogCiAvKioKQEAgLTE4Nyw0ICsxODksMTMgQEAgdm9pZCBk cHVfcm1faW5pdF9od19pdGVyKAogICovCiBpbnQgZHB1X3JtX2NoZWNrX3Byb3BlcnR5X3RvcGN0 bCh1aW50NjRfdCB2YWwpOwogCisvKioKKyAqIGRwdV9ybV9nZXRfdG9wb2xvZ3lfbmFtZSAtIHJl dHVybnMgdGhlIG5hbWUgb2YgdGhlIHRoZSBnaXZlbiB0b3BvbG9neQorICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGVmaW5pdGlvbgorICogQHRvcG9sb2d5OiB0b3BvbG9neSBkZWZpbml0 aW9uCisgKiBAUmV0dXJuOiBuYW1lIG9mIHRoZSB0b3BvbG9neQorICovCitlbnVtIGRwdV9ybV90 b3BvbG9neV9uYW1lCitkcHVfcm1fZ2V0X3RvcG9sb2d5X25hbWUoc3RydWN0IG1zbV9kaXNwbGF5 X3RvcG9sb2d5IHRvcG9sb2d5KTsKKwogI2VuZGlmIC8qIF9fRFBVX1JNX0hfXyAqLwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZGJnLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2RwdV9kYmcuYwppbmRleCA1NGVhNjMxLi40YTM5YjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2RwdV9kYmcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9kYmcuYwpA QCAtMjU0Nyw5ICsyNTQ3LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9kdW1wX2FycmF5KHN0cnVjdCBk cHVfZGJnX3JlZ19iYXNlICpibGtfYXJyW10sCiAJaWYgKGR1bXBfZGJnYnVzX3ZiaWZfcnQpCiAJ CV9kcHVfZGJnX2R1bXBfdmJpZl9kYmdfYnVzKCZkcHVfZGJnX2Jhc2UuZGJnYnVzX3ZiaWZfcnQp OwogCi0JaWYgKGRwdV9kYmdfYmFzZS5kc2lfZGJnX2J1cyB8fCBkdW1wX2FsbCkKLQkJZHNpX2N0 cmxfZGVidWdfZHVtcCgpOwotCiAJaWYgKGRvX3BhbmljICYmIGRwdV9kYmdfYmFzZS5wYW5pY19v bl9lcnIpCiAJCXBhbmljKG5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9tc21fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwppbmRleCBhNmZlM2Ex Li5lYmM0MGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwpAQCAtNDcsMTIgKzQ3LDYgQEAKICNpbmNs dWRlICJtc21fZmVuY2UuaCIKICNpbmNsdWRlICJtc21fZ3B1LmgiCiAjaW5jbHVkZSAibXNtX2tt cy5oIgotI2lmZGVmIENPTkZJR19EUk1fTVNNX1dSSVRFQkFDSwotI2luY2x1ZGUgImRwdV93Yi5o IgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0RSTV9NU01fRFNJX1NUQUdJTkcKLSNpbmNsdWRlICJk c2lfZGlzcGxheS5oIgotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0RSTV9NU01fRFBVCiAjaW5jbHVk ZSAiZHB1X2RiZy5oIgogI2VuZGlmCkBAIC0xMjk3LDkgKzEyOTEsNiBAQCBpbnQgbXNtX2lvY3Rs X3JtZmIyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJRFJNX0lPQ1RMX0RF Rl9EUlYoTVNNX0dFTV9NQURWSVNFLCAgbXNtX2lvY3RsX2dlbV9tYWR2aXNlLCAgRFJNX0FVVEh8 RFJNX1JFTkRFUl9BTExPVyksCiAJRFJNX0lPQ1RMX0RFRl9EUlYoTVNNX1NVQk1JVFFVRVVFX05F VywgICBtc21faW9jdGxfc3VibWl0cXVldWVfbmV3LCAgIERSTV9BVVRIfERSTV9SRU5ERVJfQUxM T1cpLAogCURSTV9JT0NUTF9ERUZfRFJWKE1TTV9TVUJNSVRRVUVVRV9DTE9TRSwgbXNtX2lvY3Rs X3N1Ym1pdHF1ZXVlX2Nsb3NlLCBEUk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKLSNpZmRlZiBD T05GSUdfRFJNX01TTV9XUklURUJBQ0sKLQlEUk1fSU9DVExfREVGX0RSVihEUFVfV0JfQ09ORklH LCBkcHVfd2JfY29uZmlnLCBEUk1fVU5MT0NLRUR8RFJNX0FVVEgpLAotI2VuZGlmCiAJRFJNX0lP Q1RMX0RFRl9EUlYoTVNNX1JNRkIyLCBtc21faW9jdGxfcm1mYjIsCiAJCQkgIERSTV9DT05UUk9M X0FMTE9XfERSTV9VTkxPQ0tFRCksCiB9OwpAQCAtMTU0MSw0MiArMTUzMiw2IEBAIHN0YXRpYyBp bnQgYWRkX2Rpc3BsYXlfY29tcG9uZW50cyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJc3RydWN0IGRl dmljZSAqbWRwX2RldiA9IE5VTEw7CiAJaW50IHJldDsKIAotI2lmZGVmIENPTkZJR19EUk1fTVNN X0RQVQotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQljb25zdCBjaGFyICpuYW1lOwotCi0J aWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldi0+b2Zfbm9kZSwgInFjb20sZHB1LWttcyIp KSB7Ci0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7Ci0JCXVuc2lnbmVk IGludCBpOwotCQlib29sIGZvdW5kID0gZmFsc2U7Ci0KLSNpZmRlZiBDT05GSUdfRFJNX01TTV9E U0lfU1RBR0lORwotCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0RTSV9BQ1RJVkVfRElTUExBWTsgaSsr KSB7Ci0JCQlub2RlID0gZHNpX2Rpc3BsYXlfZ2V0X2Jvb3RfZGlzcGxheShpKTsKLQotCQkJaWYg KG5vZGUgIT0gTlVMTCkgewotCQkJCW5hbWUgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgImxhYmVs IiwgTlVMTCk7Ci0JCQkJY29tcG9uZW50X21hdGNoX2FkZChkZXYsIG1hdGNocHRyLCBjb21wYXJl X29mLAotCQkJCQkJbm9kZSk7Ci0JCQkJcHJfZGVidWcoIkFkZGVkIGNvbXBvbmVudCA9ICVzXG4i LCBuYW1lKTsKLQkJCQlmb3VuZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJaWYgKCFmb3VuZCkKLQkJ CXJldHVybiAtRVBST0JFX0RFRkVSOwotI2VuZGlmCi0KLQkJZm9yIChpID0gMDsgOyBpKyspIHsK LQkJCW5vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG5wLCAiY29ubmVjdG9ycyIsIGkpOwotCQkJaWYg KCFub2RlKQotCQkJCWJyZWFrOwotCi0JCQljb21wb25lbnRfbWF0Y2hfYWRkKGRldiwgbWF0Y2hw dHIsIGNvbXBhcmVfb2YsIG5vZGUpOwotCQl9Ci0JCXJldHVybiAwOwotCX0KLSNlbmRpZgotCiAJ LyoKIAkgKiBNRFA1IGJhc2VkIGRldmljZXMgZG9uJ3QgaGF2ZSBhIGZsYXQgaGllcmFyY2h5LiBU aGVyZSBpcyBhIHRvcCBsZXZlbAogCSAqIHBhcmVudDogTURTUywgYW5kIGNoaWxkcmVuOiBNRFA1 LCBEU0ksIEhETUksIGVEUCBldGMuIFBvcHVsYXRlIHRoZQpAQCAtMTYwMCw3ICsxNTU1LDcgQEAg c3RhdGljIGludCBhZGRfZGlzcGxheV9jb21wb25lbnRzKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJ cHV0X2RldmljZShtZHBfZGV2KTsKIAogCQkvKiBhZGQgdGhlIE1EUCBjb21wb25lbnQgaXRzZWxm ICovCi0JCWNvbXBvbmVudF9tYXRjaF9hZGQoZGV2LCBtYXRjaHB0ciwgY29tcGFyZV9vZiwKKwkJ ZHJtX29mX2NvbXBvbmVudF9tYXRjaF9hZGQoZGV2LCBtYXRjaHB0ciwgY29tcGFyZV9vZiwKIAkJ CQkgICBtZHBfZGV2LT5vZl9ub2RlKTsKIAl9IGVsc2UgewogCQkvKiBNRFA0ICovCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20v bXNtX2Rydi5oCmluZGV4IGVhZjJiNmEuLjkwYTI1MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vbXNtX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCkBA IC0xNTksOCArMTU5LDYgQEAgZW51bSBtc21fbWRwX2Nvbm5fcHJvcGVydHkgewogCUNPTk5FQ1RP Ul9QUk9QX0FEX0JMX1NDQUxFLAogCiAJLyogZW51bS9iaXRtYXNrIHByb3BlcnRpZXMgKi8KLQlD T05ORUNUT1JfUFJPUF9UT1BPTE9HWV9OQU1FLAotCUNPTk5FQ1RPUl9QUk9QX1RPUE9MT0dZX0NP TlRST0wsCiAJQ09OTkVDVE9SX1BST1BfQVVUT1JFRlJFU0gsCiAJQ09OTkVDVE9SX1BST1BfTFAs CiAKQEAgLTMzMSw1NyArMzI5LDIwIEBAIHN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB7CiB9 OwogCiAvKioKLSAqIHN0cnVjdCBtc21fbW9kZV9pbmZvIC0gZGVmaW5lcyBhbGwgbXNtIGN1c3Rv bSBtb2RlIGluZm8KLSAqIEBmcmFtZV9yYXRlOiAgICAgIGZyYW1lX3JhdGUgb2YgdGhlIG1vZGUK LSAqIEB2dG90YWw6ICAgICAgICAgIHZ0b3RhbCBjYWxjdWxhdGVkIGZvciB0aGUgbW9kZQotICog QHByZWZpbGxfbGluZXM6ICAgcHJlZmlsbCBsaW5lcyBiYXNlZCBvbiBwb3JjaGVzLgotICogQGpp dHRlcl9udW1lcjoJZGlzcGxheSBwYW5lbCBqaXR0ZXIgbnVtZXJhdG9yIGNvbmZpZ3VyYXRpb24K LSAqIEBqaXR0ZXJfZGVub206CWRpc3BsYXkgcGFuZWwgaml0dGVyIGRlbm9taW5hdG9yIGNvbmZp Z3VyYXRpb24KLSAqIEB0b3BvbG9neTogICAgICAgIHN1cHBvcnRlZCB0b3BvbG9neSBmb3IgdGhl IG1vZGUKLSAqLwotc3RydWN0IG1zbV9tb2RlX2luZm8gewotCXVpbnQzMl90IGZyYW1lX3JhdGU7 Ci0JdWludDMyX3QgdnRvdGFsOwotCXVpbnQzMl90IHByZWZpbGxfbGluZXM7Ci0JdWludDMyX3Qg aml0dGVyX251bWVyOwotCXVpbnQzMl90IGppdHRlcl9kZW5vbTsKLQlzdHJ1Y3QgbXNtX2Rpc3Bs YXlfdG9wb2xvZ3kgdG9wb2xvZ3k7Ci19OwotCi0vKioKICAqIHN0cnVjdCBtc21fZGlzcGxheV9p bmZvIC0gZGVmaW5lcyBkaXNwbGF5IHByb3BlcnRpZXMKICAqIEBpbnRmX3R5cGU6ICAgICAgICAg IERSTV9NT0RFX0NPTk5FQ1RPUl8gZGlzcGxheSB0eXBlCiAgKiBAY2FwYWJpbGl0aWVzOiAgICAg ICBCaXRtYXNrIG9mIGRpc3BsYXkgZmxhZ3MKICAqIEBudW1fb2ZfaF90aWxlczogICAgIE51bWJl ciBvZiBob3Jpem9udGFsIHRpbGVzIGluIGNhc2Ugb2Ygc3BsaXQgaW50ZXJmYWNlCiAgKiBAaF90 aWxlX2luc3RhbmNlOiAgICBDb250cm9sbGVyIGluc3RhbmNlIHVzZWQgcGVyIHRpbGUuIE51bWJl ciBvZiBlbGVtZW50cyBpcwogICogICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gbnVtX29m X2hfdGlsZXMKLSAqIEBpc19jb25uZWN0ZWQ6ICAgICAgIFNldCB0byB0cnVlIGlmIGRpc3BsYXkg aXMgY29ubmVjdGVkCi0gKiBAd2lkdGhfbW06ICAgICAgICAgICBQaHlzaWNhbCB3aWR0aAotICog QGhlaWdodF9tbTogICAgICAgICAgUGh5c2ljYWwgaGVpZ2h0Ci0gKiBAbWF4X3dpZHRoOiAgICAg ICAgICBNYXggd2lkdGggb2YgZGlzcGxheS4gSW4gY2FzZSBvZiBob3QgcGx1Z2dhYmxlIGRpc3Bs YXkKLSAqICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgbWF4IHdpZHRoIHN1cHBvcnRlZCBi eSBjb250cm9sbGVyCi0gKiBAbWF4X2hlaWdodDogICAgICAgICBNYXggaGVpZ2h0IG9mIGRpc3Bs YXkuIEluIGNhc2Ugb2YgaG90IHBsdWdnYWJsZSBkaXNwbGF5Ci0gKiAgICAgICAgICAgICAgICAg ICAgICB0aGlzIGlzIG1heCBoZWlnaHQgc3VwcG9ydGVkIGJ5IGNvbnRyb2xsZXIKLSAqIEBpc19w cmltYXJ5OiAgICAgICAgIFNldCB0byB0cnVlIGlmIGRpc3BsYXkgaXMgcHJpbWFyeSBkaXNwbGF5 CiAgKiBAaXNfdGVfdXNpbmdfd2F0Y2hkb2dfdGltZXI6ICBCb29sZWFuIHRvIGluZGljYXRlIHdh dGNoZG9nIFRFIGlzCiAgKgkJCQkgdXNlZCBpbnN0ZWFkIG9mIHBhbmVsIFRFIGluIGNtZCBtb2Rl IHBhbmVscwogICovCiBzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyB7CiAJaW50IGludGZfdHlwZTsK IAl1aW50MzJfdCBjYXBhYmlsaXRpZXM7Ci0KIAl1aW50MzJfdCBudW1fb2ZfaF90aWxlczsKIAl1 aW50MzJfdCBoX3RpbGVfaW5zdGFuY2VbTUFYX0hfVElMRVNfUEVSX0RJU1BMQVldOwotCi0JYm9v bCBpc19jb25uZWN0ZWQ7Ci0KLQl1bnNpZ25lZCBpbnQgd2lkdGhfbW07Ci0JdW5zaWduZWQgaW50 IGhlaWdodF9tbTsKLQotCXVpbnQzMl90IG1heF93aWR0aDsKLQl1aW50MzJfdCBtYXhfaGVpZ2h0 OwotCi0JYm9vbCBpc19wcmltYXJ5OwogCWJvb2wgaXNfdGVfdXNpbmdfd2F0Y2hkb2dfdGltZXI7 CiB9OwogCi0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1i ZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3Jh dGl2ZSBQcm9qZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJl bm8K