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 A4D9F4AC7 for ; Fri, 15 Jul 2016 11:23:31 +0200 (CEST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga101.jf.intel.com with ESMTP; 15 Jul 2016 02:23:31 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,367,1464678000"; d="scan'208";a="1022250878" Received: from irsmsx109.ger.corp.intel.com ([163.33.3.23]) by fmsmga002.fm.intel.com with ESMTP; 15 Jul 2016 02:23:27 -0700 Received: from irsmsx102.ger.corp.intel.com ([169.254.2.10]) by IRSMSX109.ger.corp.intel.com ([169.254.13.193]) with mapi id 14.03.0248.002; Fri, 15 Jul 2016 10:23:27 +0100 From: "Chandran, Sugesh" To: 'Adrien Mazarguil' CC: "dev@dpdk.org" , Thomas Monjalon , "Zhang, Helin" , "Wu, Jingjing" , Rasesh Mody , "Ajit Khaparde" , Rahul Lakkireddy , "Lu, Wenzhuo" , "Jan Medala" , John Daley , "Chen, Jing D" , "Ananyev, Konstantin" , Matej Vido , "Alejandro Lucero" , Sony Chacko , Jerin Jacob , "De Lara Guarch, Pablo" , Olga Shern Thread-Topic: [dpdk-dev] [RFC] Generic flow director/filtering/classification API Thread-Index: AQHR1ul13SVB/Bo7y0+HNDeMrG3/bKANL2ZggAFEKwCABIVXkIADy76AgAFiwZA= Date: Fri, 15 Jul 2016 09:23:26 +0000 Message-ID: <2EF2F5C0CC56984AA024D0B180335FCB13DEE55F@IRSMSX102.ger.corp.intel.com> References: <20160705181646.GO7621@6wind.com> <2EF2F5C0CC56984AA024D0B180335FCB13DEA331@IRSMSX102.ger.corp.intel.com> <20160708130310.GD7621@6wind.com> <2EF2F5C0CC56984AA024D0B180335FCB13DEB236@IRSMSX102.ger.corp.intel.com> <20160713200327.GC7621@6wind.com> In-Reply-To: <20160713200327.GC7621@6wind.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [163.33.239.181] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [RFC] Generic flow director/filtering/classification API X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jul 2016 09:23:32 -0000 VGhhbmsgeW91IEFkcmllbiwNClBsZWFzZSBmaW5kIGJlbG93IGZvciBzb21lIG1vcmUgY29tbWVu dHMvaW5wdXRzDQoNCkxldCBtZSBrbm93IHlvdXIgdGhvdWdodHMgb24gdGhpcy4NCg0KDQpSZWdh cmRzDQpfU3VnZXNoDQoNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBB ZHJpZW4gTWF6YXJndWlsIFttYWlsdG86YWRyaWVuLm1hemFyZ3VpbEA2d2luZC5jb21dDQo+IFNl bnQ6IFdlZG5lc2RheSwgSnVseSAxMywgMjAxNiA5OjAzIFBNDQo+IFRvOiBDaGFuZHJhbiwgU3Vn ZXNoIDxzdWdlc2guY2hhbmRyYW5AaW50ZWwuY29tPg0KPiBDYzogZGV2QGRwZGsub3JnOyBUaG9t YXMgTW9uamFsb24gPHRob21hcy5tb25qYWxvbkA2d2luZC5jb20+Ow0KPiBaaGFuZywgSGVsaW4g PGhlbGluLnpoYW5nQGludGVsLmNvbT47IFd1LCBKaW5namluZw0KPiA8amluZ2ppbmcud3VAaW50 ZWwuY29tPjsgUmFzZXNoIE1vZHkgPHJhc2VzaC5tb2R5QHFsb2dpYy5jb20+OyBBaml0DQo+IEto YXBhcmRlIDxhaml0LmtoYXBhcmRlQGJyb2FkY29tLmNvbT47IFJhaHVsIExha2tpcmVkZHkNCj4g PHJhaHVsLmxha2tpcmVkZHlAY2hlbHNpby5jb20+OyBMdSwgV2Vuemh1byA8d2Vuemh1by5sdUBp bnRlbC5jb20+Ow0KPiBKYW4gTWVkYWxhIDxqYW5Ac2VtaWhhbGYuY29tPjsgSm9obiBEYWxleSA8 am9obmRhbGVAY2lzY28uY29tPjsgQ2hlbiwNCj4gSmluZyBEIDxqaW5nLmQuY2hlbkBpbnRlbC5j b20+OyBBbmFueWV2LCBLb25zdGFudGluDQo+IDxrb25zdGFudGluLmFuYW55ZXZAaW50ZWwuY29t PjsgTWF0ZWogVmlkbyA8bWF0ZWp2aWRvQGdtYWlsLmNvbT47DQo+IEFsZWphbmRybyBMdWNlcm8g PGFsZWphbmRyby5sdWNlcm9AbmV0cm9ub21lLmNvbT47IFNvbnkgQ2hhY2tvDQo+IDxzb255LmNo YWNrb0BxbG9naWMuY29tPjsgSmVyaW4gSmFjb2INCj4gPGplcmluLmphY29iQGNhdml1bW5ldHdv cmtzLmNvbT47IERlIExhcmEgR3VhcmNoLCBQYWJsbw0KPiA8cGFibG8uZGUubGFyYS5ndWFyY2hA aW50ZWwuY29tPjsgT2xnYSBTaGVybiA8b2xnYXNAbWVsbGFub3guY29tPg0KPiBTdWJqZWN0OiBS ZTogW2RwZGstZGV2XSBbUkZDXSBHZW5lcmljIGZsb3cgZGlyZWN0b3IvZmlsdGVyaW5nL2NsYXNz aWZpY2F0aW9uDQo+IEFQSQ0KPiANCj4gT24gTW9uLCBKdWwgMTEsIDIwMTYgYXQgMTA6NDI6MzZB TSArMDAwMCwgQ2hhbmRyYW4sIFN1Z2VzaCB3cm90ZToNCj4gPiBIaSBBZHJpZW4sDQo+ID4NCj4g PiBUaGFuayB5b3UgZm9yIHlvdXIgcmVzcG9uc2UsDQo+ID4gUGxlYXNlIHNlZSBteSBjb21tZW50 cyBpbmxpbmUuDQo+IA0KPiBIaSBTdWdlc2gsDQo+IA0KPiBTb3JyeSBmb3IgdGhlIGRlbGF5LCBw bGVhc2Ugc2VlIG15IGFuc3dlcnMgaW5saW5lIGFzIHdlbGwuDQo+IA0KPiBbLi4uXQ0KPiA+ID4g PiA+IEZsb3cgZGlyZWN0b3INCj4gPiA+ID4gPiAtLS0tLS0tLS0tLS0tDQo+ID4gPiA+ID4NCj4g PiA+ID4gPiBGbG93IGRpcmVjdG9yIChGRElSKSBpcyB0aGUgbmFtZSBvZiB0aGUgbW9zdCBjYXBh YmxlIGZpbHRlcg0KPiA+ID4gPiA+IHR5cGUsIHdoaWNoIGNvdmVycyBtb3N0IGZlYXR1cmVzIG9m ZmVyZWQgYnkgb3RoZXJzLiBBcyBzdWNoLCBpdA0KPiA+ID4gPiA+IGlzIHRoZSBtb3N0DQo+ID4g PiB3aWRlc3ByZWFkDQo+ID4gPiA+ID4gaW4gUE1EcyB0aGF0IHN1cHBvcnQgZmlsdGVyaW5nIChp LmUuIGFsbCBvZiB0aGVtIGJlc2lkZXMgKiplMTAwMCoqKS4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ IEl0IGlzIGFsc28gdGhlIG9ubHkgdHlwZSB0aGF0IGFsbG93cyBhbiBhcmJpdHJhcnkgMzIgYml0 cyB2YWx1ZQ0KPiA+ID4gPiA+IHByb3ZpZGVkIGJ5IGFwcGxpY2F0aW9ucyB0byBiZSBhdHRhY2hl ZCB0byBhIGZpbHRlciBhbmQgcmV0dXJuZWQNCj4gPiA+ID4gPiB3aXRoIG1hdGNoaW5nIHBhY2tl dHMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZSBkZXN0aW5hdGlvbiBxdWV1ZSB0bw0KPiByZWNv Z25pemUgZmxvd3MuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBVbmZvcnR1bmF0ZWx5LCBldmVuIEZE SVIgcmVxdWlyZXMgYXBwbGljYXRpb25zIHRvIGJlIGF3YXJlIG9mDQo+ID4gPiA+ID4gbG93LWxl dmVsIGNhcGFiaWxpdGllcyBhbmQgbGltaXRhdGlvbnMgKG1vc3Qgb2Ygd2hpY2ggY29tZQ0KPiA+ ID4gPiA+IGRpcmVjdGx5IGZyb20gKippeGdiZSoqDQo+ID4gPiBhbmQNCj4gPiA+ID4gPiAqKmk0 MGUqKik6DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAtIEJpdG1hc2tzIGFyZSBzZXQgZ2xvYmFsbHkg cGVyIGRldmljZSAocG9ydD8pLCBub3QgcGVyIGZpbHRlci4NCj4gPiA+ID4gW1N1Z2VzaF0gVGhp cyBtZWFucyBhcHBsaWNhdGlvbiBjYW5ub3QgZGVmaW5lIGZpbHRlcnMgdGhhdCBtYXRjaGVzDQo+ ID4gPiA+IG9uDQo+ID4gPiBhcmJpdHJhcnkgZGlmZmVyZW50IG9mZnNldHM/DQo+ID4gPiA+IElm IHRoYXTigJlzIHRoZSBjYXNlLCBJIGFzc3VtZSB0aGUgYXBwbGljYXRpb24gaGFzIHRvIHByb2dy YW0NCj4gPiA+ID4gYml0bWFzayBpbg0KPiA+ID4gYWR2YW5jZS4gT3RoZXJ3aXNlIGhvdw0KPiA+ ID4gPiB0aGUgQVBJIGZyYW1ld29yayBkZWR1Y2UgdGhpcyBiaXRtYXNrIGluZm9ybWF0aW9uIGZy b20gdGhlIHJ1bGVzPz8NCj4gPiA+ID4gSXRzDQo+ID4gPiBub3QgdmVyeSBjbGVhciB0byBtZQ0K PiA+ID4gPiB0aGF0IGhvdyBhcHBsaWNhdGlvbiBwYXNzIGRvd24gdGhlIGJpdG1hc2sgaW5mb3Jt YXRpb24gZm9yDQo+ID4gPiA+IG11bHRpcGxlIGZpbHRlcnMNCj4gPiA+IG9uIHNhbWUgcG9ydD8N Cj4gPiA+DQo+ID4gPiBUaGlzIGlzIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGZsb3cgZGlyZWN0 b3IgY3VycmVudGx5IHdvcmtzLA0KPiA+ID4gcGVyaGFwcyBzb21lb21lIG1vcmUgZmFtaWxpYXIg d2l0aCBpdCBjYW4gYW5zd2VyIHRoaXMgcXVlc3Rpb24gYmV0dGVyDQo+IHRoYW4gSSBjb3VsZC4N Cj4gPiA+DQo+ID4gPiBMZXQgbWUgdGFrZSBhbiBleGFtcGxlLCBpZiBwYXJ0aWN1bGFyIGRldmlj ZSBjYW4gb25seSBoYW5kbGUgYQ0KPiA+ID4gc2luZ2xlIElQdjQgbWFzayBjb21tb24gdG8gYWxs IGZsb3cgcnVsZXMgKHNheSBvbmx5IHRvIG1hdGNoDQo+ID4gPiBkZXN0aW5hdGlvbiBhZGRyZXNz ZXMpLCB1cGRhdGluZyB0aGF0IG1hc2sgdG8gYWxzbyBtYXRjaCB0aGUgc291cmNlDQo+ID4gPiBh ZGRyZXNzIGFmZmVjdHMgYWxsIGRlZmluZWQgYW5kIGZ1dHVyZSBmbG93IHJ1bGVzIHNpbXVsdGFu ZW91c2x5Lg0KPiA+ID4NCj4gPiA+IFRoYXQgaXMgaG93IEZESVIgY3VycmVudGx5IHdvcmtzIGFu ZCBJIHRoaW5rIGl0IGlzIHdyb25nLCBhcyBpdA0KPiA+ID4gcGVuYWxpemVzIGRldmljZXMgdGhh dCBkbyBzdXBwb3J0IGluZGl2aWR1YWwgYml0LW1hc2tzIHBlciBydWxlLCBhbmQNCj4gPiA+IGlz IGEgbGl0dGxlIGF3a3dhcmQgZnJvbSBhbiBhcHBsaWNhdGlvbiBwb2ludCBvZiB2aWV3Lg0KPiA+ ID4NCj4gPiA+IFdoYXQgSSBzdWdnZXN0IGZvciB0aGUgbmV3IEFQSSBpbnN0ZWFkIGlzIHRoZSBh YmlsaXR5IHRvIHNwZWNpZnkgb25lDQo+ID4gPiBiaXQtbWFzayBwZXIgcnVsZSwgYW5kIGxldCB0 aGUgUE1EIGRlYWwgd2l0aCBIVyBsaW1pdGF0aW9ucyBieQ0KPiA+ID4gYXV0b21hdGljYWxseSBj b25maWd1cmluZyBnbG9iYWwgYml0bWFza3MgZnJvbSB0aGUgZmlyc3QgYWRkZWQgcnVsZSwNCj4g PiA+IHRoZW4gcmVmdXNpbmcgdG8gYWRkIHN1YnNlcXVlbnQgcnVsZXMgaWYgdGhleSBzcGVjaWZ5 IGEgY29uZmxpY3RpbmcNCj4gPiA+IGJpdC1tYXNrLiBFeGlzdGluZyBydWxlcyByZW1haW4gdW5h ZmZlY3RlZCB0aGF0IHdheSwgYW5kDQo+ID4gPiBhcHBsaWNhdGlvbnMgZG8gbm90IGhhdmUgdG8g YmUgZXh0cmEgY2F1dGlvdXMuDQo+ID4gPg0KPiA+IFtTdWdlc2hdIFRoZSBpc3N1ZSB3aXRoIHRo YXQgYXBwcm9hY2ggaXMsIHRoZSBoYXJkd2FyZSBzaW1wbHkgZGlzY2FyZHMNCj4gPiB0aGUgcnVs ZSB3aGVuIGl0IGlzIGEgc3VwZXIgc2V0IG9mIGZpcnN0IG9uZSBldmVudGhvdWdoIHRoZSBoYXJk d2FyZQ0KPiA+IGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgaXQuIEhvdyBpdHMgZ3VhcmFudGVlZCB0 aGUgZmlyc3QgcnVsZSB3aWxsIHNldA0KPiA+IHRoZSBiaXRtYXNrIGZvciBhbGwgdGhlIHN1YnNl cXVlbnQgcnVsZXMuDQo+IA0KPiBKdXN0IHRvIGNsYXJpZnksIHRoZSBBUEkgb25seSBzYXlzIHRo YXQgbmV3IHJ1bGVzIGNhbm5vdCBhZmZlY3QgZXhpc3Rpbmcgb25lcw0KPiAod2hpY2ggSSB0aGlu ayBtYWtlcyBzZW5zZSBmcm9tIGEgdXNlcidzIHBlcnNwZWN0aXZlKSwgc28gYXMgbG9uZyBhcyB0 aGUgUE1EDQo+IGRvZXMgd2hhdGV2ZXIgaXMgbmVlZGVkIHRvIG1ha2UgYWxsIHJ1bGVzIHdvcmsg dG9nZXRoZXIsIHRoZXJlIHNob3VsZCBub3QNCj4gYmUgYW55IHByb2JsZW0gd2l0aCB0aGlzIGFw cHJvYWNoLg0KPiANCj4gRXZlbiBpZiB0aGUgUE1EIGhhcyB0byB0ZW1wb3JhcmlseSByZW1vdmUg YW4gZXhpc3RpbmcgcnVsZSBhbmQgcmVjb25maWd1cmUNCj4gZ2xvYmFsIG1hc2tzIGluIG9yZGVy IHRvIGFkZCBzdWJzZXF1ZW50IHJ1bGVzLCBpdCBpcyBmaW5lIGFzIGxvbmcgYXMgcGFja2V0cw0K PiBhcmVuJ3QgbWlzZGlyZWN0ZWQgaW4gdGhlIG1lYW50aW1lICh0aGV5IG1heSBiZSBkcm9wcGVk IGlmIHRoZXJlIGlzIG5vDQo+IG90aGVyIGNob2ljZSkuDQpbU3VnZXNoXSBJIGZlZWwgdGhpcyBp cyBmaW5lLiBUaGFuayB5b3UgZm9yIGNvbmZpcm1pbmcuDQo+IA0KPiA+IEhvdyBhYm91dCBoYXZp bmcgYSBDTEFTU0lGRVJfVFlQRSBmb3IgdGhlIGNsYXNzaWZpZXIuIEV2ZXJ5IHBvcnQgY2FuDQo+ ID4gaGF2ZSBzZXQgb2Ygc3VwcG9ydGVkIGZsb3cgdHlwZXMoZm9yIGVnOiBMM19UWVBFLCBMNF9U WVBFLA0KPiA+IEw0X1RZUEVfOEJZVEVfRkxFWCwNCj4gPiBMNF9UWVBFXzE2QllURV9GTEVYKSBi YXNlZCBvbiB0aGUgdW5kZXJseWluZyBGRElSIHN1cHBvcnQuIEFwcGxpY2F0aW9uDQo+ID4gY2Fu IHF1ZXJ5IHRoaXMgYW5kIHNldCB0aGUgdHlwZSBhY2NvcmRpbmdseSB3aGlsZSBpbml0aWFsaXpp bmcgdGhlDQo+ID4gcG9ydC4gVGhpcyB3YXkgdGhlIGZpcnN0IHJ1bGUgbmVlZCBub3Qgc2V0IGFs bCB0aGUgYml0cyB0aGF0IG1heSBuZWVkZWQgaW4gdGhlDQo+IGZ1dHVyZSBydWxlcy4NCj4gDQo+ IEFnYWluIGZyb20gYSB1c2VyJ3MgUE9WLCBJIHRoaW5rIGRvaW5nIHNvIHdvdWxkIGFkZCB1bndh bnRlZCBIVy1zcGVjaWZpYw0KPiBjb21wbGV4aXR5Lg0KPiANCj4gSG93ZXZlciB0aGlzIGNvbmNl cm4gY2FuIGJlIGhhbmRsZWQgdGhyb3VnaCBhIGRpZmZlcmVudCBhcHByb2FjaC4gTGV0J3Mgc2F5 DQo+IHVzZXIgY3JlYXRlcyBhIHBhdHRlcm4gdGhhdCBvbmx5IHNwZWNpZmllcyBhIElQIGhlYWRl ciB3aXRoIGEgZ2l2ZW4gYml0LW1hc2suDQo+IA0KPiBJbiBGRElSIGxhbmd1YWdlIHRoaXMgdHJh bnNsYXRlcyB0bzoNCj4gDQo+IC0gU2V0IGdsb2JhbCBtYXNrIGZvciBJUHY0IGFjY29yZGluZ2x5 LCByZW1haW5pbmcgZ2xvYmFsIG1hc2tzIGFsbCB6ZXJvZWQNCj4gICAoYXNzdW1lZCBkZWZhdWx0 IHZhbHVlKS4NCj4gDQo+IC0gQ3JlYXRlIGFuIElQdjQgZmxvdy4NCj4gDQo+IEZyb20gbm93IG9u LCBhbGwgcnVsZXMgc3BlY2lmeWluZyBhIElQdjQgaGVhZGVyIG11c3QgaGF2ZSB0aGlzIGV4YWN0 IGJpdG1hc2sNCj4gKGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSksIG90aGVyd2lzZSB0aGV5IGNh bm5vdCBiZSBjcmVhdGVkLCBpLmUuIHRoZSBnbG9iYWwNCj4gYml0bWFzayBmb3IgSVB2NCBiZWNv bWVzIGltbXV0YWJsZS4NCj4gDQo+IE5vdyB1c2VyIGNyZWF0ZXMgYSBUQ1B2NCBydWxlIChhcyBs b25nIGFzIGl0IHVzZXMgdGhlIHNhbWUgSVB2NCBtYXNrKSwgdG8NCj4gaGFuZGxlIHRoaXMgRkRJ UiB3b3VsZDoNCj4gDQo+IC0gS2VlcCBnbG9iYWwgaW1tdXRhYmxlIG1hc2sgZm9yIElQdjQgdW5j aGFuZ2VkLCBzZXQgZ2xvYmFsIFRDUCBtYXNrDQo+ICAgYWNjb3JkaW5nIHRvIHRoZSBmbG93IHJ1 bGUuDQo+IA0KPiAtIENyZWF0ZSBhIFRDUHY0IGZsb3cuDQo+IA0KPiBGcm9tIHRoaXMgcG9pbnQg b24sIGxpa2UgSVB2NCwgc3Vic2VxdWVudCBUQ1AgcnVsZXMgbXVzdCBoYXZlIHRoaXMgZXhhY3QN Cj4gYml0bWFzayBhbmQgc28gb24gYXMgdGhlIGdsb2JhbCBiaXRtYXNrIGJlY29tZXMgaW1tdXRh YmxlLg0KPiANCj4gQmFzaWNhbGx5LCBvbmx5IHByb3RvY29sIGJpdC1tYXNrcyBhZmZlY3RlZCBi eSBleGlzdGluZyBmbG93IHJ1bGVzIGFyZQ0KPiBpbW11dGFibGUsIG90aGVycyBjYW4gYmUgY2hh bmdlZCBsYXRlci4gR2xvYmFsIGZsb3cgbWFza3MgZm9yIHByb3RvY29scw0KPiBiZWNvbWUgbXV0 YWJsZSBhZ2FpbiB3aGVuIG5vIGV4aXN0aW5nIGZsb3cgcnVsZSB1c2VzIHRoZW0uDQo+IA0KPiBE b2VzIGl0IGxvb2sgZmluZSBmb3IgeW91Pw0KW1N1Z2VzaF0gVGhpcyBsb29rcyBmaW5lIGZvciBt ZS4gDQo+IA0KPiBbLi4uXQ0KPiA+ID4gPiA+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsN Cj4gPiA+ID4gPiB8IENvcHkgdG8gcXVldWUgOCAgICAgICAgICB8DQo+ID4gPiA+ID4gKz09PT09 PT09PT0rPT09PT09PT09PT09PT09Kw0KPiA+ID4gPiA+IHwgUEFTU1RIUlUgfCAgICAgICAgICAg ICAgIHwNCj4gPiA+ID4gPiArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0rDQo+ID4gPiA+ID4g fCBRVUVVRSAgICB8IGBgcXVldWVgYCB8IDggfA0KPiA+ID4gPiA+ICstLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLSsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IGBgSURgYA0KPiA+ID4gPiA+IF5eXl5e Xg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gQXR0YWNoZXMgYSAzMiBiaXQgdmFsdWUgdG8gcGFja2V0 cy4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKw0KPiA+ID4gPiA+IHwgSUQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfA0KPiA+ID4gPiA+ICs9PT09PT09PSs9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Kw0KPiA+ID4gPiA+IHwgYGBpZGBgIHwgMzIgYml0IHZhbHVl IHRvIHJldHVybiB3aXRoIHBhY2tldHMgfA0KPiA+ID4gPiA+ICstLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KPiA+ID4gPiA+DQo+ID4gPiA+IFtTdWdlc2hd IEkgYXNzdW1lIHRoZSBhcHBsaWNhdGlvbiBoYXMgdG8gcHJvZ3JhbSB0aGUgZmxvdyB3aXRoIGEN Cj4gPiA+ID4gdW5pcXVlIElEIGFuZCBtYXRjaGluZyBwYWNrZXRzIGFyZSBzdGFtcGVkIHdpdGgg dGhpcyBJRCB3aGVuDQo+ID4gPiA+IHJlcG9ydGluZyB0byB0aGUgc29mdHdhcmUuIFRoZSB1bmlx dWVuZXNzIG9mIElEIGlzIE5PVCBndWFyYW50ZWVkDQo+ID4gPiA+IGJ5IHRoZSBBUEkgZnJhbWV3 b3JrLiBDb3JyZWN0IG1lIGlmIEkgYW0gd3JvbmcgaGVyZS4NCj4gPiA+DQo+ID4gPiBZb3UgYXJl IHJpZ2h0LCBpZiB0aGUgd2F5IEkgd3JvdGUgaXQgaXMgbm90IGNsZWFyIGVub3VnaCwgSSdtIG9w ZW4NCj4gPiA+IHRvIHN1Z2dlc3Rpb25zIHRvIGltcHJvdmUgaXQuDQo+ID4gW1N1Z2VzaF0gSSBn dWVzcyBpdHMgZmluZSBhbmQgd291bGQgbGlrZSB0byBjb25maXJtIHRoZSBzYW1lLiBQZXJoYXBz DQo+ID4gaXQgd291bGQgYmUgbmljZSB0byBtZW50aW9uIHRoYXQgdGhlIElEcyBhcmUgYXBwbGlj YXRpb24gZGVmaW5lZC4NCj4gDQo+IE9LLCBJIHdpbGwgbWFrZSBpdCBjbGVhcmVyLg0KPiANCj4g PiA+ID4gW1N1Z2VzaF0gSXMgaXQgYSBsaW1pdGF0aW9uIHRvIHVzZSBvbmx5IDMyIGJpdCBJRD8g SXMgaXQgcG9zc2libGUNCj4gPiA+ID4gdG8gaGF2ZSBhDQo+ID4gPiA+IDY0IGJpdCBJRD8gU28g dGhhdCBhcHBsaWNhdGlvbiBjYW4gdXNlIHRoZSBjb250cm9sIHBsYW5lIGZsb3cNCj4gPiA+ID4g cG9pbnRlciBJdHNlbGYgYXMgYW4gSUQuIERvZXMgaXQgbWFrZSBzZW5zZT8NCj4gPiA+DQo+ID4g PiBJJ3ZlIHNwZWNpZmllZCBhIDMyIGJpdCBJRCBmb3Igbm93IGJlY2F1c2UgdGhpcyBpcyB3aGF0 IEZESVINCj4gPiA+IHN1cHBvcnRzIGFuZCBhbHNvIHdoYXQgZXhpc3RpbmcgZGV2aWNlcyBjYW4g cmVwb3J0IHRvZGF5IEFGQUlLIChpNDBlIGFuZA0KPiBtbHg1KS4NCj4gPiA+DQo+ID4gPiBXZSBj b3VsZCB1c2UgNjQgYml0IGZvciBmdXR1cmUtcHJvb2ZuZXNzIGluIGEgc2VwYXJhdGUgYWN0aW9u IGxpa2UgIklENjQiDQo+ID4gPiB3aGVuIGF0IGxlYXN0IG9uZSBkZXZpY2Ugc3VwcG9ydHMgaXQu DQo+ID4gPg0KPiA+ID4gVG8gUE1EIG1haW50YWluZXJzOiBwbGVhc2UgY29tbWVudCBpZiB5b3Ug a25vdyBkZXZpY2VzIHRoYXQgc3VwcG9ydA0KPiA+ID4gdGFnZ2luZyBtYXRjaGluZyBwYWNrZXRz IHdpdGggbW9yZSB0aGFuIDMyIGJpdHMgb2YgdXNlci1wcm92aWRlZA0KPiA+ID4gZGF0YSENCj4g PiBbU3VnZXNoXSBJIGd1ZXNzIHRoZSBmbG93IGRpcmVjdG9yIElEIGlzIDY0IGJpdCAsIFRoZSBY TDcxMCBkYXRhc2hlZXQgc2F5cyBzby4NCj4gPiBBbmQgaW4gdGhlICdydGVfbWJ1Zicgc3RydWN0 dXJlIHRoZSA2NCBiaXQgRkRJUi1JRCBpcyBzaGFyZWQgd2l0aCByc3MNCj4gPiBoYXNoLiBUaGlz IGNhbiBiZSBhIHNvZnR3YXJlIGRyaXZlciBsaW1pdGF0aW9uIHRoYXQgZXhwb3NlIG9ubHkgMzIN Cj4gPiBiaXQuIFBvc3NpYmx5IGJlY2F1c2Ugb2YgY2FjaGUgYWxpZ25tZW50IGlzc3Vlcz8gU2lu Y2UgdGhlIGhhcmR3YXJlDQo+ID4gY2FuIHN1cHBvcnQgNjQgYml0LCBJIGZlZWwgaXQgbWFrZSBz ZW5zZSB0byBzdXBwb3J0IDY0IGJpdCBhcyB3ZWxsLg0KPiANCj4gSSBhZ3JlZSB3ZSBuZWVkIDY0 IGJpdCBzdXBwb3J0LCBidXQgdGhlbiB3ZSBhbHNvIG5lZWQgYSBzb2x1dGlvbiBmb3IgZGV2aWNl cw0KPiB0aGF0IHN1cHBvcnQgb25seSAzMiBiaXQuIFBvc3NpYmxlIG1ldGhvZHMgSSBjYW4gdGhp bmsgb2Y6DQo+IA0KPiAtIEEgc2VwYXJhdGUgIklENjQiIGFjdGlvbiAob3IgYSAiSUQzMiIgb25l LCBwZXJoYXBzIHdpdGggYSBiZXR0ZXIgbmFtZSkuDQo+IA0KPiAtIEEgc2luZ2xlIElEIGFjdGlv biB3aXRoIGFuIHVubGltaXRlZCBudW1iZXIgb2YgYnl0ZXMgdG8gcmV0dXJuIHdpdGgNCj4gICBw YWNrZXRzICh3b3VsZCBhY3R1YWxseSBiZSBhIHN0cmluZykuIFBNRHMgY2FuIHRoZW4gcmVmdXNl IHRvIGNyZWF0ZSBmbG93DQo+ICAgcnVsZXMgcmVxdWVzdGluZyBhbiB1bnN1cHBvcnRlZCBudW1i ZXIgb2YgYnl0ZXMuIERldmljZXMgc3VwcG9ydGluZw0KPiBmZXdlcg0KPiAgIHRoYW4gMzIgYml0 cyBhcmUgYWxzbyBpbmNsdWRlZCB0aGlzIHdheSB3aXRob3V0IHRoZSBuZWVkIGZvciB5ZXQgYW5v dGhlcg0KPiAgIGFjdGlvbi4NCj4gDQo+IFRob3VnaHRzPw0KW1N1Z2VzaF0gSSBmZWVsIHRoZSBz aW5nbGUgSUQgYXBwcm9hY2ggaXMgbXVjaCBiZXR0ZXIuIEJ1dCBJIHdvdWxkIHNheSBhIGZpeGVk IHNpemUgSUQNCmlzIGVhc3kgdG8gaGFuZGxlIGF0IHVwcGVyIGxheWVycy4gU2F5IFBNRCByZXR1 cm5zIDY0Yml0IElEIGluIHdoaWNoIE1TQnMgDQphcmUgbWFza2VkIG91dCwgYmFzZWQgb24gaG93 IG1hbnkgYml0cyB0aGUgaGFyZHdhcmUgY2FuIHN1cHBvcnQuIA0KUE1EIGNhbiByZWZ1c2UgdGhl IHVuc3VwcG9ydGVkIG51bWJlciBvZiBieXRlcyB3aGVuIHJlcXVlc3RlZC4gU28gdGhlIHNpemUN Cm9mIElEIGdvaW5nIHRvIGJlIGEgcGFyYW1ldGVyIHRvIHByb2dyYW0gdGhlIGZsb3cuDQpXaGF0 IGRvIHlvdSB0aGluaz8NCj4gDQo+IFsuLi5dDQo+ID4gPiA+IFtTdWdlc2hdIEFub3RoZXIgY29u Y2VybiBpcyB0aGUgY29zdCBhbmQgdGltZSBvZiBpbnN0YWxsaW5nIHRoZXNlDQo+ID4gPiA+IHJ1 bGVzIGluIHRoZSBoYXJkd2FyZS4gQ2FuIHdlIG1ha2UgdGhlc2UgQVBJcyB0aW1lIGJvdW5kKG9y IGF0DQo+ID4gPiA+IGxlYXN0IGFuIG9wdGlvbg0KPiA+ID4gdG8NCj4gPiA+ID4gc2V0IHRoZSB0 aW1lIGxpbWl0IHRvIGV4ZWN1dGUgdGhlc2UgQVBJcyksIHNvIHRoYXQgQXBwbGljYXRpb24NCj4g PiA+ID4gZG9lc27igJl0IGhhdmUgdG8gd2FpdCBzbyBsb25nIHdoZW4gaW5zdGFsbGluZyBhbmQg ZGVsZXRpbmcgZmxvd3MNCj4gPiA+IHdpdGgNCj4gPiA+ID4gc2xvdyBoYXJkd2FyZS9OSUMuIFdo YXQgZG8geW91IHRoaW5rPyBNb3N0IG9mIHRoZSBkYXRhcGF0aCBmbG93DQo+ID4gPiBpbnN0YWxs YXRpb25zIGFyZQ0KPiA+ID4gPiBkeW5hbWljIGFuZCB0cmlnZ2VyZWQgb25seSB3aGVuIHRoZXJl IGlzIGFuIGluZ3Jlc3MgdHJhZmZpYy4gRGVsYXkNCj4gPiA+ID4gaW4gZmxvdyBpbnNlcnRpb24v ZGVsZXRpb24gaGF2ZSB1bnByZWRpY3RhYmxlDQo+ID4gPiBjb25zZXF1ZW5jZXMuDQo+ID4gPg0K PiA+ID4gVGhpcyBBUEkgaXMgKGN1cnJlbnRseSkgYWltZWQgYXQgdGhlIGNvbnRyb2wgcGF0aCBv bmx5LCBhbmQgbXVzdA0KPiA+ID4gaW5kZWVkIGJlIGFzc3VtZWQgdG8gYmUgc2xvdy4gQ3JlYXRp bmcgbWlsbGlvbiBvZiBydWxlcyBtYXkgdGFrZQ0KPiA+ID4gcXVpdGUgbG9uZyBhcyBpdCBtYXkg aW52b2x2ZSBzeXNjYWxscyBhbmQgb3RoZXIgdGltZS1jb25zdW1pbmcNCj4gPiA+IHN5bmNocm9u aXphdGlvbiB0aGluZ3Mgb24gdGhlIFBNRCBzaWRlLg0KPiA+ID4NCj4gPiA+IFNvIGN1cnJlbnRs eSB0aGVyZSBpcyBubyBwbGFuIHRvIGhhdmUgcnVsZXMgYWRkZWQgZnJvbSB0aGUgZGF0YSBwYXRo DQo+ID4gPiB3aXRoIHRpbWUgY29uc3RyYWludHMuIEkgdGhpbmsgaXQgd291bGQgYmUgaW1wbGVt ZW50ZWQgdGhyb3VnaCBhDQo+ID4gPiBkaWZmZXJlbnQgc2V0IG9mIGZ1bmN0aW9ucyBhbnl3YXku DQo+ID4gPg0KPiA+ID4gSSBkbyBub3QgdGhpbmsgYWRkaW5nIHRpbWUgbGltaXRzIGlzIHByYWN0 aWNhbCwgZXZlbiBzcGVjaWZ5aW5nIGluDQo+ID4gPiB0aGUgQVBJIHRoYXQgY3JlYXRpbmcgYSBz aW5nbGUgZmxvdyBydWxlIG11c3QgdGFrZSBsZXNzIHRoYW4gYQ0KPiA+ID4gbWF4aW11bSBudW1i ZXIgb2Ygc2Vjb25kcyBpbiBvcmRlciB0byBiZSBlZmZlY3RpdmUgaXMgdG9vIG11Y2ggb2YgYQ0K PiA+ID4gY29uc3RyYWludCAoYXBwbGljYXRpb25zIHRoYXQgY3JlYXRlIGFsbCBmbG93cyBkdXJp bmcgaW5pdCBtYXkgbm90IGNhcmUgYWZ0ZXINCj4gYWxsKS4NCj4gPiA+DQo+ID4gPiBZb3Ugc2hv dWxkIGNvbnNpZGVyIGluIGFueSBjYXNlIHRoYXQgbW9kaWZ5aW5nIGZsb3cgcnVsZXMgd2lsbA0K PiA+ID4gYWx3YXlzIGJlIHNsb3dlciB0aGFuIHJlY2VpdmluZyBwYWNrZXRzLCB0aGVyZSBpcyBu byB3YXkgYXJvdW5kDQo+ID4gPiB0aGF0LiBBcHBsaWNhdGlvbnMgaGF2ZSB0byBsaXZlIHdpdGgg aXQgYW5kIHByb3ZpZGUgYSBzb2Z0d2FyZQ0KPiA+ID4gZmFsbGJhY2sgZm9yIGluY29taW5nIHBh Y2tldHMgd2hpbGUgbWFuYWdpbmcgZmxvdyBydWxlcy4NCj4gPiA+DQo+ID4gPiBNb3Jlb3Zlciwg dGhpbmsgYWJvdXQgd2hhdCBoYXBwZW5zIHdoZW4geW91IGhpdCB0aGUgbWF4aW11bQ0KPiBudW1i ZXINCj4gPiA+IG9mIGZsb3cgcnVsZXMgYW5kIGNhbm5vdCBjcmVhdGUgYW55IG1vcmUuIEFwcGxp Y2F0aW9ucyBuZWVkIHRvDQo+ID4gPiBpbXBsZW1lbnQgc29tZSBraW5kIG9mIGZhbGxiYWNrIGlu IHRoZWlyIGRhdGEgcGF0aC4NCj4gPiA+DQo+ID4gPiBPZmZsb2FkaW5nIGZsb3dzIGluIEhXIGlz IGFsc28gb25seSB1c2VmdWwgaWYgdGhleSBsaXZlIG11Y2ggbG9uZ2VyDQo+ID4gPiB0aGFuIHRo ZSB0aW1lIHRha2VuIHRvIGNyZWF0ZSBhbmQgZGVsZXRlIHRoZW0uIFBlcmhhcHMgYXBwbGljYXRp b25zDQo+ID4gPiBtYXkgY2hvb3NlIHRvIGRvIHNvIGFmdGVyIGRldGVjdGluZyBsb25nIGxpdmVk IGZsb3dzIHN1Y2ggYXMgVENQDQo+ID4gPiBzZXNzaW9ucy4NCj4gPiA+DQo+ID4gPiBZb3UgbWF5 IGhhdmUgb25lIHNlcGFyYXRlIGNvbnRyb2wgdGhyZWFkIGRlZGljYXRlZCB0byBtYW5hZ2UgZmxv d3MNCj4gPiA+IGFuZCBrZWVwIHlvdXIgbm9ybWFsIGNvbnRyb2wgdGhyZWFkIHVuYWZmZWN0ZWQg YnkgZGVsYXlzLiBTZXZlcmFsDQo+ID4gPiB0aHJlYWRzIGNhbiBldmVuIGJlIGRlZGljYXRlZCwg b25lIHBlciBkZXZpY2UuDQo+ID4gW1N1Z2VzaF0gSSBhZ3JlZSB0aGF0IHRoZSBmbG93IGluc2Vy dGlvbiBjYW5ub3QgYmUgYXMgZmFzdCBhcyB0aGUNCj4gPiBwYWNrZXQgcmVjZWl2aW5nIHJhdGUu ICBGcm9tIGFwcGxpY2F0aW9uIHBvaW50IG9mIHZpZXcgdGhlIHByb2JsZW0NCj4gPiB3aWxsIGJl IHdoZW4gaGFyZHdhcmUgZmxvdyBpbnNlcnRpb24gdGFrZXMgbG9uZ2VyIHRoYW4gc29mdHdhcmUg Zmxvdw0KPiA+IGluc2VydGlvbi4gQXQgbGVhc3QgYXBwbGljYXRpb24gaGFzIHRvIGtub3cgdGhl IGNvc3Qgb2YNCj4gPiBpbnNlcnRpbmcvZGVsZXRpbmcgYSBydWxlIGluIGhhcmR3YXJlIGJlZm9y ZWhhbmQuIE90aGVyd2lzZSBob3cNCj4gPiBhcHBsaWNhdGlvbiBjYW4gY2hvb3NlIHRoZSByaWdo dCBmbG93IGNhbmRpZGF0ZSBmb3IgaGFyZHdhcmUuIE15IHBvaW50DQo+IGhlcmUgaXMgYXBwbGlj YXRpb24gaXMgZXhwZWN0aW5nIGEgZGV0ZXJtaW5pc3RpYyBiZWhhdmlvciBmcm9tIGEgY2xhc3Np ZmllciB3aGlsZQ0KPiBpbnNlcnRpbmcgYW5kIGRlbGV0aW5nIHJ1bGVzLg0KPiANCj4gVW5kZXJz dG9vZCwgaG93ZXZlciBpdCB3aWxsIGJlIGRpZmZpY3VsdCB0byBlc3RpbWF0ZSwgcGFydGljdWxh cmx5IGlmIGEgUE1EDQo+IG11c3QgcmVhcnJhbmdlIGZsb3cgcnVsZXMgdG8gbWFrZSByb29tIGZv ciBhIG5ldyBvbmUgZHVlIHRvIHByaW9yaXR5IGxldmVscw0KPiBjb2xsaXNpb24gb3Igc29tZSBv dGhlciBIVy1yZWxhdGVkIHJlYXNvbi4gSSBtZWFuLCBzcGVudCB0aW1lIGNhbm5vdCBiZQ0KPiBh c3N1bWVkIHRvIGJlIGNvbnN0YW50LCBldmVuIFBNRHMgY2Fubm90IGtub3cgaW4gYWR2YW5jZSBi ZWNhdXNlIGl0IGFsc28NCj4gZGVwZW5kcyBvbiB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGhvc3Qg Q1BVLg0KPiANCj4gU3VjaCBhcHBsaWNhdGlvbnMgbWF5IGZpbmQgaXQgZWFzaWVyIHRvIG1lYXN1 cmUgZWxhcHNlZCB0aW1lIGZvciB0aGUgcnVsZXMNCj4gdGhleSBjcmVhdGUsIG1ha2Ugc3RhdGlz dGljcyBhbmQgZXh0cmFwb2xhdGUgZnJvbSB0aGlzIGluZm9ybWF0aW9uIGZvciBmdXR1cmUNCj4g cnVsZXMuIEkgZG8gbm90IHRoaW5rIHRoZSBQTUQgY2FuIGhlbHAgbXVjaCBoZXJlLg0KW1N1Z2Vz aF0gRnJvbSBhbiBhcHBsaWNhdGlvbiBwb2ludCBvZiB2aWV3IHRoaXMgY2FuIGJlIGFuIGlzc3Vl LiANCkV2ZW4gdGhlcmUgaXMgYSBzZWN1cml0eSBjb25jZXJuIHdoZW4gd2UgcHJvZ3JhbSBhIHNo b3J0IGxpdmVkIGZsb3cuIExldHMgY29uc2lkZXIgdGhlIGNhc2UsIA0KDQoxKSBDb250cm9sIHBs YW5lIHByb2dyYW1zIHRoZSBoYXJkd2FyZSB3aXRoIFF1ZXVlIHRlcm1pbmF0aW9uIGZsb3cuDQoy KSBTb2Z0d2FyZSBkYXRhcGxhbmUgcHJvZ3JhbW1lZCB0byB0cmVhdCB0aGUgcGFja2V0cyBmcm9t IHRoZSBzcGVjaWZpYyBxdWV1ZSBhY2NvcmRpbmdseS4NCjMpIFJlbW92ZSB0aGUgZmxvdyBmcm9t IHRoZSBoYXJkd2FyZS4gKExldHMgY29uc2lkZXIgdGhpcyBpcyBhIGxvbmcgd2FpdCBwcm9jZXNz Li4pLiANCk9yIGV2ZW4gdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBoYXJkd2FyZSB0YWtlIG1vcmUg dGltZSB0byByZXBvcnQgdGhlIHN0YXR1cyB0aGFuIHJlbW92aW5nIGl0IA0KcGh5c2ljYWxseSAu IE5vdyB0aGUgcGFja2V0cyBpbiB0aGUgcXVldWUgbm8gbG9uZ2VyIGNvbnNpZGVyIGFzIG1hdGNo ZWQvZmxvdyBoaXQuDQouIFRoaXMgaXMgZHVlIHRvIHRoZSBzb2Z0d2FyZSBkYXRhcGxhbmUgdXBk YXRlIGlzIHlldCB0byBoYXBwZW4uDQpXZSBtdXN0IG5lZWQgYSB3YXkgdG8gc3luYyBiZXR3ZWVu IHNvZnR3YXJlIGRhdGFwYXRoIGFuZCBjbGFzc2lmaWVyIEFQSXMgZXZlbiB0aG91Z2ggDQp0aGV5 IGFyZSBib3RoIHByb2dyYW1tZWQgZnJvbSBhIGRpZmZlcmVudCBjb250cm9sIHRocmVhZC4NCg0K QXJlIHdlIHNheWluZyB0aGVzZSBBUElzIGFyZSBvbmx5IG1lYW50IGZvciB1c2VyIGRlZmluZWQg c3RhdGljIGZsb3dzPz8NCg0KDQo+IA0KPiA+ID4gPiBbU3VnZXNoXSBBbm90aGVyIHF1ZXJ5IGlz IG9uIHRoZSBzeW5jaHJvbml6YXRpb24gcGFydC4gV2hhdCBpZg0KPiA+ID4gPiBzYW1lIHJ1bGVz DQo+ID4gPiBhcmUNCj4gPiA+ID4gaGFuZGxlZCBmcm9tIGRpZmZlcmVudCB0aHJlYWRzPyBJcyBh cHBsaWNhdGlvbiByZXNwb25zaWJsZSBmb3INCj4gPiA+ID4gaGFuZGxpbmcgdGhlDQo+ID4gPiBj b25jdXJyZW50DQo+ID4gPiA+IGhhcmR3YXJlIHByb2dyYW1taW5nPw0KPiA+ID4NCj4gPiA+IExp a2UgbW9zdCAoaWYgbm90IGFsbCkgRFBESyBBUElzLCBhcHBsaWNhdGlvbnMgYXJlIHJlc3BvbnNp YmxlIGZvcg0KPiA+ID4gbWFuYWdpbmcgbG9ja2luZyBpc3N1ZXMgYXMgZGVjcmliZWQgaW4gNC4z IChCZWhhdmlvcikuIFNpbmNlIHRoaXMgaXMNCj4gPiA+IGEgY29udHJvbCBwYXRoIEFQSSBhbmQg YXBwbGljYXRpb25zIHVzdWFsbHkgaGF2ZSBhIHNpbmdsZSBjb250cm9sDQo+ID4gPiB0aHJlYWQs IGxvY2tpbmcgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgaW4gbW9zdCBjYXNlcy4NCj4gPiA+DQo+ ID4gPiBSZWdhcmRpbmcgbXkgYWJvdmUgY29tbWVudCBhYm91dCB1c2luZyBzZXZlcmFsIGNvbnRy b2wgdGhyZWFkcyB0bw0KPiA+ID4gbWFuYWdlIGRpZmZlcmVudCBkZXZpY2VzLCBzZWN0aW9uIDQu MyBzYXlzOg0KPiA+ID4NCj4gPiA+ICAiVGhlcmUgaXMgbm8gcHJvdmlzaW9uIGZvciByZWVudHJh bmN5L211bHRpLXRocmVhZCBzYWZldHksIGFsdGhvdWdoDQo+ID4gPiBub3RoaW5nICBzaG91bGQg cHJldmVudCBkaWZmZXJlbnQgZGV2aWNlcyBmcm9tIGJlaW5nIGNvbmZpZ3VyZWQgYXQNCj4gPiA+ IHRoZSBzYW1lICB0aW1lLiBQTURzIG1heSBwcm90ZWN0IHRoZWlyIGNvbnRyb2wgcGF0aCBmdW5j dGlvbnMNCj4gYWNjb3JkaW5nbHkuIg0KPiA+ID4NCj4gPiA+IEknZCBsaWtlIHRvIGVtcGhhc2l6 ZSBpdCBpcyBub3QgInBlciBwb3J0IiBidXQgInBlciBkZXZpY2UiLCBzaW5jZQ0KPiA+ID4gaW4g YSBmZXcgY2FzZXMgYSBjb25maWd1cmFibGUgcmVzb3VyY2UgaXMgc2hhcmVkIGJ5IHNldmVyYWwg cG9ydHMuDQo+ID4gPiBJdCBtYXkgYmUgZGlmZmljdWx0IGZvciBhcHBsaWNhdGlvbnMgdG8gZGV0 ZXJtaW5lIHdoaWNoIHBvcnRzIGFyZQ0KPiA+ID4gc2hhcmVkIGJ5IGEgZ2l2ZW4gZGV2aWNlIGJ1 dCB0aGlzIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgQVBJLg0KPiA+ID4NCj4gPiA+ IERvIHlvdSB0aGluayBhZGRpbmcgdGhlIGd1YXJhbnRlZSB0aGF0IGl0IGlzIGFsd2F5cyBzYWZl IHRvDQo+ID4gPiBjb25maWd1cmUgdHdvIGRpZmZlcmVudCBwb3J0cyBzaW11bHRhbmVvdXNseSB3 aXRob3V0IGxvY2tpbmcgZnJvbQ0KPiA+ID4gdGhlIGFwcGxpY2F0aW9uIHNpZGUgaXMgbmVjZXNz YXJ5PyBJbiB3aGljaCBjYXNlIHRoZSBQTUQgd291bGQgYmUNCj4gPiA+IHJlc3BvbnNpYmxlIGZv ciBsb2NraW5nIHNoYXJlZCByZXNvdXJjZXMuDQo+ID4gW1N1Z2VzaF0gVGhpcyB3b3VsZCBiZSBs aXR0bGUgYml0IGNvbXBsaWNhdGVkIHdoZW4gc29tZSBvZiBwb3J0cyBhcmUNCj4gPiBub3QgdW5k ZXIgRFBESyBpdHNlbGYod2hhdCBpZiBvbmUgcG9ydCBpcyBtYW5hZ2VkIGJ5IEtlcm5lbCkgT3Ig cG9ydHMNCj4gPiBhcmUgdGllZCBieSBkaWZmZXJlbnQgYXBwbGljYXRpb24uIExvY2tpbmcgaW4g UE1EIGhlbHBzIHdoZW4gdGhlIHBvcnRzDQo+ID4gYXJlIGFjY2Vzc2VkIGJ5IG11bHRpcGxlIERQ REsgYXBwbGljYXRpb24uIEhvd2V2ZXIgd2hhdCBpZiB0aGUgcG9ydCBpdHNlbGYNCj4gbm90IHVu ZGVyIERQREs/DQo+IA0KPiBXZWxsLCBlaXRoZXIgd2UgZG8gbm90IGNhcmUgYWJvdXQgd2hhdCBo YXBwZW5zIG91dHNpZGUgb2YgdGhlIERQREsNCj4gY29udGV4dCwgb3IgUE1EcyBtdXN0IGZpbmQg YSB3YXkgdG8gc2F0aXNmeSBldmVyeW9uZS4gSSdtIG5vdCBhIGZhbiBvZiBsb2NraW5nDQo+IGVp dGhlciBidXQgaXQgd291bGQgYmUgbmljZSBpZiBmbG93IHJ1bGVzIGNvbmZpZ3VyYXRpb24gY291 bGQgYmUgYXR0ZW1wdGVkIG9uDQo+IGRpZmZlcmVudCBwb3J0cyBzaW11bHRhbmVvdXNseSB3aXRo b3V0IHRoZSByaXNrIG9mIHdyZWNraW5nIGFueXRoaW5nLCBzbyB0aGF0DQo+IGFwcGxpY2F0aW9u cyBkbyBub3QgbmVlZCB0byBjYXJlLg0KPiANCj4gUG9zc2libGUgY2FzZXMgZm9yIGEgZHVhbCBw b3J0IGRldmljZSB3aXRoIGdsb2JhbCBmbG93IHJ1bGUgc2V0dGluZ3MgYWZmZWN0aW5nDQo+IGJv dGggcG9ydHM6DQo+IA0KPiAxKSBwb3J0cyAxICYgMiBhcmUgbWFuYWdlZCBieSBEUERLOiB0aGlz IGlzIHRoZSBlYXN5IGNhc2UsIGEgcnVsZSB0aGF0IG5lZWRzDQo+ICAgIHRvIGFsdGVyIGEgZ2xv YmFsIHNldHRpbmcgbmVjZXNzYXJ5IGZvciBhbiBleGlzdGluZyBydWxlIG9uIGFueSBwb3J0IGlz DQo+ICAgIG5vdCBhbGxvd2VkIChFRVhJU1QpLiBQTUQgbXVzdCBtYWludGFpbiBhIGRldmljZSBj b250ZXh0IGNvbW1vbiB0byBib3RoDQo+ICAgIHBvcnRzIGluIG9yZGVyIGZvciB0aGlzIHRvIHdv cmsuIFRoaXMgY29udGV4dCBpcyBlaXRoZXIgdW5kZXIgbG9jaywgb3INCj4gICAgdGhlIGZpcnN0 IHBvcnQgb24gd2hpY2ggYSBmbG93IHJ1bGUgaXMgY3JlYXRlZCBvd25zIGFsbCBmdXR1cmUgZmxv dw0KPiAgICBydWxlcy4NCj4gDQo+IDIpIHBvcnQgMSBpcyBtYW5hZ2VkIGJ5IERQREssIHBvcnQg MiBieSBzb21ldGhpbmcgZWxzZSwgdGhlIFBNRCBpcyBhd2FyZSBvZg0KPiAgICBpdCBhbmQga25v d3MgdGhhdCBwb3J0IDIgbWF5IG1vZGlmeSB0aGUgZ2xvYmFsIGNvbnRleHQ6IG5vIGZsb3cgcnVs ZXMgY2FuDQo+ICAgIGJlIGNyZWF0ZWQgZnJvbSB0aGUgRFBESyBhcHBsaWNhdGlvbiBkdWUgdG8g c2FmZXR5IGlzc3VlcyAoRUJVU1k/KS4NCj4gDQo+IDMpIHBvcnQgMSBpcyBtYW5hZ2VkIGJ5IERQ REssIHBvcnQgMiBieSBzb21ldGhpbmcgZWxzZSwgdGhlIFBNRCBpcyBhd2FyZSBvZg0KPiAgICBp dCBhbmQga25vd3MgdGhhdCBwb3J0IDIgd2lsbCBub3QgbW9kaWZ5IGZsb3cgcnVsZXM6IFBNRCBz aG91bGQgbm90IGNhcmUsDQo+ICAgIG5vIGxvY2sgbmVjZXNzYXJ5Lg0KPiANCj4gNCkgcG9ydCAx IGlzIG1hbmFnZWQgYnkgRFBESywgcG9ydCAyIGJ5IHNvbWV0aGluZyBlbHNlIGFuZCB0aGUgUE1E IGlzIG5vdA0KPiAgICBhd2FyZSBvZiBpdDogZWl0aGVyIGZsb3cgcnVsZXMgY2Fubm90IGJlIGNy ZWF0ZWQgZXZlciBhdCBhbGwsIG9yIHdlIHNheQ0KPiAgICBpdCBpcyB1c2VyJ3MgcmVwb25zaWJp bGl0eSB0byBtYWtlIHN1cmUgdGhpcyBkb2VzIG5vdCBoYXBwZW4uDQo+IA0KPiBDb25zaWRlcmlu ZyB0aGF0IG1vc3QgY29udHJvbCBvcGVyYXRpb25zIHBlcmZvcm1lZCBieSBEUERLIGFmZmVjdCB0 aGUNCj4gZGV2aWNlIHJlZ2FyZGxlc3Mgb2Ygb3RoZXIgYXBwbGljYXRpb25zLCBJIHRoaW5rIDEp IGlzIHRoZSBvbmx5IGNhc2UgdGhhdCBzaG91bGQNCj4gYmUgZGVmaW5lZCwgb3RoZXJ3aXNlIDQp LCBkZWZpbmVkIGFzIHVzZXIncyByZXNwb25zaWJpbGl0eS4NCj4gDQo+ID4gPiA+ID4gRGVzdHJ1 Y3Rpb24NCj4gPiA+ID4gPiB+fn5+fn5+fn5+fg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gRmxvdyBy dWxlcyBkZXN0cnVjdGlvbiBpcyBub3QgYXV0b21hdGljLCBhbmQgYSBxdWV1ZSBzaG91bGQgbm90 DQo+ID4gPiA+ID4gYmUNCj4gPiA+IHJlbGVhc2VkDQo+ID4gPiA+ID4gaWYgYW55IGFyZSBzdGls bCBhdHRhY2hlZCB0byBpdC4gQXBwbGljYXRpb25zIG11c3QgdGFrZSBjYXJlIG9mDQo+ID4gPiA+ ID4gcGVyZm9ybWluZyB0aGlzIHN0ZXAgYmVmb3JlIHJlbGVhc2luZyByZXNvdXJjZXMuDQo+ID4g PiA+ID4NCj4gPiA+ID4gPiA6Og0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gIGludA0KPiA+ID4gPiA+ ICBydGVfZmxvd19kZXN0cm95KHVpbnQ4X3QgcG9ydF9pZCwNCj4gPiA+ID4gPiAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgcnRlX2Zsb3cgKmZsb3cpOw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4NCj4g PiA+ID4gW1N1Z2VzaF0gSSB3b3VsZCBzdWdnZXN0IGhhdmluZyBhIGNsZWFuLXVwIEFQSSBpcyBy ZWFsbHkgdXNlZnVsIGFzDQo+ID4gPiA+IHRoZQ0KPiA+ID4gcmVsZWFzaW5nIG9mDQo+ID4gPiA+ IFF1ZXVlKGlzIGl0IGFwcGxpY2FibGUgZm9yIHJlbGVhc2luZyBvZiBwb3J0IHRvbz8pIGlzIG5v dA0KPiA+ID4gPiBndWFyYW50ZWVpbmcgdGhlDQo+ID4gPiBhdXRvbWF0aWMgZmxvdw0KPiA+ID4g PiBkZXN0cnVjdGlvbi4NCj4gPiA+DQo+ID4gPiBXb3VsZCBzb21ldGhpbmcgbGlrZSBydGVfZmxv d19mbHVzaChwb3J0X2lkKSBkbyB0aGUgdHJpY2s/IEkgd2FudGVkDQo+ID4gPiB0byBlbXBoYXNp emUgaW4gdGhpcyBmaXJzdCBkcmFmdCB0aGF0IGFwcGxpY2F0aW9ucyBzaG91bGQgcmVhbGx5DQo+ ID4gPiBrZWVwIHRoZSBmbG93IHBvaW50ZXJzIGFyb3VuZCBpbiBvcmRlciB0byBtYW5hZ2UvZGVz dHJveSB0aGVtLiBJdCBpcw0KPiA+ID4gdGhlaXIgcmVzcG9uc2liaWxpdHksIG5vdCBQTUQncy4N Cj4gPiBbU3VnZXNoXSBUaGFua3MsIEkgdGhpbmsgdGhlIGZsdXNoIGNhbGwgd2lsbCBkby4NCj4g DQo+IE5vdGVkLCB3aWxsIGFkZCBpdC4NCj4gDQo+ID4gPiA+IFRoaXMgd2F5IGFwcGxpY2F0aW9u IGNhbiBpbml0aWFsaXplIHRoZSBwb3J0LCBjbGVhbi11cCBhbGwgdGhlDQo+ID4gPiA+IGV4aXN0 aW5nIHJ1bGVzIGFuZCBjcmVhdGUgbmV3IHJ1bGVzICBvbiBhIGNsZWFuIHNsYXRlLg0KPiA+ID4N Cj4gPiA+IE5vIHJlc291cmNlIGNhbiBiZSByZWxlYXNlZCBhcyBsb25nIGFzIGEgZmxvdyBydWxl IGlzIHVzaW5nIGl0IChiYWQNCj4gPiA+IHRoaW5ncyBtYXkgaGFwcGVuIG90aGVyd2lzZSksIGFs bCBmbG93IHJ1bGVzIG11c3QgYmUgZGVzdHJveWVkDQo+ID4gPiBmaXJzdCwgdGh1cyBub25lIGNh biBwb3NzaWJseSByZW1haW4gYWZ0ZXIgaW5pdGlhbGl6aW5nIGEgcG9ydC4gSXQNCj4gPiA+IGlz IGFzc3VtZWQgdGhhdCBQTURzIGRvIGF1dG9tYXRpYyBjbGVhbiB1cCBkdXJpbmcgaW5pdCBpZiBu ZWNlc3NhcnkgdG8NCj4gZW5zdXJlIHRoaXMuDQo+ID4gW1N1Z2VzaF0gVGhhdCB3aWxsIGRvLg0K PiANCj4gSSB3aWxsIG1ha2UgaXQgbW9yZSBleHBsaWNpdCBhcyB3ZWxsLg0KPiANCj4gWy4uLl0N Cj4gDQo+IC0tDQo+IEFkcmllbiBNYXphcmd1aWwNCj4gNldJTkQNCg==