From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH v4 1/9] xen/vpci: introduce basic handlers to trap accesses to the PCI config space Date: Mon, 10 Jul 2017 13:27:24 +0000 Message-ID: References: <20170630150117.88489-1-roger.pau@citrix.com> <20170630150117.88489-2-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dUYim-0004Zs-C7 for xen-devel@lists.xenproject.org; Mon, 10 Jul 2017 13:27:28 +0000 In-Reply-To: <20170630150117.88489-2-roger.pau@citrix.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: "xen-devel@lists.xenproject.org" Cc: Wei Liu , Andrew Cooper , "julien.grall@arm.com" , Jan Beulich , Ian Jackson , "boris.ostrovsky@oracle.com" , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSb2dlciBQYXUgTW9ubmUgW21h aWx0bzpyb2dlci5wYXVAY2l0cml4LmNvbV0NCj4gU2VudDogMzAgSnVuZSAyMDE3IDE2OjAxDQo+ IFRvOiB4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gQ2M6IGJvcmlzLm9zdHJvdnNr eUBvcmFjbGUuY29tOyBqdWxpZW4uZ3JhbGxAYXJtLmNvbTsNCj4ga29ucmFkLndpbGtAb3JhY2xl LmNvbTsgUm9nZXIgUGF1IE1vbm5lIDxyb2dlci5wYXVAY2l0cml4LmNvbT47IElhbg0KPiBKYWNr c29uIDxJYW4uSmFja3NvbkBjaXRyaXguY29tPjsgV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNv bT47IEphbg0KPiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT47IEFuZHJldyBDb29wZXINCj4g PEFuZHJldy5Db29wZXIzQGNpdHJpeC5jb20+OyBQYXVsIER1cnJhbnQgPFBhdWwuRHVycmFudEBj aXRyaXguY29tPg0KPiBTdWJqZWN0OiBbUEFUQ0ggdjQgMS85XSB4ZW4vdnBjaTogaW50cm9kdWNl IGJhc2ljIGhhbmRsZXJzIHRvIHRyYXAgYWNjZXNzZXMNCj4gdG8gdGhlIFBDSSBjb25maWcgc3Bh Y2UNCj4gDQo+IFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBnb2luZyB0byByZXNpZGUgaW4gdnBjaS5j IChhbmQgdGhlIGNvcnJlc3BvbmRpbmcNCj4gdnBjaS5oIGhlYWRlciksIGFuZCBzaG91bGQgYmUg YXJjaC1hZ25vc3RpYy4gVGhlIGhhbmRsZXJzIGludHJvZHVjZWQNCj4gaW4gdGhpcyBwYXRjaCBz ZXR1cCB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBpbiBvcmRlciB0byB0cmFwDQo+ IGFjY2Vzc2VzIHRvIHRoZSBQQ0kgY29uZmlnIHNwYWNlLCBhbmQgYWxsb3cgZGVjb2RpbmcgdGhl IGFkZHJlc3MgYW5kDQo+IGZpbmRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgaGFuZGxlciB0aGF0IHNo b3VsZCBoYW5kbGUgdGhlIGFjY2Vzcw0KPiAoYWx0aG91Z2ggbm8gaGFuZGxlcnMgYXJlIGltcGxl bWVudGVkKS4NCj4gDQo+IE5vdGUgdGhhdCB0aGUgdHJhcHMgdG8gdGhlIFBDSSBJTyBwb3J0cyBy ZWdpc3RlcnMgKDB4Y2Y4LzB4Y2ZjKSBhcmUNCj4gc2V0dXAgaW5zaWRlIG9mIGEgeDg2IEhWTSBm aWxlLCBzaW5jZSB0aGF0J3Mgbm90IHNoYXJlZCB3aXRoIG90aGVyDQo+IGFyY2hlcy4NCj4gDQo+ IEEgbmV3IFhFTl9YODZfRU1VX1ZQQ0kgeDg2IGRvbWFpbiBmbGFnIGlzIGFkZGVkIGluIG9yZGVy IHRvIHNpZ25hbCBYZW4NCj4gd2hldGhlciBhIGRvbWFpbiBzaG91bGQgdXNlIHRoZSBuZXdseSBp bnRyb2R1Y2VkIHZQQ0kgaGFuZGxlcnMsIHRoaXMNCj4gaXMgb25seSBlbmFibGVkIGZvciBQVkgg RG9tMCBhdCB0aGUgbW9tZW50Lg0KPiANCj4gQSB2ZXJ5IHNpbXBsZSB1c2VyLXNwYWNlIHRlc3Qg aXMgYWxzbyBwcm92aWRlZCwgc28gdGhhdCB0aGUgYmFzaWMNCj4gZnVuY3Rpb25hbGl0eSBvZiB0 aGUgdlBDSSB0cmFwcyBjYW4gYmUgYXNzZXJ0ZWQuIFRoaXMgaGFzIGJlZW4gcHJvdmVuDQo+IHF1 aXRlIGhlbHBmdWwgZHVyaW5nIGRldmVsb3BtZW50LCBzaW5jZSB0aGUgbG9naWMgdG8gaGFuZGxl IHBhcnRpYWwNCj4gYWNjZXNzZXMgb3IgYWNjZXNzZXMgdGhhdCBleHBhbmQgYWNyb3NzIG11bHRp cGxlIHJlZ2lzdGVycyBpcyBub3QNCj4gdHJpdmlhbC4NCj4gDQo+IFRoZSBoYW5kbGVycyBmb3Ig dGhlIHJlZ2lzdGVycyBhcmUgYWRkZWQgdG8gYSBsaW5rZWQgbGlzdCB0aGF0J3Mga2VlcA0KPiBz b3J0ZWQgYXQgYWxsIHRpbWVzLiBCb3RoIHRoZSByZWFkIGFuZCB3cml0ZSBoYW5kbGVycyBzdXBw b3J0IGFjY2Vzc2VzDQo+IHRoYXQgZXhwYW5kIGFjcm9zcyBtdWx0aXBsZSBlbXVsYXRlZCByZWdp c3RlcnMgYW5kIGNvbnRhaW4gZ2FwcyBub3QNCj4gZW11bGF0ZWQuDQo+IA0KPiBTaWduZWQtb2Zm LWJ5OiBSb2dlciBQYXUgTW9ubsOpIDxyb2dlci5wYXVAY2l0cml4LmNvbT4NCj4gLS0tDQo+IENj OiBJYW4gSmFja3NvbiA8aWFuLmphY2tzb25AZXUuY2l0cml4LmNvbT4NCj4gQ2M6IFdlaSBMaXUg PHdlaS5saXUyQGNpdHJpeC5jb20+DQo+IENjOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5j b20+DQo+IENjOiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPg0KPiBD YzogUGF1bCBEdXJyYW50IDxwYXVsLmR1cnJhbnRAY2l0cml4LmNvbT4NCj4gLS0tDQo+IENoYW5n ZXMgc2luY2UgdjM6DQo+ICogVXNlci1zcGFjZSB0ZXN0IGhhcm5lc3M6DQo+ICAtIEZpeCBzcGFj ZXMgaW4gY29udGFpbmVyX29mIG1hY3JvLg0KPiAgLSBJbXBsZW1lbnQgYSBkdW1teSBsb2NraW5n IGZ1bmN0aW9ucy4NCj4gIC0gUmVtb3ZlICdjdXJyZW50JyBtYWNybyBtYWtlIGN1cnJlbnQgYSBw b2ludGVyIHRvIHRoZSBzdGF0aWNhbGx5DQo+ICAgIGFsbG9jYXRlZCB2cGN1Lg0KPiAgLSBSZW1v dmUgdW5uZWVkZWQgcGFyZW50aGVzZXMgaW4gdGhlIHBjaV9jb25mX3JlYWRYIG1hY3Jvcy4NCj4g IC0gRml4IHRoZSBuYW1lIG9mIHRoZSB3cml0ZSB0ZXN0IG1hY3JvLg0KPiAgLSBSZW1vdmUgdGhl IGR1bW15IEVYUE9SVF9TWU1CT0wgbWFjcm8gKHRoaXMgd2FzIG5lZWRlZCBieSB0aGUgUkINCj4g ICAgY29kZSBvbmx5KS4NCj4gIC0gSW1wb3J0IHRoZSBtYXggbWFjcm8uDQo+ICAtIFRlc3QgYWxs IHBvc3NpYmxlIHJlYWQvd3JpdGUgc2l6ZSBjb21iaW5hdGlvbnMgd2l0aCBhbGwgcG9zc2libGUN Cj4gICAgZW11bGF0ZWQgcmVnaXN0ZXIgc2l6ZXMuDQo+ICAtIEludHJvZHVjZSBhIHRlc3QgZm9y IHJlZ2lzdGVyIHJlbW92YWwuDQo+ICogSHlwZXJ2aXNvciBjb2RlOg0KPiAgLSBVc2UgYSBzb3J0 ZWQgbGlzdCBpbiBvcmRlciB0byBzdG9yZSB0aGUgY29uZmlnIHNwYWNlIGhhbmRsZXJzLg0KPiAg LSBSZW1vdmUgc29tZSB1bm5lZWRlZCAnZWxzZScgYnJhbmNoZXMuDQo+ICAtIE1ha2UgdGhlIElP IHBvcnQgaGFuZGxlcnMgYWx3YXlzIHJldHVybiBYODZFTVVMX09LQVksIGFuZCBzZXQgdGhlDQo+ ICAgIGRhdGEgdG8gYWxsIDEncyBpbiBjYXNlIG9mIHJlYWQgZmFpbHVyZSAod3JpdGUgYXJlIHNp bXBseSBpZ25vcmVkKS4NCj4gIC0gSW4gaHZtX3NlbGVjdF9pb3JlcV9zZXJ2ZXIgcmV1c2UgbG9j YWwgdmFyaWFibGVzIHdoZW4gY2FsbGluZw0KPiAgICBYRU5fRE1PUF9QQ0lfU0JERi4NCj4gIC0g U3RvcmUgdGhlIHBvaW50ZXJzIHRvIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgaW4gdGhl IC5yb2RhdGENCj4gICAgc2VjdGlvbi4NCj4gIC0gRG8gbm90IGlnbm9yZSB0aGUgcmV0dXJuIHZh bHVlIG9mIHhlbl92cGNpX2FkZF9oYW5kbGVycyBpbg0KPiAgICBzZXR1cF9vbmVfaHdkb21fZGV2 aWNlLg0KPiAgLSBSZW1vdmUgdGhlIHZwY2lfaW5pdCBtYWNyby4NCj4gIC0gRG8gbm90IGhpZGUg dGhlIHBvaW50ZXJzIGluc2lkZSBvZiB0aGUgdnBjaV97cmVhZC93cml0ZX1fdA0KPiAgICB0eXBl ZGVmcy4NCj4gIC0gUmVuYW1lIHByaXZfZGF0YSB0byBwcml2YXRlIGluIHZwY2lfcmVnaXN0ZXIu DQo+ICAtIFNpbXBsaWZ5IGNoZWNraW5nIGZvciByZWdpc3RlciBvdmVybGFwIGluIHZwY2lfcmVn aXN0ZXJfY21wLg0KPiAgLSBDaGVjayB0aGF0IHRoZSBvZmZzZXQgYW5kIHRoZSBsZW5ndGggbWF0 Y2ggYmVmb3JlIHJlbW92aW5nIGENCj4gICAgcmVnaXN0ZXIgaW4geGVuX3ZwY2lfcmVtb3ZlX3Jl Z2lzdGVyLg0KPiAgLSBNYWtlIHZwY2lfcmVhZF9odyByZXR1cm4gYSB2YWx1ZSByYXRoZXIgdGhh biBzdG9yaW5nIGl0IGluIGENCj4gICAgcG9pbnRlciBwYXNzZWQgYnkgcGFyYW1ldGVyLg0KPiAg LSBIYW5kbGVyIGRpc3BhdGNoZXIgZnVuY3Rpb25zIHZwY2lfe3JlYWQvd3JpdGV9IG5vIGxvbmdl ciByZXR1cm4gYW4NCj4gICAgZXJyb3IgY29kZSwgZXJyb3JzIG9uIHJlYWRzL3dyaXRlcyBzaG91 bGQgYmUgdHJlYXRlZCBsaWtlIGhhcmR3YXJlDQo+ICAgICh3cml0ZXMgaWdub3JlZCwgcmVhZHMg cmV0dXJuIGFsbCAxJ3Mgb3IgZ2FyYmFnZSkuDQo+ICAtIE1ha2Ugc3VyZSBwY2lkZXZzIGlzIGxv Y2tlZCBiZWZvcmUgY2FsbGluZyBwY2lfZ2V0X3BkZXZfYnlfZG9tYWluLg0KPiAgLSBVc2UgYSBy ZWN1cnNpdmUgc3BpbmxvY2sgZm9yIHRoZSB2cGNpIGxvY2ssIHNvIHRoYXQgc3Bpbl9pc19sb2Nr ZWQNCj4gICAgY2hlY2tzIHRoYXQgdGhlIGN1cnJlbnQgQ1BVIGlzIGhvbGRpbmcgdGhlIGxvY2su DQo+ICAtIE1ha2UgdGhlIGNvZGUgbGVzcyBlcnJvci1jaGF0dHkgYnkgcmVtb3Zpbmcgc29tZSBv ZiB0aGUgcHJpbnRrJ3MuDQo+ICAtIFBhc3MgdGhlIHNsb3QgYW5kIHRoZSBmdW5jdGlvbiBhcyBz ZXBhcmF0ZSBwYXJhbWV0ZXJzIHRvIHRoZQ0KPiAgICBoYW5kbGVyIGRpc3BhdGNoZXJzIChpbnN0 ZWFkIG9mIHBhc3NpbmcgZGV2Zm4pLg0KPiAgLSBBbGxvdyBoYW5kbGVycyB0byBiZSByZWdpc3Rl cmVkIHdpdGggZWl0aGVyIGEgcmVhZCBvciB3cml0ZQ0KPiAgICBmdW5jdGlvbiBvbmx5LCB0aGUg bWlzc2luZyBoYW5kbGVyIHdpbGwgYmUgcmVwbGFjZWQgYnkgYSBkdW1teQ0KPiAgICBoYW5kbGVy ICh3cml0ZXMgaWdub3JlZCwgcmVhZHMgcmV0dXJuIDEncykuDQo+ICAtIEludHJvZHVjZSBQQ0lf Q0ZHX1NQQUNFXyogZGVmaW5lcyBmcm9tIExpbnV4Lg0KPiAgLSBTaW1wbGlmeSB0aGUgaGFuZGxl ciBkaXNwYXRjaGVycyBieSByZW1vdmluZyB0aGUgcmVjdXJzaW9uLCBub3cgdGhlDQo+ICAgIGRp c3BhdGNoZXJzIGl0ZXJhdGUgb3ZlciB0aGUgbGlzdCBvZiBzb3J0ZWQgaGFuZGxlcnMgYW5kIGNh bGwgdGhlbQ0KPiAgICBpbiBvcmRlci4NCj4gIC0gUmVtb3ZlIHRoZSBHRU5NQVNLX0JZVEVTLCBT SElGVF9SSUdIVF9CWVRFUyBhbmQgQUREX1JFU1VMVA0KPiBtYWNyb3MsDQo+ICAgIGFuZCBpbnN0 ZWFkIHByb3ZpZGUgYSBtZXJnZV9yZXN1bHQgZnVuY3Rpb24gaW4gb3JkZXIgdG8gbWVyZ2UgYQ0K PiAgICByZWdpc3RlciBvdXRwdXQgaW50byBhIHBhcnRpYWwgcmVzdWx0Lg0KPiAgLSBSZW5hbWUg dGhlIGZpZWxkcyBvZiB0aGUgdnBjaV92YWwgdW5pb24gdG8gdTgvdTE2L3UzMi4NCj4gIC0gUmVt b3ZlIHRoZSByZXR1cm4gdmFsdWVzIGZyb20gdGhlIHJlYWQvd3JpdGUgaGFuZGxlcnMsIGVycm9y cw0KPiAgICBzaG91bGQgYmUgaGFuZGxlZCBpbnRlcm5hbGx5IGFuZCBzaWduYWxlZCBhcyB3b3Vs ZCBiZSBkb25lIG9uDQo+ICAgIG5hdGl2ZSBoYXJkd2FyZS4NCj4gIC0gUmVtb3ZlIHRoZSB1c2Fn ZSBvZiB0aGUgR0VOTUFTSyBtYWNyby4NCj4gDQo+IENoYW5nZXMgc2luY2UgdjI6DQo+ICAtIEdl bmVyYWxpemUgdGhlIFBDSSBhZGRyZXNzIGRlY29kaW5nIGFuZCB1c2UgaXQgZm9yIElPUkVRIGNv ZGUgYWxzby4NCj4gDQo+IENoYW5nZXMgc2luY2UgdjE6DQo+ICAtIEFsbG93IGFjY2VzcyB0byBj cm9zcyBhIHdvcmQtYm91bmRhcnkuDQo+ICAtIEFkZCBsb2NraW5nLg0KPiAgLSBBZGQgY2xlYW51 cCB0byB4ZW5fdnBjaV9hZGRfaGFuZGxlcnMgaW4gY2FzZSBvZiBmYWlsdXJlLg0KPiAtLS0NCltz bmlwXQ0KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3hlbi5sZHMuUyBiL3hlbi9hcmNoL2Fy bS94ZW4ubGRzLlMNCj4gaW5kZXggNDRiZDNiZjBjZS4uYTI0ZDhlOTEzYSAxMDA2NDQNCj4gLS0t IGEveGVuL2FyY2gvYXJtL3hlbi5sZHMuUw0KPiArKysgYi94ZW4vYXJjaC9hcm0veGVuLmxkcy5T DQo+IEBAIC00MSw2ICs0MSw5IEBAIFNFQ1RJT05TDQo+IA0KPiAgICAuID0gQUxJR04oUEFHRV9T SVpFKTsNCj4gICAgLnJvZGF0YSA6IHsNCj4gKyAgICAgICBfX3N0YXJ0X3ZwY2lfYXJyYXkgPSAu Ow0KPiArICAgICAgICooLnJvZGF0YS52cGNpKQ0KPiArICAgICAgIF9fZW5kX3ZwY2lfYXJyYXkg PSAuOw0KPiAgICAgICAgICBfc3JvZGF0YSA9IC47ICAgICAgICAgIC8qIFJlYWQtb25seSBkYXRh ICovDQo+ICAgICAgICAgIC8qIEJ1ZyBmcmFtZXMgdGFibGUgKi8NCj4gICAgICAgICBfX3N0YXJ0 X2J1Z19mcmFtZXMgPSAuOw0KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2RvbWFpbi5jIGIv eGVuL2FyY2gveDg2L2RvbWFpbi5jDQo+IGluZGV4IGY3ODczZGEzMjMuLjIzZTdkZjM4MzggMTAw NjQ0DQo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9kb21haW4uYw0KPiArKysgYi94ZW4vYXJjaC94ODYv ZG9tYWluLmMNCj4gQEAgLTM3NiwxMSArMzc2LDIxIEBAIHN0YXRpYyBib29sIGVtdWxhdGlvbl9m bGFnc19vayhjb25zdCBzdHJ1Y3QgZG9tYWluDQo+ICpkLCB1aW50MzJfdCBlbWZsYWdzKQ0KPiAg ICAgIGlmICggaXNfaHZtX2RvbWFpbihkKSApDQo+ICAgICAgew0KPiAgICAgICAgICBpZiAoIGlz X2hhcmR3YXJlX2RvbWFpbihkKSAmJg0KPiAtICAgICAgICAgICAgIGVtZmxhZ3MgIT0gKFhFTl9Y ODZfRU1VX0xBUElDfFhFTl9YODZfRU1VX0lPQVBJQykgKQ0KPiAtICAgICAgICAgICAgcmV0dXJu IGZhbHNlOw0KPiAtICAgICAgICBpZiAoICFpc19oYXJkd2FyZV9kb21haW4oZCkgJiYgZW1mbGFn cyAmJg0KPiAtICAgICAgICAgICAgIGVtZmxhZ3MgIT0gWEVOX1g4Nl9FTVVfQUxMICYmIGVtZmxh Z3MgIT0gWEVOX1g4Nl9FTVVfTEFQSUMgKQ0KPiArICAgICAgICAgICAgIGVtZmxhZ3MgIT0gKFhF Tl9YODZfRU1VX0xBUElDfFhFTl9YODZfRU1VX0lPQVBJQ3wNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICBYRU5fWDg2X0VNVV9WUENJKSApDQo+ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7 DQo+ICsgICAgICAgIGlmICggIWlzX2hhcmR3YXJlX2RvbWFpbihkKSApDQo+ICsgICAgICAgIHsN Cj4gKyAgICAgICAgICAgIHN3aXRjaCAoIGVtZmxhZ3MgKQ0KPiArICAgICAgICAgICAgew0KPiAr ICAgICAgICAgICAgY2FzZSBYRU5fWDg2X0VNVV9BTEwgJiB+WEVOX1g4Nl9FTVVfVlBDSToNCj4g KyAgICAgICAgICAgIGNhc2UgWEVOX1g4Nl9FTVVfTEFQSUM6DQo+ICsgICAgICAgICAgICBjYXNl IDA6DQo+ICsgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgICAgICBkZWZhdWx0Og0K PiArICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCj4gKyAgICAgICAgICAgIH0NCj4gKyAg ICAgICAgfQ0KDQpDYW4ndCB0aGUgaWYgYW5kIHRoZSBmb2xsb3dpbmcgc3dpdGNoIGJlIGNvbWJp bmVkPw0KDQo+ICAgICAgfQ0KPiAgICAgIGVsc2UgaWYgKCBlbWZsYWdzICE9IDAgJiYgZW1mbGFn cyAhPSBYRU5fWDg2X0VNVV9QSVQgKQ0KPiAgICAgIHsNCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNo L3g4Ni9odm0vaHZtLmMgYi94ZW4vYXJjaC94ODYvaHZtL2h2bS5jDQo+IGluZGV4IDNlZDZlYzQ2 OGQuLmM0MTc2ZWU0NTggMTAwNjQ0DQo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMNCj4g KysrIGIveGVuL2FyY2gveDg2L2h2bS9odm0uYw0KPiBAQCAtMzYsNiArMzYsNyBAQA0KPiAgI2lu Y2x1ZGUgPHhlbi9yYW5nZXNldC5oPg0KPiAgI2luY2x1ZGUgPHhlbi9tb25pdG9yLmg+DQo+ICAj aW5jbHVkZSA8eGVuL3dhcm5pbmcuaD4NCj4gKyNpbmNsdWRlIDx4ZW4vdnBjaS5oPg0KPiAgI2lu Y2x1ZGUgPGFzbS9zaGFkb3cuaD4NCj4gICNpbmNsdWRlIDxhc20vaGFwLmg+DQo+ICAjaW5jbHVk ZSA8YXNtL2N1cnJlbnQuaD4NCj4gQEAgLTYzMCw2ICs2MzEsNyBAQCBpbnQgaHZtX2RvbWFpbl9p bml0aWFsaXNlKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkDQo+IGxvbmcgZG9tY3JfZmxhZ3Ms DQo+ICAgICAgICAgIGQtPmFyY2guaHZtX2RvbWFpbi5pb19iaXRtYXAgPSBodm1faW9fYml0bWFw Ow0KPiANCj4gICAgICByZWdpc3Rlcl9nMm1fcG9ydGlvX2hhbmRsZXIoZCk7DQo+ICsgICAgcmVn aXN0ZXJfdnBjaV9wb3J0aW9faGFuZGxlcihkKTsNCj4gDQo+ICAgICAgaHZtX2lvcmVxX2luaXQo ZCk7DQo+IA0KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS9pby5jIGIveGVuL2FyY2gv eDg2L2h2bS9pby5jDQo+IGluZGV4IDIxNGFiMzA3YzQuLjRlOTFhNDg1Y2QgMTAwNjQ0DQo+IC0t LSBhL3hlbi9hcmNoL3g4Ni9odm0vaW8uYw0KPiArKysgYi94ZW4vYXJjaC94ODYvaHZtL2lvLmMN Cj4gQEAgLTI1LDYgKzI1LDcgQEANCj4gICNpbmNsdWRlIDx4ZW4vdHJhY2UuaD4NCj4gICNpbmNs dWRlIDx4ZW4vZXZlbnQuaD4NCj4gICNpbmNsdWRlIDx4ZW4vaHlwZXJjYWxsLmg+DQo+ICsjaW5j bHVkZSA8eGVuL3ZwY2kuaD4NCj4gICNpbmNsdWRlIDxhc20vY3VycmVudC5oPg0KPiAgI2luY2x1 ZGUgPGFzbS9jcHVmZWF0dXJlLmg+DQo+ICAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPg0KPiBA QCAtMjU2LDYgKzI1NywxNDcgQEAgdm9pZCByZWdpc3Rlcl9nMm1fcG9ydGlvX2hhbmRsZXIoc3Ry dWN0IGRvbWFpbg0KPiAqZCkNCj4gICAgICBoYW5kbGVyLT5vcHMgPSAmZzJtX3BvcnRpb19vcHM7 DQo+ICB9DQo+IA0KPiArLyogRG8gc29tZSBzYW5pdHkgY2hlY2tzLiAqLw0KPiArc3RhdGljIGlu dCB2cGNpX2FjY2Vzc19jaGVjayh1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgbGVuKQ0K PiArew0KPiArICAgIC8qIENoZWNrIGFjY2VzcyBzaXplLiAqLw0KPiArICAgIGlmICggbGVuICE9 IDEgJiYgbGVuICE9IDIgJiYgbGVuICE9IDQgKQ0KPiArICAgICAgICByZXR1cm4gLUVJTlZBTDsN Cj4gKw0KPiArICAgIC8qIENoZWNrIGlmIGFjY2VzcyBjcm9zc2VzIGEgZG91YmxlLXdvcmQgYm91 bmRhcnkuICovDQo+ICsgICAgaWYgKCAocmVnICYgMykgKyBsZW4gPiA0ICkNCj4gKyAgICAgICAg cmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKyAgICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyog SGVscGVyIHRvIGRlY29kZSBhIFBDSSBhZGRyZXNzLiAqLw0KPiArdm9pZCBodm1fcGNpX2RlY29k ZV9hZGRyKHVuc2lnbmVkIGludCBjZjgsIHVuc2lnbmVkIGludCBhZGRyLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqYnVzLCB1bnNpZ25lZCBpbnQgKnNsb3QsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpmdW5jLCB1bnNpZ25lZCBp bnQgKnJlZykNCj4gK3sNCj4gKyAgICB1bnNpZ25lZCBsb25nIGJkZjsNCj4gKw0KPiArICAgIEFT U0VSVChDRjhfRU5BQkxFRChjZjgpKTsNCj4gKw0KPiArICAgIGJkZiA9IENGOF9CREYoY2Y4KTsN Cj4gKyAgICAqYnVzID0gUENJX0JVUyhiZGYpOw0KPiArICAgICpzbG90ID0gUENJX1NMT1QoYmRm KTsNCj4gKyAgICAqZnVuYyA9IFBDSV9GVU5DKGJkZik7DQo+ICsgICAgLyoNCj4gKyAgICAgKiBO QjogdGhlIGxvd2VyIDIgYml0cyBvZiB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBhcmUgZmV0Y2hlZCBm cm9tIHRoZQ0KPiArICAgICAqIG9mZnNldCBpbnRvIHRoZSAweGNmYyByZWdpc3RlciB3aGVuIHJl YWRpbmcvd3JpdGluZyB0byBpdC4NCj4gKyAgICAgKi8NCj4gKyAgICAqcmVnID0gQ0Y4X0FERFJf TE8oY2Y4KSB8IChhZGRyICYgMyk7DQo+ICt9DQo+ICsNCj4gKy8qIHZQQ0kgY29uZmlnIHNwYWNl IElPIHBvcnRzIGhhbmRsZXJzICgweGNmOC8weGNmYykuICovDQo+ICtzdGF0aWMgYm9vbCB2cGNp X3BvcnRpb19hY2NlcHQoY29uc3Qgc3RydWN0IGh2bV9pb19oYW5kbGVyICpoYW5kbGVyLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlvcmVxX3QgKnApDQo+ICt7DQo+ ICsgICAgcmV0dXJuIChwLT5hZGRyID09IDB4Y2Y4ICYmIHAtPnNpemUgPT0gNCkgfHwgKHAtPmFk ZHIgJiAweGZmZmMpID09IDB4Y2ZjOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHZwY2lfcG9y dGlvX3JlYWQoY29uc3Qgc3RydWN0IGh2bV9pb19oYW5kbGVyICpoYW5kbGVyLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IHNpemUsIHVpbnQ2 NF90ICpkYXRhKQ0KPiArew0KPiArICAgIHN0cnVjdCBkb21haW4gKmQgPSBjdXJyZW50LT5kb21h aW47DQo+ICsgICAgdW5zaWduZWQgaW50IGJ1cywgc2xvdCwgZnVuYywgcmVnOw0KPiArDQo+ICsg ICAgKmRhdGEgPSB+KHVpbnQ2NF90KTA7DQo+ICsNCj4gKyAgICB2cGNpX2xvY2soZCk7DQo+ICsg ICAgaWYgKCBhZGRyID09IDB4Y2Y4ICkNCj4gKyAgICB7DQo+ICsgICAgICAgIEFTU0VSVChzaXpl ID09IDQpOw0KPiArICAgICAgICAqZGF0YSA9IGQtPmFyY2guaHZtX2RvbWFpbi5wY2lfY2Y4Ow0K PiArICAgICAgICB2cGNpX3VubG9jayhkKTsNCj4gKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tB WTsNCj4gKyAgICB9DQo+ICsgICAgaWYgKCAhQ0Y4X0VOQUJMRUQoZC0+YXJjaC5odm1fZG9tYWlu LnBjaV9jZjgpICkNCj4gKyAgICB7DQo+ICsgICAgICAgIHZwY2lfdW5sb2NrKGQpOw0KPiArICAg ICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOw0KPiArICAgIH0NCj4gKw0KPiArICAgIC8qIERlY29k ZSB0aGUgUENJIGFkZHJlc3MuICovDQo+ICsgICAgaHZtX3BjaV9kZWNvZGVfYWRkcihkLT5hcmNo Lmh2bV9kb21haW4ucGNpX2NmOCwgYWRkciwgJmJ1cywgJnNsb3QsDQo+ICZmdW5jLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgJnJlZyk7DQo+ICsNCj4gKyAgICBpZiAoIHZwY2lfYWNjZXNz X2NoZWNrKHJlZywgc2l6ZSkgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgdnBjaV91bmxvY2soZCk7 DQo+ICsgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAg cGNpZGV2c19sb2NrKCk7DQo+ICsgICAgKmRhdGEgPSB2cGNpX3JlYWQoMCwgYnVzLCBzbG90LCBm dW5jLCByZWcsIHNpemUpOw0KPiArICAgIHBjaWRldnNfdW5sb2NrKCk7DQo+ICsgICAgdnBjaV91 bmxvY2soZCk7DQo+ICsNCj4gKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IHZwY2lfcG9ydGlvX3dyaXRlKGNvbnN0IHN0cnVjdCBodm1faW9faGFuZGxl ciAqaGFuZGxlciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgYWRk ciwgdWludDMyX3Qgc2l6ZSwgdWludDY0X3QgZGF0YSkNCj4gK3sNCj4gKyAgICBzdHJ1Y3QgZG9t YWluICpkID0gY3VycmVudC0+ZG9tYWluOw0KPiArICAgIHVuc2lnbmVkIGludCBidXMsIHNsb3Qs IGZ1bmMsIHJlZzsNCj4gKw0KPiArICAgIHZwY2lfbG9jayhkKTsNCj4gKyAgICBpZiAoIGFkZHIg PT0gMHhjZjggKQ0KPiArICAgIHsNCj4gKyAgICAgICAgQVNTRVJUKHNpemUgPT0gNCk7DQo+ICsg ICAgICAgIGQtPmFyY2guaHZtX2RvbWFpbi5wY2lfY2Y4ID0gZGF0YTsNCj4gKyAgICAgICAgdnBj aV91bmxvY2soZCk7DQo+ICsgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7DQo+ICsgICAgfQ0K PiArICAgIGlmICggIUNGOF9FTkFCTEVEKGQtPmFyY2guaHZtX2RvbWFpbi5wY2lfY2Y4KSApDQo+ ICsgICAgew0KPiArICAgICAgICB2cGNpX3VubG9jayhkKTsNCj4gKyAgICAgICAgcmV0dXJuIFg4 NkVNVUxfT0tBWTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvKiBEZWNvZGUgdGhlIFBDSSBhZGRy ZXNzLiAqLw0KPiArICAgIGh2bV9wY2lfZGVjb2RlX2FkZHIoZC0+YXJjaC5odm1fZG9tYWluLnBj aV9jZjgsIGFkZHIsICZidXMsICZzbG90LA0KPiAmZnVuYywNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICZyZWcpOw0KPiArDQo+ICsgICAgaWYgKCB2cGNpX2FjY2Vzc19jaGVjayhyZWcsIHNp emUpICkNCj4gKyAgICB7DQo+ICsgICAgICAgIHZwY2lfdW5sb2NrKGQpOw0KPiArICAgICAgICBy ZXR1cm4gWDg2RU1VTF9PS0FZOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHBjaWRldnNfbG9jaygp Ow0KPiArICAgIHZwY2lfd3JpdGUoMCwgYnVzLCBzbG90LCBmdW5jLCByZWcsIHNpemUsIGRhdGEp Ow0KPiArICAgIHBjaWRldnNfdW5sb2NrKCk7DQo+ICsgICAgdnBjaV91bmxvY2soZCk7DQo+ICsN Cj4gKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGh2bV9pb19vcHMgdnBjaV9wb3J0aW9fb3BzID0gew0KPiArICAgIC5hY2NlcHQgPSB2 cGNpX3BvcnRpb19hY2NlcHQsDQo+ICsgICAgLnJlYWQgPSB2cGNpX3BvcnRpb19yZWFkLA0KPiAr ICAgIC53cml0ZSA9IHZwY2lfcG9ydGlvX3dyaXRlLA0KPiArfTsNCj4gKw0KPiArdm9pZCByZWdp c3Rlcl92cGNpX3BvcnRpb19oYW5kbGVyKHN0cnVjdCBkb21haW4gKmQpDQo+ICt7DQo+ICsgICAg c3RydWN0IGh2bV9pb19oYW5kbGVyICpoYW5kbGVyOw0KPiArDQo+ICsgICAgaWYgKCAhaGFzX3Zw Y2koZCkgKQ0KPiArICAgICAgICByZXR1cm47DQo+ICsNCj4gKyAgICBoYW5kbGVyID0gaHZtX25l eHRfaW9faGFuZGxlcihkKTsNCj4gKyAgICBpZiAoICFoYW5kbGVyICkNCj4gKyAgICAgICAgcmV0 dXJuOw0KPiArDQo+ICsgICAgc3Bpbl9sb2NrX2luaXQoJmQtPmFyY2guaHZtX2RvbWFpbi52cGNp X2xvY2spOw0KPiArICAgIGhhbmRsZXItPnR5cGUgPSBJT1JFUV9UWVBFX1BJTzsNCj4gKyAgICBo YW5kbGVyLT5vcHMgPSAmdnBjaV9wb3J0aW9fb3BzOw0KPiArfQ0KPiArDQo+ICAvKg0KPiAgICog TG9jYWwgdmFyaWFibGVzOg0KPiAgICogbW9kZTogQw0KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gv eDg2L2h2bS9pb3JlcS5jIGIveGVuL2FyY2gveDg2L2h2bS9pb3JlcS5jDQo+IGluZGV4IGIyYThi MGU5ODYuLjcyNmM1YzBjMzYgMTAwNjQ0DQo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vaW9yZXEu Yw0KPiArKysgYi94ZW4vYXJjaC94ODYvaHZtL2lvcmVxLmMNCj4gQEAgLTExNzgsMTggKzExNzgs MTYgQEAgc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXINCj4gKmh2bV9zZWxlY3RfaW9yZXFfc2VydmVy KHN0cnVjdCBkb21haW4gKmQsDQo+ICAgICAgICAgICBDRjhfRU5BQkxFRChjZjgpICkNCj4gICAg ICB7DQo+ICAgICAgICAgIHVpbnQzMl90IHNiZGYsIHg4Nl9mYW07DQo+ICsgICAgICAgIHVuc2ln bmVkIGludCBidXMsIHNsb3QsIGZ1bmMsIHJlZzsNCj4gKw0KPiArICAgICAgICBodm1fcGNpX2Rl Y29kZV9hZGRyKGNmOCwgcC0+YWRkciwgJmJ1cywgJnNsb3QsICZmdW5jLCAmcmVnKTsNCj4gDQo+ ICAgICAgICAgIC8qIFBDSSBjb25maWcgZGF0YSBjeWNsZSAqLw0KPiANCj4gLSAgICAgICAgc2Jk ZiA9IFhFTl9ETU9QX1BDSV9TQkRGKDAsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQQ0lfQlVTKENGOF9CREYoY2Y4KSksDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQQ0lfU0xPVChDRjhfQkRGKGNmOCkpLA0KPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUENJX0ZVTkMoQ0Y4X0JERihjZjgpKSk7DQo+ICsgICAgICAgIHNiZGYgPSBY RU5fRE1PUF9QQ0lfU0JERigwLCBidXMsIHNsb3QsIGZ1bmMpOw0KPiANCj4gICAgICAgICAgdHlw ZSA9IFhFTl9ETU9QX0lPX1JBTkdFX1BDSTsNCj4gLSAgICAgICAgYWRkciA9ICgodWludDY0X3Qp c2JkZiA8PCAzMikgfA0KPiAtICAgICAgICAgICAgICAgQ0Y4X0FERFJfTE8oY2Y4KSB8DQo+IC0g ICAgICAgICAgICAgICAocC0+YWRkciAmIDMpOw0KPiArICAgICAgICBhZGRyID0gKCh1aW50NjRf dClzYmRmIDw8IDMyKSB8IHJlZzsNCj4gICAgICAgICAgLyogQU1EIGV4dGVuZGVkIGNvbmZpZ3Vy YXRpb24gc3BhY2UgYWNjZXNzPyAqLw0KPiAgICAgICAgICBpZiAoIENGOF9BRERSX0hJKGNmOCkg JiYNCj4gICAgICAgICAgICAgICBkLT5hcmNoLmNwdWlkLT54ODZfdmVuZG9yID09IFg4Nl9WRU5E T1JfQU1EICYmDQo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvc2V0dXAuYyBiL3hlbi9hcmNo L3g4Ni9zZXR1cC5jDQo+IGluZGV4IGY3YjkyNzg1OGMuLjRjZjkxOWYyMDYgMTAwNjQ0DQo+IC0t LSBhL3hlbi9hcmNoL3g4Ni9zZXR1cC5jDQo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9zZXR1cC5jDQo+ IEBAIC0xNTY2LDcgKzE1NjYsOCBAQCB2b2lkIF9faW5pdCBub3JldHVybiBfX3N0YXJ0X3hlbih1 bnNpZ25lZCBsb25nDQo+IG1iaV9wKQ0KPiAgICAgICAgICBkb21jcl9mbGFncyB8PSBET01DUkZf aHZtIHwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgKChodm1fZnVuY3MuaGFwX3N1cHBvcnRl ZCAmJiAhb3B0X2RvbTBfc2hhZG93KSA/DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9N Q1JGX2hhcCA6IDApOw0KPiAtICAgICAgICBjb25maWcuZW11bGF0aW9uX2ZsYWdzID0NCj4gWEVO X1g4Nl9FTVVfTEFQSUN8WEVOX1g4Nl9FTVVfSU9BUElDOw0KPiArICAgICAgICBjb25maWcuZW11 bGF0aW9uX2ZsYWdzID0NCj4gWEVOX1g4Nl9FTVVfTEFQSUN8WEVOX1g4Nl9FTVVfSU9BUElDfA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVOX1g4Nl9FTVVfVlBDSTsNCj4g ICAgICB9DQo+IA0KPiAgICAgIC8qIENyZWF0ZSBpbml0aWFsIGRvbWFpbiAwLiAqLw0KPiBkaWZm IC0tZ2l0IGEveGVuL2FyY2gveDg2L3hlbi5sZHMuUyBiL3hlbi9hcmNoL3g4Ni94ZW4ubGRzLlMN Cj4gaW5kZXggODI4OWExYmYwOS4uNDUxZTc5NzBkYSAxMDA2NDQNCj4gLS0tIGEveGVuL2FyY2gv eDg2L3hlbi5sZHMuUw0KPiArKysgYi94ZW4vYXJjaC94ODYveGVuLmxkcy5TDQo+IEBAIC03Niw2 ICs3Niw5IEBAIFNFQ1RJT05TDQo+IA0KPiAgICBfXzJNX3JvZGF0YV9zdGFydCA9IC47ICAgICAg IC8qIFN0YXJ0IG9mIDJNIHN1cGVycGFnZXMsIG1hcHBlZCBSTy4gKi8NCj4gICAgLnJvZGF0YSA6 IHsNCj4gKyAgICAgICBfX3N0YXJ0X3ZwY2lfYXJyYXkgPSAuOw0KPiArICAgICAgICooLnJvZGF0 YS52cGNpKQ0KPiArICAgICAgIF9fZW5kX3ZwY2lfYXJyYXkgPSAuOw0KPiAgICAgICAgIF9zcm9k YXRhID0gLjsNCj4gICAgICAgICAvKiBCdWcgZnJhbWVzIHRhYmxlICovDQo+ICAgICAgICAgX19z dGFydF9idWdfZnJhbWVzID0gLjsNCj4gZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL01ha2VmaWxl IGIveGVuL2RyaXZlcnMvTWFrZWZpbGUNCj4gaW5kZXggMTkzOTE4MDJhOC4uZDUxYzc2NjQ1MyAx MDA2NDQNCj4gLS0tIGEveGVuL2RyaXZlcnMvTWFrZWZpbGUNCj4gKysrIGIveGVuL2RyaXZlcnMv TWFrZWZpbGUNCj4gQEAgLTEsNiArMSw2IEBADQo+ICBzdWJkaXIteSArPSBjaGFyDQo+ICBzdWJk aXItJChDT05GSUdfSEFTX0NQVUZSRVEpICs9IGNwdWZyZXENCj4gLXN1YmRpci0kKENPTkZJR19I QVNfUENJKSArPSBwY2kNCj4gK3N1YmRpci0kKENPTkZJR19IQVNfUENJKSArPSBwY2kgdnBjaQ0K PiAgc3ViZGlyLSQoQ09ORklHX0hBU19QQVNTVEhST1VHSCkgKz0gcGFzc3Rocm91Z2gNCj4gIHN1 YmRpci0kKENPTkZJR19BQ1BJKSArPSBhY3BpDQo+ICBzdWJkaXItJChDT05GSUdfVklERU8pICs9 IHZpZGVvDQo+IGRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9wY2kuYyBiL3hl bi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3BjaS5jDQo+IGluZGV4IDZlNzEyNmIyZTguLjMyMDhjZDVk NzEgMTAwNjQ0DQo+IC0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3BjaS5jDQo+ICsrKyBi L3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3BjaS5jDQo+IEBAIC0zMCw2ICszMCw3IEBADQo+ICAj aW5jbHVkZSA8eGVuL3JhZGl4LXRyZWUuaD4NCj4gICNpbmNsdWRlIDx4ZW4vc29mdGlycS5oPg0K PiAgI2luY2x1ZGUgPHhlbi90YXNrbGV0Lmg+DQo+ICsjaW5jbHVkZSA8eGVuL3ZwY2kuaD4NCj4g ICNpbmNsdWRlIDx4c20veHNtLmg+DQo+ICAjaW5jbHVkZSA8YXNtL21zaS5oPg0KPiAgI2luY2x1 ZGUgImF0cy5oIg0KPiBAQCAtMTAyNiw5ICsxMDI3LDEwIEBAIHN0YXRpYyB2b2lkIHNldHVwX29u ZV9od2RvbV9kZXZpY2UoY29uc3QNCj4gc3RydWN0IHNldHVwX2h3ZG9tICpjdHh0LA0KPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQ0KPiAg ew0KPiAgICAgIHU4IGRldmZuID0gcGRldi0+ZGV2Zm47DQo+ICsgICAgaW50IGVycjsNCj4gDQo+ ICAgICAgZG8gew0KPiAtICAgICAgICBpbnQgZXJyID0gY3R4dC0+aGFuZGxlcihkZXZmbiwgcGRl dik7DQo+ICsgICAgICAgIGVyciA9IGN0eHQtPmhhbmRsZXIoZGV2Zm4sIHBkZXYpOw0KPiANCj4g ICAgICAgICAgaWYgKCBlcnIgKQ0KPiAgICAgICAgICB7DQo+IEBAIC0xMDQxLDYgKzEwNDMsMTEg QEAgc3RhdGljIHZvaWQgc2V0dXBfb25lX2h3ZG9tX2RldmljZShjb25zdA0KPiBzdHJ1Y3Qgc2V0 dXBfaHdkb20gKmN0eHQsDQo+ICAgICAgICAgIGRldmZuICs9IHBkZXYtPnBoYW50b21fc3RyaWRl Ow0KPiAgICAgIH0gd2hpbGUgKCBkZXZmbiAhPSBwZGV2LT5kZXZmbiAmJg0KPiAgICAgICAgICAg ICAgICBQQ0lfU0xPVChkZXZmbikgPT0gUENJX1NMT1QocGRldi0+ZGV2Zm4pICk7DQo+ICsNCj4g KyAgICBlcnIgPSB2cGNpX2FkZF9oYW5kbGVycyhwZGV2KTsNCj4gKyAgICBpZiAoIGVyciApDQo+ ICsgICAgICAgIHByaW50ayhYRU5MT0dfRVJSICJzZXR1cCBvZiB2UENJIGZvciBkJWQgZmFpbGVk OiAlZFxuIiwNCj4gKyAgICAgICAgICAgICAgIGN0eHQtPmQtPmRvbWFpbl9pZCwgZXJyKTsNCj4g IH0NCj4gDQo+ICBzdGF0aWMgaW50IF9faHdkb21faW5pdCBfc2V0dXBfaHdkb21fcGNpX2Rldmlj ZXMoc3RydWN0IHBjaV9zZWcgKnBzZWcsDQo+IHZvaWQgKmFyZykNCj4gZGlmZiAtLWdpdCBhL3hl bi9kcml2ZXJzL3ZwY2kvTWFrZWZpbGUgYi94ZW4vZHJpdmVycy92cGNpL01ha2VmaWxlDQo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjg0MGE5MDY0NzANCj4gLS0t IC9kZXYvbnVsbA0KPiArKysgYi94ZW4vZHJpdmVycy92cGNpL01ha2VmaWxlDQo+IEBAIC0wLDAg KzEgQEANCj4gK29iai15ICs9IHZwY2kubw0KPiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvdnBj aS92cGNpLmMgYi94ZW4vZHJpdmVycy92cGNpL3ZwY2kuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5jNTRkZTgzYjgyDQo+IC0tLSAvZGV2L251bGwNCj4gKysr IGIveGVuL2RyaXZlcnMvdnBjaS92cGNpLmMNCj4gQEAgLTAsMCArMSw0MDUgQEANCj4gKy8qDQo+ ICsgKiBHZW5lcmljIGZ1bmN0aW9uYWxpdHkgZm9yIGhhbmRsaW5nIGFjY2Vzc2VzIHRvIHRoZSBQ Q0kgY29uZmlndXJhdGlvbiBzcGFjZQ0KPiArICogZnJvbSBndWVzdHMuDQo+ICsgKg0KPiArICog Q29weXJpZ2h0IChDKSAyMDE3IENpdHJpeCBTeXN0ZW1zIFImRA0KPiArICoNCj4gKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IN Cj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYw0KPiArICogTGljZW5zZSwgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4NCj4gKyAqDQo+ICsgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCj4g KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mDQo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlDQo+IEdOVQ0KPiArICogR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLg0KPiArICoNCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KPiArICogTGljZW5zZSBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUNCj4gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+Lg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4NCj4gKyNpbmNs dWRlIDx4ZW4vdnBjaS5oPg0KPiArDQo+ICtleHRlcm4gY29uc3QgdnBjaV9yZWdpc3Rlcl9pbml0 X3QgX19zdGFydF92cGNpX2FycmF5W10sIF9fZW5kX3ZwY2lfYXJyYXlbXTsNCj4gKyNkZWZpbmUg TlVNX1ZQQ0lfSU5JVCAoX19lbmRfdnBjaV9hcnJheSAtIF9fc3RhcnRfdnBjaV9hcnJheSkNCj4g Kw0KPiArLyogSW50ZXJuYWwgc3RydWN0IHRvIHN0b3JlIHRoZSBlbXVsYXRlZCBQQ0kgcmVnaXN0 ZXJzLiAqLw0KPiArc3RydWN0IHZwY2lfcmVnaXN0ZXIgew0KPiArICAgIHZwY2lfcmVhZF90ICpy ZWFkOw0KPiArICAgIHZwY2lfd3JpdGVfdCAqd3JpdGU7DQo+ICsgICAgdW5zaWduZWQgaW50IHNp emU7DQo+ICsgICAgdW5zaWduZWQgaW50IG9mZnNldDsNCj4gKyAgICB2b2lkICpwcml2YXRlOw0K PiArICAgIHN0cnVjdCBsaXN0X2hlYWQgbm9kZTsNCj4gK307DQo+ICsNCj4gK2ludCBfX2h3ZG9t X2luaXQgdnBjaV9hZGRfaGFuZGxlcnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpDQo+ICt7DQo+ICsg ICAgdW5zaWduZWQgaW50IGk7DQo+ICsgICAgaW50IHJjID0gMDsNCj4gKw0KPiArICAgIGlmICgg IWhhc192cGNpKHBkZXYtPmRvbWFpbikgKQ0KPiArICAgICAgICByZXR1cm4gMDsNCj4gKw0KPiAr ICAgIHBkZXYtPnZwY2kgPSB4emFsbG9jKHN0cnVjdCB2cGNpKTsNCj4gKyAgICBpZiAoICFwZGV2 LT52cGNpICkNCj4gKyAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKyAgICBJTklUX0xJ U1RfSEVBRCgmcGRldi0+dnBjaS0+aGFuZGxlcnMpOw0KPiArDQo+ICsgICAgZm9yICggaSA9IDA7 IGkgPCBOVU1fVlBDSV9JTklUOyBpKysgKQ0KPiArICAgIHsNCj4gKyAgICAgICAgcmMgPSBfX3N0 YXJ0X3ZwY2lfYXJyYXlbaV0ocGRldik7DQo+ICsgICAgICAgIGlmICggcmMgKQ0KPiArICAgICAg ICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKCByYyApDQo+ICsgICAgew0K PiArICAgICAgICB3aGlsZSAoICFsaXN0X2VtcHR5KCZwZGV2LT52cGNpLT5oYW5kbGVycykgKQ0K PiArICAgICAgICB7DQo+ICsgICAgICAgICAgICBzdHJ1Y3QgdnBjaV9yZWdpc3RlciAqciA9IGxp c3RfZmlyc3RfZW50cnkoJnBkZXYtPnZwY2ktPmhhbmRsZXJzLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cGNpX3JlZ2lz dGVyLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5vZGUpOw0KPiArDQo+ICsgICAgICAgICAgICBsaXN0X2RlbCgmci0+bm9kZSk7DQo+ ICsgICAgICAgICAgICB4ZnJlZShyKTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICB4ZnJlZShw ZGV2LT52cGNpKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gcmM7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgdnBjaV9yZWdpc3Rlcl9jbXAoY29uc3Qgc3RydWN0IHZwY2lfcmVnaXN0 ZXIgKnIxLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdnBj aV9yZWdpc3RlciAqcjIpDQo+ICt7DQo+ICsgICAgLyogUmV0dXJuIDAgaWYgcmVnaXN0ZXJzIG92 ZXJsYXAuICovDQo+ICsgICAgaWYgKCByMS0+b2Zmc2V0IDwgcjItPm9mZnNldCArIHIyLT5zaXpl ICYmDQo+ICsgICAgICAgICByMi0+b2Zmc2V0IDwgcjEtPm9mZnNldCArIHIxLT5zaXplICkNCj4g KyAgICAgICAgcmV0dXJuIDA7DQo+ICsgICAgaWYgKCByMS0+b2Zmc2V0IDwgcjItPm9mZnNldCAp DQo+ICsgICAgICAgIHJldHVybiAtMTsNCj4gKyAgICBpZiAoIHIxLT5vZmZzZXQgPiByMi0+b2Zm c2V0ICkNCj4gKyAgICAgICAgcmV0dXJuIDE7DQo+ICsNCj4gKyAgICBBU1NFUlRfVU5SRUFDSEFC TEUoKTsNCj4gKyAgICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyogRHVtbXkgaG9va3MsIHdy aXRlcyBhcmUgaWdub3JlZCwgcmVhZHMgcmV0dXJuIDEncyAqLw0KPiArc3RhdGljIHZvaWQgdnBj aV9pZ25vcmVkX3JlYWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCByZWcsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiB2cGNpX3ZhbCAqdmFsLCB2b2lk ICpkYXRhKQ0KPiArew0KPiArICAgIHZhbC0+dTMyID0gfih1aW50MzJfdCkwOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZCB2cGNpX2lnbm9yZWRfd3JpdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYs IHVuc2lnbmVkIGludCByZWcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5p b24gdnBjaV92YWwgdmFsLCB2b2lkICpkYXRhKQ0KPiArew0KPiArfQ0KPiArDQo+ICtpbnQgdnBj aV9hZGRfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZwY2lfcmVhZF90DQo+ IHJlYWRfaGFuZGxlciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICB2cGNpX3dyaXRlX3Qgd3Jp dGVfaGFuZGxlciwgdW5zaWduZWQgaW50IG9mZnNldCwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgc2l6ZSwgdm9pZCAqZGF0YSkNCj4gK3sNCj4gKyAgICBzdHJ1Y3QgbGlz dF9oZWFkICpoZWFkOw0KPiArICAgIHN0cnVjdCB2cGNpX3JlZ2lzdGVyICpyOw0KPiArDQo+ICsg ICAgLyogU29tZSBzYW5pdHkgY2hlY2tzLiAqLw0KPiArICAgIGlmICggKHNpemUgIT0gMSAmJiBz aXplICE9IDIgJiYgc2l6ZSAhPSA0KSB8fA0KPiArICAgICAgICAgb2Zmc2V0ID49IFBDSV9DRkdf U1BBQ0VfRVhQX1NJWkUgfHwgb2Zmc2V0ICYgKHNpemUgLSAxKSB8fA0KPiArICAgICAgICAgKHJl YWRfaGFuZGxlciA9PSBOVUxMICYmIHdyaXRlX2hhbmRsZXIgPT0gTlVMTCkgKQ0KPiArICAgICAg ICByZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArICAgIHIgPSB4bWFsbG9jKHN0cnVjdCB2cGNpX3Jl Z2lzdGVyKTsNCj4gKyAgICBpZiAoICFyICkNCj4gKyAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ ICsNCj4gKyAgICByLT5yZWFkID0gcmVhZF9oYW5kbGVyID86IHZwY2lfaWdub3JlZF9yZWFkOw0K PiArICAgIHItPndyaXRlID0gd3JpdGVfaGFuZGxlciA/OiB2cGNpX2lnbm9yZWRfd3JpdGU7DQo+ ICsgICAgci0+c2l6ZSA9IHNpemU7DQo+ICsgICAgci0+b2Zmc2V0ID0gb2Zmc2V0Ow0KPiArICAg IHItPnByaXZhdGUgPSBkYXRhOw0KPiArDQo+ICsgICAgdnBjaV9sb2NrKHBkZXYtPmRvbWFpbik7 DQo+ICsNCj4gKyAgICAvKiBUaGUgbGlzdCBvZiBoYW5kbGVycyBtdXN0IGJlIGtlZXAgc29ydGVk IGF0IGFsbCB0aW1lcy4gKi8NCj4gKyAgICBsaXN0X2Zvcl9lYWNoICggaGVhZCwgJnBkZXYtPnZw Y2ktPmhhbmRsZXJzICkNCj4gKyAgICB7DQo+ICsgICAgICAgIGNvbnN0IHN0cnVjdCB2cGNpX3Jl Z2lzdGVyICp0aGlzID0NCj4gKyAgICAgICAgICAgIGxpc3RfZW50cnkoaGVhZCwgY29uc3Qgc3Ry dWN0IHZwY2lfcmVnaXN0ZXIsIG5vZGUpOw0KPiArICAgICAgICBpbnQgY21wID0gdnBjaV9yZWdp c3Rlcl9jbXAociwgdGhpcyk7DQo+ICsNCj4gKyAgICAgICAgaWYgKCBjbXAgPCAwICkNCj4gKyAg ICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICBpZiAoIGNtcCA9PSAwICkNCj4gKyAgICAgICAg ew0KPiArICAgICAgICAgICAgdnBjaV91bmxvY2socGRldi0+ZG9tYWluKTsNCj4gKyAgICAgICAg ICAgIHhmcmVlKHIpOw0KPiArICAgICAgICAgICAgcmV0dXJuIC1FRVhJU1Q7DQo+ICsgICAgICAg IH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBsaXN0X2FkZF90YWlsKCZyLT5ub2RlLCBoZWFkKTsN Cj4gKyAgICB2cGNpX3VubG9jayhwZGV2LT5kb21haW4pOw0KPiArDQo+ICsgICAgcmV0dXJuIDA7 DQo+ICt9DQo+ICsNCj4gK2ludCB2cGNpX3JlbW92ZV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgcGNp X2RldiAqcGRldiwgdW5zaWduZWQgaW50IG9mZnNldCwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgc2l6ZSkNCj4gK3sNCj4gKyAgICBjb25zdCBzdHJ1Y3QgdnBjaV9y ZWdpc3RlciByID0geyAub2Zmc2V0ID0gb2Zmc2V0LCAuc2l6ZSA9IHNpemUgfTsNCj4gKyAgICBz dHJ1Y3QgdnBjaV9yZWdpc3RlciAqcm0gPSBOVUxMOw0KPiArDQo+ICsgICAgdnBjaV9sb2NrKHBk ZXYtPmRvbWFpbik7DQo+ICsNCj4gKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5ICggcm0sICZwZGV2 LT52cGNpLT5oYW5kbGVycywgbm9kZSApDQo+ICsgICAgICAgIGlmICggdnBjaV9yZWdpc3Rlcl9j bXAoJnIsIHJtKSA8PSAwICkNCj4gKyAgICAgICAgICAgIGJyZWFrOw0KPiArDQo+ICsgICAgaWYg KCAhcm0gfHwgcm0tPm9mZnNldCAhPSBvZmZzZXQgfHwgcm0tPnNpemUgIT0gc2l6ZSApDQo+ICsg ICAgew0KPiArICAgICAgICB2cGNpX3VubG9jayhwZGV2LT5kb21haW4pOw0KPiArICAgICAgICBy ZXR1cm4gLUVOT0VOVDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBsaXN0X2RlbCgmcm0tPm5vZGUp Ow0KPiArICAgIHZwY2lfdW5sb2NrKHBkZXYtPmRvbWFpbik7DQo+ICsgICAgeGZyZWUocm0pOw0K PiArDQo+ICsgICAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qIFdyYXBwZXJzIGZvciBwZXJm b3JtaW5nIHJlYWRzL3dyaXRlcyB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gKi8NCj4gK3N0 YXRpYyB1aW50MzJfdCB2cGNpX3JlYWRfaHcodW5zaWduZWQgaW50IHNlZywgdW5zaWduZWQgaW50 IGJ1cywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNsb3Qs IHVuc2lnbmVkIGludCBmdW5jLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgcmVnLCB1aW50MzJfdCBzaXplKQ0KPiArew0KPiArICAgIHVpbnQzMl90IGRhdGE7 DQo+ICsNCj4gKyAgICBzd2l0Y2ggKCBzaXplICkNCj4gKyAgICB7DQo+ICsgICAgY2FzZSA0Og0K PiArICAgICAgICBkYXRhID0gcGNpX2NvbmZfcmVhZDMyKHNlZywgYnVzLCBzbG90LCBmdW5jLCBy ZWcpOw0KPiArICAgICAgICBicmVhazsNCj4gKyAgICBjYXNlIDI6DQo+ICsgICAgICAgIGRhdGEg PSBwY2lfY29uZl9yZWFkMTYoc2VnLCBidXMsIHNsb3QsIGZ1bmMsIHJlZyk7DQo+ICsgICAgICAg IGJyZWFrOw0KPiArICAgIGNhc2UgMToNCj4gKyAgICAgICAgZGF0YSA9IHBjaV9jb25mX3JlYWQ4 KHNlZywgYnVzLCBzbG90LCBmdW5jLCByZWcpOw0KPiArICAgICAgICBicmVhazsNCj4gKyAgICBk ZWZhdWx0Og0KPiArICAgICAgICBCVUcoKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4g ZGF0YTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgdnBjaV93cml0ZV9odyh1bnNpZ25lZCBp bnQgc2VnLCB1bnNpZ25lZCBpbnQgYnVzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgc2xvdCwgdW5zaWduZWQgaW50IGZ1bmMsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCByZWcsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90IGRhdGEp DQo+ICt7DQo+ICsgICAgc3dpdGNoICggc2l6ZSApDQo+ICsgICAgew0KPiArICAgIGNhc2UgNDoN Cj4gKyAgICAgICAgcGNpX2NvbmZfd3JpdGUzMihzZWcsIGJ1cywgc2xvdCwgZnVuYywgcmVnLCBk YXRhKTsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSAzOg0KPiArICAgICAgICAvKg0K PiArICAgICAgICAgKiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgYSA0Ynl0ZSB3cml0ZSBjYW4g aGF2ZSAxYnl0ZSB0cmFwcGVkIGFuZA0KPiArICAgICAgICAgKiB0aGUgcmVzdCBwYXNzZWQtdGhy b3VnaC4NCj4gKyAgICAgICAgICovDQo+ICsgICAgICAgIGlmICggcmVnICYgMSApDQo+ICsgICAg ICAgIHsNCj4gKyAgICAgICAgICAgIHBjaV9jb25mX3dyaXRlOChzZWcsIGJ1cywgc2xvdCwgZnVu YywgcmVnLCBkYXRhKTsNCj4gKyAgICAgICAgICAgIHBjaV9jb25mX3dyaXRlMTYoc2VnLCBidXMs IHNsb3QsIGZ1bmMsIHJlZyArIDEsIGRhdGEgPj4gOCk7DQo+ICsgICAgICAgIH0NCj4gKyAgICAg ICAgZWxzZQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgICBwY2lfY29uZl93cml0ZTE2KHNl ZywgYnVzLCBzbG90LCBmdW5jLCByZWcsIGRhdGEpOw0KPiArICAgICAgICAgICAgcGNpX2NvbmZf d3JpdGU4KHNlZywgYnVzLCBzbG90LCBmdW5jLCByZWcgKyAyLCBkYXRhID4+IDE2KTsNCj4gKyAg ICAgICAgfQ0KPiArICAgICAgICBicmVhazsNCj4gKyAgICBjYXNlIDI6DQo+ICsgICAgICAgIHBj aV9jb25mX3dyaXRlMTYoc2VnLCBidXMsIHNsb3QsIGZ1bmMsIHJlZywgZGF0YSk7DQo+ICsgICAg ICAgIGJyZWFrOw0KPiArICAgIGNhc2UgMToNCj4gKyAgICAgICAgcGNpX2NvbmZfd3JpdGU4KHNl ZywgYnVzLCBzbG90LCBmdW5jLCByZWcsIGRhdGEpOw0KPiArICAgICAgICBicmVhazsNCj4gKyAg ICBkZWZhdWx0Og0KPiArICAgICAgICBCVUcoKTsNCj4gKyAgICB9DQo+ICt9DQo+ICsNCj4gKy8q DQo+ICsgKiBNZXJnZSBuZXcgZGF0YSBpbnRvIGEgcGFydGlhbCByZXN1bHQuDQo+ICsgKg0KPiAr ICogWmVybyB0aGUgYnl0ZXMgb2YgJ2RhdGEnIGZyb20gW29mZnNldCwgb2Zmc2V0ICsgc2l6ZSks IGFuZA0KPiArICogbWVyZ2UgdGhlIHZhbHVlIGZvdW5kIGluICduZXcnIGZyb20gWzAsIG9mZnNl dCkgbGVmdCBzaGlmdGVkDQo+ICsgKiBieSAnb2Zmc2V0Jy4NCj4gKyAqLw0KPiArdWludDMyX3Qg bWVyZ2VfcmVzdWx0KHVpbnQzMl90IGRhdGEsIHVpbnQzMl90IG5ldywgdW5zaWduZWQgaW50IHNp emUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCkNCj4gK3sN Cj4gKyAgICB1aW50MzJfdCBtYXNrID0gKCh1aW50NjRfdCkxIDw8IChzaXplICogOCkpIC0gMTsN Cj4gKw0KPiArICAgIHJldHVybiAoZGF0YSAmIH4obWFzayA8PCAob2Zmc2V0ICogOCkpKSB8ICgo bmV3ICYgbWFzaykgPDwgKG9mZnNldCAqIDgpKTsNCj4gK30NCj4gKw0KPiArdWludDMyX3QgdnBj aV9yZWFkKHVuc2lnbmVkIGludCBzZWcsIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBz bG90LA0KPiArICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmdW5jLCB1bnNpZ25lZCBp bnQgcmVnLCB1aW50MzJfdCBzaXplKQ0KPiArew0KPiArICAgIHN0cnVjdCBkb21haW4gKmQgPSBj dXJyZW50LT5kb21haW47DQo+ICsgICAgc3RydWN0IHBjaV9kZXYgKnBkZXY7DQo+ICsgICAgY29u c3Qgc3RydWN0IHZwY2lfcmVnaXN0ZXIgKnI7DQo+ICsgICAgdW5zaWduZWQgaW50IGRhdGFfb2Zm c2V0ID0gMDsNCj4gKyAgICB1aW50MzJfdCBkYXRhOw0KPiArDQo+ICsgICAgQVNTRVJUKHBjaWRl dnNfbG9ja2VkKCkpOw0KPiArICAgIEFTU0VSVCh2cGNpX2xvY2tlZChkKSk7DQo+ICsNCj4gKyAg ICAvKg0KPiArICAgICAqIFJlYWQgdGhlIGhhcmR3YXJlIHZhbHVlLg0KPiArICAgICAqIE5COiBh dCB0aGUgbW9tZW50IHZQQ0kgcGFzc3Rocm91Z2hzIGV2ZXJ5dGhpbmcgKGllOiBwZXJtaXNzaXZl KS4NCj4gKyAgICAgKi8NCj4gKyAgICBkYXRhID0gdnBjaV9yZWFkX2h3KHNlZywgYnVzLCBzbG90 LCBmdW5jLCByZWcsIHNpemUpOw0KPiArDQo+ICsgICAgLyogRmluZCB0aGUgUENJIGRldiBtYXRj aGluZyB0aGUgYWRkcmVzcy4gKi8NCj4gKyAgICBwZGV2ID0gcGNpX2dldF9wZGV2X2J5X2RvbWFp bihkLCBzZWcsIGJ1cywgUENJX0RFVkZOKHNsb3QsIGZ1bmMpKTsNCj4gKyAgICBpZiAoICFwZGV2 ICkNCj4gKyAgICAgICAgcmV0dXJuIGRhdGE7DQo+ICsNCj4gKyAgICAvKiBSZXBsYWNlIGFueSB2 YWx1ZXMgcmVwb3J0ZWQgYnkgdGhlIGVtdWxhdGVkIHJlZ2lzdGVycy4gKi8NCj4gKyAgICBsaXN0 X2Zvcl9lYWNoX2VudHJ5ICggciwgJnBkZXYtPnZwY2ktPmhhbmRsZXJzLCBub2RlICkNCj4gKyAg ICB7DQo+ICsgICAgICAgIGNvbnN0IHN0cnVjdCB2cGNpX3JlZ2lzdGVyIGVtdSA9IHsNCj4gKyAg ICAgICAgICAgIC5vZmZzZXQgPSByZWcgKyBkYXRhX29mZnNldCwNCj4gKyAgICAgICAgICAgIC5z aXplID0gc2l6ZSAtIGRhdGFfb2Zmc2V0DQo+ICsgICAgICAgIH07DQo+ICsgICAgICAgIGludCBj bXAgPSB2cGNpX3JlZ2lzdGVyX2NtcCgmZW11LCByKTsNCj4gKyAgICAgICAgdW5pb24gdnBjaV92 YWwgdmFsID0geyAudTMyID0gfjAgfTsNCj4gKyAgICAgICAgdW5zaWduZWQgaW50IG1lcmdlX3Np emU7DQo+ICsNCj4gKyAgICAgICAgaWYgKCBjbXAgPCAwICkNCj4gKyAgICAgICAgICAgIGJyZWFr Ow0KPiArICAgICAgICBpZiAoIGNtcCA+IDAgKQ0KPiArICAgICAgICAgICAgY29udGludWU7DQo+ ICsNCj4gKyAgICAgICAgci0+cmVhZChwZGV2LCByLT5vZmZzZXQsICZ2YWwsIHItPnByaXZhdGUp Ow0KPiArDQo+ICsgICAgICAgIC8qIENoZWNrIGlmIHRoZSByZWFkIGlzIGluIHRoZSBtaWRkbGUg b2YgYSByZWdpc3Rlci4gKi8NCj4gKyAgICAgICAgaWYgKCByLT5vZmZzZXQgPCBlbXUub2Zmc2V0 ICkNCj4gKyAgICAgICAgICAgIHZhbC51MzIgPj49IChlbXUub2Zmc2V0IC0gci0+b2Zmc2V0KSAq IDg7DQo+ICsNCj4gKyAgICAgICAgZGF0YV9vZmZzZXQgPSBtYXgoZW11Lm9mZnNldCwgci0+b2Zm c2V0KSAtIHJlZzsNCj4gKyAgICAgICAgLyogRmluZCB0aGUgaW50ZXJzZWN0aW9uIHNpemUgYmV0 d2VlbiB0aGUgdHdvIHNldHMuICovDQo+ICsgICAgICAgIG1lcmdlX3NpemUgPSBtaW4oZW11Lm9m ZnNldCArIGVtdS5zaXplLCByLT5vZmZzZXQgKyByLT5zaXplKSAtDQo+ICsgICAgICAgICAgICAg ICAgICAgICBtYXgoZW11Lm9mZnNldCwgci0+b2Zmc2V0KTsNCj4gKyAgICAgICAgLyogTWVyZ2Ug dGhlIGVtdWxhdGVkIGRhdGEgaW50byB0aGUgbmF0aXZlIHJlYWQgdmFsdWUuICovDQo+ICsgICAg ICAgIGRhdGEgPSBtZXJnZV9yZXN1bHQoZGF0YSwgdmFsLnUzMiwgbWVyZ2Vfc2l6ZSwgZGF0YV9v ZmZzZXQpOw0KPiArICAgICAgICBkYXRhX29mZnNldCArPSBtZXJnZV9zaXplOw0KPiArICAgICAg ICBpZiAoIGRhdGFfb2Zmc2V0ID09IHNpemUgKQ0KPiArICAgICAgICAgICAgYnJlYWs7DQo+ICsg ICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIGRhdGE7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBQ ZXJmb3JtIGEgbWF5YmUgcGFydGlhbCB3cml0ZSB0byBhIHJlZ2lzdGVyLg0KPiArICoNCj4gKyAq IE5vdGUgdGhhdCB0aGlzIHdpbGwgb25seSB3b3JrIGZvciBzaW1wbGUgcmVnaXN0ZXJzLCBpZiBY ZW4gbmVlZHMgdG8NCj4gKyAqIHRyYXAgYWNjZXNzZXMgdG8gcncxYyByZWdpc3RlcnMgKGxpa2Ug dGhlIHN0YXR1cyBQQ0kgaGVhZGVyIHJlZ2lzdGVyKQ0KPiArICogdGhlIGxvZ2ljIGluIHZwY2lf d3JpdGUgd2lsbCBoYXZlIHRvIGJlIGV4cGFuZGVkIGluIG9yZGVyIHRvIGNvcnJlY3RseQ0KPiAr ICogZGVhbCB3aXRoIHRoZW0uDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIHZwY2lfd3JpdGVfaGVs cGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc3RydWN0IHZwY2lfcmVnaXN0ZXIgKnIsIHVuc2lnbmVkIGludCBzaXplLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgdWludDMy X3QgZGF0YSkNCj4gK3sNCj4gKyAgICB1bmlvbiB2cGNpX3ZhbCB2YWwgPSB7IC51MzIgPSBkYXRh IH07DQo+ICsNCj4gKyAgICBBU1NFUlQoc2l6ZSA8PSByLT5zaXplKTsNCj4gKyAgICBpZiAoIHNp emUgIT0gci0+c2l6ZSApDQo+ICsgICAgew0KPiArICAgICAgICByLT5yZWFkKHBkZXYsIHItPm9m ZnNldCwgJnZhbCwgci0+cHJpdmF0ZSk7DQo+ICsgICAgICAgIHZhbC51MzIgPSBtZXJnZV9yZXN1 bHQodmFsLnUzMiwgZGF0YSwgc2l6ZSwgb2Zmc2V0KTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBy LT53cml0ZShwZGV2LCByLT5vZmZzZXQsIHZhbCwgci0+cHJpdmF0ZSk7DQo+ICt9DQo+ICsNCj4g K3ZvaWQgdnBjaV93cml0ZSh1bnNpZ25lZCBpbnQgc2VnLCB1bnNpZ25lZCBpbnQgYnVzLCB1bnNp Z25lZCBpbnQgc2xvdCwNCj4gKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZnVuYywgdW5z aWduZWQgaW50IHJlZywgdWludDMyX3Qgc2l6ZSwNCj4gKyAgICAgICAgICAgICAgICB1aW50MzJf dCBkYXRhKQ0KPiArew0KPiArICAgIHN0cnVjdCBkb21haW4gKmQgPSBjdXJyZW50LT5kb21haW47 DQo+ICsgICAgc3RydWN0IHBjaV9kZXYgKnBkZXY7DQo+ICsgICAgY29uc3Qgc3RydWN0IHZwY2lf cmVnaXN0ZXIgKnI7DQo+ICsgICAgdW5zaWduZWQgaW50IGRhdGFfb2Zmc2V0ID0gMDsNCj4gKw0K PiArICAgIEFTU0VSVChwY2lkZXZzX2xvY2tlZCgpKTsNCj4gKyAgICBBU1NFUlQodnBjaV9sb2Nr ZWQoZCkpOw0KPiArDQo+ICsgICAgLyoNCj4gKyAgICAgKiBGaW5kIHRoZSBQQ0kgZGV2IG1hdGNo aW5nIHRoZSBhZGRyZXNzLg0KPiArICAgICAqIFBhc3N0aHJvdWdoIGV2ZXJ5dGhpbmcgdGhhdCdz IG5vdCB0cmFwcGVkLg0KPiArICAgICAqICovDQo+ICsgICAgcGRldiA9IHBjaV9nZXRfcGRldl9i eV9kb21haW4oZCwgc2VnLCBidXMsIFBDSV9ERVZGTihzbG90LCBmdW5jKSk7DQo+ICsgICAgaWYg KCAhcGRldiApDQo+ICsgICAgew0KPiArICAgICAgICB2cGNpX3dyaXRlX2h3KHNlZywgYnVzLCBz bG90LCBmdW5jLCByZWcsIHNpemUsIGRhdGEpOw0KPiArICAgICAgICByZXR1cm47DQo+ICsgICAg fQ0KPiArDQo+ICsgICAgLyogV3JpdGUgdGhlIHZhbHVlIHRvIHRoZSBoYXJkd2FyZSBvciBlbXVs YXRlZCByZWdpc3RlcnMuICovDQo+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSAoIHIsICZwZGV2 LT52cGNpLT5oYW5kbGVycywgbm9kZSApDQo+ICsgICAgew0KPiArICAgICAgICBjb25zdCBzdHJ1 Y3QgdnBjaV9yZWdpc3RlciBlbXUgPSB7DQo+ICsgICAgICAgICAgICAub2Zmc2V0ID0gcmVnICsg ZGF0YV9vZmZzZXQsDQo+ICsgICAgICAgICAgICAuc2l6ZSA9IHNpemUgLSBkYXRhX29mZnNldA0K PiArICAgICAgICB9Ow0KPiArICAgICAgICBpbnQgY21wID0gdnBjaV9yZWdpc3Rlcl9jbXAoJmVt dSwgcik7DQo+ICsgICAgICAgIHVuc2lnbmVkIGludCB3cml0ZV9zaXplOw0KPiArDQo+ICsgICAg ICAgIGlmICggY21wIDwgMCApDQo+ICsgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgaWYg KCBjbXAgPiAwICkNCj4gKyAgICAgICAgICAgIGNvbnRpbnVlOw0KPiArDQo+ICsgICAgICAgIGlm ICggZW11Lm9mZnNldCA8IHItPm9mZnNldCApDQo+ICsgICAgICAgIHsNCj4gKyAgICAgICAgICAg IC8qIEhlYWRpbmcgZ2FwLCB3cml0ZSBwYXJ0aWFsIGNvbnRlbnQgdG8gaGFyZHdhcmUuICovDQo+ ICsgICAgICAgICAgICB2cGNpX3dyaXRlX2h3KHNlZywgYnVzLCBzbG90LCBmdW5jLCBlbXUub2Zm c2V0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICByLT5vZmZzZXQgLSBlbXUub2Zmc2V0 LCBkYXRhID4+IChkYXRhX29mZnNldCAqIDgpKTsNCj4gKyAgICAgICAgICAgIGRhdGFfb2Zmc2V0 ICs9IHItPm9mZnNldCAtIGVtdS5vZmZzZXQ7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAg ICAvKiBGaW5kIHRoZSBpbnRlcnNlY3Rpb24gc2l6ZSBiZXR3ZWVuIHRoZSB0d28gc2V0cy4gKi8N Cj4gKyAgICAgICAgd3JpdGVfc2l6ZSA9IG1pbihlbXUub2Zmc2V0ICsgZW11LnNpemUsIHItPm9m ZnNldCArIHItPnNpemUpIC0NCj4gKyAgICAgICAgICAgICAgICAgICAgIG1heChlbXUub2Zmc2V0 LCByLT5vZmZzZXQpOw0KPiArICAgICAgICB2cGNpX3dyaXRlX2hlbHBlcihwZGV2LCByLCB3cml0 ZV9zaXplLCByZWcgKyBkYXRhX29mZnNldCAtIHItPm9mZnNldCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgZGF0YSA+PiAoZGF0YV9vZmZzZXQgKiA4KSk7DQo+ICsgICAgICAgIGRhdGFf b2Zmc2V0ICs9IHdyaXRlX3NpemU7DQo+ICsgICAgICAgIGlmICggZGF0YV9vZmZzZXQgPT0gc2l6 ZSApDQo+ICsgICAgICAgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoIGRh dGFfb2Zmc2V0IDwgc2l6ZSApDQo+ICsgICAgICAgIC8qIFRhaWxpbmcgZ2FwLCB3cml0ZSB0aGUg cmVtYWluaW5nLiAqLw0KPiArICAgICAgICB2cGNpX3dyaXRlX2h3KHNlZywgYnVzLCBzbG90LCBm dW5jLCByZWcgKyBkYXRhX29mZnNldCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBzaXplIC0g ZGF0YV9vZmZzZXQsIGRhdGEgPj4gKGRhdGFfb2Zmc2V0ICogOCkpOw0KPiArfQ0KPiArDQo+ICsv Kg0KPiArICogTG9jYWwgdmFyaWFibGVzOg0KPiArICogbW9kZTogQw0KPiArICogYy1maWxlLXN0 eWxlOiAiQlNEIg0KPiArICogYy1iYXNpYy1vZmZzZXQ6IDQNCj4gKyAqIHRhYi13aWR0aDogNA0K PiArICogaW5kZW50LXRhYnMtbW9kZTogbmlsDQo+ICsgKiBFbmQ6DQo+ICsgKi8NCj4gKw0KPiBk aWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaCBiL3hlbi9pbmNsdWRlL2Fz bS14ODYvZG9tYWluLmgNCj4gaW5kZXggMjdkODBlZWZmNC4uOWJlMDlkZjg1ZCAxMDA2NDQNCj4g LS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaA0KPiArKysgYi94ZW4vaW5jbHVkZS9h c20teDg2L2RvbWFpbi5oDQo+IEBAIC00MjcsNiArNDI3LDcgQEAgc3RydWN0IGFyY2hfZG9tYWlu DQo+ICAjZGVmaW5lIGhhc192cGl0KGQpICAgICAgICAoISEoKGQpLT5hcmNoLmVtdWxhdGlvbl9m bGFncyAmDQo+IFhFTl9YODZfRU1VX1BJVCkpDQo+ICAjZGVmaW5lIGhhc19waXJxKGQpICAgICAg ICAoISEoKGQpLT5hcmNoLmVtdWxhdGlvbl9mbGFncyAmIFwNCj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBYRU5fWDg2X0VNVV9VU0VfUElSUSkpDQo+ICsjZGVmaW5lIGhhc192cGNpKGQp ICAgICAgICAoISEoKGQpLT5hcmNoLmVtdWxhdGlvbl9mbGFncyAmDQo+IFhFTl9YODZfRU1VX1ZQ Q0kpKQ0KPiANCj4gICNkZWZpbmUgaGFzX2FyY2hfcGRldnMoZCkgICAgKCFsaXN0X2VtcHR5KCYo ZCktPmFyY2gucGRldl9saXN0KSkNCj4gDQo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20t eDg2L2h2bS9kb21haW4uaCBiL3hlbi9pbmNsdWRlL2FzbS0NCj4geDg2L2h2bS9kb21haW4uaA0K PiBpbmRleCBkMjg5OWM5YmIyLi5jYmY0MTcwNzg5IDEwMDY0NA0KPiAtLS0gYS94ZW4vaW5jbHVk ZS9hc20teDg2L2h2bS9kb21haW4uaA0KPiArKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9k b21haW4uaA0KPiBAQCAtMTg0LDYgKzE4NCw5IEBAIHN0cnVjdCBodm1fZG9tYWluIHsNCj4gICAg ICAvKiBMaXN0IG9mIGd1ZXN0IHRvIG1hY2hpbmUgSU8gcG9ydHMgbWFwcGluZy4gKi8NCj4gICAg ICBzdHJ1Y3QgbGlzdF9oZWFkIGcybV9pb3BvcnRfbGlzdDsNCj4gDQo+ICsgICAgLyogTG9jayBm b3IgdGhlIFBDSSBlbXVsYXRpb24gbGF5ZXIgKHZQQ0kpLiAqLw0KPiArICAgIHNwaW5sb2NrX3Qg dnBjaV9sb2NrOw0KPiArDQo+ICAgICAgLyogTGlzdCBvZiBwZXJtYW5lbnRseSB3cml0ZS1tYXBw ZWQgcGFnZXMuICovDQo+ICAgICAgc3RydWN0IHsNCj4gICAgICAgICAgc3BpbmxvY2tfdCBsb2Nr Ow0KPiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW8uaCBiL3hlbi9pbmNs dWRlL2FzbS14ODYvaHZtL2lvLmgNCj4gaW5kZXggMjQ4NGViMWM3NS4uMGFmMWVkMTRkYyAxMDA2 NDQNCj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW8uaA0KPiArKysgYi94ZW4vaW5j bHVkZS9hc20teDg2L2h2bS9pby5oDQo+IEBAIC0xNDksMTIgKzE0OSwyMCBAQCB2b2lkIHN0ZHZn YV9kZWluaXQoc3RydWN0IGRvbWFpbiAqZCk7DQo+IA0KPiAgZXh0ZXJuIHZvaWQgaHZtX2RwY2lf bXNpX2VvaShzdHJ1Y3QgZG9tYWluICpkLCBpbnQgdmVjdG9yKTsNCj4gDQo+ICsvKiBEZWNvZGUg YSBQQ0kgcG9ydCBJTyBhY2Nlc3MgaW50byBhIGJ1cy9kZXZmbi9yZWcuICovDQo+ICt2b2lkIGh2 bV9wY2lfZGVjb2RlX2FkZHIodW5zaWduZWQgaW50IGNmOCwgdW5zaWduZWQgaW50IGFkZHIsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpidXMsIHVuc2lnbmVkIGlu dCAqc2xvdCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmZ1bmMs IHVuc2lnbmVkIGludCAqcmVnKTsNCj4gKw0KPiAgLyoNCj4gICAqIEhWTSBwb3J0IElPIGhhbmRs ZXIgdGhhdCBwZXJmb3JtcyBmb3J3YXJkaW5nIG9mIGd1ZXN0IElPIHBvcnRzIGludG8NCj4gbWFj aGluZQ0KPiAgICogSU8gcG9ydHMuDQo+ICAgKi8NCj4gIHZvaWQgcmVnaXN0ZXJfZzJtX3BvcnRp b19oYW5kbGVyKHN0cnVjdCBkb21haW4gKmQpOw0KPiANCj4gKy8qIEhWTSBwb3J0IElPIGhhbmRs ZXIgZm9yIFBDSSBhY2Nlc3Nlcy4gKi8NCj4gK3ZvaWQgcmVnaXN0ZXJfdnBjaV9wb3J0aW9faGFu ZGxlcihzdHJ1Y3QgZG9tYWluICpkKTsNCj4gKw0KPiAgI2VuZGlmIC8qIF9fQVNNX1g4Nl9IVk1f SU9fSF9fICovDQo+IA0KPiANCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3B1YmxpYy9hcmNo LXg4Ni94ZW4uaCBiL3hlbi9pbmNsdWRlL3B1YmxpYy9hcmNoLQ0KPiB4ODYveGVuLmgNCj4gaW5k ZXggZjIxMzMyZTg5Ny4uODZhMWEwOWE4ZCAxMDA2NDQNCj4gLS0tIGEveGVuL2luY2x1ZGUvcHVi bGljL2FyY2gteDg2L3hlbi5oDQo+ICsrKyBiL3hlbi9pbmNsdWRlL3B1YmxpYy9hcmNoLXg4Ni94 ZW4uaA0KPiBAQCAtMjk1LDEyICsyOTUsMTUgQEAgc3RydWN0IHhlbl9hcmNoX2RvbWFpbmNvbmZp ZyB7DQo+ICAjZGVmaW5lIFhFTl9YODZfRU1VX1BJVCAgICAgICAgICAgICAoMVU8PF9YRU5fWDg2 X0VNVV9QSVQpDQo+ICAjZGVmaW5lIF9YRU5fWDg2X0VNVV9VU0VfUElSUSAgICAgICA5DQo+ICAj ZGVmaW5lIFhFTl9YODZfRU1VX1VTRV9QSVJRICAgICAgICAoMVU8PF9YRU5fWDg2X0VNVV9VU0Vf UElSUSkNCj4gKyNkZWZpbmUgX1hFTl9YODZfRU1VX1ZQQ0kgICAgICAgICAgIDEwDQo+ICsjZGVm aW5lIFhFTl9YODZfRU1VX1ZQQ0kgICAgICAgICAgICAoMVU8PF9YRU5fWDg2X0VNVV9WUENJKQ0K PiANCj4gICNkZWZpbmUgWEVOX1g4Nl9FTVVfQUxMICAgICAgICAgICAgIChYRU5fWDg2X0VNVV9M QVBJQyB8DQo+IFhFTl9YODZfRU1VX0hQRVQgfCAgXA0KPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFhFTl9YODZfRU1VX1BNIHwgWEVOX1g4Nl9FTVVfUlRDIHwgICAgICBc DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVOX1g4Nl9FTVVfSU9B UElDIHwgWEVOX1g4Nl9FTVVfUElDIHwgIFwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBYRU5fWDg2X0VNVV9WR0EgfCBYRU5fWDg2X0VNVV9JT01NVSB8ICAgXA0KPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTl9YODZfRU1VX1BJVCB8IFhF Tl9YODZfRU1VX1VTRV9QSVJRKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFhFTl9YODZfRU1VX1BJVCB8IFhFTl9YODZfRU1VX1VTRV9QSVJRIHxcDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVOX1g4Nl9FTVVfVlBDSSkNCj4gICAgICB1 aW50MzJfdCBlbXVsYXRpb25fZmxhZ3M7DQo+ICB9Ow0KPiANCj4gZGlmZiAtLWdpdCBhL3hlbi9p bmNsdWRlL3hlbi9wY2kuaCBiL3hlbi9pbmNsdWRlL3hlbi9wY2kuaA0KPiBpbmRleCA1OWI2ZThh ODFjLi5hOWI4MGUzMzBiIDEwMDY0NA0KPiAtLS0gYS94ZW4vaW5jbHVkZS94ZW4vcGNpLmgNCj4g KysrIGIveGVuL2luY2x1ZGUveGVuL3BjaS5oDQo+IEBAIC04OCw2ICs4OCw5IEBAIHN0cnVjdCBw Y2lfZGV2IHsNCj4gICNkZWZpbmUgUFRfRkFVTFRfVEhSRVNIT0xEIDEwDQo+ICAgICAgfSBmYXVs dDsNCj4gICAgICB1NjQgdmZfcmxlbls2XTsNCj4gKw0KPiArICAgIC8qIERhdGEgZm9yIHZQQ0ku ICovDQo+ICsgICAgc3RydWN0IHZwY2kgKnZwY2k7DQo+ICB9Ow0KPiANCj4gICNkZWZpbmUgZm9y X2VhY2hfcGRldihkb21haW4sIHBkZXYpIFwNCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hl bi9wY2lfcmVncy5oIGIveGVuL2luY2x1ZGUveGVuL3BjaV9yZWdzLmgNCj4gaW5kZXggZWNkNjEy NGQ5MS4uY2M0ZWUzYjgzZSAxMDA2NDQNCj4gLS0tIGEveGVuL2luY2x1ZGUveGVuL3BjaV9yZWdz LmgNCj4gKysrIGIveGVuL2luY2x1ZGUveGVuL3BjaV9yZWdzLmgNCj4gQEAgLTIzLDYgKzIzLDE0 IEBADQo+ICAjZGVmaW5lIExJTlVYX1BDSV9SRUdTX0gNCj4gDQo+ICAvKg0KPiArICogQ29udmVu dGlvbmFsIFBDSSBhbmQgUENJLVggTW9kZSAxIGRldmljZXMgaGF2ZSAyNTYgYnl0ZXMgb2YNCj4g KyAqIGNvbmZpZ3VyYXRpb24gc3BhY2UuICBQQ0ktWCBNb2RlIDIgYW5kIFBDSWUgZGV2aWNlcyBo YXZlIDQwOTYgYnl0ZXMgb2YNCj4gKyAqIGNvbmZpZ3VyYXRpb24gc3BhY2UuDQo+ICsgKi8NCj4g KyNkZWZpbmUgUENJX0NGR19TUEFDRV9TSVpFCTI1Ng0KPiArI2RlZmluZSBQQ0lfQ0ZHX1NQQUNF X0VYUF9TSVpFCTQwOTYNCj4gKw0KPiArLyoNCj4gICAqIFVuZGVyIFBDSSwgZWFjaCBkZXZpY2Ug aGFzIDI1NiBieXRlcyBvZiBjb25maWd1cmF0aW9uIGFkZHJlc3Mgc3BhY2UsDQo+ICAgKiBvZiB3 aGljaCB0aGUgZmlyc3QgNjQgYnl0ZXMgYXJlIHN0YW5kYXJkaXplZCBhcyBmb2xsb3dzOg0KPiAg ICovDQo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vdnBjaS5oIGIveGVuL2luY2x1ZGUv eGVuL3ZwY2kuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi41 ZTFiMGJiM2RhDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIveGVuL2luY2x1ZGUveGVuL3ZwY2ku aA0KPiBAQCAtMCwwICsxLDc5IEBADQo+ICsjaWZuZGVmIF9WUENJXw0KPiArI2RlZmluZSBfVlBD SV8NCj4gKw0KPiArI2luY2x1ZGUgPHhlbi9wY2kuaD4NCj4gKyNpbmNsdWRlIDx4ZW4vdHlwZXMu aD4NCj4gKyNpbmNsdWRlIDx4ZW4vbGlzdC5oPg0KPiArDQo+ICsvKg0KPiArICogSGVscGVycyBm b3IgbG9ja2luZy91bmxvY2tpbmcuDQo+ICsgKg0KPiArICogTkI6IHRoZSByZWN1cnNpdmUgdmFy aWFudHMgYXJlIHVzZWQgc28gdGhhdCBzcGluX2lzX2xvY2tlZA0KPiArICogcmV0dXJucyB3aGV0 aGVyIHRoZSBsb2NrIGlzIGhvbGQgYnkgdGhlIGN1cnJlbnQgQ1BVIChpbnN0ZWFkDQo+ICsgKiBv ZiBqdXN0IHJldHVybmluZyB3aGV0aGVyIHRoZSBsb2NrIGlzIGhvbGQgYnkgYW55IENQVSkuDQo+ ICsgKi8NCj4gKyNkZWZpbmUgdnBjaV9sb2NrKGQpIHNwaW5fbG9ja19yZWN1cnNpdmUoJihkKS0N Cj4gPmFyY2guaHZtX2RvbWFpbi52cGNpX2xvY2spDQo+ICsjZGVmaW5lIHZwY2lfdW5sb2NrKGQp IHNwaW5fdW5sb2NrX3JlY3Vyc2l2ZSgmKGQpLQ0KPiA+YXJjaC5odm1fZG9tYWluLnZwY2lfbG9j aykNCj4gKyNkZWZpbmUgdnBjaV9sb2NrZWQoZCkgc3Bpbl9pc19sb2NrZWQoJihkKS0+YXJjaC5o dm1fZG9tYWluLnZwY2lfbG9jaykNCj4gKw0KPiArLyogVmFsdWUgcmVhZCBvciB3cml0dGVuIGJ5 IHRoZSBoYW5kbGVycy4gKi8NCj4gK3VuaW9uIHZwY2lfdmFsIHsNCj4gKyAgICB1aW50OF90IHU4 Ow0KPiArICAgIHVpbnQxNl90IHUxNjsNCj4gKyAgICB1aW50MzJfdCB1MzI7DQo+ICt9Ow0KPiAr DQo+ICsvKg0KPiArICogVGhlIHZQQ0kgaGFuZGxlcnMgd2lsbCBuZXZlciBiZSBjYWxsZWQgY29u Y3VycmVudGx5IGZvciB0aGUgc2FtZSBkb21haW4sDQo+IGlpDQo+ICsgKiBpcyBndWFyYW50ZWVk IHRoYXQgdGhlIHZwY2kgZG9tYWluIGxvY2sgd2lsbCBhbHdheXMgYmUgbG9ja2VkIHdoZW4gY2Fs bGluZw0KPiArICogYW55IGhhbmRsZXIuDQo+ICsgKi8NCj4gK3R5cGVkZWYgdm9pZCAodnBjaV9y ZWFkX3QpKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgcmVnLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5pb24gdnBjaV92YWwgKnZhbCwgdm9pZCAqZGF0YSk7DQo+ ICsNCj4gK3R5cGVkZWYgdm9pZCAodnBjaV93cml0ZV90KShzdHJ1Y3QgcGNpX2RldiAqcGRldiwg dW5zaWduZWQgaW50IHJlZywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiB2 cGNpX3ZhbCB2YWwsIHZvaWQgKmRhdGEpOw0KPiArDQo+ICt0eXBlZGVmIGludCAoKnZwY2lfcmVn aXN0ZXJfaW5pdF90KShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsNCj4gKw0KPiArI2RlZmluZSBSRUdJ U1RFUl9WUENJX0lOSVQoeCkgICAgICAgICAgICAgICAgICAgXA0KPiArICBzdGF0aWMgY29uc3Qg dnBjaV9yZWdpc3Rlcl9pbml0X3QgeCMjX2VudHJ5ICAgXA0KPiArICAgICAgICAgICAgICAgX191 c2VkX3NlY3Rpb24oIi5yb2RhdGEudnBjaSIpID0geA0KPiArDQo+ICsvKiBBZGQgdlBDSSBoYW5k bGVycyB0byBkZXZpY2UuICovDQo+ICtpbnQgX19tdXN0X2NoZWNrIHZwY2lfYWRkX2hhbmRsZXJz KHN0cnVjdCBwY2lfZGV2ICpkZXYpOw0KPiArDQo+ICsvKiBBZGQvcmVtb3ZlIGEgcmVnaXN0ZXIg aGFuZGxlci4gKi8NCj4gK2ludCBfX211c3RfY2hlY2sgdnBjaV9hZGRfcmVnaXN0ZXIoY29uc3Qg c3RydWN0IHBjaV9kZXYgKnBkZXYsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZwY2lfcmVhZF90IHJlYWRfaGFuZGxlciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdnBjaV93cml0ZV90IHdyaXRlX2hhbmRsZXIsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzaXplLCB2b2lkICpkYXRhKTsN Cj4gK2ludCBfX211c3RfY2hlY2sgdnBjaV9yZW1vdmVfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHBj aV9kZXYgKnBkZXYsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBvZmZzZXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBzaXplKTsNCj4gKw0KPiArLyogR2VuZXJpYyByZWFkL3dyaXRlIGhh bmRsZXJzIGZvciB0aGUgUENJIGNvbmZpZyBzcGFjZS4gKi8NCj4gK3VpbnQzMl90IHZwY2lfcmVh ZCh1bnNpZ25lZCBpbnQgc2VnLCB1bnNpZ25lZCBpbnQgYnVzLCB1bnNpZ25lZCBpbnQgc2xvdCwN Cj4gKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZnVuYywgdW5zaWduZWQgaW50IHJl ZywgdWludDMyX3Qgc2l6ZSk7DQo+ICt2b2lkIHZwY2lfd3JpdGUodW5zaWduZWQgaW50IHNlZywg dW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IHNsb3QsDQo+ICsgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IGZ1bmMsIHVuc2lnbmVkIGludCByZWcsIHVpbnQzMl90IHNpemUsDQo+ICsg ICAgICAgICAgICAgICAgdWludDMyX3QgZGF0YSk7DQo+ICsNCj4gK3N0cnVjdCB2cGNpIHsNCj4g KyAgICAvKiBSb290IHBvaW50ZXIgZm9yIHRoZSB0cmVlIG9mIHZQQ0kgaGFuZGxlcnMuICovDQo+ ICsgICAgc3RydWN0IGxpc3RfaGVhZCBoYW5kbGVyczsNCj4gK307DQo+ICsNCj4gKyNlbmRpZg0K PiArDQo+ICsvKg0KPiArICogTG9jYWwgdmFyaWFibGVzOg0KPiArICogbW9kZTogQw0KPiArICog Yy1maWxlLXN0eWxlOiAiQlNEIg0KPiArICogYy1iYXNpYy1vZmZzZXQ6IDQNCj4gKyAqIHRhYi13 aWR0aDogNA0KPiArICogaW5kZW50LXRhYnMtbW9kZTogbmlsDQo+ICsgKiBFbmQ6DQo+ICsgKi8N Cj4gKw0KDQpBbGwgdGhlIHJlc3QgTEdUTS4NCg0KICBQYXVsDQoNCj4gLS0NCj4gMi4xMS4wIChB cHBsZSBHaXQtODEpDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0 cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=