From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [DPU PATCH 5/7] drm/msm/dpu: clean up dpu crtc custom properties Date: Mon, 4 Jun 2018 15:58:05 -0400 Message-ID: <20180604195805.GV3373@art_vandelay> References: <1527103862-13934-1-git-send-email-jsanka@codeaurora.org> <1527103862-13934-6-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: <1527103862-13934-6-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: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@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 T24gV2VkLCBNYXkgMjMsIDIwMTggYXQgMTI6MzE6MDBQTSAtMDcwMCwgSmV5a3VtYXIgU2Fua2Fy YW4gd3JvdGU6Cj4gUmVtb3ZlIGRwdSBjcnRjIGN1c3RvbSBwcm9wZXJ0aWVzIGFuZCBpdHMgaGFu ZGxlcnMuCj4gCj4gU2lnbmVkLW9mZi1ieTogSmV5a3VtYXIgU2Fua2FyYW4gPGpzYW5rYUBjb2Rl YXVyb3JhLm9yZz4KClJldmlld2VkLWJ5OiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9y Zz4KCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgICAgICAgICAgICAgICAg ICB8ICAgMSAtCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYu YyB8ICAyOCAtCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgICAg ICB8IDg1NiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfY3J0Yy5oICAgICAgfCAgMjcgKy0KPiAgZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyAgIHwgIDEyIC0KPiAgZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X2RzLmMgICAgIHwgMTQ5IC0tLS0tCj4gIGRyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9od19kcy5oICAgICB8IDExMSAtLS0tCj4gIGRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19sbS5jICAgICB8ICA2NyAtLQo+ICBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbG0uaCAgICAgfCAgMTQgLQo+ICBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbWRzcy5oICAgfCAgMTYgLQo+ICBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uYyAgICAgICAgfCAgNzEgKy0tCj4gIGRyaXZlcnMv Z3B1L2RybS9tc20vbXNtX2Rydi5oICAgICAgICAgICAgICAgICB8ICAxNSAtCj4gIDEyIGZpbGVz IGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDEzNTYgZGVsZXRpb25zKC0pCj4gIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfZHMuYwo+ICBk ZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2Rz LmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKPiBpbmRleCA3YmMzOTIxLi5kMjg5NTAzIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL01ha2VmaWxlCj4gQEAgLTU3LDcgKzU3LDYgQEAgbXNtLXkgOj0gXAo+ICAJZGlzcC9k cHUxL2RwdV9od19jYXRhbG9nLm8gXAo+ICAJZGlzcC9kcHUxL2RwdV9od19jZG0ubyBcCj4gIAlk aXNwL2RwdTEvZHB1X2h3X2N0bC5vIFwKPiAtCWRpc3AvZHB1MS9kcHVfaHdfZHMubyBcCj4gIAlk aXNwL2RwdTEvZHB1X2h3X2ludGVycnVwdHMubyBcCj4gIAlkaXNwL2RwdTEvZHB1X2h3X2ludGYu byBcCj4gIAlkaXNwL2RwdTEvZHB1X2h3X2xtLm8gXAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMKPiBpbmRleCA5ODFmNzdmLi5jNDgyMGRlIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuYwo+IEBA IC0xMDIsMzQgKzEwMiw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfY29yZV9wZXJmX2NhbGNfY3J0Yyhz dHJ1Y3QgZHB1X2ttcyAqa21zLAo+ICAJZHB1X2NzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0 YXRlKTsKPiAgCW1lbXNldChwZXJmLCAwLCBzaXplb2Yoc3RydWN0IGRwdV9jb3JlX3BlcmZfcGFy YW1zKSk7Cj4gIAo+IC0JcGVyZi0+YndfY3RsW0RQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NTk9D XSA9Cj4gLQkJZHB1X2NydGNfZ2V0X3Byb3BlcnR5KGRwdV9jc3RhdGUsIENSVENfUFJPUF9DT1JF X0FCKTsKPiAtCXBlcmYtPm1heF9wZXJfcGlwZV9pYltEUFVfUE9XRVJfSEFORExFX0RCVVNfSURf TU5PQ10gPQo+IC0JCWRwdV9jcnRjX2dldF9wcm9wZXJ0eShkcHVfY3N0YXRlLCBDUlRDX1BST1Bf Q09SRV9JQik7Cj4gLQo+IC0JaWYgKGRwdV9jc3RhdGUtPmJ3X3NwbGl0X3ZvdGUpIHsKPiAtCQlw ZXJmLT5id19jdGxbRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0xMQ0NdID0KPiAtCQkJZHB1X2Ny dGNfZ2V0X3Byb3BlcnR5KGRwdV9jc3RhdGUsIENSVENfUFJPUF9MTENDX0FCKTsKPiAtCQlwZXJm LT5tYXhfcGVyX3BpcGVfaWJbRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0xMQ0NdID0KPiAtCQkJ ZHB1X2NydGNfZ2V0X3Byb3BlcnR5KGRwdV9jc3RhdGUsIENSVENfUFJPUF9MTENDX0lCKTsKPiAt CQlwZXJmLT5id19jdGxbRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0VCSV0gPQo+IC0JCQlkcHVf Y3J0Y19nZXRfcHJvcGVydHkoZHB1X2NzdGF0ZSwgQ1JUQ19QUk9QX0RSQU1fQUIpOwo+IC0JCXBl cmYtPm1heF9wZXJfcGlwZV9pYltEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfRUJJXSA9Cj4gLQkJ CWRwdV9jcnRjX2dldF9wcm9wZXJ0eShkcHVfY3N0YXRlLCBDUlRDX1BST1BfRFJBTV9JQik7Cj4g LQl9IGVsc2Ugewo+IC0JCXBlcmYtPmJ3X2N0bFtEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTExD Q10gPQo+IC0JCQlkcHVfY3J0Y19nZXRfcHJvcGVydHkoZHB1X2NzdGF0ZSwgQ1JUQ19QUk9QX0NP UkVfQUIpOwo+IC0JCXBlcmYtPm1heF9wZXJfcGlwZV9pYltEUFVfUE9XRVJfSEFORExFX0RCVVNf SURfTExDQ10gPQo+IC0JCQlkcHVfY3J0Y19nZXRfcHJvcGVydHkoZHB1X2NzdGF0ZSwgQ1JUQ19Q Uk9QX0NPUkVfSUIpOwo+IC0JCXBlcmYtPmJ3X2N0bFtEUFVfUE9XRVJfSEFORExFX0RCVVNfSURf RUJJXSA9Cj4gLQkJCWRwdV9jcnRjX2dldF9wcm9wZXJ0eShkcHVfY3N0YXRlLCBDUlRDX1BST1Bf Q09SRV9BQik7Cj4gLQkJcGVyZi0+bWF4X3Blcl9waXBlX2liW0RQVV9QT1dFUl9IQU5ETEVfREJV U19JRF9FQkldID0KPiAtCQkJZHB1X2NydGNfZ2V0X3Byb3BlcnR5KGRwdV9jc3RhdGUsIENSVENf UFJPUF9DT1JFX0lCKTsKPiAtCX0KPiAtCj4gLQlwZXJmLT5jb3JlX2Nsa19yYXRlID0KPiAtCQkJ ZHB1X2NydGNfZ2V0X3Byb3BlcnR5KGRwdV9jc3RhdGUsIENSVENfUFJPUF9DT1JFX0NMSyk7Cj4g LQo+ICAJaWYgKCFkcHVfY3N0YXRlLT5id19jb250cm9sKSB7Cj4gIAkJZm9yIChpID0gMDsgaSA8 IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVg7IGkrKykgewo+ICAJCQlwZXJmLT5id19jdGxb aV0gPSBrbXMtPmNhdGFsb2ctPnBlcmYubWF4X2J3X2hpZ2ggKgo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2NydGMuYwo+IGluZGV4IGEwYjcwMmYuLmIwYTNhMzAgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKPiBAQCAtNTcwLDE4ICs1NzAs NiBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfZGVpbml0X2V2ZW50cyhzdHJ1Y3QgZHB1X2NydGMg KmRwdV9jcnRjKQo+ICAJCXJldHVybjsKPiAgfQo+ICAKPiAtLyoqCj4gLSAqIGRwdV9jcnRjX2Rl c3Ryb3lfZGVzdF9zY2FsZXIgLSBmcmVlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHNjYWxlciBsdXQK PiAtICogQGRwdV9jcnRjOiBQb2ludGVyIHRvIGRwdSBjcnRjCj4gLSAqLwo+IC1zdGF0aWMgdm9p ZCBfZHB1X2NydGNfZGVzdHJveV9kZXN0X3NjYWxlcihzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRj KQo+IC17Cj4gLQlpZiAoIWRwdV9jcnRjKQo+IC0JCXJldHVybjsKPiAtCj4gLQlrZnJlZShkcHVf Y3J0Yy0+c2NsM19sdXRfY2ZnKTsKPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQgZHB1X2NydGNfZGVz dHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIHsKPiAgCXN0cnVjdCBkcHVfY3J0YyAqZHB1 X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKPiBAQCAtNTk0LDcgKzU4Miw2IEBAIHN0YXRpYyB2 b2lkIGRwdV9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAJaWYgKGRwdV9j cnRjLT5ibG9iX2luZm8pCj4gIAkJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KGRwdV9jcnRjLT5ibG9i X2luZm8pOwo+ICAJbXNtX3Byb3BlcnR5X2Rlc3Ryb3koJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZv KTsKPiAtCV9kcHVfY3J0Y19kZXN0cm95X2Rlc3Rfc2NhbGVyKGRwdV9jcnRjKTsKPiAgCj4gIAlf ZHB1X2NydGNfZGVpbml0X2V2ZW50cyhkcHVfY3J0Yyk7Cj4gIAo+IEBAIC02NzksNzEgKzY2Niw2 IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXR1cF9ibGVuZF9jZmcoc3RydWN0IGRwdV9jcnRj X21peGVyICptaXhlciwKPiAgCQlmb3JtYXQtPmFscGhhX2VuYWJsZSwgZmdfYWxwaGEsIGJnX2Fs cGhhLCBibGVuZF9vcCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXR1cF9k aW1fbGF5ZXJfY2ZnKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAtCQlzdHJ1Y3QgZHB1X2NydGMg KmRwdV9jcnRjLCBzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgKm1peGVyLAo+IC0JCXN0cnVjdCBkcHVf aHdfZGltX2xheWVyICpkaW1fbGF5ZXIpCj4gLXsKPiAtCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAq Y3N0YXRlOwo+IC0Jc3RydWN0IGRwdV9od19taXhlciAqbG07Cj4gLQlzdHJ1Y3QgZHB1X2h3X2Rp bV9sYXllciBzcGxpdF9kaW1fbGF5ZXI7Cj4gLQlpbnQgaTsKPiAtCj4gLQlpZiAoIWRpbV9sYXll ci0+cmVjdC53IHx8ICFkaW1fbGF5ZXItPnJlY3QuaCkgewo+IC0JCURQVV9ERUJVRygiZW1wdHkg ZGltX2xheWVyXG4iKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0JY3N0YXRlID0gdG9fZHB1 X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwo+IC0KPiAtCURQVV9ERUJVRygiZGltX2xheWVyIC0g ZmxhZ3M6JWQsIHN0YWdlOiVkXG4iLAo+IC0JCQlkaW1fbGF5ZXItPmZsYWdzLCBkaW1fbGF5ZXIt PnN0YWdlKTsKPiAtCj4gLQlzcGxpdF9kaW1fbGF5ZXIuc3RhZ2UgPSBkaW1fbGF5ZXItPnN0YWdl Owo+IC0Jc3BsaXRfZGltX2xheWVyLmNvbG9yX2ZpbGwgPSBkaW1fbGF5ZXItPmNvbG9yX2ZpbGw7 Cj4gLQo+IC0JLyoKPiAtCSAqIHRyYXZlcnNlIHRocm91Z2ggdGhlIGxheWVyIG1peGVycyBhdHRh Y2hlZCB0byBjcnRjIGFuZCBmaW5kIHRoZQo+IC0JICogaW50ZXJzZWN0aW5nIGRpbSBsYXllciBy ZWN0IGluIGVhY2ggTE0gYW5kIHByb2dyYW0gYWNjb3JkaW5nbHkuCj4gLQkgKi8KPiAtCWZvciAo aSA9IDA7IGkgPCBkcHVfY3J0Yy0+bnVtX21peGVyczsgaSsrKSB7Cj4gLQkJc3BsaXRfZGltX2xh eWVyLmZsYWdzID0gZGltX2xheWVyLT5mbGFnczsKPiAtCj4gLQkJZHB1X2ttc19yZWN0X2ludGVy c2VjdCgmY3N0YXRlLT5sbV9ib3VuZHNbaV0sICZkaW1fbGF5ZXItPnJlY3QsCj4gLQkJCQkJJnNw bGl0X2RpbV9sYXllci5yZWN0KTsKPiAtCQlpZiAoZHB1X2ttc19yZWN0X2lzX251bGwoJnNwbGl0 X2RpbV9sYXllci5yZWN0KSkgewo+IC0JCQkvKgo+IC0JCQkgKiBubyBleHRyYSBwcm9ncmFtbWlu ZyByZXF1aXJlZCBmb3Igbm9uLWludGVyc2VjdGluZwo+IC0JCQkgKiBsYXllciBtaXhlcnMgd2l0 aCBJTkNMVVNJVkUgZGltIGxheWVyCj4gLQkJCSAqLwo+IC0JCQlpZiAoc3BsaXRfZGltX2xheWVy LmZsYWdzICYgRFBVX0RSTV9ESU1fTEFZRVJfSU5DTFVTSVZFKQo+IC0JCQkJY29udGludWU7Cj4g LQo+IC0JCQkvKgo+IC0JCQkgKiBwcm9ncmFtIHRoZSBvdGhlciBub24taW50ZXJzZWN0aW5nIGxh eWVyIG1peGVycyB3aXRoCj4gLQkJCSAqIElOQ0xVU0lWRSBkaW0gbGF5ZXIgb2YgZnVsbCBzaXpl IGZvciB1bmlmb3JtaXR5Cj4gLQkJCSAqIHdpdGggRVhDTFVTSVZFIGRpbSBsYXllciBjb25maWcu Cj4gLQkJCSAqLwo+IC0JCQlzcGxpdF9kaW1fbGF5ZXIuZmxhZ3MgJj0gfkRQVV9EUk1fRElNX0xB WUVSX0VYQ0xVU0lWRTsKPiAtCQkJc3BsaXRfZGltX2xheWVyLmZsYWdzIHw9IERQVV9EUk1fRElN X0xBWUVSX0lOQ0xVU0lWRTsKPiAtCQkJbWVtY3B5KCZzcGxpdF9kaW1fbGF5ZXIucmVjdCwgJmNz dGF0ZS0+bG1fYm91bmRzW2ldLAo+IC0JCQkJCXNpemVvZihzcGxpdF9kaW1fbGF5ZXIucmVjdCkp Owo+IC0KPiAtCQl9IGVsc2Ugewo+IC0JCQlzcGxpdF9kaW1fbGF5ZXIucmVjdC54ID0KPiAtCQkJ CQlzcGxpdF9kaW1fbGF5ZXIucmVjdC54IC0KPiAtCQkJCQkJY3N0YXRlLT5sbV9ib3VuZHNbaV0u eDsKPiAtCQl9Cj4gLQo+IC0JCURQVV9ERUJVRygic3BsaXRfZGltX2xheWVyIC0gTE06JWQsIHJl Y3Q6eyVkLCVkLCVkLCVkfX1cbiIsCj4gLQkJCWksIHNwbGl0X2RpbV9sYXllci5yZWN0LngsIHNw bGl0X2RpbV9sYXllci5yZWN0LnksCj4gLQkJCXNwbGl0X2RpbV9sYXllci5yZWN0LncsIHNwbGl0 X2RpbV9sYXllci5yZWN0LmgpOwo+IC0KPiAtCQlsbSA9IG1peGVyW2ldLmh3X2xtOwo+IC0JCW1p eGVyW2ldLm1peGVyX29wX21vZGUgfD0gMSA8PCBzcGxpdF9kaW1fbGF5ZXIuc3RhZ2U7Cj4gLQkJ bG0tPm9wcy5zZXR1cF9kaW1fbGF5ZXIobG0sICZzcGxpdF9kaW1fbGF5ZXIpOwo+IC0JfQo+IC19 Cj4gLQo+ICBzdGF0aWMgdm9pZCBfZHB1X2NydGNfcHJvZ3JhbV9sbV9vdXRwdXRfcm9pKHN0cnVj dCBkcm1fY3J0YyAqY3J0YykKPiAgewo+ICAJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKPiBA QCAtNzg3LDcgKzcwOSw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ibGVuZF9zZXR1cF9taXhl cihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAl1MzIgZmx1c2hfbWFzazsKPiAgCXVpbnQzMl90 IHN0YWdlX2lkeCwgbG1faWR4Owo+ICAJaW50IHpwb3NfY250W0RQVV9TVEFHRV9NQVggKyAxXSA9 IHsgMCB9Owo+IC0JaW50IGk7Cj4gIAlib29sIGJnX2FscGhhX2VuYWJsZSA9IGZhbHNlOwo+ICAK PiAgCWlmICghZHB1X2NydGMgfHwgIW1peGVyKSB7Cj4gQEAgLTg2MywxMyArNzg0LDYgQEAgc3Rh dGljIHZvaWQgX2RwdV9jcnRjX2JsZW5kX3NldHVwX21peGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKPiAgCQl9Cj4gIAl9Cj4gIAo+IC0JaWYgKGxtICYmIGxtLT5vcHMuc2V0dXBfZGltX2xheWVy KSB7Cj4gLQkJY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwo+IC0JCWZv ciAoaSA9IDA7IGkgPCBjc3RhdGUtPm51bV9kaW1fbGF5ZXJzOyBpKyspCj4gLQkJCV9kcHVfY3J0 Y19zZXR1cF9kaW1fbGF5ZXJfY2ZnKGNydGMsIGRwdV9jcnRjLAo+IC0JCQkJCW1peGVyLCAmY3N0 YXRlLT5kaW1fbGF5ZXJbaV0pOwo+IC0JfQo+IC0KPiAgCSBfZHB1X2NydGNfcHJvZ3JhbV9sbV9v dXRwdXRfcm9pKGNydGMpOwo+ICB9Cj4gIAo+IEBAIC05MTEsMTEgKzgyNSw2IEBAIHN0YXRpYyB2 b2lkIF9kcHVfY3J0Y19ibGVuZF9zZXR1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIAkJaWYg KG1peGVyW2ldLmh3X2N0bC0+b3BzLmNsZWFyX2FsbF9ibGVuZHN0YWdlcykKPiAgCQkJbWl4ZXJb aV0uaHdfY3RsLT5vcHMuY2xlYXJfYWxsX2JsZW5kc3RhZ2VzKAo+ICAJCQkJCW1peGVyW2ldLmh3 X2N0bCk7Cj4gLQo+IC0JCS8qIGNsZWFyIGRpbV9sYXllciBzZXR0aW5ncyAqLwo+IC0JCWxtID0g bWl4ZXJbaV0uaHdfbG07Cj4gLQkJaWYgKGxtLT5vcHMuY2xlYXJfZGltX2xheWVyKQo+IC0JCQls bS0+b3BzLmNsZWFyX2RpbV9sYXllcihsbSk7Cj4gIAl9Cj4gIAo+ICAJLyogaW5pdGlhbGl6ZSBz dGFnZSBjZmcgKi8KPiBAQCAtOTQ3LDE2MyArODU2LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRj X2JsZW5kX3NldHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAgfQo+ICAKPiAgLyoqCj4gLSAq IF9kcHVfY3J0Y19zZXR1cF9zY2FsZXIzX2x1dCAtIFNldCB1cCBzY2FsZXIgbHV0Cj4gLSAqIExV VHMgYXJlIGNvbmZpZ3VyZWQgb25seSBvbmNlIGR1cmluZyBib290Cj4gLSAqIEBkcHVfY3J0Yzog UG9pbnRlciB0byBkcHUgY3J0Ywo+IC0gKiBAY3N0YXRlOiBQb2ludGVyIHRvIGRwdSBjcnRjIHN0 YXRlCj4gLSAqLwo+IC1zdGF0aWMgaW50IF9kcHVfY3J0Y19zZXRfZGVzdF9zY2FsZXJfbHV0KHN0 cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMsCj4gLQkJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3Rh dGUsIHVpbnQzMl90IGx1dF9pZHgpCj4gLXsKPiAtCXN0cnVjdCBkcHVfaHdfc2NhbGVyM19sdXRf Y2ZnICpjZmc7Cj4gLQl1MzIgKmx1dF9kYXRhID0gTlVMTDsKPiAtCXNpemVfdCBsZW4gPSAwOwo+ IC0JaW50IHJldCA9IDA7Cj4gLQo+IC0JaWYgKCFkcHVfY3J0YyB8fCAhY3N0YXRlIHx8ICFkcHVf Y3J0Yy0+c2NsM19sdXRfY2ZnKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3NcbiIpOwo+ IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCWlmIChkcHVfY3J0Yy0+c2NsM19sdXRf Y2ZnLT5pc19jb25maWd1cmVkKSB7Cj4gLQkJRFBVX0RFQlVHKCJsdXQgYWxyZWFkeSBjb25maWd1 cmVkXG4iKTsKPiAtCQlyZXR1cm4gMDsKPiAtCX0KPiAtCj4gLQlsdXRfZGF0YSA9IG1zbV9wcm9w ZXJ0eV9nZXRfYmxvYigmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCj4gLQkJCSZjc3RhdGUtPnBy b3BlcnR5X3N0YXRlLCAmbGVuLCBsdXRfaWR4KTsKPiAtCWlmICghbHV0X2RhdGEgfHwgIWxlbikg ewo+IC0JCURQVV9FUlJPUigibHV0KCVkKTogbm8gZGF0YSwgbGVuKCV6dSlcbiIsIGx1dF9pZHgs IGxlbik7Cj4gLQkJcmV0dXJuIC1FTk9EQVRBOwo+IC0JfQo+IC0KPiAtCWNmZyA9IGRwdV9jcnRj LT5zY2wzX2x1dF9jZmc7Cj4gLQo+IC0Jc3dpdGNoIChsdXRfaWR4KSB7Cj4gLQljYXNlIENSVENf UFJPUF9ERVNUX1NDQUxFUl9MVVRfRUQ6Cj4gLQkJY2ZnLT5kaXJfbHV0ID0gbHV0X2RhdGE7Cj4g LQkJY2ZnLT5kaXJfbGVuID0gbGVuOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBDUlRDX1BST1BfREVT VF9TQ0FMRVJfTFVUX0NJUjoKPiAtCQljZmctPmNpcl9sdXQgPSBsdXRfZGF0YTsKPiAtCQljZmct PmNpcl9sZW4gPSBsZW47Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIENSVENfUFJPUF9ERVNUX1NDQUxF Ul9MVVRfU0VQOgo+IC0JCWNmZy0+c2VwX2x1dCA9IGx1dF9kYXRhOwo+IC0JCWNmZy0+c2VwX2xl biA9IGxlbjsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4gLQkJcmV0ID0gLUVJTlZBTDsKPiAt CQlEUFVfRVJST1IoImludmFsaWQgTFVUIGluZGV4ID0gJWQiLCBsdXRfaWR4KTsKPiAtCQlicmVh azsKPiAtCX0KPiAtCj4gLQlpZiAoY2ZnLT5kaXJfbHV0ICYmIGNmZy0+Y2lyX2x1dCAmJiBjZmct PnNlcF9sdXQpCj4gLQkJY2ZnLT5pc19jb25maWd1cmVkID0gdHJ1ZTsKPiAtCj4gLQlyZXR1cm4g cmV0Owo+IC19Cj4gLQo+IC0vKioKPiAtICogX2RwdV9jcnRjX2Rlc3Rfc2NhbGVyX3NldHVwIC0g U2V0IHVwIGRlc3Qgc2NhbGVyIGJsb2NrCj4gLSAqIEBjcnRjOiBQb2ludGVyIHRvIGRybSBjcnRj Cj4gLSAqLwo+IC1zdGF0aWMgdm9pZCBfZHB1X2NydGNfZGVzdF9zY2FsZXJfc2V0dXAoc3RydWN0 IGRybV9jcnRjICpjcnRjKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwo+IC0J c3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGU7Cj4gLQlzdHJ1Y3QgZHB1X2h3X21peGVyICpo d19sbTsKPiAtCXN0cnVjdCBkcHVfaHdfY3RsICpod19jdGw7Cj4gLQlzdHJ1Y3QgZHB1X2h3X2Rz ICpod19kczsKPiAtCXN0cnVjdCBkcHVfaHdfZHNfY2ZnICpjZmc7Cj4gLQlzdHJ1Y3QgZHB1X2tt cyAqa21zOwo+IC0JdTMyIGZsdXNoX21hc2sgPSAwLCBvcF9tb2RlID0gMDsKPiAtCXUzMiBsbV9p ZHggPSAwLCBudW1fbWl4ZXJzID0gMDsKPiAtCWludCBpLCBjb3VudCA9IDA7Cj4gLQo+IC0JaWYg KCFjcnRjKQo+IC0JCXJldHVybjsKPiAtCj4gLQlkcHVfY3J0YyAgID0gdG9fZHB1X2NydGMoY3J0 Yyk7Cj4gLQljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7Cj4gLQlrbXMg ICAgPSBfZHB1X2NydGNfZ2V0X2ttcyhjcnRjKTsKPiAtCW51bV9taXhlcnMgPSBkcHVfY3J0Yy0+ bnVtX21peGVyczsKPiAtCj4gLQlEUFVfREVCVUcoImNydGMlZFxuIiwgY3J0Yy0+YmFzZS5pZCk7 Cj4gLQo+IC0JaWYgKCFjc3RhdGUtPmRzX2RpcnR5KSB7Cj4gLQkJRFBVX0RFQlVHKCJubyBjaGFu Z2UgaW4gc2V0dGluZ3MsIHNraXAgY29tbWl0XG4iKTsKPiAtCX0gZWxzZSBpZiAoIWttcyB8fCAh a21zLT5jYXRhbG9nKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOwo+ IC0JfSBlbHNlIGlmICgha21zLT5jYXRhbG9nLT5tZHBbMF0uaGFzX2Rlc3Rfc2NhbGVyKSB7Cj4g LQkJRFBVX0RFQlVHKCJkZXN0IHNjYWxlciBmZWF0dXJlIG5vdCBzdXBwb3J0ZWRcbiIpOwo+IC0J fSBlbHNlIGlmIChudW1fbWl4ZXJzID4gQ1JUQ19EVUFMX01JWEVSUykgewo+IC0JCURQVV9FUlJP UigiaW52YWxpZCBudW1iZXIgbWl4ZXJzOiAlZFxuIiwgbnVtX21peGVycyk7Cj4gLQl9IGVsc2Ug aWYgKCFkcHVfY3J0Yy0+c2NsM19sdXRfY2ZnLT5pc19jb25maWd1cmVkKSB7Cj4gLQkJRFBVX0RF QlVHKCJubyBMVVQgZGF0YSBhdmFpbGFibGVcbiIpOwo+IC0JfSBlbHNlIHsKPiAtCQljb3VudCA9 IGNzdGF0ZS0+bnVtX2RzX2VuYWJsZWQgPyBjc3RhdGUtPm51bV9kcyA6IG51bV9taXhlcnM7Cj4g LQo+IC0JCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cj4gLQkJCWNmZyA9ICZjc3RhdGUt PmRzX2NmZ1tpXTsKPiAtCj4gLQkJCWlmICghY2ZnLT5mbGFncykKPiAtCQkJCWNvbnRpbnVlOwo+ IC0KPiAtCQkJbG1faWR4ID0gY2ZnLT5uZHg7Cj4gLQkJCWh3X2xtICA9IGRwdV9jcnRjLT5taXhl cnNbbG1faWR4XS5od19sbTsKPiAtCQkJaHdfY3RsID0gZHB1X2NydGMtPm1peGVyc1tsbV9pZHhd Lmh3X2N0bDsKPiAtCQkJaHdfZHMgID0gZHB1X2NydGMtPm1peGVyc1tsbV9pZHhdLmh3X2RzOwo+ IC0KPiAtCQkJLyogU2V0dXAgb3AgbW9kZSAtIER1YWwvc2luZ2xlICovCj4gLQkJCWlmIChjZmct PmZsYWdzICYgRFBVX0RSTV9ERVNUU0NBTEVSX0VOQUJMRSkKPiAtCQkJCW9wX21vZGUgfD0gQklU KGh3X2RzLT5pZHggLSBEU18wKTsKPiAtCj4gLQkJCWlmICgoaSA9PSBjb3VudC0xKSAmJiBod19k cy0+b3BzLnNldHVwX29wbW9kZSkgewo+IC0JCQkJb3BfbW9kZSB8PSAoY3N0YXRlLT5udW1fZHNf ZW5hYmxlZCA9PQo+IC0JCQkJCUNSVENfRFVBTF9NSVhFUlMpID8KPiAtCQkJCQlEUFVfRFNfT1Bf TU9ERV9EVUFMIDogMDsKPiAtCQkJCWh3X2RzLT5vcHMuc2V0dXBfb3Btb2RlKGh3X2RzLCBvcF9t b2RlKTsKPiAtCQkJCURQVV9FVlQzMihEUk1JRChjcnRjKSwgb3BfbW9kZSk7Cj4gLQkJCX0KPiAt Cj4gLQkJCS8qIFNldHVwIHNjYWxlciAqLwo+IC0JCQlpZiAoKGNmZy0+ZmxhZ3MgJiBEUFVfRFJN X0RFU1RTQ0FMRVJfU0NBTEVfVVBEQVRFKSB8fAo+IC0JCQkJKGNmZy0+ZmxhZ3MgJgo+IC0JCQkJ CURQVV9EUk1fREVTVFNDQUxFUl9FTkhBTkNFUl9VUERBVEUpKSB7Cj4gLQkJCQlpZiAoaHdfZHMt Pm9wcy5zZXR1cF9zY2FsZXIpCj4gLQkJCQkJaHdfZHMtPm9wcy5zZXR1cF9zY2FsZXIoaHdfZHMs Cj4gLQkJCQkJCQljZmctPnNjbDNfY2ZnLAo+IC0JCQkJCQkJZHB1X2NydGMtPnNjbDNfbHV0X2Nm Zyk7Cj4gLQo+IC0JCQkJLyoqCj4gLQkJCQkgKiBDbGVhciB0aGUgZmxhZ3MgYXMgdGhlIGJsb2Nr IGRvZXNuJ3QgaGF2ZSB0bwo+IC0JCQkJICogYmUgcHJvZ3JhbW1lZCBpbiBlYWNoIGNvbW1pdCBp ZiBubyB1cGRhdGVzCj4gLQkJCQkgKi8KPiAtCQkJCWNmZy0+ZmxhZ3MgJj0gfkRQVV9EUk1fREVT VFNDQUxFUl9TQ0FMRV9VUERBVEU7Cj4gLQkJCQljZmctPmZsYWdzICY9Cj4gLQkJCQkJfkRQVV9E Uk1fREVTVFNDQUxFUl9FTkhBTkNFUl9VUERBVEU7Cj4gLQkJCX0KPiAtCj4gLQkJCS8qCj4gLQkJ CSAqIERlc3Qgc2NhbGVyIHNoYXJlcyB0aGUgZmx1c2ggYml0IG9mIHRoZSBMTSBpbiBjb250cm9s Cj4gLQkJCSAqLwo+IC0JCQlpZiAoY2ZnLT5zZXRfbG1fZmx1c2ggJiYgaHdfbG0gJiYgaHdfY3Rs ICYmCj4gLQkJCQlod19jdGwtPm9wcy5nZXRfYml0bWFza19taXhlcikgewo+IC0JCQkJZmx1c2hf bWFzayA9IGh3X2N0bC0+b3BzLmdldF9iaXRtYXNrX21peGVyKAo+IC0JCQkJCQlod19jdGwsIGh3 X2xtLT5pZHgpOwo+IC0JCQkJRFBVX0RFQlVHKCJTZXQgbG1bJWRdIGZsdXNoID0gJWQiLAo+IC0J CQkJCWh3X2xtLT5pZHgsIGZsdXNoX21hc2spOwo+IC0JCQkJaHdfY3RsLT5vcHMudXBkYXRlX3Bl bmRpbmdfZmx1c2goaHdfY3RsLAo+IC0JCQkJCQkJCWZsdXNoX21hc2spOwo+IC0JCQl9Cj4gLQkJ CWNmZy0+c2V0X2xtX2ZsdXNoID0gZmFsc2U7Cj4gLQkJfQo+IC0JCWNzdGF0ZS0+ZHNfZGlydHkg PSBmYWxzZTsKPiAtCX0KPiAtfQo+IC0KPiAtLyoqCj4gICAqICBfZHB1X2NydGNfY29tcGxldGVf ZmxpcCAtIHNpZ25hbCBwZW5kaW5nIHBhZ2VfZmxpcCBldmVudHMKPiAgICogQW55IHBlbmRpbmcg dmJsYW5rIGV2ZW50cyBhcmUgYWRkZWQgdG8gdGhlIHZibGFua19ldmVudF9saXN0Cj4gICAqIHNv IHRoYXQgdGhlIG5leHQgdmJsYW5rIGludGVycnVwdCBzaGFsbCBzaWduYWwgdGhlbS4KPiBAQCAt MTM2MSw0NDggKzExMTMsNiBAQCB2b2lkIGRwdV9jcnRjX2NvbXBsZXRlX2NvbW1pdChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCj4gIAlEUFVfRVZUMzJfVkVSQk9TRShEUk1JRChjcnRjKSk7Cj4gIH0K PiAgCj4gLS8qIF9kcHVfY3J0Y19zZXRfaWRsZV90aW1lb3V0IC0gdXBkYXRlIGlkbGUgdGltZW91 dCB3YWl0IGR1cmF0aW9uICovCj4gLXN0YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXRfaWRsZV90aW1l b3V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTY0IHZhbCkKPiAtewo+IC0Jc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyOwo+IC0KPiAtCWlmICghY3J0Yykgewo+IC0JCURQVV9FUlJPUigiaW52 YWxpZCBjcnRjXG4iKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0JZHJtX2Zvcl9lYWNoX2Vu Y29kZXIoZW5jb2RlciwgY3J0Yy0+ZGV2KSB7Cj4gLQkJaWYgKGVuY29kZXItPmNydGMgIT0gY3J0 YykKPiAtCQkJY29udGludWU7Cj4gLQo+IC0JCWRwdV9lbmNvZGVyX3NldF9pZGxlX3RpbWVvdXQo ZW5jb2RlciwgKHUzMikgdmFsKTsKPiAtCX0KPiAtfQo+IC0KPiAtLyoqCj4gLSAqIF9kcHVfY3J0 Y19zZXRfZGltX2xheWVyX3YxIC0gY29weSBkaW0gbGF5ZXIgc2V0dGluZ3MgZnJvbSB1c2Vyc3Bh Y2UKPiAtICogQGNzdGF0ZTogICAgICBQb2ludGVyIHRvIGRwdSBjcnRjIHN0YXRlCj4gLSAqIEB1 c2VyX3B0cjogICAgVXNlciBwdHIgZm9yIGRwdV9kcm1fZGltX2xheWVyX3YxIHN0cnVjdAo+IC0g Ki8KPiAtc3RhdGljIHZvaWQgX2RwdV9jcnRjX3NldF9kaW1fbGF5ZXJfdjEoc3RydWN0IGRwdV9j cnRjX3N0YXRlICpjc3RhdGUsCj4gLQkJdm9pZCBfX3VzZXIgKnVzcl9wdHIpCj4gLXsKPiAtCXN0 cnVjdCBkcHVfZHJtX2RpbV9sYXllcl92MSBkaW1fbGF5ZXJfdjE7Cj4gLQlzdHJ1Y3QgZHB1X2Ry bV9kaW1fbGF5ZXJfY2ZnICp1c2VyX2NmZzsKPiAtCXN0cnVjdCBkcHVfaHdfZGltX2xheWVyICpk aW1fbGF5ZXI7Cj4gLQl1MzIgY291bnQsIGk7Cj4gLQo+IC0JaWYgKCFjc3RhdGUpIHsKPiAtCQlE UFVfRVJST1IoImludmFsaWQgY3N0YXRlXG4iKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQlkaW1f bGF5ZXIgPSBjc3RhdGUtPmRpbV9sYXllcjsKPiAtCj4gLQlpZiAoIXVzcl9wdHIpIHsKPiAtCQlE UFVfREVCVUcoImRpbV9sYXllciBkYXRhIHJlbW92ZWRcbiIpOwo+IC0JCXJldHVybjsKPiAtCX0K PiAtCj4gLQlpZiAoY29weV9mcm9tX3VzZXIoJmRpbV9sYXllcl92MSwgdXNyX3B0ciwgc2l6ZW9m KGRpbV9sYXllcl92MSkpKSB7Cj4gLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gY29weSBkaW1fbGF5 ZXIgZGF0YVxuIik7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCWNvdW50ID0gZGltX2xheWVy X3YxLm51bV9sYXllcnM7Cj4gLQlpZiAoY291bnQgPiBEUFVfTUFYX0RJTV9MQVlFUlMpIHsKPiAt CQlEUFVfRVJST1IoImludmFsaWQgbnVtYmVyIG9mIGRpbV9sYXllcnM6JWQiLCBjb3VudCk7Cj4g LQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCS8qIHBvcHVsYXRlIGZyb20gdXNlciBzcGFjZSAqLwo+ IC0JY3N0YXRlLT5udW1fZGltX2xheWVycyA9IGNvdW50Owo+IC0JZm9yIChpID0gMDsgaSA8IGNv dW50OyBpKyspIHsKPiAtCQl1c2VyX2NmZyA9ICZkaW1fbGF5ZXJfdjEubGF5ZXJfY2ZnW2ldOwo+ IC0KPiAtCQlkaW1fbGF5ZXJbaV0uZmxhZ3MgPSB1c2VyX2NmZy0+ZmxhZ3M7Cj4gLQkJZGltX2xh eWVyW2ldLnN0YWdlID0gdXNlcl9jZmctPnN0YWdlICsgRFBVX1NUQUdFXzA7Cj4gLQo+IC0JCWRp bV9sYXllcltpXS5yZWN0LnggPSB1c2VyX2NmZy0+cmVjdC54MTsKPiAtCQlkaW1fbGF5ZXJbaV0u cmVjdC55ID0gdXNlcl9jZmctPnJlY3QueTE7Cj4gLQkJZGltX2xheWVyW2ldLnJlY3QudyA9IHVz ZXJfY2ZnLT5yZWN0LngyIC0gdXNlcl9jZmctPnJlY3QueDE7Cj4gLQkJZGltX2xheWVyW2ldLnJl Y3QuaCA9IHVzZXJfY2ZnLT5yZWN0LnkyIC0gdXNlcl9jZmctPnJlY3QueTE7Cj4gLQo+IC0JCWRp bV9sYXllcltpXS5jb2xvcl9maWxsID0gKHN0cnVjdCBkcHVfbWRzc19jb2xvcikgewo+IC0JCQkJ dXNlcl9jZmctPmNvbG9yX2ZpbGwuY29sb3JfMCwKPiAtCQkJCXVzZXJfY2ZnLT5jb2xvcl9maWxs LmNvbG9yXzEsCj4gLQkJCQl1c2VyX2NmZy0+Y29sb3JfZmlsbC5jb2xvcl8yLAo+IC0JCQkJdXNl cl9jZmctPmNvbG9yX2ZpbGwuY29sb3JfMywKPiAtCQl9Owo+IC0KPiAtCQlEUFVfREVCVUcoImRp bV9sYXllclslZF0gLSBmbGFnczolZCwgc3RhZ2U6JWRcbiIsCj4gLQkJCQlpLCBkaW1fbGF5ZXJb aV0uZmxhZ3MsIGRpbV9sYXllcltpXS5zdGFnZSk7Cj4gLQkJRFBVX0RFQlVHKCIgcmVjdDp7JWQs JWQsJWQsJWR9LCBjb2xvcjp7JWQsJWQsJWQsJWR9XG4iLAo+IC0JCQkJZGltX2xheWVyW2ldLnJl Y3QueCwgZGltX2xheWVyW2ldLnJlY3QueSwKPiAtCQkJCWRpbV9sYXllcltpXS5yZWN0LncsIGRp bV9sYXllcltpXS5yZWN0LmgsCj4gLQkJCQlkaW1fbGF5ZXJbaV0uY29sb3JfZmlsbC5jb2xvcl8w LAo+IC0JCQkJZGltX2xheWVyW2ldLmNvbG9yX2ZpbGwuY29sb3JfMSwKPiAtCQkJCWRpbV9sYXll cltpXS5jb2xvcl9maWxsLmNvbG9yXzIsCj4gLQkJCQlkaW1fbGF5ZXJbaV0uY29sb3JfZmlsbC5j b2xvcl8zKTsKPiAtCX0KPiAtfQo+IC0KPiAtLyoqCj4gLSAqIF9kcHVfY3J0Y19kZXN0X3NjYWxl cl9pbml0IC0gYWxsb2NhdGUgbWVtb3J5IGZvciBzY2FsZXIgbHV0Cj4gLSAqIEBkcHVfY3J0YyAg ICA6ICBQb2ludGVyIHRvIGRwdSBjcnRjCj4gLSAqIEBjYXRhbG9nIDogIFBvaW50ZXIgdG8gbWRz cyBjYXRhbG9nIGluZm8KPiAtICovCj4gLXN0YXRpYyB2b2lkIF9kcHVfY3J0Y19kZXN0X3NjYWxl cl9pbml0KHN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMsCj4gLQkJCQlzdHJ1Y3QgZHB1X21kc3Nf Y2ZnICpjYXRhbG9nKQo+IC17Cj4gLQlpZiAoIWRwdV9jcnRjIHx8ICFjYXRhbG9nKQo+IC0JCXJl dHVybjsKPiAtCj4gLQlpZiAoIWNhdGFsb2ctPm1kcFswXS5oYXNfZGVzdF9zY2FsZXIpIHsKPiAt CQlEUFVfREVCVUcoImRlc3Qgc2NhbGVyIGZlYXR1cmUgbm90IHN1cHBvcnRlZFxuIik7Cj4gLQkJ cmV0dXJuOwo+IC0JfQo+IC0KPiAtCWRwdV9jcnRjLT5zY2wzX2x1dF9jZmcgPSBremFsbG9jKHNp emVvZihzdHJ1Y3QgZHB1X2h3X3NjYWxlcjNfbHV0X2NmZyksCj4gLQkJCQlHRlBfS0VSTkVMKTsK PiAtCWlmICghZHB1X2NydGMtPnNjbDNfbHV0X2NmZykKPiAtCQlEUFVfRVJST1IoImZhaWxlZCB0 byBjcmVhdGUgc2NhbGUgTFVUIGZvciBkZXN0IHNjYWxlciIpOwo+IC19Cj4gLQo+IC0vKioKPiAt ICogX2RwdV9jcnRjX3NldF9kZXN0X3NjYWxlciAtIGNvcHkgZGVzdCBzY2FsZXIgc2V0dGluZ3Mg ZnJvbSB1c2Vyc3BhY2UKPiAtICogQGRwdV9jcnRjICAgOiAgUG9pbnRlciB0byBkcHUgY3J0Ywo+ IC0gKiBAY3N0YXRlIDogIFBvaW50ZXIgdG8gZHB1IGNydGMgc3RhdGUKPiAtICogQHVzcl9wdHI6 ICBVc2VyIHB0ciBmb3IgZHB1X2RybV9kZXN0X3NjYWxlcl9kYXRhIHN0cnVjdAo+IC0gKi8KPiAt c3RhdGljIGludCBfZHB1X2NydGNfc2V0X2Rlc3Rfc2NhbGVyKHN0cnVjdCBkcHVfY3J0YyAqZHB1 X2NydGMsCj4gLQkJCQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZSwKPiAtCQkJCXZvaWQg X191c2VyICp1c3JfcHRyKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X2RybV9kZXN0X3NjYWxlcl9kYXRh IGRzX2RhdGE7Cj4gLQlzdHJ1Y3QgZHB1X2RybV9kZXN0X3NjYWxlcl9jZmcgKmRzX2NmZ191c3I7 Cj4gLQlzdHJ1Y3QgZHB1X2RybV9zY2FsZXJfdjIgc2NhbGVyX3YyOwo+IC0Jdm9pZCBfX3VzZXIg KnNjYWxlcl92Ml91c3I7Cj4gLQlpbnQgaSwgY291bnQsIHJldCA9IDA7Cj4gLQo+IC0JaWYgKCFk cHVfY3J0YyB8fCAhY3N0YXRlKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGRwdV9jcnRjL3N0 YXRlXG4iKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlEUFVfREVCVUcoImNy dGMgJXNcbiIsIGRwdV9jcnRjLT5uYW1lKTsKPiAtCj4gLQljc3RhdGUtPm51bV9kcyA9IDA7Cj4g LQljc3RhdGUtPmRzX2RpcnR5ID0gZmFsc2U7Cj4gLQlpZiAoIXVzcl9wdHIpIHsKPiAtCQlEUFVf REVCVUcoImRzIGRhdGEgcmVtb3ZlZFxuIik7Cj4gLQkJcmV0dXJuIDA7Cj4gLQl9Cj4gLQo+IC0J aWYgKGNvcHlfZnJvbV91c2VyKCZkc19kYXRhLCB1c3JfcHRyLCBzaXplb2YoZHNfZGF0YSkpKSB7 Cj4gLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gY29weSBkZXN0IHNjYWxlciBkYXRhIGZyb20gdXNl clxuIik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JY291bnQgPSBkc19kYXRh Lm51bV9kZXN0X3NjYWxlcjsKPiAtCWlmICghZHB1X2NydGMtPm51bV9taXhlcnMgfHwgY291bnQg PiBkcHVfY3J0Yy0+bnVtX21peGVycyB8fAo+IC0JCShjb3VudCAmJiAoY291bnQgIT0gZHB1X2Ny dGMtPm51bV9taXhlcnMpICYmCj4gLQkJIShkc19kYXRhLmRzX2NmZ1swXS5mbGFncyAmIERQVV9E Uk1fREVTVFNDQUxFUl9QVV9FTkFCTEUpKSkgewo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBjb25m aWc6bnVtIGRzKCVkKSwgbWl4ZXJzKCVkKSxmbGFncyglZClcbiIsCj4gLQkJCWNvdW50LCBkcHVf Y3J0Yy0+bnVtX21peGVycywgZHNfZGF0YS5kc19jZmdbMF0uZmxhZ3MpOwo+IC0JCXJldHVybiAt RUlOVkFMOwo+IC0JfQo+IC0KPiAtCS8qIFBvcHVsYXRlIGZyb20gdXNlciBzcGFjZSAqLwo+IC0J Zm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKPiAtCQlkc19jZmdfdXNyID0gJmRzX2RhdGEu ZHNfY2ZnW2ldOwo+IC0KPiAtCQljc3RhdGUtPmRzX2NmZ1tpXS5uZHggPSBkc19jZmdfdXNyLT5p bmRleDsKPiAtCQljc3RhdGUtPmRzX2NmZ1tpXS5mbGFncyA9IGRzX2NmZ191c3ItPmZsYWdzOwo+ IC0JCWNzdGF0ZS0+ZHNfY2ZnW2ldLmxtX3dpZHRoID0gZHNfY2ZnX3Vzci0+bG1fd2lkdGg7Cj4g LQkJY3N0YXRlLT5kc19jZmdbaV0ubG1faGVpZ2h0ID0gZHNfY2ZnX3Vzci0+bG1faGVpZ2h0Owo+ IC0JCWNzdGF0ZS0+ZHNfY2ZnW2ldLnNjbDNfY2ZnID0gTlVMTDsKPiAtCj4gLQkJaWYgKGRzX2Nm Z191c3ItPnNjYWxlcl9jZmcpIHsKPiAtCQkJc2NhbGVyX3YyX3VzciA9Cj4gLQkJCSh2b2lkIF9f dXNlciAqKSgodWludHB0cl90KWRzX2NmZ191c3ItPnNjYWxlcl9jZmcpOwo+IC0KPiAtCQkJbWVt c2V0KCZzY2FsZXJfdjIsIDAsIHNpemVvZihzY2FsZXJfdjIpKTsKPiAtCj4gLQkJCWNzdGF0ZS0+ ZHNfY2ZnW2ldLnNjbDNfY2ZnID0KPiAtCQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcHVfaHdf c2NhbGVyM19jZmcpLAo+IC0JCQkJCUdGUF9LRVJORUwpOwo+IC0KPiAtCQkJaWYgKCFjc3RhdGUt PmRzX2NmZ1tpXS5zY2wzX2NmZykgewo+IC0JCQkJcmV0ID0gLUVOT01FTTsKPiAtCQkJCWdvdG8g ZXJyOwo+IC0JCQl9Cj4gLQo+IC0JCQlpZiAoY29weV9mcm9tX3VzZXIoJnNjYWxlcl92Miwgc2Nh bGVyX3YyX3VzciwKPiAtCQkJCQlzaXplb2Yoc2NhbGVyX3YyKSkpIHsKPiAtCQkJCURQVV9FUlJP Uigic2NhbGUgZGF0YTpjb3B5IGZyb20gdXNlciBmYWlsZWRcbiIpOwo+IC0JCQkJcmV0ID0gLUVJ TlZBTDsKPiAtCQkJCWdvdG8gZXJyOwo+IC0JCQl9Cj4gLQo+IC0JCQlkcHVfc2V0X3NjYWxlcl92 Mihjc3RhdGUtPmRzX2NmZ1tpXS5zY2wzX2NmZywKPiAtCQkJCQkmc2NhbGVyX3YyKTsKPiAtCj4g LQkJCURQVV9ERUJVRygiZW4oJWQpZGlyKCVkKWRlKCVkKSBzcmMoJWR4JWQpIGRzdCglZHglZClc biIsCj4gLQkJCQlzY2FsZXJfdjIuZW5hYmxlLCBzY2FsZXJfdjIuZGlyX2VuLAo+IC0JCQkJc2Nh bGVyX3YyLmRlLmVuYWJsZSwgc2NhbGVyX3YyLnNyY193aWR0aFswXSwKPiAtCQkJCXNjYWxlcl92 Mi5zcmNfaGVpZ2h0WzBdLCBzY2FsZXJfdjIuZHN0X3dpZHRoLAo+IC0JCQkJc2NhbGVyX3YyLmRz dF9oZWlnaHQpOwo+IC0JCQlEUFVfRVZUMzJfVkVSQk9TRShEUk1JRCgmZHB1X2NydGMtPmJhc2Up LAo+IC0JCQkJc2NhbGVyX3YyLmVuYWJsZSwgc2NhbGVyX3YyLmRpcl9lbiwKPiAtCQkJCXNjYWxl cl92Mi5kZS5lbmFibGUsIHNjYWxlcl92Mi5zcmNfd2lkdGhbMF0sCj4gLQkJCQlzY2FsZXJfdjIu c3JjX2hlaWdodFswXSwgc2NhbGVyX3YyLmRzdF93aWR0aCwKPiAtCQkJCXNjYWxlcl92Mi5kc3Rf aGVpZ2h0KTsKPiAtCQl9Cj4gLQo+IC0JCURQVV9ERUJVRygiZHMgY2ZnWyVkXS1uZHgoJWQpIGZs YWdzKCVkKSBsbSglZHglZClcbiIsCj4gLQkJCWksIGRzX2NmZ191c3ItPmluZGV4LCBkc19jZmdf dXNyLT5mbGFncywKPiAtCQkJZHNfY2ZnX3Vzci0+bG1fd2lkdGgsIGRzX2NmZ191c3ItPmxtX2hl aWdodCk7Cj4gLQkJRFBVX0VWVDMyX1ZFUkJPU0UoRFJNSUQoJmRwdV9jcnRjLT5iYXNlKSwgaSwg ZHNfY2ZnX3Vzci0+aW5kZXgsCj4gLQkJCWRzX2NmZ191c3ItPmZsYWdzLCBkc19jZmdfdXNyLT5s bV93aWR0aCwKPiAtCQkJZHNfY2ZnX3Vzci0+bG1faGVpZ2h0KTsKPiAtCX0KPiAtCj4gLQljc3Rh dGUtPm51bV9kcyA9IGNvdW50Owo+IC0JY3N0YXRlLT5kc19kaXJ0eSA9IHRydWU7Cj4gLQlyZXR1 cm4gMDsKPiAtCj4gLWVycjoKPiAtCWZvciAoOyBpID49IDA7IGktLSkKPiAtCQlrZnJlZShjc3Rh dGUtPmRzX2NmZ1tpXS5zY2wzX2NmZyk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAt LyoqCj4gLSAqIF9kcHVfY3J0Y19jaGVja19kZXN0X3NjYWxlcl9kYXRhIC0gdmFsaWRhdGUgdGhl IGRlc3Qgc2NhbGVyIGRhdGEKPiAtICogQGNydGMgIDogIFBvaW50ZXIgdG8gZHJtIGNydGMKPiAt ICogQHN0YXRlIDogIFBvaW50ZXIgdG8gZHJtIGNydGMgc3RhdGUKPiAtICovCj4gLXN0YXRpYyBp bnQgX2RwdV9jcnRjX2NoZWNrX2Rlc3Rfc2NhbGVyX2RhdGEoc3RydWN0IGRybV9jcnRjICpjcnRj LAo+IC0JCQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRw dV9jcnRjICpkcHVfY3J0YzsKPiAtCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOwo+IC0J c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4gLQlzdHJ1Y3QgZHB1X2ttcyAqa21zOwo+ IC0Jc3RydWN0IGRwdV9od19kcyAqaHdfZHM7Cj4gLQlzdHJ1Y3QgZHB1X2h3X2RzX2NmZyAqY2Zn Owo+IC0JdTMyIGksIHJldCA9IDAsIGxtX2lkeDsKPiAtCXUzMiBudW1fZHNfZW5hYmxlID0gMDsK PiAtCXUzMiBtYXhfaW5fd2lkdGggPSAwLCBtYXhfb3V0X3dpZHRoID0gMDsKPiAtCXUzMiBwcmV2 X2xtX3dpZHRoID0gMCwgcHJldl9sbV9oZWlnaHQgPSAwOwo+IC0KPiAtCWlmICghY3J0YyB8fCAh c3RhdGUpCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+IC0JZHB1X2NydGMgPSB0b19kcHVfY3J0 YyhjcnRjKTsKPiAtCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKPiAtCWttcyA9 IF9kcHVfY3J0Y19nZXRfa21zKGNydGMpOwo+IC0JbW9kZSA9ICZzdGF0ZS0+YWRqdXN0ZWRfbW9k ZTsKPiAtCj4gLQlEUFVfREVCVUcoImNydGMlZFxuIiwgY3J0Yy0+YmFzZS5pZCk7Cj4gLQo+IC0J aWYgKCFjc3RhdGUtPmRzX2RpcnR5ICYmICFjc3RhdGUtPm51bV9kc19lbmFibGVkKSB7Cj4gLQkJ RFBVX0RFQlVHKCJkZXN0IHNjYWxlciBwcm9wZXJ0eSBub3Qgc2V0LCBza2lwIHZhbGlkYXRpb25c biIpOwo+IC0JCXJldHVybiAwOwo+IC0JfQo+IC0KPiAtCWlmICgha21zIHx8ICFrbXMtPmNhdGFs b2cpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7Cj4gLQkJcmV0dXJu IC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JaWYgKCFrbXMtPmNhdGFsb2ctPm1kcFswXS5oYXNfZGVz dF9zY2FsZXIpIHsKPiAtCQlEUFVfREVCVUcoImRlc3Qgc2NhbGVyIGZlYXR1cmUgbm90IHN1cHBv cnRlZFxuIik7Cj4gLQkJcmV0dXJuIDA7Cj4gLQl9Cj4gLQo+IC0JaWYgKCFkcHVfY3J0Yy0+bnVt X21peGVycykgewo+IC0JCURQVV9FUlJPUigibWl4ZXJzIG5vdCBhbGxvY2F0ZWRcbiIpOwo+IC0J CXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCS8qKgo+IC0JICogQ2hlY2sgaWYgc3VmZmlj aWVudCBodyByZXNvdXJjZXMgYXJlCj4gLQkgKiBhdmFpbGFibGUgYXMgcGVyIHRhcmdldCBjYXBz ICYgdG9wb2xvZ3kKPiAtCSAqLwo+IC0JaWYgKGRwdV9jcnRjLT5udW1fbWl4ZXJzID4gQ1JUQ19E VUFMX01JWEVSUykgewo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBjb25maWc6IG1peGVycyglZCkg bWF4KCVkKVxuIiwKPiAtCQkJZHB1X2NydGMtPm51bV9taXhlcnMsIENSVENfRFVBTF9NSVhFUlMp Owo+IC0JCXJldCA9IC1FSU5WQUw7Cj4gLQkJZ290byBlcnI7Cj4gLQl9Cj4gLQo+IC0JZm9yIChp ID0gMDsgaSA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyBpKyspIHsKPiAtCQlpZiAoIWRwdV9jcnRj LT5taXhlcnNbaV0uaHdfbG0gfHwgIWRwdV9jcnRjLT5taXhlcnNbaV0uaHdfZHMpIHsKPiAtCQkJ RFBVX0VSUk9SKCJpbnN1ZmZpY2llbnQgSFcgcmVzb3VyY2VzIGFsbG9jYXRlZFxuIik7Cj4gLQkJ CXJldCA9IC1FSU5WQUw7Cj4gLQkJCWdvdG8gZXJyOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQkvKioK PiAtCSAqIENoZWNrIGlmIERTIG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQKPiAtCSAq IEluIGNhc2Ugb2YgZW5hYmxlLCB2YWxpZGF0ZSB0aGUgZGF0YQo+IC0JICovCj4gLQlpZiAoIWNz dGF0ZS0+ZHNfZGlydHkgfHwgIWNzdGF0ZS0+bnVtX2RzIHx8Cj4gLQkJIShjc3RhdGUtPmRzX2Nm Z1swXS5mbGFncyAmIERQVV9EUk1fREVTVFNDQUxFUl9FTkFCTEUpKSB7Cj4gLQkJRFBVX0RFQlVH KCJkaXNhYmxlIGRlc3Qgc2NhbGVyLGRpcnR5KCVkKW51bSglZClmbGFncyglZClcbiIsCj4gLQkJ CWNzdGF0ZS0+ZHNfZGlydHksIGNzdGF0ZS0+bnVtX2RzLAo+IC0JCQljc3RhdGUtPmRzX2NmZ1sw XS5mbGFncyk7Cj4gLQkJZ290byBkaXNhYmxlOwo+IC0JfQo+IC0KPiAtCS8qKgo+IC0JICogTm8g b2YgZGVzdCBzY2FsZXJzIHNob3VsZG4ndCBleGNlZWQgaHcgZHMgYmxvY2sgY291bnQgYW5kCj4g LQkgKiBhbHNvLCBtYXRjaCB0aGUgbnVtIG9mIG1peGVycyB1bmxlc3MgaXQgaXMgcGFydGlhbCB1 cGRhdGUKPiAtCSAqIGxlZnQgb25seS9yaWdodCBvbmx5IHVzZSBjYXNlIC0gY3VycmVudGx5IFBV ICsgRFMgaXMgbm90IHN1cHBvcnRlZAo+IC0JICovCj4gLQlpZiAoY3N0YXRlLT5udW1fZHMgPiBr bXMtPmNhdGFsb2ctPmRzX2NvdW50IHx8Cj4gLQkJKChjc3RhdGUtPm51bV9kcyAhPSBkcHVfY3J0 Yy0+bnVtX21peGVycykgJiYKPiAtCQkhKGNzdGF0ZS0+ZHNfY2ZnWzBdLmZsYWdzICYgRFBVX0RS TV9ERVNUU0NBTEVSX1BVX0VOQUJMRSkpKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNmZzog bnVtX2RzKCVkKSwgaHdfZHNfY250KCVkKSBmbGFncyglZClcbiIsCj4gLQkJCWNzdGF0ZS0+bnVt X2RzLCBrbXMtPmNhdGFsb2ctPmRzX2NvdW50LAo+IC0JCQljc3RhdGUtPmRzX2NmZ1swXS5mbGFn cyk7Cj4gLQkJcmV0ID0gLUVJTlZBTDsKPiAtCQlnb3RvIGVycjsKPiAtCX0KPiAtCj4gLQkvKiBW YWxpZGF0ZSB0aGUgRFMgZGF0YSAqLwo+IC0JZm9yIChpID0gMDsgaSA8IGNzdGF0ZS0+bnVtX2Rz OyBpKyspIHsKPiAtCQljZmcgPSAmY3N0YXRlLT5kc19jZmdbaV07Cj4gLQkJbG1faWR4ID0gY2Zn LT5uZHg7Cj4gLQo+IC0JCS8qKgo+IC0JCSAqIFZhbGlkYXRlIGFnYWluc3QgdG9wb2xvZ3kKPiAt CQkgKiBObyBvZiBkZXN0IHNjYWxlcnMgc2hvdWxkIG1hdGNoIHRoZSBudW0gb2YgbWl4ZXJzCj4g LQkJICogdW5sZXNzIGl0IGlzIHBhcnRpYWwgdXBkYXRlIGxlZnQgb25seS9yaWdodCBvbmx5IHVz ZSBjYXNlCj4gLQkJICovCj4gLQkJaWYgKGxtX2lkeCA+PSBkcHVfY3J0Yy0+bnVtX21peGVycyB8 fCAoaSAhPSBsbV9pZHggJiYKPiAtCQkJIShjZmctPmZsYWdzICYgRFBVX0RSTV9ERVNUU0NBTEVS X1BVX0VOQUJMRSkpKSB7Cj4gLQkJCURQVV9FUlJPUigiaW52YWxpZCB1c2VyIGRhdGEoJWQpOmlk eCglZCksIGZsYWdzKCVkKVxuIiwKPiAtCQkJCWksIGxtX2lkeCwgY2ZnLT5mbGFncyk7Cj4gLQkJ CXJldCA9IC1FSU5WQUw7Cj4gLQkJCWdvdG8gZXJyOwo+IC0JCX0KPiAtCj4gLQkJaHdfZHMgPSBk cHVfY3J0Yy0+bWl4ZXJzW2xtX2lkeF0uaHdfZHM7Cj4gLQo+IC0JCWlmICghbWF4X2luX3dpZHRo ICYmICFtYXhfb3V0X3dpZHRoKSB7Cj4gLQkJCW1heF9pbl93aWR0aCA9IGh3X2RzLT5zY2wtPnRv cC0+bWF4aW5wdXR3aWR0aDsKPiAtCQkJbWF4X291dF93aWR0aCA9IGh3X2RzLT5zY2wtPnRvcC0+ bWF4b3V0cHV0d2lkdGg7Cj4gLQo+IC0JCQlpZiAoY3N0YXRlLT5udW1fZHMgPT0gQ1JUQ19EVUFM X01JWEVSUykKPiAtCQkJCW1heF9pbl93aWR0aCAtPSBEUFVfRFNfT1ZFUkZFVENIX1NJWkU7Cj4g LQo+IC0JCQlEUFVfREVCVUcoIm1heCBEUyB3aWR0aCBbJWQsJWRdIGZvciBudW1fZHMgPSAlZFxu IiwKPiAtCQkJCW1heF9pbl93aWR0aCwgbWF4X291dF93aWR0aCwgY3N0YXRlLT5udW1fZHMpOwo+ IC0JCX0KPiAtCj4gLQkJLyogQ2hlY2sgTE0gd2lkdGggYW5kIGhlaWdodCAqLwo+IC0JCWlmIChj ZmctPmxtX3dpZHRoID4gKG1vZGUtPmhkaXNwbGF5L2RwdV9jcnRjLT5udW1fbWl4ZXJzKSB8fAo+ IC0JCQljZmctPmxtX2hlaWdodCA+IG1vZGUtPnZkaXNwbGF5IHx8Cj4gLQkJCSFjZmctPmxtX3dp ZHRoIHx8ICFjZmctPmxtX2hlaWdodCkgewo+IC0JCQlEUFVfRVJST1IoImludmFsaWQgbG0gc2l6 ZVslZCwlZF0gZGlzcGxheSBbJWQsJWRdXG4iLAo+IC0JCQkJY2ZnLT5sbV93aWR0aCwKPiAtCQkJ CWNmZy0+bG1faGVpZ2h0LAo+IC0JCQkJbW9kZS0+aGRpc3BsYXkvZHB1X2NydGMtPm51bV9taXhl cnMsCj4gLQkJCQltb2RlLT52ZGlzcGxheSk7Cj4gLQkJCXJldCA9IC1FMkJJRzsKPiAtCQkJZ290 byBlcnI7Cj4gLQkJfQo+IC0KPiAtCQlpZiAoIXByZXZfbG1fd2lkdGggJiYgIXByZXZfbG1faGVp Z2h0KSB7Cj4gLQkJCXByZXZfbG1fd2lkdGggPSBjZmctPmxtX3dpZHRoOwo+IC0JCQlwcmV2X2xt X2hlaWdodCA9IGNmZy0+bG1faGVpZ2h0Owo+IC0JCX0gZWxzZSB7Cj4gLQkJCWlmIChjZmctPmxt X3dpZHRoICE9IHByZXZfbG1fd2lkdGggfHwKPiAtCQkJCWNmZy0+bG1faGVpZ2h0ICE9IHByZXZf bG1faGVpZ2h0KSB7Cj4gLQkJCQlEUFVfRVJST1IoImxtIHNpemU6bGVmdFslZCwlZF0sIHJpZ2h0 WyVkICVkXVxuIiwKPiAtCQkJCQljZmctPmxtX3dpZHRoLCBjZmctPmxtX2hlaWdodCwKPiAtCQkJ CQlwcmV2X2xtX3dpZHRoLCBwcmV2X2xtX2hlaWdodCk7Cj4gLQkJCQlyZXQgPSAtRUlOVkFMOwo+ IC0JCQkJZ290byBlcnI7Cj4gLQkJCX0KPiAtCQl9Cj4gLQo+IC0JCS8qIENoZWNrIHNjYWxlciBk YXRhICovCj4gLQkJaWYgKGNmZy0+ZmxhZ3MgJiBEUFVfRFJNX0RFU1RTQ0FMRVJfU0NBTEVfVVBE QVRFIHx8Cj4gLQkJCWNmZy0+ZmxhZ3MgJiBEUFVfRFJNX0RFU1RTQ0FMRVJfRU5IQU5DRVJfVVBE QVRFKSB7Cj4gLQkJCWlmICghY2ZnLT5zY2wzX2NmZykgewo+IC0JCQkJcmV0ID0gLUVJTlZBTDsK PiAtCQkJCURQVV9FUlJPUigibnVsbCBzY2FsZSBkYXRhXG4iKTsKPiAtCQkJCWdvdG8gZXJyOwo+ IC0JCQl9Cj4gLQkJCWlmIChjZmctPnNjbDNfY2ZnLT5zcmNfd2lkdGhbMF0gPiBtYXhfaW5fd2lk dGggfHwKPiAtCQkJCWNmZy0+c2NsM19jZmctPmRzdF93aWR0aCA+IG1heF9vdXRfd2lkdGggfHwK PiAtCQkJCSFjZmctPnNjbDNfY2ZnLT5zcmNfd2lkdGhbMF0gfHwKPiAtCQkJCSFjZmctPnNjbDNf Y2ZnLT5kc3Rfd2lkdGgpIHsKPiAtCQkJCURQVV9FUlJPUigic2NhbGUgd2lkdGgoJWQgJWQpIGZv ciBkcy0lZDpcbiIsCj4gLQkJCQkJY2ZnLT5zY2wzX2NmZy0+c3JjX3dpZHRoWzBdLAo+IC0JCQkJ CWNmZy0+c2NsM19jZmctPmRzdF93aWR0aCwKPiAtCQkJCQlod19kcy0+aWR4IC0gRFNfMCk7Cj4g LQkJCQlEUFVfRVJST1IoInNjYWxlX2VuID0gJWQsIERFX2VuID0lZFxuIiwKPiAtCQkJCQljZmct PnNjbDNfY2ZnLT5lbmFibGUsCj4gLQkJCQkJY2ZnLT5zY2wzX2NmZy0+ZGUuZW5hYmxlKTsKPiAt Cj4gLQkJCQljZmctPmZsYWdzICY9Cj4gLQkJCQkJfkRQVV9EUk1fREVTVFNDQUxFUl9TQ0FMRV9V UERBVEU7Cj4gLQkJCQljZmctPmZsYWdzICY9Cj4gLQkJCQkJfkRQVV9EUk1fREVTVFNDQUxFUl9F TkhBTkNFUl9VUERBVEU7Cj4gLQo+IC0JCQkJcmV0ID0gLUVJTlZBTDsKPiAtCQkJCWdvdG8gZXJy Owo+IC0JCQl9Cj4gLQkJfQo+IC0KPiAtCQlpZiAoY2ZnLT5mbGFncyAmIERQVV9EUk1fREVTVFND QUxFUl9FTkFCTEUpCj4gLQkJCW51bV9kc19lbmFibGUrKzsKPiAtCj4gLQkJLyoqCj4gLQkJICog VmFsaWRhdGlvbiBzdWNjZXNzZnVsLCBpbmRpY2F0b3IgZm9yIGZsdXNoIHRvIGJlIGlzc3VlZAo+ IC0JCSAqLwo+IC0JCWNmZy0+c2V0X2xtX2ZsdXNoID0gdHJ1ZTsKPiAtCj4gLQkJRFBVX0RFQlVH KCJkc1slZF06IGZsYWdzID0gMHglWFxuIiwKPiAtCQkJaHdfZHMtPmlkeCAtIERTXzAsIGNmZy0+ ZmxhZ3MpOwo+IC0JfQo+IC0KPiAtZGlzYWJsZToKPiAtCURQVV9ERUJVRygiZGVzdCBzY2FsZXIg ZW5hYmxlIHN0YXR1cywgb2xkID0gJWQsIG5ldyA9ICVkIiwKPiAtCQljc3RhdGUtPm51bV9kc19l bmFibGVkLCBudW1fZHNfZW5hYmxlKTsKPiAtCURQVV9FVlQzMihEUk1JRChjcnRjKSwgY3N0YXRl LT5udW1fZHNfZW5hYmxlZCwgbnVtX2RzX2VuYWJsZSwKPiAtCQljc3RhdGUtPmRzX2RpcnR5KTsK PiAtCj4gLQlpZiAoY3N0YXRlLT5udW1fZHNfZW5hYmxlZCAhPSBudW1fZHNfZW5hYmxlKSB7Cj4g LQkJLyogRGlzYWJsaW5nIGRlc3RpbmF0aW9uIHNjYWxlciAqLwo+IC0JCWlmICghbnVtX2RzX2Vu YWJsZSkgewo+IC0JCQlmb3IgKGkgPSAwOyBpIDwgZHB1X2NydGMtPm51bV9taXhlcnM7IGkrKykg ewo+IC0JCQkJY2ZnID0gJmNzdGF0ZS0+ZHNfY2ZnW2ldOwo+IC0JCQkJY2ZnLT5uZHggPSBpOwo+ IC0JCQkJLyogVXBkYXRlIHNjYWxlciBzZXR0aW5ncyBpbiBkaXNhYmxlIGNhc2UgKi8KPiAtCQkJ CWNmZy0+ZmxhZ3MgPSBEUFVfRFJNX0RFU1RTQ0FMRVJfU0NBTEVfVVBEQVRFOwo+IC0JCQkJY2Zn LT5zY2wzX2NmZy0+ZW5hYmxlID0gMDsKPiAtCQkJCWNmZy0+c2NsM19jZmctPmRlLmVuYWJsZSA9 IDA7Cj4gLQkJCQljZmctPnNldF9sbV9mbHVzaCA9IHRydWU7Cj4gLQkJCX0KPiAtCQl9Cj4gLQkJ Y3N0YXRlLT5udW1fZHNfZW5hYmxlZCA9IG51bV9kc19lbmFibGU7Cj4gLQkJY3N0YXRlLT5kc19k aXJ0eSA9IHRydWU7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLQo+IC1lcnI6Cj4gLQljc3Rh dGUtPmRzX2RpcnR5ID0gZmFsc2U7Cj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+ICBzdGF0aWMg dm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4ZXJfZm9yX2VuY29kZXIoCj4gIAkJc3RydWN0IGRybV9j cnRjICpjcnRjLAo+ICAJCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jKQo+IEBAIC0xODEzLDExICsx MTIzLDEwIEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXR1cF9taXhlcl9mb3JfZW5jb2RlcigK PiAgCXN0cnVjdCBkcHVfY3J0Y19taXhlciAqbWl4ZXI7Cj4gIAlzdHJ1Y3QgZHB1X2h3X2N0bCAq bGFzdF92YWxpZF9jdGwgPSBOVUxMOwo+ICAJaW50IGk7Cj4gLQlzdHJ1Y3QgZHB1X3JtX2h3X2l0 ZXIgbG1faXRlciwgY3RsX2l0ZXIsIGRzX2l0ZXI7Cj4gKwlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIg bG1faXRlciwgY3RsX2l0ZXI7Cj4gIAo+ICAJZHB1X3JtX2luaXRfaHdfaXRlcigmbG1faXRlciwg ZW5jLT5iYXNlLmlkLCBEUFVfSFdfQkxLX0xNKTsKPiAgCWRwdV9ybV9pbml0X2h3X2l0ZXIoJmN0 bF9pdGVyLCBlbmMtPmJhc2UuaWQsIERQVV9IV19CTEtfQ1RMKTsKPiAtCWRwdV9ybV9pbml0X2h3 X2l0ZXIoJmRzX2l0ZXIsIGVuYy0+YmFzZS5pZCwgRFBVX0hXX0JMS19EUyk7Cj4gIAo+ICAJLyog U2V0IHVwIGFsbCB0aGUgbWl4ZXJzIGFuZCBjdGxzIHJlc2VydmVkIGJ5IHRoaXMgZW5jb2RlciAq Lwo+ICAJZm9yIChpID0gZHB1X2NydGMtPm51bV9taXhlcnM7IGkgPCBBUlJBWV9TSVpFKGRwdV9j cnRjLT5taXhlcnMpOyBpKyspIHsKPiBAQCAtMTg0NCwxMCArMTE1Myw2IEBAIHN0YXRpYyB2b2lk IF9kcHVfY3J0Y19zZXR1cF9taXhlcl9mb3JfZW5jb2RlcigKPiAgCQkJcmV0dXJuOwo+ICAJCX0K PiAgCj4gLQkJLyogRFMgbWF5IGJlIG51bGwgKi8KPiAtCQkodm9pZCkgZHB1X3JtX2dldF9odyhy bSwgJmRzX2l0ZXIpOwo+IC0JCW1peGVyLT5od19kcyA9IChzdHJ1Y3QgZHB1X2h3X2RzICopZHNf aXRlci5odzsKPiAtCj4gIAkJbWl4ZXItPmVuY29kZXIgPSBlbmM7Cj4gIAo+ICAJCWRwdV9jcnRj LT5udW1fbWl4ZXJzKys7Cj4gQEAgLTE4NTUsOSArMTE2MCw2IEBAIHN0YXRpYyB2b2lkIF9kcHVf Y3J0Y19zZXR1cF9taXhlcl9mb3JfZW5jb2RlcigKPiAgCQkJCWksIG1peGVyLT5od19sbS0+aWR4 IC0gTE1fMCk7Cj4gIAkJRFBVX0RFQlVHKCJzZXR1cCBtaXhlciAlZDogY3RsICVkXG4iLAo+ICAJ CQkJaSwgbWl4ZXItPmh3X2N0bC0+aWR4IC0gQ1RMXzApOwo+IC0JCWlmIChtaXhlci0+aHdfZHMp Cj4gLQkJCURQVV9ERUJVRygic2V0dXAgbWl4ZXIgJWQ6IGRzICVkXG4iLAo+IC0JCQkJaSwgbWl4 ZXItPmh3X2RzLT5pZHggLSBEU18wKTsKPiAgCX0KPiAgfQo+ICAKPiBAQCAtMTk3Myw3ICsxMjc1 LDYgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKPiAgCQlyZXR1cm47Cj4gIAo+ICAJX2RwdV9jcnRjX2JsZW5kX3NldHVwKGNydGMpOwo+ IC0JX2RwdV9jcnRjX2Rlc3Rfc2NhbGVyX3NldHVwKGNydGMpOwo+ICAKPiAgCS8qCj4gIAkgKiBQ UF9ET05FIGlycSBpcyBvbmx5IHVzZWQgYnkgY29tbWFuZCBtb2RlIGZvciBub3cuCj4gQEAgLTI2 NzIsMTMgKzE5NzMsNiBAQCBzdGF0aWMgaW50IGRwdV9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCj4gIAo+ICAJbWVtc2V0KHBpcGVfc3RhZ2VkLCAwLCBzaXplb2YocGlw ZV9zdGFnZWQpKTsKPiAgCj4gLQlyYyA9IF9kcHVfY3J0Y19jaGVja19kZXN0X3NjYWxlcl9kYXRh KGNydGMsIHN0YXRlKTsKPiAtCWlmIChyYykgewo+IC0JCURQVV9FUlJPUigiY3J0YyVkIGZhaWxl ZCBkZXN0IHNjYWxlciBjaGVjayAlZFxuIiwKPiAtCQkJY3J0Yy0+YmFzZS5pZCwgcmMpOwo+IC0J CWdvdG8gZW5kOwo+IC0JfQo+IC0KPiAgCW1peGVyX3dpZHRoID0gZHB1X2NydGNfZ2V0X21peGVy X3dpZHRoKGRwdV9jcnRjLCBjc3RhdGUsIG1vZGUpOwo+ICAKPiAgCV9kcHVfY3J0Y19zZXR1cF9s bV9ib3VuZHMoY3J0Yywgc3RhdGUpOwo+IEBAIC0yNjk5LDE5ICsxOTkzLDYgQEAgc3RhdGljIGlu dCBkcHVfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJCXBzdGF0 ZXNbY250XS5zdGFnZSA9IHBzdGF0ZS0+bm9ybWFsaXplZF96cG9zOwo+ICAJCXBzdGF0ZXNbY250 XS5waXBlX2lkID0gZHB1X3BsYW5lX3BpcGUocGxhbmUpOwo+ICAKPiAtCQkvKiBjaGVjayBkaW0g bGF5ZXIgc3RhZ2Ugd2l0aCBldmVyeSBwbGFuZSAqLwo+IC0JCWZvciAoaSA9IDA7IGkgPCBjc3Rh dGUtPm51bV9kaW1fbGF5ZXJzOyBpKyspIHsKPiAtCQkJaWYgKGNzdGF0ZS0+ZGltX2xheWVyW2ld LnN0YWdlCj4gLQkJCQkJPT0gKHBzdGF0ZXNbY250XS5zdGFnZSArIERQVV9TVEFHRV8wKSkgewo+ IC0JCQkJRFBVX0VSUk9SKAo+IC0JCQkJCSJwbGFuZTolZC9kaW1fbGF5ZXI6JWktc2FtZSBzdGFn ZTolZFxuIiwKPiAtCQkJCQlwbGFuZS0+YmFzZS5pZCwgaSwKPiAtCQkJCQljc3RhdGUtPmRpbV9s YXllcltpXS5zdGFnZSk7Cj4gLQkJCQlyYyA9IC1FSU5WQUw7Cj4gLQkJCQlnb3RvIGVuZDsKPiAt CQkJfQo+IC0JCX0KPiAtCj4gIAkJaWYgKHBpcGVfc3RhZ2VkW3BzdGF0ZXNbY250XS5waXBlX2lk XSkgewo+ICAJCQltdWx0aXJlY3RfcGxhbmVbbXVsdGlyZWN0X2NvdW50XS5yMCA9Cj4gIAkJCQlw aXBlX3N0YWdlZFtwc3RhdGVzW2NudF0ucGlwZV9pZF07Cj4gQEAgLTI5NDcsNTIgKzIyMjgsMTEg QEAgc3RhdGljIHZvaWQgZHB1X2NydGNfaW5zdGFsbF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKPiAgCQlyZXR1cm47Cj4gIAl9Cj4gIAo+IC0JLyogcmFuZ2UgcHJvcGVydGllcyAq Lwo+IC0JbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZv LAo+IC0JCQkiY29yZV9jbGsiLCAweDAsIDAsIFU2NF9NQVgsCj4gLQkJCWRwdV9rbXMtPnBlcmYu bWF4X2NvcmVfY2xrX3JhdGUsCj4gLQkJCUNSVENfUFJPUF9DT1JFX0NMSyk7Cj4gLQltc21fcHJv cGVydHlfaW5zdGFsbF9yYW5nZSgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCj4gLQkJCSJjb3Jl X2FiIiwgMHgwLCAwLCBVNjRfTUFYLAo+IC0JCQljYXRhbG9nLT5wZXJmLm1heF9id19oaWdoICog MTAwMFVMTCwKPiAtCQkJQ1JUQ19QUk9QX0NPUkVfQUIpOwo+IC0JbXNtX3Byb3BlcnR5X2luc3Rh bGxfcmFuZ2UoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAo+IC0JCQkiY29yZV9pYiIsIDB4MCwg MCwgVTY0X01BWCwKPiAtCQkJY2F0YWxvZy0+cGVyZi5tYXhfYndfaGlnaCAqIDEwMDBVTEwsCj4g LQkJCUNSVENfUFJPUF9DT1JFX0lCKTsKPiAtCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZk cHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKPiAtCQkJImxsY2NfYWIiLCAweDAsIDAsIFU2NF9NQVgs Cj4gLQkJCWNhdGFsb2ctPnBlcmYubWF4X2J3X2hpZ2ggKiAxMDAwVUxMLAo+IC0JCQlDUlRDX1BS T1BfTExDQ19BQik7Cj4gLQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmZHB1X2NydGMtPnBy b3BlcnR5X2luZm8sCj4gLQkJCSJsbGNjX2liIiwgMHgwLCAwLCBVNjRfTUFYLAo+IC0JCQljYXRh bG9nLT5wZXJmLm1heF9id19oaWdoICogMTAwMFVMTCwKPiAtCQkJQ1JUQ19QUk9QX0xMQ0NfSUIp Owo+IC0JbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZv LAo+IC0JCQkiZHJhbV9hYiIsIDB4MCwgMCwgVTY0X01BWCwKPiAtCQkJY2F0YWxvZy0+cGVyZi5t YXhfYndfaGlnaCAqIDEwMDBVTEwsCj4gLQkJCUNSVENfUFJPUF9EUkFNX0FCKTsKPiAtCW1zbV9w cm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKPiAtCQkJImRy YW1faWIiLCAweDAsIDAsIFU2NF9NQVgsCj4gLQkJCWNhdGFsb2ctPnBlcmYubWF4X2J3X2hpZ2gg KiAxMDAwVUxMLAo+IC0JCQlDUlRDX1BST1BfRFJBTV9JQik7Cj4gLQo+IC0JbXNtX3Byb3BlcnR5 X2luc3RhbGxfcmFuZ2UoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAo+IC0JCSJpZGxlX3RpbWVv dXQiLCBJRExFX1RJTUVPVVQsIDAsIFU2NF9NQVgsIDAsCj4gLQkJQ1JUQ19QUk9QX0lETEVfVElN RU9VVCk7Cj4gLQo+ICAJbXNtX3Byb3BlcnR5X2luc3RhbGxfYmxvYigmZHB1X2NydGMtPnByb3Bl cnR5X2luZm8sICJjYXBhYmlsaXRpZXMiLAo+ICAJCURSTV9NT0RFX1BST1BfSU1NVVRBQkxFLCBD UlRDX1BST1BfSU5GTyk7Cj4gIAo+ICAJZHB1X2ttc19pbmZvX3Jlc2V0KGluZm8pOwo+ICAKPiAt CWlmIChjYXRhbG9nLT5jYXBzLT5oYXNfZGltX2xheWVyKSB7Cj4gLQkJbXNtX3Byb3BlcnR5X2lu c3RhbGxfdm9sYXRpbGVfcmFuZ2UoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAo+IC0JCQkiZGlt X2xheWVyX3YxIiwgMHgwLCAwLCB+MCwgMCwgQ1JUQ19QUk9QX0RJTV9MQVlFUl9WMSk7Cj4gLQkJ ZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgImRpbV9sYXllcl92MV9tYXhfbGF5ZXJzIiwK PiAtCQkJCURQVV9NQVhfRElNX0xBWUVSUyk7Cj4gLQl9Cj4gLQo+ICAJZHB1X2ttc19pbmZvX2Fk ZF9rZXlpbnQoaW5mbywgImh3X3ZlcnNpb24iLCBjYXRhbG9nLT5od3ZlcnNpb24pOwo+ICAJZHB1 X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1heF9saW5ld2lkdGgiLAo+ICAJCQljYXRhbG9n LT5jYXBzLT5tYXhfbWl4ZXJfd2lkdGgpOwo+IEBAIC0zMDEyLDM5ICsyMjUyLDYgQEAgc3RhdGlj IHZvaWQgZHB1X2NydGNfaW5zdGFsbF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK PiAgCQkJCQkic21hcnRfZG1hX3JldiIsICJzbWFydF9kbWFfdjIiKTsKPiAgCX0KPiAgCj4gLQlp ZiAoY2F0YWxvZy0+bWRwWzBdLmhhc19kZXN0X3NjYWxlcikgewo+IC0JCWRwdV9rbXNfaW5mb19h ZGRfa2V5aW50KGluZm8sICJoYXNfZGVzdF9zY2FsZXIiLAo+IC0JCQkJY2F0YWxvZy0+bWRwWzBd Lmhhc19kZXN0X3NjYWxlcik7Cj4gLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgImRl c3Rfc2NhbGVyX2NvdW50IiwKPiAtCQkJCQljYXRhbG9nLT5kc19jb3VudCk7Cj4gLQo+IC0JCWlm IChjYXRhbG9nLT5kc1swXS50b3ApIHsKPiAtCQkJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5m bywKPiAtCQkJCQkibWF4X2Rlc3Rfc2NhbGVyX2lucHV0X3dpZHRoIiwKPiAtCQkJCQljYXRhbG9n LT5kc1swXS50b3AtPm1heGlucHV0d2lkdGgpOwo+IC0JCQlkcHVfa21zX2luZm9fYWRkX2tleWlu dChpbmZvLAo+IC0JCQkJCSJtYXhfZGVzdF9zY2FsZXJfb3V0cHV0X3dpZHRoIiwKPiAtCQkJCQlj YXRhbG9nLT5kc1swXS50b3AtPm1heGlucHV0d2lkdGgpOwo+IC0JCQlkcHVfa21zX2luZm9fYWRk X2tleWludChpbmZvLCAibWF4X2Rlc3Rfc2NhbGVfdXAiLAo+IC0JCQkJCWNhdGFsb2ctPmRzWzBd LnRvcC0+bWF4dXBzY2FsZSk7Cj4gLQkJfQo+IC0KPiAtCQlpZiAoY2F0YWxvZy0+ZHNbMF0uZmVh dHVyZXMgJiBCSVQoRFBVX1NTUFBfU0NBTEVSX1FTRUVEMykpIHsKPiAtCQkJbXNtX3Byb3BlcnR5 X2luc3RhbGxfdm9sYXRpbGVfcmFuZ2UoCj4gLQkJCQkJJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZv LCAiZGVzdF9zY2FsZXIiLAo+IC0JCQkJCTB4MCwgMCwgfjAsIDAsIENSVENfUFJPUF9ERVNUX1ND QUxFUik7Cj4gLQkJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJmRwdV9jcnRjLT5wcm9wZXJ0 eV9pbmZvLAo+IC0JCQkJCSJkc19sdXRfZWQiLCAwLAo+IC0JCQkJCUNSVENfUFJPUF9ERVNUX1ND QUxFUl9MVVRfRUQpOwo+IC0JCQltc21fcHJvcGVydHlfaW5zdGFsbF9ibG9iKCZkcHVfY3J0Yy0+ cHJvcGVydHlfaW5mbywKPiAtCQkJCQkiZHNfbHV0X2NpciIsIDAsCj4gLQkJCQkJQ1JUQ19QUk9Q X0RFU1RfU0NBTEVSX0xVVF9DSVIpOwo+IC0JCQltc21fcHJvcGVydHlfaW5zdGFsbF9ibG9iKCZk cHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKPiAtCQkJCQkiZHNfbHV0X3NlcCIsIDAsCj4gLQkJCQkJ Q1JUQ19QUk9QX0RFU1RfU0NBTEVSX0xVVF9TRVApOwo+IC0JCX0KPiAtCX0KPiAtCj4gIAlkcHVf a21zX2luZm9fYWRkX2tleWludChpbmZvLCAiaGFzX3NyY19zcGxpdCIsCj4gIAkJCQljYXRhbG9n LT5jYXBzLT5oYXNfc3JjX3NwbGl0KTsKPiAgCWlmIChjYXRhbG9nLT5wZXJmLm1heF9id19sb3cp Cj4gQEAgLTMxMTMsNyArMjMyMCw3IEBAIHN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX3NldF9w cm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIHsKPiAgCXN0cnVjdCBkcHVfY3J0YyAq ZHB1X2NydGM7Cj4gIAlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZTsKPiAtCWludCBpZHgs IHJldCA9IC1FSU5WQUw7Cj4gKwlpbnQgcmV0ID0gLUVJTlZBTDsKPiAgCj4gIAlpZiAoIWNydGMg fHwgIXN0YXRlIHx8ICFwcm9wZXJ0eSkgewo+ICAJCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVu dChzKVxuIik7Cj4gQEAgLTMxMjIsNDUgKzIzMjksOCBAQCBzdGF0aWMgaW50IGRwdV9jcnRjX2F0 b21pY19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJCWNzdGF0ZSA9IHRv X2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKPiAgCQlyZXQgPSBtc21fcHJvcGVydHlfYXRvbWljX3Nl dCgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCj4gIAkJCQkmY3N0YXRlLT5wcm9wZXJ0eV9zdGF0 ZSwgcHJvcGVydHksIHZhbCk7Cj4gLQkJaWYgKCFyZXQpIHsKPiAtCQkJaWR4ID0gbXNtX3Byb3Bl cnR5X2luZGV4KCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKPiAtCQkJCQlwcm9wZXJ0eSk7Cj4g LQkJCXN3aXRjaCAoaWR4KSB7Cj4gLQkJCWNhc2UgQ1JUQ19QUk9QX0RJTV9MQVlFUl9WMToKPiAt CQkJCV9kcHVfY3J0Y19zZXRfZGltX2xheWVyX3YxKGNzdGF0ZSwKPiAtCQkJCQkJCXU2NF90b191 c2VyX3B0cih2YWwpKTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIENSVENfUFJPUF9ERVNUX1ND QUxFUjoKPiAtCQkJCXJldCA9IF9kcHVfY3J0Y19zZXRfZGVzdF9zY2FsZXIoZHB1X2NydGMsCj4g LQkJCQkJCWNzdGF0ZSwgdTY0X3RvX3VzZXJfcHRyKHZhbCkpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJ CWNhc2UgQ1JUQ19QUk9QX0RFU1RfU0NBTEVSX0xVVF9FRDoKPiAtCQkJY2FzZSBDUlRDX1BST1Bf REVTVF9TQ0FMRVJfTFVUX0NJUjoKPiAtCQkJY2FzZSBDUlRDX1BST1BfREVTVF9TQ0FMRVJfTFVU X1NFUDoKPiAtCQkJCXJldCA9IF9kcHVfY3J0Y19zZXRfZGVzdF9zY2FsZXJfbHV0KGRwdV9jcnRj LAo+IC0JCQkJCQkJCWNzdGF0ZSwgaWR4KTsKPiAtCQkJCWJyZWFrOwo+IC0JCQljYXNlIENSVENf UFJPUF9DT1JFX0NMSzoKPiAtCQkJY2FzZSBDUlRDX1BST1BfQ09SRV9BQjoKPiAtCQkJY2FzZSBD UlRDX1BST1BfQ09SRV9JQjoKPiAtCQkJCWNzdGF0ZS0+YndfY29udHJvbCA9IHRydWU7Cj4gLQkJ CQlicmVhazsKPiAtCQkJY2FzZSBDUlRDX1BST1BfTExDQ19BQjoKPiAtCQkJY2FzZSBDUlRDX1BS T1BfTExDQ19JQjoKPiAtCQkJY2FzZSBDUlRDX1BST1BfRFJBTV9BQjoKPiAtCQkJY2FzZSBDUlRD X1BST1BfRFJBTV9JQjoKPiAtCQkJCWNzdGF0ZS0+YndfY29udHJvbCA9IHRydWU7Cj4gLQkJCQlj c3RhdGUtPmJ3X3NwbGl0X3ZvdGUgPSB0cnVlOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgQ1JU Q19QUk9QX0lETEVfVElNRU9VVDoKPiAtCQkJCV9kcHVfY3J0Y19zZXRfaWRsZV90aW1lb3V0KGNy dGMsIHZhbCk7Cj4gLQkJCWRlZmF1bHQ6Cj4gLQkJCQkvKiBub3RoaW5nIHRvIGRvICovCj4gLQkJ CQlicmVhazsKPiAtCQkJfQo+IC0JCX0gZWxzZSB7Cj4gKwkJaWYgKHJldCkKPiAgCQkJRFJNX0VS Uk9SKCJmYWlsZWQgdG8gc2V0IHRoZSBwcm9wZXJ0eVxuIik7Cj4gLQkJfQo+ICAKPiAgCQlEUFVf REVCVUcoImNydGMlZCAlc1slZF0gPD0gMHglbGx4IHJldD0lZFxuIiwgY3J0Yy0+YmFzZS5pZCwK PiAgCQkJCXByb3BlcnR5LT5uYW1lLCBwcm9wZXJ0eS0+YmFzZS5pZCwgdmFsLCByZXQpOwo+IEBA IC0zMjc2LDIzICsyNDQ2LDYgQEAgc3RhdGljIGludCBfZHB1X2RlYnVnZnNfc3RhdHVzX3Nob3co c3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQo+ICAKPiAgCXNlcV9wdXRzKHMsICJcbiIp Owo+ICAKPiAtCWZvciAoaSA9IDA7IGkgPCBjc3RhdGUtPm51bV9kaW1fbGF5ZXJzOyBpKyspIHsK PiAtCQlzdHJ1Y3QgZHB1X2h3X2RpbV9sYXllciAqZGltX2xheWVyID0gJmNzdGF0ZS0+ZGltX2xh eWVyW2ldOwo+IC0KPiAtCQlzZXFfcHJpbnRmKHMsICJcdGRpbV9sYXllcjolZF0gc3RhZ2U6JWQg ZmxhZ3M6JWRcbiIsCj4gLQkJCQlpLCBkaW1fbGF5ZXItPnN0YWdlLCBkaW1fbGF5ZXItPmZsYWdz KTsKPiAtCQlzZXFfcHJpbnRmKHMsICJcdGRzdF94OiVkIGRzdF95OiVkIGRzdF93OiVkIGRzdF9o OiVkXG4iLAo+IC0JCQkJZGltX2xheWVyLT5yZWN0LngsIGRpbV9sYXllci0+cmVjdC55LAo+IC0J CQkJZGltX2xheWVyLT5yZWN0LncsIGRpbV9sYXllci0+cmVjdC5oKTsKPiAtCQlzZXFfcHJpbnRm KHMsCj4gLQkJCSJcdGNvbG9yXzA6JWQgY29sb3JfMTolZCBjb2xvcl8yOiVkIGNvbG9yXzM6JWRc biIsCj4gLQkJCQlkaW1fbGF5ZXItPmNvbG9yX2ZpbGwuY29sb3JfMCwKPiAtCQkJCWRpbV9sYXll ci0+Y29sb3JfZmlsbC5jb2xvcl8xLAo+IC0JCQkJZGltX2xheWVyLT5jb2xvcl9maWxsLmNvbG9y XzIsCj4gLQkJCQlkaW1fbGF5ZXItPmNvbG9yX2ZpbGwuY29sb3JfMyk7Cj4gLQkJc2VxX3B1dHMo cywgIlxuIik7Cj4gLQl9Cj4gLQo+ICAJZHJtX2F0b21pY19jcnRjX2Zvcl9lYWNoX3BsYW5lKHBs YW5lLCBjcnRjKSB7Cj4gIAkJcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0 ZSk7Cj4gIAkJc3RhdGUgPSBwbGFuZS0+c3RhdGU7Cj4gQEAgLTM3NzksOSArMjkzMiw2IEBAIHN0 cnVjdCBkcm1fY3J0YyAqZHB1X2NydGNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiAgCj4gIAlkcHVfY3J0Y19pbnN0YWxsX3Byb3BlcnRpZXMo Y3J0Yywga21zLT5jYXRhbG9nKTsKPiAgCj4gLQkvKiBJbml0IGRlc3Qgc2NhbGVyICovCj4gLQlf ZHB1X2NydGNfZGVzdF9zY2FsZXJfaW5pdChkcHVfY3J0Yywga21zLT5jYXRhbG9nKTsKPiAtCj4g IAlEUFVfREVCVUcoIiVzOiBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgY3J0Y1xuIiwgZHB1X2Ny dGMtPm5hbWUpOwo+ICAJcmV0dXJuIGNydGM7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9jcnRjLmgKPiBpbmRleCA1ZjM4MGI4Li42NjI4ZWIzIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCj4gQEAgLTI2LDcgKzI2LDYgQEAKPiAg I2luY2x1ZGUgImRwdV9rbXMuaCIKPiAgI2luY2x1ZGUgImRwdV9jb3JlX3BlcmYuaCIKPiAgI2lu Y2x1ZGUgImRwdV9od19ibGsuaCIKPiAtI2luY2x1ZGUgImRwdV9od19kcy5oIgo+ICAKPiAgI2Rl ZmluZSBEUFVfQ1JUQ19OQU1FX1NJWkUJMTIKPiAgCj4gQEAgLTg3LDcgKzg2LDYgQEAgc3RydWN0 IGRwdV9jcnRjX3NtbXVfc3RhdGVfZGF0YSB7Cj4gICAqIHN0cnVjdCBkcHVfY3J0Y19taXhlcjog c3RvcmVzIHRoZSBtYXAgZm9yIGVhY2ggdmlydHVhbCBwaXBlbGluZSBpbiB0aGUgQ1JUQwo+ICAg KiBAaHdfbG06CUxNIEhXIERyaXZlciBjb250ZXh0Cj4gICAqIEBod19jdGw6CUNUTCBQYXRoIEhX IGRyaXZlciBjb250ZXh0Cj4gLSAqIEBod19kczoJRFMgSFcgZHJpdmVyIGNvbnRleHQKPiAgICog QGVuY29kZXI6CUVuY29kZXIgYXR0YWNoZWQgdG8gdGhpcyBsbSAmIGN0bAo+ICAgKiBAbWl4ZXJf b3BfbW9kZToJbWl4ZXIgYmxlbmRpbmcgb3BlcmF0aW9uIG1vZGUKPiAgICogQGZsdXNoX21hc2s6 CW1peGVyIGZsdXNoIG1hc2sgZm9yIGN0bCwgbWl4ZXIgYW5kIHBpcGUKPiBAQCAtOTUsNyArOTMs NiBAQCBzdHJ1Y3QgZHB1X2NydGNfc21tdV9zdGF0ZV9kYXRhIHsKPiAgc3RydWN0IGRwdV9jcnRj X21peGVyIHsKPiAgCXN0cnVjdCBkcHVfaHdfbWl4ZXIgKmh3X2xtOwo+ICAJc3RydWN0IGRwdV9o d19jdGwgKmh3X2N0bDsKPiAtCXN0cnVjdCBkcHVfaHdfZHMgKmh3X2RzOwo+ICAJc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyOwo+ICAJdTMyIG1peGVyX29wX21vZGU7Cj4gIAl1MzIgZmx1c2hf bWFzazsKPiBAQCAtMzE0LDEyICszMTEsNiBAQCBzdHJ1Y3QgZHB1X2NydGNfcmVzcG9vbCB7Cj4g ICAqIEBwcm9wZXJ0eV9zdGF0ZTogTG9jYWwgc3RvcmFnZSBmb3IgbXNtX3Byb3AgcHJvcGVydGll cwo+ICAgKiBAcHJvcGVydHlfdmFsdWVzOiBDdXJyZW50IGNydGMgcHJvcGVydHkgdmFsdWVzCj4g ICAqIEBpbnB1dF9mZW5jZV90aW1lb3V0X25zIDogQ2FjaGVkIGlucHV0IGZlbmNlIHRpbWVvdXQs IGluIG5zCj4gLSAqIEBudW1fZGltX2xheWVyczogTnVtYmVyIG9mIGRpbSBsYXllcnMKPiAtICog QGRpbV9sYXllcjogRGltIGxheWVyIGNvbmZpZ3MKPiAtICogQG51bV9kczogTnVtYmVyIG9mIGRl c3RpbmF0aW9uIHNjYWxlcnMgdG8gYmUgY29uZmlndXJlZAo+IC0gKiBAbnVtX2RzX2VuYWJsZWQ6 IE51bWJlciBvZiBkZXN0aW5hdGlvbiBzY2FsZXJzIGVuYWJsZWQKPiAtICogQGRzX2RpcnR5OiBC b29sZWFuIHRvIGluZGljYXRlIGlmIGRpcnR5IG9yIG5vdAo+IC0gKiBAZHNfY2ZnOiBEZXN0aW5h dGlvbiBzY2FsZXIgY29uZmlnCj4gICAqIEBuZXdfcGVyZjogbmV3IHBlcmZvcm1hbmNlIHN0YXRl IGJlaW5nIHJlcXVlc3RlZAo+ICAgKi8KPiAgc3RydWN0IGRwdV9jcnRjX3N0YXRlIHsKPiBAQCAt MzM2LDEyICszMjcsNiBAQCBzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgewo+ICAJc3RydWN0IG1zbV9w cm9wZXJ0eV9zdGF0ZSBwcm9wZXJ0eV9zdGF0ZTsKPiAgCXN0cnVjdCBtc21fcHJvcGVydHlfdmFs dWUgcHJvcGVydHlfdmFsdWVzW0NSVENfUFJPUF9DT1VOVF07Cj4gIAl1aW50NjRfdCBpbnB1dF9m ZW5jZV90aW1lb3V0X25zOwo+IC0JdWludDMyX3QgbnVtX2RpbV9sYXllcnM7Cj4gLQlzdHJ1Y3Qg ZHB1X2h3X2RpbV9sYXllciBkaW1fbGF5ZXJbRFBVX01BWF9ESU1fTEFZRVJTXTsKPiAtCXVpbnQz Ml90IG51bV9kczsKPiAtCXVpbnQzMl90IG51bV9kc19lbmFibGVkOwo+IC0JYm9vbCBkc19kaXJ0 eTsKPiAtCXN0cnVjdCBkcHVfaHdfZHNfY2ZnIGRzX2NmZ1tEUFVfTUFYX0RTX0NPVU5UXTsKPiAg Cj4gIAlzdHJ1Y3QgZHB1X2NvcmVfcGVyZl9wYXJhbXMgbmV3X3BlcmY7Cj4gIAlzdHJ1Y3QgZHB1 X2NydGNfcmVzcG9vbCBycDsKPiBAQCAtMzYyLDcgKzM0Nyw2IEBAIHN0cnVjdCBkcHVfY3J0Y19z dGF0ZSB7Cj4gIC8qKgo+ICAgKiBkcHVfY3J0Y19nZXRfbWl4ZXJfd2lkdGggLSBnZXQgdGhlIG1p eGVyIHdpZHRoCj4gICAqIE1peGVyIHdpZHRoIHdpbGwgYmUgc2FtZSBhcyBwYW5lbCB3aWR0aCgv MiBmb3Igc3BsaXQpCj4gLSAqIHVubGVzcyBkZXN0aW5hdGlvbiBzY2FsZXIgZmVhdHVyZSBpcyBl bmFibGVkCj4gICAqLwo+ICBzdGF0aWMgaW5saW5lIGludCBkcHVfY3J0Y19nZXRfbWl4ZXJfd2lk dGgoc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YywKPiAgCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAq Y3N0YXRlLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiBAQCAtMzcyLDEwICszNTYs NyBAQCBzdGF0aWMgaW5saW5lIGludCBkcHVfY3J0Y19nZXRfbWl4ZXJfd2lkdGgoc3RydWN0IGRw dV9jcnRjICpkcHVfY3J0YywKPiAgCWlmICghZHB1X2NydGMgfHwgIWNzdGF0ZSB8fCAhbW9kZSkK PiAgCQlyZXR1cm4gMDsKPiAgCj4gLQlpZiAoY3N0YXRlLT5udW1fZHNfZW5hYmxlZCkKPiAtCQlt aXhlcl93aWR0aCA9IGNzdGF0ZS0+ZHNfY2ZnWzBdLmxtX3dpZHRoOwo+IC0JZWxzZQo+IC0JCW1p eGVyX3dpZHRoID0gKGRwdV9jcnRjLT5udW1fbWl4ZXJzID09IENSVENfRFVBTF9NSVhFUlMgPwo+ ICsJbWl4ZXJfd2lkdGggPSAoZHB1X2NydGMtPm51bV9taXhlcnMgPT0gQ1JUQ19EVUFMX01JWEVS UyA/Cj4gIAkJCW1vZGUtPmhkaXNwbGF5IC8gQ1JUQ19EVUFMX01JWEVSUyA6IG1vZGUtPmhkaXNw bGF5KTsKPiAgCj4gIAlyZXR1cm4gbWl4ZXJfd2lkdGg7Cj4gQEAgLTM4Myw4ICszNjQsNyBAQCBz dGF0aWMgaW5saW5lIGludCBkcHVfY3J0Y19nZXRfbWl4ZXJfd2lkdGgoc3RydWN0IGRwdV9jcnRj ICpkcHVfY3J0YywKPiAgCj4gIC8qKgo+ICAgKiBkcHVfY3J0Y19nZXRfbWl4ZXJfaGVpZ2h0IC0g Z2V0IHRoZSBtaXhlciBoZWlnaHQKPiAtICogTWl4ZXIgaGVpZ2h0IHdpbGwgYmUgc2FtZSBhcyBw YW5lbCBoZWlnaHQgdW5sZXNzCj4gLSAqIGRlc3RpbmF0aW9uIHNjYWxlciBmZWF0dXJlIGlzIGVu YWJsZWQKPiArICogTWl4ZXIgaGVpZ2h0IHdpbGwgYmUgc2FtZSBhcyBwYW5lbCBoZWlnaHQKPiAg ICovCj4gIHN0YXRpYyBpbmxpbmUgaW50IGRwdV9jcnRjX2dldF9taXhlcl9oZWlnaHQoc3RydWN0 IGRwdV9jcnRjICpkcHVfY3J0YywKPiAgCQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZSwg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gQEAgLTM5Miw4ICszNzIsNyBAQCBzdGF0 aWMgaW5saW5lIGludCBkcHVfY3J0Y19nZXRfbWl4ZXJfaGVpZ2h0KHN0cnVjdCBkcHVfY3J0YyAq ZHB1X2NydGMsCj4gIAlpZiAoIWRwdV9jcnRjIHx8ICFjc3RhdGUgfHwgIW1vZGUpCj4gIAkJcmV0 dXJuIDA7Cj4gIAo+IC0JcmV0dXJuIChjc3RhdGUtPm51bV9kc19lbmFibGVkID8KPiAtCQkJY3N0 YXRlLT5kc19jZmdbMF0ubG1faGVpZ2h0IDogbW9kZS0+dmRpc3BsYXkpOwo+ICsJcmV0dXJuIG1v ZGUtPnZkaXNwbGF5Owo+ICB9Cj4gIAo+ICAvKioKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9lbmNvZGVyLmMKPiBpbmRleCA3N2QzNTcxLi42MjY2MGUwIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCj4gQEAgLTIzMCwxOCAr MjMwLDYgQEAgc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgewo+ICB9Owo+ICAKPiAgI2RlZmluZSB0 b19kcHVfZW5jb2Rlcl92aXJ0KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHB1X2VuY29kZXJf dmlydCwgYmFzZSkKPiAtCj4gLXZvaWQgZHB1X2VuY29kZXJfc2V0X2lkbGVfdGltZW91dChzdHJ1 Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsIHUzMiBpZGxlX3RpbWVvdXQpCj4gLXsKPiAtCXN0cnVj dCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jOwo+IC0KPiAtCWlmICghZHJtX2VuYykKPiAtCQly ZXR1cm47Cj4gLQo+IC0JZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVyX3ZpcnQoZHJtX2VuYyk7Cj4g LQlkcHVfZW5jLT5pZGxlX3RpbWVvdXQgPSBpZGxlX3RpbWVvdXQ7Cj4gLX0KPiAtCj4gIHN0YXRp YyBpbmxpbmUgaW50IF9kcHVfZW5jb2Rlcl9wb3dlcl9lbmFibGUoc3RydWN0IGRwdV9lbmNvZGVy X3ZpcnQgKmRwdV9lbmMsCj4gIAkJCQkJCQkJYm9vbCBlbmFibGUpCj4gIHsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2RzLmMgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfZHMuYwo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IGZhZDE5ZmIuLjAwMDAwMDAKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfaHdfZHMuYwo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSwxNDkgKzAsMCBAQAo+ IC0vKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCj4gLSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gLSAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+ IC0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KPiAtICoKPiAtICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gLSAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiAtICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiAtICovCj4gLQo+ IC0jaW5jbHVkZSAiZHB1X2h3X2RzLmgiCj4gLSNpbmNsdWRlICJkcHVfZm9ybWF0cy5oIgo+IC0j aW5jbHVkZSAiZHB1X2RiZy5oIgo+IC0jaW5jbHVkZSAiZHB1X2ttcy5oIgo+IC0KPiAtLyogRGVz dGluYXRpb24gc2NhbGVyIFRPUCByZWdpc3RlcnMgKi8KPiAtI2RlZmluZSBERVNUX1NDQUxFUl9P UF9NT0RFICAgICAweDAwCj4gLSNkZWZpbmUgREVTVF9TQ0FMRVJfSFdfVkVSU0lPTiAgMHgxMAo+ IC0KPiAtc3RhdGljIHZvaWQgZHB1X2h3X2RzX3NldHVwX29wbW9kZShzdHJ1Y3QgZHB1X2h3X2Rz ICpod19kcywKPiAtCQkJCXUzMiBvcF9tb2RlKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X2h3X2Jsa19y ZWdfbWFwICpodyA9ICZod19kcy0+aHc7Cj4gLQo+IC0JRFBVX1JFR19XUklURShodywgREVTVF9T Q0FMRVJfT1BfTU9ERSwgb3BfbW9kZSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGRwdV9od19k c19zZXR1cF9zY2FsZXIzKHN0cnVjdCBkcHVfaHdfZHMgKmh3X2RzLAo+IC0JCQl2b2lkICpzY2Fs ZXJfY2ZnLCB2b2lkICpzY2FsZXJfbHV0X2NmZykKPiAtewo+IC0Jc3RydWN0IGRwdV9od19zY2Fs ZXIzX2NmZyAqc2NsM19jZmcgPSBzY2FsZXJfY2ZnOwo+IC0Jc3RydWN0IGRwdV9od19zY2FsZXIz X2x1dF9jZmcgKnNjbDNfbHV0X2NmZyA9IHNjYWxlcl9sdXRfY2ZnOwo+IC0KPiAtCWlmICghaHdf ZHMgfHwgIWh3X2RzLT5zY2wgfHwgIXNjbDNfY2ZnIHx8ICFzY2wzX2x1dF9jZmcpCj4gLQkJcmV0 dXJuOwo+IC0KPiAtCS8qCj4gLQkgKiBjb3B5IExVVCB2YWx1ZXMgdG8gc2NhbGVyIHN0cnVjdHVy ZQo+IC0JICovCj4gLQlpZiAoc2NsM19sdXRfY2ZnLT5pc19jb25maWd1cmVkKSB7Cj4gLQkJc2Ns M19jZmctPmRpcl9sdXQgPSBzY2wzX2x1dF9jZmctPmRpcl9sdXQ7Cj4gLQkJc2NsM19jZmctPmRp cl9sZW4gPSBzY2wzX2x1dF9jZmctPmRpcl9sZW47Cj4gLQkJc2NsM19jZmctPmNpcl9sdXQgPSBz Y2wzX2x1dF9jZmctPmNpcl9sdXQ7Cj4gLQkJc2NsM19jZmctPmNpcl9sZW4gPSBzY2wzX2x1dF9j ZmctPmNpcl9sZW47Cj4gLQkJc2NsM19jZmctPnNlcF9sdXQgPSBzY2wzX2x1dF9jZmctPnNlcF9s dXQ7Cj4gLQkJc2NsM19jZmctPnNlcF9sZW4gPSBzY2wzX2x1dF9jZmctPnNlcF9sZW47Cj4gLQl9 Cj4gLQo+IC0JZHB1X2h3X3NldHVwX3NjYWxlcjMoJmh3X2RzLT5odywgc2NsM19jZmcsCj4gLQkJ CSBod19kcy0+c2NsLT5iYXNlLAo+IC0JCQkgaHdfZHMtPnNjbC0+dmVyc2lvbiwKPiAtCQkJIGRw dV9nZXRfZHB1X2Zvcm1hdChEUk1fRk9STUFUX1hCR1IyMTAxMDEwKSk7Cj4gLX0KPiAtCj4gLXN0 YXRpYyB2b2lkIF9zZXR1cF9kc19vcHMoc3RydWN0IGRwdV9od19kc19vcHMgKm9wcywgdW5zaWdu ZWQgbG9uZyBmZWF0dXJlcykKPiAtewo+IC0Jb3BzLT5zZXR1cF9vcG1vZGUgPSBkcHVfaHdfZHNf c2V0dXBfb3Btb2RlOwo+IC0KPiAtCWlmICh0ZXN0X2JpdChEUFVfU1NQUF9TQ0FMRVJfUVNFRUQz LCAmZmVhdHVyZXMpKQo+IC0JCW9wcy0+c2V0dXBfc2NhbGVyID0gZHB1X2h3X2RzX3NldHVwX3Nj YWxlcjM7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgZHB1X2RzX2NmZyAqX2RzX29mZnNldChl bnVtIGRwdV9kcyBkcywKPiAtCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICptLAo+IC0JCXZvaWQgX19p b21lbSAqYWRkciwKPiAtCQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpiKQo+IC17Cj4gLQlp bnQgaTsKPiAtCj4gLQlpZiAoIW0gfHwgIWFkZHIgfHwgIWIpCj4gLQkJcmV0dXJuIEVSUl9QVFIo LUVJTlZBTCk7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IG0tPmRzX2NvdW50OyBpKyspIHsKPiAt CQlpZiAoKGRzID09IG0tPmRzW2ldLmlkKSAmJgo+IC0JCQkgKG0tPmRzW2ldLnRvcCkpIHsKPiAt CQkJYi0+YmFzZV9vZmYgPSBhZGRyOwo+IC0JCQliLT5ibGtfb2ZmID0gbS0+ZHNbaV0udG9wLT5i YXNlOwo+IC0JCQliLT5sZW5ndGggPSBtLT5kc1tpXS50b3AtPmxlbjsKPiAtCQkJYi0+aHd2ZXJz aW9uID0gbS0+aHd2ZXJzaW9uOwo+IC0JCQliLT5sb2dfbWFzayA9IERQVV9EQkdfTUFTS19EUzsK PiAtCQkJcmV0dXJuICZtLT5kc1tpXTsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIEVSUl9Q VFIoLUVJTlZBTCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgZHB1X2h3X2Jsa19vcHMgZHB1 X2h3X29wcyA9IHsKPiAtCS5zdGFydCA9IE5VTEwsCj4gLQkuc3RvcCA9IE5VTEwsCj4gLX07Cj4g LQo+IC1zdHJ1Y3QgZHB1X2h3X2RzICpkcHVfaHdfZHNfaW5pdChlbnVtIGRwdV9kcyBpZHgsCj4g LQkJCXZvaWQgX19pb21lbSAqYWRkciwKPiAtCQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqbSkKPiAt ewo+IC0Jc3RydWN0IGRwdV9od19kcyAqaHdfZHM7Cj4gLQlzdHJ1Y3QgZHB1X2RzX2NmZyAqY2Zn Owo+IC0JaW50IHJjOwo+IC0KPiAtCWlmICghYWRkciB8fCAhbSkKPiAtCQlyZXR1cm4gRVJSX1BU UigtRUlOVkFMKTsKPiAtCj4gLQlod19kcyA9IGt6YWxsb2Moc2l6ZW9mKCpod19kcyksIEdGUF9L RVJORUwpOwo+IC0JaWYgKCFod19kcykKPiAtCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAt Cj4gLQljZmcgPSBfZHNfb2Zmc2V0KGlkeCwgbSwgYWRkciwgJmh3X2RzLT5odyk7Cj4gLQlpZiAo SVNfRVJSX09SX05VTEwoY2ZnKSkgewo+IC0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGdldCBkcyBj ZmdcbiIpOwo+IC0JCWtmcmVlKGh3X2RzKTsKPiAtCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsK PiAtCX0KPiAtCj4gLQkvKiBBc3NpZ24gb3BzICovCj4gLQlod19kcy0+aWR4ID0gaWR4Owo+IC0J aHdfZHMtPnNjbCA9IGNmZzsKPiAtCV9zZXR1cF9kc19vcHMoJmh3X2RzLT5vcHMsIGh3X2RzLT5z Y2wtPmZlYXR1cmVzKTsKPiAtCj4gLQlyYyA9IGRwdV9od19ibGtfaW5pdCgmaHdfZHMtPmJhc2Us IERQVV9IV19CTEtfRFMsIGlkeCwgJmRwdV9od19vcHMpOwo+IC0JaWYgKHJjKSB7Cj4gLQkJRFBV X0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBodyBibGsgJWRcbiIsIHJjKTsKPiAtCQlnb3RvIGJsa19p bml0X2Vycm9yOwo+IC0JfQo+IC0KPiAtCWlmIChjZmctPmxlbikgewo+IC0JCWRwdV9kYmdfcmVn X3JlZ2lzdGVyX2R1bXBfcmFuZ2UoRFBVX0RCR19OQU1FLCBjZmctPm5hbWUsCj4gLQkJCQlod19k cy0+aHcuYmxrX29mZiArIGNmZy0+YmFzZSwKPiAtCQkJCWh3X2RzLT5ody5ibGtfb2ZmICsgY2Zn LT5iYXNlICsgY2ZnLT5sZW4sCj4gLQkJCQlod19kcy0+aHcueGluX2lkKTsKPiAtCX0KPiAtCj4g LQlyZXR1cm4gaHdfZHM7Cj4gLQo+IC1ibGtfaW5pdF9lcnJvcjoKPiAtCWt6ZnJlZShod19kcyk7 Cj4gLQo+IC0JcmV0dXJuIEVSUl9QVFIocmMpOwo+IC0KPiAtfQo+IC0KPiAtdm9pZCBkcHVfaHdf ZHNfZGVzdHJveShzdHJ1Y3QgZHB1X2h3X2RzICpod19kcykKPiAtewo+IC0JaWYgKGh3X2RzKQo+ IC0JCWRwdV9od19ibGtfZGVzdHJveSgmaHdfZHMtPmJhc2UpOwo+IC0Ja2ZyZWUoaHdfZHMpOwo+ IC19Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19k cy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2RzLmgKPiBkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAyNDU1OTIwLi4wMDAwMDAwCj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2RzLmgKPiArKysgL2Rldi9udWxsCj4gQEAg LTEsMTExICswLDAgQEAKPiAtLyogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBG b3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+IC0gKgo+IC0gKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ IC0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhbmQKPiAtICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gLSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+IC0gKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ IC0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCj4gLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCj4gLSAqLwo+IC0KPiAtI2lmbmRlZiBfRFBVX0hXX0RTX0gKPiAtI2RlZmluZSBfRFBVX0hX X0RTX0gKPiAtCj4gLSNpbmNsdWRlICJkcHVfaHdfbWRzcy5oIgo+IC0jaW5jbHVkZSAiZHB1X2h3 X3V0aWwuaCIKPiAtI2luY2x1ZGUgImRwdV9od19jYXRhbG9nLmgiCj4gLSNpbmNsdWRlICJkcHVf aHdfYmxrLmgiCj4gLQo+IC1zdHJ1Y3QgZHB1X2h3X2RzOwo+IC0KPiAtLyogRGVzdGluYXRpb24g U2NhbGVyIERVQUwgbW9kZSBvdmVyZmV0Y2ggcGl4ZWwgY291bnQgKi8KPiAtI2RlZmluZSBEUFVf RFNfT1ZFUkZFVENIX1NJWkUgNQo+IC0KPiAtLyogRGVzdGluYXRpb24gc2NhbGVyIERVQUwgbW9k ZSBvcGVyYXRpb24gYml0ICovCj4gLSNkZWZpbmUgRFBVX0RTX09QX01PREVfRFVBTCBCSVQoMTYp Cj4gLQo+IC0vKiBzdHJ1Y3QgZHB1X2h3X2RzX2NmZyAtIGRlc3RpbmF0aW9uIHNjYWxlciBjb25m aWcKPiAtICogQG5keCAgICAgICAgICA6IERTIHNlbGVjdGlvbiBpbmRleAo+IC0gKiBAZmxhZ3Mg ICAgICAgIDogRmxhZyB0byBzd2l0Y2ggYmV0d2VlbiBtb2RlIGZvciBEUwo+IC0gKiBAbG1fd2lk dGggICAgIDogTGF5ZXIgbWl4ZXIgd2lkdGggY29uZmlndXJhdGlvbgo+IC0gKiBAbG1faGVpZ2gg ICAgIDogTGF5ZXIgbWl4ZXIgaGVpZ2h0IGNvbmZpZ3VyYXRpb24KPiAtICogQHNldF9sbV9mbHVz aCA6IExNIGZsdXNoIGJpdAo+IC0gKiBAc2NsM19jZmcgICAgIDogUG9pbnRlciB0byBkcHVfaHdf c2NhbGVyM19jZmcuCj4gLSAqLwo+IC1zdHJ1Y3QgZHB1X2h3X2RzX2NmZyB7Cj4gLQl1MzIgbmR4 Owo+IC0JaW50IGZsYWdzOwo+IC0JdTMyIGxtX3dpZHRoOwo+IC0JdTMyIGxtX2hlaWdodDsKPiAt CWJvb2wgc2V0X2xtX2ZsdXNoOwo+IC0Jc3RydWN0IGRwdV9od19zY2FsZXIzX2NmZyAqc2NsM19j Zmc7Cj4gLX07Cj4gLQo+IC0vKioKPiAtICogc3RydWN0IGRwdV9od19kc19vcHMgLSBpbnRlcmZh Y2UgdG8gdGhlIGRlc3RpbmF0aW9uIHNjYWxlcgo+IC0gKiBoYXJkd2FyZSBkcml2ZXIgZnVuY3Rp b25zCj4gLSAqIENhbGxlciBtdXN0IGNhbGwgdGhlIGluaXQgZnVuY3Rpb24gdG8gZ2V0IHRoZSBk cyBjb250ZXh0IGZvciBlYWNoIGRzCj4gLSAqIEFzc3VtcHRpb24gaXMgdGhlc2UgZnVuY3Rpb25z IHdpbGwgYmUgY2FsbGVkIGFmdGVyIGNsb2NrcyBhcmUgZW5hYmxlZAo+IC0gKi8KPiAtc3RydWN0 IGRwdV9od19kc19vcHMgewo+IC0JLyoqCj4gLQkgKiBzZXR1cF9vcG1vZGUgLSBkZXN0aW5hdGlv biBzY2FsZXIgb3AgbW9kZSBzZXR1cAo+IC0JICogQGh3X2RzICAgOiBQb2ludGVyIHRvIGRzIGNv bnRleHQKPiAtCSAqIEBvcF9tb2RlIDogT3AgbW9kZSBjb25maWd1cmF0aW9uCj4gLQkgKi8KPiAt CXZvaWQgKCpzZXR1cF9vcG1vZGUpKHN0cnVjdCBkcHVfaHdfZHMgKmh3X2RzLAo+IC0JCQkJdTMy IG9wX21vZGUpOwo+IC0KPiAtCS8qKgo+IC0JICogc2V0dXBfc2NhbGVyIC0gZGVzdGluYXRpb24g c2NhbGVyIGJsb2NrIHNldHVwCj4gLQkgKiBAaHdfZHMgICAgICAgICAgOiBQb2ludGVyIHRvIGRz IGNvbnRleHQKPiAtCSAqIEBzY2FsZXJfY2ZnICAgICA6IFBvaW50ZXIgdG8gc2NhbGVyIGRhdGEK PiAtCSAqIEBzY2FsZXJfbHV0X2NmZyA6IFBvaW50ZXIgdG8gc2NhbGVyIGx1dAo+IC0JICovCj4g LQl2b2lkICgqc2V0dXBfc2NhbGVyKShzdHJ1Y3QgZHB1X2h3X2RzICpod19kcywKPiAtCQkJCXZv aWQgKnNjYWxlcl9jZmcsCj4gLQkJCQl2b2lkICpzY2FsZXJfbHV0X2NmZyk7Cj4gLQo+IC19Owo+ IC0KPiAtLyoqCj4gLSAqIHN0cnVjdCBkcHVfaHdfZHMgLSBkZXN0aW5hdGlvbiBzY2FsZXIgZGVz Y3JpcHRpb24KPiAtICogQGJhc2UgOiBIYXJkd2FyZSBibG9jayBiYXNlIHN0cnVjdHVyZQo+IC0g KiBAaHcgICA6IEJsb2NrIGhhcmR3YXJlIGRldGFpbHMKPiAtICogQGlkeCAgOiBEZXN0aW5hdGlv biBzY2FsZXIgaW5kZXgKPiAtICogQHNjbCAgOiBQb2ludGVyIHRvCj4gLSAqICAgICAgICAgIC0g c2NhbGVyIG9mZnNldCByZWxhdGl2ZSB0byB0b3Agb2Zmc2V0Cj4gLSAqICAgICAgICAgIC0gY2Fw YWJpbGl0aWVzCj4gLSAqIEBvcHMgIDogUG9pbnRlciB0byBvcGVyYXRpb25zIGZvciB0aGlzIERT Cj4gLSAqLwo+IC1zdHJ1Y3QgZHB1X2h3X2RzIHsKPiAtCXN0cnVjdCBkcHVfaHdfYmxrIGJhc2U7 Cj4gLQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwIGh3Owo+IC0JZW51bSBkcHVfZHMgaWR4Owo+ IC0JY29uc3Qgc3RydWN0IGRwdV9kc19jZmcgKnNjbDsKPiAtCXN0cnVjdCBkcHVfaHdfZHNfb3Bz IG9wczsKPiAtfTsKPiAtCj4gLS8qKgo+IC0gKiBkcHVfaHdfZHNfaW5pdCAtIGluaXRpYWxpemVz IHRoZSBkZXN0aW5hdGlvbiBzY2FsZXIKPiAtICogaHcgZHJpdmVyIG9iamVjdCBhbmQgc2hvdWxk IGJlIGNhbGxlZCBvbmNlIGJlZm9yZQo+IC0gKiBhY2Nlc3NpbmcgZXZlcnkgZGVzdGluYXRpb24g c2NhbGVyCj4gLSAqIEBpZHggOiBEUyBpbmRleCBmb3Igd2hpY2ggZHJpdmVyIG9iamVjdCBpcyBy ZXF1aXJlZAo+IC0gKiBAYWRkcjogTWFwcGVkIHJlZ2lzdGVyIGlvIGFkZHJlc3Mgb2YgTURQCj4g LSAqIEBtICAgOiBNRFNTIGNhdGFsb2cgaW5mb3JtYXRpb24KPiAtICogQFJldHVybjogcG9pbnRl ciB0byBzdHJ1Y3R1cmUgb3IgRVJSX1BUUgo+IC0gKi8KPiAtc3RydWN0IGRwdV9od19kcyAqZHB1 X2h3X2RzX2luaXQoZW51bSBkcHVfZHMgaWR4LAo+IC0JCQl2b2lkIF9faW9tZW0gKmFkZHIsCj4g LQkJCXN0cnVjdCBkcHVfbWRzc19jZmcgKm0pOwo+IC0KPiAtLyoqCj4gLSAqIGRwdV9od19kc19k ZXN0cm95IC0gZGVzdHJveXMgZGVzdGluYXRpb24gc2NhbGVyCj4gLSAqIGRyaXZlciBjb250ZXh0 Cj4gLSAqIEBod19kczogICBQb2ludGVyIHRvIERTIGNvbnRleHQKPiAtICovCj4gLXZvaWQgZHB1 X2h3X2RzX2Rlc3Ryb3koc3RydWN0IGRwdV9od19kcyAqaHdfZHMpOwo+IC0KPiAtI2VuZGlmIC8q X0RQVV9IV19EU19IICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19sbS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2xt LmMKPiBpbmRleCA3NWEzMGRiLi44MzBiNjllIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9od19sbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X2xtLmMKPiBAQCAtMTcyLDY4ICsxNzIsNiBAQCBzdGF0aWMgdm9pZCBk cHVfaHdfbG1fZ2Moc3RydWN0IGRwdV9od19taXhlciAqbWl4ZXIsCj4gIHsKPiAgfQo+ICAKPiAt c3RhdGljIHZvaWQgZHB1X2h3X2xtX2NsZWFyX2RpbV9sYXllcihzdHJ1Y3QgZHB1X2h3X21peGVy ICpjdHgpCj4gLXsKPiAtCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmMgPSAmY3R4LT5odzsK PiAtCWNvbnN0IHN0cnVjdCBkcHVfbG1fc3ViX2Jsa3MgKnNibGsgPSBjdHgtPmNhcC0+c2JsazsK PiAtCWludCBzdGFnZV9vZmYsIGk7Cj4gLQl1MzIgcmVzZXQgPSBCSVQoMTYpLCB2YWw7Cj4gLQo+ IC0JcmVzZXQgPSB+cmVzZXQ7Cj4gLQlmb3IgKGkgPSBEUFVfU1RBR0VfMDsgaSA8IHNibGstPm1h eGJsZW5kc3RhZ2VzOyBpKyspIHsKPiAtCQlzdGFnZV9vZmYgPSBfc3RhZ2Vfb2Zmc2V0KGN0eCwg aSk7Cj4gLQkJaWYgKFdBUk5fT04oc3RhZ2Vfb2ZmIDwgMCkpCj4gLQkJCXJldHVybjsKPiAtCj4g LQkJLyoKPiAtCQkgKiByZWFkIHRoZSBleGlzdGluZyBibGVuZG5fb3AgcmVnaXN0ZXIgYW5kIGNs ZWFyIG9ubHkgRElNIGxheWVyCj4gLQkJICogYml0IChjb2xvcl9maWxsIGJpdCkKPiAtCQkgKi8K PiAtCQl2YWwgPSBEUFVfUkVHX1JFQUQoYywgTE1fQkxFTkQwX09QICsgc3RhZ2Vfb2ZmKTsKPiAt CQl2YWwgJj0gcmVzZXQ7Cj4gLQkJRFBVX1JFR19XUklURShjLCBMTV9CTEVORDBfT1AgKyBzdGFn ZV9vZmYsIHZhbCk7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGRwdV9od19sbV9zZXR1 cF9kaW1fbGF5ZXIoc3RydWN0IGRwdV9od19taXhlciAqY3R4LAo+IC0JCXN0cnVjdCBkcHVfaHdf ZGltX2xheWVyICpkaW1fbGF5ZXIpCj4gLXsKPiAtCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAg KmMgPSAmY3R4LT5odzsKPiAtCWludCBzdGFnZV9vZmY7Cj4gLQl1MzIgdmFsID0gMCwgYWxwaGEg PSAwOwo+IC0KPiAtCXN0YWdlX29mZiA9IF9zdGFnZV9vZmZzZXQoY3R4LCBkaW1fbGF5ZXItPnN0 YWdlKTsKPiAtCWlmIChzdGFnZV9vZmYgPCAwKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHN0 YWdlX29mZjolZCBmb3IgZGltIGxheWVyXG4iLCBzdGFnZV9vZmYpOwo+IC0JCXJldHVybjsKPiAt CX0KPiAtCj4gLQlhbHBoYSA9IGRpbV9sYXllci0+Y29sb3JfZmlsbC5jb2xvcl8zICYgMHhGRjsK PiAtCXZhbCA9ICgoZGltX2xheWVyLT5jb2xvcl9maWxsLmNvbG9yXzEgPDwgMikgJiAweEZGRikg PDwgMTYgfAo+IC0JCQkoKGRpbV9sYXllci0+Y29sb3JfZmlsbC5jb2xvcl8wIDw8IDIpICYgMHhG RkYpOwo+IC0JRFBVX1JFR19XUklURShjLCBMTV9GR19DT0xPUl9GSUxMX0NPTE9SXzAgKyBzdGFn ZV9vZmYsIHZhbCk7Cj4gLQo+IC0JdmFsID0gKGFscGhhIDw8IDQpIDw8IDE2IHwKPiAtCQkJKChk aW1fbGF5ZXItPmNvbG9yX2ZpbGwuY29sb3JfMiA8PCAyKSAmIDB4RkZGKTsKPiAtCURQVV9SRUdf V1JJVEUoYywgTE1fRkdfQ09MT1JfRklMTF9DT0xPUl8xICsgc3RhZ2Vfb2ZmLCB2YWwpOwo+IC0K PiAtCXZhbCA9IGRpbV9sYXllci0+cmVjdC5oIDw8IDE2IHwgZGltX2xheWVyLT5yZWN0Lnc7Cj4g LQlEUFVfUkVHX1dSSVRFKGMsIExNX0ZHX0NPTE9SX0ZJTExfU0laRSArIHN0YWdlX29mZiwgdmFs KTsKPiAtCj4gLQl2YWwgPSBkaW1fbGF5ZXItPnJlY3QueSA8PCAxNiB8IGRpbV9sYXllci0+cmVj dC54Owo+IC0JRFBVX1JFR19XUklURShjLCBMTV9GR19DT0xPUl9GSUxMX1hZICsgc3RhZ2Vfb2Zm LCB2YWwpOwo+IC0KPiAtCXZhbCA9IEJJVCgxNik7IC8qIGVuYWJsZSBkaW0gbGF5ZXIgKi8KPiAt CXZhbCB8PSBEUFVfQkxFTkRfRkdfQUxQSEFfRkdfQ09OU1QgfCBEUFVfQkxFTkRfQkdfQUxQSEFf QkdfQ09OU1Q7Cj4gLQlpZiAoZGltX2xheWVyLT5mbGFncyAmIERQVV9EUk1fRElNX0xBWUVSX0VY Q0xVU0lWRSkKPiAtCQl2YWwgfD0gQklUKDE3KTsKPiAtCWVsc2UKPiAtCQl2YWwgJj0gfkJJVCgx Nyk7Cj4gLQlEUFVfUkVHX1dSSVRFKGMsIExNX0JMRU5EMF9PUCArIHN0YWdlX29mZiwgdmFsKTsK PiAtCXZhbCA9IChhbHBoYSA8PCAxNikgfCAoMHhmZiAtIGFscGhhKTsKPiAtCURQVV9SRUdfV1JJ VEUoYywgTE1fQkxFTkQwX0NPTlNUX0FMUEhBICsgc3RhZ2Vfb2ZmLCB2YWwpOwo+IC19Cj4gLQo+ ICBzdGF0aWMgdm9pZCBkcHVfaHdfbG1fc2V0dXBfbWlzcihzdHJ1Y3QgZHB1X2h3X21peGVyICpj dHgsCj4gIAkJCQlib29sIGVuYWJsZSwgdTMyIGZyYW1lX2NvdW50KQo+ICB7Cj4gQEAgLTI3Miwx MSArMjEwLDYgQEAgc3RhdGljIHZvaWQgX3NldHVwX21peGVyX29wcyhzdHJ1Y3QgZHB1X21kc3Nf Y2ZnICptLAo+ICAJb3BzLT5zZXR1cF9nYyA9IGRwdV9od19sbV9nYzsKPiAgCW9wcy0+c2V0dXBf bWlzciA9IGRwdV9od19sbV9zZXR1cF9taXNyOwo+ICAJb3BzLT5jb2xsZWN0X21pc3IgPSBkcHVf aHdfbG1fY29sbGVjdF9taXNyOwo+IC0KPiAtCWlmICh0ZXN0X2JpdChEUFVfRElNX0xBWUVSLCAm ZmVhdHVyZXMpKSB7Cj4gLQkJb3BzLT5zZXR1cF9kaW1fbGF5ZXIgPSBkcHVfaHdfbG1fc2V0dXBf ZGltX2xheWVyOwo+IC0JCW9wcy0+Y2xlYXJfZGltX2xheWVyID0gZHB1X2h3X2xtX2NsZWFyX2Rp bV9sYXllcjsKPiAtCX0KPiAgfTsKPiAgCj4gIHN0YXRpYyBzdHJ1Y3QgZHB1X2h3X2Jsa19vcHMg ZHB1X2h3X29wcyA9IHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X2xtLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbG0u aAo+IGluZGV4IGVmMjJjODYuLmUyOWU1ZGEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X2xtLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfaHdfbG0uaAo+IEBAIC02NywyMCArNjcsNiBAQCBzdHJ1Y3QgZHB1X2h3X2xt X29wcyB7Cj4gIAl2b2lkICgqc2V0dXBfZ2MpKHN0cnVjdCBkcHVfaHdfbWl4ZXIgKm1peGVyLAo+ ICAJCQl2b2lkICpjZmcpOwo+ICAKPiAtCS8qKgo+IC0JICogc2V0dXBfZGltX2xheWVyOiBjb25m aWd1cmUgZGltIGxheWVyIHNldHRpbmdzCj4gLQkgKiBAY3R4OiBQb2ludGVyIHRvIGxheWVyIG1p eGVyIGNvbnRleHQKPiAtCSAqIEBkaW1fbGF5ZXI6IGRpbSBsYXllciBjb25maWdzCj4gLQkgKi8K PiAtCXZvaWQgKCpzZXR1cF9kaW1fbGF5ZXIpKHN0cnVjdCBkcHVfaHdfbWl4ZXIgKmN0eCwKPiAt CQkJc3RydWN0IGRwdV9od19kaW1fbGF5ZXIgKmRpbV9sYXllcik7Cj4gLQo+IC0JLyoqCj4gLQkg KiBjbGVhcl9kaW1fbGF5ZXI6IGNsZWFyIGRpbSBsYXllciBzZXR0aW5ncwo+IC0JICogQGN0eDog UG9pbnRlciB0byBsYXllciBtaXhlciBjb250ZXh0Cj4gLQkgKi8KPiAtCXZvaWQgKCpjbGVhcl9k aW1fbGF5ZXIpKHN0cnVjdCBkcHVfaHdfbWl4ZXIgKmN0eCk7Cj4gLQo+ICAJLyogc2V0dXBfbWlz cjogZW5hYmxlcy9kaXNhYmxlcyBNSVNSIGluIEhXIHJlZ2lzdGVyICovCj4gIAl2b2lkICgqc2V0 dXBfbWlzcikoc3RydWN0IGRwdV9od19taXhlciAqY3R4LAo+ICAJCQlib29sIGVuYWJsZSwgdTMy IGZyYW1lX2NvdW50KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X21kc3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19t ZHNzLmgKPiBpbmRleCBmY2QxNjRmLi44MzZmZjllIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19tZHNzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfaHdfbWRzcy5oCj4gQEAgLTk5LDcgKzk5LDYgQEAgZW51bSBkcHVf aHdfYmxrX3R5cGUgewo+ICAJRFBVX0hXX0JMS19UT1AgPSAwLAo+ICAJRFBVX0hXX0JMS19TU1BQ LAo+ICAJRFBVX0hXX0JMS19MTSwKPiAtCURQVV9IV19CTEtfRFMsCj4gIAlEUFVfSFdfQkxLX0NU TCwKPiAgCURQVV9IV19CTEtfQ0RNLAo+ICAJRFBVX0hXX0JMS19QSU5HUE9ORywKPiBAQCAtNDY5 LDIwICs0NjgsNSBAQCBzdHJ1Y3QgZHB1X21kc3NfY29sb3Igewo+ICAjZGVmaW5lIERQVV9EQkdf TUFTS19UT1AgICAgICAoMSA8PCA4KQo+ICAjZGVmaW5lIERQVV9EQkdfTUFTS19WQklGICAgICAo MSA8PCA5KQo+ICAjZGVmaW5lIERQVV9EQkdfTUFTS19ST1QgICAgICAoMSA8PCAxMCkKPiAtI2Rl ZmluZSBEUFVfREJHX01BU0tfRFMgICAgICAgKDEgPDwgMTEpCj4gLQo+IC0vKioKPiAtICogc3Ry dWN0IGRwdV9od19kaW1fbGF5ZXI6IGRpbSBsYXllciBjb25maWdzCj4gLSAqIEBmbGFnczogRmxh ZyB0byByZXByZXNlbnQgSU5DTFVTSVZFL0VYQ0xVU0lWRQo+IC0gKiBAc3RhZ2U6IEJsZW5kaW5n IHN0YWdlIG9mIGRpbSBsYXllcgo+IC0gKiBAY29sb3JfZmlsbDogQ29sb3IgZmlsbCB0byBiZSB1 c2VkIGZvciB0aGUgbGF5ZXIKPiAtICogQHJlY3Q6IERpbSBsYXllciBjb29yZGluYXRlcwo+IC0g Ki8KPiAtc3RydWN0IGRwdV9od19kaW1fbGF5ZXIgewo+IC0JdWludDMyX3QgZmxhZ3M7Cj4gLQl1 aW50MzJfdCBzdGFnZTsKPiAtCXN0cnVjdCBkcHVfbWRzc19jb2xvciBjb2xvcl9maWxsOwo+IC0J c3RydWN0IGRwdV9yZWN0IHJlY3Q7Cj4gLX07Cj4gIAo+ICAjZW5kaWYgIC8qIF9EUFVfSFdfTURT U19IICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9y bS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKPiBpbmRleCBmNDY3 YmYxLi4wYWYyOTk2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9ybS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMK PiBAQCAtMTcsNyArMTcsNiBAQAo+ICAjaW5jbHVkZSAiZHB1X2h3X2xtLmgiCj4gICNpbmNsdWRl ICJkcHVfaHdfY3RsLmgiCj4gICNpbmNsdWRlICJkcHVfaHdfY2RtLmgiCj4gLSNpbmNsdWRlICJk cHVfaHdfZHMuaCIKPiAgI2luY2x1ZGUgImRwdV9od19waW5ncG9uZy5oIgo+ICAjaW5jbHVkZSAi ZHB1X2h3X2ludGYuaCIKPiAgI2luY2x1ZGUgImRwdV9od193Yi5oIgo+IEBAIC0yMzUsOSArMjM0 LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9ybV9od19kZXN0cm95KGVudW0gZHB1X2h3X2Jsa190eXBl IHR5cGUsIHZvaWQgKmh3KQo+ICAJY2FzZSBEUFVfSFdfQkxLX0xNOgo+ICAJCWRwdV9od19sbV9k ZXN0cm95KGh3KTsKPiAgCQlicmVhazsKPiAtCWNhc2UgRFBVX0hXX0JMS19EUzoKPiAtCQlkcHVf aHdfZHNfZGVzdHJveShodyk7Cj4gLQkJYnJlYWs7Cj4gIAljYXNlIERQVV9IV19CTEtfQ1RMOgo+ ICAJCWRwdV9od19jdGxfZGVzdHJveShodyk7Cj4gIAkJYnJlYWs7Cj4gQEAgLTMxNyw5ICszMTMs NiBAQCBzdGF0aWMgaW50IF9kcHVfcm1faHdfYmxrX2NyZWF0ZSgKPiAgCWNhc2UgRFBVX0hXX0JM S19MTToKPiAgCQlodyA9IGRwdV9od19sbV9pbml0KGlkLCBtbWlvLCBjYXQpOwo+ICAJCWJyZWFr Owo+IC0JY2FzZSBEUFVfSFdfQkxLX0RTOgo+IC0JCWh3ID0gZHB1X2h3X2RzX2luaXQoaWQsIG1t aW8sIGNhdCk7Cj4gLQkJYnJlYWs7Cj4gIAljYXNlIERQVV9IV19CTEtfQ1RMOgo+ICAJCWh3ID0g ZHB1X2h3X2N0bF9pbml0KGlkLCBtbWlvLCBjYXQpOwo+ICAJCWJyZWFrOwo+IEBAIC00MjcsMTcg KzQyMCw2IEBAIGludCBkcHVfcm1faW5pdChzdHJ1Y3QgZHB1X3JtICpybSwKPiAgCQl9Cj4gIAl9 Cj4gIAo+IC0JaWYgKGNhdC0+bWRwWzBdLmhhc19kZXN0X3NjYWxlcikgewo+IC0JCWZvciAoaSA9 IDA7IGkgPCBjYXQtPmRzX2NvdW50OyBpKyspIHsKPiAtCQkJcmMgPSBfZHB1X3JtX2h3X2Jsa19j cmVhdGUocm0sIGNhdCwgbW1pbywgRFBVX0hXX0JMS19EUywKPiAtCQkJCQljYXQtPmRzW2ldLmlk LCAmY2F0LT5kc1tpXSk7Cj4gLQkJCWlmIChyYykgewo+IC0JCQkJRFBVX0VSUk9SKCJmYWlsZWQ6 IGRzIGh3IG5vdCBhdmFpbGFibGVcbiIpOwo+IC0JCQkJZ290byBmYWlsOwo+IC0JCQl9Cj4gLQkJ fQo+IC0JfQo+IC0KPiAgCWZvciAoaSA9IDA7IGkgPCBjYXQtPnBpbmdwb25nX2NvdW50OyBpKysp IHsKPiAgCQlyYyA9IF9kcHVfcm1faHdfYmxrX2NyZWF0ZShybSwgY2F0LCBtbWlvLCBEUFVfSFdf QkxLX1BJTkdQT05HLAo+ICAJCQkJY2F0LT5waW5ncG9uZ1tpXS5pZCwgJmNhdC0+cGluZ3Bvbmdb aV0pOwo+IEBAIC01MTYsMjAgKzQ5OCwxNiBAQCBzdGF0aWMgYm9vbCBfZHB1X3JtX2NoZWNrX2xt X2FuZF9nZXRfY29ubmVjdGVkX2Jsa3MoCj4gIAkJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwLAo+ ICAJCXN0cnVjdCBkcHVfcm1fcmVxdWlyZW1lbnRzICpyZXFzLAo+ICAJCXN0cnVjdCBkcHVfcm1f aHdfYmxrICpsbSwKPiAtCQlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqKmRzLAo+ICAJCXN0cnVjdCBk cHVfcm1faHdfYmxrICoqcHAsCj4gIAkJc3RydWN0IGRwdV9ybV9od19ibGsgKnByaW1hcnlfbG0p Cj4gIHsKPiAgCWNvbnN0IHN0cnVjdCBkcHVfbG1fY2ZnICpsbV9jZmcgPSB0b19kcHVfaHdfbWl4 ZXIobG0tPmh3KS0+Y2FwOwo+ICAJc3RydWN0IGRwdV9ybV9od19pdGVyIGl0ZXI7Cj4gLQlib29s IGlzX3ZhbGlkX2RzOwo+ICAKPiAtCSpkcyA9IE5VTEw7Cj4gIAkqcHAgPSBOVUxMOwo+ICAKPiAt CURQVV9ERUJVRygiY2hlY2sgbG0gJWQgZHMgJWQgcHAgJWRcbiIsCj4gLQkJCSAgIGxtX2NmZy0+ aWQsCj4gLQkJCSAgIGxtX2NmZy0+ZHMsIGxtX2NmZy0+cGluZ3BvbmcpOwo+ICsJRFBVX0RFQlVH KCJjaGVjayBsbSAlZCBwcCAlZFxuIiwKPiArCQkJICAgbG1fY2ZnLT5pZCwgbG1fY2ZnLT5waW5n cG9uZyk7Cj4gIAo+ICAJLyogQ2hlY2sgaWYgdGhpcyBsYXllciBtaXhlciBpcyBhIHBlZXIgb2Yg dGhlIHByb3Bvc2VkIHByaW1hcnkgTE0gKi8KPiAgCWlmIChwcmltYXJ5X2xtKSB7Cj4gQEAgLTU0 Myw0MyArNTIxLDEyIEBAIHN0YXRpYyBib29sIF9kcHVfcm1fY2hlY2tfbG1fYW5kX2dldF9jb25u ZWN0ZWRfYmxrcygKPiAgCQl9Cj4gIAl9Cj4gIAo+IC0JaXNfdmFsaWRfZHMgPSAobG1fY2ZnLT5k cyAhPSBEU19NQVgpID8gdHJ1ZSA6IGZhbHNlOwo+IC0KPiAtCWlmIChSTV9SUV9EUyhyZXFzKSAm JiAhaXNfdmFsaWRfZHMpIHsKPiAtCQlEUFVfREVCVUcoImZhaWw6bG0oJWQpcmVxX2RzKCVkKWRz KCVkKVxuIiwKPiAtCQkJbG1fY2ZnLT5pZCwgKGJvb2wpKFJNX1JRX0RTKHJlcXMpKSwgbG1fY2Zn LT5kcyk7Cj4gLQo+IC0JCXJldHVybiBmYWxzZTsKPiAtCX0KPiAtCj4gIAkvKiBBbHJlYWR5IHJl c2VydmVkPyAqLwo+ICAJaWYgKFJFU0VSVkVEX0JZX09USEVSKGxtLCByc3ZwKSkgewo+ICAJCURQ VV9ERUJVRygibG0gJWQgYWxyZWFkeSByZXNlcnZlZFxuIiwgbG1fY2ZnLT5pZCk7Cj4gIAkJcmV0 dXJuIGZhbHNlOwo+ICAJfQo+ICAKPiAtCWlmIChsbV9jZmctPmRzICE9IERTX01BWCkgewo+IC0J CWRwdV9ybV9pbml0X2h3X2l0ZXIoJml0ZXIsIDAsIERQVV9IV19CTEtfRFMpOwo+IC0JCXdoaWxl IChfZHB1X3JtX2dldF9od19sb2NrZWQocm0sICZpdGVyKSkgewo+IC0JCQlpZiAoaXRlci5ibGst PmlkID09IGxtX2NmZy0+ZHMpIHsKPiAtCQkJCSpkcyA9IGl0ZXIuYmxrOwo+IC0JCQkJYnJlYWs7 Cj4gLQkJCX0KPiAtCQl9Cj4gLQo+IC0JCWlmICghKmRzKSB7Cj4gLQkJCURQVV9ERUJVRygibG0g JWQgZmFpbGVkIHRvIHJldHJpZXZlIGRzICVkXG4iLCBsbS0+aWQsCj4gLQkJCQkJbG1fY2ZnLT5k cyk7Cj4gLQkJCXJldHVybiBmYWxzZTsKPiAtCQl9Cj4gLQo+IC0JCWlmIChSRVNFUlZFRF9CWV9P VEhFUigqZHMsIHJzdnApKSB7Cj4gLQkJCURQVV9ERUJVRygibG0gJWQgZHMgJWQgYWxyZWFkeSBy ZXNlcnZlZFxuIiwKPiAtCQkJCQlsbS0+aWQsICgqZHMpLT5pZCk7Cj4gLQkJCXJldHVybiBmYWxz ZTsKPiAtCQl9Cj4gLQl9Cj4gLQo+ICAJZHB1X3JtX2luaXRfaHdfaXRlcigmaXRlciwgMCwgRFBV X0hXX0JMS19QSU5HUE9ORyk7Cj4gIAl3aGlsZSAoX2RwdV9ybV9nZXRfaHdfbG9ja2VkKHJtLCAm aXRlcikpIHsKPiAgCQlpZiAoaXRlci5ibGstPmlkID09IGxtX2NmZy0+cGluZ3BvbmcpIHsKPiBA QCAtNTk2LDcgKzU0Myw2IEBAIHN0YXRpYyBib29sIF9kcHVfcm1fY2hlY2tfbG1fYW5kX2dldF9j b25uZWN0ZWRfYmxrcygKPiAgCWlmIChSRVNFUlZFRF9CWV9PVEhFUigqcHAsIHJzdnApKSB7Cj4g IAkJRFBVX0RFQlVHKCJsbSAlZCBwcCAlZCBhbHJlYWR5IHJlc2VydmVkXG4iLCBsbS0+aWQsCj4g IAkJCQkoKnBwKS0+aWQpOwo+IC0JCSpkcyA9IE5VTEw7Cj4gIAkJcmV0dXJuIGZhbHNlOwo+ICAJ fQo+ICAKPiBAQCAtNjEwLDcgKzU1Niw2IEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZlX2xt cygKPiAgCj4gIHsKPiAgCXN0cnVjdCBkcHVfcm1faHdfYmxrICpsbVtNQVhfQkxPQ0tTXTsKPiAt CXN0cnVjdCBkcHVfcm1faHdfYmxrICpkc1tNQVhfQkxPQ0tTXTsKPiAgCXN0cnVjdCBkcHVfcm1f aHdfYmxrICpwcFtNQVhfQkxPQ0tTXTsKPiAgCXN0cnVjdCBkcHVfcm1faHdfaXRlciBpdGVyX2ks IGl0ZXJfajsKPiAgCWludCBsbV9jb3VudCA9IDA7Cj4gQEAgLTYyNiwxNCArNTcxLDEzIEBAIHN0 YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZlX2xtcygKPiAgCXdoaWxlIChsbV9jb3VudCAhPSByZXFz LT50b3BvbG9neS0+bnVtX2xtICYmCj4gIAkJCV9kcHVfcm1fZ2V0X2h3X2xvY2tlZChybSwgJml0 ZXJfaSkpIHsKPiAgCQltZW1zZXQoJmxtLCAwLCBzaXplb2YobG0pKTsKPiAtCQltZW1zZXQoJmRz LCAwLCBzaXplb2YoZHMpKTsKPiAgCQltZW1zZXQoJnBwLCAwLCBzaXplb2YocHApKTsKPiAgCj4g IAkJbG1fY291bnQgPSAwOwo+ICAJCWxtW2xtX2NvdW50XSA9IGl0ZXJfaS5ibGs7Cj4gIAo+ICAJ CWlmICghX2RwdV9ybV9jaGVja19sbV9hbmRfZ2V0X2Nvbm5lY3RlZF9ibGtzKAo+IC0JCQkJcm0s IHJzdnAsIHJlcXMsIGxtW2xtX2NvdW50XSwgJmRzW2xtX2NvdW50XSwKPiArCQkJCXJtLCByc3Zw LCByZXFzLCBsbVtsbV9jb3VudF0sCj4gIAkJCQkmcHBbbG1fY291bnRdLCBOVUxMKSkKPiAgCQkJ Y29udGludWU7Cj4gIAo+IEBAIC02NDksOCArNTkzLDcgQEAgc3RhdGljIGludCBfZHB1X3JtX3Jl c2VydmVfbG1zKAo+ICAKPiAgCQkJaWYgKCFfZHB1X3JtX2NoZWNrX2xtX2FuZF9nZXRfY29ubmVj dGVkX2Jsa3MoCj4gIAkJCQkJcm0sIHJzdnAsIHJlcXMsIGl0ZXJfai5ibGssCj4gLQkJCQkJJmRz W2xtX2NvdW50XSwgJnBwW2xtX2NvdW50XSwKPiAtCQkJCQlpdGVyX2kuYmxrKSkKPiArCQkJCQkm cHBbbG1fY291bnRdLCBpdGVyX2kuYmxrKSkKPiAgCQkJCWNvbnRpbnVlOwo+ICAKPiAgCQkJbG1b bG1fY291bnRdID0gaXRlcl9qLmJsazsKPiBAQCAtNjcwLDExICs2MTMsNyBAQCBzdGF0aWMgaW50 IF9kcHVfcm1fcmVzZXJ2ZV9sbXMoCj4gIAkJbG1baV0tPnJzdnBfbnh0ID0gcnN2cDsKPiAgCQlw cFtpXS0+cnN2cF9ueHQgPSByc3ZwOwo+ICAKPiAtCQlpZiAoZHNbaV0pCj4gLQkJCWRzW2ldLT5y c3ZwX254dCA9IHJzdnA7Cj4gLQo+IC0JCURQVV9FVlQzMihsbVtpXS0+dHlwZSwgcnN2cC0+ZW5j X2lkLCBsbVtpXS0+aWQsIHBwW2ldLT5pZCwKPiAtCQkJCWRzW2ldID8gZHNbaV0tPmlkIDogMCk7 Cj4gKwkJRFBVX0VWVDMyKGxtW2ldLT50eXBlLCByc3ZwLT5lbmNfaWQsIGxtW2ldLT5pZCwgcHBb aV0tPmlkKTsKPiAgCX0KPiAgCj4gIAlyZXR1cm4gcmM7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vbXNtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKPiBp bmRleCA1YmFmZjI3Li44ZTgwYjRiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v bXNtX2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKPiBAQCAtODks MjUgKzg5LDEwIEBAIGVudW0gbXNtX21kcF9wbGFuZV9wcm9wZXJ0eSB7Cj4gIAo+ICBlbnVtIG1z bV9tZHBfY3J0Y19wcm9wZXJ0eSB7Cj4gIAlDUlRDX1BST1BfSU5GTywKPiAtCUNSVENfUFJPUF9E RVNUX1NDQUxFUl9MVVRfRUQsCj4gLQlDUlRDX1BST1BfREVTVF9TQ0FMRVJfTFVUX0NJUiwKPiAt CUNSVENfUFJPUF9ERVNUX1NDQUxFUl9MVVRfU0VQLAo+ICAKPiAgCS8qICMgb2YgYmxvYiBwcm9w ZXJ0aWVzICovCj4gIAlDUlRDX1BST1BfQkxPQkNPVU5ULAo+ICAKPiAtCS8qIHJhbmdlIHByb3Bl cnRpZXMgKi8KPiAtCUNSVENfUFJPUF9ESU1fTEFZRVJfVjEgPSBDUlRDX1BST1BfQkxPQkNPVU5U LAo+IC0JQ1JUQ19QUk9QX0NPUkVfQ0xLLAo+IC0JQ1JUQ19QUk9QX0NPUkVfQUIsCj4gLQlDUlRD X1BST1BfQ09SRV9JQiwKPiAtCUNSVENfUFJPUF9MTENDX0FCLAo+IC0JQ1JUQ19QUk9QX0xMQ0Nf SUIsCj4gLQlDUlRDX1BST1BfRFJBTV9BQiwKPiAtCUNSVENfUFJPUF9EUkFNX0lCLAo+IC0JQ1JU Q19QUk9QX0lETEVfVElNRU9VVCwKPiAtCUNSVENfUFJPUF9ERVNUX1NDQUxFUiwKPiAtCj4gIAkv KiB0b3RhbCAjIG9mIHByb3BlcnRpZXMgKi8KPiAgCUNSVENfUFJPUF9DT1VOVAo+ICB9Owo+IC0t IAo+IFRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0 aGUgQ29kZSBBdXJvcmEgRm9ydW0sCj4gYSBMaW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUg UHJvamVjdAo+IAoKLS0gClNlYW4gUGF1bCwgU29mdHdhcmUgRW5naW5lZXIsIEdvb2dsZSAvIENo cm9taXVtIE9TCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=