From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id E4FCE1023 for ; Wed, 25 Jan 2017 17:32:35 +0100 (CET) Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga103.fm.intel.com with ESMTP; 25 Jan 2017 08:32:17 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,284,1477983600"; d="scan'208";a="58111449" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by fmsmga006.fm.intel.com with ESMTP; 25 Jan 2017 08:32:17 -0800 Received: from fmsmsx116.amr.corp.intel.com (10.18.116.20) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 25 Jan 2017 08:32:17 -0800 Received: from fmsmsx108.amr.corp.intel.com ([169.254.9.130]) by fmsmsx116.amr.corp.intel.com ([169.254.2.162]) with mapi id 14.03.0248.002; Wed, 25 Jan 2017 08:32:17 -0800 From: "Eads, Gage" To: Jerin Jacob , "dev@dpdk.org" CC: "thomas.monjalon@6wind.com" , "Richardson, Bruce" , "hemant.agrawal@nxp.com" , "Van Haaren, Harry" , "McDaniel, Timothy" Thread-Topic: [dpdk-dev] [PATCH v4 1/6] eventdev: introduce event driven programming model Thread-Index: AQHSW2xXsGgHA6bcOUyrfHLc4sbJyaFGoaPA Date: Wed, 25 Jan 2017 16:32:17 +0000 Message-ID: <9184057F7FC11744A2107296B6B8EB1E01E5EF2C@FMSMSX108.amr.corp.intel.com> References: <1480996340-29871-1-git-send-email-jerin.jacob@caviumnetworks.com> <1482312326-2589-1-git-send-email-jerin.jacob@caviumnetworks.com> <1482312326-2589-2-git-send-email-jerin.jacob@caviumnetworks.com> In-Reply-To: <1482312326-2589-2-git-send-email-jerin.jacob@caviumnetworks.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZmViN2M5MGUtYzlhOC00MzRhLTk1ZGUtNTk1NDU4NDg5NjcxIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6IkxJT0Nja3d4TWJSSGUwV2hoUTNTVk01Y2ZaVjNGSVBzaWpKY09nZG1VcDg9In0= x-ctpclassification: CTP_IC x-originating-ip: [10.1.200.108] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v4 1/6] eventdev: introduce event driven programming model 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: Wed, 25 Jan 2017 16:32:38 -0000 SGkgSmVyaW4sDQoNClNlZSB0aGUgYm90dG9tIG9mIHRoaXMgZW1haWwgZm9yIGEgcHJvcG9zZWQg dHdlYWsgdG8gdGhlIHJ0ZV9ldmVudF9lbnF1ZXVlX2J1cnN0KCkgcmV0dXJuIHZhbHVlLg0KDQo+ ICAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiAgRnJvbTogSmVyaW4gSmFjb2IgW21haWx0 bzpqZXJpbi5qYWNvYkBjYXZpdW1uZXR3b3Jrcy5jb21dDQo+ICBTZW50OiBXZWRuZXNkYXksIERl Y2VtYmVyIDIxLCAyMDE2IDM6MjUgQU0NCj4gIFRvOiBkZXZAZHBkay5vcmcNCj4gIENjOiB0aG9t YXMubW9uamFsb25ANndpbmQuY29tOyBSaWNoYXJkc29uLCBCcnVjZQ0KPiAgPGJydWNlLnJpY2hh cmRzb25AaW50ZWwuY29tPjsgaGVtYW50LmFncmF3YWxAbnhwLmNvbTsgRWFkcywgR2FnZQ0KPiAg PGdhZ2UuZWFkc0BpbnRlbC5jb20+OyBWYW4gSGFhcmVuLCBIYXJyeSA8aGFycnkudmFuLmhhYXJl bkBpbnRlbC5jb20+Ow0KPiAgSmVyaW4gSmFjb2IgPGplcmluLmphY29iQGNhdml1bW5ldHdvcmtz LmNvbT4NCj4gIFN1YmplY3Q6IFtkcGRrLWRldl0gW1BBVENIIHY0IDEvNl0gZXZlbnRkZXY6IGlu dHJvZHVjZSBldmVudCBkcml2ZW4NCj4gIHByb2dyYW1taW5nIG1vZGVsDQo+DQo+ICBJbiBhIHBv bGxpbmcgbW9kZWwsIGxjb3JlcyBwb2xsIGV0aGRldiBwb3J0cyBhbmQgYXNzb2NpYXRlZA0KPiAg cnggcXVldWVzIGRpcmVjdGx5IHRvIGxvb2sgZm9yIHBhY2tldC4gSW4gYW4gZXZlbnQgZHJpdmVu IG1vZGVsLA0KPiAgYnkgY29udHJhc3QsIGxjb3JlcyBjYWxsIHRoZSBzY2hlZHVsZXIgdGhhdCBz ZWxlY3RzIHBhY2tldHMgZm9yDQo+ICB0aGVtIGJhc2VkIG9uIHByb2dyYW1tZXItc3BlY2lmaWVk IGNyaXRlcmlhLiBFdmVudGRldiBsaWJyYXJ5DQo+ICBhZGRzIHN1cHBvcnQgZm9yIGV2ZW50IGRy aXZlbiBwcm9ncmFtbWluZyBtb2RlbCwgd2hpY2ggb2ZmZXINCj4gIGFwcGxpY2F0aW9ucyBhdXRv bWF0aWMgbXVsdGljb3JlIHNjYWxpbmcsIGR5bmFtaWMgbG9hZCBiYWxhbmNpbmcsDQo+ICBwaXBl bGluaW5nLCBwYWNrZXQgaW5ncmVzcyBvcmRlciBtYWludGVuYW5jZSBhbmQNCj4gIHN5bmNocm9u aXphdGlvbiBzZXJ2aWNlcyB0byBzaW1wbGlmeSBhcHBsaWNhdGlvbiBwYWNrZXQgcHJvY2Vzc2lu Zy4NCj4NCj4gIEJ5IGludHJvZHVjaW5nIGV2ZW50IGRyaXZlbiBwcm9ncmFtbWluZyBtb2RlbCwg RFBESyBjYW4gc3VwcG9ydA0KPiAgYm90aCBwb2xsaW5nIGFuZCBldmVudCBkcml2ZW4gcHJvZ3Jh bW1pbmcgbW9kZWxzIGZvciBwYWNrZXQgcHJvY2Vzc2luZywNCj4gIGFuZCBhcHBsaWNhdGlvbnMg YXJlIGZyZWUgdG8gY2hvb3NlIHdoYXRldmVyIG1vZGVsDQo+ICAob3IgY29tYmluYXRpb24gb2Yg dGhlIHR3bykgdGhhdCBiZXN0IHN1aXRzIHRoZWlyIG5lZWRzLg0KPg0KPiAgVGhpcyBwYXRjaCBh ZGRzIHRoZSBldmVudGRldiBzcGVjaWZpY2F0aW9uIGhlYWRlciBmaWxlLg0KPg0KPiAgU2lnbmVk LW9mZi1ieTogSmVyaW4gSmFjb2IgPGplcmluLmphY29iQGNhdml1bW5ldHdvcmtzLmNvbT4NCj4g IEFja2VkLWJ5OiBCcnVjZSBSaWNoYXJkc29uIDxicnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT4N Cj4gIC0tLQ0KPiAgIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsN Cj4gICBkb2MvYXBpL2RveHktYXBpLWluZGV4Lm1kICAgICAgICAgIHwgICAgMSArDQo+ICAgZG9j L2FwaS9kb3h5LWFwaS5jb25mICAgICAgICAgICAgICB8ICAgIDEgKw0KPiAgIGxpYi9saWJydGVf ZXZlbnRkZXYvcnRlX2V2ZW50ZGV2LmggfCAxMjc1DQo+ICArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysNCj4gICA0IGZpbGVzIGNoYW5nZWQsIDEyODAgaW5zZXJ0aW9ucygrKQ0K PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbGlicnRlX2V2ZW50ZGV2L3J0ZV9ldmVudGRldi5o DQo+DQo+ICBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUw0KPiAgaW5kZXgg MjZkOTU5MC4uOGU1OTM1MiAxMDA2NDQNCj4gIC0tLSBhL01BSU5UQUlORVJTDQo+ICArKysgYi9N QUlOVEFJTkVSUw0KPiAgQEAgLTI0OSw2ICsyNDksOSBAQCBGOiBsaWIvbGlicnRlX2NyeXB0b2Rl di8NCj4gICBGOiBhcHAvdGVzdC90ZXN0X2NyeXB0b2RldioNCj4gICBGOiBleGFtcGxlcy9sMmZ3 ZC1jcnlwdG8vDQo+DQo+ICArRXZlbnRkZXYgQVBJIC0gRVhQRVJJTUVOVEFMDQo+ICArTTogSmVy aW4gSmFjb2IgPGplcmluLmphY29iQGNhdml1bW5ldHdvcmtzLmNvbT4NCj4gICtGOiBsaWIvbGli cnRlX2V2ZW50ZGV2Lw0KPg0KPiAgIE5ldHdvcmtpbmcgRHJpdmVycw0KPiAgIC0tLS0tLS0tLS0t LS0tLS0tLQ0KPiAgZGlmZiAtLWdpdCBhL2RvYy9hcGkvZG94eS1hcGktaW5kZXgubWQgYi9kb2Mv YXBpL2RveHktYXBpLWluZGV4Lm1kDQo+ICBpbmRleCAzM2MwNGVkLi4wYWQzMzY3IDEwMDY0NA0K PiAgLS0tIGEvZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZA0KPiAgKysrIGIvZG9jL2FwaS9kb3h5 LWFwaS1pbmRleC5tZA0KPiAgQEAgLTQwLDYgKzQwLDcgQEAgVGhlcmUgYXJlIG1hbnkgbGlicmFy aWVzLCBzbyB0aGVpciBoZWFkZXJzIG1heSBiZQ0KPiAgZ3JvdXBlZCBieSB0b3BpY3M6DQo+ICAg ICBbZXRoZGV2XSAgICAgICAgICAgICAoQHJlZiBydGVfZXRoZGV2LmgpLA0KPiAgICAgW2V0aGN0 cmxdICAgICAgICAgICAgKEByZWYgcnRlX2V0aF9jdHJsLmgpLA0KPiAgICAgW2NyeXB0b2Rldl0g ICAgICAgICAgKEByZWYgcnRlX2NyeXB0b2Rldi5oKSwNCj4gICsgIFtldmVudGRldl0gICAgICAg ICAgIChAcmVmIHJ0ZV9ldmVudGRldi5oKSwNCj4gICAgIFtkZXZhcmdzXSAgICAgICAgICAgIChA cmVmIHJ0ZV9kZXZhcmdzLmgpLA0KPiAgICAgW2JvbmRdICAgICAgICAgICAgICAgKEByZWYgcnRl X2V0aF9ib25kLmgpLA0KPiAgICAgW3Zob3N0XSAgICAgICAgICAgICAgKEByZWYgcnRlX3ZpcnRp b19uZXQuaCksDQo+ICBkaWZmIC0tZ2l0IGEvZG9jL2FwaS9kb3h5LWFwaS5jb25mIGIvZG9jL2Fw aS9kb3h5LWFwaS5jb25mDQo+ICBpbmRleCBiMzQwZmNmLi5lMDMwYzIxIDEwMDY0NA0KPiAgLS0t IGEvZG9jL2FwaS9kb3h5LWFwaS5jb25mDQo+ICArKysgYi9kb2MvYXBpL2RveHktYXBpLmNvbmYN Cj4gIEBAIC00MSw2ICs0MSw3IEBAIElOUFVUICAgICAgICAgICAgICAgICAgID0gZG9jL2FwaS9k b3h5LWFwaS1pbmRleC5tZCBcDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvbGli cnRlX2NyeXB0b2RldiBcDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvbGlicnRl X2Rpc3RyaWJ1dG9yIFwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYi9saWJydGVf ZXRoZXIgXA0KPiAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL2xpYnJ0ZV9ldmVudGRl diBcDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvbGlicnRlX2hhc2ggXA0KPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL2xpYnJ0ZV9pcF9mcmFnIFwNCj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYi9saWJydGVfam9ic3RhdHMgXA0KPiAgZGlmZiAtLWdp dCBhL2xpYi9saWJydGVfZXZlbnRkZXYvcnRlX2V2ZW50ZGV2LmgNCj4gIGIvbGliL2xpYnJ0ZV9l dmVudGRldi9ydGVfZXZlbnRkZXYuaA0KPiAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gIGluZGV4 IDAwMDAwMDAuLmIyYmM0NzENCj4gIC0tLSAvZGV2L251bGwNCj4gICsrKyBiL2xpYi9saWJydGVf ZXZlbnRkZXYvcnRlX2V2ZW50ZGV2LmgNCj4gIEBAIC0wLDAgKzEsMTI3NSBAQA0KPiAgKy8qDQo+ ICArICogICBCU0QgTElDRU5TRQ0KPiAgKyAqDQo+ICArICogICBDb3B5cmlnaHQgMjAxNiBDYXZp dW0uDQo+ICArICogICBDb3B5cmlnaHQgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4NCj4gICsgKiAg IENvcHlyaWdodCAyMDE2IE5YUC4NCj4gICsgKg0KPiAgKyAqICAgUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQo+ICArICog ICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMNCj4gICsgKiAgIGFyZSBtZXQ6DQo+ICArICoNCj4gICsgKiAgICAgKiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dA0KPiAgKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4NCj4gICsgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KPiAgKyAqICAgICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbg0KPiAgKyAqICAgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCj4gICsgKiAgICAgICBkaXN0cmlidXRpb24uDQo+ICAr ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBDYXZpdW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMN Cj4gICsgKiAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQNCj4gICsgKiAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQo+ICArICoNCj4gICsgKiAg IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORA0K PiAgQ09OVFJJQlVUT1JTDQo+ICArICogICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUDQo+ICBOT1QNCj4gICsgKiAgIExJTUlURUQg VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORA0KPiAgRklU TkVTUyBGT1INCj4gICsgKiAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUNCj4gIENPUFlSSUdIVA0KPiAgKyAqICAgT1dORVIgT1IgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQo+ICBJTkNJREVO VEFMLA0KPiAgKyAqICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUDQo+ICBOT1QNCj4gICsgKiAgIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MNCj4gIE9GIFVTRSwNCj4g ICsgKiAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF UiBDQVVTRUQNCj4gIEFORCBPTiBBTlkNCj4gICsgKiAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SDQo+ICBUT1JUDQo+ICArICog ICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GDQo+ICBUSEUgVVNFDQo+ICArICogICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gNCj4gIERBTUFHRS4NCj4gICsgKi8NCj4g ICsNCj4gICsjaWZuZGVmIF9SVEVfRVZFTlRERVZfSF8NCj4gICsjZGVmaW5lIF9SVEVfRVZFTlRE RVZfSF8NCj4gICsNCj4gICsvKioNCj4gICsgKiBAZmlsZQ0KPiAgKyAqDQo+ICArICogUlRFIEV2 ZW50IERldmljZSBBUEkNCj4gICsgKg0KPiAgKyAqIEluIGEgcG9sbGluZyBtb2RlbCwgbGNvcmVz IHBvbGwgZXRoZGV2IHBvcnRzIGFuZCBhc3NvY2lhdGVkIHJ4IHF1ZXVlcw0KPiAgKyAqIGRpcmVj dGx5IHRvIGxvb2sgZm9yIHBhY2tldC4gSW4gYW4gZXZlbnQgZHJpdmVuIG1vZGVsLCBieSBjb250 cmFzdCwgbGNvcmVzDQo+ICArICogY2FsbCB0aGUgc2NoZWR1bGVyIHRoYXQgc2VsZWN0cyBwYWNr ZXRzIGZvciB0aGVtIGJhc2VkIG9uIHByb2dyYW1tZXINCj4gICsgKiBzcGVjaWZpZWQgY3JpdGVy aWEuIEV2ZW50ZGV2IGxpYnJhcnkgYWRkcyBzdXBwb3J0IGZvciBldmVudCBkcml2ZW4NCj4gICsg KiBwcm9ncmFtbWluZyBtb2RlbCwgd2hpY2ggb2ZmZXIgYXBwbGljYXRpb25zIGF1dG9tYXRpYyBt dWx0aWNvcmUgc2NhbGluZywNCj4gICsgKiBkeW5hbWljIGxvYWQgYmFsYW5jaW5nLCBwaXBlbGlu aW5nLCBwYWNrZXQgaW5ncmVzcyBvcmRlciBtYWludGVuYW5jZSBhbmQNCj4gICsgKiBzeW5jaHJv bml6YXRpb24gc2VydmljZXMgdG8gc2ltcGxpZnkgYXBwbGljYXRpb24gcGFja2V0IHByb2Nlc3Np bmcuDQo+ICArICoNCj4gICsgKiBUaGUgRXZlbnQgRGV2aWNlIEFQSSBpcyBjb21wb3NlZCBvZiB0 d28gcGFydHM6DQo+ICArICoNCj4gICsgKiAtIFRoZSBhcHBsaWNhdGlvbi1vcmllbnRlZCBFdmVu dCBBUEkgdGhhdCBpbmNsdWRlcyBmdW5jdGlvbnMgdG8gc2V0dXANCj4gICsgKiAgIGFuIGV2ZW50 IGRldmljZSAoY29uZmlndXJlIGl0LCBzZXR1cCBpdHMgcXVldWVzLCBwb3J0cyBhbmQgc3RhcnQg aXQpLCB0bw0KPiAgKyAqICAgZXN0YWJsaXNoIHRoZSBsaW5rIGJldHdlZW4gcXVldWVzIHRvIHBv cnQgYW5kIHRvIHJlY2VpdmUgZXZlbnRzLCBhbmQgc28gb24uDQo+ICArICoNCj4gICsgKiAtIFRo ZSBkcml2ZXItb3JpZW50ZWQgRXZlbnQgQVBJIHRoYXQgZXhwb3J0cyBhIGZ1bmN0aW9uIGFsbG93 aW5nDQo+ICArICogICBhbiBldmVudCBwb2xsIE1vZGUgRHJpdmVyIChQTUQpIHRvIHNpbXVsdGFu ZW91c2x5IHJlZ2lzdGVyIGl0c2VsZiBhcw0KPiAgKyAqICAgYW4gZXZlbnQgZGV2aWNlIGRyaXZl ci4NCj4gICsgKg0KPiAgKyAqIEV2ZW50IGRldmljZSBjb21wb25lbnRzOg0KPiAgKyAqDQo+ICAr ICogICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0rDQo+ICArICogICAgICAg ICAgICAgICAgICAgICB8ICstLS0tLS0tLS0tLS0tKyB8DQo+ICArICogICAgICAgICstLS0tLS0t KyAgICB8IHwgICAgZmxvdyAwICAgfCB8DQo+ICArICogICAgICAgIHxQYWNrZXQgfCAgICB8ICst LS0tLS0tLS0tLS0tKyB8DQo+ICArICogICAgICAgIHxldmVudCAgfCAgICB8ICstLS0tLS0tLS0t LS0tKyB8DQo+ICArICogICAgICAgIHwgICAgICAgfCAgICB8IHwgICAgZmxvdyAxICAgfCB8cG9y dF9saW5rKHBvcnQwLCBxdWV1ZTApDQo+ICArICogICAgICAgICstLS0tLS0tKyAgICB8ICstLS0t LS0tLS0tLS0tKyB8ICAgICB8ICAgICArLS0tLS0tLS0rDQo+ICArICogICAgICAgICstLS0tLS0t KyAgICB8ICstLS0tLS0tLS0tLS0tKyBvLS0tLS12LS0tLS1vICAgICAgICB8ZGVxdWV1ZSArLS0t LS0tKw0KPiAgKyAqICAgICAgICB8Q3J5cHRvIHwgICAgfCB8ICAgIGZsb3cgbiAgIHwgfCAgICAg ICAgICAgfCBldmVudCAgKy0tLS0tLS0+fENvcmUgMHwNCj4gICsgKiAgICAgICAgfHdvcmsgICB8 ICAgIHwgKy0tLS0tLS0tLS0tLS0rIG8tLS0tKyAgICAgIHwgcG9ydCAwIHwgICAgICAgIHwgICAg ICB8DQo+ICArICogICAgICAgIHxkb25lIGV2fCAgICB8ICBldmVudCBxdWV1ZSAwICB8ICAgIHwg ICAgICArLS0tLS0tLS0rICAgICAgICArLS0tLS0tKw0KPiAgKyAqICAgICAgICArLS0tLS0tLSsg ICAgKy0tLS0tLS0tLS0tLS0tLS0tKyAgICB8DQo+ICArICogICAgICAgICstLS0tLS0tKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwNCj4gICsgKiAgICAgICAgfFRpbWVyICB8ICAgICstLS0t LS0tLS0tLS0tLS0tLSsgICAgfCAgICAgICstLS0tLS0tLSsNCj4gICsgKiAgICAgICAgfGV4cGly eSB8ICAgIHwgKy0tLS0tLS0tLS0tLS0rIHwgICAgKy0tLS0tLW8gICAgICAgIHxkZXF1ZXVlICst LS0tLS0rDQo+ICArICogICAgICAgIHxldmVudCAgfCAgICB8IHwgICAgZmxvdyAwICAgfCBvLS0t LS0tLS0tLS1vIGV2ZW50ICArLS0tLS0tLT58Q29yZSAxfA0KPiAgKyAqICAgICAgICArLS0tLS0t LSsgICAgfCArLS0tLS0tLS0tLS0tLSsgfCAgICAgICstLS0tbyBwb3J0IDEgfCAgICAgICAgfCAg ICAgIHwNCj4gICsgKiAgICAgICBFdmVudCBlbnF1ZXVlIHwgKy0tLS0tLS0tLS0tLS0rIHwgICAg ICB8ICAgICstLS0tLS0tLSsgICAgICAgICstLS0tLS0rDQo+ICArICogICAgIG8tLS0tLS0tLS0t LS0tPiB8IHwgICAgZmxvdyAxICAgfCB8ICAgICAgfA0KPiAgKyAqICAgICAgICBlbnF1ZXVlKCAg ICAgfCArLS0tLS0tLS0tLS0tLSsgfCAgICAgIHwNCj4gICsgKiAgICAgICAgcXVldWVfaWQsICAg IHwgICAgICAgICAgICAgICAgIHwgICAgICB8ICAgICstLS0tLS0tLSsgICAgICAgICstLS0tLS0r DQo+ICArICogICAgICAgIGZsb3dfaWQsICAgICB8ICstLS0tLS0tLS0tLS0tKyB8ICAgICAgfCAg ICB8ICAgICAgICB8ZGVxdWV1ZSB8Q29yZSAyfA0KPiAgKyAqICAgICAgICBzY2hlZF90eXBlLCAg fCB8ICAgIGZsb3cgbiAgIHwgby0tLS0tLS0tLS0tbyBldmVudCAgKy0tLS0tLS0+fCAgICAgIHwN Cj4gICsgKiAgICAgICAgZXZlbnRfdHlwZSwgIHwgKy0tLS0tLS0tLS0tLS0rIHwgICAgICB8ICAg IHwgcG9ydCAyIHwgICAgICAgICstLS0tLS0rDQo+ICArICogICAgICAgIHN1YmV2X3R5cGUsICB8 ICBldmVudCBxdWV1ZSAxICB8ICAgICAgfCAgICArLS0tLS0tLS0rDQo+ICArICogICAgICAgIGV2 ZW50KSAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgfCAgICArLS0tLS0tLS0rDQo+ICAr ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8ICAg ICAgICB8ZGVxdWV1ZSArLS0tLS0tKw0KPiAgKyAqICAgICAgICArLS0tLS0tLSsgICAgKy0tLS0t LS0tLS0tLS0tLS0tKyAgICAgIHwgICAgfCBldmVudCAgKy0tLS0tLS0+fENvcmUgbnwNCj4gICsg KiAgICAgICAgfENvcmUgICB8ICAgIHwgKy0tLS0tLS0tLS0tLS0rIG8tLS0tLS0tLS0tLW8gcG9y dCBuIHwgICAgICAgIHwgICAgICB8DQo+ICArICogICAgICAgIHwoU1cpICAgfCAgICB8IHwgICAg ZmxvdyAwICAgfCB8ICAgICAgfCAgICArLS0tLS0tLS0rICAgICAgICArLS0rLS0tKw0KPiAgKyAq ICAgICAgICB8ZXZlbnQgIHwgICAgfCArLS0tLS0tLS0tLS0tLSsgfCAgICAgIHwgICAgICAgICAg ICAgICAgICAgICAgICAgfA0KPiAgKyAqICAgICAgICArLS0tLS0tLSsgICAgfCArLS0tLS0tLS0t LS0tLSsgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfA0KPiAgKyAqICAgICAgICAg ICAgXiAgICAgICAgfCB8ICAgIGZsb3cgMSAgIHwgfCAgICAgIHwgICAgICAgICAgICAgICAgICAg ICAgICAgfA0KPiAgKyAqICAgICAgICAgICAgfCAgICAgICAgfCArLS0tLS0tLS0tLS0tLSsgby0t LS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgfA0KPiAgKyAqICAgICAgICAgICAgfCAgICAg ICAgfCArLS0tLS0tLS0tLS0tLSsgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0K PiAgKyAqICAgICAgICAgICAgfCAgICAgICAgfCB8ICAgIGZsb3cgbiAgIHwgfCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfA0KPiAgKyAqICAgICAgICAgICAgfCAgICAgICAgfCArLS0t LS0tLS0tLS0tLSsgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KPiAgKyAqICAg ICAgICAgICAgfCAgICAgICAgfCAgZXZlbnQgcXVldWUgbiAgfCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfA0KPiAgKyAqICAgICAgICAgICAgfCAgICAgICAgKy0tLS0tLS0tLS0tLS0t LS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KPiAgKyAqICAgICAgICAgICAg fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfA0KPiAgKyAqICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KPiAgKyAqDQo+ICArICogRXZlbnQgZGV2aWNl OiBBIGhhcmR3YXJlIG9yIHNvZnR3YXJlLWJhc2VkIGV2ZW50IHNjaGVkdWxlci4NCj4gICsgKg0K PiAgKyAqIEV2ZW50OiBBIHVuaXQgb2Ygc2NoZWR1bGluZyB0aGF0IGVuY2Fwc3VsYXRlcyBhIHBh Y2tldCBvciBvdGhlciBkYXRhdHlwZQ0KPiAgKyAqIGxpa2UgU1cgZ2VuZXJhdGVkIGV2ZW50IGZy b20gdGhlIENQVSwgQ3J5cHRvIHdvcmsgY29tcGxldGlvbg0KPiAgbm90aWZpY2F0aW9uLA0KPiAg KyAqIFRpbWVyIGV4cGlyeSBldmVudCBub3RpZmljYXRpb24gZXRjIGFzIHdlbGwgYXMgbWV0YWRh dGEuDQo+ICArICogVGhlIG1ldGFkYXRhIGluY2x1ZGVzIGZsb3cgSUQsIHNjaGVkdWxpbmcgdHlw ZSwgZXZlbnQgcHJpb3JpdHksIGV2ZW50X3R5cGUsDQo+ICArICogc3ViX2V2ZW50X3R5cGUgZXRj Lg0KPiAgKyAqDQo+ICArICogRXZlbnQgcXVldWU6IEEgcXVldWUgY29udGFpbmluZyBldmVudHMg dGhhdCBhcmUgc2NoZWR1bGVkIGJ5IHRoZSBldmVudA0KPiAgZGV2Lg0KPiAgKyAqIEFuIGV2ZW50 IHF1ZXVlIGNvbnRhaW5zIGV2ZW50cyBvZiBkaWZmZXJlbnQgZmxvd3MgYXNzb2NpYXRlZCB3aXRo DQo+ICBzY2hlZHVsaW5nDQo+ICArICogdHlwZXMsIHN1Y2ggYXMgYXRvbWljLCBvcmRlcmVkLCBv ciBwYXJhbGxlbC4NCj4gICsgKg0KPiAgKyAqIEV2ZW50IHBvcnQ6IEFuIGFwcGxpY2F0aW9uJ3Mg aW50ZXJmYWNlIGludG8gdGhlIGV2ZW50IGRldiBmb3IgZW5xdWV1ZSBhbmQNCj4gICsgKiBkZXF1 ZXVlIG9wZXJhdGlvbnMuIEVhY2ggZXZlbnQgcG9ydCBjYW4gYmUgbGlua2VkIHdpdGggb25lIG9y IG1vcmUNCj4gICsgKiBldmVudCBxdWV1ZXMgZm9yIGRlcXVldWUgb3BlcmF0aW9ucy4NCj4gICsg Kg0KPiAgKyAqIEJ5IGRlZmF1bHQsIGFsbCB0aGUgZnVuY3Rpb25zIG9mIHRoZSBFdmVudCBEZXZp Y2UgQVBJIGV4cG9ydGVkIGJ5IGEgUE1EDQo+ICArICogYXJlIGxvY2stZnJlZSBmdW5jdGlvbnMg d2hpY2ggYXNzdW1lIHRvIG5vdCBiZSBpbnZva2VkIGluIHBhcmFsbGVsIG9uDQo+ICArICogZGlm ZmVyZW50IGxvZ2ljYWwgY29yZXMgdG8gd29yayBvbiB0aGUgc2FtZSB0YXJnZXQgb2JqZWN0LiBG b3IgaW5zdGFuY2UsDQo+ICArICogdGhlIGRlcXVldWUgZnVuY3Rpb24gb2YgYSBQTUQgY2Fubm90 IGJlIGludm9rZWQgaW4gcGFyYWxsZWwgb24gdHdvIGxvZ2ljYWwNCj4gICsgKiBjb3JlcyB0byBv cGVyYXRlcyBvbiBzYW1lICBldmVudCBwb3J0LiBPZiBjb3Vyc2UsIHRoaXMgZnVuY3Rpb24NCj4g ICsgKiBjYW4gYmUgaW52b2tlZCBpbiBwYXJhbGxlbCBieSBkaWZmZXJlbnQgbG9naWNhbCBjb3Jl cyBvbiBkaWZmZXJlbnQgcG9ydHMuDQo+ICArICogSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9m IHRoZSB1cHBlciBsZXZlbCBhcHBsaWNhdGlvbiB0byBlbmZvcmNlIHRoaXMgcnVsZS4NCj4gICsg Kg0KPiAgKyAqIEluIGFsbCBmdW5jdGlvbnMgb2YgdGhlIEV2ZW50IEFQSSwgdGhlIEV2ZW50IGRl dmljZSBpcw0KPiAgKyAqIGRlc2lnbmF0ZWQgYnkgYW4gaW50ZWdlciA+PSAwIG5hbWVkIHRoZSBk ZXZpY2UgaWRlbnRpZmllciAqZGV2X2lkKg0KPiAgKyAqDQo+ICArICogQXQgdGhlIEV2ZW50IGRy aXZlciBsZXZlbCwgRXZlbnQgZGV2aWNlcyBhcmUgcmVwcmVzZW50ZWQgYnkgYSBnZW5lcmljDQo+ ICArICogZGF0YSBzdHJ1Y3R1cmUgb2YgdHlwZSAqcnRlX2V2ZW50X2RldiouDQo+ICArICoNCj4g ICsgKiBFdmVudCBkZXZpY2VzIGFyZSBkeW5hbWljYWxseSByZWdpc3RlcmVkIGR1cmluZyB0aGUg UENJL1NvQyBkZXZpY2UgcHJvYmluZw0KPiAgKyAqIHBoYXNlIHBlcmZvcm1lZCBhdCBFQUwgaW5p dGlhbGl6YXRpb24gdGltZS4NCj4gICsgKiBXaGVuIGFuIEV2ZW50IGRldmljZSBpcyBiZWluZyBw cm9iZWQsIGEgKnJ0ZV9ldmVudF9kZXYqIHN0cnVjdHVyZSBhbmQNCj4gICsgKiBhIG5ldyBkZXZp Y2UgaWRlbnRpZmllciBhcmUgYWxsb2NhdGVkIGZvciB0aGF0IGRldmljZS4gVGhlbiwgdGhlDQo+ ICArICogZXZlbnRfZGV2X2luaXQoKSBmdW5jdGlvbiBzdXBwbGllZCBieSB0aGUgRXZlbnQgZHJp dmVyIG1hdGNoaW5nIHRoZSBwcm9iZWQNCj4gICsgKiBkZXZpY2UgaXMgaW52b2tlZCB0byBwcm9w ZXJseSBpbml0aWFsaXplIHRoZSBkZXZpY2UuDQo+ICArICoNCj4gICsgKiBUaGUgcm9sZSBvZiB0 aGUgZGV2aWNlIGluaXQgZnVuY3Rpb24gY29uc2lzdHMgb2YgcmVzZXR0aW5nIHRoZSBoYXJkd2Fy ZSBvcg0KPiAgKyAqIHNvZnR3YXJlIGV2ZW50IGRyaXZlciBpbXBsZW1lbnRhdGlvbnMuDQo+ICAr ICoNCj4gICsgKiBJZiB0aGUgZGV2aWNlIGluaXQgb3BlcmF0aW9uIGlzIHN1Y2Nlc3NmdWwsIHRo ZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuDQo+ICArICogdGhlIGRldmljZSBpZGVudGlmaWVyIGFz c2lnbmVkIHRvIHRoZSBuZXcgZGV2aWNlIGFuZCBpdHMgYXNzb2NpYXRlZA0KPiAgKyAqICpydGVf ZXZlbnRfZGV2KiBzdHJ1Y3R1cmUgaXMgZWZmZWN0aXZlbHkgcmVnaXN0ZXJlZC4NCj4gICsgKiBP dGhlcndpc2UsIGJvdGggdGhlICpydGVfZXZlbnRfZGV2KiBzdHJ1Y3R1cmUgYW5kIHRoZSBkZXZp Y2UgaWRlbnRpZmllciBhcmUNCj4gICsgKiBmcmVlZC4NCj4gICsgKg0KPiAgKyAqIFRoZSBmdW5j dGlvbnMgZXhwb3J0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIEV2ZW50IEFQSSB0byBzZXR1cCBhIGRl dmljZQ0KPiAgKyAqIGRlc2lnbmF0ZWQgYnkgaXRzIGRldmljZSBpZGVudGlmaWVyIG11c3QgYmUg aW52b2tlZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOg0KPiAgKyAqICAgICAtIHJ0ZV9ldmVudF9k ZXZfY29uZmlndXJlKCkNCj4gICsgKiAgICAgLSBydGVfZXZlbnRfcXVldWVfc2V0dXAoKQ0KPiAg KyAqICAgICAtIHJ0ZV9ldmVudF9wb3J0X3NldHVwKCkNCj4gICsgKiAgICAgLSBydGVfZXZlbnRf cG9ydF9saW5rKCkNCj4gICsgKiAgICAgLSBydGVfZXZlbnRfZGV2X3N0YXJ0KCkNCj4gICsgKg0K PiAgKyAqIFRoZW4sIHRoZSBhcHBsaWNhdGlvbiBjYW4gaW52b2tlLCBpbiBhbnkgb3JkZXIsIHRo ZSBmdW5jdGlvbnMNCj4gICsgKiBleHBvcnRlZCBieSB0aGUgRXZlbnQgQVBJIHRvIHNjaGVkdWxl IGV2ZW50cywgZGVxdWV1ZSBldmVudHMsIGVucXVldWUNCj4gIGV2ZW50cywNCj4gICsgKiBjaGFu Z2UgZXZlbnQgcXVldWUocykgdG8gZXZlbnQgcG9ydCBbdW5dbGluayBlc3RhYmxpc2htZW50IGFu ZCBzbyBvbi4NCj4gICsgKg0KPiAgKyAqIEFwcGxpY2F0aW9uIG1heSB1c2UgcnRlX2V2ZW50X1tx dWV1ZS9wb3J0XV9kZWZhdWx0X2NvbmZfZ2V0KCkgdG8gZ2V0IHRoZQ0KPiAgKyAqIGRlZmF1bHQg Y29uZmlndXJhdGlvbiB0byBzZXQgdXAgYW4gZXZlbnQgcXVldWUgb3IgZXZlbnQgcG9ydCBieQ0K PiAgKyAqIG92ZXJyaWRpbmcgZmV3IGRlZmF1bHQgdmFsdWVzLg0KPiAgKyAqDQo+ICArICogSWYg dGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbiAoaS5lLiBj YWxsDQo+ICArICogcnRlX2V2ZW50X2Rldl9jb25maWd1cmUoKSwgcnRlX2V2ZW50X3F1ZXVlX3Nl dHVwKCksIG9yDQo+ICArICogcnRlX2V2ZW50X3BvcnRfc2V0dXAoKSksIGl0IG11c3QgY2FsbCBy dGVfZXZlbnRfZGV2X3N0b3AoKSBmaXJzdCB0byBzdG9wIHRoZQ0KPiAgKyAqIGRldmljZSBhbmQg dGhlbiBkbyB0aGUgcmVjb25maWd1cmF0aW9uIGJlZm9yZSBjYWxsaW5nIHJ0ZV9ldmVudF9kZXZf c3RhcnQoKQ0KPiAgKyAqIGFnYWluLiBUaGUgc2NoZWR1bGUsIGVucXVldWUgYW5kIGRlcXVldWUg ZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgaW52b2tlZA0KPiAgKyAqIHdoZW4gdGhlIGRldmljZSBp cyBzdG9wcGVkLg0KPiAgKyAqDQo+ICArICogRmluYWxseSwgYW4gYXBwbGljYXRpb24gY2FuIGNs b3NlIGFuIEV2ZW50IGRldmljZSBieSBpbnZva2luZyB0aGUNCj4gICsgKiBydGVfZXZlbnRfZGV2 X2Nsb3NlKCkgZnVuY3Rpb24uDQo+ICArICoNCj4gICsgKiBFYWNoIGZ1bmN0aW9uIG9mIHRoZSBh cHBsaWNhdGlvbiBFdmVudCBBUEkgaW52b2tlcyBhIHNwZWNpZmljIGZ1bmN0aW9uDQo+ICArICog b2YgdGhlIFBNRCB0aGF0IGNvbnRyb2xzIHRoZSB0YXJnZXQgZGV2aWNlIGRlc2lnbmF0ZWQgYnkg aXRzIGRldmljZQ0KPiAgKyAqIGlkZW50aWZpZXIuDQo+ICArICoNCj4gICsgKiBGb3IgdGhpcyBw dXJwb3NlLCBhbGwgZGV2aWNlLXNwZWNpZmljIGZ1bmN0aW9ucyBvZiBhbiBFdmVudCBkcml2ZXIg YXJlDQo+ICArICogc3VwcGxpZWQgdGhyb3VnaCBhIHNldCBvZiBwb2ludGVycyBjb250YWluZWQg aW4gYSBnZW5lcmljIHN0cnVjdHVyZSBvZiB0eXBlDQo+ICArICogKmV2ZW50X2Rldl9vcHMqLg0K PiAgKyAqIFRoZSBhZGRyZXNzIG9mIHRoZSAqZXZlbnRfZGV2X29wcyogc3RydWN0dXJlIGlzIHN0 b3JlZCBpbiB0aGUNCj4gICpydGVfZXZlbnRfZGV2Kg0KPiAgKyAqIHN0cnVjdHVyZSBieSB0aGUg ZGV2aWNlIGluaXQgZnVuY3Rpb24gb2YgdGhlIEV2ZW50IGRyaXZlciwgd2hpY2ggaXMNCj4gICsg KiBpbnZva2VkIGR1cmluZyB0aGUgUENJL1NvQyBkZXZpY2UgcHJvYmluZyBwaGFzZSwgYXMgZXhw bGFpbmVkIGVhcmxpZXIuDQo+ICArICoNCj4gICsgKiBJbiBvdGhlciB3b3JkcywgZWFjaCBmdW5j dGlvbiBvZiB0aGUgRXZlbnQgQVBJIHNpbXBseSByZXRyaWV2ZXMgdGhlDQo+ICArICogKnJ0ZV9l dmVudF9kZXYqIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZSBpZGVudGlmaWVy IGFuZA0KPiAgKyAqIHBlcmZvcm1zIGFuIGluZGlyZWN0IGludm9jYXRpb24gb2YgdGhlIGNvcnJl c3BvbmRpbmcgZHJpdmVyIGZ1bmN0aW9uDQo+ICArICogc3VwcGxpZWQgaW4gdGhlICpldmVudF9k ZXZfb3BzKiBzdHJ1Y3R1cmUgb2YgdGhlICpydGVfZXZlbnRfZGV2Kg0KPiAgc3RydWN0dXJlLg0K PiAgKyAqDQo+ICArICogRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHRoZSBhZGRyZXNzIG9mIHRo ZSBmYXN0LXBhdGggZnVuY3Rpb25zIG9mIHRoZQ0KPiAgKyAqIEV2ZW50IGRyaXZlciBpcyBub3Qg Y29udGFpbmVkIGluIHRoZSAqZXZlbnRfZGV2X29wcyogc3RydWN0dXJlLg0KPiAgKyAqIEluc3Rl YWQsIHRoZXkgYXJlIGRpcmVjdGx5IHN0b3JlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSAqcnRl X2V2ZW50X2RldioNCj4gICsgKiBzdHJ1Y3R1cmUgdG8gYXZvaWQgYW4gZXh0cmEgaW5kaXJlY3Qg bWVtb3J5IGFjY2VzcyBkdXJpbmcgdGhlaXIgaW52b2NhdGlvbi4NCj4gICsgKg0KPiAgKyAqIFJU RSBldmVudCBkZXZpY2UgZHJpdmVycyBkbyBub3QgdXNlIGludGVycnVwdHMgZm9yIGVucXVldWUg b3IgZGVxdWV1ZQ0KPiAgKyAqIG9wZXJhdGlvbi4gSW5zdGVhZCwgRXZlbnQgZHJpdmVycyBleHBv cnQgUG9sbC1Nb2RlIGVucXVldWUgYW5kIGRlcXVldWUNCj4gICsgKiBmdW5jdGlvbnMgdG8gYXBw bGljYXRpb25zLg0KPiAgKyAqDQo+ICArICogQW4gZXZlbnQgZHJpdmVuIGJhc2VkIGFwcGxpY2F0 aW9uIGhhcyBmb2xsb3dpbmcgdHlwaWNhbCB3b3JrZmxvdyBvbg0KPiAgZmFzdHBhdGg6DQo+ICAr ICogXGNvZGV7LmN9DQo+ICArICogIHdoaWxlICgxKSB7DQo+ICArICoNCj4gICsgKiAgICAgICAg ICBydGVfZXZlbnRfc2NoZWR1bGUoZGV2X2lkKTsNCj4gICsgKg0KPiAgKyAqICAgICAgICAgIHJ0 ZV9ldmVudF9kZXF1ZXVlKC4uLik7DQo+ICArICoNCj4gICsgKiAgICAgICAgICAoZXZlbnQgcHJv Y2Vzc2luZykNCj4gICsgKg0KPiAgKyAqICAgICAgICAgIHJ0ZV9ldmVudF9lbnF1ZXVlKC4uLik7 DQo+ICArICogIH0NCj4gICsgKiBcZW5kY29kZQ0KPiAgKyAqDQo+ICArICogVGhlIGV2ZW50cyBh cmUgaW5qZWN0ZWQgdG8gZXZlbnQgZGV2aWNlIHRocm91Z2ggKmVucXVldWUqIG9wZXJhdGlvbiBi eQ0KPiAgKyAqIGV2ZW50IHByb2R1Y2VycyBpbiB0aGUgc3lzdGVtLiBUaGUgdHlwaWNhbCBldmVu dCBwcm9kdWNlcnMgYXJlIGV0aGRldg0KPiAgKyAqIHN1YnN5c3RlbSBmb3IgZ2VuZXJhdGluZyBw YWNrZXQgZXZlbnRzLCBDUFUoU1cpIGZvciBnZW5lcmF0aW5nIGV2ZW50cw0KPiAgYmFzZWQNCj4g ICsgKiBvbiBkaWZmZXJlbnQgc3RhZ2VzIG9mIGFwcGxpY2F0aW9uIHByb2Nlc3NpbmcsIGNyeXB0 b2RldiBmb3IgZ2VuZXJhdGluZw0KPiAgKyAqIGNyeXB0byB3b3JrIGNvbXBsZXRpb24gbm90aWZp Y2F0aW9uIGV0Yw0KPiAgKyAqDQo+ICArICogVGhlICpkZXF1ZXVlKiBvcGVyYXRpb24gZ2V0cyBv bmUgb3IgbW9yZSBldmVudHMgZnJvbSB0aGUgZXZlbnQgcG9ydHMuDQo+ICArICogVGhlIGFwcGxp Y2F0aW9uIHByb2Nlc3MgdGhlIGV2ZW50cyBhbmQgc2VuZCB0byBkb3duc3RyZWFtIGV2ZW50IHF1 ZXVlDQo+ICB0aHJvdWdoDQo+ICArICogcnRlX2V2ZW50X2VucXVldWVfYnVyc3QoKSBpZiBpdCBp cyBhbiBpbnRlcm1lZGlhdGUgc3RhZ2Ugb2YgZXZlbnQNCj4gIHByb2Nlc3NpbmcsDQo+ICArICog b24gdGhlIGZpbmFsIHN0YWdlLCB0aGUgYXBwbGljYXRpb24gbWF5IHNlbmQgdG8gZGlmZmVyZW50 IHN1YnN5c3RlbSBsaWtlDQo+ICArICogZXRoZGV2IHRvIHNlbmQgdGhlIHBhY2tldC9ldmVudCBv biB0aGUgd2lyZSB1c2luZyBldGhkZXYNCj4gICsgKiBydGVfZXRoX3R4X2J1cnN0KCkgQVBJLg0K PiAgKyAqDQo+ICArICogVGhlIHBvaW50IGF0IHdoaWNoIGV2ZW50cyBhcmUgc2NoZWR1bGVkIHRv IHBvcnRzIGRlcGVuZHMgb24gdGhlIGRldmljZS4NCj4gICsgKiBGb3IgaGFyZHdhcmUgZGV2aWNl cywgc2NoZWR1bGluZyBvY2N1cnMgYXN5bmNocm9ub3VzbHkgd2l0aG91dCBhbnkNCj4gIHNvZnR3 YXJlDQo+ICArICogaW50ZXJ2ZW50aW9uLiBTb2Z0d2FyZSBzY2hlZHVsZXJzIGNhbiBlaXRoZXIg YmUgZGlzdHJpYnV0ZWQNCj4gICsgKiAoZWFjaCB3b3JrZXIgdGhyZWFkIHNjaGVkdWxlcyBldmVu dHMgdG8gaXRzIG93biBwb3J0KSBvciBjZW50cmFsaXplZA0KPiAgKyAqIChhIGRlZGljYXRlZCB0 aHJlYWQgc2NoZWR1bGVzIHRvIGFsbCBwb3J0cykuIERpc3RyaWJ1dGVkIHNvZnR3YXJlIHNjaGVk dWxlcnMNCj4gICsgKiBwZXJmb3JtIHRoZSBzY2hlZHVsaW5nIGluIHJ0ZV9ldmVudF9kZXF1ZXVl X2J1cnN0KCksIHdoZXJlYXMgY2VudHJhbGl6ZWQNCj4gICsgKiBzY2hlZHVsZXIgbG9naWMgaXMg bG9jYXRlZCBpbiBydGVfZXZlbnRfc2NoZWR1bGUoKS4NCj4gICsgKiBUaGUgUlRFX0VWRU5UX0RF Vl9DQVBfRElTVFJJQlVURURfU0NIRUQgY2FwYWJpbGl0eSBmbGFnIGlzIG5vdCBzZXQNCj4gICsg KiBpbmRpY2F0ZXMgdGhlIGRldmljZSBpcyBjZW50cmFsaXplZCBhbmQgdGh1cyBuZWVkcyBhIGRl ZGljYXRlZCBzY2hlZHVsaW5nDQo+ICArICogdGhyZWFkIHRoYXQgcmVwZWF0ZWRseSBjYWxscyBy dGVfZXZlbnRfc2NoZWR1bGUoKS4NCj4gICsgKg0KPiAgKyAqLw0KPiAgKw0KPiAgKyNpZmRlZiBf X2NwbHVzcGx1cw0KPiAgK2V4dGVybiAiQyIgew0KPiAgKyNlbmRpZg0KPiAgKw0KPiAgKyNpbmNs dWRlIDxydGVfY29tbW9uLmg+DQo+ICArI2luY2x1ZGUgPHJ0ZV9wY2kuaD4NCj4gICsjaW5jbHVk ZSA8cnRlX21idWYuaD4NCj4gICsNCj4gICsvKiBFdmVudCBkZXZpY2UgY2FwYWJpbGl0eSBiaXRt YXAgZmxhZ3MgKi8NCj4gICsjZGVmaW5lIFJURV9FVkVOVF9ERVZfQ0FQX1FVRVVFX1FPUyAgICAg ICAgICAgKDFVTEwgPDwgMCkNCj4gICsvKio8IEV2ZW50IHNjaGVkdWxpbmcgcHJpb3JpdGl6YXRp b24gaXMgYmFzZWQgb24gdGhlIHByaW9yaXR5IGFzc29jaWF0ZWQgd2l0aA0KPiAgKyAqICBlYWNo IGV2ZW50IHF1ZXVlLg0KPiAgKyAqDQo+ICArICogIEBzZWUgcnRlX2V2ZW50X3F1ZXVlX3NldHVw KCkNCj4gICsgKi8NCj4gICsjZGVmaW5lIFJURV9FVkVOVF9ERVZfQ0FQX0VWRU5UX1FPUyAgICAg ICAgICAgKDFVTEwgPDwgMSkNCj4gICsvKio8IEV2ZW50IHNjaGVkdWxpbmcgcHJpb3JpdGl6YXRp b24gaXMgYmFzZWQgb24gdGhlIHByaW9yaXR5IGFzc29jaWF0ZWQgd2l0aA0KPiAgKyAqICBlYWNo IGV2ZW50LiBQcmlvcml0eSBvZiBlYWNoIGV2ZW50IGlzIHN1cHBsaWVkIGluICpydGVfZXZlbnQq IHN0cnVjdHVyZQ0KPiAgKyAqICBvbiBlYWNoIGVucXVldWUgb3BlcmF0aW9uLg0KPiAgKyAqDQo+ ICArICogIEBzZWUgcnRlX2V2ZW50X2VucXVldWVfYnVyc3QoKQ0KPiAgKyAqLw0KPiAgKyNkZWZp bmUgUlRFX0VWRU5UX0RFVl9DQVBfRElTVFJJQlVURURfU0NIRUQgICAoMVVMTCA8PCAyKQ0KPiAg Ky8qKjwgRXZlbnQgZGV2aWNlIG9wZXJhdGVzIGluIGRpc3RyaWJ1dGVkIHNjaGVkdWxpbmcgbW9k ZS4NCj4gICsgKiBJbiBkaXN0cmlidXRlZCBzY2hlZHVsaW5nIG1vZGUsIGV2ZW50IHNjaGVkdWxp bmcgaGFwcGVucyBpbiBIVyBvcg0KPiAgKyAqIHJ0ZV9ldmVudF9kZXF1ZXVlX2J1cnN0KCkgb3Ig dGhlIGNvbWJpbmF0aW9uIG9mIHRoZXNlIHR3by4NCj4gICsgKiBJZiB0aGUgZmxhZyBpcyBub3Qg c2V0IHRoZW4gZXZlbnRkZXYgaXMgY2VudHJhbGl6ZWQgYW5kIHRodXMgbmVlZHMgYQ0KPiAgKyAq IGRlZGljYXRlZCBzY2hlZHVsaW5nIHRocmVhZCB0aGF0IHJlcGVhdGVkbHkgY2FsbHMgcnRlX2V2 ZW50X3NjaGVkdWxlKCkuDQo+ICArICoNCj4gICsgKiBAc2VlIHJ0ZV9ldmVudF9zY2hlZHVsZSgp LCBydGVfZXZlbnRfZGVxdWV1ZV9idXJzdCgpDQo+ICArICovDQo+ICArDQo+ICArLyogRXZlbnQg ZGV2aWNlIHByaW9yaXR5IGxldmVscyAqLw0KPiAgKyNkZWZpbmUgUlRFX0VWRU5UX0RFVl9QUklP UklUWV9ISUdIRVNUICAgMA0KPiAgKy8qKjwgSGlnaGVzdCBwcmlvcml0eSBleHByZXNzZWQgYWNy b3NzIGV2ZW50ZGV2IHN1YnN5c3RlbQ0KPiAgKyAqIEBzZWUgcnRlX2V2ZW50X3F1ZXVlX3NldHVw KCksIHJ0ZV9ldmVudF9lbnF1ZXVlX2J1cnN0KCkNCj4gICsgKiBAc2VlIHJ0ZV9ldmVudF9wb3J0 X2xpbmsoKQ0KPiAgKyAqLw0KPiAgKyNkZWZpbmUgUlRFX0VWRU5UX0RFVl9QUklPUklUWV9OT1JN QUwgICAgMTI4DQo+ICArLyoqPCBOb3JtYWwgcHJpb3JpdHkgZXhwcmVzc2VkIGFjcm9zcyBldmVu dGRldiBzdWJzeXN0ZW0NCj4gICsgKiBAc2VlIHJ0ZV9ldmVudF9xdWV1ZV9zZXR1cCgpLCBydGVf ZXZlbnRfZW5xdWV1ZV9idXJzdCgpDQo+ICArICogQHNlZSBydGVfZXZlbnRfcG9ydF9saW5rKCkN Cj4gICsgKi8NCj4gICsjZGVmaW5lIFJURV9FVkVOVF9ERVZfUFJJT1JJVFlfTE9XRVNUICAgIDI1 NQ0KPiAgKy8qKjwgTG93ZXN0IHByaW9yaXR5IGV4cHJlc3NlZCBhY3Jvc3MgZXZlbnRkZXYgc3Vi c3lzdGVtDQo+ICArICogQHNlZSBydGVfZXZlbnRfcXVldWVfc2V0dXAoKSwgcnRlX2V2ZW50X2Vu cXVldWVfYnVyc3QoKQ0KPiAgKyAqIEBzZWUgcnRlX2V2ZW50X3BvcnRfbGluaygpDQo+ICArICov DQo+ICArDQo+ICArLyoqDQo+ICArICogR2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgZXZlbnQgZGV2 aWNlcyB0aGF0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkNCj4gICsgKiBpbml0aWFsaXNlZC4NCj4g ICsgKg0KPiAgKyAqIEByZXR1cm4NCj4gICsgKiAgIFRoZSB0b3RhbCBudW1iZXIgb2YgdXNhYmxl IGV2ZW50IGRldmljZXMuDQo+ICArICovDQo+ICArdWludDhfdA0KPiAgK3J0ZV9ldmVudF9kZXZf Y291bnQodm9pZCk7DQo+ICArDQo+ICArLyoqDQo+ICArICogR2V0IHRoZSBkZXZpY2UgaWRlbnRp ZmllciBmb3IgdGhlIG5hbWVkIGV2ZW50IGRldmljZS4NCj4gICsgKg0KPiAgKyAqIEBwYXJhbSBu YW1lDQo+ICArICogICBFdmVudCBkZXZpY2UgbmFtZSB0byBzZWxlY3QgdGhlIGV2ZW50IGRldmlj ZSBpZGVudGlmaWVyLg0KPiAgKyAqDQo+ICArICogQHJldHVybg0KPiAgKyAqICAgUmV0dXJucyBl dmVudCBkZXZpY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzLg0KPiAgKyAqICAgLSA8MDogRmFpbHVy ZSB0byBmaW5kIG5hbWVkIGV2ZW50IGRldmljZS4NCj4gICsgKi8NCj4gICtpbnQNCj4gICtydGVf ZXZlbnRfZGV2X2dldF9kZXZfaWQoY29uc3QgY2hhciAqbmFtZSk7DQo+ICArDQo+ICArLyoqDQo+ ICArICogUmV0dXJuIHRoZSBOVU1BIHNvY2tldCB0byB3aGljaCBhIGRldmljZSBpcyBjb25uZWN0 ZWQuDQo+ICArICoNCj4gICsgKiBAcGFyYW0gZGV2X2lkDQo+ICArICogICBUaGUgaWRlbnRpZmll ciBvZiB0aGUgZGV2aWNlLg0KPiAgKyAqIEByZXR1cm4NCj4gICsgKiAgIFRoZSBOVU1BIHNvY2tl dCBpZCB0byB3aGljaCB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCBvcg0KPiAgKyAqICAgYSBkZWZh dWx0IG9mIHplcm8gaWYgdGhlIHNvY2tldCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4NCj4gICsg KiAgIC0oLUVJTlZBTCkgIGRldl9pZCB2YWx1ZSBpcyBvdXQgb2YgcmFuZ2UuDQo+ICArICovDQo+ ICAraW50DQo+ICArcnRlX2V2ZW50X2Rldl9zb2NrZXRfaWQodWludDhfdCBkZXZfaWQpOw0KPiAg Kw0KPiAgKy8qKg0KPiAgKyAqIEV2ZW50IGRldmljZSBpbmZvcm1hdGlvbg0KPiAgKyAqLw0KPiAg K3N0cnVjdCBydGVfZXZlbnRfZGV2X2luZm8gew0KPiAgKyAgICBjb25zdCBjaGFyICpkcml2ZXJf bmFtZTsgICAgICAgIC8qKjwgRXZlbnQgZHJpdmVyIG5hbWUgKi8NCj4gICsgICAgc3RydWN0IHJ0 ZV9wY2lfZGV2aWNlICpwY2lfZGV2OyAvKio8IFBDSSBpbmZvcm1hdGlvbiAqLw0KPiAgKyAgICB1 aW50MzJfdCBtaW5fZGVxdWV1ZV90aW1lb3V0X25zOw0KPiAgKyAgICAvKio8IE1pbmltdW0gc3Vw cG9ydGVkIGdsb2JhbCBkZXF1ZXVlIHRpbWVvdXQobnMpIGJ5IHRoaXMgZGV2aWNlICovDQo+ICAr ICAgIHVpbnQzMl90IG1heF9kZXF1ZXVlX3RpbWVvdXRfbnM7DQo+ICArICAgIC8qKjwgTWF4aW11 bSBzdXBwb3J0ZWQgZ2xvYmFsIGRlcXVldWUgdGltZW91dChucykgYnkgdGhpcyBkZXZpY2UgKi8N Cj4gICsgICAgdWludDMyX3QgZGVxdWV1ZV90aW1lb3V0X25zOw0KPiAgKyAgICAvKio8IENvbmZp Z3VyZWQgZ2xvYmFsIGRlcXVldWUgdGltZW91dChucykgZm9yIHRoaXMgZGV2aWNlICovDQo+ICAr ICAgIHVpbnQ4X3QgbWF4X2V2ZW50X3F1ZXVlczsNCj4gICsgICAgLyoqPCBNYXhpbXVtIGV2ZW50 X3F1ZXVlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UgKi8NCj4gICsgICAgdWludDMyX3QgbWF4 X2V2ZW50X3F1ZXVlX2Zsb3dzOw0KPiAgKyAgICAvKio8IE1heGltdW0gc3VwcG9ydGVkIGZsb3dz IGluIGFuIGV2ZW50IHF1ZXVlIGJ5IHRoaXMgZGV2aWNlKi8NCj4gICsgICAgdWludDhfdCBtYXhf ZXZlbnRfcXVldWVfcHJpb3JpdHlfbGV2ZWxzOw0KPiAgKyAgICAvKio8IE1heGltdW0gbnVtYmVy IG9mIGV2ZW50IHF1ZXVlIHByaW9yaXR5IGxldmVscyBieSB0aGlzIGRldmljZS4NCj4gICsgICAg ICogVmFsaWQgd2hlbiB0aGUgZGV2aWNlIGhhcyBSVEVfRVZFTlRfREVWX0NBUF9RVUVVRV9RT1MN Cj4gIGNhcGFiaWxpdHkNCj4gICsgICAgICovDQo+ICArICAgIHVpbnQ4X3QgbWF4X2V2ZW50X3By aW9yaXR5X2xldmVsczsNCj4gICsgICAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBldmVudCBwcmlv cml0eSBsZXZlbHMgYnkgdGhpcyBkZXZpY2UuDQo+ICArICAgICAqIFZhbGlkIHdoZW4gdGhlIGRl dmljZSBoYXMgUlRFX0VWRU5UX0RFVl9DQVBfRVZFTlRfUU9TDQo+ICBjYXBhYmlsaXR5DQo+ICAr ICAgICAqLw0KPiAgKyAgICB1aW50OF90IG1heF9ldmVudF9wb3J0czsNCj4gICsgICAgLyoqPCBN YXhpbXVtIG51bWJlciBvZiBldmVudCBwb3J0cyBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UgKi8N Cj4gICsgICAgdWludDhfdCBtYXhfZXZlbnRfcG9ydF9kZXF1ZXVlX2RlcHRoOw0KPiAgKyAgICAv Kio8IE1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyBjYW4gYmUgZGVxdWV1ZWQgYXQgYSB0aW1lIGZy b20gYW4NCj4gICsgICAgICogZXZlbnQgcG9ydCBieSB0aGlzIGRldmljZS4NCj4gICsgICAgICog QSBkZXZpY2UgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IGJ1bGsgZGVxdWV1ZSB3aWxsIHNldCB0aGlz IGFzIDEuDQo+ICArICAgICAqLw0KPiAgKyAgICB1aW50MzJfdCBtYXhfZXZlbnRfcG9ydF9lbnF1 ZXVlX2RlcHRoOw0KPiAgKyAgICAvKio8IE1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyBjYW4gYmUg ZW5xdWV1ZWQgYXQgYSB0aW1lIGZyb20gYW4NCj4gICsgICAgICogZXZlbnQgcG9ydCBieSB0aGlz IGRldmljZS4NCj4gICsgICAgICogQSBkZXZpY2UgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IGJ1bGsg ZW5xdWV1ZSB3aWxsIHNldCB0aGlzIGFzIDEuDQo+ICArICAgICAqLw0KPiAgKyAgICBpbnQzMl90 IG1heF9udW1fZXZlbnRzOw0KPiAgKyAgICAvKio8IEEgKmNsb3NlZCBzeXN0ZW0qIGV2ZW50IGRl diBoYXMgYSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGV2ZW50cw0KPiAgaXQNCj4gICsgICAgICog Y2FuIG1hbmFnZSBhdCBhIHRpbWUuIEFuICpvcGVuIHN5c3RlbSogZXZlbnQgZGV2IGRvZXMgbm90 IGhhdmUgYQ0KPiAgKyAgICAgKiBsaW1pdCBhbmQgd2lsbCBzcGVjaWZ5IHRoaXMgYXMgLTEuDQo+ ICArICAgICAqLw0KPiAgKyAgICB1aW50MzJfdCBldmVudF9kZXZfY2FwOw0KPiAgKyAgICAvKio8 IEV2ZW50IGRldmljZSBjYXBhYmlsaXRpZXMoUlRFX0VWRU5UX0RFVl9DQVBfKSovDQo+ICArfTsN Cj4gICsNCj4gICsvKioNCj4gICsgKiBSZXRyaWV2ZSB0aGUgY29udGV4dHVhbCBpbmZvcm1hdGlv biBvZiBhbiBldmVudCBkZXZpY2UuDQo+ICArICoNCj4gICsgKiBAcGFyYW0gZGV2X2lkDQo+ICAr ICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGV2aWNlLg0KPiAgKyAqDQo+ICArICogQHBhcmFt W291dF0gZGV2X2luZm8NCj4gICsgKiAgIEEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSBvZiB0eXBl ICpydGVfZXZlbnRfZGV2X2luZm8qIHRvIGJlIGZpbGxlZCB3aXRoIHRoZQ0KPiAgKyAqICAgY29u dGV4dHVhbCBpbmZvcm1hdGlvbiBvZiB0aGUgZGV2aWNlLg0KPiAgKyAqDQo+ICArICogQHJldHVy bg0KPiAgKyAqICAgLSAwOiBTdWNjZXNzLCBkcml2ZXIgdXBkYXRlcyB0aGUgY29udGV4dHVhbCBp bmZvcm1hdGlvbiBvZiB0aGUgZXZlbnQgZGV2aWNlDQo+ICArICogICAtIDwwOiBFcnJvciBjb2Rl IHJldHVybmVkIGJ5IHRoZSBkcml2ZXIgaW5mbyBnZXQgZnVuY3Rpb24uDQo+ICArICoNCj4gICsg Ki8NCj4gICtpbnQNCj4gICtydGVfZXZlbnRfZGV2X2luZm9fZ2V0KHVpbnQ4X3QgZGV2X2lkLCBz dHJ1Y3QgcnRlX2V2ZW50X2Rldl9pbmZvDQo+ICAqZGV2X2luZm8pOw0KPiAgKw0KPiAgKy8qIEV2 ZW50IGRldmljZSBjb25maWd1cmF0aW9uIGJpdG1hcCBmbGFncyAqLw0KPiAgKyNkZWZpbmUgUlRF X0VWRU5UX0RFVl9DRkdfUEVSX0RFUVVFVUVfVElNRU9VVCAoMVVMTCA8PCAwKQ0KPiAgKy8qKjwg T3ZlcnJpZGUgdGhlIGdsb2JhbCAqZGVxdWV1ZV90aW1lb3V0X25zKiBhbmQgdXNlIHBlciBkZXF1 ZXVlDQo+ICB0aW1lb3V0IGluIG5zLg0KPiAgKyAqICBAc2VlIHJ0ZV9ldmVudF9kZXF1ZXVlX3Rp bWVvdXRfdGlja3MoKSwgcnRlX2V2ZW50X2RlcXVldWVfYnVyc3QoKQ0KPiAgKyAqLw0KPiAgKw0K PiAgKy8qKiBFdmVudCBkZXZpY2UgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8NCj4gICtzdHJ1 Y3QgcnRlX2V2ZW50X2Rldl9jb25maWcgew0KPiAgKyAgICB1aW50MzJfdCBkZXF1ZXVlX3RpbWVv dXRfbnM7DQo+ICArICAgIC8qKjwgcnRlX2V2ZW50X2RlcXVldWVfYnVyc3QoKSB0aW1lb3V0IG9u IHRoaXMgZGV2aWNlLg0KPiAgKyAgICAgKiBUaGlzIHZhbHVlIHNob3VsZCBiZSBpbiB0aGUgcmFu Z2Ugb2YgKm1pbl9kZXF1ZXVlX3RpbWVvdXRfbnMqIGFuZA0KPiAgKyAgICAgKiAqbWF4X2RlcXVl dWVfdGltZW91dF9ucyogd2hpY2ggcHJldmlvdXNseSBwcm92aWRlZCBpbg0KPiAgKyAgICAgKiBy dGVfZXZlbnRfZGV2X2luZm9fZ2V0KCkNCj4gICsgICAgICogQHNlZSBSVEVfRVZFTlRfREVWX0NG R19QRVJfREVRVUVVRV9USU1FT1VUDQo+ICArICAgICAqLw0KPiAgKyAgICBpbnQzMl90IG5iX2V2 ZW50c19saW1pdDsNCj4gICsgICAgLyoqPCBBcHBsaWVzIHRvICpjbG9zZWQgc3lzdGVtKiBldmVu dCBkZXYgb25seS4gVGhpcyBmaWVsZCBpbmRpY2F0ZXMgYQ0KPiAgKyAgICAgKiBsaW1pdCB0byBl dGhkZXYtbGlrZSBkZXZpY2VzIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZXZlbnRzIGluamVjdGVk DQo+ICArICAgICAqIGludG8gdGhlIHN5c3RlbSB0byBub3Qgb3ZlcndoZWxtIGNvcmUtdG8tY29y ZSBldmVudHMuDQo+ICArICAgICAqIFRoaXMgdmFsdWUgY2Fubm90IGV4Y2VlZCB0aGUgKm1heF9u dW1fZXZlbnRzKiB3aGljaCBwcmV2aW91c2x5DQo+ICArICAgICAqIHByb3ZpZGVkIGluIHJ0ZV9l dmVudF9kZXZfaW5mb19nZXQoKQ0KPiAgKyAgICAgKi8NCj4gICsgICAgdWludDhfdCBuYl9ldmVu dF9xdWV1ZXM7DQo+ICArICAgIC8qKjwgTnVtYmVyIG9mIGV2ZW50IHF1ZXVlcyB0byBjb25maWd1 cmUgb24gdGhpcyBkZXZpY2UuDQo+ICArICAgICAqIFRoaXMgdmFsdWUgY2Fubm90IGV4Y2VlZCB0 aGUgKm1heF9ldmVudF9xdWV1ZXMqIHdoaWNoIHByZXZpb3VzbHkNCj4gICsgICAgICogcHJvdmlk ZWQgaW4gcnRlX2V2ZW50X2Rldl9pbmZvX2dldCgpDQo+ICArICAgICAqLw0KPiAgKyAgICB1aW50 OF90IG5iX2V2ZW50X3BvcnRzOw0KPiAgKyAgICAvKio8IE51bWJlciBvZiBldmVudCBwb3J0cyB0 byBjb25maWd1cmUgb24gdGhpcyBkZXZpY2UuDQo+ICArICAgICAqIFRoaXMgdmFsdWUgY2Fubm90 IGV4Y2VlZCB0aGUgKm1heF9ldmVudF9wb3J0cyogd2hpY2ggcHJldmlvdXNseQ0KPiAgKyAgICAg KiBwcm92aWRlZCBpbiBydGVfZXZlbnRfZGV2X2luZm9fZ2V0KCkNCj4gICsgICAgICovDQo+ICAr ICAgIHVpbnQzMl90IG5iX2V2ZW50X3F1ZXVlX2Zsb3dzOw0KPiAgKyAgICAvKio8IE51bWJlciBv ZiBmbG93cyBmb3IgYW55IGV2ZW50IHF1ZXVlIG9uIHRoaXMgZGV2aWNlLg0KPiAgKyAgICAgKiBU aGlzIHZhbHVlIGNhbm5vdCBleGNlZWQgdGhlICptYXhfZXZlbnRfcXVldWVfZmxvd3MqIHdoaWNo DQo+ICBwcmV2aW91c2x5DQo+ICArICAgICAqIHByb3ZpZGVkIGluIHJ0ZV9ldmVudF9kZXZfaW5m b19nZXQoKQ0KPiAgKyAgICAgKi8NCj4gICsgICAgdWludDhfdCBuYl9ldmVudF9wb3J0X2RlcXVl dWVfZGVwdGg7DQo+ICArICAgIC8qKjwgTWF4aW11bSBudW1iZXIgb2YgZXZlbnRzIGNhbiBiZSBk ZXF1ZXVlZCBhdCBhIHRpbWUgZnJvbSBhbg0KPiAgKyAgICAgKiBldmVudCBwb3J0IGJ5IHRoaXMg ZGV2aWNlLg0KPiAgKyAgICAgKiBUaGlzIHZhbHVlIGNhbm5vdCBleGNlZWQgdGhlICptYXhfZXZl bnRfcG9ydF9kZXF1ZXVlX2RlcHRoKg0KPiAgKyAgICAgKiB3aGljaCBwcmV2aW91c2x5IHByb3Zp ZGVkIGluIHJ0ZV9ldmVudF9kZXZfaW5mb19nZXQoKQ0KPiAgKyAgICAgKiBAc2VlIHJ0ZV9ldmVu dF9wb3J0X3NldHVwKCkNCj4gICsgICAgICovDQo+ICArICAgIHVpbnQzMl90IG5iX2V2ZW50X3Bv cnRfZW5xdWV1ZV9kZXB0aDsNCj4gICsgICAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBldmVudHMg Y2FuIGJlIGVucXVldWVkIGF0IGEgdGltZSBmcm9tIGFuDQo+ICArICAgICAqIGV2ZW50IHBvcnQg YnkgdGhpcyBkZXZpY2UuDQo+ICArICAgICAqIFRoaXMgdmFsdWUgY2Fubm90IGV4Y2VlZCB0aGUg Km1heF9ldmVudF9wb3J0X2VucXVldWVfZGVwdGgqDQo+ICArICAgICAqIHdoaWNoIHByZXZpb3Vz bHkgcHJvdmlkZWQgaW4gcnRlX2V2ZW50X2Rldl9pbmZvX2dldCgpDQo+ICArICAgICAqIEBzZWUg cnRlX2V2ZW50X3BvcnRfc2V0dXAoKQ0KPiAgKyAgICAgKi8NCj4gICsgICAgdWludDMyX3QgZXZl bnRfZGV2X2NmZzsNCj4gICsgICAgLyoqPCBFdmVudCBkZXZpY2UgY29uZmlnIGZsYWdzKFJURV9F VkVOVF9ERVZfQ0ZHXykqLw0KPiAgK307DQo+ICArDQo+ICArLyoqDQo+ICArICogQ29uZmlndXJl IGFuIGV2ZW50IGRldmljZS4NCj4gICsgKg0KPiAgKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBp bnZva2VkIGZpcnN0IGJlZm9yZSBhbnkgb3RoZXIgZnVuY3Rpb24gaW4gdGhlDQo+ICArICogQVBJ LiBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIHJlLWludm9rZWQgd2hlbiBhIGRldmljZSBpcyBp biB0aGUNCj4gICsgKiBzdG9wcGVkIHN0YXRlLg0KPiAgKyAqDQo+ICArICogVGhlIGNhbGxlciBt YXkgdXNlIHJ0ZV9ldmVudF9kZXZfaW5mb19nZXQoKSB0byBnZXQgdGhlIGNhcGFiaWxpdHkgb2Yg ZWFjaA0KPiAgKyAqIHJlc291cmNlcyBhdmFpbGFibGUgZm9yIHRoaXMgZXZlbnQgZGV2aWNlLg0K PiAgKyAqDQo+ICArICogQHBhcmFtIGRldl9pZA0KPiAgKyAqICAgVGhlIGlkZW50aWZpZXIgb2Yg dGhlIGRldmljZSB0byBjb25maWd1cmUuDQo+ICArICogQHBhcmFtIGRldl9jb25mDQo+ICArICog ICBUaGUgZXZlbnQgZGV2aWNlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLg0KPiAgKyAqDQo+ICAr ICogQHJldHVybg0KPiAgKyAqICAgLSAwOiBTdWNjZXNzLCBkZXZpY2UgY29uZmlndXJlZC4NCj4g ICsgKiAgIC0gPDA6IEVycm9yIGNvZGUgcmV0dXJuZWQgYnkgdGhlIGRyaXZlciBjb25maWd1cmF0 aW9uIGZ1bmN0aW9uLg0KPiAgKyAqLw0KPiAgK2ludA0KPiAgK3J0ZV9ldmVudF9kZXZfY29uZmln dXJlKHVpbnQ4X3QgZGV2X2lkLA0KPiAgKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0 IHJ0ZV9ldmVudF9kZXZfY29uZmlnICpkZXZfY29uZik7DQo+ICArDQo+ICArDQo+ICArLyogRXZl bnQgcXVldWUgc3BlY2lmaWMgQVBJcyAqLw0KPiAgKw0KPiAgKy8qIEV2ZW50IHF1ZXVlIGNvbmZp Z3VyYXRpb24gYml0bWFwIGZsYWdzICovDQo+ICArI2RlZmluZSBSVEVfRVZFTlRfUVVFVUVfQ0ZH X0RFRkFVTFQgICAgICAgICAgICAoMCkNCj4gICsvKio8IERlZmF1bHQgdmFsdWUgb2YgKmV2ZW50 X3F1ZXVlX2NmZyogd2hlbiBydGVfZXZlbnRfcXVldWVfc2V0dXAoKQ0KPiAgaW52b2tlZA0KPiAg KyAqIHdpdGggcXVldWVfY29uZiA9PSBOVUxMDQo+ICArICoNCj4gICsgKiBAc2VlIHJ0ZV9ldmVu dF9xdWV1ZV9zZXR1cCgpDQo+ICArICovDQo+ICArI2RlZmluZSBSVEVfRVZFTlRfUVVFVUVfQ0ZH X1RZUEVfTUFTSyAgICAgICAgICAoM1VMTCA8PCAwKQ0KPiAgKy8qKjwgTWFzayBmb3IgZXZlbnQg cXVldWUgc2NoZWR1bGUgdHlwZSBjb25maWd1cmF0aW9uIHJlcXVlc3QgKi8NCj4gICsjZGVmaW5l IFJURV9FVkVOVF9RVUVVRV9DRkdfQUxMX1RZUEVTICAgICAgICAgICgwVUxMIDw8IDApDQo+ICAr LyoqPCBBbGxvdyBBVE9NSUMsT1JERVJFRCxQQVJBTExFTCBzY2hlZHVsZSB0eXBlIGVucXVldWUN Cj4gICsgKg0KPiAgKyAqIEBzZWUgUlRFX1NDSEVEX1RZUEVfT1JERVJFRCwgUlRFX1NDSEVEX1RZ UEVfQVRPTUlDLA0KPiAgUlRFX1NDSEVEX1RZUEVfUEFSQUxMRUwNCj4gICsgKiBAc2VlIHJ0ZV9l dmVudF9lbnF1ZXVlX2J1cnN0KCkNCj4gICsgKi8NCj4gICsjZGVmaW5lIFJURV9FVkVOVF9RVUVV RV9DRkdfQVRPTUlDX09OTFkgICAgICAgICgxVUxMIDw8IDApDQo+ICArLyoqPCBBbGxvdyBvbmx5 IEFUT01JQyBzY2hlZHVsZSB0eXBlIGVucXVldWUNCj4gICsgKg0KPiAgKyAqIFRoZSBydGVfZXZl bnRfZW5xdWV1ZV9idXJzdCgpIHJlc3VsdCBpcyB1bmRlZmluZWQgaWYgdGhlIHF1ZXVlIGNvbmZp Z3VyZWQNCj4gICsgKiB3aXRoIEFUT01JQyBvbmx5IGFuZCBzY2hlZF90eXBlICE9IFJURV9TQ0hF RF9UWVBFX0FUT01JQw0KPiAgKyAqDQo+ICArICogQHNlZSBSVEVfU0NIRURfVFlQRV9BVE9NSUMs IHJ0ZV9ldmVudF9lbnF1ZXVlX2J1cnN0KCkNCj4gICsgKi8NCj4gICsjZGVmaW5lIFJURV9FVkVO VF9RVUVVRV9DRkdfT1JERVJFRF9PTkxZICAgICAgICgyVUxMIDw8IDApDQo+ICArLyoqPCBBbGxv dyBvbmx5IE9SREVSRUQgc2NoZWR1bGUgdHlwZSBlbnF1ZXVlDQo+ICArICoNCj4gICsgKiBUaGUg cnRlX2V2ZW50X2VucXVldWVfYnVyc3QoKSByZXN1bHQgaXMgdW5kZWZpbmVkIGlmIHRoZSBxdWV1 ZSBjb25maWd1cmVkDQo+ICArICogd2l0aCBPUkRFUkVEIG9ubHkgYW5kIHNjaGVkX3R5cGUgIT0g UlRFX1NDSEVEX1RZUEVfT1JERVJFRA0KPiAgKyAqDQo+ICArICogQHNlZSBSVEVfU0NIRURfVFlQ RV9PUkRFUkVELCBydGVfZXZlbnRfZW5xdWV1ZV9idXJzdCgpDQo+ICArICovDQo+ICArI2RlZmlu ZSBSVEVfRVZFTlRfUVVFVUVfQ0ZHX1BBUkFMTEVMX09OTFkgICAgICAoM1VMTCA8PCAwKQ0KPiAg Ky8qKjwgQWxsb3cgb25seSBQQVJBTExFTCBzY2hlZHVsZSB0eXBlIGVucXVldWUNCj4gICsgKg0K PiAgKyAqIFRoZSBydGVfZXZlbnRfZW5xdWV1ZV9idXJzdCgpIHJlc3VsdCBpcyB1bmRlZmluZWQg aWYgdGhlIHF1ZXVlIGNvbmZpZ3VyZWQNCj4gICsgKiB3aXRoIFBBUkFMTEVMIG9ubHkgYW5kIHNj aGVkX3R5cGUgIT0gUlRFX1NDSEVEX1RZUEVfUEFSQUxMRUwNCj4gICsgKg0KPiAgKyAqIEBzZWUg UlRFX1NDSEVEX1RZUEVfUEFSQUxMRUwsIHJ0ZV9ldmVudF9lbnF1ZXVlX2J1cnN0KCkNCj4gICsg Ki8NCj4gICsjZGVmaW5lIFJURV9FVkVOVF9RVUVVRV9DRkdfU0lOR0xFX0xJTksgICAgICAgICgx VUxMIDw8IDIpDQo+ICArLyoqPCBUaGlzIGV2ZW50IHF1ZXVlIGxpbmtzIG9ubHkgdG8gYSBzaW5n bGUgZXZlbnQgcG9ydC4NCj4gICsgKg0KPiAgKyAqICBAc2VlIHJ0ZV9ldmVudF9wb3J0X3NldHVw KCksIHJ0ZV9ldmVudF9wb3J0X2xpbmsoKQ0KPiAgKyAqLw0KPiAgKw0KPiAgKy8qKiBFdmVudCBx dWV1ZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLw0KPiAgK3N0cnVjdCBydGVfZXZlbnRfcXVl dWVfY29uZiB7DQo+ICArICAgIHVpbnQzMl90IG5iX2F0b21pY19mbG93czsNCj4gICsgICAgLyoq PCBUaGUgbWF4aW11bSBudW1iZXIgb2YgYWN0aXZlIGZsb3dzIHRoaXMgcXVldWUgY2FuIHRyYWNr IGF0IGFueQ0KPiAgKyAgICAgKiBnaXZlbiB0aW1lLiBUaGUgdmFsdWUgbXVzdCBiZSBpbiB0aGUg cmFuZ2Ugb2YNCj4gICsgICAgICogWzEgLSBuYl9ldmVudF9xdWV1ZV9mbG93cyldIHdoaWNoIHBy ZXZpb3VzbHkgcHJvdmlkZWQgaW4NCj4gICsgICAgICogcnRlX2V2ZW50X2Rldl9pbmZvX2dldCgp Lg0KPiAgKyAgICAgKi8NCj4gICsgICAgdWludDMyX3QgbmJfYXRvbWljX29yZGVyX3NlcXVlbmNl czsNCj4gICsgICAgLyoqPCBUaGUgbWF4aW11bSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgZXZlbnRz IHdhaXRpbmcgdG8gYmUNCj4gICsgICAgICogcmVvcmRlcmVkIGJ5IHRoaXMgcXVldWUuIEluIG90 aGVyIHdvcmRzLCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4NCj4gICsgICAgICogdGhpcyBxdWV1 ZeKAmXMgcmVvcmRlciBidWZmZXIuV2hlbiB0aGUgbnVtYmVyIG9mIGV2ZW50cyBpbiB0aGUNCj4g ICsgICAgICogcmVvcmRlciBidWZmZXIgcmVhY2hlcyB0byAqbmJfYXRvbWljX29yZGVyX3NlcXVl bmNlcyogdGhlbiB0aGUNCj4gICsgICAgICogc2NoZWR1bGVyIGNhbm5vdCBzY2hlZHVsZSB0aGUg ZXZlbnRzIGZyb20gdGhpcyBxdWV1ZSBhbmQgaW52YWxpZA0KPiAgKyAgICAgKiBldmVudCB3aWxs IGJlIHJldHVybmVkIGZyb20gZGVxdWV1ZSB1bnRpbCBvbmUgb3IgbW9yZSBlbnRyaWVzIGFyZQ0K PiAgKyAgICAgKiBmcmVlZCB1cC9yZWxlYXNlZC4NCj4gICsgICAgICogVGhlIHZhbHVlIG11c3Qg YmUgaW4gdGhlIHJhbmdlIG9mIFsxIC0gbmJfZXZlbnRfcXVldWVfZmxvd3MpXQ0KPiAgKyAgICAg KiB3aGljaCBwcmV2aW91c2x5IHN1cHBsaWVkIHRvIHJ0ZV9ldmVudF9kZXZfY29uZmlndXJlKCku DQo+ICArICAgICAqLw0KPiAgKyAgICB1aW50MzJfdCBldmVudF9xdWV1ZV9jZmc7IC8qKjwgUXVl dWUgY2ZnDQo+ICBmbGFncyhFVkVOVF9RVUVVRV9DRkdfKSAqLw0KPiAgKyAgICB1aW50OF90IHBy aW9yaXR5Ow0KPiAgKyAgICAvKio8IFByaW9yaXR5IGZvciB0aGlzIGV2ZW50IHF1ZXVlIHJlbGF0 aXZlIHRvIG90aGVyIGV2ZW50IHF1ZXVlcy4NCj4gICsgICAgICogVGhlIHJlcXVlc3RlZCBwcmlv cml0eSBzaG91bGQgaW4gdGhlIHJhbmdlIG9mDQo+ICArICAgICAqIFtSVEVfRVZFTlRfREVWX1BS SU9SSVRZX0hJR0hFU1QsDQo+ICBSVEVfRVZFTlRfREVWX1BSSU9SSVRZX0xPV0VTVF0uDQo+ICAr ICAgICAqIFRoZSBpbXBsZW1lbnRhdGlvbiBzaGFsbCBub3JtYWxpemUgdGhlIHJlcXVlc3RlZCBw cmlvcml0eSB0bw0KPiAgKyAgICAgKiBldmVudCBkZXZpY2Ugc3VwcG9ydGVkIHByaW9yaXR5IHZh bHVlLg0KPiAgKyAgICAgKiBWYWxpZCB3aGVuIHRoZSBkZXZpY2UgaGFzIFJURV9FVkVOVF9ERVZf Q0FQX1FVRVVFX1FPUw0KPiAgY2FwYWJpbGl0eQ0KPiAgKyAgICAgKi8NCj4gICt9Ow0KPiAgKw0K PiAgKy8qKg0KPiAgKyAqIFJldHJpZXZlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW5mb3Jt YXRpb24gb2YgYW4gZXZlbnQgcXVldWUNCj4gIGRlc2lnbmF0ZWQNCj4gICsgKiBieSBpdHMgKnF1 ZXVlX2lkKiBmcm9tIHRoZSBldmVudCBkcml2ZXIgZm9yIGFuIGV2ZW50IGRldmljZS4NCj4gICsg Kg0KPiAgKyAqIFRoaXMgZnVuY3Rpb24gaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlv biB3aXRoDQo+ICBydGVfZXZlbnRfcXVldWVfc2V0dXAoKQ0KPiAgKyAqIHdoZXJlIGNhbGxlciBu ZWVkcyB0byBzZXQgdXAgdGhlIHF1ZXVlIGJ5IG92ZXJyaWRpbmcgZmV3IGRlZmF1bHQgdmFsdWVz Lg0KPiAgKyAqDQo+ICArICogQHBhcmFtIGRldl9pZA0KPiAgKyAqICAgVGhlIGlkZW50aWZpZXIg b2YgdGhlIGRldmljZS4NCj4gICsgKiBAcGFyYW0gcXVldWVfaWQNCj4gICsgKiAgIFRoZSBpbmRl eCBvZiB0aGUgZXZlbnQgcXVldWUgdG8gZ2V0IHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9u Lg0KPiAgKyAqICAgVGhlIHZhbHVlIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCBuYl9ldmVudF9x dWV1ZXMgLSAxXQ0KPiAgKyAqICAgcHJldmlvdXNseSBzdXBwbGllZCB0byBydGVfZXZlbnRfZGV2 X2NvbmZpZ3VyZSgpLg0KPiAgKyAqIEBwYXJhbVtvdXRdIHF1ZXVlX2NvbmYNCj4gICsgKiAgIFRo ZSBwb2ludGVyIHRvIHRoZSBkZWZhdWx0IGV2ZW50IHF1ZXVlIGNvbmZpZ3VyYXRpb24gZGF0YS4N Cj4gICsgKiBAcmV0dXJuDQo+ICArICogICAtIDA6IFN1Y2Nlc3MsIGRyaXZlciB1cGRhdGVzIHRo ZSBkZWZhdWx0IGV2ZW50IHF1ZXVlIGNvbmZpZ3VyYXRpb24gZGF0YS4NCj4gICsgKiAgIC0gPDA6 IEVycm9yIGNvZGUgcmV0dXJuZWQgYnkgdGhlIGRyaXZlciBpbmZvIGdldCBmdW5jdGlvbi4NCj4g ICsgKg0KPiAgKyAqIEBzZWUgcnRlX2V2ZW50X3F1ZXVlX3NldHVwKCkNCj4gICsgKg0KPiAgKyAq Lw0KPiAgK2ludA0KPiAgK3J0ZV9ldmVudF9xdWV1ZV9kZWZhdWx0X2NvbmZfZ2V0KHVpbnQ4X3Qg ZGV2X2lkLCB1aW50OF90IHF1ZXVlX2lkLA0KPiAgKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHJ0ZV9ldmVudF9xdWV1ZV9jb25mICpxdWV1ZV9jb25mKTsNCj4gICsNCj4gICsv KioNCj4gICsgKiBBbGxvY2F0ZSBhbmQgc2V0IHVwIGFuIGV2ZW50IHF1ZXVlIGZvciBhbiBldmVu dCBkZXZpY2UuDQo+ICArICoNCj4gICsgKiBAcGFyYW0gZGV2X2lkDQo+ICArICogICBUaGUgaWRl bnRpZmllciBvZiB0aGUgZGV2aWNlLg0KPiAgKyAqIEBwYXJhbSBxdWV1ZV9pZA0KPiAgKyAqICAg VGhlIGluZGV4IG9mIHRoZSBldmVudCBxdWV1ZSB0byBzZXR1cC4gVGhlIHZhbHVlIG11c3QgYmUg aW4gdGhlIHJhbmdlDQo+ICArICogICBbMCwgbmJfZXZlbnRfcXVldWVzIC0gMV0gcHJldmlvdXNs eSBzdXBwbGllZCB0bw0KPiAgcnRlX2V2ZW50X2Rldl9jb25maWd1cmUoKS4NCj4gICsgKiBAcGFy YW0gcXVldWVfY29uZg0KPiAgKyAqICAgVGhlIHBvaW50ZXIgdG8gdGhlIGNvbmZpZ3VyYXRpb24g ZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgZXZlbnQgcXVldWUuDQo+ICArICogICBOVUxMIHZhbHVl IGlzIGFsbG93ZWQsIGluIHdoaWNoIGNhc2UgZGVmYXVsdCBjb25maWd1cmF0aW9uICAgICB1c2Vk Lg0KPiAgKyAqDQo+ICArICogQHNlZSBydGVfZXZlbnRfcXVldWVfZGVmYXVsdF9jb25mX2dldCgp DQo+ICArICoNCj4gICsgKiBAcmV0dXJuDQo+ICArICogICAtIDA6IFN1Y2Nlc3MsIGV2ZW50IHF1 ZXVlIGNvcnJlY3RseSBzZXQgdXAuDQo+ICArICogICAtIDwwOiBldmVudCBxdWV1ZSBjb25maWd1 cmF0aW9uIGZhaWxlZA0KPiAgKyAqLw0KPiAgK2ludA0KPiAgK3J0ZV9ldmVudF9xdWV1ZV9zZXR1 cCh1aW50OF90IGRldl9pZCwgdWludDhfdCBxdWV1ZV9pZCwNCj4gICsgICAgICAgICAgICAgICAg ICBjb25zdCBzdHJ1Y3QgcnRlX2V2ZW50X3F1ZXVlX2NvbmYgKnF1ZXVlX2NvbmYpOw0KPiAgKw0K PiAgKy8qKg0KPiAgKyAqIEdldCB0aGUgbnVtYmVyIG9mIGV2ZW50IHF1ZXVlcyBvbiBhIHNwZWNp ZmljIGV2ZW50IGRldmljZQ0KPiAgKyAqDQo+ICArICogQHBhcmFtIGRldl9pZA0KPiAgKyAqICAg RXZlbnQgZGV2aWNlIGlkZW50aWZpZXIuDQo+ICArICogQHJldHVybg0KPiAgKyAqICAgLSBUaGUg bnVtYmVyIG9mIGNvbmZpZ3VyZWQgZXZlbnQgcXVldWVzDQo+ICArICovDQo+ICArdWludDhfdA0K PiAgK3J0ZV9ldmVudF9xdWV1ZV9jb3VudCh1aW50OF90IGRldl9pZCk7DQo+ICArDQo+ICArLyoq DQo+ICArICogR2V0IHRoZSBwcmlvcml0eSBvZiB0aGUgZXZlbnQgcXVldWUgb24gYSBzcGVjaWZp YyBldmVudCBkZXZpY2UNCj4gICsgKg0KPiAgKyAqIEBwYXJhbSBkZXZfaWQNCj4gICsgKiAgIEV2 ZW50IGRldmljZSBpZGVudGlmaWVyLg0KPiAgKyAqIEBwYXJhbSBxdWV1ZV9pZA0KPiAgKyAqICAg RXZlbnQgcXVldWUgaWRlbnRpZmllci4NCj4gICsgKiBAcmV0dXJuDQo+ICArICogICAtIElmIHRo ZSBkZXZpY2UgaGFzIFJURV9FVkVOVF9ERVZfQ0FQX1FVRVVFX1FPUyBjYXBhYmlsaXR5IHRoZW4g dGhlDQo+ICArICogICAgY29uZmlndXJlZCBwcmlvcml0eSBvZiB0aGUgZXZlbnQgcXVldWUgaW4N Cj4gICsgKiAgICBbUlRFX0VWRU5UX0RFVl9QUklPUklUWV9ISUdIRVNULA0KPiAgUlRFX0VWRU5U X0RFVl9QUklPUklUWV9MT1dFU1RdIHJhbmdlDQo+ICArICogICAgZWxzZSB0aGUgdmFsdWUgUlRF X0VWRU5UX0RFVl9QUklPUklUWV9OT1JNQUwNCj4gICsgKi8NCj4gICt1aW50OF90DQo+ICArcnRl X2V2ZW50X3F1ZXVlX3ByaW9yaXR5KHVpbnQ4X3QgZGV2X2lkLCB1aW50OF90IHF1ZXVlX2lkKTsN Cj4gICsNCj4gICsvKiBFdmVudCBwb3J0IHNwZWNpZmljIEFQSXMgKi8NCj4gICsNCj4gICsvKiog RXZlbnQgcG9ydCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLw0KPiAgK3N0cnVjdCBydGVfZXZl bnRfcG9ydF9jb25mIHsNCj4gICsgICAgaW50MzJfdCBuZXdfZXZlbnRfdGhyZXNob2xkOw0KPiAg KyAgICAvKio8IEEgYmFja3ByZXNzdXJlIHRocmVzaG9sZCBmb3IgbmV3IGV2ZW50IGVucXVldWVz IG9uIHRoaXMgcG9ydC4NCj4gICsgICAgICogVXNlIGZvciAqY2xvc2VkIHN5c3RlbSogZXZlbnQg ZGV2IHdoZXJlIGV2ZW50IGNhcGFjaXR5IGlzIGxpbWl0ZWQsDQo+ICArICAgICAqIGFuZCBjYW5u b3QgZXhjZWVkIHRoZSBjYXBhY2l0eSBvZiB0aGUgZXZlbnQgZGV2Lg0KPiAgKyAgICAgKiBDb25m aWd1cmluZyBwb3J0cyB3aXRoIGRpZmZlcmVudCB0aHJlc2hvbGRzIGNhbiBtYWtlIGhpZ2hlciBw cmlvcml0eQ0KPiAgKyAgICAgKiB0cmFmZmljIGxlc3MgbGlrZWx5IHRvICBiZSBiYWNrcHJlc3N1 cmVkLg0KPiAgKyAgICAgKiBGb3IgZXhhbXBsZSwgYSBwb3J0IHVzZWQgdG8gaW5qZWN0IE5JQyBS eCBwYWNrZXRzIGludG8gdGhlIGV2ZW50IGRldg0KPiAgKyAgICAgKiBjYW4gaGF2ZSBhIGxvd2Vy IHRocmVzaG9sZCBzbyBhcyBub3QgdG8gb3ZlcndoZWxtIHRoZSBkZXZpY2UsDQo+ICArICAgICAq IHdoaWxlIHBvcnRzIHVzZWQgZm9yIHdvcmtlciBwb29scyBjYW4gaGF2ZSBhIGhpZ2hlciB0aHJl c2hvbGQuDQo+ICArICAgICAqIFRoaXMgdmFsdWUgY2Fubm90IGV4Y2VlZCB0aGUgKm5iX2V2ZW50 c19saW1pdCoNCj4gICsgICAgICogd2hpY2ggcHJldmlvdXNseSBzdXBwbGllZCB0byBydGVfZXZl bnRfZGV2X2NvbmZpZ3VyZSgpDQo+ICArICAgICAqLw0KPiAgKyAgICB1aW50OF90IGRlcXVldWVf ZGVwdGg7DQo+ICArICAgIC8qKjwgQ29uZmlndXJlIG51bWJlciBvZiBidWxrIGRlcXVldWVzIGZv ciB0aGlzIGV2ZW50IHBvcnQuDQo+ICArICAgICAqIFRoaXMgdmFsdWUgY2Fubm90IGV4Y2VlZCB0 aGUgKm5iX2V2ZW50X3BvcnRfZGVxdWV1ZV9kZXB0aCoNCj4gICsgICAgICogd2hpY2ggcHJldmlv dXNseSBzdXBwbGllZCB0byBydGVfZXZlbnRfZGV2X2NvbmZpZ3VyZSgpDQo+ICArICAgICAqLw0K PiAgKyAgICB1aW50OF90IGVucXVldWVfZGVwdGg7DQo+ICArICAgIC8qKjwgQ29uZmlndXJlIG51 bWJlciBvZiBidWxrIGVucXVldWVzIGZvciB0aGlzIGV2ZW50IHBvcnQuDQo+ICArICAgICAqIFRo aXMgdmFsdWUgY2Fubm90IGV4Y2VlZCB0aGUgKm5iX2V2ZW50X3BvcnRfZW5xdWV1ZV9kZXB0aCoN Cj4gICsgICAgICogd2hpY2ggcHJldmlvdXNseSBzdXBwbGllZCB0byBydGVfZXZlbnRfZGV2X2Nv bmZpZ3VyZSgpDQo+ICArICAgICAqLw0KPiAgK307DQo+ICArDQo+ICArLyoqDQo+ICArICogUmV0 cmlldmUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBvZiBhbiBldmVudCBw b3J0IGRlc2lnbmF0ZWQNCj4gICsgKiBieSBpdHMgKnBvcnRfaWQqIGZyb20gdGhlIGV2ZW50IGRy aXZlciBmb3IgYW4gZXZlbnQgZGV2aWNlLg0KPiAgKyAqDQo+ICArICogVGhpcyBmdW5jdGlvbiBp bnRlbmRlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgNCj4gIHJ0ZV9ldmVudF9wb3J0 X3NldHVwKCkNCj4gICsgKiB3aGVyZSBjYWxsZXIgbmVlZHMgdG8gc2V0IHVwIHRoZSBwb3J0IGJ5 IG92ZXJyaWRpbmcgZmV3IGRlZmF1bHQgdmFsdWVzLg0KPiAgKyAqDQo+ICArICogQHBhcmFtIGRl dl9pZA0KPiAgKyAqICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRldmljZS4NCj4gICsgKiBAcGFy YW0gcG9ydF9pZA0KPiAgKyAqICAgVGhlIGluZGV4IG9mIHRoZSBldmVudCBwb3J0IHRvIGdldCB0 aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4NCj4gICsgKiAgIFRoZSB2YWx1ZSBtdXN0IGJl IGluIHRoZSByYW5nZSBbMCwgbmJfZXZlbnRfcG9ydHMgLSAxXQ0KPiAgKyAqICAgcHJldmlvdXNs eSBzdXBwbGllZCB0byBydGVfZXZlbnRfZGV2X2NvbmZpZ3VyZSgpLg0KPiAgKyAqIEBwYXJhbVtv dXRdIHBvcnRfY29uZg0KPiAgKyAqICAgVGhlIHBvaW50ZXIgdG8gdGhlIGRlZmF1bHQgZXZlbnQg cG9ydCBjb25maWd1cmF0aW9uIGRhdGENCj4gICsgKiBAcmV0dXJuDQo+ICArICogICAtIDA6IFN1 Y2Nlc3MsIGRyaXZlciB1cGRhdGVzIHRoZSBkZWZhdWx0IGV2ZW50IHBvcnQgY29uZmlndXJhdGlv biBkYXRhLg0KPiAgKyAqICAgLSA8MDogRXJyb3IgY29kZSByZXR1cm5lZCBieSB0aGUgZHJpdmVy IGluZm8gZ2V0IGZ1bmN0aW9uLg0KPiAgKyAqDQo+ICArICogQHNlZSBydGVfZXZlbnRfcG9ydF9z ZXR1cCgpDQo+ICArICoNCj4gICsgKi8NCj4gICtpbnQNCj4gICtydGVfZXZlbnRfcG9ydF9kZWZh dWx0X2NvbmZfZ2V0KHVpbnQ4X3QgZGV2X2lkLCB1aW50OF90IHBvcnRfaWQsDQo+ICArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGVfZXZlbnRfcG9ydF9jb25mICpwb3J0X2Nv bmYpOw0KPiAgKw0KPiAgKy8qKg0KPiAgKyAqIEFsbG9jYXRlIGFuZCBzZXQgdXAgYW4gZXZlbnQg cG9ydCBmb3IgYW4gZXZlbnQgZGV2aWNlLg0KPiAgKyAqDQo+ICArICogQHBhcmFtIGRldl9pZA0K PiAgKyAqICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRldmljZS4NCj4gICsgKiBAcGFyYW0gcG9y dF9pZA0KPiAgKyAqICAgVGhlIGluZGV4IG9mIHRoZSBldmVudCBwb3J0IHRvIHNldHVwLiBUaGUg dmFsdWUgbXVzdCBiZSBpbiB0aGUgcmFuZ2UNCj4gICsgKiAgIFswLCBuYl9ldmVudF9wb3J0cyAt IDFdIHByZXZpb3VzbHkgc3VwcGxpZWQgdG8gcnRlX2V2ZW50X2Rldl9jb25maWd1cmUoKS4NCj4g ICsgKiBAcGFyYW0gcG9ydF9jb25mDQo+ICArICogICBUaGUgcG9pbnRlciB0byB0aGUgY29uZmln dXJhdGlvbiBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBxdWV1ZS4NCj4gICsgKiAgIE5VTEwgdmFs dWUgaXMgYWxsb3dlZCwgaW4gd2hpY2ggY2FzZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gICAgIHVz ZWQuDQo+ICArICoNCj4gICsgKiBAc2VlIHJ0ZV9ldmVudF9wb3J0X2RlZmF1bHRfY29uZl9nZXQo KQ0KPiAgKyAqDQo+ICArICogQHJldHVybg0KPiAgKyAqICAgLSAwOiBTdWNjZXNzLCBldmVudCBw b3J0IGNvcnJlY3RseSBzZXQgdXAuDQo+ICArICogICAtIDwwOiBQb3J0IGNvbmZpZ3VyYXRpb24g ZmFpbGVkDQo+ICArICogICAtICgtRURRVU9UKSBRdW90YSBleGNlZWRlZChBcHBsaWNhdGlvbiB0 cmllZCB0byBsaW5rIHRoZSBxdWV1ZQ0KPiAgY29uZmlndXJlZA0KPiAgKyAqICAgd2l0aCBSVEVf RVZFTlRfUVVFVUVfQ0ZHX1NJTkdMRV9MSU5LIHRvIG1vcmUgdGhhbiBvbmUgZXZlbnQNCj4gIHBv cnRzKQ0KPiAgKyAqLw0KPiAgK2ludA0KPiAgK3J0ZV9ldmVudF9wb3J0X3NldHVwKHVpbnQ4X3Qg ZGV2X2lkLCB1aW50OF90IHBvcnRfaWQsDQo+ICArICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1 Y3QgcnRlX2V2ZW50X3BvcnRfY29uZiAqcG9ydF9jb25mKTsNCj4gICsNCj4gICsvKioNCj4gICsg KiBHZXQgdGhlIG51bWJlciBvZiBkZXF1ZXVlIHF1ZXVlIGRlcHRoIGNvbmZpZ3VyZWQgZm9yIGV2 ZW50IHBvcnQNCj4gIGRlc2lnbmF0ZWQNCj4gICsgKiBieSBpdHMgKnBvcnRfaWQqIG9uIGEgc3Bl Y2lmaWMgZXZlbnQgZGV2aWNlDQo+ICArICoNCj4gICsgKiBAcGFyYW0gZGV2X2lkDQo+ICArICog ICBFdmVudCBkZXZpY2UgaWRlbnRpZmllci4NCj4gICsgKiBAcGFyYW0gcG9ydF9pZA0KPiAgKyAq ICAgRXZlbnQgcG9ydCBpZGVudGlmaWVyLg0KPiAgKyAqIEByZXR1cm4NCj4gICsgKiAgIC0gVGhl IG51bWJlciBvZiBjb25maWd1cmVkIGRlcXVldWUgcXVldWUgZGVwdGgNCj4gICsgKg0KPiAgKyAq IEBzZWUgcnRlX2V2ZW50X2RlcXVldWVfYnVyc3QoKQ0KPiAgKyAqLw0KPiAgK3VpbnQ4X3QNCj4g ICtydGVfZXZlbnRfcG9ydF9kZXF1ZXVlX2RlcHRoKHVpbnQ4X3QgZGV2X2lkLCB1aW50OF90IHBv cnRfaWQpOw0KPiAgKw0KPiAgKy8qKg0KPiAgKyAqIEdldCB0aGUgbnVtYmVyIG9mIGVucXVldWUg cXVldWUgZGVwdGggY29uZmlndXJlZCBmb3IgZXZlbnQgcG9ydA0KPiAgZGVzaWduYXRlZA0KPiAg KyAqIGJ5IGl0cyAqcG9ydF9pZCogb24gYSBzcGVjaWZpYyBldmVudCBkZXZpY2UNCj4gICsgKg0K PiAgKyAqIEBwYXJhbSBkZXZfaWQNCj4gICsgKiAgIEV2ZW50IGRldmljZSBpZGVudGlmaWVyLg0K PiAgKyAqIEBwYXJhbSBwb3J0X2lkDQo+ICArICogICBFdmVudCBwb3J0IGlkZW50aWZpZXIuDQo+ ICArICogQHJldHVybg0KPiAgKyAqICAgLSBUaGUgbnVtYmVyIG9mIGNvbmZpZ3VyZWQgZW5xdWV1 ZSBxdWV1ZSBkZXB0aA0KPiAgKyAqDQo+ICArICogQHNlZSBydGVfZXZlbnRfZW5xdWV1ZV9idXJz dCgpDQo+ICArICovDQo+ICArdWludDhfdA0KPiAgK3J0ZV9ldmVudF9wb3J0X2VucXVldWVfZGVw dGgodWludDhfdCBkZXZfaWQsIHVpbnQ4X3QgcG9ydF9pZCk7DQo+ICArDQo+ICArLyoqDQo+ICAr ICogR2V0IHRoZSBudW1iZXIgb2YgcG9ydHMgb24gYSBzcGVjaWZpYyBldmVudCBkZXZpY2UNCj4g ICsgKg0KPiAgKyAqIEBwYXJhbSBkZXZfaWQNCj4gICsgKiAgIEV2ZW50IGRldmljZSBpZGVudGlm aWVyLg0KPiAgKyAqIEByZXR1cm4NCj4gICsgKiAgIC0gVGhlIG51bWJlciBvZiBjb25maWd1cmVk IHBvcnRzDQo+ICArICovDQo+ICArdWludDhfdA0KPiAgK3J0ZV9ldmVudF9wb3J0X2NvdW50KHVp bnQ4X3QgZGV2X2lkKTsNCj4gICsNCj4gICsvKioNCj4gICsgKiBTdGFydCBhbiBldmVudCBkZXZp Y2UuDQo+ICArICoNCj4gICsgKiBUaGUgZGV2aWNlIHN0YXJ0IHN0ZXAgaXMgdGhlIGxhc3Qgb25l IGFuZCBjb25zaXN0cyBvZiBzZXR0aW5nIHRoZSBldmVudA0KPiAgKyAqIHF1ZXVlcyB0byBzdGFy dCBhY2NlcHRpbmcgdGhlIGV2ZW50cyBhbmQgc2NoZWR1bGVzIHRvIGV2ZW50IHBvcnRzLg0KPiAg KyAqDQo+ICArICogT24gc3VjY2VzcywgYWxsIGJhc2ljIGZ1bmN0aW9ucyBleHBvcnRlZCBieSB0 aGUgQVBJIChldmVudCBlbnF1ZXVlLA0KPiAgKyAqIGV2ZW50IGRlcXVldWUgYW5kIHNvIG9uKSBj YW4gYmUgaW52b2tlZC4NCj4gICsgKg0KPiAgKyAqIEBwYXJhbSBkZXZfaWQNCj4gICsgKiAgIEV2 ZW50IGRldmljZSBpZGVudGlmaWVyDQo+ICArICogQHJldHVybg0KPiAgKyAqICAgLSAwOiBTdWNj ZXNzLCBkZXZpY2Ugc3RhcnRlZC4NCj4gICsgKiAgIC0gPDA6IEVycm9yIGNvZGUgb2YgdGhlIGRy aXZlciBkZXZpY2Ugc3RhcnQgZnVuY3Rpb24uDQo+ICArICovDQo+ICAraW50DQo+ICArcnRlX2V2 ZW50X2Rldl9zdGFydCh1aW50OF90IGRldl9pZCk7DQo+ICArDQo+ICArLyoqDQo+ICArICogU3Rv cCBhbiBldmVudCBkZXZpY2UuIFRoZSBkZXZpY2UgY2FuIGJlIHJlc3RhcnRlZCB3aXRoIGEgY2Fs bCB0bw0KPiAgKyAqIHJ0ZV9ldmVudF9kZXZfc3RhcnQoKQ0KPiAgKyAqDQo+ICArICogQHBhcmFt IGRldl9pZA0KPiAgKyAqICAgRXZlbnQgZGV2aWNlIGlkZW50aWZpZXIuDQo+ICArICovDQo+ICAr dm9pZA0KPiAgK3J0ZV9ldmVudF9kZXZfc3RvcCh1aW50OF90IGRldl9pZCk7DQo+ICArDQo+ICAr LyoqDQo+ICArICogQ2xvc2UgYW4gZXZlbnQgZGV2aWNlLiBUaGUgZGV2aWNlIGNhbm5vdCBiZSBy ZXN0YXJ0ZWQhDQo+ICArICoNCj4gICsgKiBAcGFyYW0gZGV2X2lkDQo+ICArICogICBFdmVudCBk ZXZpY2UgaWRlbnRpZmllcg0KPiAgKyAqDQo+ICArICogQHJldHVybg0KPiAgKyAqICAtIDAgb24g c3VjY2Vzc2Z1bGx5IGNsb3NpbmcgZGV2aWNlDQo+ICArICogIC0gPDAgb24gZmFpbHVyZSB0byBj bG9zZSBkZXZpY2UNCj4gICsgKiAgLSAoLUVBR0FJTikgaWYgZGV2aWNlIGlzIGJ1c3kNCj4gICsg Ki8NCj4gICtpbnQNCj4gICtydGVfZXZlbnRfZGV2X2Nsb3NlKHVpbnQ4X3QgZGV2X2lkKTsNCj4g ICsNCj4gICsvKiBTY2hlZHVsZXIgdHlwZSBkZWZpbml0aW9ucyAqLw0KPiAgKyNkZWZpbmUgUlRF X1NDSEVEX1RZUEVfT1JERVJFRCAgICAgICAgICAwDQo+ICArLyoqPCBPcmRlcmVkIHNjaGVkdWxp bmcNCj4gICsgKg0KPiAgKyAqIEV2ZW50cyBmcm9tIGFuIG9yZGVyZWQgZmxvdyBvZiBhbiBldmVu dCBxdWV1ZSBjYW4gYmUgc2NoZWR1bGVkIHRvDQo+ICBtdWx0aXBsZQ0KPiAgKyAqIHBvcnRzIGZv ciBjb25jdXJyZW50IHByb2Nlc3Npbmcgd2hpbGUgbWFpbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGV2 ZW50IG9yZGVyLg0KPiAgKyAqIFRoaXMgc2NoZW1lIGVuYWJsZXMgdGhlIHVzZXIgdG8gYWNoaWV2 ZSBoaWdoIHNpbmdsZSBmbG93IHRocm91Z2hwdXQgYnkNCj4gICsgKiBhdm9pZGluZyBTVyBzeW5j aHJvbml6YXRpb24gZm9yIG9yZGVyaW5nIGJldHdlZW4gcG9ydHMgd2hpY2ggYm91bmQgdG8NCj4g IGNvcmVzLg0KPiAgKyAqDQo+ICArICogVGhlIHNvdXJjZSBmbG93IG9yZGVyaW5nIGZyb20gYW4g ZXZlbnQgcXVldWUgaXMgbWFpbnRhaW5lZCB3aGVuIGV2ZW50cw0KPiAgYXJlDQo+ICArICogZW5x dWV1ZWQgdG8gdGhlaXIgZGVzdGluYXRpb24gcXVldWUgd2l0aGluIHRoZSBzYW1lIG9yZGVyZWQg ZmxvdyBjb250ZXh0Lg0KPiAgKyAqIEFuIGV2ZW50IHBvcnQgaG9sZHMgdGhlIGNvbnRleHQgdW50 aWwgYXBwbGljYXRpb24gY2FsbA0KPiAgKyAqIHJ0ZV9ldmVudF9kZXF1ZXVlX2J1cnN0KCkgZnJv bSB0aGUgc2FtZSBwb3J0LCB3aGljaCBpbXBsaWNpdGx5IHJlbGVhc2VzDQo+ICArICogdGhlIGNv bnRleHQuDQo+ICArICogVXNlciBtYXkgYWxsb3cgdGhlIHNjaGVkdWxlciB0byByZWxlYXNlIHRo ZSBjb250ZXh0IGVhcmxpZXIgdGhhbiB0aGF0DQo+ICArICogYnkgaW52b2tpbmcgcnRlX2V2ZW50 X2VucXVldWVfYnVyc3QoKSB3aXRoIFJURV9FVkVOVF9PUF9SRUxFQVNFDQo+ICBvcGVyYXRpb24u DQo+ICArICoNCj4gICsgKiBFdmVudHMgZnJvbSB0aGUgc291cmNlIHF1ZXVlIGFwcGVhciBpbiB0 aGVpciBvcmlnaW5hbCBvcmRlciB3aGVuIGRlcXVldWVkDQo+ICArICogZnJvbSBhIGRlc3RpbmF0 aW9uIHF1ZXVlLg0KPiAgKyAqIEV2ZW50IG9yZGVyaW5nIGlzIGJhc2VkIG9uIHRoZSByZWNlaXZl ZCBldmVudChzKSwgYnV0IGFsc28gb3RoZXINCj4gICsgKiAobmV3bHkgYWxsb2NhdGVkIG9yIHN0 b3JlZCkgZXZlbnRzIGFyZSBvcmRlcmVkIHdoZW4gZW5xdWV1ZWQgd2l0aGluIHRoZQ0KPiAgc2Ft ZQ0KPiAgKyAqIG9yZGVyZWQgY29udGV4dC4gRXZlbnRzIG5vdCBlbnF1ZXVlZCAoZS5nLiByZWxl YXNlZCBvciBzdG9yZWQpIHdpdGhpbiB0aGUNCj4gICsgKiBjb250ZXh0IGFyZSAgY29uc2lkZXJl ZCBtaXNzaW5nIGZyb20gcmVvcmRlcmluZyBhbmQgYXJlIHNraXBwZWQgYXQgdGhpcw0KPiAgdGlt ZQ0KPiAgKyAqIChidXQgY2FuIGJlIG9yZGVyZWQgYWdhaW4gd2l0aGluIGFub3RoZXIgY29udGV4 dCkuDQo+ICArICoNCj4gICsgKiBAc2VlIHJ0ZV9ldmVudF9xdWV1ZV9zZXR1cCgpLCBydGVfZXZl bnRfZGVxdWV1ZV9idXJzdCgpLA0KPiAgUlRFX0VWRU5UX09QX1JFTEVBU0UNCj4gICsgKi8NCj4g ICsNCj4gICsjZGVmaW5lIFJURV9TQ0hFRF9UWVBFX0FUT01JQyAgICAgICAgICAgMQ0KPiAgKy8q KjwgQXRvbWljIHNjaGVkdWxpbmcNCj4gICsgKg0KPiAgKyAqIEV2ZW50cyBmcm9tIGFuIGF0b21p YyBmbG93IG9mIGFuIGV2ZW50IHF1ZXVlIGNhbiBiZSBzY2hlZHVsZWQgb25seSB0byBhDQo+ICAr ICogc2luZ2xlIHBvcnQgYXQgYSB0aW1lLiBUaGUgcG9ydCBpcyBndWFyYW50ZWVkIHRvIGhhdmUg ZXhjbHVzaXZlIChhdG9taWMpDQo+ICArICogYWNjZXNzIHRvIHRoZSBhc3NvY2lhdGVkIGZsb3cg Y29udGV4dCwgd2hpY2ggZW5hYmxlcyB0aGUgdXNlciB0byBhdm9pZCBTVw0KPiAgKyAqIHN5bmNo cm9uaXphdGlvbi4gQXRvbWljIGZsb3dzIGFsc28gaGVscCB0byBtYWludGFpbiBldmVudCBvcmRl cmluZw0KPiAgKyAqIHNpbmNlIG9ubHkgb25lIHBvcnQgYXQgYSB0aW1lIGNhbiBwcm9jZXNzIGV2 ZW50cyBmcm9tIGEgZmxvdyBvZiBhbg0KPiAgKyAqIGV2ZW50IHF1ZXVlLg0KPiAgKyAqDQo+ICAr ICogVGhlIGF0b21pYyBxdWV1ZSBzeW5jaHJvbml6YXRpb24gY29udGV4dCBpcyBkZWRpY2F0ZWQg dG8gdGhlIHBvcnQgdW50aWwNCj4gICsgKiBhcHBsaWNhdGlvbiBjYWxsIHJ0ZV9ldmVudF9kZXF1 ZXVlX2J1cnN0KCkgZnJvbSB0aGUgc2FtZSBwb3J0LA0KPiAgKyAqIHdoaWNoIGltcGxpY2l0bHkg cmVsZWFzZXMgdGhlIGNvbnRleHQuIFVzZXIgbWF5IGFsbG93IHRoZSBzY2hlZHVsZXIgdG8NCj4g ICsgKiByZWxlYXNlIHRoZSBjb250ZXh0IGVhcmxpZXIgdGhhbiB0aGF0IGJ5IGludm9raW5nIHJ0 ZV9ldmVudF9lbnF1ZXVlX2J1cnN0KCkNCj4gICsgKiB3aXRoIFJURV9FVkVOVF9PUF9SRUxFQVNF IG9wZXJhdGlvbi4NCj4gICsgKg0KPiAgKyAqIEBzZWUgcnRlX2V2ZW50X3F1ZXVlX3NldHVwKCks IHJ0ZV9ldmVudF9kZXF1ZXVlX2J1cnN0KCksDQo+ICBSVEVfRVZFTlRfT1BfUkVMRUFTRQ0KPiAg KyAqLw0KPiAgKw0KPiAgKyNkZWZpbmUgUlRFX1NDSEVEX1RZUEVfUEFSQUxMRUwgICAgICAgICAy DQo+ICArLyoqPCBQYXJhbGxlbCBzY2hlZHVsaW5nDQo+ICArICoNCj4gICsgKiBUaGUgc2NoZWR1 bGVyIHBlcmZvcm1zIHByaW9yaXR5IHNjaGVkdWxpbmcsIGxvYWQgYmFsYW5jaW5nLCBldGMuIGZ1 bmN0aW9ucw0KPiAgKyAqIGJ1dCBkb2VzIG5vdCBwcm92aWRlIGFkZGl0aW9uYWwgZXZlbnQgc3lu Y2hyb25pemF0aW9uIG9yIG9yZGVyaW5nLg0KPiAgKyAqIEl0IGlzIGZyZWUgdG8gc2NoZWR1bGUg ZXZlbnRzIGZyb20gYSBzaW5nbGUgcGFyYWxsZWwgZmxvdyBvZiBhbiBldmVudCBxdWV1ZQ0KPiAg KyAqIHRvIG11bHRpcGxlIGV2ZW50cyBwb3J0cyBmb3IgY29uY3VycmVudCBwcm9jZXNzaW5nLg0K PiAgKyAqIFRoZSBhcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZmxvdyBjb250ZXh0IHN5 bmNocm9uaXphdGlvbiBhbmQNCj4gICsgKiBldmVudCBvcmRlcmluZyAoU1cgc3luY2hyb25pemF0 aW9uKS4NCj4gICsgKg0KPiAgKyAqIEBzZWUgcnRlX2V2ZW50X3F1ZXVlX3NldHVwKCksIHJ0ZV9l dmVudF9kZXF1ZXVlX2J1cnN0KCkNCj4gICsgKi8NCj4gICsNCj4gICsvKiBFdmVudCB0eXBlcyB0 byBjbGFzc2lmeSB0aGUgZXZlbnQgc291cmNlICovDQo+ICArI2RlZmluZSBSVEVfRVZFTlRfVFlQ RV9FVEhERVYgICAgICAgICAgIDB4MA0KPiAgKy8qKjwgVGhlIGV2ZW50IGdlbmVyYXRlZCBmcm9t IGV0aGRldiBzdWJzeXN0ZW0gKi8NCj4gICsjZGVmaW5lIFJURV9FVkVOVF9UWVBFX0NSWVBUT0RF ViAgICAgICAgMHgxDQo+ICArLyoqPCBUaGUgZXZlbnQgZ2VuZXJhdGVkIGZyb20gY3J5cG9kZXYg c3Vic3lzdGVtICovDQo+ICArI2RlZmluZSBSVEVfRVZFTlRfVFlQRV9USU1FUkRFViAgICAgICAg IDB4Mg0KPiAgKy8qKjwgVGhlIGV2ZW50IGdlbmVyYXRlZCBmcm9tIHRpbWVyZGV2IHN1YnN5c3Rl bSAqLw0KPiAgKyNkZWZpbmUgUlRFX0VWRU5UX1RZUEVfQ1BVICAgICAgICAgICAgICAweDMNCj4g ICsvKio8IFRoZSBldmVudCBnZW5lcmF0ZWQgZnJvbSBjcHUgZm9yIHBpcGVsaW5pbmcuDQo+ICAr ICogQXBwbGljYXRpb24gbWF5IHVzZSAqc3ViX2V2ZW50X3R5cGUqIHRvIGZ1cnRoZXIgY2xhc3Np ZnkgdGhlIGV2ZW50DQo+ICArICovDQo+ICArI2RlZmluZSBSVEVfRVZFTlRfVFlQRV9NQVggICAg ICAgICAgICAgIDB4MTANCj4gICsvKio8IE1heGltdW0gbnVtYmVyIG9mIGV2ZW50IHR5cGVzICov DQo+ICArDQo+ICArLyogRXZlbnQgZW5xdWV1ZSBvcGVyYXRpb25zICovDQo+ICArI2RlZmluZSBS VEVfRVZFTlRfT1BfTkVXICAgICAgICAgICAgICAgIDANCj4gICsvKio8IFRoZSBldmVudCBwcm9k dWNlcnMgdXNlIHRoaXMgb3BlcmF0aW9uIHRvIGluamVjdCBhIG5ldyBldmVudCB0byB0aGUNCj4g ICsgKiBldmVudCBkZXZpY2UuDQo+ICArICovDQo+ICArI2RlZmluZSBSVEVfRVZFTlRfT1BfRk9S V0FSRCAgICAgICAgICAgIDENCj4gICsvKio8IFRoZSBDUFUgdXNlIHRoaXMgb3BlcmF0aW9uIHRv IGZvcndhcmQgdGhlIGV2ZW50IHRvIGRpZmZlcmVudCBldmVudA0KPiAgcXVldWUgb3INCj4gICsg KiBjaGFuZ2UgdG8gbmV3IGFwcGxpY2F0aW9uIHNwZWNpZmljIGZsb3cgb3Igc2NoZWR1bGUgdHlw ZSB0byBlbmFibGUNCj4gICsgKiBwaXBlbGluaW5nDQo+ICArICovDQo+ICArI2RlZmluZSBSVEVf RVZFTlRfT1BfUkVMRUFTRSAgICAgICAgICAgIDINCj4gICsvKio8IFJlbGVhc2UgdGhlIGZsb3cg Y29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIHNjaGVkdWxlIHR5cGUuDQo+ICArICoNCj4gICsg KiBJZiBjdXJyZW50IGZsb3cncyBzY2hlZHVsZXIgdHlwZSBtZXRob2QgaXMgKlJURV9TQ0hFRF9U WVBFX0FUT01JQyoNCj4gICsgKiB0aGVuIHRoaXMgZnVuY3Rpb24gaGludHMgdGhlIHNjaGVkdWxl ciB0aGF0IHRoZSB1c2VyIGhhcyBjb21wbGV0ZWQgY3JpdGljYWwNCj4gICsgKiBzZWN0aW9uIHBy b2Nlc3NpbmcgaW4gdGhlIGN1cnJlbnQgYXRvbWljIGNvbnRleHQuDQo+ICArICogVGhlIHNjaGVk dWxlciBpcyBub3cgYWxsb3dlZCB0byBzY2hlZHVsZSBldmVudHMgZnJvbSB0aGUgc2FtZSBmbG93 IGZyb20NCj4gICsgKiBhbiBldmVudCBxdWV1ZSB0byBhbm90aGVyIHBvcnQuIEhvd2V2ZXIsIHRo ZSBjb250ZXh0IG1heSBiZSBzdGlsbCBoZWxkDQo+ICArICogdW50aWwgdGhlIG5leHQgcnRlX2V2 ZW50X2RlcXVldWVfYnVyc3QoKSBjYWxsLCB0aGlzIGNhbGwgYWxsb3dzIGJ1dCBkb2VzIG5vdA0K PiAgKyAqIGZvcmNlIHRoZSBzY2hlZHVsZXIgdG8gcmVsZWFzZSB0aGUgY29udGV4dCBlYXJseS4N Cj4gICsgKg0KPiAgKyAqIEVhcmx5IGF0b21pYyBjb250ZXh0IHJlbGVhc2UgbWF5IGluY3JlYXNl IHBhcmFsbGVsaXNtIGFuZCB0aHVzIHN5c3RlbQ0KPiAgKyAqIHBlcmZvcm1hbmNlLCBidXQgdGhl IHVzZXIgbmVlZHMgdG8gZGVzaWduIGNhcmVmdWxseSB0aGUgc3BsaXQgaW50byBjcml0aWNhbA0K PiAgKyAqIHZzIG5vbi1jcml0aWNhbCBzZWN0aW9ucy4NCj4gICsgKg0KPiAgKyAqIElmIGN1cnJl bnQgZmxvdydzIHNjaGVkdWxlciB0eXBlIG1ldGhvZCBpcyAqUlRFX1NDSEVEX1RZUEVfT1JERVJF RCoNCj4gICsgKiB0aGVuIHRoaXMgZnVuY3Rpb24gaGludHMgdGhlIHNjaGVkdWxlciB0aGF0IHRo ZSB1c2VyIGhhcyBkb25lIGFsbCB0aGF0IG5lZWQNCj4gICsgKiB0byBtYWludGFpbiBldmVudCBv cmRlciBpbiB0aGUgY3VycmVudCBvcmRlcmVkIGNvbnRleHQuDQo+ICArICogVGhlIHNjaGVkdWxl ciBpcyBhbGxvd2VkIHRvIHJlbGVhc2UgdGhlIG9yZGVyZWQgY29udGV4dCBvZiB0aGlzIHBvcnQg YW5kDQo+ICArICogYXZvaWQgcmVvcmRlcmluZyBhbnkgZm9sbG93aW5nIGVucXVldWVzLg0KPiAg KyAqDQo+ICArICogRWFybHkgb3JkZXJlZCBjb250ZXh0IHJlbGVhc2UgbWF5IGluY3JlYXNlIHBh cmFsbGVsaXNtIGFuZCB0aHVzIHN5c3RlbQ0KPiAgKyAqIHBlcmZvcm1hbmNlLg0KPiAgKyAqDQo+ ICArICogSWYgY3VycmVudCBmbG93J3Mgc2NoZWR1bGVyIHR5cGUgbWV0aG9kIGlzICpSVEVfU0NI RURfVFlQRV9QQVJBTExFTCoNCj4gICsgKiBvciBubyBzY2hlZHVsaW5nIGNvbnRleHQgaXMgaGVs ZCB0aGVuIHRoaXMgZnVuY3Rpb24gbWF5IGJlIGFuIE5PT1AsDQo+ICArICogZGVwZW5kaW5nIG9u IHRoZSBpbXBsZW1lbnRhdGlvbi4NCj4gICsgKg0KPiAgKyAqLw0KPiAgKw0KPiAgKy8qKg0KPiAg KyAqIFRoZSBnZW5lcmljICpydGVfZXZlbnQqIHN0cnVjdHVyZSB0byBob2xkIHRoZSBldmVudCBh dHRyaWJ1dGVzDQo+ICArICogZm9yIGRlcXVldWUgYW5kIGVucXVldWUgb3BlcmF0aW9uDQo+ICAr ICovDQo+ICArc3RydWN0IHJ0ZV9ldmVudCB7DQo+ICArICAgIC8qKiBXT1JEMCAqLw0KPiAgKyAg ICBSVEVfU1REX0MxMQ0KPiAgKyAgICB1bmlvbiB7DQo+ICArICAgICAgICAgICAgdWludDY0X3Qg ZXZlbnQ7DQo+ICArICAgICAgICAgICAgLyoqIEV2ZW50IGF0dHJpYnV0ZXMgZm9yIGRlcXVldWUg b3IgZW5xdWV1ZSBvcGVyYXRpb24gKi8NCj4gICsgICAgICAgICAgICBzdHJ1Y3Qgew0KPiAgKyAg ICAgICAgICAgICAgICAgICAgdWludDMyX3QgZmxvd19pZDoyMDsNCj4gICsgICAgICAgICAgICAg ICAgICAgIC8qKjwgVGFyZ2V0ZWQgZmxvdyBpZGVudGlmaWVyIGZvciB0aGUgZW5xdWV1ZSBhbmQN Cj4gICsgICAgICAgICAgICAgICAgICAgICAqIGRlcXVldWUgb3BlcmF0aW9uLg0KPiAgKyAgICAg ICAgICAgICAgICAgICAgICogVGhlIHZhbHVlIG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mDQo+ICAr ICAgICAgICAgICAgICAgICAgICAgKiBbMCwgbmJfZXZlbnRfcXVldWVfZmxvd3MgLSAxXSB3aGlj aA0KPiAgKyAgICAgICAgICAgICAgICAgICAgICogcHJldmlvdXNseSBzdXBwbGllZCB0byBydGVf ZXZlbnRfZGV2X2NvbmZpZ3VyZSgpLg0KPiAgKyAgICAgICAgICAgICAgICAgICAgICovDQo+ICAr ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzdWJfZXZlbnRfdHlwZTo4Ow0KPiAgKyAgICAg ICAgICAgICAgICAgICAgLyoqPCBTdWItZXZlbnQgdHlwZXMgYmFzZWQgb24gdGhlIGV2ZW50IHNv dXJjZS4NCj4gICsgICAgICAgICAgICAgICAgICAgICAqIEBzZWUgUlRFX0VWRU5UX1RZUEVfQ1BV DQo+ICArICAgICAgICAgICAgICAgICAgICAgKi8NCj4gICsgICAgICAgICAgICAgICAgICAgIHVp bnQzMl90IGV2ZW50X3R5cGU6NDsNCj4gICsgICAgICAgICAgICAgICAgICAgIC8qKjwgRXZlbnQg dHlwZSB0byBjbGFzc2lmeSB0aGUgZXZlbnQgc291cmNlLg0KPiAgKyAgICAgICAgICAgICAgICAg ICAgICogQHNlZSBSVEVfRVZFTlRfVFlQRV9FVEhERVYsDQo+ICAoUlRFX0VWRU5UX1RZUEVfKikN Cj4gICsgICAgICAgICAgICAgICAgICAgICAqLw0KPiAgKyAgICAgICAgICAgICAgICAgICAgdWlu dDhfdCBvcDoyOw0KPiAgKyAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgdHlwZSBvZiBldmVu dCBlbnF1ZXVlIG9wZXJhdGlvbiAtDQo+ICBuZXcvZm9yd2FyZC8NCj4gICsgICAgICAgICAgICAg ICAgICAgICAqIGV0Yy5UaGlzIGZpZWxkIGlzIG5vdCBwcmVzZXJ2ZWQgYWNyb3NzIGFuIGluc3Rh bmNlDQo+ICArICAgICAgICAgICAgICAgICAgICAgKiBhbmQgaXMgdW5kZWZpbmVkIG9uIGRlcXVl dWUuDQo+ICArICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIFJURV9FVkVOVF9PUF9ORVcsIChS VEVfRVZFTlRfT1BfKikNCj4gICsgICAgICAgICAgICAgICAgICAgICAqLw0KPiAgKyAgICAgICAg ICAgICAgICAgICAgdWludDhfdCByc3ZkOjQ7DQo+ICArICAgICAgICAgICAgICAgICAgICAvKio8 IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovDQo+ICArICAgICAgICAgICAgICAgICAgICB1aW50 OF90IHNjaGVkX3R5cGU6MjsNCj4gICsgICAgICAgICAgICAgICAgICAgIC8qKjwgU2NoZWR1bGVy IHN5bmNocm9uaXphdGlvbiB0eXBlDQo+ICAoUlRFX1NDSEVEX1RZUEVfKikNCj4gICsgICAgICAg ICAgICAgICAgICAgICAqIGFzc29jaWF0ZWQgd2l0aCBmbG93IGlkIG9uIGEgZ2l2ZW4gZXZlbnQg cXVldWUNCj4gICsgICAgICAgICAgICAgICAgICAgICAqIGZvciB0aGUgZW5xdWV1ZSBhbmQgZGVx dWV1ZSBvcGVyYXRpb24uDQo+ICArICAgICAgICAgICAgICAgICAgICAgKi8NCj4gICsgICAgICAg ICAgICAgICAgICAgIHVpbnQ4X3QgcXVldWVfaWQ7DQo+ICArICAgICAgICAgICAgICAgICAgICAv Kio8IFRhcmdldGVkIGV2ZW50IHF1ZXVlIGlkZW50aWZpZXIgZm9yIHRoZSBlbnF1ZXVlDQo+ICBv cg0KPiAgKyAgICAgICAgICAgICAgICAgICAgICogZGVxdWV1ZSBvcGVyYXRpb24uDQo+ICArICAg ICAgICAgICAgICAgICAgICAgKiBUaGUgdmFsdWUgbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YNCj4g ICsgICAgICAgICAgICAgICAgICAgICAqIFswLCBuYl9ldmVudF9xdWV1ZXMgLSAxXSB3aGljaCBw cmV2aW91c2x5IHN1cHBsaWVkDQo+ICB0bw0KPiAgKyAgICAgICAgICAgICAgICAgICAgICogcnRl X2V2ZW50X2Rldl9jb25maWd1cmUoKS4NCj4gICsgICAgICAgICAgICAgICAgICAgICAqLw0KPiAg KyAgICAgICAgICAgICAgICAgICAgdWludDhfdCBwcmlvcml0eTsNCj4gICsgICAgICAgICAgICAg ICAgICAgIC8qKjwgRXZlbnQgcHJpb3JpdHkgcmVsYXRpdmUgdG8gb3RoZXIgZXZlbnRzIGluIHRo ZQ0KPiAgKyAgICAgICAgICAgICAgICAgICAgICogZXZlbnQgcXVldWUuIFRoZSByZXF1ZXN0ZWQg cHJpb3JpdHkgc2hvdWxkIGluIHRoZQ0KPiAgKyAgICAgICAgICAgICAgICAgICAgICogcmFuZ2Ug b2YgIFtSVEVfRVZFTlRfREVWX1BSSU9SSVRZX0hJR0hFU1QsDQo+ICArICAgICAgICAgICAgICAg ICAgICAgKiBSVEVfRVZFTlRfREVWX1BSSU9SSVRZX0xPV0VTVF0uDQo+ICArICAgICAgICAgICAg ICAgICAgICAgKiBUaGUgaW1wbGVtZW50YXRpb24gc2hhbGwgbm9ybWFsaXplIHRoZSByZXF1ZXN0 ZWQNCj4gICsgICAgICAgICAgICAgICAgICAgICAqIHByaW9yaXR5IHRvIHN1cHBvcnRlZCBwcmlv cml0eSB2YWx1ZS4NCj4gICsgICAgICAgICAgICAgICAgICAgICAqIFZhbGlkIHdoZW4gdGhlIGRl dmljZSBoYXMNCj4gICsgICAgICAgICAgICAgICAgICAgICAqIFJURV9FVkVOVF9ERVZfQ0FQX0VW RU5UX1FPUyBjYXBhYmlsaXR5Lg0KPiAgKyAgICAgICAgICAgICAgICAgICAgICovDQo+ICArICAg ICAgICAgICAgICAgICAgICB1aW50OF90IGltcGxfb3BhcXVlOw0KPiAgKyAgICAgICAgICAgICAg ICAgICAgLyoqPCBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBvcGFxdWUgdmFsdWUuDQo+ICArICAg ICAgICAgICAgICAgICAgICAgKiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgdXNlIHRoaXMgZmllbGQg dG8gaG9sZA0KPiAgKyAgICAgICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gc3BlY2lm aWMgdmFsdWUgdG8gc2hhcmUgYmV0d2Vlbg0KPiAgKyAgICAgICAgICAgICAgICAgICAgICogZGVx dWV1ZSBhbmQgZW5xdWV1ZSBvcGVyYXRpb24uDQo+ICArICAgICAgICAgICAgICAgICAgICAgKiBU aGUgYXBwbGljYXRpb24gc2hvdWxkIG5vdCBtb2RpZnkgdGhpcyBmaWVsZC4NCj4gICsgICAgICAg ICAgICAgICAgICAgICAqLw0KPiAgKyAgICAgICAgICAgIH07DQo+ICArICAgIH07DQo+ICArICAg IC8qKiBXT1JEMSAqLw0KPiAgKyAgICBSVEVfU1REX0MxMQ0KPiAgKyAgICB1bmlvbiB7DQo+ICAr ICAgICAgICAgICAgdWludDY0X3QgdTY0Ow0KPiAgKyAgICAgICAgICAgIC8qKjwgT3BhcXVlIDY0 LWJpdCB2YWx1ZSAqLw0KPiAgKyAgICAgICAgICAgIHZvaWQgKmV2ZW50X3B0cjsNCj4gICsgICAg ICAgICAgICAvKio8IE9wYXF1ZSBldmVudCBwb2ludGVyICovDQo+ICArICAgICAgICAgICAgc3Ry dWN0IHJ0ZV9tYnVmICptYnVmOw0KPiAgKyAgICAgICAgICAgIC8qKjwgbWJ1ZiBwb2ludGVyIGlm IGRlcXVldWVkIGV2ZW50IGlzIGFzc29jaWF0ZWQgd2l0aCBtYnVmDQo+ICAqLw0KPiAgKyAgICB9 Ow0KPiAgK307DQo+ICArDQo+ICArLyoqDQo+ICArICogU2NoZWR1bGUgb25lIG9yIG1vcmUgZXZl bnRzIGluIHRoZSBldmVudCBkZXYuDQo+ICArICoNCj4gICsgKiBBbiBldmVudCBkZXYgaW1wbGVt ZW50YXRpb24gbWF5IGRlZmluZSB0aGlzIGlzIGEgTk9PUCwgZm9yIGluc3RhbmNlIGlmDQo+ICAr ICogdGhlIGV2ZW50IGRldiBwZXJmb3JtcyBpdHMgc2NoZWR1bGluZyBpbiBoYXJkd2FyZS4NCj4g ICsgKg0KPiAgKyAqIEBwYXJhbSBkZXZfaWQNCj4gICsgKiAgIFRoZSBpZGVudGlmaWVyIG9mIHRo ZSBkZXZpY2UuDQo+ICArICovDQo+ICArdm9pZA0KPiAgK3J0ZV9ldmVudF9zY2hlZHVsZSh1aW50 OF90IGRldl9pZCk7DQo+ICArDQo+ICArLyoqDQo+ICArICogRW5xdWV1ZSBhIGJ1cnN0IG9mIGV2 ZW50cyBvYmplY3RzIG9yIGFuIGV2ZW50IG9iamVjdCBzdXBwbGllZCBpbg0KPiAgKnJ0ZV9ldmVu dCoNCj4gICsgKiBzdHJ1Y3R1cmUgb24gYW4gIGV2ZW50IGRldmljZSBkZXNpZ25hdGVkIGJ5IGl0 cyAqZGV2X2lkKiB0aHJvdWdoIHRoZSBldmVudA0KPiAgKyAqIHBvcnQgc3BlY2lmaWVkIGJ5ICpw b3J0X2lkKi4gRWFjaCBldmVudCBvYmplY3Qgc3BlY2lmaWVzIHRoZSBldmVudCBxdWV1ZSBvbg0K PiAgKyAqIHdoaWNoIGl0IHdpbGwgYmUgZW5xdWV1ZWQuDQo+ICArICoNCj4gICsgKiBUaGUgKm5i X2V2ZW50cyogcGFyYW1ldGVyIGlzIHRoZSBudW1iZXIgb2YgZXZlbnQgb2JqZWN0cyB0byBlbnF1 ZXVlDQo+ICB3aGljaCBhcmUNCj4gICsgKiBzdXBwbGllZCBpbiB0aGUgKmV2KiBhcnJheSBvZiAq cnRlX2V2ZW50KiBzdHJ1Y3R1cmUuDQo+ICArICoNCj4gICsgKiBUaGUgcnRlX2V2ZW50X2VucXVl dWVfYnVyc3QoKSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YNCj4gICsgKiBldmVudHMg b2JqZWN0cyBpdCBhY3R1YWxseSBlbnF1ZXVlZC4gQSByZXR1cm4gdmFsdWUgZXF1YWwgdG8gKm5i X2V2ZW50cyoNCj4gICsgKiBtZWFucyB0aGF0IGFsbCBldmVudCBvYmplY3RzIGhhdmUgYmVlbiBl bnF1ZXVlZC4NCj4gICsgKg0KPiAgKyAqIEBwYXJhbSBkZXZfaWQNCj4gICsgKiAgIFRoZSBpZGVu dGlmaWVyIG9mIHRoZSBkZXZpY2UuDQo+ICArICogQHBhcmFtIHBvcnRfaWQNCj4gICsgKiAgIFRo ZSBpZGVudGlmaWVyIG9mIHRoZSBldmVudCBwb3J0Lg0KPiAgKyAqIEBwYXJhbSBldg0KPiAgKyAq ICAgUG9pbnRzIHRvIGFuIGFycmF5IG9mICpuYl9ldmVudHMqIG9iamVjdHMgb2YgdHlwZSAqcnRl X2V2ZW50KiBzdHJ1Y3R1cmUNCj4gICsgKiAgIHdoaWNoIGNvbnRhaW4gdGhlIGV2ZW50IG9iamVj dCBlbnF1ZXVlIG9wZXJhdGlvbnMgdG8gYmUgcHJvY2Vzc2VkLg0KPiAgKyAqIEBwYXJhbSBuYl9l dmVudHMNCj4gICsgKiAgIFRoZSBudW1iZXIgb2YgZXZlbnQgb2JqZWN0cyB0byBlbnF1ZXVlLCB0 eXBpY2FsbHkgbnVtYmVyIG9mDQo+ICArICogICBydGVfZXZlbnRfcG9ydF9lbnF1ZXVlX2RlcHRo KCkgYXZhaWxhYmxlIGZvciB0aGlzIHBvcnQuDQo+ICArICoNCj4gICsgKiBAcmV0dXJuDQo+ICAr ICogICBUaGUgbnVtYmVyIG9mIGV2ZW50IG9iamVjdHMgYWN0dWFsbHkgZW5xdWV1ZWQgb24gdGhl IGV2ZW50IGRldmljZS4gVGhlDQo+ICArICogICByZXR1cm4gdmFsdWUgY2FuIGJlIGxlc3MgdGhh biB0aGUgdmFsdWUgb2YgdGhlICpuYl9ldmVudHMqIHBhcmFtZXRlcg0KPiAgd2hlbg0KPiAgKyAq ICAgdGhlIGV2ZW50IGRldmljZXMgcXVldWUgaXMgZnVsbCBvciBpZiBpbnZhbGlkIHBhcmFtZXRl cnMgYXJlIHNwZWNpZmllZCBpbiBhDQo+ICArICogICAqcnRlX2V2ZW50Ki4gSWYgcmV0dXJuIHZh bHVlIGlzIGxlc3MgdGhhbiAqbmJfZXZlbnRzKiwgdGhlIHJlbWFpbmluZyBldmVudHMNCj4gICsg KiAgIGF0IHRoZSBlbmQgb2YgZXZbXSBhcmUgbm90IGNvbnN1bWVkLGFuZCB0aGUgY2FsbGVyIGhh cyB0byB0YWtlIGNhcmUgb2YNCj4gIHRoZW0NCj4gICsgKg0KPiAgKyAqIEBzZWUgcnRlX2V2ZW50 X3BvcnRfZW5xdWV1ZV9kZXB0aCgpDQo+ICArICovDQo+ICArdWludDE2X3QNCj4gICtydGVfZXZl bnRfZW5xdWV1ZV9idXJzdCh1aW50OF90IGRldl9pZCwgdWludDhfdCBwb3J0X2lkLA0KPiAgKyAg ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9ldmVudCBldltdLCB1aW50MTZfdCBu Yl9ldmVudHMpOw0KDQpUaGVyZSBhcmUgYSBudW1iZXIgb2YgcmVhc29ucyB0aGlzIG9wZXJhdGlv biBjb3VsZCBmYWlsIHRvIGVucXVldWUgYWxsIHRoZSBldmVudHMsIGluY2x1ZGluZzoNCi0gQmFj a3ByZXNzdXJlDQotIEludmFsaWQgcG9ydCBJRA0KLSBJbnZhbGlkIHF1ZXVlIElEDQotIEludmFs aWQgc2NoZWQgdHlwZSB3aGVuIGEgcXVldWUgaXMgY29uZmlndXJlZCBmb3IgQVRPTUlDX09OTFks IE9SREVSRURfT05MWSwgb3IgUEFSQUxMRUxfT05MWQ0KLSAuLi4NCg0KVGhlIGN1cnJlbnQgQVBJ IGRvZXNuJ3QgcHJvdmlkZSBhIHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBj YXVzZSBvZiBhIGZhaWx1cmUuIFRoaXMgaXMgYSBwYXJ0aWN1bGFyIGlzc3VlIG9uIGV2ZW50IFBN RHMgdGhhdCBjYW4gYmFja3ByZXNzdXJlLCB3aGVyZSB0aGUgYXBwIG1heSB3YW50IHRvIHRyZWF0 IHRoYXQgY2FzZSBkaWZmZXJlbnRseSB0aGFuIHRoZSBvdGhlciBmYWlsdXJlIGNhc2VzLg0KDQpD b3VsZCB3ZSBjaGFuZ2UgdGhlIHJldHVybiB0eXBlIHRvIGludDE2X3QsIGFuZCBkZWZpbmUgYSBz ZXQgb2YgZXJyb3IgY2FzZXMgKGUuZy4gLUVOT1NQQyBmb3IgYmFja3ByZXNzdXJlLCAtRUlOVkFM IGZvciBhbiBpbnZhbGlkIGFyZ3VtZW50KT8gKFdpdGggY29ycmVzcG9uZGluZyBjaGFuZ2VzIG5l ZWRlZCBpbiB0aGUgUE1EIEFQSSkgU2ltaWxhcmx5IHdlIGNvdWxkIGNoYW5nZSBydGVfZXZlbnRf ZGVxdWV1ZV9idXJzdCgpIHRvIHJldHVybiBhbiBpbnQxNl90LCB3aXRoIC1FSU5WQUwgYXMgYSBw b3NzaWJsZSBlcnJvciBjYXNlLg0K