From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [RFC 4/4] drm/msm/mdp5: writeback support Date: Mon, 26 Feb 2018 10:41:45 -0500 Message-ID: <20180226154145.GU223881@art_vandelay> References: <20180223131758.18362-1-robdclark@gmail.com> <20180223131758.18362-5-robdclark@gmail.com> <20180223163056.GL223881@art_vandelay> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Rob Clark Cc: Archit Taneja , Laurent Pinchart , Neil Armstrong , David Airlie , linux-arm-msm , Liviu Dudau , Linux Kernel Mailing List , dri-devel , Sushmita Susheelendra , Sean Paul , Daniel Vetter , freedreno , Brian Starkey , Ville =?iso-8859-1?Q?Syrj=E4l=E4?= List-Id: linux-arm-msm@vger.kernel.org T24gRnJpLCBGZWIgMjMsIDIwMTggYXQgMDE6MTU6NTRQTSAtMDUwMCwgUm9iIENsYXJrIHdyb3Rl Ogo+IE9uIEZyaSwgRmViIDIzLCAyMDE4IGF0IDExOjMwIEFNLCBTZWFuIFBhdWwgPHNlYW5wYXVs QGNocm9taXVtLm9yZz4gd3JvdGU6Cj4gPiBPbiBGcmksIEZlYiAyMywgMjAxOCBhdCAwODoxNzo1 NEFNIC0wNTAwLCBSb2IgQ2xhcmsgd3JvdGU6Cj4gPj4gSW4gYSB3YXksIGJhc2VkIG9uIHRoZSBv cmlnaW5hbCB3cml0ZWJhY2sgcGF0Y2ggZnJvbSBKaWxhaSBXYW5nLCBidXQgYQo+ID4+IGxvdCBo YXMgc2hpZnRlZCBhcm91bmQgc2luY2UgdGhlbi4KPiA+Pgo+ID4+IFNpZ25lZC1vZmYtYnk6IFJv YiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4KPiA+PiAtLS0KPiA+PiAgZHJpdmVycy9ncHUv ZHJtL21zbS9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDEgKwo+ID4+ICBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvbWRwNS9tZHA1X2NydGMuYyB8ICAyMyArLQo+ID4+ICBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvbWRwNS9tZHA1X2ttcy5jICB8ICAzOCArKystCj4gPj4gIGRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9tZHA1L21kcDVfa21zLmggIHwgICA3ICstCj4gPj4gIGRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9tZHA1L21kcDVfd2IuYyAgIHwgMzY3ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwo+ID4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9kc2lfaG9zdC5jICAgICAg ICB8ICAgNCArLQo+ID4+ICA2IGZpbGVzIGNoYW5nZWQsIDQzMSBpbnNlcnRpb25zKCspLCA5IGRl bGV0aW9ucygtKQo+ID4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL21kcDUvbWRwNV93Yi5jCj4gPj4KPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKPiA+PiBpbmRleCBj ZDQwYzA1MGIyZDcuLmM5ZjUwYWRlZjJkYiAxMDA2NDQKPiA+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL01ha2VmaWxlCj4gPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQo+ ID4+IEBAIC00NSw2ICs0NSw3IEBAIG1zbS15IDo9IFwKPiA+PiAgICAgICBkaXNwL21kcDUvbWRw NV9taXhlci5vIFwKPiA+PiAgICAgICBkaXNwL21kcDUvbWRwNV9wbGFuZS5vIFwKPiA+PiAgICAg ICBkaXNwL21kcDUvbWRwNV9zbXAubyBcCj4gPj4gKyAgICAgZGlzcC9tZHA1L21kcDVfd2IubyBc Cj4gPj4gICAgICAgbXNtX2F0b21pYy5vIFwKPiA+PiAgICAgICBtc21fZGVidWdmcy5vIFwKPiA+ PiAgICAgICBtc21fZHJ2Lm8gXAo+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvbWRwNS9tZHA1X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21k cDVfY3J0Yy5jCj4gPj4gaW5kZXggOTg5M2U0M2JhNmM1Li5iMDBjYTg4Yjc0MWQgMTAwNjQ0Cj4g Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9jcnRjLmMKPiA+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNS9tZHA1X2NydGMuYwo+ID4+IEBAIC00 ODQsNyArNDg0LDExIEBAIHN0YXRpYyB2b2lkIG1kcDVfY3J0Y19hdG9taWNfZW5hYmxlKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKPiA+PiAgICAgICB9Cj4gPj4KPiA+PiAgICAgICAvKiBSZXN0b3Jl IHZibGFuayBpcnEgaGFuZGxpbmcgYWZ0ZXIgcG93ZXIgaXMgZW5hYmxlZCAqLwo+ID4+IC0gICAg IGRybV9jcnRjX3ZibGFua19vbihjcnRjKTsKPiA+PiArLy8gVE9ETyB3ZSBjYW4ndCAtPmdldF9z Y2Fub3V0X3BvcygpIGZvciB3YiAoc2luY2UgdmlydHVhbCBpbnRmKS4uCj4gPj4gKy8vIHBlcmhh cHMgZHJtIGNvcmUgc2hvdWxkIGJlIGNsZXZlciBlbm91Z2ggbm90IHRvIGRybV9yZXNldF92Ymxh bmtfdGltZXN0YW1wKCkKPiA+PiArLy8gZm9yIHZpcnR1YWwgZW5jb2RlcnMgLyB3cml0ZWJhY2s/ Cj4gPj4gKyAgICAgaWYgKG1kcDVfY3N0YXRlLT5waXBlbGluZS5pbnRmLT50eXBlICE9IElOVEZf V0IpCj4gPj4gKyAgICAgICAgICAgICBkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7Cj4gPj4KPiA+ PiAgICAgICBtZHA1X2NydGNfbW9kZV9zZXRfbm9mYihjcnRjKTsKPiA+Pgo+ID4+IEBAIC01MTgs NyArNTIyLDExIEBAIGludCBtZHA1X2NydGNfc2V0dXBfcGlwZWxpbmUoc3RydWN0IGRybV9jcnRj ICpjcnRjLAo+ID4+ICAgICAgICAgICAgICAgdTMyIGNhcHM7Cj4gPj4gICAgICAgICAgICAgICBp bnQgcmV0Owo+ID4+Cj4gPj4gLSAgICAgICAgICAgICBjYXBzID0gTURQX0xNX0NBUF9ESVNQTEFZ Owo+ID4+ICsgICAgICAgICAgICAgaWYgKHBpcGVsaW5lLT5pbnRmLT50eXBlID09IElOVEZfV0Ip Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgIGNhcHMgPSBNRFBfTE1fQ0FQX1dCOwo+ID4+ICsg ICAgICAgICAgICAgZWxzZQo+ID4+ICsgICAgICAgICAgICAgICAgICAgICBjYXBzID0gTURQX0xN X0NBUF9ESVNQTEFZOwo+ID4+ICsKPiA+PiAgICAgICAgICAgICAgIGlmIChuZWVkX3JpZ2h0X21p eGVyKQo+ID4+ICAgICAgICAgICAgICAgICAgICAgICBjYXBzIHw9IE1EUF9MTV9DQVBfUEFJUjsK PiA+Pgo+ID4+IEBAIC01NDUsNiArNTUzLDcgQEAgaW50IG1kcDVfY3J0Y19zZXR1cF9waXBlbGlu ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPj4gICAgICAgbWRwNV9jc3RhdGUtPmVycl9pcnFt YXNrID0gaW50ZjJlcnIoaW50Zi0+bnVtKTsKPiA+PiAgICAgICBtZHA1X2NzdGF0ZS0+dmJsYW5r X2lycW1hc2sgPSBpbnRmMnZibGFuayhwaXBlbGluZS0+bWl4ZXIsIGludGYpOwo+ID4+Cj4gPj4g Ky8vIFhYWCBzaG91bGQgd2UgYmUgdHJlYXRpbmcgV0IgYXMgY21kX21vZGU/Pwo+ID4+ICAgICAg IGlmICgoaW50Zi0+dHlwZSA9PSBJTlRGX0RTSSkgJiYKPiA+PiAgICAgICAgICAgKGludGYtPm1v ZGUgPT0gTURQNV9JTlRGX0RTSV9NT0RFX0NPTU1BTkQpKSB7Cj4gPj4gICAgICAgICAgICAgICBt ZHA1X2NzdGF0ZS0+cHBfZG9uZV9pcnFtYXNrID0gbG0ycHBkb25lKHBpcGVsaW5lLT5taXhlcik7 Cj4gPj4gQEAgLTYzOSw4ICs2NDgsMTIgQEAgc3RhdGljIGludCBtZHA1X2NydGNfYXRvbWljX2No ZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+PiAgICAgICB9Cj4gPj4KPiA+PiAgICAgICAv KiBiYWlsIG91dCBlYXJseSBpZiB0aGVyZSBhcmVuJ3QgYW55IHBsYW5lcyAqLwo+ID4+IC0gICAg IGlmICghY250KQo+ID4+IC0gICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPj4gKyAgICAgaWYgKCFj bnQpIHsKPiA+PiArICAgICAgICAgICAgIGlmICghc3RhdGUtPmFjdGl2ZSkKPiA+PiArICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPj4gKyAgICAgICAgICAgICBkZXZfZXJyKGRldi0+ ZGV2LCAiJXMgaGFzIG5vIHBsYW5lcyFcbiIsIGNydGMtPm5hbWUpOwo+ID4+ICsgICAgICAgICAg ICAgcmV0dXJuIC1FSU5WQUw7Cj4gPj4gKyAgICAgfQo+ID4KPiA+IFRoaXMgc2VlbXMgdW5yZWxh dGVkPwo+ID4KPiAKPiBobW0sIHllYWgsIGtpbmRhLiAgSXQgd2FzIGEgY2FzZSB0aGF0IEkgaGl0 IGJlZm9yZSB3b3JraW5nIG91dCBhbGwgdGhlCj4gYnVncyBpbiBteSBrbXNjdWJlIHdyaXRlYmFj ayBtb2RlLCBidXQgSSBndWVzcyBpc24ndCBkaXJlY3RseSByZWxhdGVkCj4gdG8gd2IuCj4gCj4g Pj4KPiA+PiAgICAgICBod19jZmcgPSBtZHA1X2NmZ19nZXRfaHdfY29uZmlnKG1kcDVfa21zLT5j ZmcpOwo+ID4+Cj4gPj4gQEAgLTExNjAsNyArMTE3Myw3IEBAIHZvaWQgbWRwNV9jcnRjX3dhaXRf Zm9yX2NvbW1pdF9kb25lKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+Pgo+ID4+ICAgICAgIGlm IChtZHA1X2NzdGF0ZS0+Y21kX21vZGUpCj4gPj4gICAgICAgICAgICAgICBtZHA1X2NydGNfd2Fp dF9mb3JfcHBfZG9uZShjcnRjKTsKPiA+PiAtICAgICBlbHNlCj4gPj4gKyAgICAgZWxzZSBpZiAo bWRwNV9jc3RhdGUtPnBpcGVsaW5lLmludGYtPnR5cGUgIT0gSU5URl9XQikKPiA+PiAgICAgICAg ICAgICAgIG1kcDVfY3J0Y193YWl0X2Zvcl9mbHVzaF9kb25lKGNydGMpOwo+ID4+ICB9Cj4gPj4K PiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9rbXMu YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfa21zLmMKPiA+PiBpbmRleCAx ZjQ0ZDhmMTVjZTEuLjIzOTAxMDkwNTYzNyAxMDA2NDQKPiA+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvbWRwNS9tZHA1X2ttcy5jCj4gPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL21kcDUvbWRwNV9rbXMuYwo+ID4+IEBAIC00MjcsNyArNDI3LDggQEAgc3RhdGljIGlu dCBtb2Rlc2V0X2luaXQoc3RydWN0IG1kcDVfa21zICptZHA1X2ttcykKPiA+PiAgICAgICAgKiB0 aGUgTURQNSBpbnRlcmZhY2VzKSB0aGFuIHRoZSBudW1iZXIgb2YgbGF5ZXIgbWl4ZXJzIHByZXNl bnQgaW4gSFcsCj4gPj4gICAgICAgICogYnV0IGxldCdzIGJlIHNhZmUgaGVyZSBhbnl3YXkKPiA+ PiAgICAgICAgKi8KPiA+PiAtICAgICBudW1fY3J0Y3MgPSBtaW4ocHJpdi0+bnVtX2VuY29kZXJz LCBtZHA1X2ttcy0+bnVtX2h3bWl4ZXJzKTsKPiA+PiArICAgICBudW1fY3J0Y3MgPSBtaW4ocHJp di0+bnVtX2VuY29kZXJzICsgaHdfY2ZnLT53Yi5jb3VudCwKPiA+PiArICAgICAgICAgICAgICAg ICAgICAgbWRwNV9rbXMtPm51bV9od21peGVycyk7Cj4gPj4KPiA+PiAgICAgICAvKgo+ID4+ICAg ICAgICAqIENvbnN0cnVjdCBwbGFuZXMgZXF1YWxpbmcgdGhlIG51bWJlciBvZiBodyBwaXBlcywg YW5kIENSVENzIGZvciB0aGUKPiA+PiBAQCAtNDgyLDYgKzQ4MywzMyBAQCBzdGF0aWMgaW50IG1v ZGVzZXRfaW5pdChzdHJ1Y3QgbWRwNV9rbXMgKm1kcDVfa21zKQo+ID4+ICAgICAgICAgICAgICAg ZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAoMSA8PCBwcml2LT5udW1fY3J0Y3MpIC0gMTsKPiA+ PiAgICAgICB9Cj4gPj4KPiA+PiArICAgICAvKgo+ID4+ICsgICAgICAqIExhc3RseSwgY29uc3Ry dWN0IHdyaXRlYmFjayBjb25uZWN0b3JzLgo+ID4+ICsgICAgICAqLwo+ID4+ICsgICAgIGZvciAo aSA9IDA7IGkgPCBod19jZmctPndiLmNvdW50OyBpKyspIHsKPiA+PiArICAgICAgICAgICAgIHN0 cnVjdCBkcm1fd3JpdGViYWNrX2Nvbm5lY3RvciAqd2JfY29ubjsKPiA+PiArICAgICAgICAgICAg IHN0cnVjdCBtZHA1X2N0bCAqY3RsOwo+ID4+ICsKPiA+PiArICAgICAgICAgICAgIGN0bCA9IG1k cDVfY3RsbV9yZXF1ZXN0KG1kcDVfa21zLT5jdGxtLCAtMSk7Cj4gPj4gKyAgICAgICAgICAgICBp ZiAoIWN0bCkgewo+ID4+ICsgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGRldi0+ZGV2LAo+ ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gYWxsb2NhdGUgY3Rs IGZvciB3cml0ZWJhY2sgJWRcbiIsIGkpOwo+ID4+ICsgICAgICAgICAgICAgICAgICAgICBjb250 aW51ZTsKPiA+PiArICAgICAgICAgICAgIH0KPiA+PiArCj4gPj4gKyAgICAgICAgICAgICB3Yl9j b25uID0gbWRwNV93Yl9jb25uZWN0b3JfaW5pdChkZXYsIGN0bCwKPiA+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBod19jZmctPndiLmluc3RhbmNlc1tpXS5pZCk7Cj4gPj4gKyAgICAg ICAgICAgICBpZiAoSVNfRVJSKHdiX2Nvbm4pKSB7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAg IHJldCA9IFBUUl9FUlIod2JfY29ubik7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9l cnIoZGV2LT5kZXYsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0 byBjb25zdHJ1Y3Qgd3JpdGViYWNrIGNvbm5lY3RvciAlZCAoJWQpXG4iLAo+ID4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGksIHJldCk7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAg IGdvdG8gZmFpbDsKPiA+PiArICAgICAgICAgICAgIH0KPiA+PiArCj4gPj4gKyAgICAgICAgICAg ICB3Yl9jb25uLT5lbmNvZGVyLnBvc3NpYmxlX2NydGNzID0gKDEgPDwgcHJpdi0+bnVtX2NydGNz KSAtIDE7Cj4gPj4gKyAgICAgfQo+ID4+ICsKPiA+PiAgICAgICByZXR1cm4gMDsKPiA+Pgo+ID4+ ICBmYWlsOgo+ID4+IEBAIC01NTUsNiArNTgzLDEwIEBAIHN0YXRpYyBib29sIG1kcDVfZ2V0X3Nj YW5vdXRwb3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsCj4gPj4g ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gPj4gICAgICAgfQo+ID4+Cj4gPj4gKyAgICAg LyogdW5zdXBwb3J0ZWQgZm9yIHdyaXRlYmFjazogKi8KPiA+PiArICAgICBpZiAoZW5jb2Rlci0+ ZW5jb2Rlcl90eXBlID09IERSTV9NT0RFX0VOQ09ERVJfVklSVFVBTCkKPiA+PiArICAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKPiA+PiArCj4gPj4gICAgICAgdnN3ID0gbW9kZS0+Y3J0Y192c3lu Y19lbmQgLSBtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0Owo+ID4+ICAgICAgIHZicCA9IG1vZGUtPmNy dGNfdnRvdGFsIC0gbW9kZS0+Y3J0Y192c3luY19lbmQ7Cj4gPj4KPiA+PiBAQCAtNjEwLDYgKzY0 MiwxMCBAQCBzdGF0aWMgdTMyIG1kcDVfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlKQo+ID4+ICAgICAgIGlmICghZW5jb2RlcikKPiA+ PiAgICAgICAgICAgICAgIHJldHVybiAwOwo+ID4+Cj4gPj4gKyAgICAgLyogdW5zdXBwb3J0ZWQg Zm9yIHdyaXRlYmFjazogKi8KPiA+PiArICAgICBpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlID09 IERSTV9NT0RFX0VOQ09ERVJfVklSVFVBTCkKPiA+PiArICAgICAgICAgICAgIHJldHVybiAwOwo+ ID4+ICsKPiA+PiAgICAgICByZXR1cm4gbWRwNV9lbmNvZGVyX2dldF9mcmFtZWNvdW50KGVuY29k ZXIpOwo+ID4+ICB9Cj4gPj4KPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL21kcDUvbWRwNV9rbXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVf a21zLmgKPiA+PiBpbmRleCA0MjVhMDNkMjEzZTUuLmJlMGY5M2VmMzNlMSAxMDA2NDQKPiA+PiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNS9tZHA1X2ttcy5oCj4gPj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9rbXMuaAo+ID4+IEBAIC0xOCw2ICsx OCw4IEBACj4gPj4gICNpZm5kZWYgX19NRFA1X0tNU19IX18KPiA+PiAgI2RlZmluZSBfX01EUDVf S01TX0hfXwo+ID4+Cj4gPj4gKyNpbmNsdWRlIDxkcm0vZHJtX3dyaXRlYmFjay5oPgo+ID4+ICsK PiA+PiAgI2luY2x1ZGUgIm1zbV9kcnYuaCIKPiA+PiAgI2luY2x1ZGUgIm1zbV9rbXMuaCIKPiA+ PiAgI2luY2x1ZGUgImRpc3AvbWRwX2ttcy5oIgo+ID4+IEBAIC0yNTEsNyArMjUzLDcgQEAgc3Rh dGljIGlubGluZSB1aW50MzJfdCBpbnRmMnZibGFuayhzdHJ1Y3QgbWRwNV9od19taXhlciAqbWl4 ZXIsCj4gPj4gICAgICAgICAgICAgICByZXR1cm4gTURQNV9JUlFfUElOR19QT05HXzBfUkRfUFRS IDw8IG1peGVyLT5wcDsKPiA+Pgo+ID4+ICAgICAgIGlmIChpbnRmLT50eXBlID09IElOVEZfV0Ip Cj4gPj4gLSAgICAgICAgICAgICByZXR1cm4gTURQNV9JUlFfV0JfMl9ET05FOwo+ID4+ICsgICAg ICAgICAgICAgcmV0dXJuIE1EUDVfSVJRX1dCXzJfRE9ORSB8IE1EUDVfSVJRX1dCXzBfRE9ORSB8 IE1EUDVfSVJRX1dCXzFfRE9ORTsKPiA+Pgo+ID4+ICAgICAgIHN3aXRjaCAoaW50Zi0+bnVtKSB7 Cj4gPj4gICAgICAgY2FzZSAwOiAgcmV0dXJuIE1EUDVfSVJRX0lOVEYwX1ZTWU5DOwo+ID4+IEBA IC0zMzAsNCArMzMyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgbWRwNV9jbWRfZW5jb2Rlcl9zZXRf c3BsaXRfZGlzcGxheSgKPiA+PiAgfQo+ID4+ICAjZW5kaWYKPiA+Pgo+ID4+ICtzdHJ1Y3QgZHJt X3dyaXRlYmFja19jb25uZWN0b3IgKm1kcDVfd2JfY29ubmVjdG9yX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiA+PiArICAgICAgICAgICAgIHN0cnVjdCBtZHA1X2N0bCAqY3RsLCB1bnNp Z25lZCB3Yl9pZCk7Cj4gPj4gKwo+ID4+ICAjZW5kaWYgLyogX19NRFA1X0tNU19IX18gKi8KPiA+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV93Yi5jIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV93Yi5jCj4gPj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiA+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjNkYWJkMGExYWE4Ygo+ID4+IC0tLSAv ZGV2L251bGwKPiA+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNS9tZHA1X3di LmMKPiA+PiBAQCAtMCwwICsxLDM2NyBAQAo+ID4+ICsvKgo+ID4+ICsgKiBDb3B5cmlnaHQgKEMp IDIwMTggUmVkIEhhdAo+ID4+ICsgKiBBdXRob3I6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWls LmNvbT4KPiA+PiArICoKPiA+PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKPiA+PiArICogdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVi bGlzaGVkIGJ5Cj4gPj4gKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gPj4gKyAq Cj4gPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAo+ID4+ICsgKiBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKPiA+PiAr ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvcgo+ID4+ICsgKiBtb3JlIGRldGFpbHMuCj4gPj4gKyAqCj4gPj4g KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKPiA+PiArICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgo+ID4KPiA+IFNQRFggbGljZW5zZQo+ ID4KPiA+PiArICovCj4gPj4gKwo+ID4+ICsjaW5jbHVkZSAibWRwNV9rbXMuaCIKPiA+PiArCj4g Pj4gKy8qCj4gPj4gKyAqIFdyaXRlYmFjayBjb25uZWN0b3IvZW5jb2RlciBpbXBsZW1lbnRhdGlv bjoKPiA+PiArICovCj4gPj4gKwo+ID4+ICtzdHJ1Y3QgbWRwNV93Yl9jb25uZWN0b3Igewo+ID4+ ICsgICAgIHN0cnVjdCBkcm1fd3JpdGViYWNrX2Nvbm5lY3RvciBiYXNlOwo+ID4+ICsKPiA+PiAr ICAgICB1MzIgbmZvcm1hdHM7Cj4gPj4gKyAgICAgdTMyIGZvcm1hdHNbMzJdOwo+ID4+ICsKPiA+ PiArICAgICB1bnNpZ25lZCBpZDsKPiA+PiArICAgICBzdHJ1Y3QgbWRwNV9jdGwgKmN0bDsKPiA+ PiArICAgICBzdHJ1Y3QgbWRwNV9pbnRlcmZhY2UgKmludGY7Cj4gPj4gKwo+ID4+ICsgICAgIHN0 cnVjdCBtZHBfaXJxIHdiX2RvbmU7Cj4gPj4gK307Cj4gPj4gKyNkZWZpbmUgdG9fbWRwNV93Yl9j b25uZWN0b3IoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBtZHA1X3diX2Nvbm5lY3RvciwgYmFz ZSkKPiA+PiArCj4gPj4gKwo+ID4+ICtzdGF0aWMgdm9pZCBtZHA1X3diX2Nvbm5lY3Rvcl9hdG9t aWNfY29tbWl0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPj4gKyAgICAgICAg ICAgICBzdHJ1Y3QgZHJtX3dyaXRlYmFja19qb2IgKmpvYik7Cj4gPj4gKwo+ID4+ICtzdGF0aWMg aW50IG1kcDVfd2JfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQo+ID4+ICt7Cj4gPj4gKyAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5l Y3Rvci0+ZGV2Owo+ID4+ICsKPiA+PiArICAgICByZXR1cm4gZHJtX2FkZF9tb2Rlc19ub2VkaWQo Y29ubmVjdG9yLCBkZXYtPm1vZGVfY29uZmlnLm1heF93aWR0aCwKPiA+PiArICAgICAgICAgICAg ICAgICAgICAgZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0KTsKPiA+Cj4gPiBJIGd1ZXNzIHRo ZSBwbGFuIGlzIHRvIGxldCB1c2Vyc3BhY2UgcHJvdmlkZSB1c2VyLWRlZmluZWQgbW9kZXMgZm9y IHdiPyBJcyBpdAo+ID4gZXZlciB1c2VmdWwgdG8gaGF2ZSB0aGlzIHRva2VuIG1vZGU/Cj4gCj4g L21lIHNocnVncwo+IAo+IEkganVzdCBjb3BpZWQgdGhpcyBmcm9tIHRoZSBtYWxpZHAgd2IgcGF0 Y2guICBUaGlzIGFjdHVhbGx5IGRvZXMgYWRkCj4gbXVsdGlwbGUgbW9kZXMgKGFsbCB0aGUgZG10 IG1vZGVzIHRoYXQgZml0IHdpdGhpbiBtYXggd2lkdGgvaGVpZ2h0KS4KPiBOb3Qgc3VyZSBpZiB0 aGF0IGlzIHVzZWZ1bCBvciBub3QuCgpBaCwgeWVhaCwgdGhhdCBkb2VzIHNlZW0gdXNlZnVsIGZv ciBsYXp5IHRlc3RpbmcuIE1pZ2h0IGFzIHdlbGwgbGVhdmUgaXQgaW4uCgo+IAo+ID4KPiA+PiAr fQo+ID4+ICsKPiA+PiArc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCj4gPj4gK21kcDVfd2Jf Y29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ PiArICAgICAgICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+ID4+ICt7Cj4g Pj4gKyAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2Owo+ID4+ICsg ICAgIHN0cnVjdCBkcm1fbW9kZV9jb25maWcgKm1vZGVfY29uZmlnID0gJmRldi0+bW9kZV9jb25m aWc7Cj4gPj4gKyAgICAgaW50IHcgPSBtb2RlLT5oZGlzcGxheSwgaCA9IG1vZGUtPnZkaXNwbGF5 Owo+ID4+ICsKPiA+PiArICAgICBpZiAoKHcgPCBtb2RlX2NvbmZpZy0+bWluX3dpZHRoKSB8fCAo dyA+IG1vZGVfY29uZmlnLT5tYXhfd2lkdGgpKQo+ID4+ICsgICAgICAgICAgICAgcmV0dXJuIE1P REVfQkFEX0hWQUxVRTsKPiA+PiArCj4gPj4gKyAgICAgaWYgKChoIDwgbW9kZV9jb25maWctPm1p bl9oZWlnaHQpIHx8IChoID4gbW9kZV9jb25maWctPm1heF9oZWlnaHQpKQo+ID4+ICsgICAgICAg ICAgICAgcmV0dXJuIE1PREVfQkFEX1ZWQUxVRTsKPiA+PiArCj4gPj4gKyAgICAgcmV0dXJuIE1P REVfT0s7Cj4gPj4gK30KPiA+Cj4gPiBNaWdodCBiZSB1c2VmdWwgZm9yIHRoZXNlIHRvIG1pZ3Jh dGUgaW50byBkcm1fd3JpdGViYWNrX2Nvbm5lY3Rvci5jIGFzIGhlbHBlcnMuCj4gCj4gRXZlbiB0 aGUgX2dldF9tb2RlcygpLCB0YmgsIHNpbmNlIEkgdGhpbmsgYWxsIG9mIHRoZXNlIGVuZGVkIHVw IHRoZQo+IHNhbWUgYXMgbWFsaWRwLi4KCldvcmtzIGZvciBtZSEKCj4gCj4gPgo+ID4+ICsKPiA+ PiArY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIG1kcDVfd2JfY29ubmVj dG9yX2hlbHBlcl9mdW5jcyA9IHsKPiA+PiArICAgICAuZ2V0X21vZGVzID0gbWRwNV93Yl9jb25u ZWN0b3JfZ2V0X21vZGVzLAo+ID4+ICsgICAgIC5tb2RlX3ZhbGlkID0gbWRwNV93Yl9jb25uZWN0 b3JfbW9kZV92YWxpZCwKPiA+PiArICAgICAuYXRvbWljX2NvbW1pdCA9IG1kcDVfd2JfY29ubmVj dG9yX2F0b21pY19jb21taXQsCj4gPj4gK307Cj4gPj4gKwo+ID4+ICtzdGF0aWMgZW51bSBkcm1f Y29ubmVjdG9yX3N0YXR1cwo+ID4+ICttZHA1X3diX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKPiA+PiArewo+ID4+ICsgICAgIHJl dHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKPiA+PiArfQo+ID4KPiA+IFRoaXMg c2hvdWxkIGJlIGEgaGVscGVyIGFzIHdlbGwuCj4gPgo+ID4+ICsKPiA+PiArc3RhdGljIHZvaWQg bWRwNV93Yl9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KQo+ID4+ICt7Cj4gPj4gKyAgICAgZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cj4g Pj4gK30KPiA+Cj4gPiBKdXN0IHVzZSBkcm1fY29ubmVjdG9yX2NsZWFudXAgZGlyZWN0bHkgYmVs b3cKPiA+Cj4gCj4gYWN0dWFsbHksIEkgc2VlbSB0byBoYXZlIGxvc3QgYSBmaXh1cCwgdGhlcmUg aXMgc29tZSBtZW1vcnkgdG8gZnJlZSBpbgo+IF9kZXN0cm95KCkKPiAKPiBBbmQgSSBzdXNwZWN0 IHdlIG5lZWQgYSBkcm1fd3JpdGViYWNrX2Nvbm5lY3Rvcl9jbGVhbnVwKCkuLgo+IAo+ID4+ICsK PiA+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIG1kcDVfd2JfY29u bmVjdG9yX2Z1bmNzID0gewo+ID4+ICsgICAgIC5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nv bm5lY3Rvcl9yZXNldCwKPiA+PiArICAgICAuZGV0ZWN0ID0gbWRwNV93Yl9jb25uZWN0b3JfZGV0 ZWN0LAo+ID4+ICsgICAgIC5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29u bmVjdG9yX21vZGVzLAo+ID4+ICsgICAgIC5kZXN0cm95ID0gbWRwNV93Yl9jb25uZWN0b3JfZGVz dHJveSwKPiA+PiArICAgICAuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVs cGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCj4gPj4gKyAgICAgLmF0b21pY19kZXN0cm95 X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCj4gPj4g K307Cj4gPj4gKwo+ID4+ICtzdGF0aWMgaW50Cj4gPj4gK21kcDVfd2JfZW5jb2Rlcl9hdG9taWNf Y2hlY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+ID4+ICsgICAgICAgICAgICAgc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4+ICsgICAgICAgICAgICAgc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCj4gPj4gK3sKPiA+PiArICAgICBzdHJ1 Y3QgbXNtX2RybV9wcml2YXRlICpwcml2ID0gZW5jb2Rlci0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiA+ PiArICAgICBzdHJ1Y3QgbWRwNV9jcnRjX3N0YXRlICptZHA1X2NzdGF0ZSA9IHRvX21kcDVfY3J0 Y19zdGF0ZShjcnRjX3N0YXRlKTsKPiA+PiArICAgICBzdHJ1Y3QgbWRwNV93Yl9jb25uZWN0b3Ig Km1kcDVfd2IgPSB0b19tZHA1X3diX2Nvbm5lY3RvcigKPiA+PiArICAgICAgICAgICAgIHRvX3di X2Nvbm5lY3Rvcihjb25uX3N0YXRlLT5jb25uZWN0b3IpKTsKPiA+PiArICAgICBzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYjsKPiA+PiArICAgICBjb25zdCBzdHJ1Y3QgbXNtX2Zvcm1hdCAqZm9y bWF0Owo+ID4+ICsgICAgIGNvbnN0IHN0cnVjdCBtZHBfZm9ybWF0ICptZHBfZm10Owo+ID4+ICsg ICAgIHN0cnVjdCBkcm1fZm9ybWF0X25hbWVfYnVmIGZvcm1hdF9uYW1lOwo+ID4+ICsgICAgIGlu dCByZXQ7Cj4gPj4gKwo+ID4+ICsgICAgIGlmICghY29ubl9zdGF0ZS0+d3JpdGViYWNrX2pvYiB8 fCAhY29ubl9zdGF0ZS0+d3JpdGViYWNrX2pvYi0+ZmIpCj4gPj4gKyAgICAgICAgICAgICByZXR1 cm4gMDsKPiA+PiArCj4gPj4gKyAgICAgZmIgPSBjb25uX3N0YXRlLT53cml0ZWJhY2tfam9iLT5m YjsKPiA+PiArCj4gPj4gKyAgICAgREJHKCJ3YlsldV06IGNoZWNrIHdyaXRlYmFjayAldXgldUAl cyIsIG1kcDVfd2ItPmlkLAo+ID4+ICsgICAgICAgICAgICAgZmItPndpZHRoLCBmYi0+aGVpZ2h0 LAo+ID4+ICsgICAgICAgICAgICAgZHJtX2dldF9mb3JtYXRfbmFtZShmYi0+Zm9ybWF0LT5mb3Jt YXQsICZmb3JtYXRfbmFtZSkpOwo+ID4+ICsKPiA+PiArICAgICBmb3JtYXQgPSBtZHBfZ2V0X2Zv cm1hdChwcml2LT5rbXMsIGZiLT5mb3JtYXQtPmZvcm1hdCk7Cj4gPj4gKyAgICAgaWYgKCFmb3Jt YXQpIHsKPiA+PiArICAgICAgICAgICAgIERCRygiSW52YWxpZCBwaXhlbCBmb3JtYXQhIik7Cj4g Pj4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+PiArICAgICB9Cj4gPj4gKwo+ID4+ ICsgICAgIG1kcF9mbXQgPSB0b19tZHBfZm9ybWF0KGZvcm1hdCk7Cj4gPj4gKyAgICAgaWYgKE1E UF9GT1JNQVRfSVNfWVVWKG1kcF9mbXQpKSB7Cj4gPj4gKyAgICAgICAgICAgICBzd2l0Y2ggKG1k cF9mbXQtPmNocm9tYV9zYW1wbGUpIHsKPiA+PiArICAgICAgICAgICAgIGNhc2UgQ0hST01BXzQy MDoKPiA+PiArICAgICAgICAgICAgIGNhc2UgQ0hST01BX0gyVjE6Cj4gPj4gKyAgICAgICAgICAg ICAgICAgICAgIC8qIHN1cHBvcnRlZCAqLwo+ID4+ICsgICAgICAgICAgICAgICAgICAgICBicmVh azsKPiA+PiArICAgICAgICAgICAgIGNhc2UgQ0hST01BX0gxVjI6Cj4gPj4gKyAgICAgICAgICAg ICBkZWZhdWx0Ogo+ID4+ICsgICAgICAgICAgICAgICAgICAgICBEQkcoInVuc3VwcG9ydGVkIHdi IGNocm9tYSBzYW1wPSVkXG4iLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1k cF9mbXQtPmNocm9tYV9zYW1wbGUpOwo+ID4+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4g LUVJTlZBTDsKPiA+PiArICAgICAgICAgICAgIH0KPiA+PiArICAgICB9Cj4gPj4gKwo+ID4+ICsg ICAgIC8qIFRPRE8gSSB0aGluayB3ZSB3b3VsZCBwcmVmZXIgdG8gaGF2ZSBwcm9wZXIgcHJlcGFy ZV9mYigpL2NsZWFudXBfZmIoKQo+ID4+ICsgICAgICAqIHZmdW5jcywgYXMgd2l0aCBwbGFuZS4u ICBBbHNvLCB3aGVyZSB0byB1bnByZXBhcmU/Cj4gPj4gKyAgICAgICovCj4gPj4gKyAgICAgcmV0 ID0gbXNtX2ZyYW1lYnVmZmVyX3ByZXBhcmUoZmIsIHByaXYtPmttcy0+YXNwYWNlKTsKPiA+PiAr ICAgICBpZiAocmV0KQo+ID4+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+PiArCj4gPj4g KyAgICAgbWRwNV9jc3RhdGUtPmN0bCA9IG1kcDVfd2ItPmN0bDsKPiA+PiArICAgICBtZHA1X2Nz dGF0ZS0+cGlwZWxpbmUuaW50ZiA9IG1kcDVfd2ItPmludGY7Cj4gPj4gKyAgICAgbWRwNV9jc3Rh dGUtPmRlZmVyX3N0YXJ0ID0gdHJ1ZTsKPiA+PiArCj4gPj4gKyAgICAgcmV0dXJuIDA7Cj4gPj4g K30KPiA+PiArCj4gPj4gK3N0YXRpYyB2b2lkCj4gPj4gK3diX2NzY19zZXR1cChzdHJ1Y3QgbWRw NV9rbXMgKm1kcDVfa21zLCB1MzIgd2JfaWQsIHN0cnVjdCBjc2NfY2ZnICpjc2MpCj4gPj4gK3sK PiA+PiArICAgICB1aW50MzJfdCAgaTsKPiA+PiArICAgICB1aW50MzJfdCAqbWF0cml4Owo+ID4+ ICsKPiA+PiArICAgICBpZiAodW5saWtlbHkoIWNzYykpCj4gPj4gKyAgICAgICAgICAgICByZXR1 cm47Cj4gPj4gKwo+ID4+ICsgICAgIG1hdHJpeCA9IGNzYy0+bWF0cml4Owo+ID4+ICsgICAgIG1k cDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X1dCX0NTQ19NQVRSSVhfQ09FRkZfMCh3Yl9pZCks Cj4gPj4gKyAgICAgICAgICAgICBNRFA1X1dCX0NTQ19NQVRSSVhfQ09FRkZfMF9DT0VGRl8xMSht YXRyaXhbMF0pIHwKPiA+PiArICAgICAgICAgICAgIE1EUDVfV0JfQ1NDX01BVFJJWF9DT0VGRl8w X0NPRUZGXzEyKG1hdHJpeFsxXSkpOwo+ID4+ICsgICAgIG1kcDVfd3JpdGUobWRwNV9rbXMsIFJF R19NRFA1X1dCX0NTQ19NQVRSSVhfQ09FRkZfMSh3Yl9pZCksCj4gPj4gKyAgICAgICAgICAgICBN RFA1X1dCX0NTQ19NQVRSSVhfQ09FRkZfMV9DT0VGRl8xMyhtYXRyaXhbMl0pIHwKPiA+PiArICAg ICAgICAgICAgIE1EUDVfV0JfQ1NDX01BVFJJWF9DT0VGRl8xX0NPRUZGXzIxKG1hdHJpeFszXSkp Owo+ID4+ICsgICAgIG1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X1dCX0NTQ19NQVRSSVhf Q09FRkZfMih3Yl9pZCksCj4gPj4gKyAgICAgICAgICAgICBNRFA1X1dCX0NTQ19NQVRSSVhfQ09F RkZfMl9DT0VGRl8yMihtYXRyaXhbNF0pIHwKPiA+PiArICAgICAgICAgICAgIE1EUDVfV0JfQ1ND X01BVFJJWF9DT0VGRl8yX0NPRUZGXzIzKG1hdHJpeFs1XSkpOwo+ID4+ICsgICAgIG1kcDVfd3Jp dGUobWRwNV9rbXMsIFJFR19NRFA1X1dCX0NTQ19NQVRSSVhfQ09FRkZfMyh3Yl9pZCksCj4gPj4g KyAgICAgICAgICAgICBNRFA1X1dCX0NTQ19NQVRSSVhfQ09FRkZfM19DT0VGRl8zMShtYXRyaXhb Nl0pIHwKPiA+PiArICAgICAgICAgICAgIE1EUDVfV0JfQ1NDX01BVFJJWF9DT0VGRl8zX0NPRUZG XzMyKG1hdHJpeFs3XSkpOwo+ID4+ICsgICAgIG1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1 X1dCX0NTQ19NQVRSSVhfQ09FRkZfNCh3Yl9pZCksCj4gPj4gKyAgICAgICAgICAgICBNRFA1X1dC X0NTQ19NQVRSSVhfQ09FRkZfNF9DT0VGRl8zMyhtYXRyaXhbOF0pKTsKPiA+PiArCj4gPj4gKyAg ICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3NjLT5wcmVfYmlhcyk7IGkrKykgewo+ID4+ ICsgICAgICAgICAgICAgdWludDMyX3QgKnByZV9jbGFtcCA9IGNzYy0+cHJlX2NsYW1wOwo+ID4+ ICsgICAgICAgICAgICAgdWludDMyX3QgKnBvc3RfY2xhbXAgPSBjc2MtPnBvc3RfY2xhbXA7Cj4g Pj4gKwo+ID4+ICsgICAgICAgICAgICAgbWRwNV93cml0ZShtZHA1X2ttcywgUkVHX01EUDVfV0Jf Q1NDX0NPTVBfUFJFQ0xBTVAod2JfaWQsIGkpLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICBN RFA1X1dCX0NTQ19DT01QX1BSRUNMQU1QX1JFR19ISUdIKHByZV9jbGFtcFsyKmkrMV0pIHwKPiA+ PiArICAgICAgICAgICAgICAgICAgICAgTURQNV9XQl9DU0NfQ09NUF9QUkVDTEFNUF9SRUdfTE9X KHByZV9jbGFtcFsyKmldKSk7Cj4gPj4gKwo+ID4+ICsgICAgICAgICAgICAgbWRwNV93cml0ZSht ZHA1X2ttcywgUkVHX01EUDVfV0JfQ1NDX0NPTVBfUE9TVENMQU1QKHdiX2lkLCBpKSwKPiA+PiAr ICAgICAgICAgICAgICAgICAgICAgTURQNV9XQl9DU0NfQ09NUF9QT1NUQ0xBTVBfUkVHX0hJR0go cG9zdF9jbGFtcFsyKmkrMV0pIHwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgTURQNV9XQl9D U0NfQ09NUF9QT1NUQ0xBTVBfUkVHX0xPVyhwb3N0X2NsYW1wWzIqaV0pKTsKPiA+PiArCj4gPj4g KyAgICAgICAgICAgICBtZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9XQl9DU0NfQ09NUF9Q UkVCSUFTKHdiX2lkLCBpKSwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgTURQNV9XQl9DU0Nf Q09NUF9QUkVCSUFTX1JFR19WQUxVRShjc2MtPnByZV9iaWFzW2ldKSk7Cj4gPj4gKwo+ID4+ICsg ICAgICAgICAgICAgbWRwNV93cml0ZShtZHA1X2ttcywgUkVHX01EUDVfV0JfQ1NDX0NPTVBfUE9T VEJJQVMod2JfaWQsIGkpLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICBNRFA1X1dCX0NTQ19D T01QX1BPU1RCSUFTX1JFR19WQUxVRShjc2MtPnBvc3RfYmlhc1tpXSkpOwo+ID4+ICsgICAgIH0K PiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIHZvaWQKPiA+PiArbWRwNV93Yl9jb25uZWN0b3Jf YXRvbWljX2NvbW1pdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4+ICsgICAg ICAgICAgICAgc3RydWN0IGRybV93cml0ZWJhY2tfam9iICpqb2IpCj4gPj4gK3sKPiA+PiArICAg ICBzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2ID0gY29ubmVjdG9yLT5kZXYtPmRldl9wcml2 YXRlOwo+ID4+ICsgICAgIHN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMgPSB0b19tZHA1X2ttcyh0 b19tZHBfa21zKHByaXYtPmttcykpOwo+ID4+ICsgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0 YXRlICpjb25uX3N0YXRlID0gY29ubmVjdG9yLT5zdGF0ZTsKPiA+PiArICAgICBzdHJ1Y3QgZHJt X3dyaXRlYmFja19jb25uZWN0b3IgKndiX2Nvbm4gPSB0b193Yl9jb25uZWN0b3IoY29ubmVjdG9y KTsKPiA+PiArICAgICBzdHJ1Y3QgbWRwNV9jcnRjX3N0YXRlICptZHA1X2NydGNfc3RhdGUgPQo+ ID4+ICsgICAgICAgICAgICAgdG9fbWRwNV9jcnRjX3N0YXRlKHdiX2Nvbm4tPmVuY29kZXIuY3J0 Yy0+c3RhdGUpOwo+ID4+ICsgICAgIHN0cnVjdCBtZHA1X3diX2Nvbm5lY3RvciAqbWRwNV93YiA9 IHRvX21kcDVfd2JfY29ubmVjdG9yKHdiX2Nvbm4pOwo+ID4+ICsgICAgIHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiID0gam9iLT5mYjsKPiA+PiArICAgICBzdHJ1Y3QgZHJtX2Zvcm1hdF9uYW1l X2J1ZiBmb3JtYXRfbmFtZTsKPiA+PiArICAgICBjb25zdCBzdHJ1Y3QgbWRwX2Zvcm1hdCAqZm10 ID0KPiA+PiArICAgICAgICAgICAgIHRvX21kcF9mb3JtYXQobWRwX2dldF9mb3JtYXQocHJpdi0+ a21zLCBmYi0+Zm9ybWF0LT5mb3JtYXQpKTsKPiA+PiArICAgICB1MzIgeXN0cmlkZTAsIHlzdHJp ZGUxLCBvdXRzaXplOwo+ID4+ICsgICAgIHUzMiBkc3RfZm9ybWF0LCBwYXR0ZXJuLCBvcG1vZGUg PSAwOwo+ID4+ICsKPiA+PiArICAgICBEQkcoIndiWyV1XToga2ljayB3cml0ZWJhY2sgJXV4JXVA JXMiLCBtZHA1X3diLT5pZCwKPiA+PiArICAgICAgICAgICAgIGZiLT53aWR0aCwgZmItPmhlaWdo dCwKPiA+PiArICAgICAgICAgICAgIGRybV9nZXRfZm9ybWF0X25hbWUoZmItPmZvcm1hdC0+Zm9y bWF0LCAmZm9ybWF0X25hbWUpKTsKPiA+PiArCj4gPj4gKyAgICAgLyogcXVldWUgam9iIGJlZm9y ZSBhbnl0aGluZyB0aGF0IGNhbiB0cmlnZ2VyIGNvbXBsZXRpb24gaXJxICovCj4gPj4gKyAgICAg ZHJtX3dyaXRlYmFja19xdWV1ZV9qb2Iod2JfY29ubiwgam9iKTsKPiA+PiArICAgICBjb25uX3N0 YXRlLT53cml0ZWJhY2tfam9iID0gTlVMTDsKPiA+PiArCj4gPj4gKyAgICAgbWRwX2lycV9yZWdp c3RlcigmbWRwNV9rbXMtPmJhc2UsICZtZHA1X3diLT53Yl9kb25lKTsKPiA+PiArCj4gPj4gKyAg ICAgaWYgKE1EUF9GT1JNQVRfSVNfWVVWKGZtdCkpIHsKPiA+PiArICAgICAgICAgICAgIHdiX2Nz Y19zZXR1cChtZHA1X2ttcywgbWRwNV93Yi0+aWQsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAg IG1kcF9nZXRfZGVmYXVsdF9jc2NfY2ZnKENTQ19SR0IyWVVWKSk7Cj4gPj4gKwo+ID4+ICsgICAg ICAgICAgICAgb3Btb2RlIHw9IE1EUDVfV0JfRFNUX09QX01PREVfQ1NDX0VOIHwKPiA+PiArICAg ICAgICAgICAgICAgICAgICAgTURQNV9XQl9EU1RfT1BfTU9ERV9DU0NfU1JDX0RBVEFfRk9STUFU KERBVEFfRk9STUFUX1JHQikgfAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICBNRFA1X1dCX0RT VF9PUF9NT0RFX0NTQ19EU1RfREFUQV9GT1JNQVQoREFUQV9GT1JNQVRfWVVWKTsKPiA+PiArCj4g Pj4gKyAgICAgICAgICAgICBzd2l0Y2ggKGZtdC0+Y2hyb21hX3NhbXBsZSkgewo+ID4+ICsgICAg ICAgICAgICAgY2FzZSBDSFJPTUFfNDIwOgo+ID4+ICsgICAgICAgICAgICAgY2FzZSBDSFJPTUFf SDJWMToKPiA+PiArICAgICAgICAgICAgICAgICAgICAgb3Btb2RlIHw9IE1EUDVfV0JfRFNUX09Q X01PREVfQ0hST01BX0RXTl9TQU1QTEVfRU47Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwo+ID4+ICsgICAgICAgICAgICAgY2FzZSBDSFJPTUFfSDFWMjoKPiA+PiArICAgICAgICAg ICAgIGRlZmF1bHQ6Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgIFdBUk4oMSwgInVuc3VwcG9y dGVkIHdiIGNocm9tYSBzYW1wPSVkXG4iLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZtdC0+Y2hyb21hX3NhbXBsZSk7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVy bjsKPiA+PiArICAgICAgICAgICAgIH0KPiA+PiArICAgICB9Cj4gPj4gKwo+ID4+ICsgICAgIGRz dF9mb3JtYXQgPSBNRFA1X1dCX0RTVF9GT1JNQVRfRFNUX0NIUk9NQV9TQU1QKGZtdC0+Y2hyb21h X3NhbXBsZSkgfAo+ID4+ICsgICAgICAgICAgICAgTURQNV9XQl9EU1RfRk9STUFUX1dSSVRFX1BM QU5FUyhmbXQtPmZldGNoX3R5cGUpIHwKPiA+PiArICAgICAgICAgICAgIE1EUDVfV0JfRFNUX0ZP Uk1BVF9EU1RDM19PVVQoZm10LT5icGNfYSkgfAo+ID4+ICsgICAgICAgICAgICAgTURQNV9XQl9E U1RfRk9STUFUX0RTVEMyX09VVChmbXQtPmJwY19yKSB8Cj4gPj4gKyAgICAgICAgICAgICBNRFA1 X1dCX0RTVF9GT1JNQVRfRFNUQzFfT1VUKGZtdC0+YnBjX2IpIHwKPiA+PiArICAgICAgICAgICAg IE1EUDVfV0JfRFNUX0ZPUk1BVF9EU1RDMF9PVVQoZm10LT5icGNfZykgfAo+ID4+ICsgICAgICAg ICAgICAgQ09ORChmbXQtPnVucGFja190aWdodCwgTURQNV9XQl9EU1RfRk9STUFUX1BBQ0tfVElH SFQpIHwKPiA+PiArICAgICAgICAgICAgIE1EUDVfV0JfRFNUX0ZPUk1BVF9QQUNLX0NPVU5UKGZt dC0+dW5wYWNrX2NvdW50IC0gMSkgfAo+ID4+ICsgICAgICAgICAgICAgTURQNV9XQl9EU1RfRk9S TUFUX0RTVF9CUFAoZm10LT5jcHAgLSAxKTsKPiA+PiArCj4gPj4gKyAgICAgaWYgKGZtdC0+YnBj X2EgfHwgZm10LT5hbHBoYV9lbmFibGUpIHsKPiA+PiArICAgICAgICAgICAgIGRzdF9mb3JtYXQg fD0gTURQNV9XQl9EU1RfRk9STUFUX0RTVEMzX0VOOwo+ID4+ICsgICAgICAgICAgICAgaWYgKCFm bXQtPmFscGhhX2VuYWJsZSkKPiA+PiArICAgICAgICAgICAgICAgICAgICAgZHN0X2Zvcm1hdCB8 PSBNRFA1X1dCX0RTVF9GT1JNQVRfRFNUX0FMUEhBX1g7Cj4gPj4gKyAgICAgfQo+ID4+ICsKPiA+ PiArICAgICBwYXR0ZXJuID0gTURQNV9XQl9EU1RfUEFDS19QQVRURVJOX0VMRU1FTlQzKGZtdC0+ dW5wYWNrWzNdKSB8Cj4gPj4gKyAgICAgICAgICAgICBNRFA1X1dCX0RTVF9QQUNLX1BBVFRFUk5f RUxFTUVOVDIoZm10LT51bnBhY2tbMl0pIHwKPiA+PiArICAgICAgICAgICAgIE1EUDVfV0JfRFNU X1BBQ0tfUEFUVEVSTl9FTEVNRU5UMShmbXQtPnVucGFja1sxXSkgfAo+ID4+ICsgICAgICAgICAg ICAgTURQNV9XQl9EU1RfUEFDS19QQVRURVJOX0VMRU1FTlQwKGZtdC0+dW5wYWNrWzBdKTsKPiA+ PiArCj4gPj4gKyAgICAgeXN0cmlkZTAgPSBNRFA1X1dCX0RTVF9ZU1RSSURFMF9EU1QwX1lTVFJJ REUoZmItPnBpdGNoZXNbMF0pIHwKPiA+PiArICAgICAgICAgICAgIE1EUDVfV0JfRFNUX1lTVFJJ REUwX0RTVDFfWVNUUklERShmYi0+cGl0Y2hlc1sxXSk7Cj4gPj4gKyAgICAgeXN0cmlkZTEgPSBN RFA1X1dCX0RTVF9ZU1RSSURFMV9EU1QyX1lTVFJJREUoZmItPnBpdGNoZXNbMl0pIHwKPiA+PiAr ICAgICAgICAgICAgIE1EUDVfV0JfRFNUX1lTVFJJREUxX0RTVDNfWVNUUklERShmYi0+cGl0Y2hl c1szXSk7Cj4gPj4gKwo+ID4+ICsgICAgIC8qIGdldCB0aGUgb3V0cHV0IHJlc29sdXRpb24gZnJv bSBXQiBkZXZpY2UgKi8KPiA+PiArICAgICBvdXRzaXplID0gTURQNV9XQl9PVVRfU0laRV9EU1Rf SChmYi0+aGVpZ2h0KSB8Cj4gPj4gKyAgICAgICAgICAgICBNRFA1X1dCX09VVF9TSVpFX0RTVF9X KGZiLT53aWR0aCk7Cj4gPj4gKwo+ID4+ICsgICAgIG1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19N RFA1X1dCX0FMUEhBX1hfVkFMVUUobWRwNV93Yi0+aWQpLCAweGZmKTsKPiA+PiArICAgICBtZHA1 X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9XQl9EU1RfRk9STUFUKG1kcDVfd2ItPmlkKSwgZHN0 X2Zvcm1hdCk7Cj4gPj4gKyAgICAgbWRwNV93cml0ZShtZHA1X2ttcywgUkVHX01EUDVfV0JfRFNU X09QX01PREUobWRwNV93Yi0+aWQpLCBvcG1vZGUpOwo+ID4+ICsgICAgIG1kcDVfd3JpdGUobWRw NV9rbXMsIFJFR19NRFA1X1dCX0RTVF9QQUNLX1BBVFRFUk4obWRwNV93Yi0+aWQpLCBwYXR0ZXJu KTsKPiA+PiArICAgICBtZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9XQl9EU1RfWVNUUklE RTAobWRwNV93Yi0+aWQpLCB5c3RyaWRlMCk7Cj4gPj4gKyAgICAgbWRwNV93cml0ZShtZHA1X2tt cywgUkVHX01EUDVfV0JfRFNUX1lTVFJJREUxKG1kcDVfd2ItPmlkKSwgeXN0cmlkZTEpOwo+ID4+ ICsgICAgIG1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X1dCX09VVF9TSVpFKG1kcDVfd2It PmlkKSwgb3V0c2l6ZSk7Cj4gPj4gKwo+ID4+ICsgICAgIG1kcDVfY3J0Y19zZXRfcGlwZWxpbmUo d2JfY29ubi0+ZW5jb2Rlci5jcnRjKTsKPiA+PiArCj4gPj4gKyAgICAgbWRwNV93cml0ZShtZHA1 X2ttcywgUkVHX01EUDVfV0JfRFNUMF9BRERSKG1kcDVfd2ItPmlkKSwKPiA+PiArICAgICAgICAg ICAgIG1zbV9mcmFtZWJ1ZmZlcl9pb3ZhKGZiLCBwcml2LT5rbXMtPmFzcGFjZSwgMCkpOwo+ID4+ ICsgICAgIG1kcDVfd3JpdGUobWRwNV9rbXMsIFJFR19NRFA1X1dCX0RTVDFfQUREUihtZHA1X3di LT5pZCksCj4gPj4gKyAgICAgICAgICAgICBtc21fZnJhbWVidWZmZXJfaW92YShmYiwgcHJpdi0+ a21zLT5hc3BhY2UsIDEpKTsKPiA+PiArICAgICBtZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQ NV9XQl9EU1QyX0FERFIobWRwNV93Yi0+aWQpLAo+ID4+ICsgICAgICAgICAgICAgbXNtX2ZyYW1l YnVmZmVyX2lvdmEoZmIsIHByaXYtPmttcy0+YXNwYWNlLCAyKSk7Cj4gPj4gKyAgICAgbWRwNV93 cml0ZShtZHA1X2ttcywgUkVHX01EUDVfV0JfRFNUM19BRERSKG1kcDVfd2ItPmlkKSwKPiA+PiAr ICAgICAgICAgICAgIG1zbV9mcmFtZWJ1ZmZlcl9pb3ZhKGZiLCBwcml2LT5rbXMtPmFzcGFjZSwg MykpOwo+ID4+ICsKPiA+PiArICAgICAvKiBOb3RpZnkgY3RsIHRoYXQgd2IgYnVmZmVyIGlzIHJl YWR5IHRvIHRyaWdnZXIgc3RhcnQgKi8KPiA+PiArICAgICBtZHA1X2N0bF9jb21taXQobWRwNV93 Yi0+Y3RsLCAmbWRwNV9jcnRjX3N0YXRlLT5waXBlbGluZSwKPiA+PiArICAgICAgICAgICAgIE1E UDVfQ1RMX0ZMVVNIX1dCLCB0cnVlKTsKPiA+PiArCj4gPj4gKyAgICAgbWRwNV9jdGxfc2V0X2Vu Y29kZXJfc3RhdGUobWRwNV93Yi0+Y3RsLAo+ID4+ICsgICAgICAgICAgICAgJm1kcDVfY3J0Y19z dGF0ZS0+cGlwZWxpbmUsIHRydWUpOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgdm9pZCBt ZHA1X3diX2RvbmVfaXJxKHN0cnVjdCBtZHBfaXJxICppcnEsIHVpbnQzMl90IGlycXN0YXR1cykK PiA+PiArewo+ID4+ICsgICAgIHN0cnVjdCBtZHA1X3diX2Nvbm5lY3RvciAqbWRwNV93YiA9Cj4g Pj4gKyAgICAgICAgICAgICBjb250YWluZXJfb2YoaXJxLCBzdHJ1Y3QgbWRwNV93Yl9jb25uZWN0 b3IsIHdiX2RvbmUpOwo+ID4+ICsgICAgIHN0cnVjdCBtZHA1X2NydGNfc3RhdGUgKm1kcDVfY3J0 Y19zdGF0ZSA9Cj4gPj4gKyAgICAgICAgICAgICB0b19tZHA1X2NydGNfc3RhdGUobWRwNV93Yi0+ YmFzZS5lbmNvZGVyLmNydGMtPnN0YXRlKTsKPiA+PiArICAgICBzdHJ1Y3QgbXNtX2RybV9wcml2 YXRlICpwcml2ID0gbWRwNV93Yi0+YmFzZS5iYXNlLmRldi0+ZGV2X3ByaXZhdGU7Cj4gPj4gKwo+ ID4+ICsgICAgIG1kcF9pcnFfdW5yZWdpc3Rlcih0b19tZHBfa21zKHByaXYtPmttcyksICZtZHA1 X3diLT53Yl9kb25lKTsKPiA+PiArCj4gPj4gKyAgICAgbWRwNV9jdGxfc2V0X2VuY29kZXJfc3Rh dGUobWRwNV93Yi0+Y3RsLAo+ID4+ICsgICAgICAgICAgICAgJm1kcDVfY3J0Y19zdGF0ZS0+cGlw ZWxpbmUsIGZhbHNlKTsKPiA+PiArCj4gPj4gKyAgICAgZHJtX3dyaXRlYmFja19zaWduYWxfY29t cGxldGlvbigmbWRwNV93Yi0+YmFzZSwgMCk7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIG1kcDVfd2JfZW5jb2Rlcl9oZWxw ZXJfZnVuY3MgPSB7Cj4gPj4gKyAgICAgLmF0b21pY19jaGVjayA9IG1kcDVfd2JfZW5jb2Rlcl9h dG9taWNfY2hlY2ssCj4gPj4gK307Cj4gPj4gKwo+ID4+ICtzdHJ1Y3QgZHJtX3dyaXRlYmFja19j b25uZWN0b3IgKgo+ID4+ICttZHA1X3diX2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHN0cnVjdCBtZHA1X2N0bCAqY3RsLAo+ID4+ICsgICAgICAgICAgICAgdW5zaWduZWQg d2JfaWQpCj4gPj4gK3sKPiA+PiArICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y ID0gTlVMTDsKPiA+PiArICAgICBzdHJ1Y3QgbWRwNV93Yl9jb25uZWN0b3IgKm1kcDVfd2I7Cj4g Pj4gKwo+ID4+ICsgICAgIG1kcDVfd2IgPSBremFsbG9jKHNpemVvZigqbWRwNV93YiksIEdGUF9L RVJORUwpOwo+ID4+ICsgICAgIGlmICghbWRwNV93YikKPiA+PiArICAgICAgICAgICAgIHJldHVy biBFUlJfUFRSKC1FTk9NRU0pOwo+ID4+ICsKPiA+PiArICAgICBtZHA1X3diLT5pZCA9IHdiX2lk Owo+ID4+ICsgICAgIG1kcDVfd2ItPmN0bCA9IGN0bDsKPiA+PiArCj4gPj4gKyAgICAgLyogY29u c3RydWN0IGEgZHVtbXkgaW50ZiBmb3IgV0I6ICovCj4gPj4gKy8vIFRPRE8gdW4taW5saW5lIHRo aXMgKGFuZCBhbHNvIGluIGludGVyZmFjZV9pbml0KCkpCj4gPj4gKyAgICAgbWRwNV93Yi0+aW50 ZiA9IGt6YWxsb2Moc2l6ZW9mKCptZHA1X3diLT5pbnRmKSwgR0ZQX0tFUk5FTCk7Cj4gPj4gKyAg ICAgbWRwNV93Yi0+aW50Zi0+bnVtID0gLTE7Cj4gPj4gKyAgICAgbWRwNV93Yi0+aW50Zi0+dHlw ZSA9IElOVEZfV0I7Cj4gPj4gKyAgICAgbWRwNV93Yi0+aW50Zi0+bW9kZSA9IE1EUDVfSU5URl9X Ql9NT0RFX0xJTkU7Cj4gPj4gKyAgICAgbWRwNV93Yi0+aW50Zi0+aWR4ID0gLTE7Cj4gPj4gKwo+ ID4+ICsgICAgIG1kcDVfd2ItPndiX2RvbmUuaXJxID0gbWRwNV93Yl9kb25lX2lycTsKPiA+PiAr Ly8gVE9ETyBqdXN0IHJlZ2lzdGVyIGZvciBhbGwgd2IgaXJxJ3MgdW50aWwgSSBmaWd1cmUgb3V0 IHRoZSBtYXBwaW5nLi4KPiA+PiArICAgICBtZHA1X3diLT53Yl9kb25lLmlycW1hc2sgPSBNRFA1 X0lSUV9XQl8wX0RPTkUgfCBNRFA1X0lSUV9XQl8xX0RPTkUgfCBNRFA1X0lSUV9XQl8yX0RPTkU7 Cj4gPj4gKwo+ID4+ICsgICAgIGNvbm5lY3RvciA9ICZtZHA1X3diLT5iYXNlLmJhc2U7Cj4gPj4g Kwo+ID4+ICsgICAgIGRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZtZHA1X3di X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwo+ID4+ICsKPiA+PiArICAgICBtZHA1X3diLT5uZm9y bWF0cyA9IG1kcF9nZXRfZm9ybWF0cyhtZHA1X3diLT5mb3JtYXRzLAo+ID4+ICsgICAgICAgICAg ICAgQVJSQVlfU0laRShtZHA1X3diLT5mb3JtYXRzKSwgZmFsc2UpOwo+ID4+ICsKPiA+PiArICAg ICBkcm1fd3JpdGViYWNrX2Nvbm5lY3Rvcl9pbml0KGRldiwKPiA+PiArICAgICAgICAgICAgICZt ZHA1X3diLT5iYXNlLAo+ID4+ICsgICAgICAgICAgICAgJm1kcDVfd2JfY29ubmVjdG9yX2Z1bmNz LAo+ID4+ICsgICAgICAgICAgICAgJm1kcDVfd2JfZW5jb2Rlcl9oZWxwZXJfZnVuY3MsCj4gPj4g KyAgICAgICAgICAgICBtZHA1X3diLT5mb3JtYXRzLAo+ID4+ICsgICAgICAgICAgICAgbWRwNV93 Yi0+bmZvcm1hdHMpOwo+ID4+ICsKPiA+PiArICAgICBjb25uZWN0b3ItPmludGVybGFjZV9hbGxv d2VkID0gMDsKPiA+PiArICAgICBjb25uZWN0b3ItPmRvdWJsZXNjYW5fYWxsb3dlZCA9IDA7Cj4g Pgo+ID4gVGhlc2UgYXJlIGhhbmRsZWQgYnkgZHJtX3dyaXRlYmFja19jb25uZWN0b3JfaW5pdCAo YW5kIGt6YWxsb2MpCj4gCj4gaG1tLCBub3QgZG91Ymxlc2Nhbl9hbGxvd2VkLCBhbHRob3VnaCBw ZXJoYXBzIGl0IHNob3VsZCBiZS4KClllYWgsIHByb2JhYmx5LiBremFsbG9jIHByb2JhYmx5IGNv dmVycyB1cyBlaXRoZXIgd2F5LgoKU2VhbgoKPiAKPiBCUiwKPiAtUgo+IAo+ID4KPiA+PiArCj4g Pj4gKyAgICAgcmV0dXJuICZtZHA1X3diLT5iYXNlOwo+ID4+ICt9Cj4gPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL2RzaV9ob3N0LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS9kc2lfaG9zdC5jCj4gPj4gaW5kZXggN2EwM2E5NDg5NzA4Li40MjJmNTI0Zjc1NjIgMTAw NjQ0Cj4gPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvZHNpX2hvc3QuYwo+ID4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL2RzaV9ob3N0LmMKPiA+PiBAQCAtNzQxLDcgKzc0 MSw3IEBAIHN0YXRpYyB2b2lkIGRzaV9pbnRyX2N0cmwoc3RydWN0IG1zbV9kc2lfaG9zdCAqbXNt X2hvc3QsIHUzMiBtYXNrLCBpbnQgZW5hYmxlKQo+ID4+ICAgICAgIGVsc2UKPiA+PiAgICAgICAg ICAgICAgIGludHIgJj0gfm1hc2s7Cj4gPj4KPiA+PiAtICAgICBEQkcoImludHI9JXggZW5hYmxl PSVkIiwgaW50ciwgZW5hYmxlKTsKPiA+PiArICAgICBWRVJCKCJpbnRyPSV4IGVuYWJsZT0lZCIs IGludHIsIGVuYWJsZSk7Cj4gPj4KPiA+PiAgICAgICBkc2lfd3JpdGUobXNtX2hvc3QsIFJFR19E U0lfSU5UUl9DVFJMLCBpbnRyKTsKPiA+PiAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZt c21faG9zdC0+aW50cl9sb2NrLCBmbGFncyk7Cj4gPj4gQEAgLTE0NjUsNyArMTQ2NSw3IEBAIHN0 YXRpYyBpcnFyZXR1cm5fdCBkc2lfaG9zdF9pcnEoaW50IGlycSwgdm9pZCAqcHRyKQo+ID4+ICAg ICAgIGRzaV93cml0ZShtc21faG9zdCwgUkVHX0RTSV9JTlRSX0NUUkwsIGlzcik7Cj4gPj4gICAg ICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtX2hvc3QtPmludHJfbG9jaywgZmxhZ3MpOwo+ ID4+Cj4gPj4gLSAgICAgREJHKCJpc3I9MHgleCwgaWQ9JWQiLCBpc3IsIG1zbV9ob3N0LT5pZCk7 Cj4gPj4gKyAgICAgVkVSQigiaXNyPTB4JXgsIGlkPSVkIiwgaXNyLCBtc21faG9zdC0+aWQpOwo+ ID4+Cj4gPj4gICAgICAgaWYgKGlzciAmIERTSV9JUlFfRVJST1IpCj4gPj4gICAgICAgICAgICAg ICBkc2lfZXJyb3IobXNtX2hvc3QpOwo+ID4+IC0tCj4gPj4gMi4xNC4zCj4gPj4KPiA+Cj4gPiAt LQo+ID4gU2VhbiBQYXVsLCBTb2Z0d2FyZSBFbmdpbmVlciwgR29vZ2xlIC8gQ2hyb21pdW0gT1MK Ci0tIApTZWFuIFBhdWwsIFNvZnR3YXJlIEVuZ2luZWVyLCBHb29nbGUgLyBDaHJvbWl1bSBPUwpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8g bWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K