From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 09/13] drm/i915: Interrupt driven fences Date: Fri, 11 Dec 2015 16:07:22 +0000 Message-ID: <566AF4BA.9070108@linux.intel.com> References: <1449839521-21958-1-git-send-email-John.C.Harrison@Intel.com> <1449839521-21958-10-git-send-email-John.C.Harrison@Intel.com> <566AEC1F.7040701@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 387F36E4F9 for ; Fri, 11 Dec 2015 08:08:31 -0800 (PST) In-Reply-To: <566AEC1F.7040701@Intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: John Harrison , Intel-GFX@Lists.FreeDesktop.Org List-Id: intel-gfx@lists.freedesktop.org CgpPbiAxMS8xMi8xNSAxNTozMCwgSm9obiBIYXJyaXNvbiB3cm90ZToKPiBSZXBseSBtb3ZlZCBm cm9tIGVhcmxpZXIgcGF0Y2ggc2V0IHdoaWNoIGhhcyBub3cgYmVlbiBzdXBlcmNlZWRlZCBieQo+ IHRoaXMgc2V0Li4uCj4KPiBPbiAxMS8xMi8yMDE1IDEyOjE3LCBUdnJ0a28gVXJzdWxpbiB3cm90 ZToKPj4KPj4gSGksCj4+Cj4+IFNvbWUgcmFuZG9tIGNvbW1lbnRzLCBtb3N0bHkgZnJvbSB0aGUg cG9pbnQgb2YgdmlldyBvZiBzb2x2aW5nIHRoZQo+PiB0aHVuZGVyaW5nIGhlcmQgcHJvYmxlbS4K Pj4KPj4gT24gMjMvMTEvMTUgMTE6MzQsIEpvaG4uQy5IYXJyaXNvbkBJbnRlbC5jb20gd3JvdGU6 Cj4+PiBGcm9tOiBKb2huIEhhcnJpc29uIDxKb2huLkMuSGFycmlzb25ASW50ZWwuY29tPgo+Pj4K Pj4+IFRoZSBpbnRlbmRlZCB1c2FnZSBtb2RlbCBmb3Igc3RydWN0IGZlbmNlIGlzIHRoYXQgdGhl IHNpZ25hbGxlZCBzdGF0dXMKPj4+IHNob3VsZCBiZSBzZXQgb24gZGVtYW5kIHJhdGhlciB0aGFu IHBvbGxlZC4gVGhhdCBpcywgdGhlcmUgc2hvdWxkIG5vdAo+Pj4gYmUgYSBuZWVkIGZvciBhICdz aWduYWxlZCcgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGV2ZXJ5dGltZSB0aGUgc3RhdHVzCj4+PiBp cyBxdWVyaWVkLiBJbnN0ZWFkLCAnc29tZXRoaW5nJyBzaG91bGQgYmUgZG9uZSB0byBlbmFibGUg YSBzaWduYWwKPj4+IGNhbGxiYWNrIGZyb20gdGhlIGhhcmR3YXJlIHdoaWNoIHdpbGwgdXBkYXRl IHRoZSBzdGF0ZSBkaXJlY3RseS4gSW4KPj4+IHRoZSBjYXNlIG9mIHJlcXVlc3RzLCB0aGlzIGlz IHRoZSBzZXFubyB1cGRhdGUgaW50ZXJydXB0LiBUaGUgaWRlYSBpcwo+Pj4gdGhhdCB0aGlzIGNh bGxiYWNrIHdpbGwgb25seSBiZSBlbmFibGVkIG9uIGRlbWFuZCB3aGVuIHNvbWV0aGluZwo+Pj4g YWN0dWFsbHkgdHJpZXMgdG8gd2FpdCBvbiB0aGUgZmVuY2UuCj4+Pgo+Pj4gVGhpcyBjaGFuZ2Ug cmVtb3ZlcyB0aGUgcG9sbGluZyB0ZXN0IGFuZCByZXBsYWNlcyBpdCB3aXRoIHRoZSBjYWxsYmFj awo+Pj4gc2NoZW1lLiBFYWNoIGZlbmNlIGlzIGFkZGVkIHRvIGEgJ3BsZWFzZSBwb2tlIG1lJyBs aXN0IGF0IHRoZSBzdGFydCBvZgo+Pj4gaTkxNV9hZGRfcmVxdWVzdCgpLiBUaGUgaW50ZXJydXB0 IGhhbmRsZXIgdGhlbiBzY2FucyB0aHJvdWdoIHRoZSAncG9rZQo+Pj4gbWUnIGxpc3Qgd2hlbiBh IG5ldyBzZXFubyBwb3BzIG91dCBhbmQgc2lnbmFscyBhbnkgbWF0Y2hpbmcKPj4+IGZlbmNlL3Jl cXVlc3QuIFRoZSBmZW5jZSBpcyB0aGVuIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBzbyB0aGUgZW50 aXJlCj4+PiByZXF1ZXN0IHN0YWNrIGRvZXMgbm90IG5lZWQgdG8gYmUgc2Nhbm5lZCBldmVyeSB0 aW1lLiBOb3RlIHRoYXQgdGhlCj4+PiBmZW5jZSBpcyBhZGRlZCB0byB0aGUgbGlzdCBiZWZvcmUg dGhlIGNvbW1hbmRzIHRvIGdlbmVyYXRlIHRoZSBzZXFubwo+Pj4gaW50ZXJydXB0IGFyZSBhZGRl ZCB0byB0aGUgcmluZy4gVGh1cyB0aGUgc2VxdWVuY2UgaXMgZ3VhcmFudGVlZCB0byBiZQo+Pj4g cmFjZSBmcmVlIGlmIHRoZSBpbnRlcnJ1cHQgaXMgYWxyZWFkeSBlbmFibGVkLgo+Pj4KPj4+IE5v dGUgdGhhdCB0aGUgaW50ZXJydXB0IGlzIG9ubHkgZW5hYmxlZCBvbiBkZW1hbmQgKGkuZS4gd2hl bgo+Pj4gX193YWl0X3JlcXVlc3QoKSBpcyBjYWxsZWQpLiBUaHVzIHRoZXJlIGlzIHN0aWxsIGEg cG90ZW50aWFsIHJhY2Ugd2hlbgo+Pj4gZW5hYmxpbmcgdGhlIGludGVycnVwdCBhcyB0aGUgcmVx dWVzdCBtYXkgYWxyZWFkeSBoYXZlIGNvbXBsZXRlZC4KPj4+IEhvd2V2ZXIsIHRoaXMgaXMgc2lt cGx5IHNvbHZlZCBieSBjYWxsaW5nIHRoZSBpbnRlcnJ1cHQgcHJvY2Vzc2luZwo+Pj4gY29kZSBp bW1lZGlhdGVseSBhZnRlciBlbmFibGluZyB0aGUgaW50ZXJydXB0IGFuZCB0aGVyZWJ5IGNoZWNr aW5nIGZvcgo+Pj4gYWxyZWFkeSBjb21wbGV0ZWQgcmVxdWVzdHMuCj4+Pgo+Pj4gTGFzdGx5LCB0 aGUgcmluZyBjbGVhbiB1cCBjb2RlIGhhcyB0aGUgcG9zc2liaWxpdHkgdG8gY2FuY2VsCj4+PiBv dXRzdGFuZGluZyByZXF1ZXN0cyAoZS5nLiBiZWNhdXNlIFREUiBoYXMgcmVzZXQgdGhlIHJpbmcp LiBUaGVzZQo+Pj4gcmVxdWVzdHMgd2lsbCBuZXZlciBnZXQgc2lnbmFsbGVkIGFuZCBzbyBtdXN0 IGJlIHJlbW92ZWQgZnJvbSB0aGUKPj4+IHNpZ25hbCBsaXN0IG1hbnVhbGx5LiBUaGlzIGlzIGRv bmUgYnkgc2V0dGluZyBhICdjYW5jZWxsZWQnIGZsYWcgYW5kCj4+PiB0aGVuIGNhbGxpbmcgdGhl IHJlZ3VsYXIgbm90aWZ5L3JldGlyZSBjb2RlIHBhdGggcmF0aGVyIHRoYW4KPj4+IGF0dGVtcHRp bmcgdG8gZHVwbGljYXRlIHRoZSBsaXN0IG1hbmlwdWxhdGF0aW9uIGFuZCBjbGVhbiB1cCBjb2Rl IGluCj4+PiBtdWx0aXBsZSBwbGFjZXMuIFRoaXMgYWxzbyBhdm9pZCBhbnkgcmFjZSBjb25kaXRp b24gd2hlcmUgdGhlCj4+PiBjYW5jZWxsYXRpb24gcmVxdWVzdCBtaWdodCBvY2N1ciBhZnRlci9k dXJpbmcgdGhlIGNvbXBsZXRpb24gaW50ZXJydXB0Cj4+PiBhY3R1YWxseSBhcnJpdmluZy4KPj4+ Cj4+PiB2MjogVXBkYXRlZCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgcmVxdWVzdCB1bnJlZmVy ZW5jZSBubyBsb25nZXIKPj4+IHJlcXVpcmluZyB0aGUgbXV0ZXggbG9jay4KPj4+Cj4+PiB2Mzog TW92ZSB0aGUgc2lnbmFsIGxpc3QgcHJvY2Vzc2luZyBhcm91bmQgdG8gcHJldmVudCB1bnN1Ym1p dHRlZAo+Pj4gcmVxdWVzdHMgYmVpbmcgYWRkZWQgdG8gdGhlIGxpc3QuIFRoaXMgd2FzIG9jY3Vy cmluZyBvbiBBbmRyb2lkCj4+PiBiZWNhdXNlIHRoZSBuYXRpdmUgc3luYyBpbXBsZW1lbnRhdGlv biBjYWxscyB0aGUKPj4+IGZlbmNlLT5lbmFibGVfc2lnbmFsbGluZyBBUEkgaW1tZWRpYXRlbHkg b24gZmVuY2UgY3JlYXRpb24uCj4+Pgo+Pj4gVXBkYXRlZCBhZnRlciByZXZpZXcgY29tbWVudHMg YnkgVHZydGtvIFVyc3VsaW4uIFJlbmFtZWQgbGlzdCBub2RlcyB0bwo+Pj4gJ2xpbmsnIGluc3Rl YWQgb2YgJ2xpc3QnLiBBZGRlZCBzdXBwb3J0IGZvciByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSBv bgo+Pj4gYSBjYW5jZWxsZWQgZmVuY2UuIFVwZGF0ZSBsaXN0IHByb2Nlc3NpbmcgdG8gYmUgbW9y ZSBlZmZpY2llbnQvc2FmZXIKPj4+IHdpdGggcmVzcGVjdCB0byBzcGlubG9ja3MuCj4+Pgo+Pj4g Rm9yOiBWSVotNTE5MAo+Pj4gU2lnbmVkLW9mZi1ieTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhh cnJpc29uQEludGVsLmNvbT4KPj4+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5A aW50ZWwuY29tPgo+Pj4gLS0tCj4+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2Lmgg ICAgICAgICB8ICAxMCArKwo+Pj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAg ICAgICAgfCAxODcKPj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCj4+PiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgICAgICAgICB8ICAgMiArCj4+PiAgIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jICAgICAgICB8ICAgMiArCj4+PiAgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyB8ICAgMiArCj4+PiAgIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCB8ICAgMiArCj4+PiAgIDYgZmlsZXMgY2hhbmdl ZCwgMTk2IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCj4+Pgo+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaAo+Pj4gaW5kZXggZmJmNTkxZi4uZDAxM2M2ZCAxMDA2NDQKPj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKPj4+IEBAIC0yMTg3LDcgKzIxODcsMTIgQEAgdm9pZCBpOTE1X2dl bV90cmFja19mYihzdHJ1Y3QKPj4+IGRybV9pOTE1X2dlbV9vYmplY3QgKm9sZCwKPj4+ICAgc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0IHsKPj4+ICAgICAgIC8qKiBVbmRlcmx5aW5nIG9iamVj dCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzaWduYWwvd2FpdCBzdHVmZi4gKi8KPj4+ICAgICAgIHN0 cnVjdCBmZW5jZSBmZW5jZTsKPj4+ICsgICAgc3RydWN0IGxpc3RfaGVhZCBzaWduYWxfbGluazsK Pj4+ICsgICAgc3RydWN0IGxpc3RfaGVhZCB1bnNpZ25hbF9saW5rOwo+Pj4gICAgICAgc3RydWN0 IGxpc3RfaGVhZCBkZWxheWVkX2ZyZWVfbGluazsKPj4+ICsgICAgYm9vbCBjYW5jZWxsZWQ7Cj4+ PiArICAgIGJvb2wgaXJxX2VuYWJsZWQ7Cj4+PiArICAgIGJvb2wgc2lnbmFsX3JlcXVlc3RlZDsK Pj4+Cj4+PiAgICAgICAvKiogT24gV2hpY2ggcmluZyB0aGlzIHJlcXVlc3Qgd2FzIGdlbmVyYXRl ZCAqLwo+Pj4gICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4+PiBAQCAtMjI2 NSw2ICsyMjcwLDExIEBAIGludCBpOTE1X2dlbV9yZXF1ZXN0X2FsbG9jKHN0cnVjdAo+Pj4gaW50 ZWxfZW5naW5lX2NzICpyaW5nLAo+Pj4gICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKipyZXFfb3V0KTsKPj4+ICAgdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X2NhbmNl bChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSk7Cj4+Pgo+Pj4gK3ZvaWQgaTkxNV9n ZW1fcmVxdWVzdF9zdWJtaXQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpOwo+Pj4g K3ZvaWQgaTkxNV9nZW1fcmVxdWVzdF9lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdAo+Pj4gKnJlcSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmVu Y2VfbG9ja2VkKTsKPj4+ICt2b2lkIGk5MTVfZ2VtX3JlcXVlc3Rfbm90aWZ5KHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnJpbmcsIGJvb2wKPj4+IGZlbmNlX2xvY2tlZCk7Cj4+PiArCj4+PiAgIGlu dCBpOTE1X2NyZWF0ZV9mZW5jZV90aW1lbGluZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+Pj4g ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCwKPj4+ICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwo+Pj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPj4+IGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYwo+Pj4gaW5kZXggMTcxYWU1Zi4uMmEwYjM0NiAxMDA2NDQKPj4+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPj4+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPj4+IEBAIC0xMTY1LDYgKzExNjUsOCBAQCBzdGF0aWMg aW50IF9faTkxNV9zcGluX3JlcXVlc3Qoc3RydWN0Cj4+PiBkcm1faTkxNV9nZW1fcmVxdWVzdCAq cmVxKQo+Pj4KPj4+ICAgICAgIHRpbWVvdXQgPSBqaWZmaWVzICsgMTsKPj4+ICAgICAgIHdoaWxl ICghbmVlZF9yZXNjaGVkKCkpIHsKPj4+ICsgICAgICAgIGk5MTVfZ2VtX3JlcXVlc3Rfbm90aWZ5 KHJlcS0+cmluZywgZmFsc2UpOwo+Pj4gKwo+Pgo+PiBUaGlzIGxvb2tzIGlzIGEgYml0IGhlYXZ5 d2VpZ2h0LCBoYW1tZXJpbmcgb24gdGhlIHNwaW5sb2NrIGFuZAo+PiBpbnRlcnJ1cHRzIG9uLW9m Ziwgd2h5IGl0IGlzIHJlcXVpcmVkIHRvIGNhbGwgdGhpcyBoZXJlIGluc3RlYWQgb2YKPj4gcmVs eWluZyBvbiBpbnRlcnJ1cHRzIHdoaWNoIGhhdmUgYmVlbiBlbmFibGVkIGFscmVhZHk/Cj4KPiBJ dCBpc24ndCByZXF1aXJlZC4gSXQgd2FzIGlzIGp1c3QgYW4gYXR0ZW1wdCB0byBpbXBsZW1lbnQg dGhlIHN1cGVyLWZhc3QKPiBzcGluIHdhaXQgcmF0aGVyIHRoYW4gd2FpdGluZyBmb3IgdGhlIGZ1 bGwgaW50ZXJydXB0IGxhdGVuY3kuIENocmlzIFcKPiBzZWVtcyB0byB0aGluayBwb2xsaW5nIGZv ciBjb21wbGV0aW9uIGZvciBhIGJyaWVmIHBlcmlvZCBiZWZvcmUgZ29pbmcgdG8KPiBzbGVlcCBp cyBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LiBXaXRoIGludGVycnVwdCBi YXNlZAo+IGNvbXBsZXRpb24gdGhlbiB0aGUgc3BpbiB3aWxsIHJlcXVpcmUgcnVubmluZyB0aGUg aW50ZXJydXB0IHByb2Nlc3NpbmcKPiBjb2RlIG9uIGVhY2ggaXRlcmF0aW9uIG90aGVyd2lzZSB5 b3UgYXJlIHN0aWxsIHdhaXRpbmcgZm9yIHdoYXRldmVyCj4gbGF0ZW5jeSBpcyBpbiB0aGUgaW50 ZXJydXB0IHBhdGggaXRzZWxmLgoKSXQgaXMgZmluZSB0byBiZSByZW1vdmVkIHRoZW4gSSB0aGlu ay4gUHJpbWFyeSB0aGluZyB3aXRoIGJ1c3kgd2FpdHMgaXMgCnRvIGF2b2lkIHNldHVwIGNvc3Qg b2YgdHVybmluZyBvbiBpbnRlcnJ1cHRzIGFuZCBzY2hlZHVsaW5nIGxhdGVuY3kgb2YgCnB1dHRp bmcgdGhlIHdhaXRlciB0byBzbGVlcC4KCllvdXIgY29kZSBhbHJlYWR5IGVuYWJsZWQgdXNlciBp bnRlcnJ1cHRzIGJlZm9yZSB0aGUgYnVzeSB3YWl0IHNvIHlvdSAKY2FuIHNwaW4gb24gaTkxNV9n ZW1fcmVxdWVzdF9jb21wbGV0ZWQgd2hpY2ggd2lsbCBnZXQgc2lnbmFsZWQgZnJvbSB0aGUgCmly cSBoYW5kbGVyIHdpdGggbGl0dGxlIGNvc3QuCgo+Pgo+Pj4gICAgICAgICAgIGlmIChpOTE1X2dl bV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEpKQo+Pj4gICAgICAgICAgICAgICByZXR1cm4gMDsKPj4+ Cj4+PiBAQCAtMTE3Myw2ICsxMTc1LDkgQEAgc3RhdGljIGludCBfX2k5MTVfc3Bpbl9yZXF1ZXN0 KHN0cnVjdAo+Pj4gZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPj4+Cj4+PiAgICAgICAgICAg Y3B1X3JlbGF4X2xvd2xhdGVuY3koKTsKPj4+ICAgICAgIH0KPj4+ICsKPj4+ICsgICAgaTkxNV9n ZW1fcmVxdWVzdF9ub3RpZnkocmVxLT5yaW5nLCBmYWxzZSk7Cj4+PiArCj4+PiAgICAgICBpZiAo aTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxKSkKPj4+ICAgICAgICAgICByZXR1cm4gMDsK Pj4+Cj4+PiBAQCAtMTIxNCw5ICsxMjE5LDE0IEBAIGludCBfX2k5MTVfd2FpdF9yZXF1ZXN0KHN0 cnVjdAo+Pj4gZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKPj4+Cj4+PiAgICAgICBXQVJOKCFp bnRlbF9pcnFzX2VuYWJsZWQoZGV2X3ByaXYpLCAiSVJRcyBkaXNhYmxlZCIpOwo+Pj4KPj4+IC0g ICAgaWYgKGxpc3RfZW1wdHkoJnJlcS0+bGlzdCkpCj4+PiArICAgIGlmIChpOTE1X2dlbV9yZXF1 ZXN0X2NvbXBsZXRlZChyZXEpKQo+Pj4gICAgICAgICAgIHJldHVybiAwOwo+Pj4KPj4+ICsgICAg LyoKPj4+ICsgICAgICogRW5hYmxlIGludGVycnVwdCBjb21wbGV0aW9uIG9mIHRoZSByZXF1ZXN0 Lgo+Pj4gKyAgICAgKi8KPj4+ICsgICAgZmVuY2VfZW5hYmxlX3N3X3NpZ25hbGluZygmcmVxLT5m ZW5jZSk7Cj4+PiArCj4+Cj4+IFRoZXJlIGlzIGR1cGxpY2F0ZWQgdXNlciBpbnRlcnJ1cHQgaGFu ZGxpbmcgaW4gdGhpcyBmdW5jdGlvbiBub3cuIENvZGUKPj4gd2hpY2ggZG9lcyBpcnEgZ2V0L3B1 dCBkaXJlY3RseSBpcyBzdGlsbCB0aGVyZSwgYnV0IEkgdGhpbmsgaXQgc2hvdWxkCj4+IGJlIHJl bW92ZWQuCj4gTm90IHN1cmUgZXhhY3RseSB3aGF0IHlvdSB0aGluayBpcyBkdXBsaWNhdGVkPyBU aGUgZmVuY2UgZnVuY3Rpb24ganVzdAo+IGNhbGxzIGJhY2sgdG8gdGhlIGk5MTUgY29kZSB3aGlj aCBzZXRzIHN0dWZmIHVwIGZvciBpbnRlcnJ1cHQgc2lnbmFsbGluZwo+IChpZiBpdCBoYXNuJ3Qg YWxyZWFkeSBiZWVuIGRvbmUpLiBJZiB0aGUgZmVuY2UgaXMgYWxyZWFkeSBzZXQgdXAgdGhlbgo+ IHRoZSBjYWxsIGlzIGEgbm8tb3AuCgpfX2k5MTVfd2FpdCByZXF1ZXN0IGRvZXMgZXhwbGljaXRs eSByaW5nLT5pcnFfZ2V0IGFuZCBpcnFfcHV0IGFmdGVyIHlvdSAKYWxyZWFkeSBlbmFibGUgdGhl bSB2aWEgZmVuY2VfZW5hYmxlX3N3X3NpZ25hbGluZy4gU28gaXQgaXMgcmVkdW5kYW50IGluIAp0 aGF0IHJlc3BlY3QuCgpZb3UgYWxzbyBwcm9iYWJseSBuZWVkIHRvIGZpeCB1cCB0aGUgbWFnaWNh bCBmYXVsdCBpbmplY3Rpb24gY29kZSB3aGljaCAKaXMgZGV2X3ByaXYtPmdwdV9lcnJvci50ZXN0 X2lycV9yaW5ncy4KCj4KPj4KPj4+ICAgICAgIGlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRl ZChyZXEpKQo+Pj4gICAgICAgICAgIHJldHVybiAwOwo+Pj4KPj4+IEBAIC0xMzc3LDYgKzEzODcs MTkgQEAgc3RhdGljIHZvaWQgaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmUoc3RydWN0Cj4+PiBkcm1f aTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKPj4+ICAgICAgIGxpc3RfZGVsX2luaXQoJnJlcXVl c3QtPmxpc3QpOwo+Pj4gICAgICAgaTkxNV9nZW1fcmVxdWVzdF9yZW1vdmVfZnJvbV9jbGllbnQo cmVxdWVzdCk7Cj4+Pgo+Pj4gKyAgICAvKiBJbiBjYXNlIHRoZSByZXF1ZXN0IGlzIHN0aWxsIGlu IHRoZSBzaWduYWwgcGVuZGluZyBsaXN0ICovCj4+Cj4+IFdoZW4gd291bGQgdGhpcyBoYXBwZW4/ IChjb21tZW50IGhpbnQpCj4KPiBURFIsIHByZS1lbXB0aW9uLCBhbnl0aGluZyBlbHNlIHdoaWNo IGNhbiBhYm9ydCBhIHJlcXVlc3QvYmF0Y2ggYnVmZmVyCj4gYmVmb3JlIGl0IGhhcyBjb21wbGV0 ZWQuIFdpbGwgdXBkYXRlIHRoZSBjb21tZW50Lgo+Cj4+Cj4+PiArICAgIGlmICghbGlzdF9lbXB0 eSgmcmVxdWVzdC0+c2lnbmFsX2xpbmspKSB7Cj4+PiArICAgICAgICAvKgo+Pj4gKyAgICAgICAg ICogVGhlIHJlcXVlc3QgbXVzdCBiZSBtYXJrZWQgYXMgY2FuY2VsbGVkIGFuZCB0aGUgdW5kZXJs eWluZwo+Pj4gKyAgICAgICAgICogZmVuY2UgYXMgYm90aCBmYWlsZWQuIE5COiBUaGVyZSBpcyBu byBleHBsaWNpdCBmZW5jZSBmYWlsCj4+PiArICAgICAgICAgKiBBUEksIHRoZXJlIGlzIG9ubHkg YSBtYW51YWwgcG9rZSBhbmQgc2lnbmFsLgo+Pj4gKyAgICAgICAgICovCj4+PiArICAgICAgICBy ZXF1ZXN0LT5jYW5jZWxsZWQgPSB0cnVlOwo+Pj4gKyAgICAgICAgLyogSG93IHRvIHByb3BhZ2F0 ZSB0byBhbnkgYXNzb2NpYXRlZCBzeW5jX2ZlbmNlPz8/ICovCj4+PiArICAgICAgICByZXF1ZXN0 LT5mZW5jZS5zdGF0dXMgPSAtRUlPOwo+Pj4gKyAgICAgICAgZmVuY2Vfc2lnbmFsX2xvY2tlZCgm cmVxdWVzdC0+ZmVuY2UpOwo+Pgo+PiBEb2VzIHRoZSBjYW5jZWxsZWQgcmVxdWVzdCBoYXMgdG8g c3RheSBvbiB0aGUgc2lnbmFsIGxpc3Q/IElmIGl0IGNvdWxkCj4+IGJlIG1vdmVkIG91dHNpZGUg b2YgdGhlIGlycSBob3QgbGlzdCBpdCBtaWdodCBiZSBiZW5lZmljaWFsIGZvciBsaXN0Cj4+IGxl bmd0aCBhbmQgc2ltcGxpZnlpbmcgdGhlIGNvZGUgaW4gaTkxNV9nZW1fcmVxdWVzdF9ub3RpZnku Cj4gVGhlIHBvaW50IG9mIGxlYXZpbmcgaXQgb24gdGhlIGxpc3QgaXMgdG8gZ2V0IGFsbCB0aGUg b3RoZXIgcHJvY2Vzc2luZwo+IHdpdGhvdXQgZHVwbGljYXRpbmcgYW55IGNvZGUuIEUuZy4gbGF0 ZXIgb24gdGhlIHNjaGVkdWxlciBob29rcyBpbnRvIHRoZQo+IG5vdGlmeSBmdW5jdGlvbiBhcyBp dCBuZWVkcyB0byBrbm93IHdoZW4gZWFjaCByZXF1ZXN0IGhhcyBjb21wbGV0ZWQuCgpJIHdhcyB0 aGlua2luZyBhbG9uZyB0aGUgbGluZXMgdG8gbWFrZSB0aGUgc2lnbmFsX2xpc3QgYXMgc2hvcnQg YXMgCnBvc3NpYmxlIHNvIHRvIGRvIGFzIGxpdHRsZSBhcyBwb3NzaWJsZSBpbiB0aGUgZXhwZW5z aXZlIGlycSBoYW5kbGVyLgoKPgo+Pgo+Pj4gKyAgICB9Cj4+PiArCj4+PiAgICAgICBpOTE1X2dl bV9yZXF1ZXN0X3VucmVmZXJlbmNlKHJlcXVlc3QpOwo+Pj4gICB9Cj4+Pgo+Pj4gQEAgLTI1MzUs NiArMjU1OCwxMiBAQCB2b2lkIF9faTkxNV9hZGRfcmVxdWVzdChzdHJ1Y3QKPj4+IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0LAo+Pj4gICAgICAgICovCj4+PiAgICAgICByZXF1ZXN0LT5w b3N0Zml4ID0gaW50ZWxfcmluZ19nZXRfdGFpbChyaW5nYnVmKTsKPj4+Cj4+PiArICAgIC8qCj4+ PiArICAgICAqIEFkZCB0aGUgZmVuY2UgdG8gdGhlIHBlbmRpbmcgbGlzdCBiZWZvcmUgZW1pdHRp bmcgdGhlCj4+PiBjb21tYW5kcyB0bwo+Pj4gKyAgICAgKiBnZW5lcmF0ZSBhIHNlcW5vIG5vdGlm aWNhdGlvbiBpbnRlcnJ1cHQuCj4+PiArICAgICAqLwo+Pj4gKyAgICBpOTE1X2dlbV9yZXF1ZXN0 X3N1Ym1pdChyZXF1ZXN0KTsKPj4+ICsKPj4+ICAgICAgIGlmIChpOTE1LmVuYWJsZV9leGVjbGlz dHMpCj4+PiAgICAgICAgICAgcmV0ID0gcmluZy0+ZW1pdF9yZXF1ZXN0KHJlcXVlc3QpOwo+Pj4g ICAgICAgZWxzZSB7Cj4+PiBAQCAtMjY1NCwyNSArMjY4MywxMzUgQEAgc3RhdGljIHZvaWQgaTkx NV9nZW1fcmVxdWVzdF9mcmVlKHN0cnVjdAo+Pj4gZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkK Pj4+ICAgICAgICAgICBpOTE1X2dlbV9jb250ZXh0X3VucmVmZXJlbmNlKGN0eCk7Cj4+PiAgICAg ICB9Cj4+Pgo+Pj4gKyAgICBpZiAocmVxLT5pcnFfZW5hYmxlZCkKPj4+ICsgICAgICAgIHJlcS0+ cmluZy0+aXJxX3B1dChyZXEtPnJpbmcpOwo+Pj4gKwo+Pj4gICAgICAga21lbV9jYWNoZV9mcmVl KHJlcS0+aTkxNS0+cmVxdWVzdHMsIHJlcSk7Cj4+PiAgIH0KPj4+Cj4+PiAtc3RhdGljIGJvb2wg aTkxNV9nZW1fcmVxdWVzdF9lbmFibGVfc2lnbmFsaW5nKHN0cnVjdCBmZW5jZSAqcmVxX2ZlbmNl KQo+Pj4gKy8qCj4+PiArICogVGhlIHJlcXVlc3QgaXMgYWJvdXQgdG8gYmUgc3VibWl0dGVkIHRv IHRoZSBoYXJkd2FyZSBzbyBhZGQgdGhlCj4+PiBmZW5jZSB0bwo+Pj4gKyAqIHRoZSBsaXN0IG9m IHNpZ25hbGFibGUgZmVuY2VzLgo+Pj4gKyAqCj4+PiArICogTkI6IFRoaXMgZG9lcyBub3QgbmVj ZXNzYXJpbHkgZW5hYmxlIGludGVycnVwdHMgeWV0LiBUaGF0IG9ubHkKPj4+IG9jY3VycyBvbgo+ Pj4gKyAqIGRlbWFuZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGFjdHVhbGx5IHdhaXRlZCBvbi4gSG93 ZXZlciwgYWRkaW5nIGl0Cj4+PiB0byB0aGUKPj4+ICsgKiBsaXN0IGVhcmx5IGVuc3VyZXMgdGhh dCB0aGVyZSBpcyBubyByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUKPj4+IGludGVycnVwdAo+Pj4g KyAqIGNvdWxkIHBvcCBvdXQgcHJlbWF0dXJlbHkgYW5kIHRodXMgYmUgY29tcGxldGVseSBsb3N0 LiBUaGUgcmFjZQo+Pj4gaXMgbWVyZWx5Cj4+PiArICogdGhhdCB0aGUgaW50ZXJydXB0IG11c3Qg YmUgbWFudWFsbHkgY2hlY2tlZCBmb3IgYWZ0ZXIgYmVpbmcgZW5hYmxlZC4KPj4+ICsgKi8KPj4+ ICt2b2lkIGk5MTVfZ2VtX3JlcXVlc3Rfc3VibWl0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxKQo+Pj4gICB7Cj4+PiAtICAgIC8qIEludGVycnVwdCBkcml2ZW4gZmVuY2VzIGFyZSBu b3QgaW1wbGVtZW50ZWQgeWV0LiovCj4+PiAtICAgIFdBUk4odHJ1ZSwgIlRoaXMgc2hvdWxkIG5v dCBiZSBjYWxsZWQhIik7Cj4+PiAtICAgIHJldHVybiB0cnVlOwo+Pj4gKyAgICB1bnNpZ25lZCBs b25nIGZsYWdzOwo+Pj4gKwo+Pj4gKyAgICAvKgo+Pj4gKyAgICAgKiBBbHdheXMgZW5hYmxlIHNp Z25hbCBwcm9jZXNzaW5nIGZvciB0aGUgcmVxdWVzdCdzIGZlbmNlIG9iamVjdAo+Pj4gKyAgICAg KiBiZWZvcmUgdGhhdCByZXF1ZXN0IGlzIHN1Ym1pdHRlZCB0byB0aGUgaGFyZHdhcmUuIFRodXMg dGhlcmUKPj4+IGlzIG5vCj4+PiArICAgICAqIHJhY2UgY29uZGl0aW9uIHdoZXJlYnkgdGhlIGlu dGVycnVwdCBjb3VsZCBwb3Agb3V0IGJlZm9yZSB0aGUKPj4+ICsgICAgICogcmVxdWVzdCBoYXMg YmVlbiBhZGRlZCB0byB0aGUgc2lnbmFsIGxpc3QuIEhlbmNlIG5vIG5lZWQgdG8KPj4+IGNoZWNr Cj4+PiArICAgICAqIGZvciBjb21wbGV0aW9uLCB1bmRvIHRoZSBsaXN0IGFkZCBhbmQgcmV0dXJu IGZhbHNlLgo+Pj4gKyAgICAgKi8KPj4+ICsgICAgaTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVuY2Uo cmVxKTsKPj4+ICsgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnJlcS0+cmluZy0+ZmVuY2VfbG9jaywg ZmxhZ3MpOwo+Pgo+PiBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgZnJvbSBub24taXJxIGNvbnRleHQg c28gY291bGQgdXNlIHNwaW5fbG9ja19pcnEuCj4gVGhlIGZlbmNlX2xvY2sgaXMgYWNxdWlyZWQg ZnJvbSB3aXRoaW4gaTkxNV9nZW1fcmVxdWVzdF9ub3RpZnkoKSB3aGljaAo+IGlzIGNhbGxlZCB3 aXRoaW4gdGhlIElSUSBoYW5kbGVyIGFuZCB0aGVyZWZvcmUgYXQgSVJRIGNvbnRleHQuCgpDb3Jy ZWN0LCBmZW5jZV9sb2NrIG5lZWRzIHRvIGJlIGlycSBzYWZlLCBidXQgaTkxNV9nZW1fcmVxdWVz dF9zdWJtaXQgaXMgCm9ubHkgY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0LCBubz8KClNvIHlv dSBkb24ndCBuZWVkIHRvIHVzZSBzcGluX2xvY2tfaXJxc2F2ZSBidXQgY2hlYXBlciBzcGluX2xv Y2tfaXJxLgoKPj4KPj4+ICsgV0FSTl9PTighbGlzdF9lbXB0eSgmcmVxLT5zaWduYWxfbGluaykp Owo+Pj4gKyAgICBsaXN0X2FkZF90YWlsKCZyZXEtPnNpZ25hbF9saW5rLCAmcmVxLT5yaW5nLT5m ZW5jZV9zaWduYWxfbGlzdCk7Cj4+PiArICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJlcS0+ cmluZy0+ZmVuY2VfbG9jaywgZmxhZ3MpOwo+Pj4gKwo+Pj4gKyAgICAvKgo+Pj4gKyAgICAgKiBO QjogSW50ZXJydXB0cyBhcmUgb25seSBlbmFibGVkIG9uIGRlbWFuZC4gVGh1cyB0aGVyZSBpcyBz dGlsbCBhCj4+PiArICAgICAqIHJhY2Ugd2hlcmUgdGhlIHJlcXVlc3QgY291bGQgY29tcGxldGUg YmVmb3JlIHRoZSBpbnRlcnJ1cHQgaGFzCj4+PiArICAgICAqIGJlZW4gZW5hYmxlZC4gVGh1cyBj YXJlIG11c3QgYmUgdGFrZW4gYXQgdGhhdCBwb2ludC4KPj4+ICsgICAgICovCj4+PiArCj4+PiAr ICAgICAvKiBIYXZlIGludGVycnVwdHMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZD8gKi8KPj4+ICsg ICAgIGlmIChyZXEtPnNpZ25hbF9yZXF1ZXN0ZWQpCj4+Cj4+IFNvbWUgY29kZSBwYXRoIGNhbiBl bmFibGUgc2lnbmFsaW5nIGJlZm9yZSB0aGUgZXhlY2J1ZiBjb21wbGV0ZWQ/Cj4gT25jZSB0aGUg c2NoZWR1bGVyIGhhcyBhcnJpdmVkIHRoZW4gYSB3YWl0IHJlcXVlc3QgY2FsbCBjYW4gYmUgbWFk ZSBsb25nCj4gYmVmb3JlIHRoZSByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCB0byB0aGUgaGFy ZHdhcmUuIExpa2V3aXNlIGlmIGEKPiB1c2VyIGxhbmQgZmVuY2UgaXMgcmVxdWVzdGVkIGZvciB0 aGUgYmF0Y2ggYnVmZmVyLCB0aGF0IGlzIGFsbG9jYXRlZAo+IGJlZm9yZSBleGVjdXRpb24gYmVn aW5zIGFuZCB0aGUgaW50ZXJuYWxzIG9mIHRoZSBmZW5jZSBjb2RlCj4gYXV0b21hdGljYWxseSBl bmFibGVzIHNpZ25hbGxpbmcuCgpJIGZvcmdvdCBleGFjdGx5IHdoYXQgSSBtZWFudCB0aGVyZSwg YnV0IGxvb2tlZCBzdHJhbmdlIGFuZCBzdGlsbCBkb2VzLiAKSSBzdXBwb3NlIHRoZSBxdWVzdGlv biBpcyB3aHkgaXQgaXMgbm90IHN1ZmZpY2llbnQgdG8gZW5hYmxlIGludGVycnVwdHMgCmluIGVu YWJsZV9zaWduYWxpbmc/Cgo+Cj4+PiArIGk5MTVfZ2VtX3JlcXVlc3RfZW5hYmxlX2ludGVycnVw dChyZXEsIGZhbHNlKTsKPj4+ICt9Cj4+PiArCj4+PiArLyoKPj4+ICsgKiBUaGUgcmVxdWVzdCBp cyBiZWluZyBhY3RpdmVseSB3YWl0ZWQgb24sIHNvIGVuYWJsZSBpbnRlcnJ1cHQgYmFzZWQKPj4+ ICsgKiBjb21wbGV0aW9uIHNpZ25hbGxpbmcuCj4+PiArICovCj4+PiArdm9pZCBpOTE1X2dlbV9y ZXF1ZXN0X2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0Cj4+PiAq cmVxLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmZW5jZV9sb2NrZWQpCj4+PiAr ewo+Pj4gKyAgICBpZiAocmVxLT5pcnFfZW5hYmxlZCkKPj4+ICsgICAgICAgIHJldHVybjsKPj4+ ICsKPj4+ICsgICAgV0FSTl9PTighcmVxLT5yaW5nLT5pcnFfZ2V0KHJlcS0+cmluZykpOwo+Pj4g KyAgICByZXEtPmlycV9lbmFibGVkID0gdHJ1ZTsKPj4KPj4gUHJvYmFibHkgc2hvdWxkbid0IHNl dCB0aGUgZmxhZyBpZiBpcnFfZ2V0IGZhaWxlZCBub3QgdG8gdW5iYWxhbmNlIHRoZQo+PiBpcnEg cmVmY291bnQuCj4gV2lsbCBhZGQgYW4gaWYgYXJvdW5kIHRoZSBXQVJOLgo+Cj4+Cj4+PiArCj4+ PiArICAgIC8qCj4+PiArICAgICAqIEJlY2F1c2UgdGhlIGludGVycnVwdCBpcyBvbmx5IGVuYWJs ZWQgb24gZGVtYW5kLCB0aGVyZSBpcyBhIHJhY2UKPj4+ICsgICAgICogd2hlcmUgdGhlIGludGVy cnVwdCBjYW4gZmlyZSBiZWZvcmUgYW55b25lIGlzIGxvb2tpbmcgZm9yIGl0LiBTbwo+Pj4gKyAg ICAgKiBkbyBhbiBleHBsaWNpdCBjaGVjayBmb3IgbWlzc2VkIGludGVycnVwdHMuCj4+PiArICAg ICAqLwo+Pj4gKyAgICBpOTE1X2dlbV9yZXF1ZXN0X25vdGlmeShyZXEtPnJpbmcsIGZlbmNlX2xv Y2tlZCk7Cj4+PiAgIH0KPj4+Cj4+PiAtc3RhdGljIGJvb2wgaTkxNV9nZW1fcmVxdWVzdF9pc19j b21wbGV0ZWQoc3RydWN0IGZlbmNlICpyZXFfZmVuY2UpCj4+PiArc3RhdGljIGJvb2wgaTkxNV9n ZW1fcmVxdWVzdF9lbmFibGVfc2lnbmFsaW5nKHN0cnVjdCBmZW5jZSAqcmVxX2ZlbmNlKQo+Pj4g ICB7Cj4+PiAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSA9IGNvbnRhaW5l cl9vZihyZXFfZmVuY2UsCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YoKnJl cSksIGZlbmNlKTsKPj4+ICsKPj4+ICsgICAgLyoKPj4+ICsgICAgICogTm8gbmVlZCB0byBhY3R1 YWxseSBlbmFibGUgaW50ZXJydXB0IGJhc2VkIHByb2Nlc3NpbmcgdW50aWwgdGhlCj4+PiArICAg ICAqIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHRvIHRoZSBoYXJkd2FyZS4gQXQgd2hpY2gg cG9pbnQKPj4+ICsgICAgICogJ2k5MTVfZ2VtX3JlcXVlc3Rfc3VibWl0KCknIGlzIGNhbGxlZC4g U28gb25seSByZWFsbHkgZW5hYmxlCj4+PiArICAgICAqIHNpZ25hbGxpbmcgaW4gdGhlcmUuIEp1 c3Qgc2V0IGEgZmxhZyB0byBzYXkgdGhhdCBpbnRlcnJ1cHRzIGFyZQo+Pj4gKyAgICAgKiB3YW50 ZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyBldmVudHVhbGx5IHN1Ym1pdHRlZC4gT24gdGhlIG90aGVy Cj4+PiBoYW5kCj4+PiArICAgICAqIGlmIHRoZSByZXF1ZXN0IGhhcyBhbHJlYWR5IGJlZW4gc3Vi bWl0dGVkIHRoZW4gaW50ZXJydXB0cyBkbwo+Pj4gbmVlZAo+Pj4gKyAgICAgKiB0byBiZSBlbmFi bGVkIG5vdy4KPj4+ICsgICAgICovCj4+PiArCj4+PiArICAgIHJlcS0+c2lnbmFsX3JlcXVlc3Rl ZCA9IHRydWU7Cj4+PiArCj4+PiArICAgIGlmICghbGlzdF9lbXB0eSgmcmVxLT5zaWduYWxfbGlu aykpCj4+PiArICAgICAgICBpOTE1X2dlbV9yZXF1ZXN0X2VuYWJsZV9pbnRlcnJ1cHQocmVxLCB0 cnVlKTsKPj4+ICsKPj4+ICsgICAgcmV0dXJuIHRydWU7Cj4+PiArfQo+Pj4gKwo+Pj4gK3ZvaWQg aTkxNV9nZW1fcmVxdWVzdF9ub3RpZnkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywgYm9v bAo+Pj4gZmVuY2VfbG9ja2VkKQo+Pgo+PiBJIHRoaW5rIG5hbWUgY291bGQgYmUgaW1wcm92ZSBz aW5jZSB0aGlzIG1hZGUgbWUgZXhwZWN0IGEgcmVxdWVzdCBpbgo+PiB0aGUgcGFyYW1ldGVyIGxp c3QuCj4+Cj4+IE1heWJlIGk5MTVfZ2VtX25vdGlmeV9yZXF1ZXN0cyA/Cj4gVGhlIGlkZWEgYmVo aW5kIHRoZSBuYW1pbmcgaXMgdGhhdCBhbGwgdGhlIHJlcXVlc3QgY29kZSBpcyBwcmVmaXhlZCB3 aXRoCj4gJ2k5MTVfZ2VtX3JlcXVlc3RfJy4gVGhpcyBpcyB0aGUgbm90aWZ5IGZ1bmN0aW9uIG9m IHRoYXQgc2V0IG9mIGludGVyZmFjZXMuCj4KPj4KPj4+ICt7Cj4+PiArICAgIHN0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdCAqcmVxLCAqcmVxX25leHQ7Cj4+PiArICAgIHVuc2lnbmVkIGxvbmcg ZmxhZ3M7Cj4+PiAgICAgICB1MzIgc2Vxbm87Cj4+Pgo+Pj4gLSAgICBzZXFubyA9IHJlcS0+cmlu Zy0+Z2V0X3NlcW5vKHJlcS0+cmluZywgZmFsc2UvKmxhenlfY29oZXJlbmN5Ki8pOwo+Pj4gKyAg ICBpZiAobGlzdF9lbXB0eSgmcmluZy0+ZmVuY2Vfc2lnbmFsX2xpc3QpKQo+Pj4gKyAgICAgICAg cmV0dXJuOwo+Pj4gKwo+Pj4gKyAgICBpZiAoIWZlbmNlX2xvY2tlZCkKPj4+ICsgICAgICAgIHNw aW5fbG9ja19pcnFzYXZlKCZyaW5nLT5mZW5jZV9sb2NrLCBmbGFncyk7Cj4+PiArCj4+PiArICAg IHNlcW5vID0gcmluZy0+Z2V0X3NlcW5vKHJpbmcsIGZhbHNlKTsKPj4KPj4gQ291bGQgcmVhZCB0 aGUgc2Vxbm8gb3V0c2lkZSB0aGUgc3BpbmxvY2ssIGFsdGhvdWdoIG5vdCB0aGF0IGltcG9ydGFu dAo+PiBzaW5jZSB0aGUgcHJpbWFyeSBjYWxsZXIgb2YgdGhpcyBpcyAob3Igc2hvdWxkIGJlKSB0 aGUgaXJxIGhhbmRsZXIuCj4gVGhhdCBmaXggaXMgYWxyZWFkeSBkb25lIGluIHBhdGNoICMxMyBv ZiB0aGUgbmV3IHNlcmllcy4KPgo+Pgo+Pj4gKwo+Pj4gKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5 X3NhZmUocmVxLCByZXFfbmV4dCwKPj4+ICZyaW5nLT5mZW5jZV9zaWduYWxfbGlzdCwgc2lnbmFs X2xpbmspIHsKPj4+ICsgICAgICAgIGlmICghcmVxLT5jYW5jZWxsZWQpIHsKPj4+ICsgICAgICAg ICAgICBpZiAoIWk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5vLCByZXEtPnNlcW5vKSkKPj4+ICsgICAg ICAgICAgICAgICAgYnJlYWs7Cj4+PiArICAgICAgICB9Cj4+PiArCj4+PiArICAgICAgICAvKgo+ Pj4gKyAgICAgICAgICogU3RhcnQgYnkgcmVtb3ZpbmcgdGhlIGZlbmNlIGZyb20gdGhlIHNpZ25h bCBsaXN0IG90aGVyd2lzZQo+Pj4gKyAgICAgICAgICogdGhlIHJldGlyZSBjb2RlIGNhbiBydW4g Y29uY3VycmVudGx5IGFuZCBnZXQgY29uZnVzZWQuCj4+PiArICAgICAgICAgKi8KPj4+ICsgICAg ICAgIGxpc3RfZGVsX2luaXQoJnJlcS0+c2lnbmFsX2xpbmspOwo+Pj4gKwo+Pj4gKyAgICAgICAg aWYgKCFyZXEtPmNhbmNlbGxlZCkgewo+Pj4gKyAgICAgICAgICAgIGZlbmNlX3NpZ25hbF9sb2Nr ZWQoJnJlcS0+ZmVuY2UpOwo+Pj4gKyAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgaWYgKHJl cS0+aXJxX2VuYWJsZWQpIHsKPj4+ICsgICAgICAgICAgICByZXEtPnJpbmctPmlycV9wdXQocmVx LT5yaW5nKTsKPj4+ICsgICAgICAgICAgICByZXEtPmlycV9lbmFibGVkID0gZmFsc2U7Cj4+PiAr ICAgICAgICB9Cj4+PiArCj4+PiArICAgICAgICAvKiBDYW4ndCB1bnJlZmVyZW5jZSBoZXJlIGJl Y2F1c2UgdGhhdCBtaWdodCBncmFiIGZlbmNlX2xvY2sgKi8KPj4+ICsgICAgICAgIGxpc3RfYWRk X3RhaWwoJnJlcS0+dW5zaWduYWxfbGluaywgJnJpbmctPmZlbmNlX3Vuc2lnbmFsX2xpc3QpOwo+ Pj4gKyAgICB9Cj4+Pgo+Pj4gLSAgICByZXR1cm4gaTkxNV9zZXFub19wYXNzZWQoc2Vxbm8sIHJl cS0+c2Vxbm8pOwo+Pj4gKyAgICBpZiAoIWZlbmNlX2xvY2tlZCkKPj4+ICsgICAgICAgIHNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmZlbmNlX2xvY2ssIGZsYWdzKTsKPj4+ICAgfQo+Pj4K Pj4+ICAgc3RhdGljIGNvbnN0IGNoYXIgKmk5MTVfZ2VtX3JlcXVlc3RfZ2V0X2RyaXZlcl9uYW1l KHN0cnVjdCBmZW5jZQo+Pj4gKnJlcV9mZW5jZSkKPj4+IEBAIC0yNzEyLDcgKzI4NTEsNiBAQCBz dGF0aWMgdm9pZAo+Pj4gaTkxNV9nZW1fcmVxdWVzdF9mZW5jZV92YWx1ZV9zdHIoc3RydWN0IGZl bmNlICpyZXFfZmVuY2UsIGNoYXIgKnN0ciwKPj4+Cj4+PiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZmVuY2Vfb3BzIGk5MTVfZ2VtX3JlcXVlc3RfZm9wcyA9IHsKPj4+ICAgICAgIC5lbmFibGVfc2ln bmFsaW5nICAgID0gaTkxNV9nZW1fcmVxdWVzdF9lbmFibGVfc2lnbmFsaW5nLAo+Pj4gLSAgICAu c2lnbmFsZWQgICAgICAgID0gaTkxNV9nZW1fcmVxdWVzdF9pc19jb21wbGV0ZWQsCj4+PiAgICAg ICAud2FpdCAgICAgICAgICAgID0gZmVuY2VfZGVmYXVsdF93YWl0LAo+Pj4gICAgICAgLnJlbGVh c2UgICAgICAgID0gaTkxNV9nZW1fcmVxdWVzdF9yZWxlYXNlLAo+Pj4gICAgICAgLmdldF9kcml2 ZXJfbmFtZSAgICA9IGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X2RyaXZlcl9uYW1lLAo+Pj4gQEAgLTI3 OTUsNiArMjkzMyw3IEBAIGludCBpOTE1X2dlbV9yZXF1ZXN0X2FsbG9jKHN0cnVjdAo+Pj4gaW50 ZWxfZW5naW5lX2NzICpyaW5nLAo+Pj4gICAgICAgICAgIGdvdG8gZXJyOwo+Pj4gICAgICAgfQo+ Pj4KPj4+ICsgICAgSU5JVF9MSVNUX0hFQUQoJnJlcS0+c2lnbmFsX2xpbmspOwo+Pj4gICAgICAg ZmVuY2VfaW5pdCgmcmVxLT5mZW5jZSwgJmk5MTVfZ2VtX3JlcXVlc3RfZm9wcywgJnJpbmctPmZl bmNlX2xvY2ssCj4+PiBjdHgtPmVuZ2luZVtyaW5nLT5pZF0uZmVuY2VfdGltZWxpbmUuZmVuY2Vf Y29udGV4dCwKPj4+IGk5MTVfZmVuY2VfdGltZWxpbmVfZ2V0X25leHRfc2Vxbm8oJmN0eC0+ZW5n aW5lW3JpbmctPmlkXS5mZW5jZV90aW1lbGluZSkpOwo+Pj4KPj4+IEBAIC0yODMyLDYgKzI5NzEs MTEgQEAgdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X2NhbmNlbChzdHJ1Y3QKPj4+IGRybV9pOTE1X2dl bV9yZXF1ZXN0ICpyZXEpCj4+PiAgIHsKPj4+ICAgICAgIGludGVsX3JpbmdfcmVzZXJ2ZWRfc3Bh Y2VfY2FuY2VsKHJlcS0+cmluZ2J1Zik7Cj4+Pgo+Pj4gKyAgICByZXEtPmNhbmNlbGxlZCA9IHRy dWU7Cj4+PiArICAgIC8qIEhvdyB0byBwcm9wYWdhdGUgdG8gYW55IGFzc29jaWF0ZWQgc3luY19m ZW5jZT8/PyAqLwo+Pj4gKyAgICByZXEtPmZlbmNlLnN0YXR1cyA9IC1FSU5WQUw7Cj4+PiArICAg IGZlbmNlX3NpZ25hbF9sb2NrZWQoJnJlcS0+ZmVuY2UpOwo+Pgo+PiBTYW1lIHF1ZXN0aW9uIGZy b20gYmVmb3JlLCBjb3VsZCB5b3UganVzdCBtb3ZlIGl0IHRvIHVuc2lnbmFsZWQgbGlzdAo+PiBz dHJhaWdodCBhd2F5PyAoQW5kIGRyb3AgaW50ZXJydXB0cz8pCj4gQWdhaW4sIGl0IHNlZW1lZCBh IG11Y2ggc2ltcGxlciBkcml2ZXIgaWYgdGhlIHJlcXVlc3QgY29tcGxldGlvbiBjb2RlIGlzCj4g b25seSBrZXB0IGluc2lkZSB0aGUgbm90aWZ5IGZ1bmN0aW9uIGFuZCBub3QgcmVwbGljYXRlZCB0 byBtdWx0aXBsZSBwbGFjZXMuCj4KPj4KPj4+ICsKPj4+ICAgICAgIGk5MTVfZ2VtX3JlcXVlc3Rf dW5yZWZlcmVuY2UocmVxKTsKPj4+ICAgfQo+Pj4KPj4+IEBAIC0yOTI1LDYgKzMwNjksMTMgQEAg c3RhdGljIHZvaWQgaTkxNV9nZW1fcmVzZXRfcmluZ19jbGVhbnVwKHN0cnVjdAo+Pj4gZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+PiAgICAgICAgICAgaTkxNV9nZW1fcmVxdWVzdF9yZXRp cmUocmVxdWVzdCk7Cj4+PiAgICAgICB9Cj4+Pgo+Pj4gKyAgICAvKgo+Pj4gKyAgICAgKiBUaWR5 IHVwIGFueXRoaW5nIGxlZnQgb3Zlci4gVGhpcyBpbmNsdWRlcyBhIGNhbGwgdG8KPj4+ICsgICAg ICogaTkxNV9nZW1fcmVxdWVzdF9ub3RpZnkoKSB3aGljaCB3aWxsIG1ha2Ugc3VyZSB0aGF0IGFu eSByZXF1ZXN0cwo+Pj4gKyAgICAgKiB0aGF0IHdlcmUgb24gdGhlIHNpZ25hbCBwZW5kaW5nIGxp c3QgZ2V0IGFsc28gY2xlYW5lZCB1cC4KPj4+ICsgICAgICovCj4+PiArICAgIGk5MTVfZ2VtX3Jl dGlyZV9yZXF1ZXN0c19yaW5nKHJpbmcpOwo+Pj4gKwo+Pj4gICAgICAgLyogSGF2aW5nIGZsdXNo ZWQgYWxsIHJlcXVlc3RzIGZyb20gYWxsIHF1ZXVlcywgd2Uga25vdyB0aGF0IGFsbAo+Pj4gICAg ICAgICogcmluZ2J1ZmZlcnMgbXVzdCBub3cgYmUgZW1wdHkuIEhvd2V2ZXIsIHNpbmNlIHdlIGRv IG5vdCByZWNsYWltCj4+PiAgICAgICAgKiBhbGwgc3BhY2Ugd2hlbiByZXRpcmluZyB0aGUgcmVx dWVzdCAodG8gcHJldmVudCBIRUFEcyBjb2xsaWRpbmcKPj4+IEBAIC0yOTc0LDYgKzMxMjUsMTMg QEAgaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzX3Jpbmcoc3RydWN0Cj4+PiBpbnRlbF9lbmdpbmVf Y3MgKnJpbmcpCj4+Pgo+Pj4gICAgICAgV0FSTl9PTihpOTE1X3ZlcmlmeV9saXN0cyhyaW5nLT5k ZXYpKTsKPj4+Cj4+PiArICAgIC8qCj4+PiArICAgICAqIElmIG5vLW9uZSBoYXMgd2FpdGVkIG9u IGEgcmVxdWVzdCByZWNlbnRseSB0aGVuIGludGVycnVwdHMgd2lsbAo+Pj4gKyAgICAgKiBub3Qg aGF2ZSBiZWVuIGVuYWJsZWQgYW5kIHRodXMgbm8gcmVxdWVzdHMgd2lsbCBldmVyIGJlCj4+PiBt YXJrZWQgYXMKPj4+ICsgICAgICogY29tcGxldGVkLiBTbyBkbyBhbiBpbnRlcnJ1cHQgY2hlY2sg bm93Lgo+Pj4gKyAgICAgKi8KPj4+ICsgICAgaTkxNV9nZW1fcmVxdWVzdF9ub3RpZnkocmluZywg ZmFsc2UpOwo+Pj4gKwo+Pj4gICAgICAgLyogUmV0aXJlIHJlcXVlc3RzIGZpcnN0IGFzIHdlIHVz ZSBpdCBhYm92ZSBmb3IgdGhlIGVhcmx5IHJldHVybi4KPj4+ICAgICAgICAqIElmIHdlIHJldGly ZSByZXF1ZXN0cyBsYXN0LCB3ZSBtYXkgdXNlIGEgbGF0ZXIgc2Vxbm8gYW5kIHNvCj4+PiBjbGVh cgo+Pj4gICAgICAgICogdGhlIHJlcXVlc3RzIGxpc3RzIHdpdGhvdXQgY2xlYXJpbmcgdGhlIGFj dGl2ZSBsaXN0LCBsZWFkaW5nIHRvCj4+PiBAQCAtMzAxNSw2ICszMTczLDE1IEBAIGk5MTVfZ2Vt X3JldGlyZV9yZXF1ZXN0c19yaW5nKHN0cnVjdAo+Pj4gaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ Pj4gICAgICAgICAgIGk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZyaW5nLT50cmFjZV9pcnFfcmVx LCBOVUxMKTsKPj4+ICAgICAgIH0KPj4+Cj4+PiArICAgIC8qIFRpZHkgdXAgYW55IHJlcXVlc3Rz IHRoYXQgd2VyZSByZWNlbnRseSBzaWduYWxsZWQgKi8KPj4+ICsgICAgc3Bpbl9sb2NrX2lycXNh dmUoJnJpbmctPmZlbmNlX2xvY2ssIGZsYWdzKTsKPj4KPj4gQ291bGQgYWxzbyB1c2Ugc3Bpbl9s b2NrX2lycSBoZXJlIEkgdGhpbmsuCj4+Cj4+PiArIGxpc3Rfc3BsaWNlX2luaXQoJnJpbmctPmZl bmNlX3Vuc2lnbmFsX2xpc3QsICZsaXN0X2hlYWQpOwo+Pj4gKyAgICBzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZyaW5nLT5mZW5jZV9sb2NrLCBmbGFncyk7Cj4+PiArICAgIGxpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZShyZXEsIHJlcV9uZXh0LCAmbGlzdF9oZWFkLAo+Pj4gdW5zaWduYWxfbGluaykg ewo+Pj4gKyAgICAgICAgbGlzdF9kZWwoJnJlcS0+dW5zaWduYWxfbGluayk7Cj4+PiArICAgICAg ICBpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlKHJlcSk7Cj4+PiArICAgIH0KPj4+ICsKPj4+ ICAgICAgIC8qIFJlYWxseSBmcmVlIGFueSByZXF1ZXN0cyB0aGF0IHdlcmUgcmVjZW50bHkgdW5y ZWZlcmVuY2VkICovCj4+PiAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmcmluZy0+ZGVsYXllZF9m cmVlX2xvY2ssIGZsYWdzKTsKPj4+ICAgICAgIGxpc3Rfc3BsaWNlX2luaXQoJnJpbmctPmRlbGF5 ZWRfZnJlZV9saXN0LCAmbGlzdF9oZWFkKTsKPj4+IEBAIC01MDY2LDYgKzUyMzMsOCBAQCBpbml0 X3JpbmdfbGlzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPj4+ICAgewo+Pj4gICAg ICAgSU5JVF9MSVNUX0hFQUQoJnJpbmctPmFjdGl2ZV9saXN0KTsKPj4+ICAgICAgIElOSVRfTElT VF9IRUFEKCZyaW5nLT5yZXF1ZXN0X2xpc3QpOwo+Pj4gKyAgICBJTklUX0xJU1RfSEVBRCgmcmlu Zy0+ZmVuY2Vfc2lnbmFsX2xpc3QpOwo+Pj4gKyAgICBJTklUX0xJU1RfSEVBRCgmcmluZy0+ZmVu Y2VfdW5zaWduYWxfbGlzdCk7Cj4+PiAgICAgICBJTklUX0xJU1RfSEVBRCgmcmluZy0+ZGVsYXll ZF9mcmVlX2xpc3QpOwo+Pj4gICB9Cj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfaXJxLmMKPj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwo+ Pj4gaW5kZXggNjhiMDk0Yi4uNzRmODU1MiAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfaXJxLmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJx LmMKPj4+IEBAIC05ODEsNiArOTgxLDggQEAgc3RhdGljIHZvaWQgbm90aWZ5X3Jpbmcoc3RydWN0 IGludGVsX2VuZ2luZV9jcwo+Pj4gKnJpbmcpCj4+Pgo+Pj4gICAgICAgdHJhY2VfaTkxNV9nZW1f cmVxdWVzdF9ub3RpZnkocmluZyk7Cj4+Pgo+Pj4gKyAgICBpOTE1X2dlbV9yZXF1ZXN0X25vdGlm eShyaW5nLCBmYWxzZSk7Cj4+PiArCj4+PiAgICAgICB3YWtlX3VwX2FsbCgmcmluZy0+aXJxX3F1 ZXVlKTsKPj4KPj4gVGhpcyBpcyB0aGUgYmlnIG9uZSAtIEkgdGhpbmsgdG8gc29sdmUgdGhlIHRo dW5kZXJpbmcgaGVyZCBwcm9ibGVtCj4+IHRoaXMgcGF0Y2ggc2hvdWxkIGFsc28gaW5jbHVkZSB0 aGUgcmVtb3ZhbCBvZiByaW5nLT5pcnFfcXVldWUgc2luY2UgSQo+PiBkb24ndCB0aGluayBpdCBu ZWVkcyB0byBrZWVwIGV4aXN0aW5nIGFmdGVyIGl0Lgo+Pgo+PiBGb3IgZXhhbXBsZSBhZGRpbmcg YSByZXEtPndhaXRfcXVldWUgb24gd2hpY2ggX19pOTE1X3dhaXRfcmVxdWVzdAo+PiB3b3VsZCB3 YWl0IGluc3RlYWQgYW5kIGRvaW5nIGEgd2FrZV91cF9hbGwgb24gaXQgZnJvbQo+PiBpOTE1X2dl bV9yZXF1ZXN0X25vdGlmeT8KPj4KPj4gQmVjYXVzZSBpbiB0aGlzIGZvcm0sIHdoZW4gSSd2ZSBy YW4gdGhpcyBwYXRjaCBzZXJpZXMgYW5kIGl0IGNhdXNlZAo+PiB0aGUgbnVtYmVyIG9mIGNvbnRl eHQgc3dpdGNoZXMgdG8gZ28gdXAgbW9yZSB0aGFuIHNpeCB0aW1lcyBvbiBvbmUKPj4gd29ya2xv YWQuIEludGVycnVwdHMgYWxzbyB3ZW50IHVwIGJ1dCBvbmx5IGJ5IDUwJSBpbiBjb21wYXJpc29u IGFuZAo+PiB0aW1lIHNwZW50IGluIGlycSBoYW5kbGVycyBkb3VibGVkLgo+Pgo+PiBCdXQgY29u dGV4dCBzd2l0Y2hlcyBhbmQgMTAlIG1vcmUgY3B1IHRpbWUgbG9vayB0aGUgbW9zdCBkcmFtYXRp Yy4KPj4KPj4gU28gaXQgd291bGQgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGlmIHNpbXBseSBtb3Zp bmcgdGhlIHdhaXQgcXVldWUgdG8KPj4gYmUgcGVyIHJlcXVlc3QgY291bGQgZml4IHRoZSBtYWpv cml0eSBvZiB0aGF0IG9yIG5vdC4KPgo+IFRoaXMgaWRlYSB3YXMgcG9zdGVkIG9uZSB2ZXJzaW9u IG9mIHRoZSB0aHVuZGVyaW5nIGhlcmQgdGhyZWFkIGFscmVhZHkuCj4gSSBoYXZlbid0IGltcGxl bWVudGVkIGl0IHlldCBhcyBJIGhhdmVuJ3QgaGFkIHRoZSB0aW1lIHRvIGxvb2sgaW50bwo+IGV4 YWN0bHkgd2hhdCBpcyByZXF1aXJlZC4gQnV0IHllcywgaW4gdGhlb3J5IHRoZSBmZW5jZSBjb2Rl IHNob3VsZCBtZWFuCj4gdGhlIGlycV9xdWV1ZSBpcyBvYnNvbGV0ZS4gVGhlIHdhaXRlcnMgY2Fu IHNpbXBseSByZWdpc3RlciBhIGNhbGxiYWNrIG9uCj4gdGhlIHJlcXVlc3QncyB1bmRlcmx5aW5n IGZlbmNlIG9iamVjdC4gV2hlbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIKPiBzaWduYWxzIHRoZSBm ZW5jZSwgdGhhdCBmZW5jZSB3aWxsIHByb2Nlc3MgaXQncyBjYWxsYmFjayBsaXN0IGFuZCB3YWtl Cj4gdGhlIHdhaXRlci4gQWxsIG5pY2VseSB0YXJnZXRlZCBhbmQgbm8tb25lIGdldHMgd29rZW4g dW5uZWNlc3NhcmlseS4KCkNvb2wsIEkgdGhpbmsgd2UgbmVlZCB0aGF0IGlmIG5vdGhpbmcgZm9y IHRoZSA2eCBtb3JlIGNvbnRleHQgc3dpdGNoZXMgCnBlciBzZWNvbmQgdGhpcyBwYXRjaCBjYXVz ZXMgKDEzayB2cyAyayBmb3IgcHVyZSBuaWdodGx5IHdpdGggdGhlIE5Cb2R5IAp0ZXN0IC0gd2hp Y2ggZ29vZCBmb3Igc3RyZXNzaW5nIHdhaXQgcmVxdWVzdCwgaW50ZXJydXB0cyBhbmQgYnVzeSAK c3Bpbm5pbmcuKS4KClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK