From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH v2 5/7] drm/msm/dpu: clean up dpu crtc custom properties Date: Tue, 5 Jun 2018 20:45:36 -0700 Message-ID: <1528256738-30652-6-git-send-email-jsanka@codeaurora.org> References: <1528256738-30652-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: <1528256738-30652-1-git-send-email-jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, Jeykumar Sankaran , seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org UmVtb3ZlIGRwdSBjcnRjIGN1c3RvbSBwcm9wZXJ0aWVzIGFuZCBpdHMgaGFuZGxlcnMuCgpjaGFu Z2VzIGluIHYyOgoJLSBub25lCgpTaWduZWQtb2ZmLWJ5OiBKZXlrdW1hciBTYW5rYXJhbiA8anNh bmthQGNvZGVhdXJvcmEub3JnPgpSZXZpZXdlZC1ieTogU2VhbiBQYXVsIDxzZWFucGF1bEBjaHJv bWl1bS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSAgICAgICAgICAgICAg ICAgIHwgICAxIC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYu YyB8ICAyOCAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jICAgICAg fCA4NTYgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9jcnRjLmggICAgICB8ICAyNyArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2VuY29kZXIuYyAgIHwgIDEyIC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19kcy5jICAgICB8IDE0OSAtLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2RzLmggICAgIHwgMTExIC0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9od19sbS5jICAgICB8ICA2NyAtLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2xtLmggICAgIHwgIDE0IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19tZHNzLmggICB8ICAxNiAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfcm0uYyAgICAgICAgfCAgNzEgKy0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYu aCAgICAgICAgICAgICAgICAgfCAgMTUgLQogMTIgZmlsZXMgY2hhbmdlZCwgMTEgaW5zZXJ0aW9u cygrKSwgMTM1NiBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfZHMuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19kcy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKaW5kZXgg N2JjMzkyMS4uZDI4OTUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmls ZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCkBAIC01Nyw3ICs1Nyw2IEBAIG1z bS15IDo9IFwKIAlkaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cubyBcCiAJZGlzcC9kcHUxL2RwdV9o d19jZG0ubyBcCiAJZGlzcC9kcHUxL2RwdV9od19jdGwubyBcCi0JZGlzcC9kcHUxL2RwdV9od19k cy5vIFwKIAlkaXNwL2RwdTEvZHB1X2h3X2ludGVycnVwdHMubyBcCiAJZGlzcC9kcHUxL2RwdV9o d19pbnRmLm8gXAogCWRpc3AvZHB1MS9kcHVfaHdfbG0ubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMKaW5kZXggOTgxZjc3Zi4uYzQ4MjBkZSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuYwpAQCAtMTAy LDM0ICsxMDIsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2NvcmVfcGVyZl9jYWxjX2NydGMoc3RydWN0 IGRwdV9rbXMgKmttcywKIAlkcHVfY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUpOwog CW1lbXNldChwZXJmLCAwLCBzaXplb2Yoc3RydWN0IGRwdV9jb3JlX3BlcmZfcGFyYW1zKSk7CiAK LQlwZXJmLT5id19jdGxbRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01OT0NdID0KLQkJZHB1X2Ny dGNfZ2V0X3Byb3BlcnR5KGRwdV9jc3RhdGUsIENSVENfUFJPUF9DT1JFX0FCKTsKLQlwZXJmLT5t YXhfcGVyX3BpcGVfaWJbRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01OT0NdID0KLQkJZHB1X2Ny dGNfZ2V0X3Byb3BlcnR5KGRwdV9jc3RhdGUsIENSVENfUFJPUF9DT1JFX0lCKTsKLQotCWlmIChk cHVfY3N0YXRlLT5id19zcGxpdF92b3RlKSB7Ci0JCXBlcmYtPmJ3X2N0bFtEUFVfUE9XRVJfSEFO RExFX0RCVVNfSURfTExDQ10gPQotCQkJZHB1X2NydGNfZ2V0X3Byb3BlcnR5KGRwdV9jc3RhdGUs IENSVENfUFJPUF9MTENDX0FCKTsKLQkJcGVyZi0+bWF4X3Blcl9waXBlX2liW0RQVV9QT1dFUl9I QU5ETEVfREJVU19JRF9MTENDXSA9Ci0JCQlkcHVfY3J0Y19nZXRfcHJvcGVydHkoZHB1X2NzdGF0 ZSwgQ1JUQ19QUk9QX0xMQ0NfSUIpOwotCQlwZXJmLT5id19jdGxbRFBVX1BPV0VSX0hBTkRMRV9E QlVTX0lEX0VCSV0gPQotCQkJZHB1X2NydGNfZ2V0X3Byb3BlcnR5KGRwdV9jc3RhdGUsIENSVENf UFJPUF9EUkFNX0FCKTsKLQkJcGVyZi0+bWF4X3Blcl9waXBlX2liW0RQVV9QT1dFUl9IQU5ETEVf REJVU19JRF9FQkldID0KLQkJCWRwdV9jcnRjX2dldF9wcm9wZXJ0eShkcHVfY3N0YXRlLCBDUlRD X1BST1BfRFJBTV9JQik7Ci0JfSBlbHNlIHsKLQkJcGVyZi0+YndfY3RsW0RQVV9QT1dFUl9IQU5E TEVfREJVU19JRF9MTENDXSA9Ci0JCQlkcHVfY3J0Y19nZXRfcHJvcGVydHkoZHB1X2NzdGF0ZSwg Q1JUQ19QUk9QX0NPUkVfQUIpOwotCQlwZXJmLT5tYXhfcGVyX3BpcGVfaWJbRFBVX1BPV0VSX0hB TkRMRV9EQlVTX0lEX0xMQ0NdID0KLQkJCWRwdV9jcnRjX2dldF9wcm9wZXJ0eShkcHVfY3N0YXRl LCBDUlRDX1BST1BfQ09SRV9JQik7Ci0JCXBlcmYtPmJ3X2N0bFtEUFVfUE9XRVJfSEFORExFX0RC VVNfSURfRUJJXSA9Ci0JCQlkcHVfY3J0Y19nZXRfcHJvcGVydHkoZHB1X2NzdGF0ZSwgQ1JUQ19Q Uk9QX0NPUkVfQUIpOwotCQlwZXJmLT5tYXhfcGVyX3BpcGVfaWJbRFBVX1BPV0VSX0hBTkRMRV9E QlVTX0lEX0VCSV0gPQotCQkJZHB1X2NydGNfZ2V0X3Byb3BlcnR5KGRwdV9jc3RhdGUsIENSVENf UFJPUF9DT1JFX0lCKTsKLQl9Ci0KLQlwZXJmLT5jb3JlX2Nsa19yYXRlID0KLQkJCWRwdV9jcnRj X2dldF9wcm9wZXJ0eShkcHVfY3N0YXRlLCBDUlRDX1BST1BfQ09SRV9DTEspOwotCiAJaWYgKCFk cHVfY3N0YXRlLT5id19jb250cm9sKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBEUFVfUE9XRVJfSEFO RExFX0RCVVNfSURfTUFYOyBpKyspIHsKIAkJCXBlcmYtPmJ3X2N0bFtpXSA9IGttcy0+Y2F0YWxv Zy0+cGVyZi5tYXhfYndfaGlnaCAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Ny dGMuYwppbmRleCA0ODM2MWZiLi4wYzI1YzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9jcnRjLmMKQEAgLTU3MCwxOCArNTcwLDYgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRj X2RlaW5pdF9ldmVudHMoc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YykKIAkJcmV0dXJuOwogfQog Ci0vKioKLSAqIGRwdV9jcnRjX2Rlc3Ryb3lfZGVzdF9zY2FsZXIgLSBmcmVlIG1lbW9yeSBhbGxv Y2F0ZWQgZm9yIHNjYWxlciBsdXQKLSAqIEBkcHVfY3J0YzogUG9pbnRlciB0byBkcHUgY3J0Ywot ICovCi1zdGF0aWMgdm9pZCBfZHB1X2NydGNfZGVzdHJveV9kZXN0X3NjYWxlcihzdHJ1Y3QgZHB1 X2NydGMgKmRwdV9jcnRjKQotewotCWlmICghZHB1X2NydGMpCi0JCXJldHVybjsKLQotCWtmcmVl KGRwdV9jcnRjLT5zY2wzX2x1dF9jZmcpOwotfQotCiBzdGF0aWMgdm9pZCBkcHVfY3J0Y19kZXN0 cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKIAlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRj ID0gdG9fZHB1X2NydGMoY3J0Yyk7CkBAIC01OTQsNyArNTgyLDYgQEAgc3RhdGljIHZvaWQgZHB1 X2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJaWYgKGRwdV9jcnRjLT5ibG9i X2luZm8pCiAJCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChkcHVfY3J0Yy0+YmxvYl9pbmZvKTsKIAlt c21fcHJvcGVydHlfZGVzdHJveSgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8pOwotCV9kcHVfY3J0 Y19kZXN0cm95X2Rlc3Rfc2NhbGVyKGRwdV9jcnRjKTsKIAogCV9kcHVfY3J0Y19kZWluaXRfZXZl bnRzKGRwdV9jcnRjKTsKIApAQCAtNjMwLDcxICs2MTcsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2Ny dGNfc2V0dXBfYmxlbmRfY2ZnKHN0cnVjdCBkcHVfY3J0Y19taXhlciAqbWl4ZXIsCiAJCQkJRFBV X0JMRU5EX0JHX0FMUEhBX0JHX0NPTlNUKTsKIH0KIAotc3RhdGljIHZvaWQgX2RwdV9jcnRjX3Nl dHVwX2RpbV9sYXllcl9jZmcoc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQlzdHJ1Y3QgZHB1X2Ny dGMgKmRwdV9jcnRjLCBzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgKm1peGVyLAotCQlzdHJ1Y3QgZHB1 X2h3X2RpbV9sYXllciAqZGltX2xheWVyKQotewotCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0 YXRlOwotCXN0cnVjdCBkcHVfaHdfbWl4ZXIgKmxtOwotCXN0cnVjdCBkcHVfaHdfZGltX2xheWVy IHNwbGl0X2RpbV9sYXllcjsKLQlpbnQgaTsKLQotCWlmICghZGltX2xheWVyLT5yZWN0LncgfHwg IWRpbV9sYXllci0+cmVjdC5oKSB7Ci0JCURQVV9ERUJVRygiZW1wdHkgZGltX2xheWVyXG4iKTsK LQkJcmV0dXJuOwotCX0KLQotCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0YXRl KTsKLQotCURQVV9ERUJVRygiZGltX2xheWVyIC0gZmxhZ3M6JWQsIHN0YWdlOiVkXG4iLAotCQkJ ZGltX2xheWVyLT5mbGFncywgZGltX2xheWVyLT5zdGFnZSk7Ci0KLQlzcGxpdF9kaW1fbGF5ZXIu c3RhZ2UgPSBkaW1fbGF5ZXItPnN0YWdlOwotCXNwbGl0X2RpbV9sYXllci5jb2xvcl9maWxsID0g ZGltX2xheWVyLT5jb2xvcl9maWxsOwotCi0JLyoKLQkgKiB0cmF2ZXJzZSB0aHJvdWdoIHRoZSBs YXllciBtaXhlcnMgYXR0YWNoZWQgdG8gY3J0YyBhbmQgZmluZCB0aGUKLQkgKiBpbnRlcnNlY3Rp bmcgZGltIGxheWVyIHJlY3QgaW4gZWFjaCBMTSBhbmQgcHJvZ3JhbSBhY2NvcmRpbmdseS4KLQkg Ki8KLQlmb3IgKGkgPSAwOyBpIDwgZHB1X2NydGMtPm51bV9taXhlcnM7IGkrKykgewotCQlzcGxp dF9kaW1fbGF5ZXIuZmxhZ3MgPSBkaW1fbGF5ZXItPmZsYWdzOwotCi0JCWRwdV9rbXNfcmVjdF9p bnRlcnNlY3QoJmNzdGF0ZS0+bG1fYm91bmRzW2ldLCAmZGltX2xheWVyLT5yZWN0LAotCQkJCQkm c3BsaXRfZGltX2xheWVyLnJlY3QpOwotCQlpZiAoZHB1X2ttc19yZWN0X2lzX251bGwoJnNwbGl0 X2RpbV9sYXllci5yZWN0KSkgewotCQkJLyoKLQkJCSAqIG5vIGV4dHJhIHByb2dyYW1taW5nIHJl cXVpcmVkIGZvciBub24taW50ZXJzZWN0aW5nCi0JCQkgKiBsYXllciBtaXhlcnMgd2l0aCBJTkNM VVNJVkUgZGltIGxheWVyCi0JCQkgKi8KLQkJCWlmIChzcGxpdF9kaW1fbGF5ZXIuZmxhZ3MgJiBE UFVfRFJNX0RJTV9MQVlFUl9JTkNMVVNJVkUpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qCi0JCQkg KiBwcm9ncmFtIHRoZSBvdGhlciBub24taW50ZXJzZWN0aW5nIGxheWVyIG1peGVycyB3aXRoCi0J CQkgKiBJTkNMVVNJVkUgZGltIGxheWVyIG9mIGZ1bGwgc2l6ZSBmb3IgdW5pZm9ybWl0eQotCQkJ ICogd2l0aCBFWENMVVNJVkUgZGltIGxheWVyIGNvbmZpZy4KLQkJCSAqLwotCQkJc3BsaXRfZGlt X2xheWVyLmZsYWdzICY9IH5EUFVfRFJNX0RJTV9MQVlFUl9FWENMVVNJVkU7Ci0JCQlzcGxpdF9k aW1fbGF5ZXIuZmxhZ3MgfD0gRFBVX0RSTV9ESU1fTEFZRVJfSU5DTFVTSVZFOwotCQkJbWVtY3B5 KCZzcGxpdF9kaW1fbGF5ZXIucmVjdCwgJmNzdGF0ZS0+bG1fYm91bmRzW2ldLAotCQkJCQlzaXpl b2Yoc3BsaXRfZGltX2xheWVyLnJlY3QpKTsKLQotCQl9IGVsc2UgewotCQkJc3BsaXRfZGltX2xh eWVyLnJlY3QueCA9Ci0JCQkJCXNwbGl0X2RpbV9sYXllci5yZWN0LnggLQotCQkJCQkJY3N0YXRl LT5sbV9ib3VuZHNbaV0ueDsKLQkJfQotCi0JCURQVV9ERUJVRygic3BsaXRfZGltX2xheWVyIC0g TE06JWQsIHJlY3Q6eyVkLCVkLCVkLCVkfX1cbiIsCi0JCQlpLCBzcGxpdF9kaW1fbGF5ZXIucmVj dC54LCBzcGxpdF9kaW1fbGF5ZXIucmVjdC55LAotCQkJc3BsaXRfZGltX2xheWVyLnJlY3Qudywg c3BsaXRfZGltX2xheWVyLnJlY3QuaCk7Ci0KLQkJbG0gPSBtaXhlcltpXS5od19sbTsKLQkJbWl4 ZXJbaV0ubWl4ZXJfb3BfbW9kZSB8PSAxIDw8IHNwbGl0X2RpbV9sYXllci5zdGFnZTsKLQkJbG0t Pm9wcy5zZXR1cF9kaW1fbGF5ZXIobG0sICZzcGxpdF9kaW1fbGF5ZXIpOwotCX0KLX0KLQogc3Rh dGljIHZvaWQgX2RwdV9jcnRjX3Byb2dyYW1fbG1fb3V0cHV0X3JvaShzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCiB7CiAJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKQEAgLTczOCw3ICs2NjAsNiBA QCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfYmxlbmRfc2V0dXBfbWl4ZXIoc3RydWN0IGRybV9jcnRj ICpjcnRjLAogCXUzMiBmbHVzaF9tYXNrOwogCXVpbnQzMl90IHN0YWdlX2lkeCwgbG1faWR4Owog CWludCB6cG9zX2NudFtEUFVfU1RBR0VfTUFYICsgMV0gPSB7IDAgfTsKLQlpbnQgaTsKIAlib29s IGJnX2FscGhhX2VuYWJsZSA9IGZhbHNlOwogCiAJaWYgKCFkcHVfY3J0YyB8fCAhbWl4ZXIpIHsK QEAgLTgxNCwxMyArNzM1LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX2JsZW5kX3NldHVwX21p eGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJfQogCX0KIAotCWlmIChsbSAmJiBsbS0+b3Bz LnNldHVwX2RpbV9sYXllcikgewotCQljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5z dGF0ZSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBjc3RhdGUtPm51bV9kaW1fbGF5ZXJzOyBpKyspCi0J CQlfZHB1X2NydGNfc2V0dXBfZGltX2xheWVyX2NmZyhjcnRjLCBkcHVfY3J0YywKLQkJCQkJbWl4 ZXIsICZjc3RhdGUtPmRpbV9sYXllcltpXSk7Ci0JfQotCiAJIF9kcHVfY3J0Y19wcm9ncmFtX2xt X291dHB1dF9yb2koY3J0Yyk7CiB9CiAKQEAgLTg2MiwxMSArNzc2LDYgQEAgc3RhdGljIHZvaWQg X2RwdV9jcnRjX2JsZW5kX3NldHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJaWYgKG1peGVy W2ldLmh3X2N0bC0+b3BzLmNsZWFyX2FsbF9ibGVuZHN0YWdlcykKIAkJCW1peGVyW2ldLmh3X2N0 bC0+b3BzLmNsZWFyX2FsbF9ibGVuZHN0YWdlcygKIAkJCQkJbWl4ZXJbaV0uaHdfY3RsKTsKLQot CQkvKiBjbGVhciBkaW1fbGF5ZXIgc2V0dGluZ3MgKi8KLQkJbG0gPSBtaXhlcltpXS5od19sbTsK LQkJaWYgKGxtLT5vcHMuY2xlYXJfZGltX2xheWVyKQotCQkJbG0tPm9wcy5jbGVhcl9kaW1fbGF5 ZXIobG0pOwogCX0KIAogCS8qIGluaXRpYWxpemUgc3RhZ2UgY2ZnICovCkBAIC04OTgsMTYzICs4 MDcsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfYmxlbmRfc2V0dXAoc3RydWN0IGRybV9jcnRj ICpjcnRjKQogfQogCiAvKioKLSAqIF9kcHVfY3J0Y19zZXR1cF9zY2FsZXIzX2x1dCAtIFNldCB1 cCBzY2FsZXIgbHV0Ci0gKiBMVVRzIGFyZSBjb25maWd1cmVkIG9ubHkgb25jZSBkdXJpbmcgYm9v dAotICogQGRwdV9jcnRjOiBQb2ludGVyIHRvIGRwdSBjcnRjCi0gKiBAY3N0YXRlOiBQb2ludGVy IHRvIGRwdSBjcnRjIHN0YXRlCi0gKi8KLXN0YXRpYyBpbnQgX2RwdV9jcnRjX3NldF9kZXN0X3Nj YWxlcl9sdXQoc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YywKLQkJc3RydWN0IGRwdV9jcnRjX3N0 YXRlICpjc3RhdGUsIHVpbnQzMl90IGx1dF9pZHgpCi17Ci0Jc3RydWN0IGRwdV9od19zY2FsZXIz X2x1dF9jZmcgKmNmZzsKLQl1MzIgKmx1dF9kYXRhID0gTlVMTDsKLQlzaXplX3QgbGVuID0gMDsK LQlpbnQgcmV0ID0gMDsKLQotCWlmICghZHB1X2NydGMgfHwgIWNzdGF0ZSB8fCAhZHB1X2NydGMt PnNjbDNfbHV0X2NmZykgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJnc1xuIik7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCWlmIChkcHVfY3J0Yy0+c2NsM19sdXRfY2ZnLT5pc19jb25maWd1 cmVkKSB7Ci0JCURQVV9ERUJVRygibHV0IGFscmVhZHkgY29uZmlndXJlZFxuIik7Ci0JCXJldHVy biAwOwotCX0KLQotCWx1dF9kYXRhID0gbXNtX3Byb3BlcnR5X2dldF9ibG9iKCZkcHVfY3J0Yy0+ cHJvcGVydHlfaW5mbywKLQkJCSZjc3RhdGUtPnByb3BlcnR5X3N0YXRlLCAmbGVuLCBsdXRfaWR4 KTsKLQlpZiAoIWx1dF9kYXRhIHx8ICFsZW4pIHsKLQkJRFBVX0VSUk9SKCJsdXQoJWQpOiBubyBk YXRhLCBsZW4oJXp1KVxuIiwgbHV0X2lkeCwgbGVuKTsKLQkJcmV0dXJuIC1FTk9EQVRBOwotCX0K LQotCWNmZyA9IGRwdV9jcnRjLT5zY2wzX2x1dF9jZmc7Ci0KLQlzd2l0Y2ggKGx1dF9pZHgpIHsK LQljYXNlIENSVENfUFJPUF9ERVNUX1NDQUxFUl9MVVRfRUQ6Ci0JCWNmZy0+ZGlyX2x1dCA9IGx1 dF9kYXRhOwotCQljZmctPmRpcl9sZW4gPSBsZW47Ci0JCWJyZWFrOwotCWNhc2UgQ1JUQ19QUk9Q X0RFU1RfU0NBTEVSX0xVVF9DSVI6Ci0JCWNmZy0+Y2lyX2x1dCA9IGx1dF9kYXRhOwotCQljZmct PmNpcl9sZW4gPSBsZW47Ci0JCWJyZWFrOwotCWNhc2UgQ1JUQ19QUk9QX0RFU1RfU0NBTEVSX0xV VF9TRVA6Ci0JCWNmZy0+c2VwX2x1dCA9IGx1dF9kYXRhOwotCQljZmctPnNlcF9sZW4gPSBsZW47 Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCURQVV9FUlJPUigiaW52 YWxpZCBMVVQgaW5kZXggPSAlZCIsIGx1dF9pZHgpOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoY2Zn LT5kaXJfbHV0ICYmIGNmZy0+Y2lyX2x1dCAmJiBjZmctPnNlcF9sdXQpCi0JCWNmZy0+aXNfY29u ZmlndXJlZCA9IHRydWU7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIF9kcHVfY3J0Y19k ZXN0X3NjYWxlcl9zZXR1cCAtIFNldCB1cCBkZXN0IHNjYWxlciBibG9jawotICogQGNydGM6IFBv aW50ZXIgdG8gZHJtIGNydGMKLSAqLwotc3RhdGljIHZvaWQgX2RwdV9jcnRjX2Rlc3Rfc2NhbGVy X3NldHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9j cnRjOwotCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOwotCXN0cnVjdCBkcHVfaHdfbWl4 ZXIgKmh3X2xtOwotCXN0cnVjdCBkcHVfaHdfY3RsICpod19jdGw7Ci0Jc3RydWN0IGRwdV9od19k cyAqaHdfZHM7Ci0Jc3RydWN0IGRwdV9od19kc19jZmcgKmNmZzsKLQlzdHJ1Y3QgZHB1X2ttcyAq a21zOwotCXUzMiBmbHVzaF9tYXNrID0gMCwgb3BfbW9kZSA9IDA7Ci0JdTMyIGxtX2lkeCA9IDAs IG51bV9taXhlcnMgPSAwOwotCWludCBpLCBjb3VudCA9IDA7Ci0KLQlpZiAoIWNydGMpCi0JCXJl dHVybjsKLQotCWRwdV9jcnRjICAgPSB0b19kcHVfY3J0YyhjcnRjKTsKLQljc3RhdGUgPSB0b19k cHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7Ci0Ja21zICAgID0gX2RwdV9jcnRjX2dldF9rbXMo Y3J0Yyk7Ci0JbnVtX21peGVycyA9IGRwdV9jcnRjLT5udW1fbWl4ZXJzOwotCi0JRFBVX0RFQlVH KCJjcnRjJWRcbiIsIGNydGMtPmJhc2UuaWQpOwotCi0JaWYgKCFjc3RhdGUtPmRzX2RpcnR5KSB7 Ci0JCURQVV9ERUJVRygibm8gY2hhbmdlIGluIHNldHRpbmdzLCBza2lwIGNvbW1pdFxuIik7Ci0J fSBlbHNlIGlmICgha21zIHx8ICFrbXMtPmNhdGFsb2cpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlk IHBhcmFtZXRlcnNcbiIpOwotCX0gZWxzZSBpZiAoIWttcy0+Y2F0YWxvZy0+bWRwWzBdLmhhc19k ZXN0X3NjYWxlcikgewotCQlEUFVfREVCVUcoImRlc3Qgc2NhbGVyIGZlYXR1cmUgbm90IHN1cHBv cnRlZFxuIik7Ci0JfSBlbHNlIGlmIChudW1fbWl4ZXJzID4gQ1JUQ19EVUFMX01JWEVSUykgewot CQlEUFVfRVJST1IoImludmFsaWQgbnVtYmVyIG1peGVyczogJWRcbiIsIG51bV9taXhlcnMpOwot CX0gZWxzZSBpZiAoIWRwdV9jcnRjLT5zY2wzX2x1dF9jZmctPmlzX2NvbmZpZ3VyZWQpIHsKLQkJ RFBVX0RFQlVHKCJubyBMVVQgZGF0YSBhdmFpbGFibGVcbiIpOwotCX0gZWxzZSB7Ci0JCWNvdW50 ID0gY3N0YXRlLT5udW1fZHNfZW5hYmxlZCA/IGNzdGF0ZS0+bnVtX2RzIDogbnVtX21peGVyczsK LQotCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQkJY2ZnID0gJmNzdGF0ZS0+ZHNf Y2ZnW2ldOwotCi0JCQlpZiAoIWNmZy0+ZmxhZ3MpCi0JCQkJY29udGludWU7Ci0KLQkJCWxtX2lk eCA9IGNmZy0+bmR4OwotCQkJaHdfbG0gID0gZHB1X2NydGMtPm1peGVyc1tsbV9pZHhdLmh3X2xt OwotCQkJaHdfY3RsID0gZHB1X2NydGMtPm1peGVyc1tsbV9pZHhdLmh3X2N0bDsKLQkJCWh3X2Rz ICA9IGRwdV9jcnRjLT5taXhlcnNbbG1faWR4XS5od19kczsKLQotCQkJLyogU2V0dXAgb3AgbW9k ZSAtIER1YWwvc2luZ2xlICovCi0JCQlpZiAoY2ZnLT5mbGFncyAmIERQVV9EUk1fREVTVFNDQUxF Ul9FTkFCTEUpCi0JCQkJb3BfbW9kZSB8PSBCSVQoaHdfZHMtPmlkeCAtIERTXzApOwotCi0JCQlp ZiAoKGkgPT0gY291bnQtMSkgJiYgaHdfZHMtPm9wcy5zZXR1cF9vcG1vZGUpIHsKLQkJCQlvcF9t b2RlIHw9IChjc3RhdGUtPm51bV9kc19lbmFibGVkID09Ci0JCQkJCUNSVENfRFVBTF9NSVhFUlMp ID8KLQkJCQkJRFBVX0RTX09QX01PREVfRFVBTCA6IDA7Ci0JCQkJaHdfZHMtPm9wcy5zZXR1cF9v cG1vZGUoaHdfZHMsIG9wX21vZGUpOwotCQkJCURQVV9FVlQzMihEUk1JRChjcnRjKSwgb3BfbW9k ZSk7Ci0JCQl9Ci0KLQkJCS8qIFNldHVwIHNjYWxlciAqLwotCQkJaWYgKChjZmctPmZsYWdzICYg RFBVX0RSTV9ERVNUU0NBTEVSX1NDQUxFX1VQREFURSkgfHwKLQkJCQkoY2ZnLT5mbGFncyAmCi0J CQkJCURQVV9EUk1fREVTVFNDQUxFUl9FTkhBTkNFUl9VUERBVEUpKSB7Ci0JCQkJaWYgKGh3X2Rz LT5vcHMuc2V0dXBfc2NhbGVyKQotCQkJCQlod19kcy0+b3BzLnNldHVwX3NjYWxlcihod19kcywK LQkJCQkJCQljZmctPnNjbDNfY2ZnLAotCQkJCQkJCWRwdV9jcnRjLT5zY2wzX2x1dF9jZmcpOwot Ci0JCQkJLyoqCi0JCQkJICogQ2xlYXIgdGhlIGZsYWdzIGFzIHRoZSBibG9jayBkb2Vzbid0IGhh dmUgdG8KLQkJCQkgKiBiZSBwcm9ncmFtbWVkIGluIGVhY2ggY29tbWl0IGlmIG5vIHVwZGF0ZXMK LQkJCQkgKi8KLQkJCQljZmctPmZsYWdzICY9IH5EUFVfRFJNX0RFU1RTQ0FMRVJfU0NBTEVfVVBE QVRFOwotCQkJCWNmZy0+ZmxhZ3MgJj0KLQkJCQkJfkRQVV9EUk1fREVTVFNDQUxFUl9FTkhBTkNF Ul9VUERBVEU7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBEZXN0IHNjYWxlciBzaGFyZXMgdGhlIGZs dXNoIGJpdCBvZiB0aGUgTE0gaW4gY29udHJvbAotCQkJICovCi0JCQlpZiAoY2ZnLT5zZXRfbG1f Zmx1c2ggJiYgaHdfbG0gJiYgaHdfY3RsICYmCi0JCQkJaHdfY3RsLT5vcHMuZ2V0X2JpdG1hc2tf bWl4ZXIpIHsKLQkJCQlmbHVzaF9tYXNrID0gaHdfY3RsLT5vcHMuZ2V0X2JpdG1hc2tfbWl4ZXIo Ci0JCQkJCQlod19jdGwsIGh3X2xtLT5pZHgpOwotCQkJCURQVV9ERUJVRygiU2V0IGxtWyVkXSBm bHVzaCA9ICVkIiwKLQkJCQkJaHdfbG0tPmlkeCwgZmx1c2hfbWFzayk7Ci0JCQkJaHdfY3RsLT5v cHMudXBkYXRlX3BlbmRpbmdfZmx1c2goaHdfY3RsLAotCQkJCQkJCQlmbHVzaF9tYXNrKTsKLQkJ CX0KLQkJCWNmZy0+c2V0X2xtX2ZsdXNoID0gZmFsc2U7Ci0JCX0KLQkJY3N0YXRlLT5kc19kaXJ0 eSA9IGZhbHNlOwotCX0KLX0KLQotLyoqCiAgKiAgX2RwdV9jcnRjX2NvbXBsZXRlX2ZsaXAgLSBz aWduYWwgcGVuZGluZyBwYWdlX2ZsaXAgZXZlbnRzCiAgKiBBbnkgcGVuZGluZyB2YmxhbmsgZXZl bnRzIGFyZSBhZGRlZCB0byB0aGUgdmJsYW5rX2V2ZW50X2xpc3QKICAqIHNvIHRoYXQgdGhlIG5l eHQgdmJsYW5rIGludGVycnVwdCBzaGFsbCBzaWduYWwgdGhlbS4KQEAgLTEzMTIsNDQ4ICsxMDY0 LDYgQEAgdm9pZCBkcHVfY3J0Y19jb21wbGV0ZV9jb21taXQoc3RydWN0IGRybV9jcnRjICpjcnRj LAogCURQVV9FVlQzMl9WRVJCT1NFKERSTUlEKGNydGMpKTsKIH0KIAotLyogX2RwdV9jcnRjX3Nl dF9pZGxlX3RpbWVvdXQgLSB1cGRhdGUgaWRsZSB0aW1lb3V0IHdhaXQgZHVyYXRpb24gKi8KLXN0 YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXRfaWRsZV90aW1lb3V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywgdTY0IHZhbCkKLXsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Ci0KLQlpZiAoIWNy dGMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0J ZHJtX2Zvcl9lYWNoX2VuY29kZXIoZW5jb2RlciwgY3J0Yy0+ZGV2KSB7Ci0JCWlmIChlbmNvZGVy LT5jcnRjICE9IGNydGMpCi0JCQljb250aW51ZTsKLQotCQlkcHVfZW5jb2Rlcl9zZXRfaWRsZV90 aW1lb3V0KGVuY29kZXIsICh1MzIpIHZhbCk7Ci0JfQotfQotCi0vKioKLSAqIF9kcHVfY3J0Y19z ZXRfZGltX2xheWVyX3YxIC0gY29weSBkaW0gbGF5ZXIgc2V0dGluZ3MgZnJvbSB1c2Vyc3BhY2UK LSAqIEBjc3RhdGU6ICAgICAgUG9pbnRlciB0byBkcHUgY3J0YyBzdGF0ZQotICogQHVzZXJfcHRy OiAgICBVc2VyIHB0ciBmb3IgZHB1X2RybV9kaW1fbGF5ZXJfdjEgc3RydWN0Ci0gKi8KLXN0YXRp YyB2b2lkIF9kcHVfY3J0Y19zZXRfZGltX2xheWVyX3YxKHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAq Y3N0YXRlLAotCQl2b2lkIF9fdXNlciAqdXNyX3B0cikKLXsKLQlzdHJ1Y3QgZHB1X2RybV9kaW1f bGF5ZXJfdjEgZGltX2xheWVyX3YxOwotCXN0cnVjdCBkcHVfZHJtX2RpbV9sYXllcl9jZmcgKnVz ZXJfY2ZnOwotCXN0cnVjdCBkcHVfaHdfZGltX2xheWVyICpkaW1fbGF5ZXI7Ci0JdTMyIGNvdW50 LCBpOwotCi0JaWYgKCFjc3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNzdGF0ZVxuIik7 Ci0JCXJldHVybjsKLQl9Ci0JZGltX2xheWVyID0gY3N0YXRlLT5kaW1fbGF5ZXI7Ci0KLQlpZiAo IXVzcl9wdHIpIHsKLQkJRFBVX0RFQlVHKCJkaW1fbGF5ZXIgZGF0YSByZW1vdmVkXG4iKTsKLQkJ cmV0dXJuOwotCX0KLQotCWlmIChjb3B5X2Zyb21fdXNlcigmZGltX2xheWVyX3YxLCB1c3JfcHRy LCBzaXplb2YoZGltX2xheWVyX3YxKSkpIHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gY29weSBk aW1fbGF5ZXIgZGF0YVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQljb3VudCA9IGRpbV9sYXllcl92 MS5udW1fbGF5ZXJzOwotCWlmIChjb3VudCA+IERQVV9NQVhfRElNX0xBWUVSUykgewotCQlEUFVf RVJST1IoImludmFsaWQgbnVtYmVyIG9mIGRpbV9sYXllcnM6JWQiLCBjb3VudCk7Ci0JCXJldHVy bjsKLQl9Ci0KLQkvKiBwb3B1bGF0ZSBmcm9tIHVzZXIgc3BhY2UgKi8KLQljc3RhdGUtPm51bV9k aW1fbGF5ZXJzID0gY291bnQ7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJdXNl cl9jZmcgPSAmZGltX2xheWVyX3YxLmxheWVyX2NmZ1tpXTsKLQotCQlkaW1fbGF5ZXJbaV0uZmxh Z3MgPSB1c2VyX2NmZy0+ZmxhZ3M7Ci0JCWRpbV9sYXllcltpXS5zdGFnZSA9IHVzZXJfY2ZnLT5z dGFnZSArIERQVV9TVEFHRV8wOwotCi0JCWRpbV9sYXllcltpXS5yZWN0LnggPSB1c2VyX2NmZy0+ cmVjdC54MTsKLQkJZGltX2xheWVyW2ldLnJlY3QueSA9IHVzZXJfY2ZnLT5yZWN0LnkxOwotCQlk aW1fbGF5ZXJbaV0ucmVjdC53ID0gdXNlcl9jZmctPnJlY3QueDIgLSB1c2VyX2NmZy0+cmVjdC54 MTsKLQkJZGltX2xheWVyW2ldLnJlY3QuaCA9IHVzZXJfY2ZnLT5yZWN0LnkyIC0gdXNlcl9jZmct PnJlY3QueTE7Ci0KLQkJZGltX2xheWVyW2ldLmNvbG9yX2ZpbGwgPSAoc3RydWN0IGRwdV9tZHNz X2NvbG9yKSB7Ci0JCQkJdXNlcl9jZmctPmNvbG9yX2ZpbGwuY29sb3JfMCwKLQkJCQl1c2VyX2Nm Zy0+Y29sb3JfZmlsbC5jb2xvcl8xLAotCQkJCXVzZXJfY2ZnLT5jb2xvcl9maWxsLmNvbG9yXzIs Ci0JCQkJdXNlcl9jZmctPmNvbG9yX2ZpbGwuY29sb3JfMywKLQkJfTsKLQotCQlEUFVfREVCVUco ImRpbV9sYXllclslZF0gLSBmbGFnczolZCwgc3RhZ2U6JWRcbiIsCi0JCQkJaSwgZGltX2xheWVy W2ldLmZsYWdzLCBkaW1fbGF5ZXJbaV0uc3RhZ2UpOwotCQlEUFVfREVCVUcoIiByZWN0OnslZCwl ZCwlZCwlZH0sIGNvbG9yOnslZCwlZCwlZCwlZH1cbiIsCi0JCQkJZGltX2xheWVyW2ldLnJlY3Qu eCwgZGltX2xheWVyW2ldLnJlY3QueSwKLQkJCQlkaW1fbGF5ZXJbaV0ucmVjdC53LCBkaW1fbGF5 ZXJbaV0ucmVjdC5oLAotCQkJCWRpbV9sYXllcltpXS5jb2xvcl9maWxsLmNvbG9yXzAsCi0JCQkJ ZGltX2xheWVyW2ldLmNvbG9yX2ZpbGwuY29sb3JfMSwKLQkJCQlkaW1fbGF5ZXJbaV0uY29sb3Jf ZmlsbC5jb2xvcl8yLAotCQkJCWRpbV9sYXllcltpXS5jb2xvcl9maWxsLmNvbG9yXzMpOwotCX0K LX0KLQotLyoqCi0gKiBfZHB1X2NydGNfZGVzdF9zY2FsZXJfaW5pdCAtIGFsbG9jYXRlIG1lbW9y eSBmb3Igc2NhbGVyIGx1dAotICogQGRwdV9jcnRjICAgIDogIFBvaW50ZXIgdG8gZHB1IGNydGMK LSAqIEBjYXRhbG9nIDogIFBvaW50ZXIgdG8gbWRzcyBjYXRhbG9nIGluZm8KLSAqLwotc3RhdGlj IHZvaWQgX2RwdV9jcnRjX2Rlc3Rfc2NhbGVyX2luaXQoc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0 YywKLQkJCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nKQotewotCWlmICghZHB1X2NydGMg fHwgIWNhdGFsb2cpCi0JCXJldHVybjsKLQotCWlmICghY2F0YWxvZy0+bWRwWzBdLmhhc19kZXN0 X3NjYWxlcikgewotCQlEUFVfREVCVUcoImRlc3Qgc2NhbGVyIGZlYXR1cmUgbm90IHN1cHBvcnRl ZFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcHVfY3J0Yy0+c2NsM19sdXRfY2ZnID0ga3phbGxv YyhzaXplb2Yoc3RydWN0IGRwdV9od19zY2FsZXIzX2x1dF9jZmcpLAotCQkJCUdGUF9LRVJORUwp OwotCWlmICghZHB1X2NydGMtPnNjbDNfbHV0X2NmZykKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8g Y3JlYXRlIHNjYWxlIExVVCBmb3IgZGVzdCBzY2FsZXIiKTsKLX0KLQotLyoqCi0gKiBfZHB1X2Ny dGNfc2V0X2Rlc3Rfc2NhbGVyIC0gY29weSBkZXN0IHNjYWxlciBzZXR0aW5ncyBmcm9tIHVzZXJz cGFjZQotICogQGRwdV9jcnRjICAgOiAgUG9pbnRlciB0byBkcHUgY3J0YwotICogQGNzdGF0ZSA6 ICBQb2ludGVyIHRvIGRwdSBjcnRjIHN0YXRlCi0gKiBAdXNyX3B0cjogIFVzZXIgcHRyIGZvciBk cHVfZHJtX2Rlc3Rfc2NhbGVyX2RhdGEgc3RydWN0Ci0gKi8KLXN0YXRpYyBpbnQgX2RwdV9jcnRj X3NldF9kZXN0X3NjYWxlcihzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjLAotCQkJCXN0cnVjdCBk cHVfY3J0Y19zdGF0ZSAqY3N0YXRlLAotCQkJCXZvaWQgX191c2VyICp1c3JfcHRyKQotewotCXN0 cnVjdCBkcHVfZHJtX2Rlc3Rfc2NhbGVyX2RhdGEgZHNfZGF0YTsKLQlzdHJ1Y3QgZHB1X2RybV9k ZXN0X3NjYWxlcl9jZmcgKmRzX2NmZ191c3I7Ci0Jc3RydWN0IGRwdV9kcm1fc2NhbGVyX3YyIHNj YWxlcl92MjsKLQl2b2lkIF9fdXNlciAqc2NhbGVyX3YyX3VzcjsKLQlpbnQgaSwgY291bnQsIHJl dCA9IDA7Ci0KLQlpZiAoIWRwdV9jcnRjIHx8ICFjc3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZh bGlkIGRwdV9jcnRjL3N0YXRlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JRFBVX0RF QlVHKCJjcnRjICVzXG4iLCBkcHVfY3J0Yy0+bmFtZSk7Ci0KLQljc3RhdGUtPm51bV9kcyA9IDA7 Ci0JY3N0YXRlLT5kc19kaXJ0eSA9IGZhbHNlOwotCWlmICghdXNyX3B0cikgewotCQlEUFVfREVC VUcoImRzIGRhdGEgcmVtb3ZlZFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChjb3B5X2Zy b21fdXNlcigmZHNfZGF0YSwgdXNyX3B0ciwgc2l6ZW9mKGRzX2RhdGEpKSkgewotCQlEUFVfRVJS T1IoImZhaWxlZCB0byBjb3B5IGRlc3Qgc2NhbGVyIGRhdGEgZnJvbSB1c2VyXG4iKTsKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0JfQotCi0JY291bnQgPSBkc19kYXRhLm51bV9kZXN0X3NjYWxlcjsKLQlp ZiAoIWRwdV9jcnRjLT5udW1fbWl4ZXJzIHx8IGNvdW50ID4gZHB1X2NydGMtPm51bV9taXhlcnMg fHwKLQkJKGNvdW50ICYmIChjb3VudCAhPSBkcHVfY3J0Yy0+bnVtX21peGVycykgJiYKLQkJIShk c19kYXRhLmRzX2NmZ1swXS5mbGFncyAmIERQVV9EUk1fREVTVFNDQUxFUl9QVV9FTkFCTEUpKSkg ewotCQlEUFVfRVJST1IoImludmFsaWQgY29uZmlnOm51bSBkcyglZCksIG1peGVycyglZCksZmxh Z3MoJWQpXG4iLAotCQkJY291bnQsIGRwdV9jcnRjLT5udW1fbWl4ZXJzLCBkc19kYXRhLmRzX2Nm Z1swXS5mbGFncyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFBvcHVsYXRlIGZyb20g dXNlciBzcGFjZSAqLwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCWRzX2NmZ191 c3IgPSAmZHNfZGF0YS5kc19jZmdbaV07Ci0KLQkJY3N0YXRlLT5kc19jZmdbaV0ubmR4ID0gZHNf Y2ZnX3Vzci0+aW5kZXg7Ci0JCWNzdGF0ZS0+ZHNfY2ZnW2ldLmZsYWdzID0gZHNfY2ZnX3Vzci0+ ZmxhZ3M7Ci0JCWNzdGF0ZS0+ZHNfY2ZnW2ldLmxtX3dpZHRoID0gZHNfY2ZnX3Vzci0+bG1fd2lk dGg7Ci0JCWNzdGF0ZS0+ZHNfY2ZnW2ldLmxtX2hlaWdodCA9IGRzX2NmZ191c3ItPmxtX2hlaWdo dDsKLQkJY3N0YXRlLT5kc19jZmdbaV0uc2NsM19jZmcgPSBOVUxMOwotCi0JCWlmIChkc19jZmdf dXNyLT5zY2FsZXJfY2ZnKSB7Ci0JCQlzY2FsZXJfdjJfdXNyID0KLQkJCSh2b2lkIF9fdXNlciAq KSgodWludHB0cl90KWRzX2NmZ191c3ItPnNjYWxlcl9jZmcpOwotCi0JCQltZW1zZXQoJnNjYWxl cl92MiwgMCwgc2l6ZW9mKHNjYWxlcl92MikpOwotCi0JCQljc3RhdGUtPmRzX2NmZ1tpXS5zY2wz X2NmZyA9Ci0JCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGRwdV9od19zY2FsZXIzX2NmZyksCi0J CQkJCUdGUF9LRVJORUwpOwotCi0JCQlpZiAoIWNzdGF0ZS0+ZHNfY2ZnW2ldLnNjbDNfY2ZnKSB7 Ci0JCQkJcmV0ID0gLUVOT01FTTsKLQkJCQlnb3RvIGVycjsKLQkJCX0KLQotCQkJaWYgKGNvcHlf ZnJvbV91c2VyKCZzY2FsZXJfdjIsIHNjYWxlcl92Ml91c3IsCi0JCQkJCXNpemVvZihzY2FsZXJf djIpKSkgewotCQkJCURQVV9FUlJPUigic2NhbGUgZGF0YTpjb3B5IGZyb20gdXNlciBmYWlsZWRc biIpOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBlcnI7Ci0JCQl9Ci0KLQkJCWRwdV9z ZXRfc2NhbGVyX3YyKGNzdGF0ZS0+ZHNfY2ZnW2ldLnNjbDNfY2ZnLAotCQkJCQkmc2NhbGVyX3Yy KTsKLQotCQkJRFBVX0RFQlVHKCJlbiglZClkaXIoJWQpZGUoJWQpIHNyYyglZHglZCkgZHN0KCVk eCVkKVxuIiwKLQkJCQlzY2FsZXJfdjIuZW5hYmxlLCBzY2FsZXJfdjIuZGlyX2VuLAotCQkJCXNj YWxlcl92Mi5kZS5lbmFibGUsIHNjYWxlcl92Mi5zcmNfd2lkdGhbMF0sCi0JCQkJc2NhbGVyX3Yy LnNyY19oZWlnaHRbMF0sIHNjYWxlcl92Mi5kc3Rfd2lkdGgsCi0JCQkJc2NhbGVyX3YyLmRzdF9o ZWlnaHQpOwotCQkJRFBVX0VWVDMyX1ZFUkJPU0UoRFJNSUQoJmRwdV9jcnRjLT5iYXNlKSwKLQkJ CQlzY2FsZXJfdjIuZW5hYmxlLCBzY2FsZXJfdjIuZGlyX2VuLAotCQkJCXNjYWxlcl92Mi5kZS5l bmFibGUsIHNjYWxlcl92Mi5zcmNfd2lkdGhbMF0sCi0JCQkJc2NhbGVyX3YyLnNyY19oZWlnaHRb MF0sIHNjYWxlcl92Mi5kc3Rfd2lkdGgsCi0JCQkJc2NhbGVyX3YyLmRzdF9oZWlnaHQpOwotCQl9 Ci0KLQkJRFBVX0RFQlVHKCJkcyBjZmdbJWRdLW5keCglZCkgZmxhZ3MoJWQpIGxtKCVkeCVkKVxu IiwKLQkJCWksIGRzX2NmZ191c3ItPmluZGV4LCBkc19jZmdfdXNyLT5mbGFncywKLQkJCWRzX2Nm Z191c3ItPmxtX3dpZHRoLCBkc19jZmdfdXNyLT5sbV9oZWlnaHQpOwotCQlEUFVfRVZUMzJfVkVS Qk9TRShEUk1JRCgmZHB1X2NydGMtPmJhc2UpLCBpLCBkc19jZmdfdXNyLT5pbmRleCwKLQkJCWRz X2NmZ191c3ItPmZsYWdzLCBkc19jZmdfdXNyLT5sbV93aWR0aCwKLQkJCWRzX2NmZ191c3ItPmxt X2hlaWdodCk7Ci0JfQotCi0JY3N0YXRlLT5udW1fZHMgPSBjb3VudDsKLQljc3RhdGUtPmRzX2Rp cnR5ID0gdHJ1ZTsKLQlyZXR1cm4gMDsKLQotZXJyOgotCWZvciAoOyBpID49IDA7IGktLSkKLQkJ a2ZyZWUoY3N0YXRlLT5kc19jZmdbaV0uc2NsM19jZmcpOwotCi0JcmV0dXJuIHJldDsKLX0KLQot LyoqCi0gKiBfZHB1X2NydGNfY2hlY2tfZGVzdF9zY2FsZXJfZGF0YSAtIHZhbGlkYXRlIHRoZSBk ZXN0IHNjYWxlciBkYXRhCi0gKiBAY3J0YyAgOiAgUG9pbnRlciB0byBkcm0gY3J0YwotICogQHN0 YXRlIDogIFBvaW50ZXIgdG8gZHJtIGNydGMgc3RhdGUKLSAqLwotc3RhdGljIGludCBfZHB1X2Ny dGNfY2hlY2tfZGVzdF9zY2FsZXJfZGF0YShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkJc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKLXsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRj OwotCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOwotCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlOwotCXN0cnVjdCBkcHVfa21zICprbXM7Ci0Jc3RydWN0IGRwdV9od19kcyAqaHdf ZHM7Ci0Jc3RydWN0IGRwdV9od19kc19jZmcgKmNmZzsKLQl1MzIgaSwgcmV0ID0gMCwgbG1faWR4 OwotCXUzMiBudW1fZHNfZW5hYmxlID0gMDsKLQl1MzIgbWF4X2luX3dpZHRoID0gMCwgbWF4X291 dF93aWR0aCA9IDA7Ci0JdTMyIHByZXZfbG1fd2lkdGggPSAwLCBwcmV2X2xtX2hlaWdodCA9IDA7 Ci0KLQlpZiAoIWNydGMgfHwgIXN0YXRlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRwdV9jcnRj ID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0JY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUp OwotCWttcyA9IF9kcHVfY3J0Y19nZXRfa21zKGNydGMpOwotCW1vZGUgPSAmc3RhdGUtPmFkanVz dGVkX21vZGU7Ci0KLQlEUFVfREVCVUcoImNydGMlZFxuIiwgY3J0Yy0+YmFzZS5pZCk7Ci0KLQlp ZiAoIWNzdGF0ZS0+ZHNfZGlydHkgJiYgIWNzdGF0ZS0+bnVtX2RzX2VuYWJsZWQpIHsKLQkJRFBV X0RFQlVHKCJkZXN0IHNjYWxlciBwcm9wZXJ0eSBub3Qgc2V0LCBza2lwIHZhbGlkYXRpb25cbiIp OwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoIWttcyB8fCAha21zLT5jYXRhbG9nKSB7Ci0JCURQ VV9FUlJPUigiaW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JaWYgKCFrbXMtPmNhdGFsb2ctPm1kcFswXS5oYXNfZGVzdF9zY2FsZXIpIHsKLQkJRFBVX0RF QlVHKCJkZXN0IHNjYWxlciBmZWF0dXJlIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gMDsK LQl9Ci0KLQlpZiAoIWRwdV9jcnRjLT5udW1fbWl4ZXJzKSB7Ci0JCURQVV9FUlJPUigibWl4ZXJz IG5vdCBhbGxvY2F0ZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKioKLQkgKiBD aGVjayBpZiBzdWZmaWNpZW50IGh3IHJlc291cmNlcyBhcmUKLQkgKiBhdmFpbGFibGUgYXMgcGVy IHRhcmdldCBjYXBzICYgdG9wb2xvZ3kKLQkgKi8KLQlpZiAoZHB1X2NydGMtPm51bV9taXhlcnMg PiBDUlRDX0RVQUxfTUlYRVJTKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjb25maWc6IG1peGVy cyglZCkgbWF4KCVkKVxuIiwKLQkJCWRwdV9jcnRjLT5udW1fbWl4ZXJzLCBDUlRDX0RVQUxfTUlY RVJTKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnI7Ci0JfQotCi0JZm9yIChpID0gMDsg aSA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyBpKyspIHsKLQkJaWYgKCFkcHVfY3J0Yy0+bWl4ZXJz W2ldLmh3X2xtIHx8ICFkcHVfY3J0Yy0+bWl4ZXJzW2ldLmh3X2RzKSB7Ci0JCQlEUFVfRVJST1Io Imluc3VmZmljaWVudCBIVyByZXNvdXJjZXMgYWxsb2NhdGVkXG4iKTsKLQkJCXJldCA9IC1FSU5W QUw7Ci0JCQlnb3RvIGVycjsKLQkJfQotCX0KLQotCS8qKgotCSAqIENoZWNrIGlmIERTIG5lZWRz IHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQKLQkgKiBJbiBjYXNlIG9mIGVuYWJsZSwgdmFsaWRh dGUgdGhlIGRhdGEKLQkgKi8KLQlpZiAoIWNzdGF0ZS0+ZHNfZGlydHkgfHwgIWNzdGF0ZS0+bnVt X2RzIHx8Ci0JCSEoY3N0YXRlLT5kc19jZmdbMF0uZmxhZ3MgJiBEUFVfRFJNX0RFU1RTQ0FMRVJf RU5BQkxFKSkgewotCQlEUFVfREVCVUcoImRpc2FibGUgZGVzdCBzY2FsZXIsZGlydHkoJWQpbnVt KCVkKWZsYWdzKCVkKVxuIiwKLQkJCWNzdGF0ZS0+ZHNfZGlydHksIGNzdGF0ZS0+bnVtX2RzLAot CQkJY3N0YXRlLT5kc19jZmdbMF0uZmxhZ3MpOwotCQlnb3RvIGRpc2FibGU7Ci0JfQotCi0JLyoq Ci0JICogTm8gb2YgZGVzdCBzY2FsZXJzIHNob3VsZG4ndCBleGNlZWQgaHcgZHMgYmxvY2sgY291 bnQgYW5kCi0JICogYWxzbywgbWF0Y2ggdGhlIG51bSBvZiBtaXhlcnMgdW5sZXNzIGl0IGlzIHBh cnRpYWwgdXBkYXRlCi0JICogbGVmdCBvbmx5L3JpZ2h0IG9ubHkgdXNlIGNhc2UgLSBjdXJyZW50 bHkgUFUgKyBEUyBpcyBub3Qgc3VwcG9ydGVkCi0JICovCi0JaWYgKGNzdGF0ZS0+bnVtX2RzID4g a21zLT5jYXRhbG9nLT5kc19jb3VudCB8fAotCQkoKGNzdGF0ZS0+bnVtX2RzICE9IGRwdV9jcnRj LT5udW1fbWl4ZXJzKSAmJgotCQkhKGNzdGF0ZS0+ZHNfY2ZnWzBdLmZsYWdzICYgRFBVX0RSTV9E RVNUU0NBTEVSX1BVX0VOQUJMRSkpKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjZmc6IG51bV9k cyglZCksIGh3X2RzX2NudCglZCkgZmxhZ3MoJWQpXG4iLAotCQkJY3N0YXRlLT5udW1fZHMsIGtt cy0+Y2F0YWxvZy0+ZHNfY291bnQsCi0JCQljc3RhdGUtPmRzX2NmZ1swXS5mbGFncyk7Ci0JCXJl dCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyOwotCX0KLQotCS8qIFZhbGlkYXRlIHRoZSBEUyBkYXRh ICovCi0JZm9yIChpID0gMDsgaSA8IGNzdGF0ZS0+bnVtX2RzOyBpKyspIHsKLQkJY2ZnID0gJmNz dGF0ZS0+ZHNfY2ZnW2ldOwotCQlsbV9pZHggPSBjZmctPm5keDsKLQotCQkvKioKLQkJICogVmFs aWRhdGUgYWdhaW5zdCB0b3BvbG9neQotCQkgKiBObyBvZiBkZXN0IHNjYWxlcnMgc2hvdWxkIG1h dGNoIHRoZSBudW0gb2YgbWl4ZXJzCi0JCSAqIHVubGVzcyBpdCBpcyBwYXJ0aWFsIHVwZGF0ZSBs ZWZ0IG9ubHkvcmlnaHQgb25seSB1c2UgY2FzZQotCQkgKi8KLQkJaWYgKGxtX2lkeCA+PSBkcHVf Y3J0Yy0+bnVtX21peGVycyB8fCAoaSAhPSBsbV9pZHggJiYKLQkJCSEoY2ZnLT5mbGFncyAmIERQ VV9EUk1fREVTVFNDQUxFUl9QVV9FTkFCTEUpKSkgewotCQkJRFBVX0VSUk9SKCJpbnZhbGlkIHVz ZXIgZGF0YSglZCk6aWR4KCVkKSwgZmxhZ3MoJWQpXG4iLAotCQkJCWksIGxtX2lkeCwgY2ZnLT5m bGFncyk7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBlcnI7Ci0JCX0KLQotCQlod19kcyA9 IGRwdV9jcnRjLT5taXhlcnNbbG1faWR4XS5od19kczsKLQotCQlpZiAoIW1heF9pbl93aWR0aCAm JiAhbWF4X291dF93aWR0aCkgewotCQkJbWF4X2luX3dpZHRoID0gaHdfZHMtPnNjbC0+dG9wLT5t YXhpbnB1dHdpZHRoOwotCQkJbWF4X291dF93aWR0aCA9IGh3X2RzLT5zY2wtPnRvcC0+bWF4b3V0 cHV0d2lkdGg7Ci0KLQkJCWlmIChjc3RhdGUtPm51bV9kcyA9PSBDUlRDX0RVQUxfTUlYRVJTKQot CQkJCW1heF9pbl93aWR0aCAtPSBEUFVfRFNfT1ZFUkZFVENIX1NJWkU7Ci0KLQkJCURQVV9ERUJV RygibWF4IERTIHdpZHRoIFslZCwlZF0gZm9yIG51bV9kcyA9ICVkXG4iLAotCQkJCW1heF9pbl93 aWR0aCwgbWF4X291dF93aWR0aCwgY3N0YXRlLT5udW1fZHMpOwotCQl9Ci0KLQkJLyogQ2hlY2sg TE0gd2lkdGggYW5kIGhlaWdodCAqLwotCQlpZiAoY2ZnLT5sbV93aWR0aCA+IChtb2RlLT5oZGlz cGxheS9kcHVfY3J0Yy0+bnVtX21peGVycykgfHwKLQkJCWNmZy0+bG1faGVpZ2h0ID4gbW9kZS0+ dmRpc3BsYXkgfHwKLQkJCSFjZmctPmxtX3dpZHRoIHx8ICFjZmctPmxtX2hlaWdodCkgewotCQkJ RFBVX0VSUk9SKCJpbnZhbGlkIGxtIHNpemVbJWQsJWRdIGRpc3BsYXkgWyVkLCVkXVxuIiwKLQkJ CQljZmctPmxtX3dpZHRoLAotCQkJCWNmZy0+bG1faGVpZ2h0LAotCQkJCW1vZGUtPmhkaXNwbGF5 L2RwdV9jcnRjLT5udW1fbWl4ZXJzLAotCQkJCW1vZGUtPnZkaXNwbGF5KTsKLQkJCXJldCA9IC1F MkJJRzsKLQkJCWdvdG8gZXJyOwotCQl9Ci0KLQkJaWYgKCFwcmV2X2xtX3dpZHRoICYmICFwcmV2 X2xtX2hlaWdodCkgewotCQkJcHJldl9sbV93aWR0aCA9IGNmZy0+bG1fd2lkdGg7Ci0JCQlwcmV2 X2xtX2hlaWdodCA9IGNmZy0+bG1faGVpZ2h0OwotCQl9IGVsc2UgewotCQkJaWYgKGNmZy0+bG1f d2lkdGggIT0gcHJldl9sbV93aWR0aCB8fAotCQkJCWNmZy0+bG1faGVpZ2h0ICE9IHByZXZfbG1f aGVpZ2h0KSB7Ci0JCQkJRFBVX0VSUk9SKCJsbSBzaXplOmxlZnRbJWQsJWRdLCByaWdodFslZCAl ZF1cbiIsCi0JCQkJCWNmZy0+bG1fd2lkdGgsIGNmZy0+bG1faGVpZ2h0LAotCQkJCQlwcmV2X2xt X3dpZHRoLCBwcmV2X2xtX2hlaWdodCk7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQlnb3RvIGVy cjsKLQkJCX0KLQkJfQotCi0JCS8qIENoZWNrIHNjYWxlciBkYXRhICovCi0JCWlmIChjZmctPmZs YWdzICYgRFBVX0RSTV9ERVNUU0NBTEVSX1NDQUxFX1VQREFURSB8fAotCQkJY2ZnLT5mbGFncyAm IERQVV9EUk1fREVTVFNDQUxFUl9FTkhBTkNFUl9VUERBVEUpIHsKLQkJCWlmICghY2ZnLT5zY2wz X2NmZykgewotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJRFBVX0VSUk9SKCJudWxsIHNjYWxlIGRh dGFcbiIpOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCQkJaWYgKGNmZy0+c2NsM19jZmctPnNyY193 aWR0aFswXSA+IG1heF9pbl93aWR0aCB8fAotCQkJCWNmZy0+c2NsM19jZmctPmRzdF93aWR0aCA+ IG1heF9vdXRfd2lkdGggfHwKLQkJCQkhY2ZnLT5zY2wzX2NmZy0+c3JjX3dpZHRoWzBdIHx8Ci0J CQkJIWNmZy0+c2NsM19jZmctPmRzdF93aWR0aCkgewotCQkJCURQVV9FUlJPUigic2NhbGUgd2lk dGgoJWQgJWQpIGZvciBkcy0lZDpcbiIsCi0JCQkJCWNmZy0+c2NsM19jZmctPnNyY193aWR0aFsw XSwKLQkJCQkJY2ZnLT5zY2wzX2NmZy0+ZHN0X3dpZHRoLAotCQkJCQlod19kcy0+aWR4IC0gRFNf MCk7Ci0JCQkJRFBVX0VSUk9SKCJzY2FsZV9lbiA9ICVkLCBERV9lbiA9JWRcbiIsCi0JCQkJCWNm Zy0+c2NsM19jZmctPmVuYWJsZSwKLQkJCQkJY2ZnLT5zY2wzX2NmZy0+ZGUuZW5hYmxlKTsKLQot CQkJCWNmZy0+ZmxhZ3MgJj0KLQkJCQkJfkRQVV9EUk1fREVTVFNDQUxFUl9TQ0FMRV9VUERBVEU7 Ci0JCQkJY2ZnLT5mbGFncyAmPQotCQkJCQl+RFBVX0RSTV9ERVNUU0NBTEVSX0VOSEFOQ0VSX1VQ REFURTsKLQotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBlcnI7Ci0JCQl9Ci0JCX0KLQot CQlpZiAoY2ZnLT5mbGFncyAmIERQVV9EUk1fREVTVFNDQUxFUl9FTkFCTEUpCi0JCQludW1fZHNf ZW5hYmxlKys7Ci0KLQkJLyoqCi0JCSAqIFZhbGlkYXRpb24gc3VjY2Vzc2Z1bCwgaW5kaWNhdG9y IGZvciBmbHVzaCB0byBiZSBpc3N1ZWQKLQkJICovCi0JCWNmZy0+c2V0X2xtX2ZsdXNoID0gdHJ1 ZTsKLQotCQlEUFVfREVCVUcoImRzWyVkXTogZmxhZ3MgPSAweCVYXG4iLAotCQkJaHdfZHMtPmlk eCAtIERTXzAsIGNmZy0+ZmxhZ3MpOwotCX0KLQotZGlzYWJsZToKLQlEUFVfREVCVUcoImRlc3Qg c2NhbGVyIGVuYWJsZSBzdGF0dXMsIG9sZCA9ICVkLCBuZXcgPSAlZCIsCi0JCWNzdGF0ZS0+bnVt X2RzX2VuYWJsZWQsIG51bV9kc19lbmFibGUpOwotCURQVV9FVlQzMihEUk1JRChjcnRjKSwgY3N0 YXRlLT5udW1fZHNfZW5hYmxlZCwgbnVtX2RzX2VuYWJsZSwKLQkJY3N0YXRlLT5kc19kaXJ0eSk7 Ci0KLQlpZiAoY3N0YXRlLT5udW1fZHNfZW5hYmxlZCAhPSBudW1fZHNfZW5hYmxlKSB7Ci0JCS8q IERpc2FibGluZyBkZXN0aW5hdGlvbiBzY2FsZXIgKi8KLQkJaWYgKCFudW1fZHNfZW5hYmxlKSB7 Ci0JCQlmb3IgKGkgPSAwOyBpIDwgZHB1X2NydGMtPm51bV9taXhlcnM7IGkrKykgewotCQkJCWNm ZyA9ICZjc3RhdGUtPmRzX2NmZ1tpXTsKLQkJCQljZmctPm5keCA9IGk7Ci0JCQkJLyogVXBkYXRl IHNjYWxlciBzZXR0aW5ncyBpbiBkaXNhYmxlIGNhc2UgKi8KLQkJCQljZmctPmZsYWdzID0gRFBV X0RSTV9ERVNUU0NBTEVSX1NDQUxFX1VQREFURTsKLQkJCQljZmctPnNjbDNfY2ZnLT5lbmFibGUg PSAwOwotCQkJCWNmZy0+c2NsM19jZmctPmRlLmVuYWJsZSA9IDA7Ci0JCQkJY2ZnLT5zZXRfbG1f Zmx1c2ggPSB0cnVlOwotCQkJfQotCQl9Ci0JCWNzdGF0ZS0+bnVtX2RzX2VuYWJsZWQgPSBudW1f ZHNfZW5hYmxlOwotCQljc3RhdGUtPmRzX2RpcnR5ID0gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gMDsK LQotZXJyOgotCWNzdGF0ZS0+ZHNfZGlydHkgPSBmYWxzZTsKLQlyZXR1cm4gcmV0OwotfQotCiBz dGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4ZXJfZm9yX2VuY29kZXIoCiAJCXN0cnVjdCBk cm1fY3J0YyAqY3J0YywKIAkJc3RydWN0IGRybV9lbmNvZGVyICplbmMpCkBAIC0xNzY0LDExICsx MDc0LDEwIEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXR1cF9taXhlcl9mb3JfZW5jb2RlcigK IAlzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgKm1peGVyOwogCXN0cnVjdCBkcHVfaHdfY3RsICpsYXN0 X3ZhbGlkX2N0bCA9IE5VTEw7CiAJaW50IGk7Ci0Jc3RydWN0IGRwdV9ybV9od19pdGVyIGxtX2l0 ZXIsIGN0bF9pdGVyLCBkc19pdGVyOworCXN0cnVjdCBkcHVfcm1faHdfaXRlciBsbV9pdGVyLCBj dGxfaXRlcjsKIAogCWRwdV9ybV9pbml0X2h3X2l0ZXIoJmxtX2l0ZXIsIGVuYy0+YmFzZS5pZCwg RFBVX0hXX0JMS19MTSk7CiAJZHB1X3JtX2luaXRfaHdfaXRlcigmY3RsX2l0ZXIsIGVuYy0+YmFz ZS5pZCwgRFBVX0hXX0JMS19DVEwpOwotCWRwdV9ybV9pbml0X2h3X2l0ZXIoJmRzX2l0ZXIsIGVu Yy0+YmFzZS5pZCwgRFBVX0hXX0JMS19EUyk7CiAKIAkvKiBTZXQgdXAgYWxsIHRoZSBtaXhlcnMg YW5kIGN0bHMgcmVzZXJ2ZWQgYnkgdGhpcyBlbmNvZGVyICovCiAJZm9yIChpID0gZHB1X2NydGMt Pm51bV9taXhlcnM7IGkgPCBBUlJBWV9TSVpFKGRwdV9jcnRjLT5taXhlcnMpOyBpKyspIHsKQEAg LTE3OTUsMTAgKzExMDQsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4ZXJfZm9y X2VuY29kZXIoCiAJCQlyZXR1cm47CiAJCX0KIAotCQkvKiBEUyBtYXkgYmUgbnVsbCAqLwotCQko dm9pZCkgZHB1X3JtX2dldF9odyhybSwgJmRzX2l0ZXIpOwotCQltaXhlci0+aHdfZHMgPSAoc3Ry dWN0IGRwdV9od19kcyAqKWRzX2l0ZXIuaHc7Ci0KIAkJbWl4ZXItPmVuY29kZXIgPSBlbmM7CiAK IAkJZHB1X2NydGMtPm51bV9taXhlcnMrKzsKQEAgLTE4MDYsOSArMTExMSw2IEBAIHN0YXRpYyB2 b2lkIF9kcHVfY3J0Y19zZXR1cF9taXhlcl9mb3JfZW5jb2RlcigKIAkJCQlpLCBtaXhlci0+aHdf bG0tPmlkeCAtIExNXzApOwogCQlEUFVfREVCVUcoInNldHVwIG1peGVyICVkOiBjdGwgJWRcbiIs CiAJCQkJaSwgbWl4ZXItPmh3X2N0bC0+aWR4IC0gQ1RMXzApOwotCQlpZiAobWl4ZXItPmh3X2Rz KQotCQkJRFBVX0RFQlVHKCJzZXR1cCBtaXhlciAlZDogZHMgJWRcbiIsCi0JCQkJaSwgbWl4ZXIt Pmh3X2RzLT5pZHggLSBEU18wKTsKIAl9CiB9CiAKQEAgLTE5MjQsNyArMTIyNiw2IEBAIHN0YXRp YyB2b2lkIGRwdV9jcnRjX2F0b21pY19iZWdpbihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCXJl dHVybjsKIAogCV9kcHVfY3J0Y19ibGVuZF9zZXR1cChjcnRjKTsKLQlfZHB1X2NydGNfZGVzdF9z Y2FsZXJfc2V0dXAoY3J0Yyk7CiAKIAkvKgogCSAqIFBQX0RPTkUgaXJxIGlzIG9ubHkgdXNlZCBi eSBjb21tYW5kIG1vZGUgZm9yIG5vdy4KQEAgLTI2MjMsMTMgKzE5MjQsNiBAQCBzdGF0aWMgaW50 IGRwdV9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAKIAltZW1zZXQo cGlwZV9zdGFnZWQsIDAsIHNpemVvZihwaXBlX3N0YWdlZCkpOwogCi0JcmMgPSBfZHB1X2NydGNf Y2hlY2tfZGVzdF9zY2FsZXJfZGF0YShjcnRjLCBzdGF0ZSk7Ci0JaWYgKHJjKSB7Ci0JCURQVV9F UlJPUigiY3J0YyVkIGZhaWxlZCBkZXN0IHNjYWxlciBjaGVjayAlZFxuIiwKLQkJCWNydGMtPmJh c2UuaWQsIHJjKTsKLQkJZ290byBlbmQ7Ci0JfQotCiAJbWl4ZXJfd2lkdGggPSBkcHVfY3J0Y19n ZXRfbWl4ZXJfd2lkdGgoZHB1X2NydGMsIGNzdGF0ZSwgbW9kZSk7CiAKIAlfZHB1X2NydGNfc2V0 dXBfbG1fYm91bmRzKGNydGMsIHN0YXRlKTsKQEAgLTI2NTAsMTkgKzE5NDQsNiBAQCBzdGF0aWMg aW50IGRwdV9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCXBzdGF0 ZXNbY250XS5zdGFnZSA9IHBzdGF0ZS0+bm9ybWFsaXplZF96cG9zOwogCQlwc3RhdGVzW2NudF0u cGlwZV9pZCA9IGRwdV9wbGFuZV9waXBlKHBsYW5lKTsKIAotCQkvKiBjaGVjayBkaW0gbGF5ZXIg c3RhZ2Ugd2l0aCBldmVyeSBwbGFuZSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgY3N0YXRlLT5udW1f ZGltX2xheWVyczsgaSsrKSB7Ci0JCQlpZiAoY3N0YXRlLT5kaW1fbGF5ZXJbaV0uc3RhZ2UKLQkJ CQkJPT0gKHBzdGF0ZXNbY250XS5zdGFnZSArIERQVV9TVEFHRV8wKSkgewotCQkJCURQVV9FUlJP UigKLQkJCQkJInBsYW5lOiVkL2RpbV9sYXllcjolaS1zYW1lIHN0YWdlOiVkXG4iLAotCQkJCQlw bGFuZS0+YmFzZS5pZCwgaSwKLQkJCQkJY3N0YXRlLT5kaW1fbGF5ZXJbaV0uc3RhZ2UpOwotCQkJ CXJjID0gLUVJTlZBTDsKLQkJCQlnb3RvIGVuZDsKLQkJCX0KLQkJfQotCiAJCWlmIChwaXBlX3N0 YWdlZFtwc3RhdGVzW2NudF0ucGlwZV9pZF0pIHsKIAkJCW11bHRpcmVjdF9wbGFuZVttdWx0aXJl Y3RfY291bnRdLnIwID0KIAkJCQlwaXBlX3N0YWdlZFtwc3RhdGVzW2NudF0ucGlwZV9pZF07CkBA IC0yODk4LDUyICsyMTc5LDExIEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2luc3RhbGxfcHJvcGVy dGllcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCXJldHVybjsKIAl9CiAKLQkvKiByYW5nZSBw cm9wZXJ0aWVzICovCi0JbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJmRwdV9jcnRjLT5wcm9w ZXJ0eV9pbmZvLAotCQkJImNvcmVfY2xrIiwgMHgwLCAwLCBVNjRfTUFYLAotCQkJZHB1X2ttcy0+ cGVyZi5tYXhfY29yZV9jbGtfcmF0ZSwKLQkJCUNSVENfUFJPUF9DT1JFX0NMSyk7Ci0JbXNtX3By b3BlcnR5X2luc3RhbGxfcmFuZ2UoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAotCQkJImNvcmVf YWIiLCAweDAsIDAsIFU2NF9NQVgsCi0JCQljYXRhbG9nLT5wZXJmLm1heF9id19oaWdoICogMTAw MFVMTCwKLQkJCUNSVENfUFJPUF9DT1JFX0FCKTsKLQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5n ZSgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCi0JCQkiY29yZV9pYiIsIDB4MCwgMCwgVTY0X01B WCwKLQkJCWNhdGFsb2ctPnBlcmYubWF4X2J3X2hpZ2ggKiAxMDAwVUxMLAotCQkJQ1JUQ19QUk9Q X0NPUkVfSUIpOwotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZkcHVfY3J0Yy0+cHJvcGVy dHlfaW5mbywKLQkJCSJsbGNjX2FiIiwgMHgwLCAwLCBVNjRfTUFYLAotCQkJY2F0YWxvZy0+cGVy Zi5tYXhfYndfaGlnaCAqIDEwMDBVTEwsCi0JCQlDUlRDX1BST1BfTExDQ19BQik7Ci0JbXNtX3By b3BlcnR5X2luc3RhbGxfcmFuZ2UoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAotCQkJImxsY2Nf aWIiLCAweDAsIDAsIFU2NF9NQVgsCi0JCQljYXRhbG9nLT5wZXJmLm1heF9id19oaWdoICogMTAw MFVMTCwKLQkJCUNSVENfUFJPUF9MTENDX0lCKTsKLQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5n ZSgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCi0JCQkiZHJhbV9hYiIsIDB4MCwgMCwgVTY0X01B WCwKLQkJCWNhdGFsb2ctPnBlcmYubWF4X2J3X2hpZ2ggKiAxMDAwVUxMLAotCQkJQ1JUQ19QUk9Q X0RSQU1fQUIpOwotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZkcHVfY3J0Yy0+cHJvcGVy dHlfaW5mbywKLQkJCSJkcmFtX2liIiwgMHgwLCAwLCBVNjRfTUFYLAotCQkJY2F0YWxvZy0+cGVy Zi5tYXhfYndfaGlnaCAqIDEwMDBVTEwsCi0JCQlDUlRDX1BST1BfRFJBTV9JQik7Ci0KLQltc21f cHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCi0JCSJpZGxl X3RpbWVvdXQiLCBJRExFX1RJTUVPVVQsIDAsIFU2NF9NQVgsIDAsCi0JCUNSVENfUFJPUF9JRExF X1RJTUVPVVQpOwotCiAJbXNtX3Byb3BlcnR5X2luc3RhbGxfYmxvYigmZHB1X2NydGMtPnByb3Bl cnR5X2luZm8sICJjYXBhYmlsaXRpZXMiLAogCQlEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSwgQ1JU Q19QUk9QX0lORk8pOwogCiAJZHB1X2ttc19pbmZvX3Jlc2V0KGluZm8pOwogCi0JaWYgKGNhdGFs b2ctPmNhcHMtPmhhc19kaW1fbGF5ZXIpIHsKLQkJbXNtX3Byb3BlcnR5X2luc3RhbGxfdm9sYXRp bGVfcmFuZ2UoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAotCQkJImRpbV9sYXllcl92MSIsIDB4 MCwgMCwgfjAsIDAsIENSVENfUFJPUF9ESU1fTEFZRVJfVjEpOwotCQlkcHVfa21zX2luZm9fYWRk X2tleWludChpbmZvLCAiZGltX2xheWVyX3YxX21heF9sYXllcnMiLAotCQkJCURQVV9NQVhfRElN X0xBWUVSUyk7Ci0JfQotCiAJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgImh3X3ZlcnNp b24iLCBjYXRhbG9nLT5od3ZlcnNpb24pOwogCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8s ICJtYXhfbGluZXdpZHRoIiwKIAkJCWNhdGFsb2ctPmNhcHMtPm1heF9taXhlcl93aWR0aCk7CkBA IC0yOTYzLDM5ICsyMjAzLDYgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfaW5zdGFsbF9wcm9wZXJ0 aWVzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkJInNtYXJ0X2RtYV9yZXYiLCAic21hcnRf ZG1hX3YyIik7CiAJfQogCi0JaWYgKGNhdGFsb2ctPm1kcFswXS5oYXNfZGVzdF9zY2FsZXIpIHsK LQkJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgImhhc19kZXN0X3NjYWxlciIsCi0JCQkJ Y2F0YWxvZy0+bWRwWzBdLmhhc19kZXN0X3NjYWxlcik7Ci0JCWRwdV9rbXNfaW5mb19hZGRfa2V5 aW50KGluZm8sICJkZXN0X3NjYWxlcl9jb3VudCIsCi0JCQkJCWNhdGFsb2ctPmRzX2NvdW50KTsK LQotCQlpZiAoY2F0YWxvZy0+ZHNbMF0udG9wKSB7Ci0JCQlkcHVfa21zX2luZm9fYWRkX2tleWlu dChpbmZvLAotCQkJCQkibWF4X2Rlc3Rfc2NhbGVyX2lucHV0X3dpZHRoIiwKLQkJCQkJY2F0YWxv Zy0+ZHNbMF0udG9wLT5tYXhpbnB1dHdpZHRoKTsKLQkJCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50 KGluZm8sCi0JCQkJCSJtYXhfZGVzdF9zY2FsZXJfb3V0cHV0X3dpZHRoIiwKLQkJCQkJY2F0YWxv Zy0+ZHNbMF0udG9wLT5tYXhpbnB1dHdpZHRoKTsKLQkJCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50 KGluZm8sICJtYXhfZGVzdF9zY2FsZV91cCIsCi0JCQkJCWNhdGFsb2ctPmRzWzBdLnRvcC0+bWF4 dXBzY2FsZSk7Ci0JCX0KLQotCQlpZiAoY2F0YWxvZy0+ZHNbMF0uZmVhdHVyZXMgJiBCSVQoRFBV X1NTUFBfU0NBTEVSX1FTRUVEMykpIHsKLQkJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3ZvbGF0aWxl X3JhbmdlKAotCQkJCQkmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sICJkZXN0X3NjYWxlciIsCi0J CQkJCTB4MCwgMCwgfjAsIDAsIENSVENfUFJPUF9ERVNUX1NDQUxFUik7Ci0JCQltc21fcHJvcGVy dHlfaW5zdGFsbF9ibG9iKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKLQkJCQkJImRzX2x1dF9l ZCIsIDAsCi0JCQkJCUNSVENfUFJPUF9ERVNUX1NDQUxFUl9MVVRfRUQpOwotCQkJbXNtX3Byb3Bl cnR5X2luc3RhbGxfYmxvYigmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCi0JCQkJCSJkc19sdXRf Y2lyIiwgMCwKLQkJCQkJQ1JUQ19QUk9QX0RFU1RfU0NBTEVSX0xVVF9DSVIpOwotCQkJbXNtX3By b3BlcnR5X2luc3RhbGxfYmxvYigmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCi0JCQkJCSJkc19s dXRfc2VwIiwgMCwKLQkJCQkJQ1JUQ19QUk9QX0RFU1RfU0NBTEVSX0xVVF9TRVApOwotCQl9Ci0J fQotCiAJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgImhhc19zcmNfc3BsaXQiLAogCQkJ CWNhdGFsb2ctPmNhcHMtPmhhc19zcmNfc3BsaXQpOwogCWlmIChjYXRhbG9nLT5wZXJmLm1heF9i d19sb3cpCkBAIC0zMDY0LDcgKzIyNzEsNyBAQCBzdGF0aWMgaW50IGRwdV9jcnRjX2F0b21pY19z ZXRfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjLAogewogCXN0cnVjdCBkcHVfY3J0YyAq ZHB1X2NydGM7CiAJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGU7Ci0JaW50IGlkeCwgcmV0 ID0gLUVJTlZBTDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCWlmICghY3J0YyB8fCAhc3RhdGUg fHwgIXByb3BlcnR5KSB7CiAJCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChzKVxuIik7CkBA IC0zMDczLDQ1ICsyMjgwLDggQEAgc3RhdGljIGludCBkcHVfY3J0Y19hdG9taWNfc2V0X3Byb3Bl cnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUo c3RhdGUpOwogCQlyZXQgPSBtc21fcHJvcGVydHlfYXRvbWljX3NldCgmZHB1X2NydGMtPnByb3Bl cnR5X2luZm8sCiAJCQkJJmNzdGF0ZS0+cHJvcGVydHlfc3RhdGUsIHByb3BlcnR5LCB2YWwpOwot CQlpZiAoIXJldCkgewotCQkJaWR4ID0gbXNtX3Byb3BlcnR5X2luZGV4KCZkcHVfY3J0Yy0+cHJv cGVydHlfaW5mbywKLQkJCQkJcHJvcGVydHkpOwotCQkJc3dpdGNoIChpZHgpIHsKLQkJCWNhc2Ug Q1JUQ19QUk9QX0RJTV9MQVlFUl9WMToKLQkJCQlfZHB1X2NydGNfc2V0X2RpbV9sYXllcl92MShj c3RhdGUsCi0JCQkJCQkJdTY0X3RvX3VzZXJfcHRyKHZhbCkpOwotCQkJCWJyZWFrOwotCQkJY2Fz ZSBDUlRDX1BST1BfREVTVF9TQ0FMRVI6Ci0JCQkJcmV0ID0gX2RwdV9jcnRjX3NldF9kZXN0X3Nj YWxlcihkcHVfY3J0YywKLQkJCQkJCWNzdGF0ZSwgdTY0X3RvX3VzZXJfcHRyKHZhbCkpOwotCQkJ CWJyZWFrOwotCQkJY2FzZSBDUlRDX1BST1BfREVTVF9TQ0FMRVJfTFVUX0VEOgotCQkJY2FzZSBD UlRDX1BST1BfREVTVF9TQ0FMRVJfTFVUX0NJUjoKLQkJCWNhc2UgQ1JUQ19QUk9QX0RFU1RfU0NB TEVSX0xVVF9TRVA6Ci0JCQkJcmV0ID0gX2RwdV9jcnRjX3NldF9kZXN0X3NjYWxlcl9sdXQoZHB1 X2NydGMsCi0JCQkJCQkJCWNzdGF0ZSwgaWR4KTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQ1JUQ19Q Uk9QX0NPUkVfQ0xLOgotCQkJY2FzZSBDUlRDX1BST1BfQ09SRV9BQjoKLQkJCWNhc2UgQ1JUQ19Q Uk9QX0NPUkVfSUI6Ci0JCQkJY3N0YXRlLT5id19jb250cm9sID0gdHJ1ZTsKLQkJCQlicmVhazsK LQkJCWNhc2UgQ1JUQ19QUk9QX0xMQ0NfQUI6Ci0JCQljYXNlIENSVENfUFJPUF9MTENDX0lCOgot CQkJY2FzZSBDUlRDX1BST1BfRFJBTV9BQjoKLQkJCWNhc2UgQ1JUQ19QUk9QX0RSQU1fSUI6Ci0J CQkJY3N0YXRlLT5id19jb250cm9sID0gdHJ1ZTsKLQkJCQljc3RhdGUtPmJ3X3NwbGl0X3ZvdGUg PSB0cnVlOwotCQkJCWJyZWFrOwotCQkJY2FzZSBDUlRDX1BST1BfSURMRV9USU1FT1VUOgotCQkJ CV9kcHVfY3J0Y19zZXRfaWRsZV90aW1lb3V0KGNydGMsIHZhbCk7Ci0JCQlkZWZhdWx0OgotCQkJ CS8qIG5vdGhpbmcgdG8gZG8gKi8KLQkJCQlicmVhazsKLQkJCX0KLQkJfSBlbHNlIHsKKwkJaWYg KHJldCkKIAkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldCB0aGUgcHJvcGVydHlcbiIpOwotCQl9 CiAKIAkJRFBVX0RFQlVHKCJjcnRjJWQgJXNbJWRdIDw9IDB4JWxseCByZXQ9JWRcbiIsIGNydGMt PmJhc2UuaWQsCiAJCQkJcHJvcGVydHktPm5hbWUsIHByb3BlcnR5LT5iYXNlLmlkLCB2YWwsIHJl dCk7CkBAIC0zMjI3LDIzICsyMzk3LDYgQEAgc3RhdGljIGludCBfZHB1X2RlYnVnZnNfc3RhdHVz X3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQogCiAJc2VxX3B1dHMocywgIlxu Iik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY3N0YXRlLT5udW1fZGltX2xheWVyczsgaSsrKSB7Ci0J CXN0cnVjdCBkcHVfaHdfZGltX2xheWVyICpkaW1fbGF5ZXIgPSAmY3N0YXRlLT5kaW1fbGF5ZXJb aV07Ci0KLQkJc2VxX3ByaW50ZihzLCAiXHRkaW1fbGF5ZXI6JWRdIHN0YWdlOiVkIGZsYWdzOiVk XG4iLAotCQkJCWksIGRpbV9sYXllci0+c3RhZ2UsIGRpbV9sYXllci0+ZmxhZ3MpOwotCQlzZXFf cHJpbnRmKHMsICJcdGRzdF94OiVkIGRzdF95OiVkIGRzdF93OiVkIGRzdF9oOiVkXG4iLAotCQkJ CWRpbV9sYXllci0+cmVjdC54LCBkaW1fbGF5ZXItPnJlY3QueSwKLQkJCQlkaW1fbGF5ZXItPnJl Y3QudywgZGltX2xheWVyLT5yZWN0LmgpOwotCQlzZXFfcHJpbnRmKHMsCi0JCQkiXHRjb2xvcl8w OiVkIGNvbG9yXzE6JWQgY29sb3JfMjolZCBjb2xvcl8zOiVkXG4iLAotCQkJCWRpbV9sYXllci0+ Y29sb3JfZmlsbC5jb2xvcl8wLAotCQkJCWRpbV9sYXllci0+Y29sb3JfZmlsbC5jb2xvcl8xLAot CQkJCWRpbV9sYXllci0+Y29sb3JfZmlsbC5jb2xvcl8yLAotCQkJCWRpbV9sYXllci0+Y29sb3Jf ZmlsbC5jb2xvcl8zKTsKLQkJc2VxX3B1dHMocywgIlxuIik7Ci0JfQotCiAJZHJtX2F0b21pY19j cnRjX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBjcnRjKSB7CiAJCXBzdGF0ZSA9IHRvX2RwdV9wbGFu ZV9zdGF0ZShwbGFuZS0+c3RhdGUpOwogCQlzdGF0ZSA9IHBsYW5lLT5zdGF0ZTsKQEAgLTM3MzAs OSArMjg4Myw2IEBAIHN0cnVjdCBkcm1fY3J0YyAqZHB1X2NydGNfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKIAogCWRwdV9jcnRjX2luc3RhbGxf cHJvcGVydGllcyhjcnRjLCBrbXMtPmNhdGFsb2cpOwogCi0JLyogSW5pdCBkZXN0IHNjYWxlciAq LwotCV9kcHVfY3J0Y19kZXN0X3NjYWxlcl9pbml0KGRwdV9jcnRjLCBrbXMtPmNhdGFsb2cpOwot CiAJRFBVX0RFQlVHKCIlczogc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIGNydGNcbiIsIGRwdV9j cnRjLT5uYW1lKTsKIAlyZXR1cm4gY3J0YzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfY3J0Yy5oCmluZGV4IDVmMzgwYjguLjY2MjhlYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2NydGMuaApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImRwdV9r bXMuaCIKICNpbmNsdWRlICJkcHVfY29yZV9wZXJmLmgiCiAjaW5jbHVkZSAiZHB1X2h3X2Jsay5o IgotI2luY2x1ZGUgImRwdV9od19kcy5oIgogCiAjZGVmaW5lIERQVV9DUlRDX05BTUVfU0laRQkx MgogCkBAIC04Nyw3ICs4Niw2IEBAIHN0cnVjdCBkcHVfY3J0Y19zbW11X3N0YXRlX2RhdGEgewog ICogc3RydWN0IGRwdV9jcnRjX21peGVyOiBzdG9yZXMgdGhlIG1hcCBmb3IgZWFjaCB2aXJ0dWFs IHBpcGVsaW5lIGluIHRoZSBDUlRDCiAgKiBAaHdfbG06CUxNIEhXIERyaXZlciBjb250ZXh0CiAg KiBAaHdfY3RsOglDVEwgUGF0aCBIVyBkcml2ZXIgY29udGV4dAotICogQGh3X2RzOglEUyBIVyBk cml2ZXIgY29udGV4dAogICogQGVuY29kZXI6CUVuY29kZXIgYXR0YWNoZWQgdG8gdGhpcyBsbSAm IGN0bAogICogQG1peGVyX29wX21vZGU6CW1peGVyIGJsZW5kaW5nIG9wZXJhdGlvbiBtb2RlCiAg KiBAZmx1c2hfbWFzazoJbWl4ZXIgZmx1c2ggbWFzayBmb3IgY3RsLCBtaXhlciBhbmQgcGlwZQpA QCAtOTUsNyArOTMsNiBAQCBzdHJ1Y3QgZHB1X2NydGNfc21tdV9zdGF0ZV9kYXRhIHsKIHN0cnVj dCBkcHVfY3J0Y19taXhlciB7CiAJc3RydWN0IGRwdV9od19taXhlciAqaHdfbG07CiAJc3RydWN0 IGRwdV9od19jdGwgKmh3X2N0bDsKLQlzdHJ1Y3QgZHB1X2h3X2RzICpod19kczsKIAlzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJdTMyIG1peGVyX29wX21vZGU7CiAJdTMyIGZsdXNoX21h c2s7CkBAIC0zMTQsMTIgKzMxMSw2IEBAIHN0cnVjdCBkcHVfY3J0Y19yZXNwb29sIHsKICAqIEBw cm9wZXJ0eV9zdGF0ZTogTG9jYWwgc3RvcmFnZSBmb3IgbXNtX3Byb3AgcHJvcGVydGllcwogICog QHByb3BlcnR5X3ZhbHVlczogQ3VycmVudCBjcnRjIHByb3BlcnR5IHZhbHVlcwogICogQGlucHV0 X2ZlbmNlX3RpbWVvdXRfbnMgOiBDYWNoZWQgaW5wdXQgZmVuY2UgdGltZW91dCwgaW4gbnMKLSAq IEBudW1fZGltX2xheWVyczogTnVtYmVyIG9mIGRpbSBsYXllcnMKLSAqIEBkaW1fbGF5ZXI6IERp bSBsYXllciBjb25maWdzCi0gKiBAbnVtX2RzOiBOdW1iZXIgb2YgZGVzdGluYXRpb24gc2NhbGVy cyB0byBiZSBjb25maWd1cmVkCi0gKiBAbnVtX2RzX2VuYWJsZWQ6IE51bWJlciBvZiBkZXN0aW5h dGlvbiBzY2FsZXJzIGVuYWJsZWQKLSAqIEBkc19kaXJ0eTogQm9vbGVhbiB0byBpbmRpY2F0ZSBp ZiBkaXJ0eSBvciBub3QKLSAqIEBkc19jZmc6IERlc3RpbmF0aW9uIHNjYWxlciBjb25maWcKICAq IEBuZXdfcGVyZjogbmV3IHBlcmZvcm1hbmNlIHN0YXRlIGJlaW5nIHJlcXVlc3RlZAogICovCiBz dHJ1Y3QgZHB1X2NydGNfc3RhdGUgewpAQCAtMzM2LDEyICszMjcsNiBAQCBzdHJ1Y3QgZHB1X2Ny dGNfc3RhdGUgewogCXN0cnVjdCBtc21fcHJvcGVydHlfc3RhdGUgcHJvcGVydHlfc3RhdGU7CiAJ c3RydWN0IG1zbV9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eV92YWx1ZXNbQ1JUQ19QUk9QX0NPVU5U XTsKIAl1aW50NjRfdCBpbnB1dF9mZW5jZV90aW1lb3V0X25zOwotCXVpbnQzMl90IG51bV9kaW1f bGF5ZXJzOwotCXN0cnVjdCBkcHVfaHdfZGltX2xheWVyIGRpbV9sYXllcltEUFVfTUFYX0RJTV9M QVlFUlNdOwotCXVpbnQzMl90IG51bV9kczsKLQl1aW50MzJfdCBudW1fZHNfZW5hYmxlZDsKLQli b29sIGRzX2RpcnR5OwotCXN0cnVjdCBkcHVfaHdfZHNfY2ZnIGRzX2NmZ1tEUFVfTUFYX0RTX0NP VU5UXTsKIAogCXN0cnVjdCBkcHVfY29yZV9wZXJmX3BhcmFtcyBuZXdfcGVyZjsKIAlzdHJ1Y3Qg ZHB1X2NydGNfcmVzcG9vbCBycDsKQEAgLTM2Miw3ICszNDcsNiBAQCBzdHJ1Y3QgZHB1X2NydGNf c3RhdGUgewogLyoqCiAgKiBkcHVfY3J0Y19nZXRfbWl4ZXJfd2lkdGggLSBnZXQgdGhlIG1peGVy IHdpZHRoCiAgKiBNaXhlciB3aWR0aCB3aWxsIGJlIHNhbWUgYXMgcGFuZWwgd2lkdGgoLzIgZm9y IHNwbGl0KQotICogdW5sZXNzIGRlc3RpbmF0aW9uIHNjYWxlciBmZWF0dXJlIGlzIGVuYWJsZWQK ICAqLwogc3RhdGljIGlubGluZSBpbnQgZHB1X2NydGNfZ2V0X21peGVyX3dpZHRoKHN0cnVjdCBk cHVfY3J0YyAqZHB1X2NydGMsCiAJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGUsIHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQpAQCAtMzcyLDEwICszNTYsNyBAQCBzdGF0aWMgaW5s aW5lIGludCBkcHVfY3J0Y19nZXRfbWl4ZXJfd2lkdGgoc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0 YywKIAlpZiAoIWRwdV9jcnRjIHx8ICFjc3RhdGUgfHwgIW1vZGUpCiAJCXJldHVybiAwOwogCi0J aWYgKGNzdGF0ZS0+bnVtX2RzX2VuYWJsZWQpCi0JCW1peGVyX3dpZHRoID0gY3N0YXRlLT5kc19j ZmdbMF0ubG1fd2lkdGg7Ci0JZWxzZQotCQltaXhlcl93aWR0aCA9IChkcHVfY3J0Yy0+bnVtX21p eGVycyA9PSBDUlRDX0RVQUxfTUlYRVJTID8KKwltaXhlcl93aWR0aCA9IChkcHVfY3J0Yy0+bnVt X21peGVycyA9PSBDUlRDX0RVQUxfTUlYRVJTID8KIAkJCW1vZGUtPmhkaXNwbGF5IC8gQ1JUQ19E VUFMX01JWEVSUyA6IG1vZGUtPmhkaXNwbGF5KTsKIAogCXJldHVybiBtaXhlcl93aWR0aDsKQEAg LTM4Myw4ICszNjQsNyBAQCBzdGF0aWMgaW5saW5lIGludCBkcHVfY3J0Y19nZXRfbWl4ZXJfd2lk dGgoc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YywKIAogLyoqCiAgKiBkcHVfY3J0Y19nZXRfbWl4 ZXJfaGVpZ2h0IC0gZ2V0IHRoZSBtaXhlciBoZWlnaHQKLSAqIE1peGVyIGhlaWdodCB3aWxsIGJl IHNhbWUgYXMgcGFuZWwgaGVpZ2h0IHVubGVzcwotICogZGVzdGluYXRpb24gc2NhbGVyIGZlYXR1 cmUgaXMgZW5hYmxlZAorICogTWl4ZXIgaGVpZ2h0IHdpbGwgYmUgc2FtZSBhcyBwYW5lbCBoZWln aHQKICAqLwogc3RhdGljIGlubGluZSBpbnQgZHB1X2NydGNfZ2V0X21peGVyX2hlaWdodChzdHJ1 Y3QgZHB1X2NydGMgKmRwdV9jcnRjLAogCQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZSwg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCkBAIC0zOTIsOCArMzcyLDcgQEAgc3RhdGlj IGlubGluZSBpbnQgZHB1X2NydGNfZ2V0X21peGVyX2hlaWdodChzdHJ1Y3QgZHB1X2NydGMgKmRw dV9jcnRjLAogCWlmICghZHB1X2NydGMgfHwgIWNzdGF0ZSB8fCAhbW9kZSkKIAkJcmV0dXJuIDA7 CiAKLQlyZXR1cm4gKGNzdGF0ZS0+bnVtX2RzX2VuYWJsZWQgPwotCQkJY3N0YXRlLT5kc19jZmdb MF0ubG1faGVpZ2h0IDogbW9kZS0+dmRpc3BsYXkpOworCXJldHVybiBtb2RlLT52ZGlzcGxheTsK IH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf ZW5jb2Rlci5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwpp bmRleCA3N2QzNTcxLi42MjY2MGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfZW5jb2Rlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9lbmNvZGVyLmMKQEAgLTIzMCwxOCArMjMwLDYgQEAgc3RydWN0IGRwdV9lbmNvZGVyX3Zp cnQgewogfTsKIAogI2RlZmluZSB0b19kcHVfZW5jb2Rlcl92aXJ0KHgpIGNvbnRhaW5lcl9vZih4 LCBzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCwgYmFzZSkKLQotdm9pZCBkcHVfZW5jb2Rlcl9zZXRf aWRsZV90aW1lb3V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywgdTMyIGlkbGVfdGltZW91 dCkKLXsKLQlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYzsKLQotCWlmICghZHJtX2Vu YykKLQkJcmV0dXJuOwotCi0JZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVyX3ZpcnQoZHJtX2VuYyk7 Ci0JZHB1X2VuYy0+aWRsZV90aW1lb3V0ID0gaWRsZV90aW1lb3V0OwotfQotCiBzdGF0aWMgaW5s aW5lIGludCBfZHB1X2VuY29kZXJfcG93ZXJfZW5hYmxlKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0 ICpkcHVfZW5jLAogCQkJCQkJCQlib29sIGVuYWJsZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19kcy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X2RzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhZDE5 ZmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2Rz LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDE3 LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCi0gKi8KLQotI2luY2x1ZGUgImRwdV9od19kcy5oIgotI2luY2x1ZGUgImRwdV9mb3JtYXRz LmgiCi0jaW5jbHVkZSAiZHB1X2RiZy5oIgotI2luY2x1ZGUgImRwdV9rbXMuaCIKLQotLyogRGVz dGluYXRpb24gc2NhbGVyIFRPUCByZWdpc3RlcnMgKi8KLSNkZWZpbmUgREVTVF9TQ0FMRVJfT1Bf TU9ERSAgICAgMHgwMAotI2RlZmluZSBERVNUX1NDQUxFUl9IV19WRVJTSU9OICAweDEwCi0KLXN0 YXRpYyB2b2lkIGRwdV9od19kc19zZXR1cF9vcG1vZGUoc3RydWN0IGRwdV9od19kcyAqaHdfZHMs Ci0JCQkJdTMyIG9wX21vZGUpCi17Ci0Jc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqaHcgPSAm aHdfZHMtPmh3OwotCi0JRFBVX1JFR19XUklURShodywgREVTVF9TQ0FMRVJfT1BfTU9ERSwgb3Bf bW9kZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9od19kc19zZXR1cF9zY2FsZXIzKHN0cnVjdCBk cHVfaHdfZHMgKmh3X2RzLAotCQkJdm9pZCAqc2NhbGVyX2NmZywgdm9pZCAqc2NhbGVyX2x1dF9j ZmcpCi17Ci0Jc3RydWN0IGRwdV9od19zY2FsZXIzX2NmZyAqc2NsM19jZmcgPSBzY2FsZXJfY2Zn OwotCXN0cnVjdCBkcHVfaHdfc2NhbGVyM19sdXRfY2ZnICpzY2wzX2x1dF9jZmcgPSBzY2FsZXJf bHV0X2NmZzsKLQotCWlmICghaHdfZHMgfHwgIWh3X2RzLT5zY2wgfHwgIXNjbDNfY2ZnIHx8ICFz Y2wzX2x1dF9jZmcpCi0JCXJldHVybjsKLQotCS8qCi0JICogY29weSBMVVQgdmFsdWVzIHRvIHNj YWxlciBzdHJ1Y3R1cmUKLQkgKi8KLQlpZiAoc2NsM19sdXRfY2ZnLT5pc19jb25maWd1cmVkKSB7 Ci0JCXNjbDNfY2ZnLT5kaXJfbHV0ID0gc2NsM19sdXRfY2ZnLT5kaXJfbHV0OwotCQlzY2wzX2Nm Zy0+ZGlyX2xlbiA9IHNjbDNfbHV0X2NmZy0+ZGlyX2xlbjsKLQkJc2NsM19jZmctPmNpcl9sdXQg PSBzY2wzX2x1dF9jZmctPmNpcl9sdXQ7Ci0JCXNjbDNfY2ZnLT5jaXJfbGVuID0gc2NsM19sdXRf Y2ZnLT5jaXJfbGVuOwotCQlzY2wzX2NmZy0+c2VwX2x1dCA9IHNjbDNfbHV0X2NmZy0+c2VwX2x1 dDsKLQkJc2NsM19jZmctPnNlcF9sZW4gPSBzY2wzX2x1dF9jZmctPnNlcF9sZW47Ci0JfQotCi0J ZHB1X2h3X3NldHVwX3NjYWxlcjMoJmh3X2RzLT5odywgc2NsM19jZmcsCi0JCQkgaHdfZHMtPnNj bC0+YmFzZSwKLQkJCSBod19kcy0+c2NsLT52ZXJzaW9uLAotCQkJIGRwdV9nZXRfZHB1X2Zvcm1h dChEUk1fRk9STUFUX1hCR1IyMTAxMDEwKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9zZXR1cF9kc19v cHMoc3RydWN0IGRwdV9od19kc19vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBmZWF0dXJlcykKLXsK LQlvcHMtPnNldHVwX29wbW9kZSA9IGRwdV9od19kc19zZXR1cF9vcG1vZGU7Ci0KLQlpZiAodGVz dF9iaXQoRFBVX1NTUFBfU0NBTEVSX1FTRUVEMywgJmZlYXR1cmVzKSkKLQkJb3BzLT5zZXR1cF9z Y2FsZXIgPSBkcHVfaHdfZHNfc2V0dXBfc2NhbGVyMzsKLX0KLQotc3RhdGljIHN0cnVjdCBkcHVf ZHNfY2ZnICpfZHNfb2Zmc2V0KGVudW0gZHB1X2RzIGRzLAotCQlzdHJ1Y3QgZHB1X21kc3NfY2Zn ICptLAotCQl2b2lkIF9faW9tZW0gKmFkZHIsCi0JCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAg KmIpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIW0gfHwgIWFkZHIgfHwgIWIpCi0JCXJldHVybiBFUlJf UFRSKC1FSU5WQUwpOwotCi0JZm9yIChpID0gMDsgaSA8IG0tPmRzX2NvdW50OyBpKyspIHsKLQkJ aWYgKChkcyA9PSBtLT5kc1tpXS5pZCkgJiYKLQkJCSAobS0+ZHNbaV0udG9wKSkgewotCQkJYi0+ YmFzZV9vZmYgPSBhZGRyOwotCQkJYi0+YmxrX29mZiA9IG0tPmRzW2ldLnRvcC0+YmFzZTsKLQkJ CWItPmxlbmd0aCA9IG0tPmRzW2ldLnRvcC0+bGVuOwotCQkJYi0+aHd2ZXJzaW9uID0gbS0+aHd2 ZXJzaW9uOwotCQkJYi0+bG9nX21hc2sgPSBEUFVfREJHX01BU0tfRFM7Ci0JCQlyZXR1cm4gJm0t PmRzW2ldOwotCQl9Ci0JfQotCi0JcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci19Ci0KLXN0YXRp YyBzdHJ1Y3QgZHB1X2h3X2Jsa19vcHMgZHB1X2h3X29wcyA9IHsKLQkuc3RhcnQgPSBOVUxMLAot CS5zdG9wID0gTlVMTCwKLX07Ci0KLXN0cnVjdCBkcHVfaHdfZHMgKmRwdV9od19kc19pbml0KGVu dW0gZHB1X2RzIGlkeCwKLQkJCXZvaWQgX19pb21lbSAqYWRkciwKLQkJCXN0cnVjdCBkcHVfbWRz c19jZmcgKm0pCi17Ci0Jc3RydWN0IGRwdV9od19kcyAqaHdfZHM7Ci0Jc3RydWN0IGRwdV9kc19j ZmcgKmNmZzsKLQlpbnQgcmM7Ci0KLQlpZiAoIWFkZHIgfHwgIW0pCi0JCXJldHVybiBFUlJfUFRS KC1FSU5WQUwpOwotCi0JaHdfZHMgPSBremFsbG9jKHNpemVvZigqaHdfZHMpLCBHRlBfS0VSTkVM KTsKLQlpZiAoIWh3X2RzKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWNmZyA9IF9k c19vZmZzZXQoaWR4LCBtLCBhZGRyLCAmaHdfZHMtPmh3KTsKLQlpZiAoSVNfRVJSX09SX05VTEwo Y2ZnKSkgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBnZXQgZHMgY2ZnXG4iKTsKLQkJa2ZyZWUo aHdfZHMpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQkvKiBBc3NpZ24gb3Bz ICovCi0JaHdfZHMtPmlkeCA9IGlkeDsKLQlod19kcy0+c2NsID0gY2ZnOwotCV9zZXR1cF9kc19v cHMoJmh3X2RzLT5vcHMsIGh3X2RzLT5zY2wtPmZlYXR1cmVzKTsKLQotCXJjID0gZHB1X2h3X2Js a19pbml0KCZod19kcy0+YmFzZSwgRFBVX0hXX0JMS19EUywgaWR4LCAmZHB1X2h3X29wcyk7Ci0J aWYgKHJjKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGluaXQgaHcgYmxrICVkXG4iLCByYyk7 Ci0JCWdvdG8gYmxrX2luaXRfZXJyb3I7Ci0JfQotCi0JaWYgKGNmZy0+bGVuKSB7Ci0JCWRwdV9k YmdfcmVnX3JlZ2lzdGVyX2R1bXBfcmFuZ2UoRFBVX0RCR19OQU1FLCBjZmctPm5hbWUsCi0JCQkJ aHdfZHMtPmh3LmJsa19vZmYgKyBjZmctPmJhc2UsCi0JCQkJaHdfZHMtPmh3LmJsa19vZmYgKyBj ZmctPmJhc2UgKyBjZmctPmxlbiwKLQkJCQlod19kcy0+aHcueGluX2lkKTsKLQl9Ci0KLQlyZXR1 cm4gaHdfZHM7Ci0KLWJsa19pbml0X2Vycm9yOgotCWt6ZnJlZShod19kcyk7Ci0KLQlyZXR1cm4g RVJSX1BUUihyYyk7Ci0KLX0KLQotdm9pZCBkcHVfaHdfZHNfZGVzdHJveShzdHJ1Y3QgZHB1X2h3 X2RzICpod19kcykKLXsKLQlpZiAoaHdfZHMpCi0JCWRwdV9od19ibGtfZGVzdHJveSgmaHdfZHMt PmJhc2UpOwotCWtmcmVlKGh3X2RzKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19kcy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2h3X2RzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NTU5MjAuLjAwMDAw MDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2RzLmgKKysrIC9k ZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRo ZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8K LQotI2lmbmRlZiBfRFBVX0hXX0RTX0gKLSNkZWZpbmUgX0RQVV9IV19EU19ICi0KLSNpbmNsdWRl ICJkcHVfaHdfbWRzcy5oIgotI2luY2x1ZGUgImRwdV9od191dGlsLmgiCi0jaW5jbHVkZSAiZHB1 X2h3X2NhdGFsb2cuaCIKLSNpbmNsdWRlICJkcHVfaHdfYmxrLmgiCi0KLXN0cnVjdCBkcHVfaHdf ZHM7Ci0KLS8qIERlc3RpbmF0aW9uIFNjYWxlciBEVUFMIG1vZGUgb3ZlcmZldGNoIHBpeGVsIGNv dW50ICovCi0jZGVmaW5lIERQVV9EU19PVkVSRkVUQ0hfU0laRSA1Ci0KLS8qIERlc3RpbmF0aW9u IHNjYWxlciBEVUFMIG1vZGUgb3BlcmF0aW9uIGJpdCAqLwotI2RlZmluZSBEUFVfRFNfT1BfTU9E RV9EVUFMIEJJVCgxNikKLQotLyogc3RydWN0IGRwdV9od19kc19jZmcgLSBkZXN0aW5hdGlvbiBz Y2FsZXIgY29uZmlnCi0gKiBAbmR4ICAgICAgICAgIDogRFMgc2VsZWN0aW9uIGluZGV4Ci0gKiBA ZmxhZ3MgICAgICAgIDogRmxhZyB0byBzd2l0Y2ggYmV0d2VlbiBtb2RlIGZvciBEUwotICogQGxt X3dpZHRoICAgICA6IExheWVyIG1peGVyIHdpZHRoIGNvbmZpZ3VyYXRpb24KLSAqIEBsbV9oZWln aCAgICAgOiBMYXllciBtaXhlciBoZWlnaHQgY29uZmlndXJhdGlvbgotICogQHNldF9sbV9mbHVz aCA6IExNIGZsdXNoIGJpdAotICogQHNjbDNfY2ZnICAgICA6IFBvaW50ZXIgdG8gZHB1X2h3X3Nj YWxlcjNfY2ZnLgotICovCi1zdHJ1Y3QgZHB1X2h3X2RzX2NmZyB7Ci0JdTMyIG5keDsKLQlpbnQg ZmxhZ3M7Ci0JdTMyIGxtX3dpZHRoOwotCXUzMiBsbV9oZWlnaHQ7Ci0JYm9vbCBzZXRfbG1fZmx1 c2g7Ci0Jc3RydWN0IGRwdV9od19zY2FsZXIzX2NmZyAqc2NsM19jZmc7Ci19OwotCi0vKioKLSAq IHN0cnVjdCBkcHVfaHdfZHNfb3BzIC0gaW50ZXJmYWNlIHRvIHRoZSBkZXN0aW5hdGlvbiBzY2Fs ZXIKLSAqIGhhcmR3YXJlIGRyaXZlciBmdW5jdGlvbnMKLSAqIENhbGxlciBtdXN0IGNhbGwgdGhl IGluaXQgZnVuY3Rpb24gdG8gZ2V0IHRoZSBkcyBjb250ZXh0IGZvciBlYWNoIGRzCi0gKiBBc3N1 bXB0aW9uIGlzIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBhZnRlciBjbG9ja3MgYXJl IGVuYWJsZWQKLSAqLwotc3RydWN0IGRwdV9od19kc19vcHMgewotCS8qKgotCSAqIHNldHVwX29w bW9kZSAtIGRlc3RpbmF0aW9uIHNjYWxlciBvcCBtb2RlIHNldHVwCi0JICogQGh3X2RzICAgOiBQ b2ludGVyIHRvIGRzIGNvbnRleHQKLQkgKiBAb3BfbW9kZSA6IE9wIG1vZGUgY29uZmlndXJhdGlv bgotCSAqLwotCXZvaWQgKCpzZXR1cF9vcG1vZGUpKHN0cnVjdCBkcHVfaHdfZHMgKmh3X2RzLAot CQkJCXUzMiBvcF9tb2RlKTsKLQotCS8qKgotCSAqIHNldHVwX3NjYWxlciAtIGRlc3RpbmF0aW9u IHNjYWxlciBibG9jayBzZXR1cAotCSAqIEBod19kcyAgICAgICAgICA6IFBvaW50ZXIgdG8gZHMg Y29udGV4dAotCSAqIEBzY2FsZXJfY2ZnICAgICA6IFBvaW50ZXIgdG8gc2NhbGVyIGRhdGEKLQkg KiBAc2NhbGVyX2x1dF9jZmcgOiBQb2ludGVyIHRvIHNjYWxlciBsdXQKLQkgKi8KLQl2b2lkICgq c2V0dXBfc2NhbGVyKShzdHJ1Y3QgZHB1X2h3X2RzICpod19kcywKLQkJCQl2b2lkICpzY2FsZXJf Y2ZnLAotCQkJCXZvaWQgKnNjYWxlcl9sdXRfY2ZnKTsKLQotfTsKLQotLyoqCi0gKiBzdHJ1Y3Qg ZHB1X2h3X2RzIC0gZGVzdGluYXRpb24gc2NhbGVyIGRlc2NyaXB0aW9uCi0gKiBAYmFzZSA6IEhh cmR3YXJlIGJsb2NrIGJhc2Ugc3RydWN0dXJlCi0gKiBAaHcgICA6IEJsb2NrIGhhcmR3YXJlIGRl dGFpbHMKLSAqIEBpZHggIDogRGVzdGluYXRpb24gc2NhbGVyIGluZGV4Ci0gKiBAc2NsICA6IFBv aW50ZXIgdG8KLSAqICAgICAgICAgIC0gc2NhbGVyIG9mZnNldCByZWxhdGl2ZSB0byB0b3Agb2Zm c2V0Ci0gKiAgICAgICAgICAtIGNhcGFiaWxpdGllcwotICogQG9wcyAgOiBQb2ludGVyIHRvIG9w ZXJhdGlvbnMgZm9yIHRoaXMgRFMKLSAqLwotc3RydWN0IGRwdV9od19kcyB7Ci0Jc3RydWN0IGRw dV9od19ibGsgYmFzZTsKLQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwIGh3OwotCWVudW0gZHB1 X2RzIGlkeDsKLQljb25zdCBzdHJ1Y3QgZHB1X2RzX2NmZyAqc2NsOwotCXN0cnVjdCBkcHVfaHdf ZHNfb3BzIG9wczsKLX07Ci0KLS8qKgotICogZHB1X2h3X2RzX2luaXQgLSBpbml0aWFsaXplcyB0 aGUgZGVzdGluYXRpb24gc2NhbGVyCi0gKiBodyBkcml2ZXIgb2JqZWN0IGFuZCBzaG91bGQgYmUg Y2FsbGVkIG9uY2UgYmVmb3JlCi0gKiBhY2Nlc3NpbmcgZXZlcnkgZGVzdGluYXRpb24gc2NhbGVy Ci0gKiBAaWR4IDogRFMgaW5kZXggZm9yIHdoaWNoIGRyaXZlciBvYmplY3QgaXMgcmVxdWlyZWQK LSAqIEBhZGRyOiBNYXBwZWQgcmVnaXN0ZXIgaW8gYWRkcmVzcyBvZiBNRFAKLSAqIEBtICAgOiBN RFNTIGNhdGFsb2cgaW5mb3JtYXRpb24KLSAqIEBSZXR1cm46IHBvaW50ZXIgdG8gc3RydWN0dXJl IG9yIEVSUl9QVFIKLSAqLwotc3RydWN0IGRwdV9od19kcyAqZHB1X2h3X2RzX2luaXQoZW51bSBk cHVfZHMgaWR4LAotCQkJdm9pZCBfX2lvbWVtICphZGRyLAotCQkJc3RydWN0IGRwdV9tZHNzX2Nm ZyAqbSk7Ci0KLS8qKgotICogZHB1X2h3X2RzX2Rlc3Ryb3kgLSBkZXN0cm95cyBkZXN0aW5hdGlv biBzY2FsZXIKLSAqIGRyaXZlciBjb250ZXh0Ci0gKiBAaHdfZHM6ICAgUG9pbnRlciB0byBEUyBj b250ZXh0Ci0gKi8KLXZvaWQgZHB1X2h3X2RzX2Rlc3Ryb3koc3RydWN0IGRwdV9od19kcyAqaHdf ZHMpOwotCi0jZW5kaWYgLypfRFBVX0hXX0RTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19sbS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2xtLmMKaW5kZXggNzVhMzBkYi4uODMwYjY5ZSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2xtLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2xtLmMKQEAgLTE3Miw2OCArMTcyLDYgQEAgc3RhdGlj IHZvaWQgZHB1X2h3X2xtX2djKHN0cnVjdCBkcHVfaHdfbWl4ZXIgKm1peGVyLAogewogfQogCi1z dGF0aWMgdm9pZCBkcHVfaHdfbG1fY2xlYXJfZGltX2xheWVyKHN0cnVjdCBkcHVfaHdfbWl4ZXIg KmN0eCkKLXsKLQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjID0gJmN0eC0+aHc7Ci0JY29u c3Qgc3RydWN0IGRwdV9sbV9zdWJfYmxrcyAqc2JsayA9IGN0eC0+Y2FwLT5zYmxrOwotCWludCBz dGFnZV9vZmYsIGk7Ci0JdTMyIHJlc2V0ID0gQklUKDE2KSwgdmFsOwotCi0JcmVzZXQgPSB+cmVz ZXQ7Ci0JZm9yIChpID0gRFBVX1NUQUdFXzA7IGkgPCBzYmxrLT5tYXhibGVuZHN0YWdlczsgaSsr KSB7Ci0JCXN0YWdlX29mZiA9IF9zdGFnZV9vZmZzZXQoY3R4LCBpKTsKLQkJaWYgKFdBUk5fT04o c3RhZ2Vfb2ZmIDwgMCkpCi0JCQlyZXR1cm47Ci0KLQkJLyoKLQkJICogcmVhZCB0aGUgZXhpc3Rp bmcgYmxlbmRuX29wIHJlZ2lzdGVyIGFuZCBjbGVhciBvbmx5IERJTSBsYXllcgotCQkgKiBiaXQg KGNvbG9yX2ZpbGwgYml0KQotCQkgKi8KLQkJdmFsID0gRFBVX1JFR19SRUFEKGMsIExNX0JMRU5E MF9PUCArIHN0YWdlX29mZik7Ci0JCXZhbCAmPSByZXNldDsKLQkJRFBVX1JFR19XUklURShjLCBM TV9CTEVORDBfT1AgKyBzdGFnZV9vZmYsIHZhbCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkcHVf aHdfbG1fc2V0dXBfZGltX2xheWVyKHN0cnVjdCBkcHVfaHdfbWl4ZXIgKmN0eCwKLQkJc3RydWN0 IGRwdV9od19kaW1fbGF5ZXIgKmRpbV9sYXllcikKLXsKLQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdf bWFwICpjID0gJmN0eC0+aHc7Ci0JaW50IHN0YWdlX29mZjsKLQl1MzIgdmFsID0gMCwgYWxwaGEg PSAwOwotCi0Jc3RhZ2Vfb2ZmID0gX3N0YWdlX29mZnNldChjdHgsIGRpbV9sYXllci0+c3RhZ2Up OwotCWlmIChzdGFnZV9vZmYgPCAwKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBzdGFnZV9vZmY6 JWQgZm9yIGRpbSBsYXllclxuIiwgc3RhZ2Vfb2ZmKTsKLQkJcmV0dXJuOwotCX0KLQotCWFscGhh ID0gZGltX2xheWVyLT5jb2xvcl9maWxsLmNvbG9yXzMgJiAweEZGOwotCXZhbCA9ICgoZGltX2xh eWVyLT5jb2xvcl9maWxsLmNvbG9yXzEgPDwgMikgJiAweEZGRikgPDwgMTYgfAotCQkJKChkaW1f bGF5ZXItPmNvbG9yX2ZpbGwuY29sb3JfMCA8PCAyKSAmIDB4RkZGKTsKLQlEUFVfUkVHX1dSSVRF KGMsIExNX0ZHX0NPTE9SX0ZJTExfQ09MT1JfMCArIHN0YWdlX29mZiwgdmFsKTsKLQotCXZhbCA9 IChhbHBoYSA8PCA0KSA8PCAxNiB8Ci0JCQkoKGRpbV9sYXllci0+Y29sb3JfZmlsbC5jb2xvcl8y IDw8IDIpICYgMHhGRkYpOwotCURQVV9SRUdfV1JJVEUoYywgTE1fRkdfQ09MT1JfRklMTF9DT0xP Ul8xICsgc3RhZ2Vfb2ZmLCB2YWwpOwotCi0JdmFsID0gZGltX2xheWVyLT5yZWN0LmggPDwgMTYg fCBkaW1fbGF5ZXItPnJlY3QudzsKLQlEUFVfUkVHX1dSSVRFKGMsIExNX0ZHX0NPTE9SX0ZJTExf U0laRSArIHN0YWdlX29mZiwgdmFsKTsKLQotCXZhbCA9IGRpbV9sYXllci0+cmVjdC55IDw8IDE2 IHwgZGltX2xheWVyLT5yZWN0Lng7Ci0JRFBVX1JFR19XUklURShjLCBMTV9GR19DT0xPUl9GSUxM X1hZICsgc3RhZ2Vfb2ZmLCB2YWwpOwotCi0JdmFsID0gQklUKDE2KTsgLyogZW5hYmxlIGRpbSBs YXllciAqLwotCXZhbCB8PSBEUFVfQkxFTkRfRkdfQUxQSEFfRkdfQ09OU1QgfCBEUFVfQkxFTkRf QkdfQUxQSEFfQkdfQ09OU1Q7Ci0JaWYgKGRpbV9sYXllci0+ZmxhZ3MgJiBEUFVfRFJNX0RJTV9M QVlFUl9FWENMVVNJVkUpCi0JCXZhbCB8PSBCSVQoMTcpOwotCWVsc2UKLQkJdmFsICY9IH5CSVQo MTcpOwotCURQVV9SRUdfV1JJVEUoYywgTE1fQkxFTkQwX09QICsgc3RhZ2Vfb2ZmLCB2YWwpOwot CXZhbCA9IChhbHBoYSA8PCAxNikgfCAoMHhmZiAtIGFscGhhKTsKLQlEUFVfUkVHX1dSSVRFKGMs IExNX0JMRU5EMF9DT05TVF9BTFBIQSArIHN0YWdlX29mZiwgdmFsKTsKLX0KLQogc3RhdGljIHZv aWQgZHB1X2h3X2xtX3NldHVwX21pc3Ioc3RydWN0IGRwdV9od19taXhlciAqY3R4LAogCQkJCWJv b2wgZW5hYmxlLCB1MzIgZnJhbWVfY291bnQpCiB7CkBAIC0yNzIsMTEgKzIxMCw2IEBAIHN0YXRp YyB2b2lkIF9zZXR1cF9taXhlcl9vcHMoc3RydWN0IGRwdV9tZHNzX2NmZyAqbSwKIAlvcHMtPnNl dHVwX2djID0gZHB1X2h3X2xtX2djOwogCW9wcy0+c2V0dXBfbWlzciA9IGRwdV9od19sbV9zZXR1 cF9taXNyOwogCW9wcy0+Y29sbGVjdF9taXNyID0gZHB1X2h3X2xtX2NvbGxlY3RfbWlzcjsKLQot CWlmICh0ZXN0X2JpdChEUFVfRElNX0xBWUVSLCAmZmVhdHVyZXMpKSB7Ci0JCW9wcy0+c2V0dXBf ZGltX2xheWVyID0gZHB1X2h3X2xtX3NldHVwX2RpbV9sYXllcjsKLQkJb3BzLT5jbGVhcl9kaW1f bGF5ZXIgPSBkcHVfaHdfbG1fY2xlYXJfZGltX2xheWVyOwotCX0KIH07CiAKIHN0YXRpYyBzdHJ1 Y3QgZHB1X2h3X2Jsa19vcHMgZHB1X2h3X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19sbS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2xtLmgKaW5kZXggZWYyMmM4Ni4uZTI5ZTVkYSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2xtLmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2xtLmgKQEAgLTY3LDIwICs2Nyw2IEBAIHN0cnVjdCBk cHVfaHdfbG1fb3BzIHsKIAl2b2lkICgqc2V0dXBfZ2MpKHN0cnVjdCBkcHVfaHdfbWl4ZXIgKm1p eGVyLAogCQkJdm9pZCAqY2ZnKTsKIAotCS8qKgotCSAqIHNldHVwX2RpbV9sYXllcjogY29uZmln dXJlIGRpbSBsYXllciBzZXR0aW5ncwotCSAqIEBjdHg6IFBvaW50ZXIgdG8gbGF5ZXIgbWl4ZXIg Y29udGV4dAotCSAqIEBkaW1fbGF5ZXI6IGRpbSBsYXllciBjb25maWdzCi0JICovCi0Jdm9pZCAo KnNldHVwX2RpbV9sYXllcikoc3RydWN0IGRwdV9od19taXhlciAqY3R4LAotCQkJc3RydWN0IGRw dV9od19kaW1fbGF5ZXIgKmRpbV9sYXllcik7Ci0KLQkvKioKLQkgKiBjbGVhcl9kaW1fbGF5ZXI6 IGNsZWFyIGRpbSBsYXllciBzZXR0aW5ncwotCSAqIEBjdHg6IFBvaW50ZXIgdG8gbGF5ZXIgbWl4 ZXIgY29udGV4dAotCSAqLwotCXZvaWQgKCpjbGVhcl9kaW1fbGF5ZXIpKHN0cnVjdCBkcHVfaHdf bWl4ZXIgKmN0eCk7Ci0KIAkvKiBzZXR1cF9taXNyOiBlbmFibGVzL2Rpc2FibGVzIE1JU1IgaW4g SFcgcmVnaXN0ZXIgKi8KIAl2b2lkICgqc2V0dXBfbWlzcikoc3RydWN0IGRwdV9od19taXhlciAq Y3R4LAogCQkJYm9vbCBlbmFibGUsIHUzMiBmcmFtZV9jb3VudCk7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbWRzcy5oIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X21kc3MuaAppbmRleCBmY2QxNjRmLi44MzZmZjllIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbWRzcy5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19tZHNzLmgKQEAgLTk5LDcgKzk5 LDYgQEAgZW51bSBkcHVfaHdfYmxrX3R5cGUgewogCURQVV9IV19CTEtfVE9QID0gMCwKIAlEUFVf SFdfQkxLX1NTUFAsCiAJRFBVX0hXX0JMS19MTSwKLQlEUFVfSFdfQkxLX0RTLAogCURQVV9IV19C TEtfQ1RMLAogCURQVV9IV19CTEtfQ0RNLAogCURQVV9IV19CTEtfUElOR1BPTkcsCkBAIC00Njks MjAgKzQ2OCw1IEBAIHN0cnVjdCBkcHVfbWRzc19jb2xvciB7CiAjZGVmaW5lIERQVV9EQkdfTUFT S19UT1AgICAgICAoMSA8PCA4KQogI2RlZmluZSBEUFVfREJHX01BU0tfVkJJRiAgICAgKDEgPDwg OSkKICNkZWZpbmUgRFBVX0RCR19NQVNLX1JPVCAgICAgICgxIDw8IDEwKQotI2RlZmluZSBEUFVf REJHX01BU0tfRFMgICAgICAgKDEgPDwgMTEpCi0KLS8qKgotICogc3RydWN0IGRwdV9od19kaW1f bGF5ZXI6IGRpbSBsYXllciBjb25maWdzCi0gKiBAZmxhZ3M6IEZsYWcgdG8gcmVwcmVzZW50IElO Q0xVU0lWRS9FWENMVVNJVkUKLSAqIEBzdGFnZTogQmxlbmRpbmcgc3RhZ2Ugb2YgZGltIGxheWVy Ci0gKiBAY29sb3JfZmlsbDogQ29sb3IgZmlsbCB0byBiZSB1c2VkIGZvciB0aGUgbGF5ZXIKLSAq IEByZWN0OiBEaW0gbGF5ZXIgY29vcmRpbmF0ZXMKLSAqLwotc3RydWN0IGRwdV9od19kaW1fbGF5 ZXIgewotCXVpbnQzMl90IGZsYWdzOwotCXVpbnQzMl90IHN0YWdlOwotCXN0cnVjdCBkcHVfbWRz c19jb2xvciBjb2xvcl9maWxsOwotCXN0cnVjdCBkcHVfcmVjdCByZWN0OwotfTsKIAogI2VuZGlm ICAvKiBfRFBVX0hXX01EU1NfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X3JtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0u YwppbmRleCBmNDY3YmYxLi4wYWYyOTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfcm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfcm0uYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgImRwdV9od19sbS5oIgogI2luY2x1 ZGUgImRwdV9od19jdGwuaCIKICNpbmNsdWRlICJkcHVfaHdfY2RtLmgiCi0jaW5jbHVkZSAiZHB1 X2h3X2RzLmgiCiAjaW5jbHVkZSAiZHB1X2h3X3Bpbmdwb25nLmgiCiAjaW5jbHVkZSAiZHB1X2h3 X2ludGYuaCIKICNpbmNsdWRlICJkcHVfaHdfd2IuaCIKQEAgLTIzNSw5ICsyMzQsNiBAQCBzdGF0 aWMgdm9pZCBfZHB1X3JtX2h3X2Rlc3Ryb3koZW51bSBkcHVfaHdfYmxrX3R5cGUgdHlwZSwgdm9p ZCAqaHcpCiAJY2FzZSBEUFVfSFdfQkxLX0xNOgogCQlkcHVfaHdfbG1fZGVzdHJveShodyk7CiAJ CWJyZWFrOwotCWNhc2UgRFBVX0hXX0JMS19EUzoKLQkJZHB1X2h3X2RzX2Rlc3Ryb3koaHcpOwot CQlicmVhazsKIAljYXNlIERQVV9IV19CTEtfQ1RMOgogCQlkcHVfaHdfY3RsX2Rlc3Ryb3koaHcp OwogCQlicmVhazsKQEAgLTMxNyw5ICszMTMsNiBAQCBzdGF0aWMgaW50IF9kcHVfcm1faHdfYmxr X2NyZWF0ZSgKIAljYXNlIERQVV9IV19CTEtfTE06CiAJCWh3ID0gZHB1X2h3X2xtX2luaXQoaWQs IG1taW8sIGNhdCk7CiAJCWJyZWFrOwotCWNhc2UgRFBVX0hXX0JMS19EUzoKLQkJaHcgPSBkcHVf aHdfZHNfaW5pdChpZCwgbW1pbywgY2F0KTsKLQkJYnJlYWs7CiAJY2FzZSBEUFVfSFdfQkxLX0NU TDoKIAkJaHcgPSBkcHVfaHdfY3RsX2luaXQoaWQsIG1taW8sIGNhdCk7CiAJCWJyZWFrOwpAQCAt NDI3LDE3ICs0MjAsNiBAQCBpbnQgZHB1X3JtX2luaXQoc3RydWN0IGRwdV9ybSAqcm0sCiAJCX0K IAl9CiAKLQlpZiAoY2F0LT5tZHBbMF0uaGFzX2Rlc3Rfc2NhbGVyKSB7Ci0JCWZvciAoaSA9IDA7 IGkgPCBjYXQtPmRzX2NvdW50OyBpKyspIHsKLQkJCXJjID0gX2RwdV9ybV9od19ibGtfY3JlYXRl KHJtLCBjYXQsIG1taW8sIERQVV9IV19CTEtfRFMsCi0JCQkJCWNhdC0+ZHNbaV0uaWQsICZjYXQt PmRzW2ldKTsKLQkJCWlmIChyYykgewotCQkJCURQVV9FUlJPUigiZmFpbGVkOiBkcyBodyBub3Qg YXZhaWxhYmxlXG4iKTsKLQkJCQlnb3RvIGZhaWw7Ci0JCQl9Ci0JCX0KLQl9Ci0KIAlmb3IgKGkg PSAwOyBpIDwgY2F0LT5waW5ncG9uZ19jb3VudDsgaSsrKSB7CiAJCXJjID0gX2RwdV9ybV9od19i bGtfY3JlYXRlKHJtLCBjYXQsIG1taW8sIERQVV9IV19CTEtfUElOR1BPTkcsCiAJCQkJY2F0LT5w aW5ncG9uZ1tpXS5pZCwgJmNhdC0+cGluZ3BvbmdbaV0pOwpAQCAtNTE2LDIwICs0OTgsMTYgQEAg c3RhdGljIGJvb2wgX2RwdV9ybV9jaGVja19sbV9hbmRfZ2V0X2Nvbm5lY3RlZF9ibGtzKAogCQlz dHJ1Y3QgZHB1X3JtX3JzdnAgKnJzdnAsCiAJCXN0cnVjdCBkcHVfcm1fcmVxdWlyZW1lbnRzICpy ZXFzLAogCQlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqbG0sCi0JCXN0cnVjdCBkcHVfcm1faHdfYmxr ICoqZHMsCiAJCXN0cnVjdCBkcHVfcm1faHdfYmxrICoqcHAsCiAJCXN0cnVjdCBkcHVfcm1faHdf YmxrICpwcmltYXJ5X2xtKQogewogCWNvbnN0IHN0cnVjdCBkcHVfbG1fY2ZnICpsbV9jZmcgPSB0 b19kcHVfaHdfbWl4ZXIobG0tPmh3KS0+Y2FwOwogCXN0cnVjdCBkcHVfcm1faHdfaXRlciBpdGVy OwotCWJvb2wgaXNfdmFsaWRfZHM7CiAKLQkqZHMgPSBOVUxMOwogCSpwcCA9IE5VTEw7CiAKLQlE UFVfREVCVUcoImNoZWNrIGxtICVkIGRzICVkIHBwICVkXG4iLAotCQkJICAgbG1fY2ZnLT5pZCwK LQkJCSAgIGxtX2NmZy0+ZHMsIGxtX2NmZy0+cGluZ3BvbmcpOworCURQVV9ERUJVRygiY2hlY2sg bG0gJWQgcHAgJWRcbiIsCisJCQkgICBsbV9jZmctPmlkLCBsbV9jZmctPnBpbmdwb25nKTsKIAog CS8qIENoZWNrIGlmIHRoaXMgbGF5ZXIgbWl4ZXIgaXMgYSBwZWVyIG9mIHRoZSBwcm9wb3NlZCBw cmltYXJ5IExNICovCiAJaWYgKHByaW1hcnlfbG0pIHsKQEAgLTU0Myw0MyArNTIxLDEyIEBAIHN0 YXRpYyBib29sIF9kcHVfcm1fY2hlY2tfbG1fYW5kX2dldF9jb25uZWN0ZWRfYmxrcygKIAkJfQog CX0KIAotCWlzX3ZhbGlkX2RzID0gKGxtX2NmZy0+ZHMgIT0gRFNfTUFYKSA/IHRydWUgOiBmYWxz ZTsKLQotCWlmIChSTV9SUV9EUyhyZXFzKSAmJiAhaXNfdmFsaWRfZHMpIHsKLQkJRFBVX0RFQlVH KCJmYWlsOmxtKCVkKXJlcV9kcyglZClkcyglZClcbiIsCi0JCQlsbV9jZmctPmlkLCAoYm9vbCko Uk1fUlFfRFMocmVxcykpLCBsbV9jZmctPmRzKTsKLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCiAJ LyogQWxyZWFkeSByZXNlcnZlZD8gKi8KIAlpZiAoUkVTRVJWRURfQllfT1RIRVIobG0sIHJzdnAp KSB7CiAJCURQVV9ERUJVRygibG0gJWQgYWxyZWFkeSByZXNlcnZlZFxuIiwgbG1fY2ZnLT5pZCk7 CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlpZiAobG1fY2ZnLT5kcyAhPSBEU19NQVgpIHsKLQkJ ZHB1X3JtX2luaXRfaHdfaXRlcigmaXRlciwgMCwgRFBVX0hXX0JMS19EUyk7Ci0JCXdoaWxlIChf ZHB1X3JtX2dldF9od19sb2NrZWQocm0sICZpdGVyKSkgewotCQkJaWYgKGl0ZXIuYmxrLT5pZCA9 PSBsbV9jZmctPmRzKSB7Ci0JCQkJKmRzID0gaXRlci5ibGs7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0J CX0KLQotCQlpZiAoISpkcykgewotCQkJRFBVX0RFQlVHKCJsbSAlZCBmYWlsZWQgdG8gcmV0cmll dmUgZHMgJWRcbiIsIGxtLT5pZCwKLQkJCQkJbG1fY2ZnLT5kcyk7Ci0JCQlyZXR1cm4gZmFsc2U7 Ci0JCX0KLQotCQlpZiAoUkVTRVJWRURfQllfT1RIRVIoKmRzLCByc3ZwKSkgewotCQkJRFBVX0RF QlVHKCJsbSAlZCBkcyAlZCBhbHJlYWR5IHJlc2VydmVkXG4iLAotCQkJCQlsbS0+aWQsICgqZHMp LT5pZCk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KIAlkcHVfcm1faW5pdF9od19pdGVy KCZpdGVyLCAwLCBEUFVfSFdfQkxLX1BJTkdQT05HKTsKIAl3aGlsZSAoX2RwdV9ybV9nZXRfaHdf bG9ja2VkKHJtLCAmaXRlcikpIHsKIAkJaWYgKGl0ZXIuYmxrLT5pZCA9PSBsbV9jZmctPnBpbmdw b25nKSB7CkBAIC01OTYsNyArNTQzLDYgQEAgc3RhdGljIGJvb2wgX2RwdV9ybV9jaGVja19sbV9h bmRfZ2V0X2Nvbm5lY3RlZF9ibGtzKAogCWlmIChSRVNFUlZFRF9CWV9PVEhFUigqcHAsIHJzdnAp KSB7CiAJCURQVV9ERUJVRygibG0gJWQgcHAgJWQgYWxyZWFkeSByZXNlcnZlZFxuIiwgbG0tPmlk LAogCQkJCSgqcHApLT5pZCk7Ci0JCSpkcyA9IE5VTEw7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAK QEAgLTYxMCw3ICs1NTYsNiBAQCBzdGF0aWMgaW50IF9kcHVfcm1fcmVzZXJ2ZV9sbXMoCiAKIHsK IAlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqbG1bTUFYX0JMT0NLU107Ci0Jc3RydWN0IGRwdV9ybV9o d19ibGsgKmRzW01BWF9CTE9DS1NdOwogCXN0cnVjdCBkcHVfcm1faHdfYmxrICpwcFtNQVhfQkxP Q0tTXTsKIAlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgaXRlcl9pLCBpdGVyX2o7CiAJaW50IGxtX2Nv dW50ID0gMDsKQEAgLTYyNiwxNCArNTcxLDEzIEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZl X2xtcygKIAl3aGlsZSAobG1fY291bnQgIT0gcmVxcy0+dG9wb2xvZ3ktPm51bV9sbSAmJgogCQkJ X2RwdV9ybV9nZXRfaHdfbG9ja2VkKHJtLCAmaXRlcl9pKSkgewogCQltZW1zZXQoJmxtLCAwLCBz aXplb2YobG0pKTsKLQkJbWVtc2V0KCZkcywgMCwgc2l6ZW9mKGRzKSk7CiAJCW1lbXNldCgmcHAs IDAsIHNpemVvZihwcCkpOwogCiAJCWxtX2NvdW50ID0gMDsKIAkJbG1bbG1fY291bnRdID0gaXRl cl9pLmJsazsKIAogCQlpZiAoIV9kcHVfcm1fY2hlY2tfbG1fYW5kX2dldF9jb25uZWN0ZWRfYmxr cygKLQkJCQlybSwgcnN2cCwgcmVxcywgbG1bbG1fY291bnRdLCAmZHNbbG1fY291bnRdLAorCQkJ CXJtLCByc3ZwLCByZXFzLCBsbVtsbV9jb3VudF0sCiAJCQkJJnBwW2xtX2NvdW50XSwgTlVMTCkp CiAJCQljb250aW51ZTsKIApAQCAtNjQ5LDggKzU5Myw3IEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9y ZXNlcnZlX2xtcygKIAogCQkJaWYgKCFfZHB1X3JtX2NoZWNrX2xtX2FuZF9nZXRfY29ubmVjdGVk X2Jsa3MoCiAJCQkJCXJtLCByc3ZwLCByZXFzLCBpdGVyX2ouYmxrLAotCQkJCQkmZHNbbG1fY291 bnRdLCAmcHBbbG1fY291bnRdLAotCQkJCQlpdGVyX2kuYmxrKSkKKwkJCQkJJnBwW2xtX2NvdW50 XSwgaXRlcl9pLmJsaykpCiAJCQkJY29udGludWU7CiAKIAkJCWxtW2xtX2NvdW50XSA9IGl0ZXJf ai5ibGs7CkBAIC02NzAsMTEgKzYxMyw3IEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZlX2xt cygKIAkJbG1baV0tPnJzdnBfbnh0ID0gcnN2cDsKIAkJcHBbaV0tPnJzdnBfbnh0ID0gcnN2cDsK IAotCQlpZiAoZHNbaV0pCi0JCQlkc1tpXS0+cnN2cF9ueHQgPSByc3ZwOwotCi0JCURQVV9FVlQz MihsbVtpXS0+dHlwZSwgcnN2cC0+ZW5jX2lkLCBsbVtpXS0+aWQsIHBwW2ldLT5pZCwKLQkJCQlk c1tpXSA/IGRzW2ldLT5pZCA6IDApOworCQlEUFVfRVZUMzIobG1baV0tPnR5cGUsIHJzdnAtPmVu Y19pZCwgbG1baV0tPmlkLCBwcFtpXS0+aWQpOwogCX0KIAogCXJldHVybiByYzsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZHJ2LmgKaW5kZXggNWJhZmYyNy4uOGU4MGI0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9tc21fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKQEAg LTg5LDI1ICs4OSwxMCBAQCBlbnVtIG1zbV9tZHBfcGxhbmVfcHJvcGVydHkgewogCiBlbnVtIG1z bV9tZHBfY3J0Y19wcm9wZXJ0eSB7CiAJQ1JUQ19QUk9QX0lORk8sCi0JQ1JUQ19QUk9QX0RFU1Rf U0NBTEVSX0xVVF9FRCwKLQlDUlRDX1BST1BfREVTVF9TQ0FMRVJfTFVUX0NJUiwKLQlDUlRDX1BS T1BfREVTVF9TQ0FMRVJfTFVUX1NFUCwKIAogCS8qICMgb2YgYmxvYiBwcm9wZXJ0aWVzICovCiAJ Q1JUQ19QUk9QX0JMT0JDT1VOVCwKIAotCS8qIHJhbmdlIHByb3BlcnRpZXMgKi8KLQlDUlRDX1BS T1BfRElNX0xBWUVSX1YxID0gQ1JUQ19QUk9QX0JMT0JDT1VOVCwKLQlDUlRDX1BST1BfQ09SRV9D TEssCi0JQ1JUQ19QUk9QX0NPUkVfQUIsCi0JQ1JUQ19QUk9QX0NPUkVfSUIsCi0JQ1JUQ19QUk9Q X0xMQ0NfQUIsCi0JQ1JUQ19QUk9QX0xMQ0NfSUIsCi0JQ1JUQ19QUk9QX0RSQU1fQUIsCi0JQ1JU Q19QUk9QX0RSQU1fSUIsCi0JQ1JUQ19QUk9QX0lETEVfVElNRU9VVCwKLQlDUlRDX1BST1BfREVT VF9TQ0FMRVIsCi0KIAkvKiB0b3RhbCAjIG9mIHByb3BlcnRpZXMgKi8KIAlDUlRDX1BST1BfQ09V TlQKIH07Ci0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1i ZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3Jh dGl2ZSBQcm9qZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJl bm8K