From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 6681A1B5F7 for ; Thu, 2 Nov 2017 20:17:16 +0100 (CET) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 02 Nov 2017 12:17:00 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.44,335,1505804400"; d="scan'208";a="1213522400" Received: from irsmsx151.ger.corp.intel.com ([163.33.192.59]) by fmsmga001.fm.intel.com with ESMTP; 02 Nov 2017 12:16:56 -0700 Received: from irsmsx111.ger.corp.intel.com (10.108.20.4) by IRSMSX151.ger.corp.intel.com (163.33.192.59) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 2 Nov 2017 19:16:55 +0000 Received: from irsmsx101.ger.corp.intel.com ([169.254.1.22]) by irsmsx111.ger.corp.intel.com ([169.254.2.30]) with mapi id 14.03.0319.002; Thu, 2 Nov 2017 19:16:55 +0000 From: "Trahe, Fiona" To: "Verma, Shally" , "dev@dpdk.org" , "Athreya, Narayana Prasad" , "Challa, Mahipal" CC: "Trahe, Fiona" Thread-Topic: [dpdk-dev] [RFC] Compression API in DPDK Thread-Index: AdNDe5cVAzjxCOtoRH2TNNZhDVbPqQDkPzKAAAia4eAApMbqgAKRPDwA Date: Thu, 2 Nov 2017 19:16:55 +0000 Message-ID: <348A99DA5F5B7549AA880327E580B435892B8E35@IRSMSX101.ger.corp.intel.com> References: <348A99DA5F5B7549AA880327E580B435892A8BEC@IRSMSX101.ger.corp.intel.com> <348A99DA5F5B7549AA880327E580B435892ABFB2@IRSMSX101.ger.corp.intel.com> In-Reply-To: Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYjI3YWEwZWItZGE5ZS00Nzc3LWFlNDctNTcwZDExNmM3NmIxIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE2LjUuOS4zIiwiVHJ1c3RlZExhYmVsSGFzaCI6IjRDU1JXQ1BVVHJ5MDYza2lZVmtKSVNnZEQwb1FyYVl5bkt4bjFUSXF6Z3c9In0= x-ctpclassification: CTP_IC dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [163.33.239.182] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [RFC] Compression API in DPDK X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Nov 2017 19:17:19 -0000 SGkgU2hhbGx5LA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFZlcm1h LCBTaGFsbHkgW21haWx0bzpTaGFsbHkuVmVybWFAY2F2aXVtLmNvbV0NCj4gU2VudDogRnJpZGF5 LCBPY3RvYmVyIDIwLCAyMDE3IDY6NDAgUE0NCj4gVG86IFRyYWhlLCBGaW9uYSA8ZmlvbmEudHJh aGVAaW50ZWwuY29tPjsgZGV2QGRwZGsub3JnOyBBdGhyZXlhLCBOYXJheWFuYSBQcmFzYWQNCj4g PE5hcmF5YW5hUHJhc2FkLkF0aHJleWFAY2F2aXVtLmNvbT47IENoYWxsYSwgTWFoaXBhbCA8TWFo aXBhbC5DaGFsbGFAY2F2aXVtLmNvbT4NCj4gU3ViamVjdDogUkU6IFtkcGRrLWRldl0gW1JGQ10g Q29tcHJlc3Npb24gQVBJIGluIERQREsNCj4gDQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tDQo+ID4gRnJvbTogVHJhaGUsIEZpb25hIFttYWlsdG86ZmlvbmEudHJhaGVAaW50ZWwu Y29tXQ0KPiA+IFNlbnQ6IDE3IE9jdG9iZXIgMjAxNyAyMDoxMQ0KPiA+IFRvOiBzaGFsbHkgdmVy bWEgPHNoYWxseXZlcm1hY2F2aXVtQGdtYWlsLmNvbT47IGRldkBkcGRrLm9yZzsgQXRocmV5YSwN Cj4gPiBOYXJheWFuYSBQcmFzYWQgPE5hcmF5YW5hUHJhc2FkLkF0aHJleWFAY2F2aXVtLmNvbT47 IENoYWxsYSwgTWFoaXBhbA0KPiA+IDxNYWhpcGFsLkNoYWxsYUBjYXZpdW0uY29tPjsgVmVybWEs IFNoYWxseSA8U2hhbGx5LlZlcm1hQGNhdml1bS5jb20+DQo+ID4gQ2M6IFRyYWhlLCBGaW9uYSA8 ZmlvbmEudHJhaGVAaW50ZWwuY29tPg0KPiA+IFN1YmplY3Q6IFJFOiBbZHBkay1kZXZdIFtSRkNd IENvbXByZXNzaW9uIEFQSSBpbiBEUERLDQo+ID4NCj4gPiBIaSBTaGFsbHksDQo+ID4NCj4gPiBU aGFua3MgZm9yIHlvdXIgZmVlZGJhY2suIENvbW1lbnRzIGJlbG93Lg0KPiA+DQo+ID4gUmVnYXJk cywNCj4gPiBGaW9uYQ0KPiA+DQo+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ ID4gRnJvbTogc2hhbGx5IHZlcm1hIFttYWlsdG86c2hhbGx5dmVybWFjYXZpdW1AZ21haWwuY29t XQ0KPiA+ID4gU2VudDogVHVlc2RheSwgT2N0b2JlciAxNywgMjAxNyA3OjU2IEFNDQo+ID4gPiBU bzogVHJhaGUsIEZpb25hIDxmaW9uYS50cmFoZUBpbnRlbC5jb20+OyBkZXZAZHBkay5vcmc7DQo+ ID4gPiBwYXRocmV5YUBjYXZpdW0uY29tOyBNYWhpcGFsIENoYWxsYSA8bWNoYWxsYUBjYXZpdW0u Y29tPjsgU2hhbGx5DQo+ID4gVmVybWENCj4gPiA+IDxzdmVybWFAY2F2aXVtLmNvbT4NCj4gPiA+ IFN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFtSRkNdIENvbXByZXNzaW9uIEFQSSBpbiBEUERLDQo+ ID4gPg0KPiA+ID4gV2hpbGUgSSBhbSBzdGlsbCBnb2luZyB0aHJvdWdoIFJGQyBpbiBkZXRhaWxz LCBpbmxpbmUgYXJlIG15IGlucHV0cyB0bw0KPiA+ID4gc29tZSBvZiB0aGUgcG9pbnRzLg0KPiA+ ID4NCj4gPiA+IE9uIFRodSwgT2N0IDEyLCAyMDE3IGF0IDEwOjM0IFBNLCBUcmFoZSwgRmlvbmEg PGZpb25hLnRyYWhlQGludGVsLmNvbT4NCj4gPiB3cm90ZToNCj4gPiA+ID4NCj4gPiA+ID4gV2l0 aCB0aGUgdmFzdCBhbW91bnRzIG9mIGRhdGEgYmVpbmcgdHJhbnNwb3J0ZWQgYXJvdW5kIG5ldHdv cmtzIGFuZA0KPiA+ID4gPiBzdG9yZWQgaW4gc3RvcmFnZSBzeXN0ZW1zLA0KPiA+ID4gcmVkdWNp bmcgZGF0YSBzaXplIGlzIGJlY29taW5nIGV2ZXIgbW9yZSBpbXBvcnRhbnQuIFRoZXJlIGFyZSBi b3RoDQo+ID4gPiBzb2Z0d2FyZSBsaWJyYXJpZXMgYW5kIGhhcmR3YXJlIGRldmljZXMgYXZhaWxh YmxlIHRoYXQgcHJvdmlkZQ0KPiA+ID4gY29tcHJlc3Npb24sIGJ1dCBubyBjb21tb24gQVBJLiBU aGlzIFJGQyBwcm9wb3NlcyBhIGNvbXByZXNzaW9uIEFQSSBmb3INCj4gPiBEUERLIHRvIGFkZHJl c3MgdGhpcyBuZWVkLg0KPiA+ID4gPg0KPiA+ID4gPiBGZWF0dXJlczoNCj4gPiA+ID4gLiBEZWZs YXRlIEFsZ29yaXRobSAoaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTEpLCBvdGhl ciBhbGdvcml0aG1zDQo+ID4gY2FuIGJlIGFkZGVkIGxhdGVyLg0KPiA+ID4gPiAuIFN0YXRpYyBh bmQgRHluYW1pYyBIdWZmbWFuIGVuY29kaW5nLg0KPiA+ID4gPiAuIENvbXByZXNzaW9uIGxldmVs cw0KPiA+ID4gPiAuIENoZWNrc3VtIGdlbmVyYXRpb24NCj4gPiA+ID4gLiBBc3luY2hyb25vdXMg YnVyc3QgQVBJDQo+ID4gPiA+IC4gU2Vzc2lvbi1iYXNlZC4gKGZvciBzdGF0ZWxlc3MgYSBzZXNz aW9uIG1heSBiZSB1c2VhYmxlIGFjcm9zcw0KPiA+ID4gPiBkZXZpY2VzLCBmb3Igc3RhdGVmdWwg aXQgd291bGRuJ3QgYmUuKQ0KPiA+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiBOb3RlIDE6IFNwbGl0 IG9mIGZ1bmN0aW9uYWxpdHkgYWJvdmUvYmVsb3cgQVBJIFdoZW4gY29uc2lkZXJpbmcNCj4gPiA+ ID4gd2hldGhlciBmZWF0dXJlcyBzaG91bGQgYmUgc3VwcG9ydGVkIG9uIHRoZSBBUEkgb3Igbm90 LCB0aGUgZGVjaXNpb24NCj4gPiA+ID4gd2FzIGJhc2VkIG9uDQo+ID4gPiB0aGUgZm9sbG93aW5n Og0KPiA+ID4gPiBUaGUgcHVycG9zZSBvZiB0aGUgQVBJIGlzIHRvIGRlY291cGxlIHRoZSBhcHBs aWNhdGlvbiBmcm9tIHRoZQ0KPiA+ID4gPiBjb21wdXRlLWludGVuc2l2ZSBmdW5jdGlvbnMgbmVl ZGVkDQo+ID4gPiBmb3IgY29tcHJlc3Npb24gYnkgYWJzdHJhY3RpbmcgdGhlbSB1bmRlciBhIGNv bW1vbiBBUEkuIFRoZXNlIGNhbiB0aGVuDQo+ID4gPiBiZSBpbXBsZW1lbnRlZCBieSBlaXRoZXIg aGFyZHdhcmUgYWNjZWxlcmF0b3JzIG9yIG9wdGltaXNlZCBzb2Z0d2FyZQ0KPiA+ID4gbGlicmFy aWVzLiBXaGVyZSBmZWF0dXJlcyBhcmUgbm90IGNvbXB1dGUtaW50ZW5zaXZlIGFuZCB1bmxpa2Vs eSB0byBiZQ0KPiA+ID4gb2ZmbG9hZGVkIG9yIG9wdGltaXNlZCwgdGhlcmUncyBub3RoaW5nIHRv IGJlIGdhaW5lZCBieSBlYWNoIFBNRA0KPiA+ID4gaGF2aW5nIHRvIHNlcGFyYXRlbHkgaW1wbGVt ZW50IHRoZW0sIGFuZCBpdCBtYWtlcyBtb3JlIHNlbnNlIGZvciB0aGVtDQo+ID4gdG8gYmUgZG9u ZSBhYm92ZSB0aGUgQVBJLiBTbyB0aGUgZm9sbG93aW5nIGFyZSBub3QgaGFuZGxlZCBvbiB0aGUg QVBJIGFuZA0KPiA+IGNhbiBiZSBkb25lIGFib3ZlLg0KPiA+ID4gPiAuIFByZXBlbmRpbmcvYXBw ZW5kaW5nIHByb3RvY29sIGhlYWRlcnMgKGd6aXAsIHpsaWIpIC4NCj4gPiA+ID4gRmlsZS1oYW5k bGluZywgYnJlYWtpbmcgZmlsZXMgdXAgaW50byBwYWNrZXRzLCByZWFzc2VtYmxpbmcuDQo+ID4g PiA+IC4gU3luY2hyb25vdXMgQVBJDQo+ID4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+IE5vdGUgMjog U3RhdGVmdWwgY29tcHJlc3Npb24uDQo+ID4gPiA+IEEgYmV0dGVyIGNvbXByZXNzaW9uIHJhdGlv IGNhbiBiZSBhY2hpZXZlZCBieSB1c2luZyBzdGF0ZWZ1bA0KPiA+ID4gPiBjb21wcmVzc2lvbiwg YWxsb3dpbmcgcGF0dGVybiBtYXRjaGluZw0KPiA+ID4gYWNyb3NzIG11bHRpcGxlIHNlcXVlbnRp YWwgcGFja2V0cy4gVGhpcyB3aWxsIGJlIHN1cHBvcnRlZCBvbiB0aGUgQVBJLA0KPiA+ID4gYnV0 IGluIHRoZSBpbnRlcmVzdHMgb2YgZ2V0dGluZyBhbiBpbml0aWFsIFJGQyBvdXQgZm9yIGZlZWRi YWNrLCB0aGVyZQ0KPiA+ID4gYXJlIHBsYWNlaG9sZGVyIHBhcmFtZXRlcnMgb24gdGhlIEFQSS4g RmVlZGJhY2sgd2VsY29tZSBvbiB3aGF0DQo+ID4gcGFyYW1ldGVycyBhcmUgbmVlZGVkIGZvciB0 aGlzIGZlYXR1cmUuDQo+ID4gPiA+DQo+ID4gPg0KPiA+ID4gV2Ugd291bGQgbGlrZSB0byBzZWUg dGhpcyBhcyBwYXJ0IG9mIFNwZWNpZmljYXRpb24uIFdlIHdpbGwgcHJvdmlkZQ0KPiA+ID4gbW9y ZSBkZXRhaWxzIG9uIHdoYXQgd2UoY2F2aXVtKSByZXF1aXJlLg0KPiA+DQo+ID4gW0Zpb25hXSBJ IGxvb2sgZm9yd2FyZCB0byBpdC4NCj4gPg0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4NCj4gPiA+ ID4gTm90ZSAzOiBUaGUgdHJpY2t5IHF1ZXN0aW9uIG9mIHdoZXJlIHRoZSBBUEkgYmVsb25ncyBX ZSBjb25zaWRlcmVkDQo+ID4gPiA+IDEuIEV4dGVuZGluZyBjcnlwdG9kZXYgMi4gTmV3IGFjY2Vs ZGV2IEFQSXMgZm9yIGRldmljZSBoYW5kbGluZyArDQo+ID4gPiA+IGNvbXByZXNzZGV2IEFQSXMg Zm9yIGRhdGEgcGF0aCAzLiBOZXcgYWNjZWxkZXYgZm9yIGFsbCBBUElzIDQuIE5ldw0KPiA+ID4g PiBjb21wcmVzc2RldiBBUEkNCj4gPiA+ID4NCj4gPiA+ID4gV2UncmUgcHJvcG9zaW5nIG9wdGlv biA0LCBoZXJlJ3Mgd2h5Og0KPiA+ID4gPiAxLiBFeHRlbmRpbmcgY3J5cHRvZGV2Og0KPiA+ID4g PiAgICAgLiAgKyBOaWNlIGNvZGUgcmUtdXNlLg0KPiA+ID4gPiAgICAgLiAgKyBDb25zaXN0ZW50 IHdpdGggTGludXgga2VybmVsIGFuZCBCU0QgYXBwcm9hY2hlcy4NCj4gPiA+ID4gICAgIC4gIC0g QnV0IG5vdCBhIGdvb2QgbmFtZS4NCj4gPiA+ID4gICAgIC4gIC0gV291bGQgaW5ldml0YWJseSBs ZWFkIHRvIHNvbWUgY3J5cHRvZGV2IEFQSSBicmVha2FnZSAtIGNhbiBiZQ0KPiA+IG1pbmltaXNl ZCwgYnV0IHRoZW4gbG9va3MgaGFja3kuDQo+ID4gPiBFLmcuDQo+ID4gPiA+ICAgICAgICAgICAg IHJ0ZV9jcnlwdG9kZXZfaW5mby5tYXhfbmJfcXVldWVfcGFpcnMgY3VycmVudGx5LiBXb3VsZCBu ZWVkDQo+ID4gdG8gZXh0ZW5kIHRvDQo+ID4gPiA+ICAgICAgICAgICAgIHJ0ZV9jcnlwdG9kZXZf aW5mby5tYXhfbmJfcXVldWVfcGFpcnMgKElkZWFsbHkgcmVuYW1lDQo+ID4gPiA+IHRoaXMgdG8g bWF4X25iX3N5bV8uLi4uIGJ1dCB0aGF0J3MgYW4NCj4gPiA+IEFQSSBicmVha2FnZSkNCj4gPiA+ ID4gICAgICAgICAgICAgcnRlX2NyeXB0b2Rldl9pbmZvLm1heF9uYl9jb21wX3F1ZXVlX3BhaXJz DQo+ID4gPiA+ICAgICAgICAgICAgIHJ0ZV9jcnlwdG9kZXZfaW5mby5tYXhfbmJfYXN5bV9xdWV1 ZV9wYWlycw0KPiA+ID4gPiAgICAgICAgICAgU2ltaWxhcmx5IGZuIG5hbWVzLCBlLmcuIHJ0ZV9j cnlwdG9kZXZfcXVldWVfcGFpcl9zZXR1cC4NCj4gPiA+ID4gICAgICAgICAgICBSZW5hbWUgdG8g cnRlX2NyeXB0b2Rldl9zeW1fcXVldWVfcGFpcl9zZXR1cCwgYWRkIF9jb21wDQo+ID4gPiA+IGFu ZCBfYXN5bSBmbnM/IE9yIGFkZA0KPiA+ID4gcGFyYW1ldGVyPw0KPiA+ID4gPiAyLiBOZXcgYWNj ZWxkZXYgQVBJcyBmb3IgZGV2aWNlIGhhbmRsaW5nICsgY29tcHJlc3NkZXYgQVBJcyBmb3IgZGF0 YQ0KPiA+IHBhdGg6DQo+ID4gPiA+ICAgICB+NzAlIG9mIGNyeXB0b2RldiBjb2RlIGlzIGRldmlj ZS1oYW5kbGluZyB3aGljaCBpcyBjb21tb24gdG8gYWxsDQo+ID4gYWNjZWxlcmF0b3JzLg0KPiA+ ID4gPiAgICAgUmF0aGVyIHRoYW4gcHJvdmlkaW5nIG5ldyBjb21wcmVzc2RldiBBUElzLCBwcm92 aWRlIEFQSXMgd2hpY2ggY2FuDQo+ID4gYmUgdXNlZCBmb3IgY29tcHJlc3Npb24NCj4gPiA+ID4g ICAgIGFuZCBhbHNvIG90aGVyIGFjY2VsZXJhdG9ycywgZS5nLiBiYmRldiwgRlBHQXMuIFdvdWxk IGxvb2sgbGlrZQ0KPiA+IHJ0ZV9hY2NlbGRldl9pbmZvX2dldCgpLA0KPiA+ID4gPiAgICAgcnRl X2FjY2VsZGV2X2NvbmZpZ3VyZSgpLCBydGVfY29tcHJlc3NfZW5xdWV1ZV9idXJzdCgpLCBldGMN Cj4gPiA+ID4gICAgIC4gKyBOaWNlIGZ1dHVyZSBjb2RlIHJlLXVzZS4NCj4gPiA+ID4gICAgIC4g KyBObyBjcnlwdG9kZXYgQVBJIGJyZWFrYWdlLCB0aG91Z2ggd291bGQgYmUgbmljZSBvdmVyIHRp bWUgdG8NCj4gPiBtb3ZlIHRvIGFjY2VsZGV2IEFQSXMgZm9yDQo+ID4gPiA+ICAgICAgICAgICBj cnlwdG9kZXYgYW5kIGRlcHJlY2F0ZSBjcnlwdG9kZXYgQVBJcy4NCj4gPiA+ID4gICAgIC4gLSBh Y2NlbGRldiBlaXRoZXIgaGFzIHRvIHVuZGVyc3RhbmQgc3RydWN0cyBmb3IgYWxsIHNlcnZpY2Vz IHdpdGgNCj4gPiByZXN1bHRpbmcgZGVwZW5kZW5jaWVzIE9SDQo+ID4gPiA+ICAgICAgICAgICAg IGl0J3MgaW5kZXBlbmRlbnQgd2l0aCBtaW5pbWFsIHR5cGUtY2hlY2tpbmcsIGxvdHMgb2Ygdm9p ZCogYW5kDQo+ID4gY2FzdGluZy4NCj4gPiA+ID4gICAgIC4gLSBwb3RlbnRpYWwgQVBJIGNodXJu IGlmIHNlcnZpY2VzIGhhdmUgZGlmZmVyZW50IG5lZWRzDQo+ID4gPiA+ICAgICAuIC0gdXNhYmls aXR5IC0gYXBwbGljYXRpb24gaGFzIHRvIHNvbWV0aW1lcyB1c2UgYWNjZWxkZXYsDQo+ID4gPiA+ IHNvbWV0aW1lcyBjb21wcmVzc2RldiAzLiBOZXcgYWNjZWxkZXYgZm9yIGFsbCBBUElzOg0KPiA+ ID4gPiAgICAgLiBBcyAyIGJ1dCB3aXRoIG9ubHkgdGhlIHhmb3JtcyBhbmQgb3BzIGRpZmZlcmVu dCBmb3IgZWFjaCBzZXJ2aWNlLiBBbGwNCj4gPiBBUElzIGFyZSBydGVfYWNjZWxkZXZfLi4uLg0K PiA+ID4gPiAgICAgLiBTaW1pbGFyIHByb3MvY29ucy4NCj4gPiA+ID4gICAgIC4gLSBObyBmbGV4 aWJpbGl0eSBmb3IgYWNjZWxlcmF0b3JzIHNlcnZpY2VzIHRvIGhhdmUNCj4gPiA+ID4gc2Vydmlj ZS1zcGVjaWZpYyBBUElzLiBTZXJ2aWNlcyBhcmUgbW9yZSB0aWdodGx5DQo+ID4gPiBjb3VwbGVk Lg0KPiA+ID4gPiA0LiBOZXcgY29tcHJlc3NkZXYgQVBJOiAocG9zc2libHkgd2l0aCBhbiBhY2Nl bGRldiB1bmRlciB0aGUgaG9vZCkNCj4gPiA+ID4gICAgIC4gKyBCZXR0ZXIgbmFtZQ0KPiA+ID4g PiAgICAgLiArIFVzYWJpbGl0eSAtIHJ0ZV9jb21wZGV2Xy4uLiBmb3IgZXZlcnl0aGluZw0KPiA+ ID4gPiAgICAgLiArIE5vIGNyeXB0b2RldiBBUEkgYnJlYWthZ2UNCj4gPiA+ID4gICAgIC4gKyBG bGV4aWJpbGl0eSB0byBhZGQgYW55IGNvbXByZXNzaW9uLXNwZWNpZmljIEFQSXMgaWYgbmVlZGVk Lg0KPiA+ID4gPiAgICAgLiArIFNpbXBsZXIsIG1vcmUgZGVjb3VwbGVkIGNvZGUNCj4gPiA+ID4g ICAgIC4gLSBNb3JlIGNvZGUgZHVwbGljYXRpb24uDQo+ID4gPiA+ICAgICAgICAgICBNYXkgaW4g YSBsYXRlciBpdGVyYXRpb24gaW1wbGVtZW50IGFuIGFjY2VsZGV2IHVuZGVyIHRoZSBob29kLCBm b3INCj4gPiBjb2RlIHJlLXVzZSwgYnV0DQo+ID4gPiA+ICAgICAgICAgICB0aGlzIGlzIGhpZGRl biBmcm9tIGFwcGxpY2F0aW9ucy4gU2VydmljZSBBUElzIGNvdWxkIHBpY2sgYW5kIGNob29zZQ0K PiA+IHdoYXRldmVyIG1ha2VzIHNlbnNlDQo+ID4gPiA+ICAgICAgICAgICBmcm9tIGFjY2VsZGV2 LiBQT0Mgb24gdGhpcyBpbi1wcm9ncmVzcywgYWxzbyBhd2FpdGluZyBIZW1hbnQNCj4gPiBBZ3Jh d2FsJ3MgcHJvcG9zZWQNCj4gPiA+ID4gICAgICAgICAgIHJ0ZV9yYXdfZGV2aWNlIFJGQywgd2hp Y2ggbWF5IGZpdCB0aGUgYWNjZWxkZXYgcm9sZS4NCj4gPiA+ID4NCj4gPiA+ID4gTm90ZSA0OiBD aGFpbmluZyBvZiBjb21wcmVzc2lvbiB3aXRoIG90aGVyIHNlcnZpY2VzLg0KPiA+ID4gPiAgICAg T3B0aW9uIDEgd291bGQgbWFrZSBpdCBlYXN5IHRvIGNoYWluIGNvbXByZXNzaW9uIHdpdGggc3lt DQo+ID4gPiA+IGNyeXB0by4gVGhvdWdoIG5vdCB3aXRoIG90aGVyIG5vbi0NCj4gPiA+IGNyeXB0 bw0KPiA+ID4gPiAgICAgb3BlcmF0aW9ucyBpZiB0aGlzIGlzIGEgZnV0dXJlIHVzZS1jYXNlLiBI b3dldmVyIGl0IGNhbiBiZQ0KPiA+ID4gPiBhY2hpZXZlZCB3aXRoIGFueSBvcHRpb24sIGZvbGxv d2luZyB0aGUNCj4gPiA+IHBhdHRlcm4NCj4gPiA+ID4gICAgIG9mIHJ0ZV9zZWN1cml0eSBBUEks IHNvIGlzIG5vdCBhIGZhY3RvciBpbiBhYm92ZSBkZWNpc2lvbi4NCj4gPiA+ID4NCj4gPiA+DQo+ ID4gPiBXZSBhcmUgaW4gZmF2b3Igb2Ygc29sdXRpb24gIzQuIEFwYXJ0IGZyb20gcmVhc29ucyBh cyB5b3Ugc3RhdGVkLA0KPiA+ID4gbmF0dXJlIG9mIGJvdGggb3BlcmF0aW9ucyBhcmUgdmVyeSBk aWZmZXJlbnQgYW5kIGl0IGFkZCBsb3RzIG9mDQo+ID4gPiBjb21wbGV4aXR5IHRvIGJvdGggZW5k cyAoY3J5cHRvICsgY29tcHJlc3Npb24pIHRvIGNvLWV4aXN0IHdpdGgNCj4gPiA+IGRpZmZlcmVu dCBiZWhhdmlvci4NCj4gPiA+IEhvd2V2ZXIgSSB3b3VsZCBsaWtlIHRvIHVuZGVyc3RhbmQgbW9y ZSBhYm91dCBhY2NlbGRldiBwcm9wb3NhbD8gSXMNCj4gPiA+IHRoZXJlIGFueSBkb2N1bWVudCB0 aGF0IEkgY2FuIHNlZSB0byB1bmRlcnN0YW5kcyBpdHMgcHVycG9zZT8NCj4gPg0KPiA+IFtGaW9u YV0gTm90IGF0IHRoZSBtb21lbnQuDQo+ID4gV2UnZCBsaWtlIHRvIHdhaXQgZm9yIEhlbWFudCdz IHJ0ZV9yYXdfZGV2aWNlcyBSRkMgYmVmb3JlIG1ha2luZyBhDQo+ID4gcHJvcG9zYWwgb24gdGhp cy4NCj4gPg0KPiANCj4gW1NoYWxseV0gT2suDQo+IA0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4N Cj4gPiA+ID4gQ29kZSBleHRyYWN0cyBiZWxvdzoNCj4gPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4N Cj4gPiA+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfY29tcHJlc3NkZXYvcnRlX2NvbXAuaA0K PiA+ID4gPiBiL2xpYi9saWJydGVfY29tcHJlc3NkZXYvcnRlX2NvbXAuaA0KPiA+ID4gPiArLyoq DQo+ID4gPiA+ICsgKiBAZmlsZSBydGVfY29tcC5oDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICog UlRFIGRlZmluaXRpb25zIGZvciBEYXRhIENvbXByZXNzaW9uIFNlcnZpY2UNCj4gPiA+ID4gKyAq DQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqIENvbXByZXNzaW9uIEFsZ29y aXRobXMgKi8NCj4gPiA+ID4gK2VudW0gcnRlX2NvbXBfYWxnb3JpdGhtIHsNCj4gPiA+ID4gKyAg ICAgIFJURV9DT01QX05VTEwgPSAxLA0KPiANCj4gW1NoYWxseV0gV2hhdCBpcyBhbiBBUEkgZXhw ZWN0YXRpb24gb24gc2VlaW5nIGFsZ29yaXRobSBhcyBOVUxMPw0KW0Zpb25hXSBwYXNzLXRocm91 Z2guIERhdGEgZnJvbSBzb3VyY2UgYnVmZmVyKHMpIGNvcGllZCB0byBkZXN0IGJ1ZmZlcihzKS4g DQpJJ20gbm90IHN1cmUgdGhlcmUncyBhIG5lZWQgZm9yIGl0LCBidXQgaWYgdGhlcmUgaXMgdGhl biB0aGF0J3Mgd2hhdCBpdCBzaG91bGQgZG8uDQoNCj4gDQo+ID4gPiA+ICsgICAgICAvKio8IE5V TEwgY29tcHJlc3Npb24gYWxnb3JpdGhtLiAqLw0KPiA+ID4gPiArICAgICAgUlRFX0NPTVBfREVG TEFURSwNCj4gPiA+ID4gKyAgICAgIC8qKjwgREVGTEFURSBjb21wcmVzc2lvbiBhbGdvcml0aG0N Cj4gPiA+ID4gKyAgICAgICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTEgKi8N Cj4gPiA+ID4gKyAgICAgIFJURV9DT01QX0xJU1RfRU5EDQo+ID4gPiA+ICt9Ow0KPiA+ID4gPiAr DQo+ID4gPg0KPiA+ID4gV2Ugc3VwcG9ydCBMWlMgb2ZmbG9hZCBhcyB3ZWxsLCBuZWVkIHRvIGV4 dGVuZCB3aXRoIFJURV9DT01QX0xaUy4NCj4gPg0KPiA+IFtGaW9uYV0gQWdyZWVkLiBEbyB5b3Ug c2VlIGFueSBuZWVkIGZvciBsenMtc3BlY2lmaWMgcGFyYW1ldGVycz8gaS5lLiBpcyB0aGVyZQ0K PiA+IGEgIG5lZWQgZm9yIGEgc3RydWN0IHJ0ZV9jb21wX2x6c19wYXJhbXMgYW5kLCBpZiBzbywg d2hhdCBzaG91bGQgaXQgY29udGFpbj8NCj4gPg0KPiANCj4gW1NoYWxseV0gTm8uIEN1cnJlbnQg ZXhwb3J0ZWQgZW51bS9wYXJhbSBhcmUgc3VmZmljaWVudC4NCltGaW9uYV0gb2suDQoNCj4gDQo+ ID4gPg0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKiogQ29tcHJlc3Npb24gY2hlY2tzdW0gdHlwZXMg Ki8NCj4gPiA+ID4gK2VudW0gcnRlX2NvbXBfY2hlY2tzdW1fdHlwZSB7DQo+ID4gPiA+ICsgICAg ICBSVEVfQ09NUF9OT05FLA0KPiA+ID4gPiArICAgICAgLyoqPCBObyBjaGVja3N1bSBnZW5lcmF0 ZWQgKi8NCj4gPiA+ID4gKyAgICAgIFJURV9DT01QX0NSQzMyLA0KPiA+ID4gPiArICAgICAgLyoq PCBHZW5lcmF0ZXMgYSBDUkMzMiBjaGVja3N1bSwgYXMgdXNlZCBieSBnemlwICovDQo+ID4gPiA+ ICsgICAgICBSVEVfQ09NUF9BRExFUjMyLA0KPiA+ID4gPiArICAgICAgLyoqPCBHZW5lcmF0ZXMg YW4gQWRsZXItMzIgY2hlY2tzdW0sIGFzIHVzZWQgYnkgemxpYiAqLw0KPiA+ID4gPiArICAgICAg UlRFX0NPTVBfQ1JDMzJfQURMRVIzMiwNCj4gPiA+ID4gKyAgICAgIC8qKjwgR2VuZXJhdGVzIGJv dGggQWRsZXItMzIgYW5kIENSQzMyIGNoZWNrc3VtcywgY29uY2F0ZW5hdGVkLg0KPiA+ID4gPiAr ICAgICAgKiBDUkMzMiBpcyBpbiB0aGUgbG93ZXIgMzJiaXRzLCBBZGxlci0zMiBpbiB0aGUgdXBw ZXIgMzIgYml0cy4NCj4gPiA+ID4gKyAgICAgICovDQo+ID4gPiA+ICt9Ow0KPiA+ID4gPiArDQo+ ID4gPg0KPiA+ID4gSW4gYWRkaXRpb24gdG8gdGhlc2Ugd2Ugc3VwcG9ydCBTSEExIGFuZCBTSEEy NTYuDQo+ID4gPiBUbyBpbmNvcnBvcmF0ZSB0aGVzZSwgd2Ugc3VnZ2VzdCB0aGUgZm9sbG93aW5n Og0KPiA+ID4NCj4gPiA+IGVudW0gcnRlX2NvbXBfaW50ZWdyaXR5X2FsZ28gew0KPiA+ID4gICAg UlRFX0NPTVBfTk9ORSwNCj4gPiA+ICAgIFJURV9DT01QX0NSQzMyLA0KPiA+ID4gICAgUlRFX0NP TVBfQURMRVIzMiwNCj4gPiA+ICAgIFJURV9DT01QX0NSQzMyX0FETEVSMzIsDQo+ID4gPiAgICBS VEVfQ09NUF9TSEExLA0KPiA+ID4gICAgUlRFX0NPTVBfU0hBMjU2LA0KPiA+ID4gfTsNCj4gPg0K PiA+IFtGaW9uYV0gQ2FuIHlvdSBlbGFib3JhdGUgb24gd2h5IHRoZXNlIGFyZSBuZWVkZWQgaW4g dGhlIGNvbXByZXNzaW9uDQo+ID4gY29udGV4dD8NCj4gDQo+IFtTaGFsbHldIE9uZSBleGFtcGxl IHR5cGljYWwgdXNlIGNhc2VzIGFyZSBpbiBEYXRhIENlbnRyZSBhcHBsaWNhdGlvbnMgd2hlcmUg SGFzaCBpcyB1c2VkIGFzIHVuaXF1ZSBrZXkNCj4gZm9yIERhdGEgZmluZ2VycHJpbnRpbmcvaWRl bnRpZmljYXRpb24gYW5kIERlLWR1cGxpY2F0aW9uLg0KPiANCj4gPiBXaXRoIGxlbmd0aHMgb2Yg MjAgYW5kIDMyIGJ5dGVzIHRoZXkgYWRkIGNvbnNpZGVyYWJsZSBvdmVyaGVhZCB0byBzbWFsbGVy DQo+ID4gcGFja2V0cy4NCj4gDQo+IFtTaGFsbHldIFR5cGljYWwgdXNhZ2UgaXMgd2l0aCBsYXJn ZXIgYnVmZmVycygyS0IgYW5kIGFib3ZlKS4NCj4gDQo+ID4gSG93IGRvIHlvdSBwcm9wb3NlIHRv IHJldHVybiB0aGUgY2hlY2tzdW0/IFRoZSBvdGhlcnMgcHJvcG9zZWQgYWxsIGZpdCBpbnRvDQo+ ID4gYW4gOC1ieXRlIGZpZWxkIGluIHRoZSBvcC4NCj4gPg0KPiANCj4gW1NoYWxseV0gVXNlciBj YW4gcmVxdWVzdCBib3RoIGNoZWNrc3VtIGFuZCBoYXNoIGF0IG91dHB1dC4gSSB3aWxsIHByb3Bv c2UgYWRkaXRpb25hbCBhc3NvY2lhdGVkDQo+IGNoYW5nZXMgYWZ0ZXIgd2UgZnJlZXplIGN1cnJl bnQgUkZDIHZlcnNpb24uDQo+IA0KW0Zpb25hXSBvay4gU28gbWF5YmUgaXQgc2hvdWxkIGJlIHNl cGFyYXRlIGZyb20gY2hlY2tzdW0gZW51bT8gRS5nLg0KZW51bSBydGVfY29tcF9oYXNoX2FsZ28g ew0KICAgIFJURV9DT01QX05PTkUsDQogICAgUlRFX0NPTVBfU0hBMSwNCiAgICBSVEVfQ09NUF9T SEEyNTYsDQp9Ow0KQW5kIG5lZWQgdG8gcHJvdmlkZSBhIHZpcnQvcGh5cyBwdHIgdG8gYSBkYXRh IGJ1ZmZlciBvZiBhcHByb3ByaWF0ZSBzaXplLg0KQW5kIHZpYSBjYXBhYmlsaXR5IFBNRCBjYW4g c2F5IHdoZXRoZXIgc3VwcG9ydGVkIG9yIG5vdC4NCg0KDQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8q KiBDb21wcmVzc2lvbiBEZWZsYXRlIEh1ZmZtYW4gVHlwZSAqLyBlbnVtIHJ0ZV9jb21wX2h1ZmZt YW4gew0KPiA+ID4gPiArICAgICAgUlRFX0NPTVBfU1RBVElDLA0KPiA+ID4gPiArICAgICAgLyoq PCBTdGF0aWMgZW5jb2RpbmcgKi8NCj4gPiA+ID4gKyAgICAgIFJURV9DT01QX0RZTkFNSUMsDQo+ ID4gPiA+ICsgICAgICAvKio8IER5bmFtaWMgZW5jb2RpbmcgKi8NCj4gPiA+ID4gK307DQo+ID4g PiA+ICsNCj4gPiA+DQo+ID4gPiBXZSB3b3VsZCBsaWtlIHRvIHNlZSBhIFJURV9DT01QX0RFRkFV TFQgZm9yIHNpdHVhdGlvbnMgd2hlcmUNCj4gPiA+IGFwcGxpY2F0aW9uIGNhbm5vdCBtYWtlIGEg Y2hvaWNlLiBBbHNvLCBUbyBiZSBtb3JlIGNvbnNpc3RlbnQgdG8NCj4gPiA+IG5hbWluZyBhbmQg ZGVmbGF0ZSBSRkMxOTUxLCBzaG91bGQgYmUgcmVuYW1lZCBhcyBSVEVfQ09NUF9GSVhFRCBhbmQN Cj4gPiA+IFJURV9DT01QX0RZTkFNSUMuDQo+ID4NCj4gPiBbRmlvbmFdIEFncmVlZA0KPiA+ID4N Cj4gPiA+ID4gKy8qKiBDb21wcmVzc2lvbiBpbnRlZ3JpdHkgY2hlY2sgKi8NCj4gPiA+ID4gK2Vu dW0gcnRlX2NvbXBfaW50ZWdyaXR5X2NoZWNrIHsNCj4gPiA+ID4gKyAgICAgIFJURV9DT01QX05P X1ZFUklGWSwNCj4gPiA+ID4gKyAgICAgIC8qKjwgTm8gaW50ZWdyaXR5IGNoZWNrIG9uIG91dHB1 dCBkYXRhICovDQo+ID4gPiA+ICsgICAgICBSVEVfQ09NUF9WRVJJRlksDQo+ID4gPiA+ICsgICAg ICAvKio8IEludGVncml0eSBjaGVjayBvbiBvdXRwdXQgZGF0YS4gT25seSBhcHBsaWVzIHRvIGNv bXByZXNzDQo+ID4gb3BlcmF0aW9uLg0KPiA+ID4gPiArICAgICAgKiBBZnRlciBjb21wcmVzcyBv cGVyYXRpb24gZG9uZSwgZGVjb21wcmVzcyBhbmQgdmVyaWZ5IGl0IG1hdGNoZXMNCj4gPiBvcmln aW5hbCBkYXRhLg0KPiA+ID4gPiArICAgICAgKi8NCj4gPiA+DQo+ID4gPiBUaGlzIGxvb2tzIG1v cmUgdG8gbWUgYXMgZGlhZ25vc3RpYyB0b29sIC8gdGVzdCBhcHAuLiBJdCBzaG91bGQgYmUNCj4g PiA+IHBhcnQgb2YgYW4gQXBwbGljYXRpb24gdGhhbiBhIGxpYnJhcnkNCj4gPiBbRmlvbmFdDQo+ ID4gSWYgb25seSBhIGRpYWdub3N0aWMgdG9vbCB0aGVuIHllcywgaXQgbmVlZG4ndCBiZSBvbiB0 aGUgQVBJLg0KPiA+IEhvd2V2ZXIsIGRhdGEgaW50ZWdyaXR5IGlzIGEgY3JpdGljYWwgcmVxdWly ZW1lbnQgZm9yIGxvc3NsZXNzIGNvbXByZXNzaW9uLiBJdCBpcw0KPiA+IGV4dHJlbWVseSBkaWZm aWN1bHQgdG8gZnVsbHkgdmFsaWRhdGUgYW55IGNvbXByZXNzaW9uIGltcGxlbWVudGF0aW9uIGR1 ZSB0bw0KPiA+IHRoZSBpbmZpbml0ZSB2YXJpZXR5IG9mIGlucHV0IGRhdGEgcGF0dGVybnMgYW5k IHRoZSBmYWN0IHRoYXQgdGhlcmUgYXJlIG1hbnkNCj4gPiBwb3NzaWJsZSBvdXRwdXRzIGZvciBh bnkgZ2l2ZW4gaW5wdXQuDQo+ID4gU28gYXBwbGljYXRpb25zIHNvbWV0aW1lcyBidWlsZCB2ZXJp ZmljYXRpb24gaW50byB0aGUgc3lzdGVtLg0KPiA+IFRoaXMgY291bGQgYmUgZG9uZSBieSB0aGUg YXBwbGljYXRpb24sIGFib3ZlIHRoZSBBUEksIGJ1dCBhcyBpcyBjb21wdXRlDQo+ID4gaW50ZW5z aXZlIGl0IGNhbiBhbHNvIGJlbmVmaXQgZnJvbSBvZmZsb2FkaW5nIHRvIGhhcmR3YXJlLiBBbmQg c2F2ZXMgUENJDQo+ID4gYmFuZHdpZHRoIGlmIGRvbmUgaW4gc2FtZSBvcGVyYXRpb24gYXMgY29t cHJlc3Npb24uICBTbyB3ZSB3b3VsZCBsaWtlIHRvDQo+ID4gaGF2ZSB0aGlzIG9wdGlvbiBvbiB0 aGUgQVBJLg0KPiA+IEFzIHdpdGggYW55IG9wdGlvbiB3ZSBzaG91bGQgYWxzbyBleHBvc2UgaXQg b24gdGhlIGNhcGFiaWxpdGllcyBBUEkgYW5kIFBNRHMNCj4gPiBjYW4gc2lnbmFsIHRvIHRoZSBh cHBsaWNhdGlvbiB3aGV0aGVyIG9yIG5vdCB0aGV5IHN1cHBvcnQgaXQuDQo+ID4NCj4gDQo+IFtT aGFsbHldIENhcGFiaWxpdHkgaWRlYSBsb29rcyBnb29kIHRvIG1lIG1ha2luZyBpdCBvcHRpb25h bC4gSGVyZSBhcmUgZmV3IG1vcmUgdGhpbmdzIHRvIGNvbnNpZGVyOg0KPiAtIE1lbW9yeSByZXF1 aXJlbWVudCB0byBzdG9yZSBkZWNvbXByZXNzaW9uIHJlc3VsdHMgLSBzaG91bGQgZ2V0IGZyb20g dXNlciBPciBhbGxvY2F0ZSBpbnRlcm5hbGx5IGlmDQo+IHZlcmlmaWNhdGlvbiB0dXJuZWQgb24/ DQo+IC0gSXQncyB1c2FnZSBpZiBidXJzdCBzaXplID4gMS4NCj4gLSBEaWZmZXJlbnQgaW1wbGVt ZW50YXRpb24gbWF5IGhhdmUgdGhlaXIgb3duIHZlcnNpb24gc28gZm9sbG93aW5nIGNvbW1lbnQg Y291bGQgYmUgbW9yZSBnZW5lcmljDQo+IHN1Y2ggYXMNCj4gICAgICAgIC8qKjwgSW50ZWdyaXR5 IGNoZWNrIG9uIG91dHB1dCBkYXRhLiBPbmx5IGFwcGxpZXMgdG8gY29tcHJlc3Mgb3BlcmF0aW9u Lg0KPiAgICAgICAgICAgKiBWZXJpZnkgY29ycmVjdG5lc3Mgb2YgY29tcHJlc3Npb24gb3BlcmF0 aW9uIG9uIGRhdGEuDQo+ICAgICAgICAgICovDQo+IA0KW0Zpb25hXSBXZSBjYW4gc2ltcGxpZnkg YW5kIHJlbW92ZSB0aGlzIGZlYXR1cmUuIE1heWJlIHdlJ2xsIHByb3Bvc2UgYW4gQVBJIGV4dGVu c2lvbiBmb3IgaXQgaW4gYSBsYXRlciByZWxlYXNlLg0KDQo+IEp1c3QgZm9yIG15IGN1cmlvc2l0 eSwgZG9lcyB5b3VyIGhhcmR3YXJlIHN1cHBvcnQgdmVyaWZpY2F0aW9uIG9mZmxvYWQ/DQoNCj4g PiA+DQo+ID4gPiA+ICt9Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICtlbnVtIHJ0ZV9jb21wX2ZsdXNo X2ZsYWcgew0KPiA+ID4gPiArICAgICAgUlRFX0NPTVBfRkxVU0hfTk9ORSwNCj4gPiA+ID4gKyAg ICAgIC8qKjwgVE9ETyAqLw0KPiA+ID4gPiArICAgICAgUlRFX0NPTVBfRkxVU0hfRlVMTCwNCj4g PiA+ID4gKyAgICAgIC8qKjwgVE9ETyAqLw0KPiA+ID4gPiArICAgICAgUlRFX0NPTVBfRkxVU0hf RklOQUwNCj4gPiA+ID4gKyAgICAgIC8qKjwgVE9ETyAqLw0KPiA+ID4gPiArfTsNCj4gPiA+ID4g Kw0KPiA+ID4NCj4gPiA+IFdlIG5lZWQgdG8gYWRkIFJURV9DT01QX0ZMVVNIX1NZTkMuDQpbRmlv bmFdIEFncmVlZC4NCg0KPiA+ID4gIEFsc28sIHRoZXJlIGNvdWxkIGJlIHNvbWUgYWxnb3JpdGht cyB3aGVyZSB0aGVzZSBGTFVTSCB0eXBlIG1heSBub3QNCj4gPiA+IGJlICAgcmVsZXZhbnQgb3Ig bm90IGFsbCBtYXkgYmUgc3VwcG9ydGVkICwgc28gd2hhdCBhcmUgUE1EDQo+ID4gPiBleHBlY3Rh dGlvbnMgZm9yIHN1Y2ggICBjYXNlPw0KPiA+IFtGaW9uYV0gTGV0J3MgaG9sZCB0aGUgZGlzY3Vz c2lvbiBvZiBmbHVzaCBmbGFnIHZhbHVlcyB1bnRpbCB3ZSB0YWxrIGFib3V0DQo+ID4gc3RhdGVm dWwgY29tcHJlc3Npb24uDQo+ID4gSWYgYSBQTUQgZG9lc24ndCBzdXBwb3J0IGEgZmx1c2ggZmxh ZyB2YWx1ZSB3ZSBzaG91bGQgcHJvdmlkZSBmb3IgdGhpcyB0byBiZQ0KPiA+IHNpZ25hbGxlZCBv biB0aGUgY2FwYWJpbGl0aWVzIEFQSS4NCj4gPg0KPiANCj4gW1NoYWxseV0gT2suDQo+IA0KPiA+ ID4NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqIFN0YXR1cyBvZiBjb21wcmVzc2lvbiBvcGVyYXRp b24gKi8gZW51bSBydGVfY29tcF9vcF9zdGF0dXMgew0KPiA+ID4gPiArICAgICAgUlRFX0NPTVBf T1BfU1RBVFVTX1NVQ0NFU1MsDQo+ID4gPiA+ICsgICAgICAvKio8IE9wZXJhdGlvbiBjb21wbGV0 ZWQgc3VjY2Vzc2Z1bGx5ICovDQo+ID4gPiA+ICsgICAgICBSVEVfQ09NUF9PUF9TVEFUVVNfTk9U X1BST0NFU1NFRCwNCj4gDQo+IFtTaGFsbHldIEkgaGF2ZSBzb21lIHF1ZXN0aW9ucyBhcm91bmQg aXQsIHBsZWFzZSBzZWUgbXkgY29tbWVudHMgb24gcnRlX2NvbXBfb3Agc3RydWN0dXJlLg0KPiAN Cj4gPiA+ID4gKyAgICAgIC8qKjwgT3BlcmF0aW9uIGhhcyBub3QgeWV0IGJlZW4gcHJvY2Vzc2Vk IGJ5IHRoZSBkZXZpY2UgKi8NCj4gPiA+ID4gKyAgICAgIFJURV9DT01QX09QX1NUQVRVU19JTlZB TElEX1NFU1NJT04sDQo+ID4gPiA+ICsgICAgICAvKio8IG9wZXJhdGlvbiBmYWlsZWQgZHVlIHRv IGludmFsaWQgc2Vzc2lvbiBhcmd1bWVudHMgKi8NCj4gPiA+ID4gKyAgICAgIFJURV9DT01QX09Q X1NUQVRVU19JTlZBTElEX0FSR1MsDQo+ID4gPiA+ICsgICAgICAvKio8IE9wZXJhdGlvbiBmYWls ZWQgZHVlIHRvIGludmFsaWQgYXJndW1lbnRzIGluIHJlcXVlc3QgKi8NCj4gPiA+ID4gKyAgICAg IFJURV9DT01QX09QX1NUQVRVU19FUlJPUiwNCj4gPiA+ID4gKyAgICAgIC8qKjwgRXJyb3IgaGFu ZGxpbmcgb3BlcmF0aW9uICovDQo+ID4gPiA+ICsgICAgICBSVEVfQ09NUF9PUF9TVEFUVVNfT1ZF UkZMT1csDQo+ID4gPg0KPiA+ID4gSWYgSSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIGNvcnJlY3Rs eSB0aGVuIHRoaXMgaW5kaWNhdGVzIGEgc2l0dWF0aW9uDQo+ID4gPiB3aGVyZSBvdXRwdXQgYnVm ZmVyIGV4aGF1c3RlZCBkdXJpbmcgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbi4NCj4gPiA+IFNv IGl0IHNob3VsZCBiZSByZW5hbWVkIGFzIFJURV9DT01QX09QX1NUQVRVU19PVVRfT0ZfU1BBQ0UN Cj4gPiBbRmlvbmFdIEFncmVlZC4NCj4gPg0KPiA+ID4NCj4gPiA+ID4gKyAgICAgIC8qKjwgT3V0 cHV0IGJ1ZmZlciBmaWxsZWQgdXAgYmVmb3JlIGFsbCBkYXRhIGluIGlucHV0IGJ1ZmZlciB3YXMN Cj4gPiBjb25zdW1lZCAqLw0KPiA+ID4NCj4gPiA+IFRoaXMgY291bGQgYWxzbyBhcmlzZSB3aGVy ZSBpbnB1dCBidWZmZXIgaXMgZnVsbHkgY29uc3VtZWQgZHVyaW5nDQo+ID4gPiBkZWNvbXByZXNz aW9uLiBTbyBjb21tZW50IGNhbiBiZSBtb3JlIGdlbmVyaWMgc3VjaCBhcw0KPiA+ID4g4oCcT3V0 cHV0IGJ1ZmZlciBleGhhdXN0ZWQgZHVyaW5nIG9wZXJhdGlvbi7igJ0NCj4gPiBbRmlvbmFdIElu IHRoaXMgY2FzZSBJIHdvdWxkIGV4cGVjdCB0aGUgc3RhdHVzIHRvIGJlDQo+ID4gUlRFX0NPTVBf T1BfU1RBVFVTX1NVQ0NFU1MuDQo+ID4gVGhlIGNvbnN1bWVkIHBhcmFtZXRlciBjYW4gYmUgdXNl ZCBieSB0aGUgYXBwbGljYXRpb24gdG8gZGV0ZWN0IHRoYXQgaXQgaGFzDQo+ID4gY29tZSB0byB0 aGUgZW5kIG9mIHRoZSBvdXRwdXQgYnVmZmVyLg0KPiA+DQo+IA0KPiBbU2hhbGx5XSAtIEhhdmUg YSBxdWVzdGlvbiBoZXJlLCBjb25zaWRlciBhIHNjZW5hcmlvDQo+ICAtICBpbnB1dCBpcyBmdWxs eSByZWFkIGkuZSBjb25zdW1lZCA9IGxlbmd0aCBvZiBzcmMgZGF0YSwNCj4gIC0gb3V0cHV0IGlz IHdyaXR0ZW4gaS5lLiBwcm9kdWNlZCA9IGxlbmd0aCBvZiBkYXRhIHdyaXR0ZW4gaW4gZHN0IGJ1 ZmZlciwgYW5kDQo+ICAtIHN0YXR1cyA9IE9QX1NUQVRVU19TVUNDRVNTDQo+ICAgICBUaGVuIGhv dyBhbiBhcHBsaWNhdGlvbiB3b3VsZCBrbm93IHRoZXJlIGlzIG1vcmUgZGF0YSB0byBiZSBmbHVz aGVkIGFuZCBhcHBsaWNhdGlvbiBuZWVkIHRvIHJlLQ0KPiBlbnF1ZXVlIHJlcXVlc3Qgd2l0aCBt b3JlIG91dHB1dCBidWZmZXI/DQo+IA0KW0Zpb25hXSBPaywgSSBzZWUgd2hhdCB5b3UgbWVhbi4g QnV0IG1heWJlIGNvbW1lbnQgc2hvdWxkIGJlIA0KIk91dHB1dCBidWZmZXIgcmFuIG91dC1vZi1z cGFjZSBiZWZvcmUgb3BlcmF0aW9uIGNvbXBsZXRlZC4iICAgDQpTbyBpZiBhbGwgaW5wdXQgZGF0 YSB3YXMgY29uc3VtZWQsIGJ1dCB0aGVyZSBpcyBzdGlsbCBkYXRhIHRvIGJlIGZsdXNoZWQsIHRo ZW4gT1VUX09GX1NQQUNFIHNob3VsZCBiZSByZXR1cm5lZC4NCkJ1dCBpZiBhbGwgaW5wdXQgZGF0 YSB3YXMgY29uc3VtZWQgYW5kIGFsbCBkYXRhIGZsdXNoZWQgdG8gZml0IGV4YWN0bHkgaW4gb3V0 cHV0IGJ1ZmZlciB0aGVuIFNVQ0NFU1MgY2FuIGJlIHJldHVybmVkLiANCg0KPiA+DQo+ID4gPiA+ ICsgICAgICBSVEVfQ09NUF9PUF9TVEFUVVNfVkVSSUZZX0ZBSUxFRA0KPiA+ID4gPiArICAgICAg LyoqPCBEZWNvbXByZXNzaW9uIGFmdGVyIGNvbXByZXNzaW9uIGZhaWxlZCB0byByZWdlbmVyYXRl IG9yaWdpbmFsDQo+ID4gZGF0YSAqLw0KPiANCj4gW1NoYWxseV0gSXQgY2FuIHNpbXBseSBiZSAi ZGF0YSB2ZXJpZmljYXRpb24gZmFpbGVkIi4NCltGaW9uYV0gV2UgY2FuIHJlbW92ZSB0aGlzLg0K IA0KPiA+ID4NCj4gPiA+IEJlbGlldmUgaXQgaXNuJ3QgbmVlZGVkIHRvIGJlIHBhcnQgb2YgU3Bl Yy4NCj4gPiA+DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIC8vTm90ZToNCj4gPiA+ID4gKyAg ICAgIC8vUUFUIEFQSSBoYXMgMTkgZXJyb3IgdHlwZXMuDQo+ID4gPiA+ICsgICAgICAvL0lTQS1s IGhhcyA1IGluZmxhdGUgYW5kIDYgZGVmbGF0ZSBlcnJvcnMuDQo+ID4gPiA+ICsgICAgICAvL3ps aWIgaGFzIDYgZXJyb3JzDQo+ID4gPiA+ICsgICAgICAvL1Byb3Bvc2Ugb25seSBpbmNsdWRlIGNv bW1vbiBzdWJzZXQgaW4gc3RhdHVzIC0gb25seSB2YWx1ZXMgd2hlcmUNCj4gPiBhcHBsIHNob3Vs ZCBoYXZlIGRpZmZlcmVudA0KPiA+ID4gYmVoYXZpb3VyLg0KPiA+ID4gPiArICAgICAgLy9BZGQg c2VwYXJhdGUgZXJyb3IgZmllbGQgb24gb3AgcmV0dXJuIHdoaWNoIGEgUE1EIGNvdWxkIHBvcHVs YXRlDQo+ID4gd2l0aCBQTUQtc3BlY2lmaWMgZGVidWcNCj4gPiA+IGluZm8uDQo+ID4gPg0KPiA+ ID4gUHJvYmFibHkgc2hvdWxkIGFkZCBSVEVfQ09NUF9PUF9TVEFUVVNfSU5WQUxJRF9TVEFURSBp biBjYXNlIGFuDQo+ID4gPiBBUEkgaXMgaW52b2tlZCBpbiBpbnZhbGlkIHN0YXRlLg0KPiA+IFtG aW9uYV0gQWdyZWVkDQo+ID4NCj4gPiA+IFJlc3QgU3Vic2V0IGxvb2tzIHNlbGYtY29udGFpbmVk Lg0KPiA+ID4NCj4gPiA+ID4gK307DQo+ID4gPiA+ICsNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoq IENvbXByZXNzaW9uIHRyYW5zZm9ybSB0eXBlcyAqLw0KPiA+ID4gPiArZW51bSBydGVfY29tcF94 Zm9ybV90eXBlIHsNCj4gPiA+ID4gKyAgICAgIFJURV9DT01QX0NPTVBSRVNTLA0KPiA+ID4gPiAr ICAgICAgLyoqPCBDb21wcmVzc2lvbiBzZXJ2aWNlIC0gY29tcHJlc3MgKi8NCj4gPiA+ID4gKyAg ICAgIFJURV9DT01QX0RFQ09NUFJFU1MsDQo+ID4gPiA+ICsgICAgICAvKio8IENvbXByZXNzaW9u IHNlcnZpY2UgLSBkZWNvbXByZXNzICovDQo+ID4gPiA+ICsgICAgICBSVEVfQ09NUF9DSEVDS1NV TQ0KPiA+ID4gPiArICAgICAgLyoqIENvbXByZXNzaW9uIHNlcnZpY2UgLSBnZW5lcmF0ZSBjaGVj a3N1bSAqLw0KPiA+ID4gPiArfTsNCj4gPiA+ID4gKw0KPiA+ID4NCj4gPiA+IEVudW1lcmF0aW9u IG1heSBiZSByZW5hbWVkIGFzIHJ0ZV9jb21wX29wX3R5cGUNCj4gPiBbRmlvbmFdIFNlZSBhbnN3 ZXIgcmUgeGZvcm1zIGJlbG93Lg0KPiA+DQo+ID4gPg0KPiA+ID4gPiArLyoqIFBhcmFtZXRlcnMg c3BlY2lmaWMgdG8gdGhlIGRlZmxhdGUgYWxnb3JpdGhtICovDQo+ID4gPiA+ICtzdHJ1Y3QgcnRl X2NvbXBfZGVmbGF0ZV9wYXJhbXMgew0KPiA+ID4gPiArICAgICAgZW51bSBydGVfY29tcF9odWZm bWFuIGh1ZmZtYW47DQo+ID4gPiA+ICsgICAgICAvKio8IENvbXByZXNzaW9uIGh1ZmZtYW4gZW5j b2RpbmcgdHlwZSAqLw0KPiA+ID4gPiArfTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4g PiA+ICsgKiBTZXNzaW9uIFNldHVwIERhdGEgY29tbW9uIHRvIGFsbCBjb21wcmVzcyB0cmFuc2Zv cm1zLg0KPiA+ID4gPiArICogSW5jbHVkZXMgcGFyYW1ldGVycyBjb21tb24gdG8gc3RhdGVsZXNz IGFuZCBzdGF0ZWZ1bA0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtzdHJ1Y3QgcnRlX2NvbXBfY29t cHJlc3NfY29tbW9uX3BhcmFtcyB7DQo+ID4gPiA+ICsgICAgICBlbnVtIHJ0ZV9jb21wX2FsZ29y aXRobSBhbGdvOw0KPiA+ID4gPiArICAgICAgLyoqPCBBbGdvcml0aG0gdG8gdXNlIGZvciBjb21w cmVzcyBvcGVyYXRpb24gKi8NCj4gPiA+ID4gKyAgICAgIHVuaW9uIHsNCj4gPiA+ID4gKyAgICAg ICAgICAgIHN0cnVjdCBydGVfY29tcF9kZWZsYXRlX3BhcmFtcyBkZWZsYXRlOw0KPiA+ID4gPiAr ICAgICAgICAgICAgLyoqPCBQYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBkZWZsYXRlIGFsZ29y aXRobSAqLw0KPiA+ID4gPiArICAgICAgfTsgLyoqPCBBbGdvcml0aG0gc3BlY2lmaWMgcGFyYW1l dGVycyAqLw0KPiA+ID4gPiArICAgICAgdWludDhfdCBsZXZlbDsNCj4gPiA+ID4gKyAgICAgIC8q KjwgQ29tcHJlc3Npb24gbGV2ZWwNCj4gPiA+ID4gKyAgICAgICogUmFuZ2UgaXMgMS05LCB3aGVy ZSAxIGlzIGZhc3Rlc3QgY29tcHJlc3Npb24NCj4gPiA+ID4gKyAgICAgICogYnV0IHdvcnN0LCBp LmUuIGhpZ2hlc3QsIGNvbXByZXNzaW9uIHJhdGlvLg0KPiA+ID4gPiArICAgICAgKiBIaWdoZXIg bnVtYmVycyBtYXkgZ2l2ZSBiZXR0ZXIgY29tcHJlc3Npb24gcmF0aW9zIGFuZCBhcmUgbGlrZWx5 DQo+ID4gc2xvd2VyLg0KPiA+ID4gPiArICAgICAgKiBUaGUgbnVtYmVyIGlzIGludGVycHJldGVk IGJ5IGVhY2ggUE1EIGRpZmZlcmVudGx5Lg0KPiA+ID4gPiArICAgICAgICovDQo+ID4gPg0KPiA+ ID4gRGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBvZiBzYW1lIGFsZ28gbWF5IGhhdmUgZGlmZmVy ZW50IGxldmVscw0KPiA+ID4gc3VwcG9ydGVkLiBTbywgd2UgY2FuIGFkZCBlbnVtIGFsb25nc2lk ZSB0aGlzIHBhcmFtZXRlciBzdWNoIGFzOg0KPiA+ID4NCj4gPiA+IGVudW0gcnRlX2NvbXBfY29t cHJlc3Npb25fbGV2ZWwgew0KPiA+ID4gUlRFX0NPTVBfQ09NUFJFU1NJT05fTEVWRUxfREVGQVVM VD0wLA0KPiA+ID4gLyoqIFVzZSBQTUQgRGVmYXVsdCAqLw0KPiA+ID4gUlRFX0NPTVBfQ09NUFJF U1NJT05fTEVWRUxfTUlOPTEsDQo+ID4gPiAvKiogRmFzdGVzdCBDb21wcmVzc2lvbiAqLw0KPiA+ ID4gUlRFX0NPTVBfQ09NUFJFU1NJT05fTEVWRUxfTUFYPTkNCj4gPiA+IC8qKiBNYXhpbXVtIGxl dmVsIHN1cHBvcnRlZCBieSBjb21wcmVzc2lvbiBQTUQgKi8NCj4gPiA+IH0NCj4gPiBbRmlvbmFd IEFncmVlZC4NCj4gPg0KPiA+ID4NCj4gPiA+ID4gK307DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8q Kg0KPiA+ID4gPiArICogU2Vzc2lvbiBTZXR1cCBEYXRhIGZvciBzdGF0ZWZ1bCBjb21wcmVzcyB0 cmFuc2Zvcm0uDQo+ID4gPiA+ICsgKiBFeHRyYSBwYXJhbXMgZm9yIHN0YXRlZnVsIHRyYW5zZm9y bQ0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtzdHJ1Y3QgcnRlX2NvbXBfY29tcHJlc3Nfc3RhdGVm dWxfcGFyYW1zIHsNCj4gPiA+ID4gKyAgICAgIC8vVE9ETyA6IGFkZCBleHRyYSBwYXJhbXMganVz dCBuZWVkZWQgZm9yIHN0YXRlZnVsLCBlLmcuDQo+ID4gPiA+ICsgICAgICAvLyBoaXN0b3J5IGJ1 ZmZlciBzaXplLCB3aW5kb3cgc2l6ZSwgc3RhdGUsIHN0YXRlIGJ1ZmZlcnMsIGV0Yy4uLj8NCj4g PiA+DQo+ID4gPiBJIHdpbGwgcHJvdmlkZSBteSBjb21tZW50cyBvbiBpdCBpbiBhbm90aGVyIGVt YWlsLg0KPiA+ID4NCj4gPiA+ID4gK307DQo+ID4gPiA+ICsvKiBTZXNzaW9uIFNldHVwIERhdGEg Zm9yIGNvbXByZXNzIHRyYW5zZm9ybS4gKi8NCj4gPiA+ID4gK3N0cnVjdCBydGVfY29tcF9jb21w cmVzc194Zm9ybSB7DQo+ID4gPiA+ICsgICAgICBzdHJ1Y3QgcnRlX2NvbXBfY29tcHJlc3NfY29t bW9uX3BhcmFtcyBjbW47DQo+ID4gPiA+ICsgICAgICBzdHJ1Y3QgcnRlX2NvbXBfY29tcHJlc3Nf c3RhdGVmdWxfcGFyYW1zIHN0YXRlZnVsOw0KPiA+ID4gPiArfTsNCj4gPiA+ID4gKw0KPiA+ID4g PiArLyoqDQo+ID4gPiA+ICsgKiBTZXNzaW9uIFNldHVwIERhdGEgY29tbW9uIHRvIGFsbCBkZWNv bXByZXNzIHRyYW5zZm9ybXMuDQo+ID4gPiA+ICsgKiBJbmNsdWRlcyBwYXJhbWV0ZXJzIGNvbW1v biB0byBzdGF0ZWxlc3MgYW5kIHN0YXRlZnVsDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0cnVj dCBydGVfY29tcF9kZWNvbXByZXNzX2NvbW1vbl9wYXJhbXMgew0KPiA+ID4gPiArICAgICAgZW51 bSBydGVfY29tcF9hbGdvcml0aG0gYWxnbzsNCj4gPiA+ID4gKyAgICAgIC8qKjwgQWxnb3JpdGht IHRvIHVzZSBmb3IgZGVjb21wcmVzc2lvbiAqLw0KPiA+ID4gPiArfTsNCj4gPiA+ID4gKy8qKg0K PiA+ID4gPiArICogIFNlc3Npb24gU2V0dXAgRGF0YSBmb3IgZGVjb21wcmVzcyB0cmFuc2Zvcm0u DQo+ID4gPiA+ICsgKiBFeHRyYSBwYXJhbXMgZm9yIHN0YXRlZnVsIHRyYW5zZm9ybQ0KPiA+ID4g PiArICovDQo+ID4gPiA+ICtzdHJ1Y3QgcnRlX2NvbXBfZGVjb21wcmVzc19zdGF0ZWZ1bF9wYXJh bXMgew0KPiA+ID4gPiArICAgICAgLy9UT0RPIDogYWRkIGV4dHJhIHBhcmFtcyBqdXN0IG5lZWRl ZCBmb3Igc3RhdGVmdWwsIGUuZy4NCj4gPiA+ID4gKyAgICAgIC8vIGhpc3RvcnkgYnVmZmVyIHNp emUsIHdpbmRvdyBzaXplLCBzdGF0ZSwgc3RhdGUgYnVmZmVycywgZXRjLi4uPw0KPiA+ID4gPiAr fTsNCj4gPiA+ID4gKy8qIFNlc3Npb24gU2V0dXAgRGF0YSBmb3IgZGVjb21wcmVzcyB0cmFuc2Zv cm0uICovDQo+ID4gPiA+ICtzdHJ1Y3QgcnRlX2NvbXBfZGVjb21wcmVzc194Zm9ybSB7DQo+ID4g PiA+ICsgICAgICBzdHJ1Y3QgcnRlX2NvbXBfZGVjb21wcmVzc19jb21tb25fcGFyYW1zIGNtbjsN Cj4gPiA+ID4gKyAgICAgIHN0cnVjdCBydGVfY29tcF9kZWNvbXByZXNzX3N0YXRlZnVsX3BhcmFt cyBzdGF0ZWZ1bDsNCj4gPiA+ID4gK307DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4g PiArICogIEdlbmVyYXRlIGNoZWNrc3VtIG9uIHVuY29tcHJlc3NlZCBkYXRhLg0KPiA+ID4gPiAr ICogQXBwbGllcyB0byBib3RoIGNvbXByZXNzIGFuZCBkZWNvbXByZXNzIG9wZXJhdGlvbnMuICov DQo+ID4gPiA+ICsvKiBTZXNzaW9uIFNldHVwIERhdGEgZm9yIGNoZWNrc3VtIHRyYW5zZm9ybS4g Ki8NCj4gPiA+ID4gK3N0cnVjdCBydGVfY29tcF9jaGVja3N1bV94Zm9ybSB7DQo+ID4gPiA+ICsg ICAgICBlbnVtIHJ0ZV9jb21wX2NoZWNrc3VtX3R5cGUgY2hrc3VtX3R5cGU7DQo+ID4gPiA+ICsg ICAgICAvKio8IFRoaXMgcGFyYW1ldGVyIGRldGVybWluZXMgdGhlIGNoZWNrc3VtIHR5cGUgKi8N Cj4gPiA+ID4gK307DQo+ID4gPiA+ICsNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ ICsgKiBDb21wcmVzc2lvbiB0cmFuc2Zvcm0gc3RydWN0dXJlLg0KPiA+ID4gPiArICoNCj4gPiA+ ID4gKyAqIFRoaXMgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBjb21wcmVzc2lvbiB0cmFuc2Zvcm1z IHJlcXVpcmVkLCBtdWx0aXBsZQ0KPiA+IHRyYW5zZm9ybXMNCj4gPiA+ID4gKyAqIGNhbiBiZSBj aGFpbmVkIHRvZ2V0aGVyIHRvIHNwZWNpZnkgYSBjaGFpbiBvZiB0cmFuc2Zvcm1zIHN1Y2ggYXMN Cj4gPiA+ID4gKyAqIGdlbmVyYXRlIGNoZWNrc3VtLCB0aGVuIGNvbXByZXNzLiBFYWNoIHRyYW5z Zm9ybSBzdHJ1Y3R1cmUgY2FuDQo+ID4gPiA+ICsgKiBob2xkIGEgc2luZ2xlIHRyYW5zZm9ybSwg dGhlIHR5cGUgZmllbGQgaXMgdXNlZCB0byBzcGVjaWZ5IHdoaWNoDQo+ID4gdHJhbnNmb3JtDQo+ ID4gPiA+ICsgKiBpcyBjb250YWluZWQgd2l0aGluIHRoZSB1bmlvbi4NCj4gPiA+ID4gKyAqIFRo ZSBzdXBwb3J0ZWQgY29tYmluYXRpb25zIGFyZToNCj4gPiA+ID4gKyAqICAtIGNvbXByZXNzLW9u bHkNCj4gPiA+ID4gKyAqICAtIGRlY29tcHJlc3Mtb25seQ0KPiA+ID4gPiArICogIC0gZ2VuZXJh dGUgY2hlY2tzdW0gYW5kIGNvbXByZXNzIGlucHV0IGRhdGENCj4gPiA+ID4gKyAqICAtIGRlY29t cHJlc3MgaW5wdXQgZGF0YSwgZ2VuZXJhdGUgY2hlY2tzdW0gb24gb3V0cHV0IGRhdGENCj4gPiA+ ID4gKyAqDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0cnVjdCBydGVfY29tcF94Zm9ybSB7DQo+ ID4gPiA+ICsgICAgICBzdHJ1Y3QgcnRlX2NvbXBfeGZvcm0gKm5leHQ7DQo+ID4gPiA+ICsgICAg ICAvKio8IG5leHQgeGZvcm0gaW4gY2hhaW4gKi8NCj4gPiA+ID4gKyAgICAgIGVudW0gcnRlX2Nv bXBfeGZvcm1fdHlwZSB0eXBlOw0KPiA+ID4gPiArICAgICAgLyoqPCB4Zm9ybSB0eXBlICovDQo+ ID4gPiA+ICsgICAgICB1bmlvbiB7DQo+ID4gPiA+ICsgICAgICAgICAgICBzdHJ1Y3QgcnRlX2Nv bXBfY29tcHJlc3NfeGZvcm0gY29tcHJlc3M7DQo+ID4gPiA+ICsgICAgICAgICAgICAvKio8IHhm b3JtIGZvciBjb21wcmVzcyBvcGVyYXRpb24gKi8NCj4gPiA+ID4gKyAgICAgICAgICAgIHN0cnVj dCBydGVfY29tcF9kZWNvbXByZXNzX3hmb3JtIGRlY29tcHJlc3M7DQo+ID4gPiA+ICsgICAgICAg ICAgICAvKio8IHhmb3JtIGZvciBkZWNvbXByZXNzIG9wZXJhdGlvbiAqLw0KPiA+ID4gPiArICAg ICAgICAgICAgc3RydWN0IHJ0ZV9jb21wX2NoZWNrc3VtX3hmb3JtIGNoa3N1bTsNCj4gPiA+ID4g KyAgICAgICAgICAgIC8qKjwgeGZvcm0gdG8gZ2VuZXJhdGUgY2hlY2tzdW1zICovDQo+ID4gPg0K PiA+ID4gV2UgbmVlZCBjb21wcmVzcytjaGVja3N1bShhbmQgZGVjb21wcmVzcytjaGVja3N1bSkg YXMgYSBzaW5nbGUNCj4gPiB4Zm9ybQ0KPiA+ID4gaW5zdGVhZCBvZiByZXF1aXJpbmcgMiB4Zm9y bXMuIFRoZSB1c2Ugb2YgeGZvcm0gY2hhaW4gd2lsbCBpbnRyb2R1Y2UNCj4gPiA+IG5lZWRsZXNz IG92ZXJoZWFkIGZvciB0aGUgbW9zdCB0eXBpY2FsIHVzZS1jYXNlcyBvZiBjb21wK2NoZWNrc3Vt KGFuZA0KPiA+ID4gZGVjb21wK2NoZWNrc3VtKS4NCj4gPiA+DQo+ID4gW0Zpb25hXSBvay4NCj4g PiBJIGNhbiBtZXJnZSBzbyB3ZSBqdXN0IGhhdmUgY29tcHJlc3MgJiBkZWNvbXByZXNzIHhmb3Jt cyB3aXRoIGFuIGludGVncml0eQ0KPiA+IChjaGVja3N1bSkgcGFyYW0uDQo+ID4gU28gbm93IEkg c2VlIHdoeSB5b3Ugd2FudCB0byByZW5hbWUgcnRlX2NvbXBfeGZvcm1fdHlwZSBhcw0KPiA+IHJ0 ZV9jb21wX29wX3R5cGUuDQo+ID4gQ2FsbGluZyBpdCAuLm9wX3R5cGUgdGhvdWdoIGltcGxpZXMg YSAxOjEgbWFwcGluZyBiZXR3ZWVuIHhmb3JtIGFuZA0KPiA+IG9wZXJhdGlvbiwNCj4gPiBzbyBh c3N1bWVzIHRoZXJlIHdpbGwgbmV2ZXIgYmUgYW55IGNoYWluZWQgeGZvcm1zLg0KPiA+IElmIHRo aXMgaXMgdGhlIGNhc2Ugd2Ugc2hvdWxkIGFsc28gcmVtb3ZlIHRoZSAqbmV4dCBwYXJhbWV0ZXIu DQo+ID4gSSdkIGZvbGxvd2VkIHRoZSBjcnlwdG8geGZvcm0gY2hhaW4gcGF0dGVybiBpbiBjYXNl IGl0IHByb3ZlcyBtb3JlDQo+ID4gZXh0ZW5kYWJsZSBpbiBmdXR1cmUsDQo+ID4gYnV0IGlmIHdl IGNhbid0IGZvcmVzZWUgYW55IGNhc2UgZm9yIGl0LCB0aGVuIHdlIHNob3VsZCBzaW1wbGlmeS4N Cj4gPiBJZiB3ZSBjaG9vc2UgdG8ga2VlcCB0aGUgKm5leHQgdGhlbiB3ZSBzaG91bGQga2VlcCB0 aGUgbmFtZSBhcw0KPiA+IHJ0ZV9jb21wX3hmb3JtX3R5cGUuDQo+ID4NCj4gDQo+ICBbU2hhbGx5 XSBJIHdvdWxkIHByZWZlciB0byBrZWVwICJuZXh0IiBmb3IgZXh0ZW5zaWJpbGl0eSwgaWYgdGhh dCByZXF1aXJlIG5hbWluZyB0byBiZSByZXRhaW5lZCBhcyAieGZvcm0iDQo+IGFtIGZpbmUgYnkg dGhhdC4NCltGaW9uYV0gT2suDQoNCj4gDQo+IEp1c3QgYSBub3RlLCBzYW1lIGlzIHByb3Bvc2Fs IGZvciBoYXNoIGFzIHdlbGwgaS5lLiBjb21wcmVzcytoYXNoIG9yIGNvbXByZXNzK2NoZWNrc3Vt K2hhc2ggd2lsbCBiZQ0KPiBvbmUgeGZvcm0uDQo+IFRvIHN1cHBvcnQgY29tcHJlc3MrY2hlY2tz dW0raGFzaCwgZGF0YSBzdHJ1Y3R1cmUgd291bGQgbmVlZCB0byBiZSBtb2RpZmllZC4NCltGaW9u YV0gT2suDQoNCj4gPg0KPiA+ID4gPiArICAgICAgfTsNCj4gPiA+ID4gK307DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArc3RydWN0IHJ0ZV9jb21wX3Nlc3Npb247DQo+IA0KPiBbU2hh bGx5XSBJdCBpcyBuYW1lZCBhcyBydGVfY3J5dG9kZXZfc2Vzc2lvbiBpbiBjcnlwdG8gQVBJIHVu bGlrZSBoZXJlLiBTbyBpcyBpdCBpbnRlbnRpb25hbD8NCltGaW9uYV0gV2VsbCwgeWVzLCBiZWNh dXNlIGl0J3Mgc2hvcnRlciBhbmQgSSBkb27igJl0IHRoaW5rIHRoZSBkZXYgYWRkcyBhbnl0aGlu Zy4gQnV0IEkgDQpkb27igJl0IGZlZWwgc3Ryb25nbHkgYWJvdXQgaXQsIGlmIHlvdSB0aGluayBp dCdzIGJldHRlciB3aXRoIHJ0ZV9jb21wZGV2X3Nlc3Npb24gSSBjYW4gZG8gdGhhdD8NCiANCj4g PiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgKiBDb21wcmVzc2lvbiBPcGVyYXRpb24u DQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgZGF0YSBy ZWxhdGluZyB0byBwZXJmb3JtaW5nIGEgY29tcHJlc3Npb24NCj4gPiA+ID4gKyAqIG9wZXJhdGlv biBvbiB0aGUgcmVmZXJlbmNlZCBtYnVmIGRhdGEgYnVmZmVycy4NCj4gPiA+ID4gKyAqDQo+ID4g PiA+ICsgKiBBbGwgY29tcHJlc3Npb24gb3BlcmF0aW9ucyBhcmUgT3V0LW9mLXBsYWNlIChPT1Ap IG9wZXJhdGlvbnMsDQo+ID4gPiA+ICsgKiBhcyB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGRhdGEg aXMgZGlmZmVyZW50IHRvIHRoZSBzaXplIG9mIHRoZSBpbnB1dCBkYXRhLg0KPiA+ID4gPiArICoN Cj4gPiA+ID4gKyAqIENvbXAgb3BlcmF0aW9ucyBhcmUgZW5xdWV1ZWQgYW5kIGRlcXVldWVkIGlu IGNvbXAgUE1EcyB1c2luZw0KPiA+IHRoZQ0KPiA+ID4gPiArICogcnRlX2NvbXBkZXZfZW5xdWV1 ZV9idXJzdCgpIC8gcnRlX2NvbXBkZXZfZGVxdWV1ZV9idXJzdCgpDQo+ID4gQVBJcw0KPiA+ID4g PiArICovDQo+ID4gPiA+ICtzdHJ1Y3QgcnRlX2NvbXBfb3Agew0KPiA+ID4gPiArICAgICAgdWlu dDhfdCBzdGF0dXM7DQo+ID4gPiA+ICsgICAgICAvKio8DQo+ID4gPiA+ICsgICAgICAqIG9wZXJh dGlvbiBzdGF0dXMgLSB1c2UgdmFsdWVzIGZyb20gZW51bSBydGVfY29tcF9zdGF0dXMuDQo+ID4g PiA+ICsgICAgICAqIFRoaXMgaXMgcmVzZXQgdG8NCj4gPiA+ID4gKyAgICAgICogUlRFX0NPTVBf T1BfU1RBVFVTX05PVF9QUk9DRVNTRUQgb24gYWxsb2NhdGlvbiBmcm9tDQo+ID4gbWVtcG9vbCBh bmQNCj4gDQo+IFtTaGFsbHldIFBlciBteSB1bmRlcnN0YW5kaW5nLCBSVEVfQ09NUF9PUF9TVEFU VVNfTk9UX1BST0NFU1NFRCB3aWxsIGJlIHNldCBvbmx5IGF0IHRoZSByZXR1cm4NCj4gb2YgcnRl X2NvbXBfb3BfYWxsb2MoKSBhbmQgbmV2ZXIgYWZ0ZXIuDQo+IElmIHRoYXQgdW5kZXJzdGFuZGlu ZyBjb3JyZWN0LCBzaG91bGRuJ3QgaXQgYmUgcmVuYW1lZCBhcyBSVEVfQ09NUF9PUF9TVEFUVVNf QUxMT0NBVEVEPw0KW0Zpb25hXSBXZWxsIGhlcmUgSSBsaWtlIHRoZSBjb25zaXN0ZW5jeSB3aXRo IGNyeXB0b2Rldi4gQnV0IGFsc28gdGhpbmsgTk9UX1BST0NFU1NFRCBpcyBhIGdvb2QgbmFtZS4g DQpCZWNhdXNlIGV2ZW4gYWZ0ZXIgaXQncyBzZXQgdG8gU1VDQ0VTUyBpdCdzIHN0aWxsIGFsbG9j YXRlZC4gVW50aWwgaXQncyBmcmVlZC4gU28gTk9UX1BST0NFU1NFRCBzZWVtcyB0bw0KbWUgdG8g YmV0dGVyIHJlcHJlc2VudCB0aGUgc3RhdGUgb2YgdGhlIG9wIGF0IHRoYXQgdGltZS4gDQogDQoN Cj4gPiA+ID4gKyAgICAgICogd2lsbCBiZSBzZXQgdG8gUlRFX0NPTVBfT1BfU1RBVFVTX1NVQ0NF U1MgYWZ0ZXIgb3BlcmF0aW9uDQo+ID4gPiA+ICsgICAgICAqIGlzIHN1Y2Nlc3NmdWxseSBwcm9j ZXNzZWQgYnkgYSBQTUQNCj4gPiA+ID4gKyAgICAgICovDQo+ID4gPiA+ICsgICAgICB1aW50MTZf dCBkZWJ1Z19zdGF0dXM7DQo+ID4gPiA+ICsgICAgICAvKio8DQo+ID4gPiA+ICsgICAgICAqIFN0 YXR1cyBvZiB0aGUgb3BlcmF0aW9uIGlzIHJldHVybmVkIGluIHRoZSBydGVfY3J5cHRvX29wLg0K PiANCj4gW1NoYWxseV0gVHlwbyBjb3JyZWN0aW9uIHRvIHJ0ZV9jb21wX29wDQpbRmlvbmFdIG9r DQoNCiANCj4gPiA+ID4gKyAgICAgICogVGhpcyBmaWVsZCBhbGxvd3MgdGhlIFBNRCB0byBwYXNz IGJhY2sgZXh0cmENCj4gPiA+ID4gKyAgICAgICogcG1kLXNwZWNpZmljIGRlYnVnIGluZm9ybWF0 aW9uLiBWYWx1ZSBpcyBub3QgZGVmaW5lZCBvbiB0aGUgQVBJLg0KPiA+ID4gPiArICAgICAgKi8N Cj4gPiA+ID4gKyAgICAgIHN0cnVjdCBydGVfY29tcF9zZXNzaW9uICpzZXNzaW9uOw0KPiA+ID4g PiArICAgICAgLyoqPCBIYW5kbGUgZm9yIHRoZSBpbml0aWFsaXNlZCBzZXNzaW9uIGNvbnRleHQg Ki8NCj4gPiA+ID4gKyAgICAgIHN0cnVjdCBydGVfbWVtcG9vbCAqbWVtcG9vbDsNCj4gPiA+ID4g KyAgICAgIC8qKjwgbWVtcG9vbCBmcm9tIHdoaWNoIG9wZXJhdGlvbiBpcyBhbGxvY2F0ZWQgKi8N Cj4gPiA+ID4gKyAgICAgIHBoeXNfYWRkcl90IHBoeXNfYWRkcjsNCj4gPiA+ID4gKyAgICAgIC8q KjwgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGlzIG9wZXJhdGlvbiAqLw0KPiA+ID4gPiArDQo+ID4g PiA+ICsgICAgICBzdHJ1Y3QgcnRlX21idWYgKm1fc3JjOyAgIC8qKjwgc291cmNlIG1idWYgKi8N Cj4gPiA+ID4gKyAgICAgIHN0cnVjdCBydGVfbWJ1ZiAqbV9kc3Q7ICAgLyoqPCBkZXN0aW5hdGlv biBtYnVmICovDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIHN0cnVjdCB7DQo+ID4gPiA+ICsg ICAgICAgICAgICB1aW50MzJfdCBvZmZzZXQ7DQo+ID4gPiA+ICsgICAgICAgICAgICAvKio8IFN0 YXJ0aW5nIHBvaW50IGZvciBjb21wcmVzc2lvbiBvciBkZWNvbXByZXNzaW9uLA0KPiA+ID4gPiAr ICAgICAgICAgICAgKiBzcGVjaWZpZWQgYXMgbnVtYmVyIG9mIGJ5dGVzIGZyb20gc3RhcnQgb2Yg cGFja2V0IGluDQo+ID4gPiA+ICsgICAgICAgICAgICAqIHNvdXJjZSBidWZmZXIuDQo+ID4gPiA+ ICsgICAgICAgICAgICAqIFN0YXJ0aW5nIHBvaW50IGZvciBjaGVja3N1bSBnZW5lcmF0aW9uIGlu IGNvbXByZXNzIGRpcmVjdGlvbi4NCj4gPiA+ID4gKyAgICAgICAgICAgICovDQo+ID4gPiA+ICsg ICAgICAgICAgICB1aW50MzJfdCBsZW5ndGg7DQo+ID4gPiA+ICsgICAgICAgICAgICAvKio8IFRo ZSBsZW5ndGgsIGluIGJ5dGVzLCBvZiB0aGUgZGF0YSBpbiBzb3VyY2UgYnVmZmVyDQo+ID4gPiA+ ICsgICAgICAgICAgICAqIHRvIGJlIGNvbXByZXNzZWQgb3IgZGVjb21wcmVzc2VkLg0KPiA+ID4g PiArICAgICAgICAgICAgKiBBbHNvIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgb3ZlciB3aGljaCB0 aGUgY2hlY2tzdW0NCj4gPiA+ID4gKyAgICAgICAgICAgICogc2hvdWxkIGJlIGdlbmVyYXRlZCBp biBjb21wcmVzcyBkaXJlY3Rpb24NCj4gPiA+ID4gKyAgICAgICAgICAgICovDQo+ID4gPiA+ICsg ICAgICB9IHNyYzsNCj4gPiA+ID4gKyAgICAgIHN0cnVjdCB7DQo+ID4gPiA+ICsgICAgICAgICAg ICB1aW50MzJfdCBvZmZzZXQ7DQo+ID4gPiA+ICsgICAgICAgICAgICAvKio8IFN0YXJ0aW5nIHBv aW50IGZvciB3cml0aW5nIG91dHB1dCBkYXRhLCBzcGVjaWZpZWQgYXMNCj4gPiA+ID4gKyAgICAg ICAgICAgICogbnVtYmVyIG9mIGJ5dGVzIGZyb20gc3RhcnQgb2YgcGFja2V0IGluIG1fZHN0DQo+ ID4gPiA+ICsgICAgICAgICAgICAqIGJ1ZmZlci4gU3RhcnRpbmcgcG9pbnQgZm9yIGNoZWNrc3Vt IGdlbmVyYXRpb24gaW4NCj4gPiA+ID4gKyAgICAgICAgICAgICogZGVjb21wcmVzcyBkaXJlY3Rp b24uDQo+ID4gPiA+ICsgICAgICAgICAgICAqLw0KPiANCj4gW1NoYWxseV0gRG9uJ3Qgd2UgbmVl ZCBsZW5ndGggaGVyZT8gaW5kaWNhdGluZyBsZW5ndGggKGluIGJ5dGVzKSBvZiBhdmFpbGFibGUg ZHN0IG1idWYgYXQgaW5wdXQ/DQpbRmlvbmFdIFRoZSBkc3QgbWJ1ZiBjb250YWlucyB0aGUgc2l6 ZSBvZiB0aGUgYnVmZmVyIG9yIGJ1ZmZlciBjaGFpbi4NClRoZSBjYWxsZXIgZG9lc24ndCBrbm93 IHRoZSBsZW5ndGggb2YgdGhlIG91dHB1dCBkYXRhLCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4g b3AucHJvZHVjZWQuDQpGb3IgdGhlIHNyYyBkYXRhIHRoZSBzcmMgbWJ1ZiBjb250YWlucyB0aGUg YnVmZmVyIHNpemUgYnV0IHRoZSBsZW5ndGggc3BlY2lmZXMgdGhlIGRhdGEgd2hpY2ggc2hvdWxk IGJlIGNvbnN1bWVkLg0Kb3AuY29uc3VtZWQgd2lsbCByZXR1cm4gZXhhY3RseSB3aGF0IHdhcyBj b25zdW1lZC4NCkkgaGF2ZSBjb25zaWRlcmVkIGluY2x1ZGluZyBhIGRzdC50b3RhbF9idWZmZXJf bGVuZ3RoIHRvIHNhdmUgdGhlIFBNRCB3YWxraW5nIGFuIG1idWYgY2hhaW4gdG8gZmlndXJlIGl0 IG91dC4gDQpCdXQgSSBoYXZlbid0IGZvdW5kIGEgbmVlZCBmb3IgdGhhdCB5ZXQsIHNvIGxlZnQg aXQgb3V0Lg0KDQo+IA0KPiA+ID4gPiArICAgICAgfSBkc3Q7DQo+ID4gPiA+ICsgICAgICBlbnVt IHJ0ZV9jb21wX2ZsdXNoX2ZsYWcgZmx1c2hfZmxhZzsNCj4gPiA+ID4gKyAgICAgIC8qKjwgZGVm aW5lcyBmbHVzaCBjaGFyYWN0ZXJpc3RpY3MgZm9yIHRoZSBvdXRwdXQgZGF0YS4NCj4gPiA+ID4g KyAgICAgICogT25seSBhcHBsaWNhYmxlIGluIGNvbXByZXNzIGRpcmVjdGlvbi4NCj4gPiA+ID4g KyAgICAgICovDQo+ID4gPiA+ICsgICAgICBlbnVtIHJ0ZV9jb21wX2ludGVncml0eV9jaGVjayB2 ZXJpZnk7DQo+ID4gPiA+ICsgICAgICAvKio8IFNwZWNpZmllcyBpZiB0aGUgb3V0cHV0IGRhdGEg c2hvdWxkIGJlIHZlcmlmaWVkLg0KPiA+ID4gPiArICAgICAgICBPbmx5IGFwcGxpY2FibGUgaW4g Y29tcHJlc3MgZGlyZWN0aW9uLg0KPiA+ID4gPiArICAgICAgKi8NCj4gPiA+DQo+ID4gPiBBZ2Fp biwgYmVsaWV2ZSB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCB0aGlzIGJ5IG1vdmluZyB0byBhcHBsaWNh dGlvbi4NCj4gPiA+DQo+ID4gPiBUaGFua3MNCj4gPiA+IFNoYWxseQ0KPiA+ID4NCj4gPiA+ID4g KyAgICAgIHVpbnQ2NF90IGlucHV0X2Noa3N1bTsNCj4gPiA+ID4gKyAgICAgIC8qKjwgQW4gaW5w dXQgY2hlY2tzdW0gY2FuIGJlIHByb3ZpZGVkIHRvIGdlbmVyYXRlIGENCj4gPiA+ID4gKyAgICAg ICogY3VtdWxhdGl2ZSBjaGVja3N1bSBhY3Jvc3Mgc2VxdWVudGlhbCBibG9ja3MuDQo+ID4gPiA+ ICsgICAgICAqIENoZWNrc3VtIHR5cGUgaXMgYXMgc3BlY2lmaWVkIGluIGNoa3N1bV90eXBlIGlu IHhmb3JtLg0KPiA+ID4gPiArICAgICAgKi8NCj4gPiA+ID4gKyAgICAgIHVpbnQ2NF90IG91dHB1 dF9jaGtzdW07DQo+ID4gPiA+ICsgICAgICAvKio8IElmIGEgY2hlY2tzdW0gaXMgZ2VuZXJhdGVk IGl0IHdpbGwgYmUgd3JpdHRlbiBpbiBoZXJlLg0KPiA+ID4gPiArICAgICAgKiBDaGVja3N1bSB0 eXBlIGlzIGFzIHNwZWNpZmllZCBpbiBjaGtzdW1fdHlwZSBpbiB4Zm9ybS4NCj4gPiA+ID4gKyAg ICAgICovDQo+ID4gPiA+ICsgICAgICB1aW50MzJfdCBjb25zdW1lZDsNCj4gPiA+ID4gKyAgICAg IC8qKjwgVGhlIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSBzb3VyY2UgYnVmZmVyDQo+ID4gPiA+ ICsgICAgICAqIHdoaWNoIHdlcmUgY29tcHJlc3NlZC9kZWNvbXByZXNzZWQuDQo+ID4gPiA+ICsg ICAgICAqLw0KPiA+ID4gPiArICAgICAgdWludDMyX3QgcHJvZHVjZWQ7DQo+ID4gPiA+ICsgICAg ICAvKio8IFRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGUgZGVzdGluYXRpb24gYnVm ZmVyDQo+ID4gPiA+ICsgICAgICAqIHdoaWNoIHdlcmUgY29tcHJlc3NlZC9kZWNvbXByZXNzZWQu DQo+ID4gPiA+ICsgICAgICAqLw0KPiA+ID4gPiArICAgICAgLyoNCj4gPiA+ID4gKyAgICAgIFRP RE8gLSBBcmUgYW55IGV4dHJhIHBhcmFtcyBuZWVkZWQgb24gc3RhdGVmdWwgb3Agb3IgYXJlIGFs bCBpbg0KPiA+IHhmb3JtPw0KPiA+ID4gPiArICAgICAgcnRlX2NvbXBfb3BfY29tbW9uX3BhcmFt cy9fc3RhdGVmdWxfcGFyYW1zPw0KPiA+ID4gPiArICAgICAgZXh0cmEgdmFsdWVzIGFwcGx5IHRv IGZsdXNoIGZsYWcNCj4gPiA+ID4gKyAgICAgICovDQo+ID4gPiA+ICt9Ow0KPiA+ID4gPiArDQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyBpbnQNCj4gPiA+ID4gKyBydGVfY29tcGRldl9jb25maWd1cmUo dWludDhfdCBkZXZfaWQsIHN0cnVjdCBydGVfY29tcGRldl9jb25maWcNCj4gPiAqY29uZmlnKTsN Cj4gPiA+ID4gKyBpbnQNCj4gPiA+ID4gKyBydGVfY29tcGRldl9zdGFydCh1aW50OF90IGRldl9p ZCk7DQo+ID4gPiA+ICsgdm9pZA0KPiA+ID4gPiArIHJ0ZV9jb21wZGV2X3N0b3AodWludDhfdCBk ZXZfaWQpOw0KPiA+ID4gPiAvKiBldGMuLi5SZXN0IG9mIEFQSXMgZm9sbG93IHNhbWUgcGF0dGVy biwgc2ltaWxhciB0byBjcnlwdG9kZXYsIHN0cmlwcGVkDQo+ID4gZnJvbSBSRkMgZm9yIHNpbXBs aWNpdHkuICovDQo+ID4gPiA+DQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAqIENvbXByZXNzaW9u IHN1cHBvcnRlZCBmZWF0dXJlIGZsYWdzDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogTm90ZToN Cj4gPiA+ID4gKyAqIE5ldyBmZWF0dXJlcyBmbGFncyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGVu ZCBvZiB0aGUgbGlzdA0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIEtlZXAgdGhlc2UgZmxhZ3Mg c3luY2hyb25pc2VkIHdpdGgNCj4gPiBydGVfY29tcGRldl9nZXRfY29tcF9mZWF0dXJlX25hbWUo KQ0KPiA+ID4gPiArICogTm90ZTogYml0IG51bWJlcnMgaGVyZSBhcmUgc2FtZSBhcyBvbiBjcnlw dG9kZXYsIGhlbmNlIHRoZSBnYXBzLg0KPiA+ID4gPiArICogVGhpcyBpcyBhbiBpbXBsZW1lbnRh dGlvbiBkZXRhaWwgd2hpY2ggbWF5IGNoYW5nZS4NCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArICNk ZWZpbmUgICAgICAgUlRFX0NPTVBERVZfRkZfQ1BVX1NTRSAgICAgICAgICAoMVVMTCA8PCAzKQ0K PiA+ID4gPiArIC8qKjwgVXRpbGlzZXMgQ1BVIFNJTUQgU1NFIGluc3RydWN0aW9ucyAqLw0KPiA+ ID4gPiArICNkZWZpbmUgICAgICAgUlRFX0NPTVBERVZfRkZfQ1BVX0FWWCAgICAgICAgICAoMVVM TCA8PCA0KQ0KPiA+ID4gPiArIC8qKjwgVXRpbGlzZXMgQ1BVIFNJTUQgQVZYIGluc3RydWN0aW9u cyAqLw0KPiA+ID4gPiArICNkZWZpbmUgICAgICAgUlRFX0NPTVBERVZfRkZfQ1BVX0FWWDIgICAg ICAgICAoMVVMTCA8PCA1KQ0KPiA+ID4gPiArIC8qKjwgVXRpbGlzZXMgQ1BVIFNJTUQgQVZYMiBp bnN0cnVjdGlvbnMgKi8NCj4gPiA+ID4gKyAjZGVmaW5lICAgICAgIFJURV9DT01QREVWX0ZGX0hX X0FDQ0VMRVJBVEVEICAgICAgICAgICAoMVVMTCA8PCA3KQ0KPiA+ID4gPiArIC8qKjwgT3BlcmF0 aW9ucyBhcmUgb2ZmLWxvYWRlZCB0byBhbiBleHRlcm5hbCBoYXJkd2FyZSBhY2NlbGVyYXRvciAq Lw0KPiA+ID4gPiArICNkZWZpbmUgICAgICAgUlRFX0NPTVBERVZfRkZfQ1BVX0FWWDUxMiAgICAg ICAgICAgICAgICgxVUxMIDw8IDgpDQo+ID4gPiA+ICsgLyoqPCBVdGlsaXNlcyBDUFUgU0lNRCBB Vlg1MTIgaW5zdHJ1Y3Rpb25zICovDQo+ID4gPiA+ICsgI2RlZmluZSAgICAgICBSVEVfQ09NUERF Vl9GRl9DUFVfTkVPTiAgICAgICAgICAgICAgICAgICAgICAgICgxVUxMIDw8IDEwKQ0KPiA+ID4g PiArIC8qKjwgVXRpbGlzZXMgQ1BVIE5FT04gaW5zdHJ1Y3Rpb25zICovDQo+ID4gPiA+ICsgI2Rl ZmluZSAgICAgICBSVEVfQ09NUERFVl9GRl9DUFVfQVJNX0NFICAgICAgICAgICAgICAgKDFVTEwg PDwgMTEpDQo+ID4gPiA+ICsgLyoqPCBVdGlsaXNlcyBBUk0gQ1BVIENyeXB0b2dyYXBoaWMgRXh0 ZW5zaW9ucyAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgI2RlZmluZSAgICAgUlRFX0NPTVBfRkZf TUJVRl9TQ0FUVEVSX0dBVEhFUiAgICAgICAgICAgICAgICAgICAgKDFVTEwgPDwNCj4gPiAxMikN Cj4gPiA+ID4gKyAvKio8IFNjYXR0ZXItZ2F0aGVyIG1idWZzIGFyZSBzdXBwb3J0ZWQgKi8NCj4g PiA+ID4gKyAjZGVmaW5lICAgICBSVEVfQ09NUF9GRl9TVEFURUZVTCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMTCA8PA0KPiA+IDEzKQ0KPiA+ID4g PiArIC8qKjwgU3RhdGVmdWwgY29tcHJlc3Npb24gaXMgc3VwcG9ydGVkICovDQo+ID4gPiA+ICsg I2RlZmluZSAgICAgUlRFX0NPTVBERVZfRkZfTVVMVElfUEtUX0NIRUNLU1VNICAgICAgICAgICAg ICAgKDFVTEwgPDwNCj4gPiAxNCkNCj4gPiA+ID4gKyAvKio8IEdlbmVyYXRpb24gb2YgY2hlY2tz dW0gYWNyb3NzIG11bHRpcGxlIHBhY2tldHMgaXMgc3VwcG9ydGVkICovDQo+ID4gPiA+ICsNCj4g DQo+IFtTaGFsbHldIFdoYXQgaXMgbWVhbmluZyBvZiB0aGlzIGZlYXR1cmU/IGhvdyBpdCBpcyBz dXBwb3NlZCB0byBpbXBhY3QgYnVyc3Qgb3BlcmF0aW9ucy4NCltGaW9uYV0gSXQncyBiZXR0ZXIg dG8gZXhwbGFpbiB0aGF0IHdoZW4gSSByZXBseSB0byB0aGUgZGV0YWlscyByZSBzdGF0ZWZ1bC9z dGF0ZWxlc3MgaW4gdGhlIGRvYyB5b3UndmUgc2VudC4NCg0KIA0KPiA+ID4gPiArDQo+ID4gPiA+ ICsNCj4gPiA+ID4gKy8qKiAgQ29tcHJlc3Npb24gZGV2aWNlIGluZm9ybWF0aW9uICovDQo+ID4g PiA+ICtzdHJ1Y3QgcnRlX2NvbXBkZXZfaW5mbyB7DQo+ID4gPiA+ICsgICAgICBjb25zdCBjaGFy ICpkcml2ZXJfbmFtZTsgIC8qKjwgRHJpdmVyIG5hbWUuICovDQo+ID4gPiA+ICsgICAgICB1aW50 OF90IGRyaXZlcl9pZDsgICAgICAgICAgICAgICAvKio8IERyaXZlciBpZGVudGlmaWVyICovDQo+ ID4gPiA+ICsgICAgICBzdHJ1Y3QgcnRlX2RldmljZSAqZGV2OyAgICAgICAgICAvKio8IERldmlj ZSBpbmZvcm1hdGlvbi4gKi8NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgdWludDY0X3QgZmVh dHVyZV9mbGFnczsNCj4gPiA+ID4gKyAgICAgIC8qKjwgZGV2aWNlIGZlYXR1cmUgZmxhZ3MgKi8N Cj4gPiA+ID4gKyAgICAgY29uc3Qgc3RydWN0IHJ0ZV9jb21wX2NhcGFiaWxpdGllcyAqY2FwYWJp bGl0aWVzOw0KPiA+ID4gPiArICAgICAgLyoqPCBBcnJheSBvZiBkZXZpY2VzIGNhcGFiaWxpdGll cyAqLw0KPiA+ID4gPg0KPiA+ID4gPiArICAgICAgdW5zaWduZWQgbWF4X25iX3F1ZXVlX3BhaXJz Ow0KPiA+ID4gPiArICAgICAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBxdWV1ZXMgcGFpcnMgc3Vw cG9ydGVkIGJ5IGRldmljZS4gKi8NCj4gPiA+ID4gKyAgICAgIHVuc2lnbmVkIG1heF9uYl9zZXNz aW9uczsNCj4gPiA+ID4gKyAgICAgIC8qKjwgTWF4aW11bSBudW1iZXIgb2Ygc2Vzc2lvbnMgc3Vw cG9ydGVkIGJ5IGRldmljZS4gKi8NCj4gPiA+ID4gKyAgICAgIHVuc2lnbmVkIGludCBtYXhfbmJf c2Vzc2lvbnNfcGVyX3FwOw0KPiA+ID4gPiArICAgICAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBz ZXNzaW9ucyBwZXIgcXVldWUgcGFpci4NCj4gPiA+ID4gKyAgICAgICogRGVmYXVsdCAwIGZvciBp bmZpbml0ZSBzZXNzaW9ucw0KPiA+ID4gPiArICAgICAgKi8NCj4gPiA+ID4gKyAgICAgIC8qIFRP RE8gdWludDhfdCBuZWVkc19pbnRlcm1lZGlhdGVfYnVmZmVyIE9SIHNob3VsZCB0aGlzIGJlIGEN Cj4gPiBmZWF0dXJlIGZsYWc/IE9yIG5vdCBuZWNlc3Nhcnk/DQo+ID4gPiAqLw0KPiA+ID4gPiAr fTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKiogQ29tcHJlc3Npb24gZGV2aWNl IHN0YXRpc3RpY3MgKi8NCj4gPiA+ID4gK3N0cnVjdCBydGVfY29tcGRldl9zdGF0cyB7DQo+ID4g PiA+ICsgICAgICB1aW50NjRfdCBlbnF1ZXVlZF9jb3VudDsNCj4gPiA+ID4gKyAgICAgIC8qKjwg Q291bnQgb2YgYWxsIG9wZXJhdGlvbnMgZW5xdWV1ZWQgKi8NCj4gPiA+ID4gKyAgICAgIHVpbnQ2 NF90IGRlcXVldWVkX2NvdW50Ow0KPiA+ID4gPiArICAgICAgLyoqPCBDb3VudCBvZiBhbGwgb3Bl cmF0aW9ucyBkZXF1ZXVlZCAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICB1aW50NjRfdCBl bnF1ZXVlX2Vycl9jb3VudDsNCj4gPiA+ID4gKyAgICAgIC8qKjwgVG90YWwgZXJyb3IgY291bnQg b24gb3BlcmF0aW9ucyBlbnF1ZXVlZCAqLw0KPiA+ID4gPiArICAgICAgdWludDY0X3QgZGVxdWV1 ZV9lcnJfY291bnQ7DQo+ID4gPiA+ICsgICAgICAvKio8IFRvdGFsIGVycm9yIGNvdW50IG9uIG9w ZXJhdGlvbnMgZGVxdWV1ZWQgKi8NCj4gPiA+ID4gK307DQo+ID4gPiA+ICsNCj4gPiA+ID4gKw0K PiA+ID4gPiArLyoqIENvbXByZXNzaW9uIGRldmljZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAq Lw0KPiA+ID4gPiArc3RydWN0IHJ0ZV9jb21wZGV2X2NvbmZpZyB7DQo+ID4gPiA+ICsgICAgICBp bnQgc29ja2V0X2lkOw0KPiA+ID4gPiArICAgICAgLyoqPCBTb2NrZXQgdG8gYWxsb2NhdGUgcmVz b3VyY2VzIG9uICovDQo+ID4gPiA+ICsgICAgICB1aW50MTZfdCBuYl9xdWV1ZV9wYWlyczsNCj4g PiA+ID4gKyAgICAgIC8qKjwgVG90YWwgbnVtYmVyIG9mIHF1ZXVlIHBhaXJzIHRvIGNvbmZpZ3Vy ZSBvbiBhIGRldmljZS4gKi8NCj4gPiA+ID4gKyAgICAgIHVpbnQzMl90IGNvbXBfaW50ZXJtZWRp YXRlX2J1Zl9zaXplOw0KPiA+ID4gPiArICAgICAvKio8IEZvciBkZWZsYXRlIGFsZ29yaXRobSBI VyBhY2NlbGVyYXRvcnMgdXN1YWxseSBuZWVkIHRvIGFsbG9jYXRlDQo+ID4gPiA+ICsgICAgICAq IGEgcG9vbCBvZiBpbnRlcm1lZGlhdGUgYnVmZmVycyBmb3IgZHluYW1pYyBjb21wcmVzc2lvbi4N Cj4gDQo+IFtTaGFsbHldIERvIHlvdSBtZWFuIER5bmFtaWMgSHVmZm1hbiBjb2RpbmcgYmFzZWQg Y29tcHJlc3Npb24/DQpbRmlvbmFdIFllcy4gSSdsbCB1cGRhdGUgdGhlIGNvbW1lbnQuDQoNCj4g DQo+ID4gPiA+ICsgICAgICAqIFRoaXMgaW5kaWNhdGVzIHRoZSBidWZmZXIgc2l6ZSBhbmQgc2hv dWxkIGJlDQo+ID4gPiA+ICsgICAgICAqIHNldCBhIGxpdHRsZSBsYXJnZXIgdGhhbiB0aGUgZXhw ZWN0ZWQgbWF4IHNvdXJjZSBidWZmZXIgc2l6ZS4NCj4gPiA+ID4gKyAgICAgICogaWYgdGhlIG91 dHB1dCBvZiBzdGF0aWMgY29tcHJlc3Npb24gZG9lc24ndCBmaXQgaW4gdGhlDQo+ID4gPiA+ICsg ICAgICAqIGludGVybWVkaWF0ZSBidWZmZXIgZHluYW1pYyBjb21wcmVzc2lvbiBtYXkgbm90IGJl IHBvc3NpYmxlLA0KPiA+ID4gPiArICAgICAgKiBpbiB0aGlzIGNhc2UgdGhlIGFjY2VsZXJhdG9y IG1heSByZXZlcnQgYmFjayB0byBzdGF0aWMgY29tcHJlc3Npb24uDQo+ID4gPiA+ICsgICAgICAq Lw0KPiA+ID4gPiArfTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKiogQ29tcHJl c3Npb24gZGV2aWNlIHF1ZXVlIHBhaXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuICovDQo+ID4g PiA+ICtzdHJ1Y3QgcnRlX2NvbXBkZXZfcXBfY29uZiB7DQo+ID4gPiA+ICsgICAgICB1aW50MzJf dCBuYl9kZXNjcmlwdG9yczsgLyoqPCBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgcGVyIHF1ZXVlIHBh aXINCj4gPiAqLw0KPiA+ID4gPiArfTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArDQo+IA0KPiBbU2hh bGx5XSBTdWJzZXF1ZW50IEFQSXMgYW5kIHBhcnQgb2YgYWJvdmUgaGFzIHJlZmVyZW5jZSB0byBj cnlwdG9kZXYgYW5kIEkgaGF2ZSBzb21lIHF1ZXN0aW9uIG9uDQo+IHRoZWlyIG9uZS10by1vbmUg bWFwcGluZy4gSSB3b3VsZCBub3QgbGlzdCB0aGVtIHJpZ2h0IG5vdy4gV2lsbCB0YWtlIHVwIG9u Y2Ugd2UgZnJlZXplIGZlZWRiYWNrcyBvbg0KPiBjdXJyZW50IFJGQyB2ZXJzaW9uIHNvIHRoYXQg d2UgY2FuIGhhdmUgZm9jdXNlZCBkaXNjdXNzaW9uIGFyb3VuZCByZXN0Lg0KPiANCj4gVGhhbmtz DQo+IFNoYWxseQ0KPiANCltGaW9uYV0gb2suIEknbSBkaWdlc3RpbmcgeW91ciBkb2MgUkZDLCBz b21lIHZlcnkgdXNlZnVsIGlucHV0IHRoZXJlLCB0aGFua3MuIFdpbGwgZ2V0IGJhY2sgdG8geW91 IG5leHQNCndlZWsgd2l0aCBjb21tZW50cy4NCg0KPiA+ID4gPiArdHlwZWRlZiB1aW50MTZfdCAo KmRlcXVldWVfcGt0X2J1cnN0X3QpKHZvaWQgKnFwLA0KPiA+ID4gPiArICAgICAgICAgICAgc3Ry dWN0IHJ0ZV9jb21wX29wICoqb3BzLCB1aW50MTZfdCBuYl9vcHMpOw0KPiA+ID4gPiArLyoqPCBE ZXF1ZXVlIHByb2Nlc3NlZCBwYWNrZXRzIGZyb20gcXVldWUgcGFpciBvZiBhIGRldmljZS4gKi8N Cj4gPiA+ID4gKw0KPiA+ID4gPiArdHlwZWRlZiB1aW50MTZfdCAoKmVucXVldWVfcGt0X2J1cnN0 X3QpKHZvaWQgKnFwLA0KPiA+ID4gPiArICAgICAgICAgICAgc3RydWN0IHJ0ZV9jb21wX29wICoq b3BzLCB1aW50MTZfdCBuYl9vcHMpOw0KPiA+ID4gPiArLyoqPCBFbnF1ZXVlIHBhY2tldHMgZm9y IHByb2Nlc3Npbmcgb24gcXVldWUgcGFpciBvZiBhIGRldmljZS4gKi8NCj4gPiA+ID4gKw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgYXNzb2Np YXRlZCB3aXRoIGVhY2ggY29tcHJlc3Npb24gZGV2aWNlLiAqLw0KPiA+ID4gPiArc3RydWN0IHJ0 ZV9jb21wZGV2IHsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgZGVxdWV1ZV9wa3RfYnVyc3Rf dCBkZXF1ZXVlX2J1cnN0Ow0KPiA+ID4gPiArICAgICAgLyoqPCBQb2ludGVyIHRvIFBNRCByZWNl aXZlIGZ1bmN0aW9uLiAqLw0KPiA+ID4gPiArICAgICAgZW5xdWV1ZV9wa3RfYnVyc3RfdCBlbnF1 ZXVlX2J1cnN0Ow0KPiA+ID4gPiArICAgICAgLyoqPCBQb2ludGVyIHRvIFBNRCB0cmFuc21pdCBm dW5jdGlvbi4gKi8NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgc3RydWN0IHJ0ZV9jb21wZGV2 X2RhdGEgKmRhdGE7DQo+ID4gPiA+ICsgICAgICAvKio8IFBvaW50ZXIgdG8gZGV2aWNlIGRhdGEg Ki8NCj4gPiA+ID4gKyAgICAgIHN0cnVjdCBydGVfY29tcGRldl9vcHMgKmRldl9vcHM7DQo+ID4g PiA+ICsgICAgICAvKio8IEZ1bmN0aW9ucyBleHBvcnRlZCBieSBQTUQgKi8NCj4gPiA+ID4gKyAg ICAgIHVpbnQ2NF90IGZlYXR1cmVfZmxhZ3M7DQo+ID4gPiA+ICsgICAgICAvKio8IFN1cHBvcnRl ZCBmZWF0dXJlcyAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgIHN0cnVjdCBydGVfZGV2aWNl ICpkZXZpY2U7DQo+ID4gPiA+ICsgICAgICAvKio8IEJhY2tpbmcgZGV2aWNlICovDQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyAgICAgIHVpbnQ4X3QgZHJpdmVyX2lkOw0KPiA+ID4gPiArICAgICAgLyoq PCBkcml2ZXIgaWRlbnRpZmllciovDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIHVpbnQ4X3Qg YXR0YWNoZWQgOiAxOw0KPiA+ID4gPiArICAgICAgLyoqPCBGbGFnIGluZGljYXRpbmcgdGhlIGRl dmljZSBpcyBhdHRhY2hlZCAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4g PiA+ID4gKy8qKg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIFRoZSBkYXRhIHBhcnQsIHdpdGgg bm8gZnVuY3Rpb24gcG9pbnRlcnMsIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGRldmljZS4NCj4gPiA+ ID4gKyAqDQo+ID4gPiA+ICsgKiBUaGlzIHN0cnVjdHVyZSBpcyBzYWZlIHRvIHBsYWNlIGluIHNo YXJlZCBtZW1vcnkgdG8gYmUgY29tbW9uIGFtb25nDQo+ID4gPiA+ICsgKiBkaWZmZXJlbnQgcHJv Y2Vzc2VzIGluIGEgbXVsdGktcHJvY2VzcyBjb25maWd1cmF0aW9uLg0KPiA+ID4gPiArICovDQo+ ID4gPiA+ICtzdHJ1Y3QgcnRlX2NvbXBkZXZfZGF0YSB7DQo+ID4gPiA+ICsgICAgICB1aW50OF90 IGRldl9pZDsNCj4gPiA+ID4gKyAgICAgIC8qKjwgRGV2aWNlIElEIGZvciB0aGlzIGluc3RhbmNl ICovDQo+ID4gPiA+ICsgICAgICB1aW50OF90IHNvY2tldF9pZDsNCj4gPiA+ID4gKyAgICAgIC8q KjwgU29ja2V0IElEIHdoZXJlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgKi8NCj4gPiA+ID4gKyAgICAg IGNoYXIgbmFtZVtSVEVfQ09NUERFVl9OQU1FX01BWF9MRU5dOw0KPiA+ID4gPiArICAgICAgLyoq PCBVbmlxdWUgaWRlbnRpZmllciBuYW1lICovDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIHVp bnQ4X3QgZGV2X3N0YXJ0ZWQgOiAxOw0KPiA+ID4gPiArICAgICAgLyoqPCBEZXZpY2Ugc3RhdGU6 IFNUQVJURUQoMSkvU1RPUFBFRCgwKSAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICB2b2lk ICoqcXVldWVfcGFpcnM7DQo+ID4gPiA+ICsgICAgICAvKio8IEFycmF5IG9mIHBvaW50ZXJzIHRv IHF1ZXVlIHBhaXJzLiAqLw0KPiA+ID4gPiArICAgICAgdWludDE2X3QgbmJfcXVldWVfcGFpcnM7 DQo+ID4gPiA+ICsgICAgICAvKio8IE51bWJlciBvZiBkZXZpY2UgcXVldWUgcGFpcnMuICovDQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIHZvaWQgKmRldl9wcml2YXRlOw0KPiA+ID4gPiArICAg ICAgLyoqPCBQTUQtc3BlY2lmaWMgcHJpdmF0ZSBkYXRhICovDQo+ID4gPiA+ICt9DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogRGVx dWV1ZSBhIGJ1cnN0IG9mIHByb2Nlc3NlZCBjb21wcmVzc2lvbiBvcGVyYXRpb25zIGZyb20gYSBx dWV1ZQ0KPiA+IG9uIHRoZQ0KPiA+ID4gPiArICogZGV2aWNlLiBUaGUgZGVxdWV1ZWQgb3BlcmF0 aW9uIGFyZSBzdG9yZWQgaW4gKnJ0ZV9jb21wX29wKg0KPiA+IHN0cnVjdHVyZXMNCj4gPiA+ID4g KyAqIHdob3NlIHBvaW50ZXJzIGFyZSBzdXBwbGllZCBpbiB0aGUgKm9wcyogYXJyYXkuDQo+ID4g PiA+ICsgKg0KPiA+ID4gPiArICogVGhlIHJ0ZV9jb21wZGV2X2RlcXVldWVfYnVyc3QoKSBmdW5j dGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YNCj4gPiBvcHMNCj4gPiA+ID4gKyAqIGFjdHVhbGx5 IGRlcXVldWVkLCB3aGljaCBpcyB0aGUgbnVtYmVyIG9mICpydGVfY29tcF9vcCogZGF0YQ0KPiA+ IHN0cnVjdHVyZXMNCj4gPiA+ID4gKyAqIGVmZmVjdGl2ZWx5IHN1cHBsaWVkIGludG8gdGhlICpv cHMqIGFycmF5Lg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIEEgcmV0dXJuIHZhbHVlIGVxdWFs IHRvICpuYl9vcHMqIGluZGljYXRlcyB0aGF0IHRoZSBxdWV1ZSBjb250YWluZWQNCj4gPiA+ID4g KyAqIGF0IGxlYXN0ICpuYl9vcHMqIG9wZXJhdGlvbnMsIGFuZCB0aGlzIGlzIGxpa2VseSB0byBz aWduaWZ5IHRoYXQgb3RoZXINCj4gPiA+ID4gKyAqIHByb2Nlc3NlZCBvcGVyYXRpb25zIHJlbWFp biBpbiB0aGUgZGV2aWNlcyBvdXRwdXQgcXVldWUuDQo+ID4gQXBwbGljYXRpb25zDQo+ID4gPiA+ ICsgKiBpbXBsZW1lbnRpbmcgYSAicmV0cmlldmUgYXMgbWFueSBwcm9jZXNzZWQgb3BlcmF0aW9u cyBhcyBwb3NzaWJsZSINCj4gPiBwb2xpY3kNCj4gPiA+ID4gKyAqIGNhbiBjaGVjayB0aGlzIHNw ZWNpZmljIGNhc2UgYW5kIGtlZXAgaW52b2tpbmcgdGhlDQo+ID4gPiA+ICsgKiBydGVfY29tcGRl dl9kZXF1ZXVlX2J1cnN0KCkgZnVuY3Rpb24gdW50aWwgYSB2YWx1ZSBsZXNzIHRoYW4NCj4gPiA+ ID4gKyAqICpuYl9vcHMqIGlzIHJldHVybmVkLg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIFRo ZSBydGVfY29tcGRldl9kZXF1ZXVlX2J1cnN0KCkgZnVuY3Rpb24gZG9lcyBub3QgcHJvdmlkZSBh bnkNCj4gPiBlcnJvcg0KPiA+ID4gPiArICogbm90aWZpY2F0aW9uIHRvIGF2b2lkIHRoZSBjb3Jy ZXNwb25kaW5nIG92ZXJoZWFkLg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIEBwYXJhbSAgIGRl dl9pZCAgICAgICBUaGUgY29tcHJlc3Npb24gZGV2aWNlIGlkZW50aWZpZXINCj4gPiA+ID4gKyAq IEBwYXJhbSAgIHFwX2lkICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHF1ZXVlIHBhaXIgZnJvbSB3 aGljaCB0bw0KPiA+ID4gPiArICogICAgICAgICAgICAgICAgICAgICAgIHJldHJpZXZlIHByb2Nl c3NlZCBwYWNrZXRzLiBUaGUgdmFsdWUgbXVzdCBiZQ0KPiA+ID4gPiArICogICAgICAgICAgICAg ICAgICAgICAgIGluIHRoZSByYW5nZSBbMCwgbmJfcXVldWVfcGFpciAtIDFdIHByZXZpb3VzbHkN Cj4gPiA+ID4gKyAqICAgICAgICAgICAgICAgICAgICAgICBzdXBwbGllZCB0byBydGVfY29tcGRl dl9jb25maWd1cmUoKS4NCj4gPiA+ID4gKyAqIEBwYXJhbSAgIG9wcyAgICAgICAgICBUaGUgYWRk cmVzcyBvZiBhbiBhcnJheSBvZiBwb2ludGVycyB0bw0KPiA+ID4gPiArICogICAgICAgICAgICAg ICAgICAgICAgICpydGVfY29tcF9vcCogc3RydWN0dXJlcyB0aGF0IG11c3QgYmUNCj4gPiA+ID4g KyAqICAgICAgICAgICAgICAgICAgICAgICBsYXJnZSBlbm91Z2ggdG8gc3RvcmUgKm5iX29wcyog cG9pbnRlcnMgaW4gaXQuDQo+ID4gPiA+ICsgKiBAcGFyYW0gICBuYl9vcHMgICAgICAgVGhlIG1h eGltdW0gbnVtYmVyIG9mIG9wZXJhdGlvbnMgdG8NCj4gPiBkZXF1ZXVlLg0KPiA+ID4gPiArICoN Cj4gPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4gKyAqICAgLSBUaGUgbnVtYmVyIG9mIG9wZXJh dGlvbnMgYWN0dWFsbHkgZGVxdWV1ZWQsIHdoaWNoIGlzIHRoZSBudW1iZXINCj4gPiA+ID4gKyAq ICAgb2YgcG9pbnRlcnMgdG8gKnJ0ZV9jb21wX29wKiBzdHJ1Y3R1cmVzIGVmZmVjdGl2ZWx5IHN1 cHBsaWVkIHRvIHRoZQ0KPiA+ID4gPiArICogICAqb3BzKiBhcnJheS4NCj4gPiA+ID4gKyAqLw0K PiA+ID4gPiArc3RhdGljIGlubGluZSB1aW50MTZfdA0KPiA+ID4gPiArcnRlX2NvbXBkZXZfZGVx dWV1ZV9idXJzdCh1aW50OF90IGRldl9pZCwgdWludDE2X3QgcXBfaWQsDQo+ID4gPiA+ICsgICAg ICAgICAgICBzdHJ1Y3QgcnRlX2NvbXBfb3AgKipvcHMsIHVpbnQxNl90IG5iX29wcykNCj4gPiA+ ID4gK3sNCj4gPiA+ID4gKyAgICAgIHN0cnVjdCBydGVfY29tcGRldiAqZGV2ID0gJnJ0ZV9jb21w ZGV2c1tkZXZfaWRdOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICBuYl9vcHMgPSAoKmRldi0+ ZGVxdWV1ZV9idXJzdCkNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAoZGV2LT5kYXRhLT5x dWV1ZV9wYWlyc1txcF9pZF0sIG9wcywgbmJfb3BzKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAg ICAgcmV0dXJuIG5iX29wczsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ ID4gPiA+ICsgKiBFbnF1ZXVlIGEgYnVyc3Qgb2Ygb3BlcmF0aW9ucyBmb3IgcHJvY2Vzc2luZyBv biBhIGNvbXByZXNzaW9uDQo+ID4gZGV2aWNlLg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIFRo ZSBydGVfY29tcGRldl9lbnF1ZXVlX2J1cnN0KCkgZnVuY3Rpb24gaXMgaW52b2tlZCB0byBwbGFj ZQ0KPiA+ID4gPiArICogY29tcCBvcGVyYXRpb25zIG9uIHRoZSBxdWV1ZSAqcXBfaWQqIG9mIHRo ZSBkZXZpY2UgZGVzaWduYXRlZCBieQ0KPiA+ID4gPiArICogaXRzICpkZXZfaWQqLg0KPiA+ID4g PiArICoNCj4gPiA+ID4gKyAqIFRoZSAqbmJfb3BzKiBwYXJhbWV0ZXIgaXMgdGhlIG51bWJlciBv ZiBvcGVyYXRpb25zIHRvIHByb2Nlc3MNCj4gPiB3aGljaCBhcmUNCj4gPiA+ID4gKyAqIHN1cHBs aWVkIGluIHRoZSAqb3BzKiBhcnJheSBvZiAqcnRlX2NvbXBfb3AqIHN0cnVjdHVyZXMuDQo+ID4g PiA+ICsgKg0KPiA+ID4gPiArICogVGhlIHJ0ZV9jb21wZGV2X2VucXVldWVfYnVyc3QoKSBmdW5j dGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YNCj4gPiA+ID4gKyAqIG9wZXJhdGlvbnMgaXQgYWN0 dWFsbHkgZW5xdWV1ZWQgZm9yIHByb2Nlc3NpbmcuIEEgcmV0dXJuIHZhbHVlIGVxdWFsDQo+ID4g dG8NCj4gPiA+ID4gKyAqICpuYl9vcHMqIG1lYW5zIHRoYXQgYWxsIHBhY2tldHMgaGF2ZSBiZWVu IGVucXVldWVkLg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIEBwYXJhbSAgIGRldl9pZCAgICAg ICBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGV2aWNlLg0KPiA+ID4gPiArICogQHBhcmFtICAgcXBf aWQgICAgICAgIFRoZSBpbmRleCBvZiB0aGUgcXVldWUgcGFpciB3aGljaCBwYWNrZXRzIGFyZQ0K PiA+ID4gPiArICogICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIGVucXVldWVkIGZvciBwcm9j ZXNzaW5nLiBUaGUgdmFsdWUNCj4gPiA+ID4gKyAqICAgICAgICAgICAgICAgICAgICAgICBtdXN0 IGJlIGluIHRoZSByYW5nZSBbMCwgbmJfcXVldWVfcGFpcnMgLSAxXQ0KPiA+ID4gPiArICogICAg ICAgICAgICAgICAgICAgICAgIHByZXZpb3VzbHkgc3VwcGxpZWQgdG8NCj4gPiA+ID4gKyAqICAg ICAgICAgICAgICAgICAgICAgICAqcnRlX2NvbXBkZXZfY29uZmlndXJlKi4NCj4gPiA+ID4gKyAq IEBwYXJhbSAgIG9wcyAgICAgICAgICBUaGUgYWRkcmVzcyBvZiBhbiBhcnJheSBvZiAqbmJfb3Bz KiBwb2ludGVycw0KPiA+ID4gPiArICogICAgICAgICAgICAgICAgICAgICAgIHRvICpydGVfY29t cF9vcCogc3RydWN0dXJlcyB3aGljaCBjb250YWluDQo+ID4gPiA+ICsgKiAgICAgICAgICAgICAg ICAgICAgICAgdGhlIG9wZXJhdGlvbnMgdG8gYmUgcHJvY2Vzc2VkLg0KPiA+ID4gPiArICogQHBh cmFtICAgbmJfb3BzICAgICAgIFRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyB0byBwcm9jZXNzLg0K PiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4gKyAqIFRoZSBudW1iZXIg b2Ygb3BlcmF0aW9ucyBhY3R1YWxseSBlbnF1ZXVlZCBvbiB0aGUgZGV2aWNlLiBUaGUNCj4gPiBy ZXR1cm4NCj4gPiA+ID4gKyAqIHZhbHVlIGNhbiBiZSBsZXNzIHRoYW4gdGhlIHZhbHVlIG9mIHRo ZSAqbmJfb3BzKiBwYXJhbWV0ZXIgd2hlbg0KPiA+IHRoZQ0KPiA+ID4gPiArICogZGV2aWNlJ3Mg cXVldWUgaXMgZnVsbCBvciBpZiBpbnZhbGlkIHBhcmFtZXRlcnMgYXJlIHNwZWNpZmllZCBpbg0K PiA+ID4gPiArICogYSAqcnRlX2NvbXBfb3AqLg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtzdGF0 aWMgaW5saW5lIHVpbnQxNl90DQo+ID4gPiA+ICtydGVfY29tcGRldl9lbnF1ZXVlX2J1cnN0KHVp bnQ4X3QgZGV2X2lkLCB1aW50MTZfdCBxcF9pZCwNCj4gPiA+ID4gKyAgICAgICAgICAgIHN0cnVj dCBydGVfY29tcF9vcCAqKm9wcywgdWludDE2X3QgbmJfb3BzKQ0KPiA+ID4gPiArew0KPiA+ID4g PiArICAgICAgc3RydWN0IHJ0ZV9jb21wZGV2ICpkZXYgPSAmcnRlX2NyeXB0b2RldnNbZGV2X2lk XTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgcmV0dXJuICgqZGV2LT5lbnF1ZXVlX2J1cnN0 KSgNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICBkZXYtPmRhdGEtPnF1ZXVlX3BhaXJzW3Fw X2lkXSwgb3BzLCBuYl9vcHMpOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+DQo+ID4g PiA+IC8qIEFsbCBzZXNzaW9uIEFQSXMgc3RyaXBwZWQgZnJvbSBSRkMgZm9yIHNpbXBsaWNpdHku ICovDQo+ID4gPiA+DQo+ID4gPiA+ICsvKiogY29tcHJlc3Npb24gZGV2aWNlIG9wZXJhdGlvbnMg ZnVuY3Rpb24gcG9pbnRlciB0YWJsZSAqLw0KPiA+ID4gPiArc3RydWN0IHJ0ZV9jb21wZGV2X29w cyB7DQo+ID4gPiA+ICsgICAgICBjb21wZGV2X2NvbmZpZ3VyZV90IGRldl9jb25maWd1cmU7ICAg IC8qKjwgQ29uZmlndXJlIGRldmljZS4gKi8NCj4gPiA+ID4gKyAgICAgIGNvbXBkZXZfc3RhcnRf dCBkZXZfc3RhcnQ7ICAgICAgICAgICAgLyoqPCBTdGFydCBkZXZpY2UuICovDQo+ID4gPiA+ICsg ICAgICBjb21wZGV2X3N0b3BfdCBkZXZfc3RvcDsgICAgICAgIC8qKjwgU3RvcCBkZXZpY2UuICov DQo+ID4gPiA+ICsgICAgICBjb21wZGV2X2Nsb3NlX3QgZGV2X2Nsb3NlOyAgICAgICAgICAgIC8q KjwgQ2xvc2UgZGV2aWNlLiAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICBjb21wZGV2X2lu Zm9fZ2V0X3QgZGV2X2luZm9zX2dldDsgICAgIC8qKjwgR2V0IGRldmljZSBpbmZvLiAqLw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgICAgICBjb21wZGV2X3N0YXRzX2dldF90IHN0YXRzX2dldDsNCj4g PiA+ID4gKyAgICAgIC8qKjwgR2V0IGRldmljZSBzdGF0aXN0aWNzLiAqLw0KPiA+ID4gPiArICAg ICAgY29tcGRldl9zdGF0c19yZXNldF90IHN0YXRzX3Jlc2V0Ow0KPiA+ID4gPiArICAgICAgLyoq PCBSZXNldCBkZXZpY2Ugc3RhdGlzdGljcy4gKi8NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAg Y29tcGRldl9xdWV1ZV9wYWlyX3NldHVwX3QgcXVldWVfcGFpcl9zZXR1cDsNCj4gPiA+ID4gKyAg ICAgIC8qKjwgU2V0IHVwIGEgZGV2aWNlIHF1ZXVlIHBhaXIuICovDQo+ID4gPiA+ICsgICAgICBj b21wZGV2X3F1ZXVlX3BhaXJfcmVsZWFzZV90IHF1ZXVlX3BhaXJfcmVsZWFzZTsNCj4gPiA+ID4g KyAgICAgIC8qKjwgUmVsZWFzZSBhIHF1ZXVlIHBhaXIuICovDQo+ID4gPiA+ICsgICAgICBjb21w ZGV2X3F1ZXVlX3BhaXJfc3RhcnRfdCBxdWV1ZV9wYWlyX3N0YXJ0Ow0KPiA+ID4gPiArICAgICAg LyoqPCBTdGFydCBhIHF1ZXVlIHBhaXIuICovDQo+ID4gPiA+ICsgICAgICBjb21wZGV2X3F1ZXVl X3BhaXJfc3RvcF90IHF1ZXVlX3BhaXJfc3RvcDsNCj4gPiA+ID4gKyAgICAgIC8qKjwgU3RvcCBh IHF1ZXVlIHBhaXIuICovDQo+ID4gPiA+ICsgICAgICBjb21wZGV2X3F1ZXVlX3BhaXJfY291bnRf dCBxdWV1ZV9wYWlyX2NvdW50Ow0KPiA+ID4gPiArICAgICAgLyoqPCBHZXQgY291bnQgb2YgdGhl IHF1ZXVlIHBhaXJzLiAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICBjb21wX2dldF9zZXNz aW9uX3ByaXZhdGVfc2l6ZV90IHNlc3Npb25fZ2V0X3NpemU7DQo+ID4gPiA+ICsgICAgICAvKio8 IFJldHVybiBwcml2YXRlIHNlc3Npb24uICovDQo+ID4gPiA+ICsgICAgICBjb21wX2NvbmZpZ3Vy ZV9zZXNzaW9uX3Qgc2Vzc2lvbl9jb25maWd1cmU7DQo+ID4gPiA+ICsgICAgICAvKio8IENvbmZp Z3VyZSBhIGNvbXAgc2Vzc2lvbi4gKi8NCj4gPiA+ID4gKyAgICAgIGNvbXBfZnJlZV9zZXNzaW9u X3Qgc2Vzc2lvbl9jbGVhcjsNCj4gPiA+ID4gKyAgICAgIC8qKjwgQ2xlYXIgYSBjb21wIHNlc3Np b25zIHByaXZhdGUgZGF0YS4gKi8NCj4gPiA+ID4gKyAgICAgIGNvbXBfcXVldWVfcGFpcl9hdHRh Y2hfc2Vzc2lvbl90IHFwX2F0dGFjaF9zZXNzaW9uOw0KPiA+ID4gPiArICAgICAgLyoqPCBBdHRh Y2ggc2Vzc2lvbiB0byBxdWV1ZSBwYWlyLiAqLw0KPiA+ID4gPiArICAgICAgY29tcF9xdWV1ZV9w YWlyX2F0dGFjaF9zZXNzaW9uX3QgcXBfZGV0YWNoX3Nlc3Npb247DQo+ID4gPiA+ICsgICAgICAv Kio8IERldGFjaCBzZXNzaW9uIGZyb20gcXVldWUgcGFpci4gKi8NCj4gPiA+ID4gK307DQo+ID4g PiA+DQo+ID4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+DQo=