From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [DPU PATCH 2/2] drm/msm: remove partial update support Date: Mon, 26 Feb 2018 10:21:48 -0500 Message-ID: <20180226152148.GS223881@art_vandelay> References: <1519353125-32005-1-git-send-email-jsanka@codeaurora.org> <1519353125-32005-3-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1519353125-32005-3-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: Jeykumar Sankaran Cc: jeykumar-jfJNa2p1gH1BDgjK7y7TUQ@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org T24gVGh1LCBGZWIgMjIsIDIwMTggYXQgMDY6MzI6MDVQTSAtMDgwMCwgSmV5a3VtYXIgU2Fua2Fy YW4gd3JvdGU6Cj4gSW1wbGVtZW50YXRpb24gb2YgcGFydGlhbCB1cGRhdGUgaW4gRFBVIERSTSBp cyBoZWF2aWx5Cj4gZGVwZW5kZW50IG9uIGN1c3RvbSBwcm9wZXJ0aWVzIGFuZCBkc2kgaG9va3Mu IFJlbW92aW5nIHRoZQo+IHN1cHBvcnQgZm9yIG5vdy4gV2UgbWF5IG5lZWQgdG8gcmV2aXNpdCB0 aGUgc3VwcG9ydCBpbiB0aGUKPiBmdXR1cmUuCj4gCj4gQ2hhbmdlLUlkOiBJZGQ4NzI3MmZlNGQ0 YzBhMjZmY2I0MDUxNTRjMDYwNWFmMWVkZjFiYQo+IFNpZ25lZC1vZmYtYnk6IEpleWt1bWFyIFNh bmthcmFuIDxqc2Fua2FAY29kZWF1cm9yYS5vcmc+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuYyAgfCAxNDMgKy0tLS0tLQo+ICBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmggIHwgICA3ICstCj4gIGRyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgICAgICAgfCA1NDQgKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5o ICAgICAgIHwgIDE4IC0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29k ZXIuYyAgICB8IDI2NiArKysrLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X2NhdGFsb2cuYyB8ICAgMiArCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9rbXMuaCAgICAgICAgfCAgIDggLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfa21zX3V0aWxzLmMgIHwgIDQyIC0tCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9wbGFuZS5jICAgICAgfCAgMTMgLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL21z bV9kcnYuaCAgICAgICAgICAgICAgICAgIHwgIDU2IC0tLQo+ICAxMCBmaWxlcyBjaGFuZ2VkLCA5 MCBpbnNlcnRpb25zKCspLCAxMDA5IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmMgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmMKPiBpbmRleCA1N2I4NjI3Li42NDc4ZTg5 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0 b3IuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3Iu Ywo+IEBAIC00MjQsOCArNDI0LDcgQEAgaW50IGRwdV9jb25uZWN0b3JfcHJlX2tpY2tvZmYoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiAgewo+ICAJc3RydWN0IGRwdV9jb25uZWN0 b3IgKmNfY29ubjsKPiAgCXN0cnVjdCBkcHVfY29ubmVjdG9yX3N0YXRlICpjX3N0YXRlOwo+IC0J c3RydWN0IG1zbV9kaXNwbGF5X2tpY2tvZmZfcGFyYW1zIHBhcmFtczsKPiAtCWludCBpZHgsIHJj Owo+ICsJaW50IGlkeCwgcmMgPSAwOwo+ICAKPiAgCWlmICghY29ubmVjdG9yKSB7Cj4gIAkJRFBV X0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsKPiBAQCAtNDYyLDE0ICs0NjEsNyBAQCBpbnQg ZHB1X2Nvbm5lY3Rvcl9wcmVfa2lja29mZihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KQo+ICAJCX0KPiAgCX0KPiAgCj4gLQlpZiAoIWNfY29ubi0+b3BzLnByZV9raWNrb2ZmKQo+IC0J CXJldHVybiAwOwo+IC0KPiAtCXBhcmFtcy5yb2lzID0gJmNfc3RhdGUtPnJvaXM7Cj4gLQo+IC0J RFBVX0VWVDMyX1ZFUkJPU0UoY29ubmVjdG9yLT5iYXNlLmlkKTsKPiAtCj4gLQlyYyA9IGNfY29u bi0+b3BzLnByZV9raWNrb2ZmKGNvbm5lY3RvciwgY19jb25uLT5kaXNwbGF5LCAmcGFyYW1zKTsK PiArCURQVV9FVlQzMl9WRVJCT1NFKGNvbm5lY3Rvci0+YmFzZS5pZCk7CQo+ICAKPiAgCXJldHVy biByYzsKPiAgfQo+IEBAIC02NDUsMTIyICs2MzcsNiBAQCBzdGF0aWMgdm9pZCBkcHVfY29ubmVj dG9yX2F0b21pY19yZXNldChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICAJcmV0 dXJuICZjX3N0YXRlLT5iYXNlOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50IF9kcHVfY29ubmVjdG9y X3JvaV92MV9jaGVja19yb2koCj4gLQkJc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubiwKPiAt CQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqcm9pX2Nvbm4sCj4gLQkJY29uc3Qgc3RydWN0IG1zbV9y b2lfY2FwcyAqY2FwcykKPiAtewo+IC0JY29uc3Qgc3RydWN0IG1zbV9yb2lfYWxpZ25tZW50ICph bGlnbiA9ICZjYXBzLT5hbGlnbjsKPiAtCWludCB3ID0gcm9pX2Nvbm4tPngyIC0gcm9pX2Nvbm4t PngxOwo+IC0JaW50IGggPSByb2lfY29ubi0+eTIgLSByb2lfY29ubi0+eTE7Cj4gLQo+IC0JaWYg KHcgPD0gMCB8fCBoIDw9IDApIHsKPiAtCQlEUFVfRVJST1JfQ09OTihjX2Nvbm4sICJpbnZhbGlk IGNvbm4gcm9pIHcgJWQgaCAlZFxuIiwgdywgaCk7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9 Cj4gLQo+IC0JaWYgKHcgPCBhbGlnbi0+bWluX3dpZHRoIHx8IHcgJSBhbGlnbi0+d2lkdGhfcGl4 X2FsaWduKSB7Cj4gLQkJRFBVX0VSUk9SX0NPTk4oY19jb25uLAo+IC0JCQkJImludmFsaWQgY29u biByb2kgd2lkdGggJWQgbWluICVkIGFsaWduICVkXG4iLAo+IC0JCQkJdywgYWxpZ24tPm1pbl93 aWR0aCwgYWxpZ24tPndpZHRoX3BpeF9hbGlnbik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9 Cj4gLQo+IC0JaWYgKGggPCBhbGlnbi0+bWluX2hlaWdodCB8fCBoICUgYWxpZ24tPmhlaWdodF9w aXhfYWxpZ24pIHsKPiAtCQlEUFVfRVJST1JfQ09OTihjX2Nvbm4sCj4gLQkJCQkiaW52YWxpZCBj b25uIHJvaSBoZWlnaHQgJWQgbWluICVkIGFsaWduICVkXG4iLAo+IC0JCQkJaCwgYWxpZ24tPm1p bl9oZWlnaHQsIGFsaWduLT5oZWlnaHRfcGl4X2FsaWduKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsK PiAtCX0KPiAtCj4gLQlpZiAocm9pX2Nvbm4tPngxICUgYWxpZ24tPnhzdGFydF9waXhfYWxpZ24p IHsKPiAtCQlEUFVfRVJST1JfQ09OTihjX2Nvbm4sICJpbnZhbGlkIGNvbm4gcm9pIHgxICVkIGFs aWduICVkXG4iLAo+IC0JCQkJcm9pX2Nvbm4tPngxLCBhbGlnbi0+eHN0YXJ0X3BpeF9hbGlnbik7 Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JaWYgKHJvaV9jb25uLT55MSAlIGFs aWduLT55c3RhcnRfcGl4X2FsaWduKSB7Cj4gLQkJRFBVX0VSUk9SX0NPTk4oY19jb25uLCAiaW52 YWxpZCBjb25uIHJvaSB5MSAlZCBhbGlnbiAlZFxuIiwKPiAtCQkJCXJvaV9jb25uLT55MSwgYWxp Z24tPnlzdGFydF9waXhfYWxpZ24pOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAt CXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IF9kcHVfY29ubmVjdG9yX3NldF9yb2lf djEoCj4gLQkJc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubiwKPiAtCQlzdHJ1Y3QgZHB1X2Nv bm5lY3Rvcl9zdGF0ZSAqY19zdGF0ZSwKPiAtCQl2b2lkICp1c3JfcHRyKQo+IC17Cj4gLQlzdHJ1 Y3QgZHB1X2RybV9yb2lfdjEgcm9pX3YxOwo+IC0Jc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gZGlz cGxheV9pbmZvOwo+IC0Jc3RydWN0IG1zbV9yb2lfY2FwcyAqY2FwczsKPiAtCWludCBpLCByYzsK PiAtCj4gLQlpZiAoIWNfY29ubiB8fCAhY19zdGF0ZSkgewo+IC0JCURQVV9FUlJPUigiaW52YWxp ZCBhcmdzXG4iKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlyYyA9IGRwdV9j b25uZWN0b3JfZ2V0X2luZm8oJmNfY29ubi0+YmFzZSwgJmRpc3BsYXlfaW5mbyk7Cj4gLQlpZiAo cmMpIHsKPiAtCQlEUFVfRVJST1JfQ09OTihjX2Nvbm4sICJkaXNwbGF5IGdldCBpbmZvIGVycm9y OiAlZFxuIiwgcmMpOwo+IC0JCXJldHVybiByYzsKPiAtCX0KPiAtCj4gLQljYXBzID0gJmRpc3Bs YXlfaW5mby5yb2lfY2FwczsKPiAtCWlmICghY2Fwcy0+ZW5hYmxlZCkgewo+IC0JCURQVV9FUlJP Ul9DT05OKGNfY29ubiwgImRpc3BsYXkgcm9pIGNhcGFiaWxpdHkgaXMgZGlzYWJsZWRcbiIpOwo+ IC0JCXJldHVybiAtRU5PVFNVUFA7Cj4gLQl9Cj4gLQo+IC0JbWVtc2V0KCZjX3N0YXRlLT5yb2lz LCAwLCBzaXplb2YoY19zdGF0ZS0+cm9pcykpOwo+IC0KPiAtCWlmICghdXNyX3B0cikgewo+IC0J CURQVV9ERUJVR19DT05OKGNfY29ubiwgInJvaXMgY2xlYXJlZFxuIik7Cj4gLQkJcmV0dXJuIDA7 Cj4gLQl9Cj4gLQo+IC0JaWYgKGNvcHlfZnJvbV91c2VyKCZyb2lfdjEsIHVzcl9wdHIsIHNpemVv Zihyb2lfdjEpKSkgewo+IC0JCURQVV9FUlJPUl9DT05OKGNfY29ubiwgImZhaWxlZCB0byBjb3B5 IHJvaV92MSBkYXRhXG4iKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlEUFVf REVCVUdfQ09OTihjX2Nvbm4sICJudW1fcmVjdHMgJWRcbiIsIHJvaV92MS5udW1fcmVjdHMpOwo+ IC0KPiAtCWlmIChyb2lfdjEubnVtX3JlY3RzID09IDApIHsKPiAtCQlEUFVfREVCVUdfQ09OTihj X2Nvbm4sICJyb2lzIGNsZWFyZWRcbiIpOwo+IC0JCXJldHVybiAwOwo+IC0JfQo+IC0KPiAtCWlm IChyb2lfdjEubnVtX3JlY3RzID4gRFBVX01BWF9ST0lfVjEgfHwKPiAtCQkJcm9pX3YxLm51bV9y ZWN0cyA+IGNhcHMtPm51bV9yb2kpIHsKPiAtCQlEUFVfRVJST1JfQ09OTihjX2Nvbm4sICJ0b28g bWFueSByZWN0cyBzcGVjaWZpZWQ6ICVkXG4iLAo+IC0JCQkJcm9pX3YxLm51bV9yZWN0cyk7Cj4g LQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JY19zdGF0ZS0+cm9pcy5udW1fcmVjdHMg PSByb2lfdjEubnVtX3JlY3RzOwo+IC0JZm9yIChpID0gMDsgaSA8IHJvaV92MS5udW1fcmVjdHM7 ICsraSkgewo+IC0JCWludCByYzsKPiAtCj4gLQkJcmMgPSBfZHB1X2Nvbm5lY3Rvcl9yb2lfdjFf Y2hlY2tfcm9pKGNfY29ubiwgJnJvaV92MS5yb2lbaV0sCj4gLQkJCQljYXBzKTsKPiAtCQlpZiAo cmMpCj4gLQkJCXJldHVybiByYzsKPiAtCj4gLQkJY19zdGF0ZS0+cm9pcy5yb2lbaV0gPSByb2lf djEucm9pW2ldOwo+IC0JCURQVV9ERUJVR19DT05OKGNfY29ubiwgInJvaSVkOiByb2kgKCVkLCVk KSAoJWQsJWQpXG4iLCBpLAo+IC0JCQkJY19zdGF0ZS0+cm9pcy5yb2lbaV0ueDEsCj4gLQkJCQlj X3N0YXRlLT5yb2lzLnJvaVtpXS55MSwKPiAtCQkJCWNfc3RhdGUtPnJvaXMucm9pW2ldLngyLAo+ IC0JCQkJY19zdGF0ZS0+cm9pcy5yb2lbaV0ueTIpOwo+IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+ IC19Cj4gLQo+ICBzdGF0aWMgaW50IF9kcHVfY29ubmVjdG9yX3VwZGF0ZV9ibF9zY2FsZShzdHJ1 Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25uLAo+ICAJCWludCBpZHgsCj4gIAkJdWludDY0X3QgdmFs dWUpCj4gQEAgLTg1MCwxMyArNzI2LDcgQEAgc3RhdGljIGludCBkcHVfY29ubmVjdG9yX2F0b21p Y19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiAgCQlicmVh azsKPiAgCWRlZmF1bHQ6Cj4gIAkJYnJlYWs7Cj4gLQl9Cj4gLQo+IC0JaWYgKGlkeCA9PSBDT05O RUNUT1JfUFJPUF9ST0lfVjEpIHsKPiAtCQlyYyA9IF9kcHVfY29ubmVjdG9yX3NldF9yb2lfdjEo Y19jb25uLCBjX3N0YXRlLCAodm9pZCAqKXZhbCk7Cj4gLQkJaWYgKHJjKQo+IC0JCQlEUFVfRVJS T1JfQ09OTihjX2Nvbm4sICJpbnZhbGlkIHJvaV92MSwgcmM6ICVkXG4iLCByYyk7Cj4gLQl9Cj4g Kwl9CQo+ICAKPiAgCS8qIGNoZWNrIGZvciBjdXN0b20gcHJvcGVydHkgaGFuZGxpbmcgKi8KPiAg CWlmICghcmMgJiYgY19jb25uLT5vcHMuc2V0X3Byb3BlcnR5KSB7Cj4gQEAgLTEzMDQsMTMgKzEx NzQsNiBAQCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqZHB1X2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCj4gIAkJQ09OTkVDVE9SX1BST1BfQURfQkxfU0NBTEUpOwo+ICAjZW5k aWYKPiAgCj4gLQlyYyA9IGRwdV9jb25uZWN0b3JfZ2V0X2luZm8oJmNfY29ubi0+YmFzZSwgJmRp c3BsYXlfaW5mbyk7Cj4gLQlpZiAoIXJjICYmIGRpc3BsYXlfaW5mby5yb2lfY2Fwcy5lbmFibGVk KSB7Cj4gLQkJbXNtX3Byb3BlcnR5X2luc3RhbGxfdm9sYXRpbGVfcmFuZ2UoCj4gLQkJCQkmY19j b25uLT5wcm9wZXJ0eV9pbmZvLCAiZHB1X2RybV9yb2lfdjEiLCAweDAsCj4gLQkJCQkwLCB+MCwg MCwgQ09OTkVDVE9SX1BST1BfUk9JX1YxKTsKPiAtCX0KPiAtCj4gIAltc21fcHJvcGVydHlfaW5z dGFsbF9yYW5nZSgmY19jb25uLT5wcm9wZXJ0eV9pbmZvLCAiUkVUSVJFX0ZFTkNFIiwKPiAgCQkJ MHgwLCAwLCBJTlJfT1BFTl9NQVgsIDAsIENPTk5FQ1RPUl9QUk9QX1JFVElSRV9GRU5DRSk7Cj4g IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVj dG9yLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmgKPiBp bmRleCA1NzNhMGM4Li45ODFmNDU5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9jb25uZWN0b3IuaAo+IEBAIC0xNjMsMTMgKzE2MywxMCBAQCBzdHJ1Y3QgZHB1 X2Nvbm5lY3Rvcl9vcHMgewo+ICAJICogcHJlX2tpY2tvZmYgLSB0cmlnZ2VyIGRpc3BsYXkgdG8g cHJvZ3JhbSBraWNrb2ZmLXRpbWUgZmVhdHVyZXMKPiAgCSAqIEBjb25uZWN0b3I6IFBvaW50ZXIg dG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKPiAgCSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHBy aXZhdGUgZGlzcGxheSBzdHJ1Y3R1cmUKPiAtCSAqIEBwYXJhbXM6IFBhcmFtZXRlciBidW5kbGUg b2YgY29ubmVjdG9yLXN0b3JlZCBpbmZvcm1hdGlvbiBmb3IKPiAtCSAqCWtpY2tvZmYtdGltZSBw cm9ncmFtbWluZyBpbnRvIHRoZSBkaXNwbGF5Cj4gIAkgKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nl c3MKPiAgCSAqLwo+ICAJaW50ICgqcHJlX2tpY2tvZmYpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsCj4gLQkJCXZvaWQgKmRpc3BsYXksCj4gLQkJCXN0cnVjdCBtc21fZGlzcGxheV9r aWNrb2ZmX3BhcmFtcyAqcGFyYW1zKTsKPiArCQkJdm9pZCAqZGlzcGxheSk7Cj4gIAo+ICAJLyoq Cj4gIAkgKiBjbGtfY3RybCAtIHBlcmZvcm0gY2xrIGVuYWJsZS9kaXNhYmxlIG9uIHRoZSBjb25u ZWN0b3IKPiBAQCAtMzQwLDcgKzMzNyw2IEBAIHN0cnVjdCBkcHVfY29ubmVjdG9yIHsKPiAgICog QG91dF9mYjogUG9pbnRlciB0byBvdXRwdXQgZnJhbWUgYnVmZmVyLCBpZiBhcHBsaWNhYmxlCj4g ICAqIEBwcm9wZXJ0eV9zdGF0ZTogTG9jYWwgc3RvcmFnZSBmb3IgbXNtX3Byb3AgcHJvcGVydGll cwo+ICAgKiBAcHJvcGVydHlfdmFsdWVzOiBMb2NhbCBjYWNoZSBvZiBjdXJyZW50IGNvbm5lY3Rv ciBwcm9wZXJ0eSB2YWx1ZXMKPiAtICogQHJvaXM6IFJlZ2lvbnMgb2YgaW50ZXJlc3Qgc3RydWN0 dXJlIGZvciBtYXBwaW5nIENSVEMgdG8gQ29ubmVjdG9yIG91dHB1dAo+ICAgKiBAcHJvcGVydHlf YmxvYnM6IGJsb2IgcHJvcGVydGllcwo+ICAgKi8KPiAgc3RydWN0IGRwdV9jb25uZWN0b3Jfc3Rh dGUgewo+IEBAIC0zNDksNyArMzQ1LDYgQEAgc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgewo+ ICAJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSBwcm9wZXJ0eV9zdGF0ZTsKPiAgCXN0cnVjdCBt c21fcHJvcGVydHlfdmFsdWUgcHJvcGVydHlfdmFsdWVzW0NPTk5FQ1RPUl9QUk9QX0NPVU5UXTsK PiAgCj4gLQlzdHJ1Y3QgbXNtX3JvaV9saXN0IHJvaXM7Cj4gIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5 X2Jsb2IgKnByb3BlcnR5X2Jsb2JzW0NPTk5FQ1RPUl9QUk9QX0JMT0JDT1VOVF07Cj4gIH07Cj4g IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5j IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwo+IGluZGV4IDNjZGYx ZTMuLmFiMzY1NzggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2NydGMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRj LmMKPiBAQCAtNzgyLDQ2NSArNzgyLDI0IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXR1cF9k aW1fbGF5ZXJfY2ZnKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCX0KPiAgfQo+ICAKPiAtdm9p ZCBkcHVfY3J0Y19nZXRfY3J0Y19yb2koc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKPiAt CQljb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKipjcnRjX3JvaSkKPiAtewo+IC0Jc3RydWN0IGRwdV9j cnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+IC0KPiAtCWlmICghc3RhdGUgfHwgIWNydGNfcm9pKQo+ IC0JCXJldHVybjsKPiAtCj4gLQljcnRjX3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUp Owo+IC0JKmNydGNfcm9pID0gJmNydGNfc3RhdGUtPmNydGNfcm9pOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW50IF9kcHVfY3J0Y19zZXRfcm9pX3YxKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUs Cj4gLQkJdm9pZCBfX3VzZXIgKnVzcl9wdHIpCj4gLXsKPiAtCXN0cnVjdCBkcm1fY3J0YyAqY3J0 YzsKPiAtCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOwo+IC0Jc3RydWN0IGRwdV9kcm1f cm9pX3YxIHJvaV92MTsKPiAtCWludCBpOwo+IC0KPiAtCWlmICghc3RhdGUpIHsKPiAtCQlEUFVf RVJST1IoImludmFsaWQgYXJnc1xuIik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+ IC0JY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUpOwo+IC0JY3J0YyA9IGNzdGF0ZS0+ YmFzZS5jcnRjOwo+IC0KPiAtCW1lbXNldCgmY3N0YXRlLT51c2VyX3JvaV9saXN0LCAwLCBzaXpl b2YoY3N0YXRlLT51c2VyX3JvaV9saXN0KSk7Cj4gLQo+IC0JaWYgKCF1c3JfcHRyKSB7Cj4gLQkJ RFBVX0RFQlVHKCJjcnRjJWQ6IHJvaXMgY2xlYXJlZFxuIiwgRFJNSUQoY3J0YykpOwo+IC0JCXJl dHVybiAwOwo+IC0JfQo+IC0KPiAtCWlmIChjb3B5X2Zyb21fdXNlcigmcm9pX3YxLCB1c3JfcHRy LCBzaXplb2Yocm9pX3YxKSkpIHsKPiAtCQlEUFVfRVJST1IoImNydGMlZDogZmFpbGVkIHRvIGNv cHkgcm9pX3YxIGRhdGFcbiIsIERSTUlEKGNydGMpKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAt CX0KPiAtCj4gLQlEUFVfREVCVUcoImNydGMlZDogbnVtX3JlY3RzICVkXG4iLCBEUk1JRChjcnRj KSwgcm9pX3YxLm51bV9yZWN0cyk7Cj4gLQo+IC0JaWYgKHJvaV92MS5udW1fcmVjdHMgPT0gMCkg ewo+IC0JCURQVV9ERUJVRygiY3J0YyVkOiByb2lzIGNsZWFyZWRcbiIsIERSTUlEKGNydGMpKTsK PiAtCQlyZXR1cm4gMDsKPiAtCX0KPiAtCj4gLQlpZiAocm9pX3YxLm51bV9yZWN0cyA+IERQVV9N QVhfUk9JX1YxKSB7Cj4gLQkJRFBVX0VSUk9SKCJjcnRjJWQ6IHRvbyBtYW55IHJlY3RzIHNwZWNp ZmllZDogJWRcbiIsIERSTUlEKGNydGMpLAo+IC0JCQkJcm9pX3YxLm51bV9yZWN0cyk7Cj4gLQkJ cmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JY3N0YXRlLT51c2VyX3JvaV9saXN0Lm51bV9y ZWN0cyA9IHJvaV92MS5udW1fcmVjdHM7Cj4gLQlmb3IgKGkgPSAwOyBpIDwgcm9pX3YxLm51bV9y ZWN0czsgKytpKSB7Cj4gLQkJY3N0YXRlLT51c2VyX3JvaV9saXN0LnJvaVtpXSA9IHJvaV92MS5y b2lbaV07Cj4gLQkJRFBVX0RFQlVHKCJjcnRjJWQ6IHJvaSVkOiByb2kgKCVkLCVkKSAoJWQsJWQp XG4iLAo+IC0JCQkJRFJNSUQoY3J0YyksIGksCj4gLQkJCQljc3RhdGUtPnVzZXJfcm9pX2xpc3Qu cm9pW2ldLngxLAo+IC0JCQkJY3N0YXRlLT51c2VyX3JvaV9saXN0LnJvaVtpXS55MSwKPiAtCQkJ CWNzdGF0ZS0+dXNlcl9yb2lfbGlzdC5yb2lbaV0ueDIsCj4gLQkJCQljc3RhdGUtPnVzZXJfcm9p X2xpc3Qucm9pW2ldLnkyKTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3Rh dGljIGJvb2wgX2RwdV9jcnRjX3NldHVwX2lzXzNkbXV4X2RzYyhzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUgKnN0YXRlKQo+IC17Cj4gLQlpbnQgaTsKPiAtCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0 YXRlOwo+IC0JYm9vbCBpc18zZG11eF9kc2MgPSBmYWxzZTsKPiAtCj4gLQljc3RhdGUgPSB0b19k cHVfY3J0Y19zdGF0ZShzdGF0ZSk7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IGNzdGF0ZS0+bnVt X2Nvbm5lY3RvcnM7IGkrKykgewo+IC0JCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uID0gY3N0 YXRlLT5jb25uZWN0b3JzW2ldOwo+IC0KPiAtCQlpZiAoZHB1X2Nvbm5lY3Rvcl9nZXRfdG9wb2xv Z3lfbmFtZShjb25uKSA9PQo+IC0JCQkJRFBVX1JNX1RPUE9MT0dZX0RVQUxQSVBFXzNETUVSR0Vf RFNDKQo+IC0JCQlpc18zZG11eF9kc2MgPSB0cnVlOwo+IC0JfQo+IC0KPiAtCXJldHVybiBpc18z ZG11eF9kc2M7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgX2RwdV9jcnRjX3NldF9jcnRjX3JvaShz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkK PiAtewo+IC0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm47Cj4gLQlzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZTsKPiAtCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7Cj4g LQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gLQlzdHJ1Y3QgZHB1X3JlY3Qg KmNydGNfcm9pOwo+IC0JaW50IGksIG51bV9hdHRhY2hlZF9jb25ucyA9IDA7Cj4gLQo+IC0JaWYg KCFjcnRjIHx8ICFzdGF0ZSkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlkcHVfY3J0YyA9 IHRvX2RwdV9jcnRjKGNydGMpOwo+IC0JY3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0 YXRlKTsKPiAtCWNydGNfcm9pID0gJmNydGNfc3RhdGUtPmNydGNfcm9pOwo+IC0KPiAtCWZvcl9l YWNoX29sZF9jb25uZWN0b3JfaW5fc3RhdGUoc3RhdGUtPnN0YXRlLCBjb25uLCBjb25uX3N0YXRl LCBpKSB7Cj4gLQkJc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgKmRwdV9jb25uX3N0YXRlOwo+ IC0KPiAtCQlpZiAoIWNvbm5fc3RhdGUgfHwgY29ubl9zdGF0ZS0+Y3J0YyAhPSBjcnRjKQo+IC0J CQljb250aW51ZTsKPiAtCj4gLQkJaWYgKG51bV9hdHRhY2hlZF9jb25ucykgewo+IC0JCQlEUFVf RVJST1IoCj4gLQkJCQkiY3J0YyVkOiB1bnN1cHBvcnRlZDogcm9pIG9uIGNydGMgdy8gPjEgY29u bmVjdG9yc1xuIiwKPiAtCQkJCQlEUk1JRChjcnRjKSk7Cj4gLQkJCXJldHVybiAtRUlOVkFMOwo+ IC0JCX0KPiAtCQkrK251bV9hdHRhY2hlZF9jb25uczsKPiAtCj4gLQkJZHB1X2Nvbm5fc3RhdGUg PSB0b19kcHVfY29ubmVjdG9yX3N0YXRlKGNvbm5fc3RhdGUpOwo+IC0KPiAtCQkvKgo+IC0JCSAq IGN1cnJlbnQgZHJpdmVyIG9ubHkgc3VwcG9ydHMgc2FtZSBjb25uZWN0b3IgYW5kIGNydGMgc2l6 ZSwKPiAtCQkgKiBidXQgaWYgc3VwcG9ydCBmb3IgZGlmZmVyZW50IHNpemVzIGlzIGFkZGVkLCBk cml2ZXIgbmVlZHMKPiAtCQkgKiB0byBjaGVjayB0aGUgY29ubmVjdG9yIHJvaSBoZXJlIHRvIG1h a2Ugc3VyZSBpcyBmdWxsIHNjcmVlbgo+IC0JCSAqIGZvciBkc2MgM2QtbXV4IHRvcG9sb2d5IHRo YXQgZG9lc24ndCBzdXBwb3J0IHBhcnRpYWwgdXBkYXRlLgo+IC0JCSAqLwo+IC0JCWlmIChtZW1j bXAoJmRwdV9jb25uX3N0YXRlLT5yb2lzLCAmY3J0Y19zdGF0ZS0+dXNlcl9yb2lfbGlzdCwKPiAt CQkJCXNpemVvZihjcnRjX3N0YXRlLT51c2VyX3JvaV9saXN0KSkpIHsKPiAtCQkJRFBVX0VSUk9S KCIlczogY3J0YyAtPiBjb25uIHJvaSBzY2FsaW5nIHVuc3VwcG9ydGVkXG4iLAo+IC0JCQkJCWRw dV9jcnRjLT5uYW1lKTsKPiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQkJfQo+IC0JfQo+IC0KPiAt CWRwdV9rbXNfcmVjdF9tZXJnZV9yZWN0YW5nbGVzKCZjcnRjX3N0YXRlLT51c2VyX3JvaV9saXN0 LCBjcnRjX3JvaSk7Cj4gLQo+IC0JRFBVX0RFQlVHKCIlczogY3J0YyByb2kgKCVkLCVkLCVkLCVk KVxuIiwgZHB1X2NydGMtPm5hbWUsCj4gLQkJCWNydGNfcm9pLT54LCBjcnRjX3JvaS0+eSwgY3J0 Y19yb2ktPncsIGNydGNfcm9pLT5oKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3Rh dGljIGludCBfZHB1X2NydGNfY2hlY2tfYXV0b3JlZnJlc2goc3RydWN0IGRybV9jcnRjICpjcnRj LAo+IC0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCj4gLXsKPiAtCXN0cnVjdCBkcHVf Y3J0YyAqZHB1X2NydGM7Cj4gLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4g LQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsKPiAtCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0 YXRlICpjb25uX3N0YXRlOwo+IC0JaW50IGk7Cj4gLQo+IC0JaWYgKCFjcnRjIHx8ICFzdGF0ZSkK PiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMp Owo+IC0JY3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKPiAtCj4gLQlpZiAo ZHB1X2ttc19yZWN0X2lzX251bGwoJmNydGNfc3RhdGUtPmNydGNfcm9pKSkKPiAtCQlyZXR1cm4g MDsKPiAtCj4gLQkvKiBwYXJ0aWFsIHVwZGF0ZSBhY3RpdmUsIGNoZWNrIGlmIGF1dG9yZWZyZXNo IGlzIGFsc28gcmVxdWVzdGVkICovCj4gLQlmb3JfZWFjaF9vbGRfY29ubmVjdG9yX2luX3N0YXRl KHN0YXRlLT5zdGF0ZSwgY29ubiwgY29ubl9zdGF0ZSwgaSkgewo+IC0JCXVpbnQ2NF90IGF1dG9y ZWZyZXNoOwo+IC0KPiAtCQlpZiAoIWNvbm5fc3RhdGUgfHwgY29ubl9zdGF0ZS0+Y3J0YyAhPSBj cnRjKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJYXV0b3JlZnJlc2ggPSBkcHVfY29ubmVjdG9y X2dldF9wcm9wZXJ0eShjb25uX3N0YXRlLAo+IC0JCQkJQ09OTkVDVE9SX1BST1BfQVVUT1JFRlJF U0gpOwo+IC0JCWlmIChhdXRvcmVmcmVzaCkgewo+IC0JCQlEUFVfRVJST1IoCj4gLQkJCQkiJXM6 IGF1dG9yZWZyZXNoICYgcGFydGlhbCBjcnRjIHJvaSBpbmNvbXBhdGlibGUgJWxsdVxuIiwKPiAt CQkJCQlkcHVfY3J0Yy0+bmFtZSwgYXV0b3JlZnJlc2gpOwo+IC0JCQlyZXR1cm4gLUVJTlZBTDsK PiAtCQl9Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgX2Rw dV9jcnRjX3NldF9sbV9yb2koc3RydWN0IGRybV9jcnRjICpjcnRjLAo+IC0JCXN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqc3RhdGUsIGludCBsbV9pZHgpCj4gLXsKPiAtCXN0cnVjdCBkcHVfY3J0YyAq ZHB1X2NydGM7Cj4gLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gLQljb25z dCBzdHJ1Y3QgZHB1X3JlY3QgKmNydGNfcm9pOwo+IC0JY29uc3Qgc3RydWN0IGRwdV9yZWN0ICps bV9ib3VuZHM7Cj4gLQlzdHJ1Y3QgZHB1X3JlY3QgKmxtX3JvaTsKPiAtCj4gLQlpZiAoIWNydGMg fHwgIXN0YXRlIHx8IGxtX2lkeCA+PSBBUlJBWV9TSVpFKGNydGNfc3RhdGUtPmxtX2JvdW5kcykp Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+IC0JZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRj KTsKPiAtCWNydGNfc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0ZSk7Cj4gLQljcnRjX3Jv aSA9ICZjcnRjX3N0YXRlLT5jcnRjX3JvaTsKPiAtCWxtX2JvdW5kcyA9ICZjcnRjX3N0YXRlLT5s bV9ib3VuZHNbbG1faWR4XTsKPiAtCWxtX3JvaSA9ICZjcnRjX3N0YXRlLT5sbV9yb2lbbG1faWR4 XTsKPiAtCj4gLQlpZiAoZHB1X2ttc19yZWN0X2lzX251bGwoY3J0Y19yb2kpKQo+IC0JCW1lbWNw eShsbV9yb2ksIGxtX2JvdW5kcywgc2l6ZW9mKCpsbV9yb2kpKTsKPiAtCWVsc2UKPiAtCQlkcHVf a21zX3JlY3RfaW50ZXJzZWN0KGNydGNfcm9pLCBsbV9ib3VuZHMsIGxtX3JvaSk7Cj4gLQo+IC0J RFBVX0RFQlVHKCIlczogbG0lZCByb2kgKCVkLCVkLCVkLCVkKVxuIiwgZHB1X2NydGMtPm5hbWUs IGxtX2lkeCwKPiAtCQkJbG1fcm9pLT54LCBsbV9yb2ktPnksIGxtX3JvaS0+dywgbG1fcm9pLT5o KTsKPiAtCj4gLQkvKgo+IC0JICogcGFydGlhbCB1cGRhdGUgaXMgbm90IHN1cHBvcnRlZCB3aXRo IDNkbXV4IGRzYyBvciBkZXN0IHNjYWxlci4KPiAtCSAqIGhlbmNlLCBjcnRjIHJvaSBtdXN0IG1h dGNoIHRoZSBtaXhlciBkaW1lbnNpb25zLgo+IC0JICovCj4gLQlpZiAoY3J0Y19zdGF0ZS0+bnVt X2RzX2VuYWJsZWQgfHwKPiAtCQlfZHB1X2NydGNfc2V0dXBfaXNfM2RtdXhfZHNjKHN0YXRlKSkg ewo+IC0JCWlmIChtZW1jbXAobG1fcm9pLCBsbV9ib3VuZHMsIHNpemVvZihzdHJ1Y3QgZHB1X3Jl Y3QpKSkgewo+IC0JCQlEUFVfRVJST1IoIlVuc3VwcG9ydGVkOiBEZXN0IHNjYWxlci8zZCBtdXgg RFNDICsgUFVcbiIpOwo+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0J LyogaWYgYW55IGRpbWVuc2lvbiBpcyB6ZXJvLCBjbGVhciBhbGwgZGltZW5zaW9ucyBmb3IgY2xh cml0eSAqLwo+IC0JaWYgKGRwdV9rbXNfcmVjdF9pc19udWxsKGxtX3JvaSkpCj4gLQkJbWVtc2V0 KGxtX3JvaSwgMCwgc2l6ZW9mKCpsbV9yb2kpKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0K PiAtc3RhdGljIHUzMiBfZHB1X2NydGNfZ2V0X2Rpc3BsYXlzX2FmZmVjdGVkKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKPiAtCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+IC17Cj4gLQlz dHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwo+IC0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjcnRj X3N0YXRlOwo+IC0JdTMyIGRpc3BfYml0bWFzayA9IDA7Cj4gLQlpbnQgaTsKPiAtCj4gLQlkcHVf Y3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwo+IC0JY3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRjX3N0 YXRlKHN0YXRlKTsKPiAtCj4gLQkvKiBwaW5ncG9uZyBzcGxpdDogb25lIFJPSSwgb25lIExNLCB0 d28gcGh5c2ljYWwgZGlzcGxheXMgKi8KPiAtCWlmIChjcnRjX3N0YXRlLT5pc19wcHNwbGl0KSB7 Cj4gLQkJdTMyIGxtX3NwbGl0X3dpZHRoID0gY3J0Y19zdGF0ZS0+bG1fYm91bmRzWzBdLncgLyAy Owo+IC0JCXN0cnVjdCBkcHVfcmVjdCAqcm9pID0gJmNydGNfc3RhdGUtPmxtX3JvaVswXTsKPiAt Cj4gLQkJaWYgKGRwdV9rbXNfcmVjdF9pc19udWxsKHJvaSkpCj4gLQkJCWRpc3BfYml0bWFzayA9 IDA7Cj4gLQkJZWxzZSBpZiAoKHUzMilyb2ktPnggKyAodTMyKXJvaS0+dyA8PSBsbV9zcGxpdF93 aWR0aCkKPiAtCQkJZGlzcF9iaXRtYXNrID0gQklUKDApOwkJLyogbGVmdCBvbmx5ICovCj4gLQkJ ZWxzZSBpZiAocm9pLT54ID49IGxtX3NwbGl0X3dpZHRoKQo+IC0JCQlkaXNwX2JpdG1hc2sgPSBC SVQoMSk7CQkvKiByaWdodCBvbmx5ICovCj4gLQkJZWxzZQo+IC0JCQlkaXNwX2JpdG1hc2sgPSBC SVQoMCkgfCBCSVQoMSk7IC8qIGxlZnQgYW5kIHJpZ2h0ICovCj4gLQl9IGVsc2Ugewo+IC0JCWZv ciAoaSA9IDA7IGkgPCBkcHVfY3J0Yy0+bnVtX21peGVyczsgaSsrKSB7Cj4gLQkJCWlmICghZHB1 X2ttc19yZWN0X2lzX251bGwoJmNydGNfc3RhdGUtPmxtX3JvaVtpXSkpCj4gLQkJCQlkaXNwX2Jp dG1hc2sgfD0gQklUKGkpOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlEUFVfREVCVUcoImFmZmVjdGVk IGRpc3BsYXlzIDB4JXhcbiIsIGRpc3BfYml0bWFzayk7Cj4gLQo+IC0JcmV0dXJuIGRpc3BfYml0 bWFzazsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBfZHB1X2NydGNfY2hlY2tfcm9pc19jZW50ZXJl ZF9hbmRfc3ltbWV0cmljKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAtCQlzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKnN0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwo+IC0J c3RydWN0IGRwdV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+IC0JY29uc3Qgc3RydWN0IGRwdV9y ZWN0ICpyb2lbQ1JUQ19EVUFMX01JWEVSU107Cj4gLQo+IC0JaWYgKCFjcnRjIHx8ICFzdGF0ZSkK PiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMp Owo+IC0JY3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKPiAtCj4gLQlpZiAo ZHB1X2NydGMtPm51bV9taXhlcnMgPiBDUlRDX0RVQUxfTUlYRVJTKSB7Cj4gLQkJRFBVX0VSUk9S KCIlczogdW5zdXBwb3J0ZWQgbnVtYmVyIG9mIG1peGVyczogJWRcbiIsCj4gLQkJCQlkcHVfY3J0 Yy0+bmFtZSwgZHB1X2NydGMtPm51bV9taXhlcnMpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0J fQo+IC0KPiAtCS8qCj4gLQkgKiBJZiB1c2luZyBwaW5ncG9uZyBzcGxpdDogb25lIFJPSSwgb25l IExNLCB0d28gcGh5c2ljYWwgZGlzcGxheXMKPiAtCSAqIHRoZW4gdGhlIFJPSSBtdXN0IGJlIGNl bnRlcmVkIG9uIHRoZSBwYW5lbCBzcGxpdCBib3VuZGFyeSBhbmQKPiAtCSAqIGJlIG9mIGVxdWFs IHdpZHRoIGFjcm9zcyB0aGUgc3BsaXQuCj4gLQkgKi8KPiAtCWlmIChjcnRjX3N0YXRlLT5pc19w cHNwbGl0KSB7Cj4gLQkJdTE2IHBhbmVsX3NwbGl0X3dpZHRoOwo+IC0JCXUzMiBkaXNwbGF5X21h c2s7Cj4gLQo+IC0JCXJvaVswXSA9ICZjcnRjX3N0YXRlLT5sbV9yb2lbMF07Cj4gLQo+IC0JCWlm IChkcHVfa21zX3JlY3RfaXNfbnVsbChyb2lbMF0pKQo+IC0JCQlyZXR1cm4gMDsKPiAtCj4gLQkJ ZGlzcGxheV9tYXNrID0gX2RwdV9jcnRjX2dldF9kaXNwbGF5c19hZmZlY3RlZChjcnRjLCBzdGF0 ZSk7Cj4gLQkJaWYgKGRpc3BsYXlfbWFzayAhPSAoQklUKDApIHwgQklUKDEpKSkKPiAtCQkJcmV0 dXJuIDA7Cj4gLQo+IC0JCXBhbmVsX3NwbGl0X3dpZHRoID0gY3J0Y19zdGF0ZS0+bG1fYm91bmRz WzBdLncgLyAyOwo+IC0JCWlmIChyb2lbMF0tPnggKyByb2lbMF0tPncgLyAyICE9IHBhbmVsX3Nw bGl0X3dpZHRoKSB7Cj4gLQkJCURQVV9FUlJPUigiJXM6IHJvaSB4ICVkIHcgJWQgc3BsaXQgJWRc biIsCj4gLQkJCQkJZHB1X2NydGMtPm5hbWUsIHJvaVswXS0+eCwgcm9pWzBdLT53LAo+IC0JCQkJ CXBhbmVsX3NwbGl0X3dpZHRoKTsKPiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQkJfQo+IC0KPiAt CQlyZXR1cm4gMDsKPiAtCX0KPiAtCj4gLQkvKgo+IC0JICogT24gY2VydGFpbiBIVywgaWYgdXNp bmcgMiBMTSwgUk9JcyBtdXN0IGJlIHNwbGl0IGV2ZW5seSBiZXR3ZWVuIHRoZQo+IC0JICogTE1z IGFuZCBiZSBvZiBlcXVhbCB3aWR0aC4KPiAtCSAqLwo+IC0JaWYgKGRwdV9jcnRjLT5udW1fbWl4 ZXJzIDwgMikKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlyb2lbMF0gPSAmY3J0Y19zdGF0ZS0+bG1f cm9pWzBdOwo+IC0Jcm9pWzFdID0gJmNydGNfc3RhdGUtPmxtX3JvaVsxXTsKPiAtCj4gLQkvKiBp ZiBvbmUgb2YgdGhlIHJvaSBpcyBudWxsIGl0J3MgYSBsZWZ0L3JpZ2h0LW9ubHkgdXBkYXRlICov Cj4gLQlpZiAoZHB1X2ttc19yZWN0X2lzX251bGwocm9pWzBdKSB8fCBkcHVfa21zX3JlY3RfaXNf bnVsbChyb2lbMV0pKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCS8qIGNoZWNrIGxtIHJvaXMgYXJl IGVxdWFsIHdpZHRoICYgZmlyc3Qgcm9pIGVuZHMgYXQgMm5kIHJvaSAqLwo+IC0JaWYgKHJvaVsw XS0+eCArIHJvaVswXS0+dyAhPSByb2lbMV0tPnggfHwgcm9pWzBdLT53ICE9IHJvaVsxXS0+dykg ewo+IC0JCURQVV9FUlJPUigKPiAtCQkJIiVzOiByb2lzIG5vdCBjZW50ZXJlZCBhbmQgc3ltbWV0 cmljOiByb2kwIHggJWQgdyAlZCByb2kxIHggJWQgdyAlZFxuIiwKPiAtCQkJCWRwdV9jcnRjLT5u YW1lLCByb2lbMF0tPngsIHJvaVswXS0+dywKPiAtCQkJCXJvaVsxXS0+eCwgcm9pWzFdLT53KTsK PiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAt c3RhdGljIGludCBfZHB1X2NydGNfY2hlY2tfcGxhbmVzX3dpdGhpbl9jcnRjX3JvaShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCj4gLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKPiAtewo+ IC0Jc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKPiAtCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZTsKPiAtCWNvbnN0IHN0cnVjdCBkcHVfcmVjdCAqY3J0Y19yb2k7Cj4gLQlzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpwc3RhdGU7Cj4gLQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsK PiAtCj4gLQlpZiAoIWNydGMgfHwgIXN0YXRlKQo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0KPiAt CS8qCj4gLQkgKiBSZWplY3QgY29tbWl0IGlmIGEgUGxhbmUgQ1JUQyBkZXN0aW5hdGlvbiBjb29y ZGluYXRlcyBmYWxsIG91dHNpZGUKPiAtCSAqIHRoZSBwYXJ0aWFsIENSVEMgUk9JLiBMTSBvdXRw dXQgaXMgZGV0ZXJtaW5lZCB2aWEgY29ubmVjdG9yIFJPSXMsCj4gLQkgKiBpZiB0aGV5IGFyZSBz cGVjaWZpZWQsIG5vdCBQbGFuZSBDUlRDIFJPSXMuCj4gLQkgKi8KPiAtCj4gLQlkcHVfY3J0YyA9 IHRvX2RwdV9jcnRjKGNydGMpOwo+IC0JY3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0 YXRlKTsKPiAtCWNydGNfcm9pID0gJmNydGNfc3RhdGUtPmNydGNfcm9pOwo+IC0KPiAtCWlmIChk cHVfa21zX3JlY3RfaXNfbnVsbChjcnRjX3JvaSkpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JZHJt X2F0b21pY19jcnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBzdGF0ZSkgewo+IC0JCXN0 cnVjdCBkcHVfcmVjdCBwbGFuZV9yb2ksIGludGVyc2VjdGlvbjsKPiAtCj4gLQkJcHN0YXRlID0g ZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RhdGUtPnN0YXRlLCBwbGFuZSk7Cj4gLQkJaWYg KElTX0VSUl9PUl9OVUxMKHBzdGF0ZSkpIHsKPiAtCQkJaW50IHJjID0gUFRSX0VSUihwc3RhdGUp Owo+IC0KPiAtCQkJRFBVX0VSUk9SKCIlczogZmFpbGVkIHRvIGdldCBwbGFuZSVkIHN0YXRlLCAl ZFxuIiwKPiAtCQkJCQlkcHVfY3J0Yy0+bmFtZSwgcGxhbmUtPmJhc2UuaWQsIHJjKTsKPiAtCQkJ cmV0dXJuIHJjOwo+IC0JCX0KPiAtCj4gLQkJcGxhbmVfcm9pLnggPSBwc3RhdGUtPmNydGNfeDsK PiAtCQlwbGFuZV9yb2kueSA9IHBzdGF0ZS0+Y3J0Y195Owo+IC0JCXBsYW5lX3JvaS53ID0gcHN0 YXRlLT5jcnRjX3c7Cj4gLQkJcGxhbmVfcm9pLmggPSBwc3RhdGUtPmNydGNfaDsKPiAtCQlkcHVf a21zX3JlY3RfaW50ZXJzZWN0KGNydGNfcm9pLCAmcGxhbmVfcm9pLCAmaW50ZXJzZWN0aW9uKTsK PiAtCQlpZiAoIWRwdV9rbXNfcmVjdF9pc19lcXVhbCgmcGxhbmVfcm9pLCAmaW50ZXJzZWN0aW9u KSkgewo+IC0JCQlEUFVfRVJST1IoCj4gLQkJCQkiJXM6IHBsYW5lJWQgY3J0YyByb2kgKCVkLCVk LCVkLCVkKSBvdXRzaWRlIGNydGMgcm9pICglZCwlZCwlZCwlZClcbiIsCj4gLQkJCQkJZHB1X2Ny dGMtPm5hbWUsIHBsYW5lLT5iYXNlLmlkLAo+IC0JCQkJCXBsYW5lX3JvaS54LCBwbGFuZV9yb2ku eSwKPiAtCQkJCQlwbGFuZV9yb2kudywgcGxhbmVfcm9pLmgsCj4gLQkJCQkJY3J0Y19yb2ktPngs IGNydGNfcm9pLT55LAo+IC0JCQkJCWNydGNfcm9pLT53LCBjcnRjX3JvaS0+aCk7Cj4gLQkJCXJl dHVybiAtRTJCSUc7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1z dGF0aWMgaW50IF9kcHVfY3J0Y19jaGVja19yb2lzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAt CQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X2NydGMg KmRwdV9jcnRjOwo+IC0JaW50IGxtX2lkeDsKPiAtCWludCByYzsKPiAtCj4gLQlpZiAoIWNydGMg fHwgIXN0YXRlKQo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0KPiAtCWRwdV9jcnRjID0gdG9fZHB1 X2NydGMoY3J0Yyk7Cj4gLQo+IC0JcmMgPSBfZHB1X2NydGNfc2V0X2NydGNfcm9pKGNydGMsIHN0 YXRlKTsKPiAtCWlmIChyYykKPiAtCQlyZXR1cm4gcmM7Cj4gLQo+IC0JcmMgPSBfZHB1X2NydGNf Y2hlY2tfYXV0b3JlZnJlc2goY3J0Yywgc3RhdGUpOwo+IC0JaWYgKHJjKQo+IC0JCXJldHVybiBy YzsKPiAtCj4gLQlmb3IgKGxtX2lkeCA9IDA7IGxtX2lkeCA8IGRwdV9jcnRjLT5udW1fbWl4ZXJz OyBsbV9pZHgrKykgewo+IC0JCXJjID0gX2RwdV9jcnRjX3NldF9sbV9yb2koY3J0Yywgc3RhdGUs IGxtX2lkeCk7Cj4gLQkJaWYgKHJjKQo+IC0JCQlyZXR1cm4gcmM7Cj4gLQl9Cj4gLQo+IC0JcmMg PSBfZHB1X2NydGNfY2hlY2tfcm9pc19jZW50ZXJlZF9hbmRfc3ltbWV0cmljKGNydGMsIHN0YXRl KTsKPiAtCWlmIChyYykKPiAtCQlyZXR1cm4gcmM7Cj4gLQo+IC0JcmMgPSBfZHB1X2NydGNfY2hl Y2tfcGxhbmVzX3dpdGhpbl9jcnRjX3JvaShjcnRjLCBzdGF0ZSk7Cj4gLQlpZiAocmMpCj4gLQkJ cmV0dXJuIHJjOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+ICBzdGF0aWMgdm9pZCBfZHB1 X2NydGNfcHJvZ3JhbV9sbV9vdXRwdXRfcm9pKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAgewo+ ICAJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKPiAgCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZTsKPiAtCWNvbnN0IHN0cnVjdCBkcHVfcmVjdCAqbG1fcm9pOwo+IC0Jc3RydWN0 IGRwdV9od19taXhlciAqaHdfbG07Cj4gIAlpbnQgbG1faWR4LCBsbV9ob3Jpel9wb3NpdGlvbjsK PiAgCj4gLQlpZiAoIWNydGMpCj4gLQkJcmV0dXJuOwo+IC0KPiAgCWRwdV9jcnRjID0gdG9fZHB1 X2NydGMoY3J0Yyk7Cj4gIAljcnRjX3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3Rh dGUpOwo+ICAKPiAgCWxtX2hvcml6X3Bvc2l0aW9uID0gMDsKPiAgCWZvciAobG1faWR4ID0gMDsg bG1faWR4IDwgZHB1X2NydGMtPm51bV9taXhlcnM7IGxtX2lkeCsrKSB7Cj4gKwkJY29uc3Qgc3Ry dWN0IGRwdV9yZWN0ICpsbV9yb2kgPSAmY3J0Y19zdGF0ZS0+bG1fYm91bmRzW2xtX2lkeF07Cj4g KwkJc3RydWN0IGRwdV9od19taXhlciAqaHdfbG0gPSBkcHVfY3J0Yy0+bWl4ZXJzW2xtX2lkeF0u aHdfbG07Cj4gIAkJc3RydWN0IGRwdV9od19taXhlcl9jZmcgY2ZnOwo+ICAKPiAtCQlsbV9yb2kg PSAmY3J0Y19zdGF0ZS0+bG1fcm9pW2xtX2lkeF07Cj4gLQkJaHdfbG0gPSBkcHVfY3J0Yy0+bWl4 ZXJzW2xtX2lkeF0uaHdfbG07Cj4gLQo+IC0JCURQVV9FVlQzMihEUk1JRChjcnRjX3N0YXRlLT5i YXNlLmNydGMpLCBsbV9pZHgsCj4gLQkJCWxtX3JvaS0+eCwgbG1fcm9pLT55LCBsbV9yb2ktPncs IGxtX3JvaS0+aCk7Cj4gLQo+ICAJCWlmIChkcHVfa21zX3JlY3RfaXNfbnVsbChsbV9yb2kpKQo+ ICAJCQljb250aW51ZTsKPiAgCj4gLQkJaHdfbG0tPmNmZy5vdXRfd2lkdGggPSBsbV9yb2ktPnc7 Cj4gLQkJaHdfbG0tPmNmZy5vdXRfaGVpZ2h0ID0gbG1fcm9pLT5oOwo+IC0JCWh3X2xtLT5jZmcu cmlnaHRfbWl4ZXIgPSBsbV9ob3Jpel9wb3NpdGlvbjsKPiAtCj4gIAkJY2ZnLm91dF93aWR0aCA9 IGxtX3JvaS0+dzsKPiAgCQljZmcub3V0X2hlaWdodCA9IGxtX3JvaS0+aDsKPiAgCQljZmcucmln aHRfbWl4ZXIgPSBsbV9ob3Jpel9wb3NpdGlvbisrOwo+IEBAIC0xMzYxLDcwICs5MjAsNyBAQCBz dGF0aWMgdm9pZCBfZHB1X2NydGNfYmxlbmRfc2V0dXBfbWl4ZXIoc3RydWN0IGRybV9jcnRjICpj cnRjLAo+ICAJCQkJCW1peGVyLCAmY3N0YXRlLT5kaW1fbGF5ZXJbaV0pOwo+ICAJfQo+ICAKPiAt CV9kcHVfY3J0Y19wcm9ncmFtX2xtX291dHB1dF9yb2koY3J0Yyk7Cj4gLX0KPiAtCj4gLXN0YXRp YyB2b2lkIF9kcHVfY3J0Y19zd2FwX21peGVyc19mb3JfcmlnaHRfcGFydGlhbF91cGRhdGUoCj4g LQkJc3RydWN0IGRybV9jcnRjICpjcnRjKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9j cnRjOwo+IC0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGU7Cj4gLQlzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmRybV9lbmM7Cj4gLQlib29sIGlzX3JpZ2h0X29ubHk7Cj4gLQlib29sIGVuY29kZXJf aW5fZHNjX21lcmdlID0gZmFsc2U7Cj4gLQo+IC0JaWYgKCFjcnRjIHx8ICFjcnRjLT5zdGF0ZSkK PiAtCQlyZXR1cm47Cj4gLQo+IC0JZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKPiAtCWNz dGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKPiAtCj4gLQlpZiAoZHB1X2Ny dGMtPm51bV9taXhlcnMgIT0gQ1JUQ19EVUFMX01JWEVSUykKPiAtCQlyZXR1cm47Cj4gLQo+IC0J ZHJtX2Zvcl9lYWNoX2VuY29kZXIoZHJtX2VuYywgY3J0Yy0+ZGV2KSB7Cj4gLQkJaWYgKGRybV9l bmMtPmNydGMgPT0gY3J0YyAmJgo+IC0JCQkJZHB1X2VuY29kZXJfaXNfZHNjX21lcmdlKGRybV9l bmMpKSB7Cj4gLQkJCWVuY29kZXJfaW5fZHNjX21lcmdlID0gdHJ1ZTsKPiAtCQkJYnJlYWs7Cj4g LQkJfQo+IC0JfQo+IC0KPiAtCS8qKgo+IC0JICogRm9yIHJpZ2h0LW9ubHkgcGFydGlhbCB1cGRh dGUgd2l0aCBEU0MgbWVyZ2UsIHdlIHN3YXAgTE0wICYgTE0xLgo+IC0JICogVGhpcyBpcyBkdWUg dG8gdHdvIHJlYXNvbnM6Cj4gLQkgKiAtIE9uIDg5OTYsIHRoZXJlIGlzIGEgRFNDIEhXIHJlcXVp cmVtZW50IHRoYXQgaW4gRFNDIE1lcmdlIE1vZGUsCj4gLQkgKiAgIHRoZSBsZWZ0IERTQyBtdXN0 IGJlIHVzZWQsIHJpZ2h0IERTQyBjYW5ub3QgYmUgdXNlZCBhbG9uZS4KPiAtCSAqICAgRm9yIHJp Z2h0LW9ubHkgcGFydGlhbCB1cGRhdGUsIHRoaXMgbWVhbnMgc3dhcCBsYXllciBtaXhlcnMgdG8g bWFwCj4gLQkgKiAgIExlZnQgTE0gdG8gUmlnaHQgSU5URi4gT24gbGF0ZXIgSFcgdGhpcyB3YXMg cmVsYXhlZC4KPiAtCSAqIC0gSW4gRFNDIE1lcmdlIG1vZGUsIHRoZSBwaHlzaWNhbCBlbmNvZGVy IGhhcyBhbHJlYWR5IHJlZ2lzdGVyZWQKPiAtCSAqICAgUFAwIGFzIHRoZSBtYXN0ZXIsIHRvIHN3 aXRjaCB0byByaWdodC1vbmx5IHdlIHdvdWxkIGhhdmUgdG8KPiAtCSAqICAgcmVwcm9ncmFtIHRv IGJlIGRyaXZlbiBieSBQUDEgaW5zdGVhZC4KPiAtCSAqIFRvIHN1cHBvcnQgYm90aCBjYXNlcywg d2UgcHJlZmVyIHRvIHN1cHBvcnQgdGhlIG1peGVyIHN3YXAgc29sdXRpb24uCj4gLQkgKi8KPiAt CWlmICghZW5jb2Rlcl9pbl9kc2NfbWVyZ2UpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWlzX3JpZ2h0 X29ubHkgPSBkcHVfa21zX3JlY3RfaXNfbnVsbCgmY3N0YXRlLT5sbV9yb2lbMF0pICYmCj4gLQkJ CSFkcHVfa21zX3JlY3RfaXNfbnVsbCgmY3N0YXRlLT5sbV9yb2lbMV0pOwo+IC0KPiAtCWlmIChp c19yaWdodF9vbmx5ICYmICFkcHVfY3J0Yy0+bWl4ZXJzX3N3YXBwZWQpIHsKPiAtCQkvKiByaWdo dC1vbmx5IHVwZGF0ZSBzd2FwIG1peGVycyAqLwo+IC0JCXN3YXAoZHB1X2NydGMtPm1peGVyc1sw XSwgZHB1X2NydGMtPm1peGVyc1sxXSk7Cj4gLQkJZHB1X2NydGMtPm1peGVyc19zd2FwcGVkID0g dHJ1ZTsKPiAtCX0gZWxzZSBpZiAoIWlzX3JpZ2h0X29ubHkgJiYgZHB1X2NydGMtPm1peGVyc19z d2FwcGVkKSB7Cj4gLQkJLyogbGVmdC1vbmx5IG9yIGZ1bGwgdXBkYXRlLCBzd2FwIGJhY2sgKi8K PiAtCQlzd2FwKGRwdV9jcnRjLT5taXhlcnNbMF0sIGRwdV9jcnRjLT5taXhlcnNbMV0pOwo+IC0J CWRwdV9jcnRjLT5taXhlcnNfc3dhcHBlZCA9IGZhbHNlOwo+IC0JfQo+IC0KPiAtCURQVV9ERUJV RygiJXM6IHJpZ2h0X29ubHkgJWQgc3dhcHBlZCAlZCwgbWl4MC0+bG0lZCwgbWl4MS0+bG0lZFxu IiwKPiAtCQkJZHB1X2NydGMtPm5hbWUsIGlzX3JpZ2h0X29ubHksIGRwdV9jcnRjLT5taXhlcnNf c3dhcHBlZCwKPiAtCQkJZHB1X2NydGMtPm1peGVyc1swXS5od19sbS0+aWR4IC0gTE1fMCwKPiAt CQkJZHB1X2NydGMtPm1peGVyc1sxXS5od19sbS0+aWR4IC0gTE1fMCk7Cj4gLQlEUFVfRVZUMzIo RFJNSUQoY3J0YyksIGlzX3JpZ2h0X29ubHksIGRwdV9jcnRjLT5taXhlcnNfc3dhcHBlZCwKPiAt CQkJZHB1X2NydGMtPm1peGVyc1swXS5od19sbS0+aWR4IC0gTE1fMCwKPiAtCQkJZHB1X2NydGMt Pm1peGVyc1sxXS5od19sbS0+aWR4IC0gTE1fMCk7Cj4gKwkgX2RwdV9jcnRjX3Byb2dyYW1fbG1f b3V0cHV0X3JvaShjcnRjKTsKPiAgfQo+ICAKPiAgLyoqCj4gQEAgLTE0NzIsMjcgKzk2OCwxNSBA QCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfYmxlbmRfc2V0dXAoc3RydWN0IGRybV9jcnRjICpjcnRj KQo+ICAJCQlsbS0+b3BzLmNsZWFyX2RpbV9sYXllcihsbSk7Cj4gIAl9Cj4gIAo+IC0JX2RwdV9j cnRjX3N3YXBfbWl4ZXJzX2Zvcl9yaWdodF9wYXJ0aWFsX3VwZGF0ZShjcnRjKTsKPiAtCj4gIAkv KiBpbml0aWFsaXplIHN0YWdlIGNmZyAqLwo+ICAJbWVtc2V0KCZkcHVfY3J0Yy0+c3RhZ2VfY2Zn LCAwLCBzaXplb2Yoc3RydWN0IGRwdV9od19zdGFnZV9jZmcpKTsKPiAgCj4gIAlfZHB1X2NydGNf YmxlbmRfc2V0dXBfbWl4ZXIoY3J0YywgZHB1X2NydGMsIG1peGVyKTsKPiAgCj4gIAlmb3IgKGkg PSAwOyBpIDwgZHB1X2NydGMtPm51bV9taXhlcnM7IGkrKykgewo+IC0JCWNvbnN0IHN0cnVjdCBk cHVfcmVjdCAqbG1fcm9pID0gJmRwdV9jcnRjX3N0YXRlLT5sbV9yb2lbaV07Cj4gLQo+ICAJCWN0 bCA9IG1peGVyW2ldLmh3X2N0bDsKPiAgCQlsbSA9IG1peGVyW2ldLmh3X2xtOwo+ICAKPiAtCQlp ZiAoZHB1X2ttc19yZWN0X2lzX251bGwobG1fcm9pKSkgewo+IC0JCQlEUFVfREVCVUcoCj4gLQkJ CQkiJXM6IGxtJWQgbGVhdmUgY3RsJWQgbWFzayAwIHNpbmNlIG51bGwgcm9pXG4iLAo+IC0JCQkJ CWRwdV9jcnRjLT5uYW1lLCBsbS0+aWR4IC0gTE1fMCwKPiAtCQkJCQljdGwtPmlkeCAtIENUTF8w KTsKPiAtCQkJY29udGludWU7Cj4gLQkJfQo+IC0KPiAgCQlsbS0+b3BzLnNldHVwX2FscGhhX291 dChsbSwgbWl4ZXJbaV0ubWl4ZXJfb3BfbW9kZSk7Cj4gIAo+ICAJCW1peGVyW2ldLmZsdXNoX21h c2sgfD0gY3RsLT5vcHMuZ2V0X2JpdG1hc2tfbWl4ZXIoY3RsLAo+IEBAIC0xNTEwLDggKzk5NCw2 IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ibGVuZF9zZXR1cChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCj4gIAkJY3RsLT5vcHMuc2V0dXBfYmxlbmRzdGFnZShjdGwsIG1peGVyW2ldLmh3X2xtLT5p ZHgsCj4gIAkJCSZkcHVfY3J0Yy0+c3RhZ2VfY2ZnKTsKPiAgCX0KPiAtCj4gLQlfZHB1X2NydGNf cHJvZ3JhbV9sbV9vdXRwdXRfcm9pKGNydGMpOwo+ICB9Cj4gIAo+ICAvKioKPiBAQCAtMjY2NCwx NCArMjE0Niw5IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXR1cF9sbV9ib3VuZHMoc3RydWN0 IGRybV9jcnRjICpjcnRjLAo+ICAJCWNzdGF0ZS0+bG1fYm91bmRzW2ldLncgPSBjcnRjX3NwbGl0 X3dpZHRoOwo+ICAJCWNzdGF0ZS0+bG1fYm91bmRzW2ldLmggPQo+ICAJCQlkcHVfY3J0Y19nZXRf bWl4ZXJfaGVpZ2h0KGRwdV9jcnRjLCBjc3RhdGUsIGFkal9tb2RlKTsKPiAtCQltZW1jcHkoJmNz dGF0ZS0+bG1fcm9pW2ldLCAmY3N0YXRlLT5sbV9ib3VuZHNbaV0sCj4gLQkJCQlzaXplb2YoY3N0 YXRlLT5sbV9yb2lbaV0pKTsKPiAgCQlEUFVfRVZUMzJfVkVSQk9TRShEUk1JRChjcnRjKSwgaSwK PiAgCQkJCWNzdGF0ZS0+bG1fYm91bmRzW2ldLngsIGNzdGF0ZS0+bG1fYm91bmRzW2ldLnksCj4g IAkJCQljc3RhdGUtPmxtX2JvdW5kc1tpXS53LCBjc3RhdGUtPmxtX2JvdW5kc1tpXS5oKTsKPiAt CQlEUFVfREVCVUcoIiVzOiBsbSVkIGJuZCZyb2kgKCVkLCVkLCVkLCVkKVxuIiwgZHB1X2NydGMt Pm5hbWUsIGksCj4gLQkJCQljc3RhdGUtPmxtX3JvaVtpXS54LCBjc3RhdGUtPmxtX3JvaVtpXS55 LAo+IC0JCQkJY3N0YXRlLT5sbV9yb2lbaV0udywgY3N0YXRlLT5sbV9yb2lbaV0uaCk7Cj4gIAl9 Cj4gIAo+ICAJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShhZGpfbW9kZSk7Cj4gQEAgLTMw MTksOCArMjQ5Niw2IEBAIHZvaWQgZHB1X2NydGNfY29tbWl0X2tpY2tvZmYoc3RydWN0IGRybV9j cnRjICpjcnRjKQo+ICAJCSAqIElmIHNvLCBpdCBtYXkgZGVsYXkgYW5kIGZsdXNoIGF0IGFuIGly cSBldmVudCAoZS5nLiBwcGRvbmUpCj4gIAkJICovCj4gIAkJcGFyYW1zLmlubGluZV9yb3RhdGVf cHJlZmlsbCA9IGNzdGF0ZS0+c2J1Zl9wcmVmaWxsX2xpbmU7Cj4gLQkJcGFyYW1zLmFmZmVjdGVk X2Rpc3BsYXlzID0gX2RwdV9jcnRjX2dldF9kaXNwbGF5c19hZmZlY3RlZChjcnRjLAo+IC0JCQkJ Y3J0Yy0+c3RhdGUpOwo+ICAJCWRwdV9lbmNvZGVyX3ByZXBhcmVfZm9yX2tpY2tvZmYoZW5jb2Rl ciwgJnBhcmFtcyk7Cj4gIAo+ICAJCS8qCj4gQEAgLTM5MzEsMTIgKzM0MDYsNiBAQCBzdGF0aWMg aW50IGRwdV9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAkJfQo+ ICAJfQo+ICAKPiAtCXJjID0gX2RwdV9jcnRjX2NoZWNrX3JvaXMoY3J0Yywgc3RhdGUpOwo+IC0J aWYgKHJjKSB7Cj4gLQkJRFBVX0VSUk9SKCJjcnRjJWQgZmFpbGVkIHJvaSBjaGVjayAlZFxuIiwg Y3J0Yy0+YmFzZS5pZCwgcmMpOwo+IC0JCWdvdG8gZW5kOwo+IC0JfQo+IC0KPiAgZW5kOgo+ICAJ X2RwdV9jcnRjX3JwX2ZyZWVfdW51c2VkKCZjc3RhdGUtPnJwKTsKPiAgCXJldHVybiByYzsKPiBA QCAtNDA2Niw5ICszNTM1LDYgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfaW5zdGFsbF9wcm9wZXJ0 aWVzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2Io JmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLCAiY2FwYWJpbGl0aWVzIiwKPiAgCQlEUk1fTU9ERV9Q Uk9QX0lNTVVUQUJMRSwgQ1JUQ19QUk9QX0lORk8pOwo+ICAKPiAtCW1zbV9wcm9wZXJ0eV9pbnN0 YWxsX3ZvbGF0aWxlX3JhbmdlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKPiAtCQkiZHB1X2Ry bV9yb2lfdjEiLCAweDAsIDAsIH4wLCAwLCBDUlRDX1BST1BfUk9JX1YxKTsKPiAtCj4gIAlkcHVf a21zX2luZm9fcmVzZXQoaW5mbyk7Cj4gIAo+ICAJaWYgKGNhdGFsb2ctPmhhc19kaW1fbGF5ZXIp IHsKPiBAQCAtNDIxNywxMCArMzY4Myw2IEBAIHN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX3Nl dF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAkJCQlfZHB1X2NydGNfc2V0X2Rp bV9sYXllcl92MShjc3RhdGUsCj4gIAkJCQkJCQkodm9pZCBfX3VzZXIgKil2YWwpOwo+ICAJCQkJ YnJlYWs7Cj4gLQkJCWNhc2UgQ1JUQ19QUk9QX1JPSV9WMToKPiAtCQkJCXJldCA9IF9kcHVfY3J0 Y19zZXRfcm9pX3YxKHN0YXRlLAo+IC0JCQkJCQkJKHZvaWQgX191c2VyICopdmFsKTsKPiAtCQkJ CWJyZWFrOwo+ICAJCQljYXNlIENSVENfUFJPUF9ERVNUX1NDQUxFUjoKPiAgCQkJCXJldCA9IF9k cHVfY3J0Y19zZXRfZGVzdF9zY2FsZXIoZHB1X2NydGMsCj4gIAkJCQkJCWNzdGF0ZSwgKHZvaWQg X191c2VyICopdmFsKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgK PiBpbmRleCBiNjNkZjI0Li4xNWUzZWI2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfY3J0Yy5oCj4gQEAgLTM0NSwxMyArMzQ1LDggQEAgc3RydWN0IGRwdV9jcnRjX3Jl c3Bvb2wgewo+ICAgKiBAaXNfcHBzcGxpdCAgICA6IFdoZXRoZXIgY3VycmVudCB0b3BvbG9neSBy ZXF1aXJlcyBQUFNwbGl0IHNwZWNpYWwgaGFuZGxpbmcKPiAgICogQGJ3X2NvbnRyb2wgICAgOiB0 cnVlIGlmIGJ3L2NsayBjb250cm9sbGVkIGJ5IGNvcmUgYncvY2xrIHByb3BlcnRpZXMKPiAgICog QGJ3X3NwbGl0X3ZvdGUgOiB0cnVlIGlmIGJ3IGNvbnRyb2xsZWQgYnkgbGxjYy9kcmFtIGJ3IHBy b3BlcnRpZXMKPiAtICogQGNydGNfcm9pICAgICAgOiBDdXJyZW50IENSVEMgUk9JLiBQb3NzaWJs eSBzdWItcmVjdGFuZ2xlIG9mIG1vZGUuCj4gLSAqICAgICAgICAgICAgICAgICAgT3JpZ2luIHRv cCBsZWZ0IG9mIENSVEMuCj4gICAqIEBsbV9ib3VuZHMgICAgIDogTE0gYm91bmRhcmllcyBiYXNl ZCBvbiBjdXJyZW50IG1vZGUgZnVsbCByZXNvbHV0aW9uLCBubyBST0kuCj4gICAqICAgICAgICAg ICAgICAgICAgT3JpZ2luIHRvcCBsZWZ0IG9mIENSVEMuCj4gLSAqIEBsbV9yb2kgICAgICAgIDog Q3VycmVudCBMTSBST0ksIHBvc3NpYmx5IHN1Yi1yZWN0YW5nbGUgb2YgbW9kZS4KPiAtICogICAg ICAgICAgICAgICAgICBPcmlnaW4gdG9wIGxlZnQgb2YgQ1JUQy4KPiAtICogQHVzZXJfcm9pX2xp c3QgOiBMaXN0IG9mIHVzZXIncyByZXF1ZXN0ZWQgUk9JcyBhcyBmcm9tIHNldCBwcm9wZXJ0eQo+ ICAgKiBAcHJvcGVydHlfc3RhdGU6IExvY2FsIHN0b3JhZ2UgZm9yIG1zbV9wcm9wIHByb3BlcnRp ZXMKPiAgICogQHByb3BlcnR5X3ZhbHVlczogQ3VycmVudCBjcnRjIHByb3BlcnR5IHZhbHVlcwo+ ICAgKiBAaW5wdXRfZmVuY2VfdGltZW91dF9ucyA6IENhY2hlZCBpbnB1dCBmZW5jZSB0aW1lb3V0 LCBpbiBucwo+IEBAIC0zNzYsMTAgKzM3MSw3IEBAIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSB7Cj4g IAlib29sIGJ3X3NwbGl0X3ZvdGU7Cj4gIAo+ICAJYm9vbCBpc19wcHNwbGl0Owo+IC0Jc3RydWN0 IGRwdV9yZWN0IGNydGNfcm9pOwo+ICAJc3RydWN0IGRwdV9yZWN0IGxtX2JvdW5kc1tDUlRDX0RV QUxfTUlYRVJTXTsKPiAtCXN0cnVjdCBkcHVfcmVjdCBsbV9yb2lbQ1JUQ19EVUFMX01JWEVSU107 Cj4gLQlzdHJ1Y3QgbXNtX3JvaV9saXN0IHVzZXJfcm9pX2xpc3Q7Cj4gIAo+ICAJc3RydWN0IG1z bV9wcm9wZXJ0eV9zdGF0ZSBwcm9wZXJ0eV9zdGF0ZTsKPiAgCXN0cnVjdCBtc21fcHJvcGVydHlf dmFsdWUgcHJvcGVydHlfdmFsdWVzW0NSVENfUFJPUF9DT1VOVF07Cj4gQEAgLTYwNSwxNCArNTk3 LDQgQEAgaW50IGRwdV9jcnRjX3Jlc19hZGQoc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwg dTMyIHR5cGUsIHU2NCB0YWcsCj4gICAqLwo+ICB2b2lkIGRwdV9jcnRjX3Jlc19wdXQoc3RydWN0 IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwgdTMyIHR5cGUsIHU2NCB0YWcpOwo+ICAKPiAtLyoqCj4g LSAqIGRwdV9jcnRjX2dldF9jcnRjX3JvaSAtIHJldHJpZXZlIHRoZSBjcnRjX3JvaSBmcm9tIHRo ZSBnaXZlbiBzdGF0ZSBvYmplY3QKPiAtICoJdXNlZCB0byBhbGxvdyB0aGUgcGxhbmVzIHRvIGFk anVzdCB0aGVpciBmaW5hbCBsbSBvdXRfeHkgdmFsdWUgaW4gdGhlCj4gLSAqCWNhc2Ugb2YgcGFy dGlhbCB1cGRhdGUKPiAtICogQGNydGNfc3RhdGU6IFBvaW50ZXIgdG8gY3J0YyBzdGF0ZQo+IC0g KiBAY3J0Y19yb2k6IE91dHB1dCBwb2ludGVyIHRvIGNydGMgcm9pIGluIHRoZSBnaXZlbiBzdGF0 ZQo+IC0gKi8KPiAtdm9pZCBkcHVfY3J0Y19nZXRfY3J0Y19yb2koc3RydWN0IGRybV9jcnRjX3N0 YXRlICpzdGF0ZSwKPiAtCQljb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKipjcnRjX3JvaSk7Cj4gLQo+ ICAjZW5kaWYgLyogX0RQVV9DUlRDX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfZW5jb2Rlci5jCj4gaW5kZXggM2QxNjhmYTAuLjY4Y2YxNmEgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKPiBAQCAtMTk1LDggKzE5 NSw2IEBAIGVudW0gZHB1X2VuY19yY19zdGF0ZXMgewo+ICAgKiBAdG9wb2xvZ3k6ICAgICAgICAg ICAgICAgICAgIHRvcG9sb2d5IG9mIHRoZSBkaXNwbGF5Cj4gICAqIEBtb2RlX3NldF9jb21wbGV0 ZTogICAgICAgICAgZmxhZyB0byBpbmRpY2F0ZSBtb2Rlc2V0IGNvbXBsZXRpb24KPiAgICogQHJz Y19jb25maWc6CQkJcnNjIGNvbmZpZ3VyYXRpb24gZm9yIGRpc3BsYXkgdnRvdGFsLCBmcHMsIGV0 Yy4KPiAtICogQGN1cl9jb25uX3JvaToJCWN1cnJlbnQgY29ubmVjdG9yIHJvaQo+IC0gKiBAcHJ2 X2Nvbm5fcm9pOgkJcHJldmlvdXMgY29ubmVjdG9yIHJvaSB0byBvcHRpbWl6ZSBpZiB1bmNoYW5n ZWQKPiAgICogQGlkbGVfdGltZW91dDoJCWlkbGUgdGltZW91dCBkdXJhdGlvbiBpbiBtaWxsaXNl Y29uZHMKPiAgICovCj4gIHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0IHsKPiBAQCAtMjQzLDggKzI0 MSw2IEBAIHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0IHsKPiAgCWJvb2wgbW9kZV9zZXRfY29tcGxl dGU7Cj4gIAo+ICAJc3RydWN0IGRwdV9yc2NfY21kX2NvbmZpZyByc2NfY29uZmlnOwo+IC0Jc3Ry dWN0IGRwdV9yZWN0IGN1cl9jb25uX3JvaTsKPiAtCXN0cnVjdCBkcHVfcmVjdCBwcnZfY29ubl9y b2k7Cj4gIAo+ICAJdTMyIGlkbGVfdGltZW91dDsKPiAgfTsKPiBAQCAtODY4LDE0ICs4NjQsOCBA QCBzdGF0aWMgYm9vbCBfZHB1X2VuY29kZXJfZHNjX2ljaF9yZXNldF9vdmVycmlkZV9uZWVkZWQo Ym9vbCBwdV9lbiwKPiAgCj4gIHN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl9kc2NfcGlwZV9jZmco c3RydWN0IGRwdV9od19kc2MgKmh3X2RzYywKPiAgCQlzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpo d19wcCwgc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvICpkc2MsCj4gLQkJdTMyIGNvbW1vbl9t b2RlLCBib29sIGljaF9yZXNldCwgYm9vbCBlbmFibGUpCj4gKwkJdTMyIGNvbW1vbl9tb2RlLCBi b29sIGljaF9yZXNldCkKPiAgewo+IC0JaWYgKCFlbmFibGUpIHsKPiAtCQlpZiAoaHdfcHAtPm9w cy5kaXNhYmxlX2RzYykKPiAtCQkJaHdfcHAtPm9wcy5kaXNhYmxlX2RzYyhod19wcCk7Cj4gLQkJ cmV0dXJuOwo+IC0JfQo+IC0KPiAgCWlmIChod19kc2MtPm9wcy5kc2NfY29uZmlnKQo+ICAJCWh3 X2RzYy0+b3BzLmRzY19jb25maWcoaHdfZHNjLCBkc2MsIGNvbW1vbl9tb2RlLCBpY2hfcmVzZXQp Owo+ICAKPiBAQCAtODg5LDI3ICs4NzksOSBAQCBzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfZHNj X3BpcGVfY2ZnKHN0cnVjdCBkcHVfaHdfZHNjICpod19kc2MsCj4gIAkJaHdfcHAtPm9wcy5lbmFi bGVfZHNjKGh3X3BwKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX2dldF9j b25uZWN0b3Jfcm9pKAo+IC0JCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jLAo+IC0J CXN0cnVjdCBkcHVfcmVjdCAqbWVyZ2VkX2Nvbm5fcm9pKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqZHJtX2Nvbm47Cj4gLQlzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9zdGF0ZSAqY19zdGF0 ZTsKPiAtCj4gLQlpZiAoIWRwdV9lbmMgfHwgIW1lcmdlZF9jb25uX3JvaSkKPiAtCQlyZXR1cm47 Cj4gLQo+IC0JZHJtX2Nvbm4gPSBkcHVfZW5jLT5waHlzX2VuY3NbMF0tPmNvbm5lY3RvcjsKPiAt Cj4gLQlpZiAoIWRybV9jb25uIHx8ICFkcm1fY29ubi0+c3RhdGUpCj4gLQkJcmV0dXJuOwo+IC0K PiAtCWNfc3RhdGUgPSB0b19kcHVfY29ubmVjdG9yX3N0YXRlKGRybV9jb25uLT5zdGF0ZSk7Cj4g LQlkcHVfa21zX3JlY3RfbWVyZ2VfcmVjdGFuZ2xlcygmY19zdGF0ZS0+cm9pcywgbWVyZ2VkX2Nv bm5fcm9pKTsKPiAtfQo+IC0KPiAgc3RhdGljIGludCBfZHB1X2VuY29kZXJfZHNjX25fbG1fMV9l bmNfMV9pbnRmKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jKQo+ICB7Cj4gKwlpbnQg cGljX3dpZHRoLCBwaWNfaGVpZ2h0Owo+ICAJaW50IHRoaXNfZnJhbWVfc2xpY2VzOwo+ICAJaW50 IGludGZfaXBfdywgZW5jX2lwX3c7Cj4gIAlpbnQgaWNoX3JlcywgZHNjX2NvbW1vbl9tb2RlID0g MDsKPiBAQCAtOTE3LDE4ICs4ODksMjIgQEAgc3RhdGljIGludCBfZHB1X2VuY29kZXJfZHNjX25f bG1fMV9lbmNfMV9pbnRmKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jKQo+ICAJc3Ry dWN0IGRwdV9od19waW5ncG9uZyAqaHdfcHAgPSBkcHVfZW5jLT5od19wcFswXTsKPiAgCXN0cnVj dCBkcHVfaHdfZHNjICpod19kc2MgPSBkcHVfZW5jLT5od19kc2NbMF07Cj4gIAlzdHJ1Y3QgZHB1 X2VuY29kZXJfcGh5cyAqZW5jX21hc3RlciA9IGRwdV9lbmMtPmN1cl9tYXN0ZXI7Cj4gLQljb25z dCBzdHJ1Y3QgZHB1X3JlY3QgKnJvaSA9ICZkcHVfZW5jLT5jdXJfY29ubl9yb2k7Cj4gKwlzdHJ1 Y3QgZHB1X2h3X21kcCAqaHdfbWRwX3RvcCAgPSBlbmNfbWFzdGVyLT5od19tZHB0b3A7Cj4gIAlz dHJ1Y3QgbXNtX2Rpc3BsYXlfZHNjX2luZm8gKmRzYyA9Cj4gIAkJJmRwdV9lbmMtPm1vZGVfaW5m by5jb21wX2luZm8uZHNjX2luZm87Cj4gIAo+IC0JaWYgKGRzYyA9PSBOVUxMIHx8IGh3X2RzYyA9 PSBOVUxMIHx8IGh3X3BwID09IE5VTEwgfHwgIWVuY19tYXN0ZXIpIHsKPiArCWlmIChkc2MgPT0g TlVMTCB8fCBod19kc2MgPT0gTlVMTCB8fCBod19wcCA9PSBOVUxMIHx8Cj4gKwkJCQkJCWh3X21k cF90b3AgPT0gTlVMTCkgewoKSW5kZW50IHNob3VsZCAgbGluZSB1cCB3aXRoIHRoZSBjb25kaXRp b25zIG9uIHRoZSBwcmV2aW91cyBsaW5lLCBpZToKCiAgICAgICAgaWYgKGRzYyA9PSBOVUxMIHx8 IGh3X2RzYyA9PSBOVUxMIHx8IGh3X3BwID09IE5VTEwgfHwKICAgICAgICAgICAgaHdfbWRwX3Rv cCA9PSBOVUxMKSB7CgoKQWxzbywgeCA9PSBOVUxMIGlzIHVubmVjZXNzYXJ5LCBqdXN0IGRvICF4 LiBGaW5hbGx5LCBhcmUgYW55IG9mIHRoZXNlIGNvbmRpdGlvbnMKYWN0dWFsbHkgbGlrZWx5PyBB dCB0aGUgdmVyeSBsZWFzdCwgZHNjIGNhbid0IHBvc3NpYmx5IGJlIE5VTEwuIFRoZXJlIGFyZSBh IGxvdApvZiBmdW5jdGlvbnMgdGhhdCBzdGFydCB3aXRoIE5VTEwgY2hlY2tzIG9uIHRoZSBpbnB1 dCBwb2ludGVycywgYnV0IGl0IHNlZW1zCmxpa2UgYSBsb3Qgb2YgdGhlbSBhcmUgc3VwZXJmbHVv dXMuIEl0IG1pZ2h0IGJlIHRpbWUgdG8gc3RhcnQgdHJpbW1pbmcgdGhlbS4KCgo+ICAJCURQVV9F UlJPUl9FTkMoZHB1X2VuYywgImludmFsaWQgcGFyYW1zIGZvciBEU0NcbiIpOwo+ICAJCXJldHVy biAtRUlOVkFMOwo+ICAJfQo+ICAKPiAtCV9kcHVfZW5jb2Rlcl9kc2NfdXBkYXRlX3BpY19kaW0o ZHNjLCByb2ktPncsIHJvaS0+aCk7Cj4gKwlwaWNfd2lkdGggPSBkc2MtPnBpY193aWR0aDsKPiAr CXBpY19oZWlnaHQgPSBkc2MtPnBpY19oZWlnaHQ7CgpUaGVzZSBsb2NhbHMgYXJlIHVubmVjZXNz YXJ5LCBqdXN0IHVzZSBkc2MtPnBpY18qIGRpcmVjdGx5IGJlbG93Cgo+ICAKPiAtCXRoaXNfZnJh bWVfc2xpY2VzID0gcm9pLT53IC8gZHNjLT5zbGljZV93aWR0aDsKPiArCV9kcHVfZW5jb2Rlcl9k c2NfdXBkYXRlX3BpY19kaW0oZHNjLCBwaWNfd2lkdGgsIHBpY19oZWlnaHQpOwo+ICsKPiArCXRo aXNfZnJhbWVfc2xpY2VzID0gcGljX3dpZHRoIC8gZHNjLT5zbGljZV93aWR0aDsKPiAgCWludGZf aXBfdyA9IHRoaXNfZnJhbWVfc2xpY2VzICogZHNjLT5zbGljZV93aWR0aDsKPiAgCV9kcHVfZW5j b2Rlcl9kc2NfcGNsa19wYXJhbV9jYWxjKGRzYywgaW50Zl9pcF93KTsKPiAgCj4gQEAgLTk0MSwy MDQgKzkxNywxMzMgQEAgc3RhdGljIGludCBfZHB1X2VuY29kZXJfZHNjX25fbG1fMV9lbmNfMV9p bnRmKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jKQo+ICAJCWRzY19jb21tb25fbW9k ZSA9IERTQ19NT0RFX1ZJREVPOwo+ICAKPiAgCURQVV9ERUJVR19FTkMoZHB1X2VuYywgInBpY193 OiAlZCBwaWNfaDogJWQgbW9kZTolZFxuIiwKPiAtCQlyb2ktPncsIHJvaS0+aCwgZHNjX2NvbW1v bl9tb2RlKTsKPiAtCURQVV9FVlQzMihEUk1JRCgmZHB1X2VuYy0+YmFzZSksIHJvaS0+dywgcm9p LT5oLCBkc2NfY29tbW9uX21vZGUpOwo+ICsJCXBpY193aWR0aCwgcGljX2hlaWdodCwgZHNjX2Nv bW1vbl9tb2RlKTsKPiArCURQVV9FVlQzMihEUk1JRCgmZHB1X2VuYy0+YmFzZSksIHBpY193aWR0 aCwgcGljX2hlaWdodCwKPiArCQkJZHNjX2NvbW1vbl9tb2RlKTsKPiAgCj4gIAlfZHB1X2VuY29k ZXJfZHNjX3BpcGVfY2ZnKGh3X2RzYywgaHdfcHAsIGRzYywgZHNjX2NvbW1vbl9tb2RlLAo+IC0J CQlpY2hfcmVzLCB0cnVlKTsKPiArCQkJaWNoX3Jlcyk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0K PiAtCj4gLXN0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY18yX2xtXzJfZW5jXzJfaW50ZihzdHJ1 Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKPiAtCQlzdHJ1Y3QgZHB1X2VuY29kZXJfa2lj a29mZl9wYXJhbXMgKnBhcmFtcykKPiArc3RhdGljIGludCBfZHB1X2VuY29kZXJfZHNjXzJfbG1f Ml9lbmNfMl9pbnRmKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jKQo+ICB7Cj4gKwlp bnQgcGljX3dpZHRoLCBwaWNfaGVpZ2h0Owo+ICAJaW50IHRoaXNfZnJhbWVfc2xpY2VzOwo+ICAJ aW50IGludGZfaXBfdywgZW5jX2lwX3c7Cj4gIAlpbnQgaWNoX3JlcywgZHNjX2NvbW1vbl9tb2Rl Owo+ICAKPiAgCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICplbmNfbWFzdGVyID0gZHB1X2VuYy0+ Y3VyX21hc3RlcjsKPiAtCWNvbnN0IHN0cnVjdCBkcHVfcmVjdCAqcm9pID0gJmRwdV9lbmMtPmN1 cl9jb25uX3JvaTsKPiAtCXN0cnVjdCBkcHVfaHdfZHNjICpod19kc2NbTUFYX0NIQU5ORUxTX1BF Ul9FTkNdOwo+IC0Jc3RydWN0IGRwdV9od19waW5ncG9uZyAqaHdfcHBbTUFYX0NIQU5ORUxTX1BF Ul9FTkNdOwo+IC0Jc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvIGRzY1tNQVhfQ0hBTk5FTFNf UEVSX0VOQ107Cj4gLQlib29sIGhhbGZfcGFuZWxfcGFydGlhbF91cGRhdGU7Cj4gLQlpbnQgaTsK PiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTX1BFUl9FTkM7IGkrKykgewo+IC0J CWh3X3BwW2ldID0gZHB1X2VuYy0+aHdfcHBbaV07Cj4gLQkJaHdfZHNjW2ldID0gZHB1X2VuYy0+ aHdfZHNjW2ldOwo+ICsJc3RydWN0IGRwdV9od19kc2MgKmxfaHdfZHNjID0gZHB1X2VuYy0+aHdf ZHNjWzBdOwo+ICsJc3RydWN0IGRwdV9od19kc2MgKnJfaHdfZHNjID0gZHB1X2VuYy0+aHdfZHNj WzFdOwo+ICsJc3RydWN0IGRwdV9od19waW5ncG9uZyAqbF9od19wcCA9IGRwdV9lbmMtPmh3X3Bw WzBdOwo+ICsJc3RydWN0IGRwdV9od19waW5ncG9uZyAqcl9od19wcCA9IGRwdV9lbmMtPmh3X3Bw WzFdOwo+ICsJc3RydWN0IGRwdV9od19tZHAgKmh3X21kcF90b3AgID0gZW5jX21hc3Rlci0+aHdf bWRwdG9wOwo+ICsJc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvICpkc2MgPQo+ICsJCSZkcHVf ZW5jLT5tb2RlX2luZm8uY29tcF9pbmZvLmRzY19pbmZvOwo+ICAKPiAtCQlpZiAoIWh3X3BwW2ld IHx8ICFod19kc2NbaV0pIHsKPiAtCQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAiaW52YWxpZCBw YXJhbXMgZm9yIERTQ1xuIik7Cj4gLQkJCXJldHVybiAtRUlOVkFMOwo+IC0JCX0KPiArCWlmIChs X2h3X2RzYyA9PSBOVUxMIHx8IHJfaHdfZHNjID09IE5VTEwgfHwgaHdfbWRwX3RvcCA9PSBOVUxM IHx8Cj4gKwkJbF9od19wcCA9PSBOVUxMIHx8IHJfaHdfcHAgPT0gTlVMTCkgewoKU2FtZSBjb21t ZW50IHdydCB0aGUgTlVMTCBjaGVja3MKCj4gKwkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAiaW52 YWxpZCBwYXJhbXMgZm9yIERTQ1xuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gIAl9Cj4gIAo+ IC0JaGFsZl9wYW5lbF9wYXJ0aWFsX3VwZGF0ZSA9Cj4gLQkJCWh3ZWlnaHRfbG9uZyhwYXJhbXMt PmFmZmVjdGVkX2Rpc3BsYXlzKSA9PSAxOwo+IC0KPiAtCWRzY19jb21tb25fbW9kZSA9IDA7Cj4g LQlpZiAoIWhhbGZfcGFuZWxfcGFydGlhbF91cGRhdGUpCj4gLQkJZHNjX2NvbW1vbl9tb2RlIHw9 IERTQ19NT0RFX1NQTElUX1BBTkVMOwo+IC0JaWYgKGVuY19tYXN0ZXItPmludGZfbW9kZSA9PSBJ TlRGX01PREVfVklERU8pCj4gLQkJZHNjX2NvbW1vbl9tb2RlIHw9IERTQ19NT0RFX1ZJREVPOwo+ IC0KPiAtCW1lbWNweSgmZHNjWzBdLCAmZHB1X2VuYy0+bW9kZV9pbmZvLmNvbXBfaW5mby5kc2Nf aW5mbywgc2l6ZW9mKGRzY1swXSkpOwo+IC0JbWVtY3B5KCZkc2NbMV0sICZkcHVfZW5jLT5tb2Rl X2luZm8uY29tcF9pbmZvLmRzY19pbmZvLCBzaXplb2YoZHNjWzFdKSk7Cj4gLQo+IC0JLyoKPiAt CSAqIFNpbmNlIGJvdGggRFNDIHVzZSBzYW1lIHBpYyBkaW1lbnNpb24sIHNldCBzYW1lIHBpYyBk aW1lbnNpb24KPiAtCSAqIHRvIGJvdGggRFNDIHN0cnVjdHVyZXMuCj4gLQkgKi8KPiAtCV9kcHVf ZW5jb2Rlcl9kc2NfdXBkYXRlX3BpY19kaW0oJmRzY1swXSwgcm9pLT53LCByb2ktPmgpOwo+IC0J X2RwdV9lbmNvZGVyX2RzY191cGRhdGVfcGljX2RpbSgmZHNjWzFdLCByb2ktPncsIHJvaS0+aCk7 Cj4gKwlwaWNfd2lkdGggPSBkc2MtPnBpY193aWR0aCAqIGRwdV9lbmMtPmRpc3BsYXlfbnVtX29m X2hfdGlsZXM7Cj4gKwlwaWNfaGVpZ2h0ID0gZHNjLT5waWNfaGVpZ2h0OwoKTm8gbmVlZCBmb3Ig cGljX2hlaWdodAoKPiAgCj4gLQl0aGlzX2ZyYW1lX3NsaWNlcyA9IHJvaS0+dyAvIGRzY1swXS5z bGljZV93aWR0aDsKPiAtCWludGZfaXBfdyA9IHRoaXNfZnJhbWVfc2xpY2VzICogZHNjWzBdLnNs aWNlX3dpZHRoOwo+ICsJX2RwdV9lbmNvZGVyX2RzY191cGRhdGVfcGljX2RpbShkc2MsIHBpY193 aWR0aCwgcGljX2hlaWdodCk7Cj4gIAo+IC0JaWYgKCFoYWxmX3BhbmVsX3BhcnRpYWxfdXBkYXRl KQo+IC0JCWludGZfaXBfdyAvPSAyOwo+ICsJdGhpc19mcmFtZV9zbGljZXMgPSBwaWNfd2lkdGgg LyBkc2MtPnNsaWNlX3dpZHRoOwo+ICsJaW50Zl9pcF93ID0gdGhpc19mcmFtZV9zbGljZXMgKiBk c2MtPnNsaWNlX3dpZHRoOwo+ICAKPiAtCS8qCj4gLQkgKiBJbiB0aGlzIHRvcG9sb2d5IHdoZW4g Ym90aCBpbnRlcmZhY2VzIGFyZSBhY3RpdmUsIHRoZXkgaGF2ZSBzYW1lCj4gLQkgKiBsb2FkIHNv IGludGZfaXBfdyB3aWxsIGJlIHNhbWUuCj4gLQkgKi8KPiAtCV9kcHVfZW5jb2Rlcl9kc2NfcGNs a19wYXJhbV9jYWxjKCZkc2NbMF0sIGludGZfaXBfdyk7Cj4gLQlfZHB1X2VuY29kZXJfZHNjX3Bj bGtfcGFyYW1fY2FsYygmZHNjWzFdLCBpbnRmX2lwX3cpOwo+ICsJaW50Zl9pcF93IC89IDI7Cj4g KwlfZHB1X2VuY29kZXJfZHNjX3BjbGtfcGFyYW1fY2FsYyhkc2MsIGludGZfaXBfdyk7Cj4gIAo+ IC0JLyoKPiAtCSAqIEluIHRoaXMgdG9wb2xvZ3ksIHNpbmNlIHRoZXJlIGlzIG5vIGRzY19tZXJn ZSwgdW5jb21wcmVzc2VkIGlucHV0Cj4gLQkgKiB0byBlbmNvZGVyIGFuZCBpbnRlcmZhY2UgaXMg c2FtZS4KPiAtCSAqLwo+ICAJZW5jX2lwX3cgPSBpbnRmX2lwX3c7Cj4gLQlfZHB1X2VuY29kZXJf ZHNjX2luaXRpYWxfbGluZV9jYWxjKCZkc2NbMF0sIGVuY19pcF93KTsKPiAtCV9kcHVfZW5jb2Rl cl9kc2NfaW5pdGlhbF9saW5lX2NhbGMoJmRzY1sxXSwgZW5jX2lwX3cpOwo+ICsJX2RwdV9lbmNv ZGVyX2RzY19pbml0aWFsX2xpbmVfY2FsYyhkc2MsIGVuY19pcF93KTsKPiAgCj4gLQkvKgo+IC0J ICogX19pc19pY2hfcmVzZXRfb3ZlcnJpZGVfbmVlZGVkIHNob3VsZCBiZSBjYWxsZWQgb25seSBh ZnRlcgo+IC0JICogdXBkYXRpbmcgcGljIGRpbWVuc2lvbiwgbWRzc19wYW5lbF9kc2NfdXBkYXRl X3BpY19kaW0uCj4gLQkgKi8KPiAtCWljaF9yZXMgPSBfZHB1X2VuY29kZXJfZHNjX2ljaF9yZXNl dF9vdmVycmlkZV9uZWVkZWQoCj4gLQkJCWhhbGZfcGFuZWxfcGFydGlhbF91cGRhdGUsICZkc2Nb MF0pOwo+ICsJaWNoX3JlcyA9IF9kcHVfZW5jb2Rlcl9kc2NfaWNoX3Jlc2V0X292ZXJyaWRlX25l ZWRlZChmYWxzZSwgZHNjKTsKPiAgCj4gLQlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJwaWNfdzog JWQgcGljX2g6ICVkIG1vZGU6JWRcbiIsCj4gLQkJCXJvaS0+dywgcm9pLT5oLCBkc2NfY29tbW9u X21vZGUpOwo+ICsJZHNjX2NvbW1vbl9tb2RlID0gRFNDX01PREVfU1BMSVRfUEFORUw7Cj4gKwlp ZiAoZW5jX21hc3Rlci0+aW50Zl9tb2RlID09IElOVEZfTU9ERV9WSURFTykKPiArCQlkc2NfY29t bW9uX21vZGUgfD0gRFNDX01PREVfVklERU87Cj4gIAo+IC0JZm9yIChpID0gMDsgaSA8IGRwdV9l bmMtPm51bV9waHlzX2VuY3M7IGkrKykgewo+IC0JCWJvb2wgYWN0aXZlID0gISEoKDEgPDwgaSkg JiBwYXJhbXMtPmFmZmVjdGVkX2Rpc3BsYXlzKTsKPiArCURQVV9ERUJVR19FTkMoZHB1X2VuYywg InBpY193OiAlZCBwaWNfaDogJWQgbW9kZTolZFxuIiwKPiArCQlwaWNfd2lkdGgsIHBpY19oZWln aHQsIGRzY19jb21tb25fbW9kZSk7Cj4gKwlEUFVfRVZUMzIoRFJNSUQoJmRwdV9lbmMtPmJhc2Up LCBwaWNfd2lkdGgsIHBpY19oZWlnaHQsCj4gKwkJCWRzY19jb21tb25fbW9kZSk7Cj4gIAo+IC0J CURQVV9FVlQzMihEUk1JRCgmZHB1X2VuYy0+YmFzZSksIHJvaS0+dywgcm9pLT5oLAo+IC0JCQkJ ZHNjX2NvbW1vbl9tb2RlLCBpLCBhY3RpdmUpOwo+IC0JCV9kcHVfZW5jb2Rlcl9kc2NfcGlwZV9j ZmcoaHdfZHNjW2ldLCBod19wcFtpXSwgJmRzY1tpXSwKPiAtCQkJCWRzY19jb21tb25fbW9kZSwg aWNoX3JlcywgYWN0aXZlKTsKPiAtCX0KPiArCV9kcHVfZW5jb2Rlcl9kc2NfcGlwZV9jZmcobF9o d19kc2MsIGxfaHdfcHAsIGRzYywgZHNjX2NvbW1vbl9tb2RlLAo+ICsJCQlpY2hfcmVzKTsKPiAr CV9kcHVfZW5jb2Rlcl9kc2NfcGlwZV9jZmcocl9od19kc2MsIHJfaHdfcHAsIGRzYywgZHNjX2Nv bW1vbl9tb2RlLAo+ICsJCQlpY2hfcmVzKTsKPiAgCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAt c3RhdGljIGludCBfZHB1X2VuY29kZXJfZHNjXzJfbG1fMl9lbmNfMV9pbnRmKHN0cnVjdCBkcHVf ZW5jb2Rlcl92aXJ0ICpkcHVfZW5jLAo+IC0JCXN0cnVjdCBkcHVfZW5jb2Rlcl9raWNrb2ZmX3Bh cmFtcyAqcGFyYW1zKQo+ICtzdGF0aWMgaW50IF9kcHVfZW5jb2Rlcl9kc2NfMl9sbV8yX2VuY18x X2ludGYoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMpCj4gIHsKPiArCWludCBwaWNf d2lkdGgsIHBpY19oZWlnaHQ7Cj4gIAlpbnQgdGhpc19mcmFtZV9zbGljZXM7Cj4gIAlpbnQgaW50 Zl9pcF93LCBlbmNfaXBfdzsKPiAgCWludCBpY2hfcmVzLCBkc2NfY29tbW9uX21vZGU7Cj4gIAo+ ICAJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKmVuY19tYXN0ZXIgPSBkcHVfZW5jLT5jdXJfbWFz dGVyOwo+IC0JY29uc3Qgc3RydWN0IGRwdV9yZWN0ICpyb2kgPSAmZHB1X2VuYy0+Y3VyX2Nvbm5f cm9pOwo+IC0Jc3RydWN0IGRwdV9od19kc2MgKmh3X2RzY1tNQVhfQ0hBTk5FTFNfUEVSX0VOQ107 Cj4gLQlzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpod19wcFtNQVhfQ0hBTk5FTFNfUEVSX0VOQ107 Cj4gKwlzdHJ1Y3QgZHB1X2h3X2RzYyAqbF9od19kc2MgPSBkcHVfZW5jLT5od19kc2NbMF07Cj4g KwlzdHJ1Y3QgZHB1X2h3X2RzYyAqcl9od19kc2MgPSBkcHVfZW5jLT5od19kc2NbMV07Cj4gKwlz dHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpsX2h3X3BwID0gZHB1X2VuYy0+aHdfcHBbMF07Cj4gKwlz dHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpyX2h3X3BwID0gZHB1X2VuYy0+aHdfcHBbMV07Cj4gKwlz dHJ1Y3QgZHB1X2h3X21kcCAqaHdfbWRwX3RvcCAgPSBlbmNfbWFzdGVyLT5od19tZHB0b3A7Cj4g IAlzdHJ1Y3QgbXNtX2Rpc3BsYXlfZHNjX2luZm8gKmRzYyA9Cj4gIAkJJmRwdV9lbmMtPm1vZGVf aW5mby5jb21wX2luZm8uZHNjX2luZm87Cj4gLQlib29sIGhhbGZfcGFuZWxfcGFydGlhbF91cGRh dGU7Cj4gLQlpbnQgaTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTX1BFUl9F TkM7IGkrKykgewo+IC0JCWh3X3BwW2ldID0gZHB1X2VuYy0+aHdfcHBbaV07Cj4gLQkJaHdfZHNj W2ldID0gZHB1X2VuYy0+aHdfZHNjW2ldOwo+ICAKPiAtCQlpZiAoIWh3X3BwW2ldIHx8ICFod19k c2NbaV0pIHsKPiAtCQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAiaW52YWxpZCBwYXJhbXMgZm9y IERTQ1xuIik7Cj4gLQkJCXJldHVybiAtRUlOVkFMOwo+IC0JCX0KPiArCWlmIChsX2h3X2RzYyA9 PSBOVUxMIHx8IHJfaHdfZHNjID09IE5VTEwgfHwgaHdfbWRwX3RvcCA9PSBOVUxMIHx8Cj4gKwkJ CQkJbF9od19wcCA9PSBOVUxMIHx8IHJfaHdfcHAgPT0gTlVMTCkgewoKU2FtZSBjb21tZW50cyBo ZXJlLiBIb3cgbGlrZWx5IGlzIGl0IHRoYXQgdGhlc2UgY2FuIGJlIE5VTEw/Cgo+ICsJCURQVV9F UlJPUl9FTkMoZHB1X2VuYywgImludmFsaWQgcGFyYW1zIGZvciBEU0NcbiIpOwo+ICsJCXJldHVy biAtRUlOVkFMOwo+ICAJfQo+ICAKPiAtCWhhbGZfcGFuZWxfcGFydGlhbF91cGRhdGUgPQo+IC0J CQlod2VpZ2h0X2xvbmcocGFyYW1zLT5hZmZlY3RlZF9kaXNwbGF5cykgPT0gMTsKPiAtCj4gLQlk c2NfY29tbW9uX21vZGUgPSAwOwo+IC0JaWYgKCFoYWxmX3BhbmVsX3BhcnRpYWxfdXBkYXRlKQo+ IC0JCWRzY19jb21tb25fbW9kZSB8PSBEU0NfTU9ERV9TUExJVF9QQU5FTCB8IERTQ19NT0RFX01V TFRJUExFWDsKPiAtCWlmIChlbmNfbWFzdGVyLT5pbnRmX21vZGUgPT0gSU5URl9NT0RFX1ZJREVP KQo+IC0JCWRzY19jb21tb25fbW9kZSB8PSBEU0NfTU9ERV9WSURFTzsKPiAtCj4gLQlfZHB1X2Vu Y29kZXJfZHNjX3VwZGF0ZV9waWNfZGltKGRzYywgcm9pLT53LCByb2ktPmgpOwo+ICsJcGljX3dp ZHRoID0gZHNjLT5waWNfd2lkdGg7Cj4gKwlwaWNfaGVpZ2h0ID0gZHNjLT5waWNfaGVpZ2h0Owo+ ICsJX2RwdV9lbmNvZGVyX2RzY191cGRhdGVfcGljX2RpbShkc2MsIHBpY193aWR0aCwgcGljX2hl aWdodCk7Cj4gIAo+IC0JdGhpc19mcmFtZV9zbGljZXMgPSByb2ktPncgLyBkc2MtPnNsaWNlX3dp ZHRoOwo+ICsJdGhpc19mcmFtZV9zbGljZXMgPSBwaWNfd2lkdGggLyBkc2MtPnNsaWNlX3dpZHRo Owo+ICAJaW50Zl9pcF93ID0gdGhpc19mcmFtZV9zbGljZXMgKiBkc2MtPnNsaWNlX3dpZHRoOwo+ ICAJX2RwdV9lbmNvZGVyX2RzY19wY2xrX3BhcmFtX2NhbGMoZHNjLCBpbnRmX2lwX3cpOwo+ICAK PiAgCS8qCj4gLQkgKiBkc2MgbWVyZ2UgY2FzZTogd2hlbiB1c2luZyAyIGVuY29kZXJzIGZvciB0 aGUgc2FtZSBzdHJlYW0sCj4gLQkgKiBuby4gb2Ygc2xpY2VzIG5lZWQgdG8gYmUgc2FtZSBvbiBi b3RoIHRoZSBlbmNvZGVycy4KPiArCSAqIHdoZW4gdXNpbmcgMiBlbmNvZGVycyBmb3IgdGhlIHNh bWUgc3RyZWFtLCBuby4gb2Ygc2xpY2VzCj4gKwkgKiBuZWVkIHRvIGJlIHNhbWUgb24gYm90aCB0 aGUgZW5jb2RlcnMuCj4gIAkgKi8KPiAgCWVuY19pcF93ID0gaW50Zl9pcF93IC8gMjsKPiAgCV9k cHVfZW5jb2Rlcl9kc2NfaW5pdGlhbF9saW5lX2NhbGMoZHNjLCBlbmNfaXBfdyk7Cj4gIAo+IC0J aWNoX3JlcyA9IF9kcHVfZW5jb2Rlcl9kc2NfaWNoX3Jlc2V0X292ZXJyaWRlX25lZWRlZCgKPiAt CQkJaGFsZl9wYW5lbF9wYXJ0aWFsX3VwZGF0ZSwgZHNjKTsKPiAtCj4gLQlEUFVfREVCVUdfRU5D KGRwdV9lbmMsICJwaWNfdzogJWQgcGljX2g6ICVkIG1vZGU6JWRcbiIsCj4gLQkJCXJvaS0+dywg cm9pLT5oLCBkc2NfY29tbW9uX21vZGUpOwo+IC0JRFBVX0VWVDMyKERSTUlEKCZkcHVfZW5jLT5i YXNlKSwgcm9pLT53LCByb2ktPmgsCj4gLQkJCWRzY19jb21tb25fbW9kZSwgaSwgcGFyYW1zLT5h ZmZlY3RlZF9kaXNwbGF5cyk7Cj4gLQo+IC0JX2RwdV9lbmNvZGVyX2RzY19waXBlX2NmZyhod19k c2NbMF0sIGh3X3BwWzBdLCBkc2MsIGRzY19jb21tb25fbW9kZSwKPiAtCQkJaWNoX3JlcywgdHJ1 ZSk7Cj4gLQlfZHB1X2VuY29kZXJfZHNjX3BpcGVfY2ZnKGh3X2RzY1sxXSwgaHdfcHBbMV0sIGRz YywgZHNjX2NvbW1vbl9tb2RlLAo+IC0JCQlpY2hfcmVzLCAhaGFsZl9wYW5lbF9wYXJ0aWFsX3Vw ZGF0ZSk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgX2RwdV9lbmNv ZGVyX3VwZGF0ZV9yb2koc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQo+IC17Cj4gLQlzdHJ1 Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYzsKPiAtCXN0cnVjdCBkcm1fY29ubmVjdG9yICpk cm1fY29ubjsKPiAtCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGpfbW9kZTsKPiAtCXN0cnVj dCBkcHVfcmVjdCByb2k7Cj4gLQo+IC0JaWYgKCFkcm1fZW5jIHx8ICFkcm1fZW5jLT5jcnRjIHx8 ICFkcm1fZW5jLT5jcnRjLT5zdGF0ZSkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCWRwdV9lbmMg PSB0b19kcHVfZW5jb2Rlcl92aXJ0KGRybV9lbmMpOwo+IC0KPiAtCWlmICghZHB1X2VuYy0+Y3Vy X21hc3RlcikKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiArCWljaF9yZXMgPSBfZHB1X2VuY29kZXJf ZHNjX2ljaF9yZXNldF9vdmVycmlkZV9uZWVkZWQoZmFsc2UsIGRzYyk7Cj4gIAo+IC0JYWRqX21v ZGUgPSAmZHB1X2VuYy0+YmFzZS5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKPiAtCWRybV9j b25uID0gZHB1X2VuYy0+Y3VyX21hc3Rlci0+Y29ubmVjdG9yOwo+ICsJZHNjX2NvbW1vbl9tb2Rl ID0gRFNDX01PREVfTVVMVElQTEVYIHwgRFNDX01PREVfU1BMSVRfUEFORUw7Cj4gKwlpZiAoZW5j X21hc3Rlci0+aW50Zl9tb2RlID09IElOVEZfTU9ERV9WSURFTykKPiArCQlkc2NfY29tbW9uX21v ZGUgfD0gRFNDX01PREVfVklERU87Cj4gIAo+IC0JX2RwdV9lbmNvZGVyX2dldF9jb25uZWN0b3Jf cm9pKGRwdV9lbmMsICZyb2kpOwo+IC0JaWYgKGRwdV9rbXNfcmVjdF9pc19udWxsKCZyb2kpKSB7 Cj4gLQkJcm9pLncgPSBhZGpfbW9kZS0+aGRpc3BsYXk7Cj4gLQkJcm9pLmggPSBhZGpfbW9kZS0+ dmRpc3BsYXk7Cj4gLQl9Cj4gKwlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJwaWNfdzogJWQgcGlj X2g6ICVkIG1vZGU6JWRcbiIsCj4gKwkJcGljX3dpZHRoLCBwaWNfaGVpZ2h0LCBkc2NfY29tbW9u X21vZGUpOwo+ICsJRFBVX0VWVDMyKERSTUlEKCZkcHVfZW5jLT5iYXNlKSwgcGljX3dpZHRoLCBw aWNfaGVpZ2h0LAo+ICsJCQlkc2NfY29tbW9uX21vZGUpOwo+ICAKPiAtCW1lbWNweSgmZHB1X2Vu Yy0+cHJ2X2Nvbm5fcm9pLCAmZHB1X2VuYy0+Y3VyX2Nvbm5fcm9pLAo+IC0JCQlzaXplb2YoZHB1 X2VuYy0+cHJ2X2Nvbm5fcm9pKSk7Cj4gLQltZW1jcHkoJmRwdV9lbmMtPmN1cl9jb25uX3JvaSwg JnJvaSwgc2l6ZW9mKGRwdV9lbmMtPmN1cl9jb25uX3JvaSkpOwo+ICsJX2RwdV9lbmNvZGVyX2Rz Y19waXBlX2NmZyhsX2h3X2RzYywgbF9od19wcCwgZHNjLCBkc2NfY29tbW9uX21vZGUsCj4gKwkJ CWljaF9yZXMpOwo+ICsJX2RwdV9lbmNvZGVyX2RzY19waXBlX2NmZyhyX2h3X2RzYywgcl9od19w cCwgZHNjLCBkc2NfY29tbW9uX21vZGUsCj4gKwkJCWljaF9yZXMpOwo+ICAKPiAgCXJldHVybiAw Owo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50IF9kcHVfZW5jb2Rlcl9kc2Nfc2V0dXAoc3RydWN0IGRw dV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCj4gLQkJc3RydWN0IGRwdV9lbmNvZGVyX2tpY2tvZmZf cGFyYW1zICpwYXJhbXMpCj4gK3N0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY19zZXR1cChzdHJ1 Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYykKPiAgewo+ICAJZW51bSBkcHVfcm1fdG9wb2xv Z3lfbmFtZSB0b3BvbG9neTsKPiAgCXN0cnVjdCBkcm1fY29ubmVjdG9yICpkcm1fY29ubjsKPiAg CWludCByZXQgPSAwOwo+ICAKPiAtCWlmICghZHB1X2VuYyB8fCAhcGFyYW1zIHx8ICFkcHVfZW5j LT5waHlzX2VuY3NbMF0gfHwKPiArCWlmICghZHB1X2VuYyB8fCAhZHB1X2VuYy0+cGh5c19lbmNz WzBdIHx8Cj4gIAkJCSFkcHVfZW5jLT5waHlzX2VuY3NbMF0tPmNvbm5lY3RvcikKPiAgCQlyZXR1 cm4gLUVJTlZBTDsKPiAgCj4gQEAgLTExNTMsMjAgKzEwNTgsMTYgQEAgc3RhdGljIGludCBfZHB1 X2VuY29kZXJfZHNjX3NldHVwKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jLAo+ICAJ RFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAidG9wb2xvZ3k6JWRcbiIsIHRvcG9sb2d5KTsKPiAgCURQ VV9FVlQzMihEUk1JRCgmZHB1X2VuYy0+YmFzZSkpOwo+ICAKPiAtCWlmIChkcHVfa21zX3JlY3Rf aXNfZXF1YWwoJmRwdV9lbmMtPmN1cl9jb25uX3JvaSwKPiAtCQkJJmRwdV9lbmMtPnBydl9jb25u X3JvaSkpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gIAlzd2l0Y2ggKHRvcG9sb2d5KSB7Cj4gIAlj YXNlIERQVV9STV9UT1BPTE9HWV9TSU5HTEVQSVBFX0RTQzoKPiAgCWNhc2UgRFBVX1JNX1RPUE9M T0dZX0RVQUxQSVBFXzNETUVSR0VfRFNDOgo+ICAJCXJldCA9IF9kcHVfZW5jb2Rlcl9kc2Nfbl9s bV8xX2VuY18xX2ludGYoZHB1X2VuYyk7Cj4gIAkJYnJlYWs7Cj4gIAljYXNlIERQVV9STV9UT1BP TE9HWV9EVUFMUElQRV9EU0NNRVJHRToKPiAtCQlyZXQgPSBfZHB1X2VuY29kZXJfZHNjXzJfbG1f Ml9lbmNfMV9pbnRmKGRwdV9lbmMsIHBhcmFtcyk7Cj4gKwkJcmV0ID0gX2RwdV9lbmNvZGVyX2Rz Y18yX2xtXzJfZW5jXzFfaW50ZihkcHVfZW5jKTsKPiAgCQlicmVhazsKPiAgCWNhc2UgRFBVX1JN X1RPUE9MT0dZX0RVQUxQSVBFX0RTQzoKPiAtCQlyZXQgPSBfZHB1X2VuY29kZXJfZHNjXzJfbG1f Ml9lbmNfMl9pbnRmKGRwdV9lbmMsIHBhcmFtcyk7Cj4gKwkJcmV0ID0gX2RwdV9lbmNvZGVyX2Rz Y18yX2xtXzJfZW5jXzJfaW50ZihkcHVfZW5jKTsKPiAgCQlicmVhazsKPiAgCWRlZmF1bHQ6Cj4g IAkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAiTm8gRFNDIHN1cHBvcnQgZm9yIHRvcG9sb2d5ICVk IiwKPiBAQCAtMjA3Myw5ICsxOTc0LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX3ZpcnRf ZW5hYmxlX2hlbHBlcihzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCj4gIAkJCQlkcHVfa21z LT5jYXRhbG9nKTsKPiAgCj4gIAlfZHB1X2VuY29kZXJfdXBkYXRlX3ZzeW5jX3NvdXJjZShkcHVf ZW5jLCAmZHB1X2VuYy0+ZGlzcF9pbmZvLCBmYWxzZSk7Cj4gLQo+IC0JbWVtc2V0KCZkcHVfZW5j LT5wcnZfY29ubl9yb2ksIDAsIHNpemVvZihkcHVfZW5jLT5wcnZfY29ubl9yb2kpKTsKPiAtCW1l bXNldCgmZHB1X2VuYy0+Y3VyX2Nvbm5fcm9pLCAwLCBzaXplb2YoZHB1X2VuYy0+Y3VyX2Nvbm5f cm9pKSk7Cj4gIH0KPiAgCj4gIHZvaWQgZHB1X2VuY29kZXJfdmlydF9yZXN0b3JlKHN0cnVjdCBk cm1fZW5jb2RlciAqZHJtX2VuYykKPiBAQCAtMzA1Myw4ICsyOTUxLDYgQEAgdm9pZCBkcHVfZW5j b2Rlcl9wcmVwYXJlX2Zvcl9raWNrb2ZmKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKPiAg Cj4gIAlfZHB1X2VuY29kZXJfdXBkYXRlX21hc3Rlcihkcm1fZW5jLCBwYXJhbXMpOwo+ICAKPiAt CV9kcHVfZW5jb2Rlcl91cGRhdGVfcm9pKGRybV9lbmMpOwo+IC0KPiAgCWlmIChkcHVfZW5jLT5j dXJfbWFzdGVyICYmIGRwdV9lbmMtPmN1cl9tYXN0ZXItPmNvbm5lY3Rvcikgewo+ICAJCXJjID0g ZHB1X2Nvbm5lY3Rvcl9wcmVfa2lja29mZihkcHVfZW5jLT5jdXJfbWFzdGVyLT5jb25uZWN0b3Ip Owo+ICAJCWlmIChyYykKPiBAQCAtMzA2NCw3ICsyOTYwLDcgQEAgdm9pZCBkcHVfZW5jb2Rlcl9w cmVwYXJlX2Zvcl9raWNrb2ZmKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKPiAgCX0KPiAg Cj4gIAlpZiAoZHB1X2VuY29kZXJfaXNfZHNjX2VuYWJsZWQoZHJtX2VuYykpIHsKPiAtCQlyYyA9 IF9kcHVfZW5jb2Rlcl9kc2Nfc2V0dXAoZHB1X2VuYywgcGFyYW1zKTsKPiArCQlyYyA9IF9kcHVf ZW5jb2Rlcl9kc2Nfc2V0dXAoZHB1X2VuYyk7Cj4gIAkJaWYgKHJjKQo+ICAJCQlEUFVfRVJST1Jf RU5DKGRwdV9lbmMsICJmYWlsZWQgdG8gc2V0dXAgRFNDOiAlZFxuIiwgcmMpOwo+ICAJfQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5j IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYwo+IGluZGV4 IDI4OWI5ZmYuLmJhZGU3MmUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2NhdGFsb2cuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19jYXRhbG9nLmMKPiBAQCAtMjAxMyw2ICsyMDEzLDcgQEAgc3RhdGljIGludCBk cHVfZHNwcF9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAo+ICAJaWYgKHJjKQo+ICAJ CWdvdG8gZW5kOwo+ICAKPiArI2lmZGVmIENPTkZJR19EUFVfQUQ0Cj4gIAkvKiBQYXJzZSBBRCBk dHNpIGVudHJpZXMgKi8KPiAgCWFkX3Byb3BfdmFsdWUgPSBrY2FsbG9jKEFEX1BST1BfTUFYLAo+ ICAJCQlzaXplb2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwgR0ZQX0tFUk5FTCk7Cj4gQEAgLTIw MjgsNiArMjAyOSw3IEBAIHN0YXRpYyBpbnQgZHB1X2RzcHBfcGFyc2VfZHQoc3RydWN0IGRldmlj ZV9ub2RlICpucCwKPiAgCQlhZF9wcm9wX2V4aXN0cywgYWRfcHJvcF92YWx1ZSk7Cj4gIAlpZiAo cmMpCj4gIAkJZ290byBlbmQ7Cj4gKyNlbmRpZgo+ICAKPiAgCS8qIGdldCBEU1BQIGZlYXR1cmUg ZHQgcHJvcGVydGllcyBpZiB0aGV5IGV4aXN0ICovCj4gIAlzbnAgPSBvZl9nZXRfY2hpbGRfYnlf bmFtZShucCwgZHNwcF9wcm9wW0RTUFBfQkxPQ0tTXS5wcm9wX25hbWUpOwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmggYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmgKPiBpbmRleCA2MmU3YzVjLi5kMTFmYjFkIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuaAo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuaAo+IEBAIC00NTQsMTQgKzQ1 NCw2IEBAIHZvaWQgZHB1X2ttc19yZWN0X2ludGVyc2VjdChjb25zdCBzdHJ1Y3QgZHB1X3JlY3Qg KnIxLAo+ICAJCXN0cnVjdCBkcHVfcmVjdCAqcmVzdWx0KTsKPiAgCj4gIC8qKgo+IC0gKiBkcHVf a21zX3JlY3RfbWVyZ2VfcmVjdGFuZ2xlcyAtIG1lcmdlIGEgcmVjdGFuZ2xlIGxpc3QgaW50byBv bmUgcmVjdAo+IC0gKiBAcm9pczogcG9pbnRlciB0byB0aGUgbGlzdCBvZiByb2lzCj4gLSAqIEBy ZXN1bHQ6IG91dHB1dCByZWN0YW5nbGUsIGFsbCAwIG9uIGVycm9yCj4gLSAqLwo+IC12b2lkIGRw dV9rbXNfcmVjdF9tZXJnZV9yZWN0YW5nbGVzKGNvbnN0IHN0cnVjdCBtc21fcm9pX2xpc3QgKnJv aXMsCj4gLQkJc3RydWN0IGRwdV9yZWN0ICpyZXN1bHQpOwo+IC0KPiAtLyoqCj4gICAqIGRwdV9r bXNfcmVjdF9pc19lcXVhbCAtIGNvbXBhcmVzIHR3byByZWN0cwo+ICAgKiBAcjE6IHJlY3QgdmFs dWUgdG8gY29tcGFyZQo+ICAgKiBAcjI6IHJlY3QgdmFsdWUgdG8gY29tcGFyZQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zX3V0aWxzLmMgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zX3V0aWxzLmMKPiBpbmRleCAwMDZkN2Fk Li40MGUwMTYyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9rbXNfdXRpbHMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9r bXNfdXRpbHMuYwo+IEBAIC0xNzYsNDUgKzE3NiwzIEBAIHZvaWQgZHB1X2ttc19yZWN0X2ludGVy c2VjdChjb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKnIxLAo+ICAJfQo+ICB9Cj4gIAo+IC12b2lkIGRw dV9rbXNfcmVjdF9tZXJnZV9yZWN0YW5nbGVzKGNvbnN0IHN0cnVjdCBtc21fcm9pX2xpc3QgKnJv aXMsCj4gLQkJc3RydWN0IGRwdV9yZWN0ICpyZXN1bHQpCj4gLXsKPiAtCXN0cnVjdCBkcm1fY2xp cF9yZWN0IGNsaXA7Cj4gLQljb25zdCBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqcm9pX3JlY3Q7Cj4g LQlpbnQgaTsKPiAtCj4gLQlpZiAoIXJvaXMgfHwgIXJlc3VsdCkKPiAtCQlyZXR1cm47Cj4gLQo+ IC0JbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKCpyZXN1bHQpKTsKPiAtCj4gLQkvKiBpbml0IHRv IGludmFsaWQgcmFuZ2UgbWF4ZXMgKi8KPiAtCWNsaXAueDEgPSB+MDsKPiAtCWNsaXAueTEgPSB+ MDsKPiAtCWNsaXAueDIgPSAwOwo+IC0JY2xpcC55MiA9IDA7Cj4gLQo+IC0JLyogYWdncmVnYXRl IGFsbCBjbGlwcGluZyByZWN0YW5nbGVzIHRvZ2V0aGVyIGZvciBvdmVyYWxsIHJvaSAqLwo+IC0J Zm9yIChpID0gMDsgaSA8IHJvaXMtPm51bV9yZWN0czsgaSsrKSB7Cj4gLQkJcm9pX3JlY3QgPSAm cm9pcy0+cm9pW2ldOwo+IC0KPiAtCQljbGlwLngxID0gbWluKGNsaXAueDEsIHJvaV9yZWN0LT54 MSk7Cj4gLQkJY2xpcC55MSA9IG1pbihjbGlwLnkxLCByb2lfcmVjdC0+eTEpOwo+IC0JCWNsaXAu eDIgPSBtYXgoY2xpcC54Miwgcm9pX3JlY3QtPngyKTsKPiAtCQljbGlwLnkyID0gbWF4KGNsaXAu eTIsIHJvaV9yZWN0LT55Mik7Cj4gLQo+IC0JCURQVV9ERUJVRygicm9pJWQgKCVkLCVkKSwoJWQs JWQpIC0+IGNydGMgKCVkLCVkKSwoJWQsJWQpXG4iLCBpLAo+IC0JCQkJcm9pX3JlY3QtPngxLCBy b2lfcmVjdC0+eTEsCj4gLQkJCQlyb2lfcmVjdC0+eDIsIHJvaV9yZWN0LT55MiwKPiAtCQkJCWNs aXAueDEsIGNsaXAueTEsCj4gLQkJCQljbGlwLngyLCBjbGlwLnkyKTsKPiAtCX0KPiAtCj4gLQlp ZiAoY2xpcC54MiAgJiYgY2xpcC55Mikgewo+IC0JCXJlc3VsdC0+eCA9IGNsaXAueDE7Cj4gLQkJ cmVzdWx0LT55ID0gY2xpcC55MTsKPiAtCQlyZXN1bHQtPncgPSBjbGlwLngyIC0gY2xpcC54MTsK PiAtCQlyZXN1bHQtPmggPSBjbGlwLnkyIC0gY2xpcC55MTsKPiAtCX0KPiAtfQo+IC0KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYwo+IGluZGV4IDgzNGRjYzAuLjll OWM5ZDIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3Bs YW5lLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYwo+ IEBAIC0zMjQzLDcgKzMyNDMsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY191 cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7 Cj4gIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiAgCXN0cnVjdCBkcHVfcmVjdCBzcmMs IGRzdDsKPiAtCWNvbnN0IHN0cnVjdCBkcHVfcmVjdCAqY3J0Y19yb2k7Cj4gIAlib29sIHExNl9k YXRhID0gdHJ1ZTsKPiAgCWludCBpZHg7Cj4gIAo+IEBAIC0zMzU3LDExICszMzU2LDYgQEAgc3Rh dGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAo+ICAJX2RwdV9wbGFuZV9zc3BwX2F0b21pY19jaGVja19tb2RlX2NoYW5nZWQocGRwdSwg c3RhdGUsCj4gIAkJCQkJCQkJb2xkX3N0YXRlKTsKPiAgCj4gLQkvKiByZS1wcm9ncmFtIHRoZSBv dXRwdXQgcmVjdHMgYWx3YXlzIGluIHRoZSBjYXNlIG9mIHBhcnRpYWwgdXBkYXRlICovCj4gLQlk cHVfY3J0Y19nZXRfY3J0Y19yb2koY3J0Yy0+c3RhdGUsICZjcnRjX3JvaSk7Cj4gLQlpZiAoIWRw dV9rbXNfcmVjdF9pc19udWxsKGNydGNfcm9pKSkKPiAtCQlwc3RhdGUtPmRpcnR5IHw9IERQVV9Q TEFORV9ESVJUWV9SRUNUUzsKPiAtCj4gIAlpZiAocHN0YXRlLT5kaXJ0eSAmIERQVV9QTEFORV9E SVJUWV9SRUNUUykKPiAgCQltZW1zZXQoJihwZHB1LT5waXBlX2NmZyksIDAsIHNpemVvZihzdHJ1 Y3QgZHB1X2h3X3BpcGVfY2ZnKSk7Cj4gIAo+IEBAIC0zMzk5LDEzICszMzkzLDYgQEAgc3RhdGlj IGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAo+ICAJCQlzcmMueSAmPSB+MHgxOwo+ICAJCX0KPiAgCj4gLQkJLyoKPiAtCQkgKiBhZGp1c3Qg bGF5ZXIgbWl4ZXIgcG9zaXRpb24gb2YgdGhlIHNzcHAgaW4gdGhlIHByZXNlbmNlCj4gLQkJICog b2YgYSBwYXJ0aWFsIHVwZGF0ZSB0byB0aGUgYWN0aXZlIGxtIG9yaWdpbgo+IC0JCSAqLwo+IC0J CWRzdC54IC09IGNydGNfcm9pLT54Owo+IC0JCWRzdC55IC09IGNydGNfcm9pLT55Owo+IC0KPiAg CQlwZHB1LT5waXBlX2NmZy5zcmNfcmVjdCA9IHNyYzsKPiAgCQlwZHB1LT5waXBlX2NmZy5kc3Rf cmVjdCA9IGRzdDsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Ry di5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKPiBpbmRleCBkOGUwOTBmLi44NTc0 ZjMwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKPiBAQCAtMTQ0LDcgKzE0NCw2IEBAIGVudW0g bXNtX21kcF9jcnRjX3Byb3BlcnR5IHsKPiAgCUNSVENfUFJPUF9EUkFNX0lCLAo+ICAJQ1JUQ19Q Uk9QX1JPVF9QUkVGSUxMX0JXLAo+ICAJQ1JUQ19QUk9QX1JPVF9DTEssCj4gLQlDUlRDX1BST1Bf Uk9JX1YxLAo+ICAJQ1JUQ19QUk9QX0lETEVfVElNRU9VVCwKPiAgCUNSVENfUFJPUF9ERVNUX1ND QUxFUiwKPiAgCj4gQEAgLTE2OCw3ICsxNjcsNiBAQCBlbnVtIG1zbV9tZHBfY29ubl9wcm9wZXJ0 eSB7Cj4gIAlDT05ORUNUT1JfUFJPUF9EU1RfWSwKPiAgCUNPTk5FQ1RPUl9QUk9QX0RTVF9XLAo+ ICAJQ09OTkVDVE9SX1BST1BfRFNUX0gsCj4gLQlDT05ORUNUT1JfUFJPUF9ST0lfVjEsCj4gIAlD T05ORUNUT1JfUFJPUF9CTF9TQ0FMRSwKPiAgCUNPTk5FQ1RPUl9QUk9QX0FEX0JMX1NDQUxFLAo+ ICAKPiBAQCAtMjI4LDM4ICsyMjYsNiBAQCBlbnVtIG1zbV9ldmVudF93YWl0IHsKPiAgfTsKPiAg Cj4gIC8qKgo+IC0gKiBzdHJ1Y3QgbXNtX3JvaV9hbGlnbm1lbnQgLSByZWdpb24gb2YgaW50ZXJl c3QgYWxpZ25tZW50IHJlc3RyaWN0aW9ucwo+IC0gKiBAeHN0YXJ0X3BpeF9hbGlnbjogbGVmdCB4 IG9mZnNldCBhbGlnbm1lbnQgcmVzdHJpY3Rpb24KPiAtICogQHdpZHRoX3BpeF9hbGlnbjogd2lk dGggYWxpZ25tZW50IHJlc3RyaWN0aW9uCj4gLSAqIEB5c3RhcnRfcGl4X2FsaWduOiB0b3AgeSBv ZmZzZXQgYWxpZ25tZW50IHJlc3RyaWN0aW9uCj4gLSAqIEBoZWlnaHRfcGl4X2FsaWduOiBoZWln aHQgYWxpZ25tZW50IHJlc3RyaWN0aW9uCj4gLSAqIEBtaW5fd2lkdGg6IG1pbmltdW0gd2lkdGgg cmVzdHJpY3Rpb24KPiAtICogQG1pbl9oZWlnaHQ6IG1pbmltdW0gaGVpZ2h0IHJlc3RyaWN0aW9u Cj4gLSAqLwo+IC1zdHJ1Y3QgbXNtX3JvaV9hbGlnbm1lbnQgewo+IC0JdWludDMyX3QgeHN0YXJ0 X3BpeF9hbGlnbjsKPiAtCXVpbnQzMl90IHdpZHRoX3BpeF9hbGlnbjsKPiAtCXVpbnQzMl90IHlz dGFydF9waXhfYWxpZ247Cj4gLQl1aW50MzJfdCBoZWlnaHRfcGl4X2FsaWduOwo+IC0JdWludDMy X3QgbWluX3dpZHRoOwo+IC0JdWludDMyX3QgbWluX2hlaWdodDsKPiAtfTsKPiAtCj4gLS8qKgo+ IC0gKiBzdHJ1Y3QgbXNtX3JvaV9jYXBzIC0gZGlzcGxheSdzIHJlZ2lvbiBvZiBpbnRlcmVzdCBj YXBhYmlsaXRpZXMKPiAtICogQGVuYWJsZWQ6IHRydWUgaWYgc29tZSByZWdpb24gb2YgaW50ZXJl c3QgaXMgc3VwcG9ydGVkCj4gLSAqIEBtZXJnZV9yb2lzOiBtZXJnZSByb2lzIGJlZm9yZSBzZW5k aW5nIHRvIGRpc3BsYXkKPiAtICogQG51bV9yb2k6IG1heGltdW0gbnVtYmVyIG9mIHJvaXMgc3Vw cG9ydGVkCj4gLSAqIEBhbGlnbjogcm9pIGFsaWdubWVudCByZXN0cmljdGlvbnMKPiAtICovCj4g LXN0cnVjdCBtc21fcm9pX2NhcHMgewo+IC0JYm9vbCBlbmFibGVkOwo+IC0JYm9vbCBtZXJnZV9y b2lzOwo+IC0JdWludDMyX3QgbnVtX3JvaTsKPiAtCXN0cnVjdCBtc21fcm9pX2FsaWdubWVudCBh bGlnbjsKPiAtfTsKPiAtCj4gLS8qKgo+ICAgKiBzdHJ1Y3QgbXNtX2Rpc3BsYXlfZHNjX2luZm8g LSBkZWZpbmVzIGRzYyBjb25maWd1cmF0aW9uCj4gICAqIEB2ZXJzaW9uOiAgICAgICAgICAgICAg ICAgRFNDIHZlcnNpb24uCj4gICAqIEBzY3JfcmV2OiAgICAgICAgICAgICAgICAgRFNDIHJldmlz aW9uLgo+IEBAIC00MjcsNyArMzkzLDYgQEAgc3RydWN0IG1zbV9tb2RlX2luZm8gewo+ICAgKiBA aXNfcHJpbWFyeTogICAgICAgICBTZXQgdG8gdHJ1ZSBpZiBkaXNwbGF5IGlzIHByaW1hcnkgZGlz cGxheQo+ICAgKiBAaXNfdGVfdXNpbmdfd2F0Y2hkb2dfdGltZXI6ICBCb29sZWFuIHRvIGluZGlj YXRlIHdhdGNoZG9nIFRFIGlzCj4gICAqCQkJCSB1c2VkIGluc3RlYWQgb2YgcGFuZWwgVEUgaW4g Y21kIG1vZGUgcGFuZWxzCj4gLSAqIEByb2lfY2FwczogICAgICAgICAgIFJlZ2lvbiBvZiBpbnRl cmVzdCBjYXBhYmlsaXR5IGluZm8KPiAgICovCj4gIHN0cnVjdCBtc21fZGlzcGxheV9pbmZvIHsK PiAgCWludCBpbnRmX3R5cGU7Cj4gQEAgLTQ0NiwyNyArNDExLDYgQEAgc3RydWN0IG1zbV9kaXNw bGF5X2luZm8gewo+ICAKPiAgCWJvb2wgaXNfcHJpbWFyeTsKPiAgCWJvb2wgaXNfdGVfdXNpbmdf d2F0Y2hkb2dfdGltZXI7Cj4gLQlzdHJ1Y3QgbXNtX3JvaV9jYXBzIHJvaV9jYXBzOwo+IC19Owo+ IC0KPiAtI2RlZmluZSBNU01fTUFYX1JPSQk0Cj4gLQo+IC0vKioKPiAtICogc3RydWN0IG1zbV9y b2lfbGlzdCAtIGxpc3Qgb2YgcmVnaW9ucyBvZiBpbnRlcmVzdCBmb3IgYSBkcm0gb2JqZWN0Cj4g LSAqIEBudW1fcmVjdHM6IG51bWJlciBvZiB2YWxpZCByZWN0YW5nbGVzIGluIHRoZSByb2kgYXJy YXkKPiAtICogQHJvaTogbGlzdCBvZiByb2kgcmVjdGFuZ2xlcwo+IC0gKi8KPiAtc3RydWN0IG1z bV9yb2lfbGlzdCB7Cj4gLQl1aW50MzJfdCBudW1fcmVjdHM7Cj4gLQlzdHJ1Y3QgZHJtX2NsaXBf cmVjdCByb2lbTVNNX01BWF9ST0ldOwo+IC19Owo+IC0KPiAtLyoqCj4gLSAqIHN0cnVjdCAtIG1z bV9kaXNwbGF5X2tpY2tvZmZfcGFyYW1zIC0gaW5mbyBmb3IgZGlzcGxheSBmZWF0dXJlcyBhdCBr aWNrb2ZmCj4gLSAqIEByb2lzOiBSZWdpb25zIG9mIGludGVyZXN0IHN0cnVjdHVyZSBmb3IgbWFw cGluZyBDUlRDIHRvIENvbm5lY3RvciBvdXRwdXQKPiAtICovCj4gLXN0cnVjdCBtc21fZGlzcGxh eV9raWNrb2ZmX3BhcmFtcyB7Cj4gLQlzdHJ1Y3QgbXNtX3JvaV9saXN0ICpyb2lzOwo+ICB9Owo+ ICAKPiAgLyoqCj4gLS0gCj4gVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlz IGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwKPiBhIExpbnV4IEZvdW5kYXRpb24g Q29sbGFib3JhdGl2ZSBQcm9qZWN0Cj4gCgotLSAKU2VhbiBQYXVsLCBTb2Z0d2FyZSBFbmdpbmVl ciwgR29vZ2xlIC8gQ2hyb21pdW0gT1MKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZnJlZWRyZW5vCg==