From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id AD315952 for ; Tue, 21 Feb 2017 14:44:43 +0100 (CET) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga104.jf.intel.com with ESMTP; 21 Feb 2017 05:44:42 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.35,189,1484035200"; d="scan'208";a="1132842169" Received: from irsmsx152.ger.corp.intel.com ([163.33.192.66]) by fmsmga002.fm.intel.com with ESMTP; 21 Feb 2017 05:44:40 -0800 Received: from irsmsx108.ger.corp.intel.com ([169.254.11.173]) by IRSMSX152.ger.corp.intel.com ([169.254.6.191]) with mapi id 14.03.0248.002; Tue, 21 Feb 2017 13:44:40 +0000 From: "Dumitrescu, Cristian" To: Hemant Agrawal , "dev@dpdk.org" CC: "thomas.monjalon@6wind.com" , "jerin.jacob@caviumnetworks.com" Thread-Topic: [PATCH 2/2] ethdev: add hierarchical scheduler API Thread-Index: AQHSjC5ln6+mukkKNE6vPfyLGs8e+6FzTE3Q Date: Tue, 21 Feb 2017 13:44:39 +0000 Message-ID: <3EB4FA525960D640B5BDFFD6A3D89126527509B5@IRSMSX108.ger.corp.intel.com> References: <1486735550-149878-1-git-send-email-cristian.dumitrescu@intel.com> <1486735550-149878-3-git-send-email-cristian.dumitrescu@intel.com> <4cffb9bd-98e7-1e37-5b2e-028a995e2e46@nxp.com> In-Reply-To: <4cffb9bd-98e7-1e37-5b2e-028a995e2e46@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMTU2Yzg0MTAtZDg5NS00NzhiLWE2YTMtNjFmYzJiODJmYjY2IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE2LjIuMTEuMCIsIlRydXN0ZWRMYWJlbEhhc2giOiJET2pwOHJYNG5Tb3lWaGZGQWJjbUdYYkdDYUpaK2U1OGNqNEtFbGdGMWpNPSJ9 x-ctpclassification: CTP_IC 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] [PATCH 2/2] ethdev: add hierarchical scheduler API 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: Tue, 21 Feb 2017 13:44:44 -0000 SGkgSGVtYW50LA0KDQo+ID4gKyAgKiBTY2hlZHVsZXIgbm9kZSBjYXBhYmlsaXRpZXMNCj4gPiAr ICAqLw0KPiA+ICtzdHJ1Y3QgcnRlX3NjaGVkZGV2X25vZGVfY2FwYWJpbGl0aWVzIHsNCg0KLi4u PHNuaXA+DQoNCj4gPiArCQkvKio8IExvd2VzdCBwcmlvcml0eSBzdXBwb3J0ZWQuIFRoZSB2YWx1 ZSBvZiAxIGluZGljYXRlcyB0aGF0DQo+ID4gKwkJICogb25seSBwcmlvcml0eSAwIGlzIHN1cHBv cnRlZCwgd2hpY2ggZXNzZW50aWFsbHkgbWVhbnMgdGhhdA0KPiA+ICsJCSAqIFN0cmljdCBQcmlv cml0eSAoU1ApIGFsZ29yaXRobSBpcyBub3Qgc3VwcG9ydGVkLg0KPiA+ICsJCSAqLw0KPiA+ICsJ CXVpbnQzMl90IHNwX3ByaW9yaXR5X21pbjsNCj4gPiArDQo+IFRoaXMgY2FuIGJlICBzaW1wbHkg c3BfcHJpb3JpdHlfbGV2ZWwsIHdpdGggMCBpbmRpY2F0aW5nIG5vIHN1cHBvcnQNCj4gMSBpbmRp Y2F0ZXMgJzAnIGFuZCAnMScgcHJpb3JpdHkuICBvciA3IGluZGljYXRlcyAnMCcgdG8gJzcnIGku ZS4gdG90YWwNCj4gOCBwcmlvcml0aWVzLg0KDQpZZXMsIHdpbGwgcGljayBhIGJldHRlciBuYW1l LCBhcyB5b3Ugc3VnZ2VzdGVkLiANCg0KPiANCj4gPiArCQkvKio8IE1heGltdW0gbnVtYmVyIG9m IHNpYmxpbmcgbm9kZXMgdGhhdCBjYW4gaGF2ZSB0aGUNCj4gc2FtZQ0KPiA+ICsJCSAqIHByaW9y aXR5IGF0IGFueSBnaXZlbiB0aW1lLiBXaGVuIGVxdWFsIHRvDQo+ICpuX2NoaWxkcmVuX21heCos DQo+ID4gKwkJICogaXQgaW5kaWNhdGVzIHRoYXQgV0ZRL1dSUiBhbGdvcml0aG1zIGFyZSBub3Qg c3VwcG9ydGVkLg0KPiA+ICsJCSAqLw0KPiA+ICsJCXVpbnQzMl90IHNwX25fY2hpbGRyZW5fbWF4 Ow0KPiBub3QgY2xlYXIgdG8gbWUuDQo+IE9LLCBtb3JlIHRoYW4gMSBjaGlsZHJlbiBjYW4gaGF2 ZSBzYW1lIHByaW9yaXR5LCB0aGFuIHlvdSBhcHBseSBXUlIvV0ZRDQo+IGFtb25nIHRoZW0uDQo+ IA0KPiBIb3dldmVyLCB0aGVyZSBjYW4gYmUgZGlmZmVyZW50IHNldHMsICBlLmcgcHJpbyAnMCcg YW5kICcxJyBoYXMgb25seSAxDQo+IGNoaWxkcmVuLiB3aGlsZSBwcmlvICcyJyBoYXMgNiBjaGls ZHJlbiwgdGhhbiB5b3UgYXBwbHkgV1JSL1dGUSBhbW9uZyB0aGVtLg0KPiANCg0KWWVzLCB0aGUg cGFyYW1ldGVyIGRlc2NyaXB0aW9uIHNlZW1zIHdyb25nIHRvIG1lIGFzIHdlbGwuIFRoZSBjb3Jy ZWN0IHN0YXRlbWVudCBzaG91bGQNCmJlOiAiV2hlbiBlcXVhbCB0byAxLCBpdCBpbmRpY2F0ZXMg dGhhdCBXRlEvV1JSIGFsZ29yaXRobXMgYXJlIG5vdCBzdXBwb3J0ZWQiLCByaWdodD8NCkkgd2ls bCBmaXggdGhlIGRlc2NyaXB0aW9uLg0KDQpBbHNvLCBmb3IgdGhlIHNha2Ugb2YgY2xhcml0eSwg aXQgbWFrZXMgc2Vuc2UgdG8gbWVudGlvbiBpbiB0aGUNCmRlc2NyaXB0aW9uIHRoYXQgc3Bfbl9j aGlsZHJlbl9tYXggdmFsdWUgcmFuZ2UgaXMgMSAuLiBuX2NoaWxkcmVuX21heC4NCg0KPiA+ICsN Cj4gPiArCQkvKio8IFdGUSBhbGdvcml0aG0gc3VwcG9ydC4gKi8NCj4gPiArCQlpbnQgc2NoZWR1 bGluZ193ZnFfc3VwcG9ydGVkOw0KPiA+ICsNCj4gPiArCQkvKio8IFdSUiBhbGdvcml0aG0gc3Vw cG9ydC4gKi8NCj4gPiArCQlpbnQgc2NoZWR1bGluZ193cnJfc3VwcG9ydGVkOw0KPiA+ICsNCj4g PiArCQkvKio8IE1heGltdW0gV0ZRL1dSUiB3ZWlnaHQuICovDQo+ID4gKwkJdWludDMyX3Qgc2No ZWR1bGluZ193ZnFfd3JyX3dlaWdodF9tYXg7DQo+ID4gKwl9IG5vbmxlYWY7DQo+ID4gKw0KPiA+ ICsJLyoqPCBJdGVtcyB2YWxpZCBvbmx5IGZvciBsZWFmIG5vZGVzLiAqLw0KPiA+ICsJc3RydWN0 IHsNCj4gPiArCQkvKio8IEhlYWQgZHJvcCBhbGdvcml0aG0gc3VwcG9ydC4gKi8NCj4gPiArCQlp bnQgY21hbl9oZWFkX2Ryb3Bfc3VwcG9ydGVkOw0KPiA+ICsNCj4gPiArCQkvKio8IFByaXZhdGUg V1JFRCBjb250ZXh0IHN1cHBvcnQuICovDQo+ID4gKwkJaW50IGNtYW5fd3JlZF9jb250ZXh0X3By aXZhdGVfc3VwcG9ydGVkOw0KPiA+ICsNCj4gDQo+IFRoZSBjb250ZXh0IHBhcnQgaXMgbm90IGNs ZWFyIHRvIG1lLg0KPiANCg0KVGhlIFdSRUQgY29udGV4dCBpcyB0aGUgV1JFRCBvYmplY3QvaW5z dGFuY2UgaW5pdGlhbGl6ZWQgYmFzZWQgb24gYSBXUkVEIHByb2ZpbGUuDQoNClRoZSBsZWFmIG5v ZGUgY2FuIHN1cHBvcnQgb3Igbm90IGEgV1JFRCBjb250ZXh0IHRoYXQgaXQgb3ducyAocHJpdmF0 ZSBXUkVEIGNvbnRleHQpLA0Kd2hpY2ggaXMgd2hhdCB0aGlzIHBhcmFtZXRlciByZWZlcnMgdG8s IGFuZCB6ZXJvIG9yIHNldmVyYWwgc2hhcmVkIFdSRUQgY29udGV4dHMgKHNoYXJlZA0Kd2l0aCBv dGhlciBub2RlcyksIHdoaWNoIGlzIHdoYXQgdGhlIGJlbG93IHBhcmFtZXRlciBjbWFuX3dyZWRf Y29udGV4dF9zaGFyZWRfbl9tYXgNCnJlZmVycyB0by4gTWFrZXMgc2Vuc2U/DQoNCj4gPiArCQkv Kio8IE1heGltdW0gbnVtYmVyIG9mIHNoYXJlZCBXUkVEIGNvbnRleHRzDQo+IHN1cHBvcnRlZC4g VGhlIHZhbHVlDQo+ID4gKwkJICogb2YgemVybyBpbmRpY2F0ZXMgdGhhdCBzaGFyZWQgV1JFRCBj b250ZXh0cyBhcmUgbm90DQo+ID4gKwkJICogc3VwcG9ydGVkLg0KPiA+ICsJCSAqLw0KPiA+ICsJ CXVpbnQzMl90IGNtYW5fd3JlZF9jb250ZXh0X3NoYXJlZF9uX21heDsNCj4gPiArCX0gbGVhZjsN Cj4gDQo+IG5vbi1sZWFmIG5vZGVzIG1heSBoYXZlIGRpZmZlcmVudCBjYXBhYmlsaXRpZXMuDQo+ IA0KPiB5b3VyIGxlYWYgbm9kZSBpcyBsaWtlIGEgUW9TIFF1ZXVlLCBhcmUgeW91IHN1cHBvcnRp bmcgc2hhcHBlciBvbiBsZWFmDQo+IG5vZGUgYXMgd2VsbD8NCj4gDQoNClllcywgd2UgZG8gc3Vw cG9ydCBzaGFwZXJzIHBlciBsZWFmIG5vZGVzIGFzIHdlbGwuIFByb2JhYmx5IGEgbWlzdW5kZXJz dGFuZGluZzoNCmlmIHlvdSBsb29rIGNsb3NlciB0byBzdHJ1Y3QgcnRlX3NjaGVkZGV2X25vZGVf Y2FwYWJpbGl0aWVzLCB0aGUgc2hhcGVyIHJlbGF0ZWQNCnBhcmFtZXRlcnMgYXJlIGluIHRoZSBj b21tb24gcGFydCBvZiB0aGUgc3RydWN0dXJlLCBub3QgaW4gdGhlIGlubmVyIG5vbi1sZWFmL2xl YWYNCnNwZWNpZmljIHBhcmFtZXRlciBhcmVhLCBhZ3JlZT8NCg0KPiANCj4gSSB3aWxsIHN0aWxs IHByZWZlciBpZiB5b3Ugc2VwYXJhdGUgUW9TIFF1ZXVlIGZyb20gYSBzdGFuZGFyZCBTY2hlZA0K PiBub2RlLCB0aGUgY2FwYWJpbGl0aWVzIGFyZSBkaWZmZXJlbnQgYW5kIGl0IHdpbGwgYmUgY2xl YW5lciBhdCB0aGUgY29zdA0KPiBvZiBpbmNyZWFzZWQgc3RydWN0dXJlIGFuZCBudW1iZXIgb2Yg QVBJcy4NCj4gDQoNCkkgc2VyaW91c2x5IHRob3VnaHQgYWJvdXQgdGhpcyBzdWdnZXN0aW9uICh3 aGljaCB5b3Ugc3RhdGVkIGluIHlvdXIgcHJldmlvdXMgZW1haWwpLCBJIGV2ZW4gd2VudCBkb3du DQp0aGlzIHBhdGgganVzdCB0byByZXZlcnQgYmFjayBldmVudHVhbGx5LCBhcyBteSBjb25jbHVz aW9uIHdhcyB0aGlzIGl0IGlzIG5vdCB0aGUgYmVzdCBhcHByb2FjaC4gV2hhdCBJDQpmb3VuZCBp cyB0aGlzIGhhcyB0aGUgdGVuZGVuY3kgdG8gY3JlYXRlIGEgbG90IG9mIGNvbmZ1c2lvbiBmb3Ig d2hpY2ggQVBJIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzDQphcmUgYXBwbGljYWJsZSB0 bzogKGEpIGJvdGggbGVhZiBhbmQgbm9uLWxlYWYgbm9kZXMsIChiKSBsZWFmIG5vZGVzIG9ubHks IChjKSBub24tbGVhZiBub2RlcyBvbmx5Lg0KDQpBcHByb2FjaCAxOiBIYXZlIHNlcGFyYXRlIEFQ SSBmb3IgbGVhZiBub2RlcyBhbmQgbm9uLWxlYWYgbm9kZXMuIFdlIG5vdyBlZmZlY3RpdmVseSBo YXZlIHRvIGRpZmZlcmVudA0KQVBJIG9iamVjdHM6IGxlYWZfbm9kZSBhbmQgbm9ubGVhZl9ub2Rl Lg0KTXkgY29uY2x1c2lvbnMgYWdhaW5zdCBpdDoNCi0gV2UgZW5kIHVwIGR1cGxpY2F0aW5nIDkw JSBvZiB0aGUgQVBJOw0KLSBXZSBhbHNvIG5lZWQgdG8gZG9jdW1lbnQgYW5kIGVuZm9yY2UgY2xl YXIgcnVsZXMgZm9yIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGxlYWYgbm9kZXMgYW5kDQpub24t bGVhZiBub2Rlcywgd2hpY2ggYWRkcyBhIGxvdCBvZiBjb21wbGV4aXR5LCBhcyBpdCBkb3VibGVz IHRoZSBhbW91bnQgb2YgdmFyaWFibGVzIHRoZSB1c2VyIG5lZWRzDQp0byBjb25zaWRlci4NCg0K Mi4gSGF2ZSBtb3N0IG9mIHRoZSBBUEkgY29tbW9uIGZvciBsZWFmIG5vZGVzIGFuZCBub24tbGVh ZiBub2RlcyAoZm9yIGNvbW1vbiBvYmplY3QgY2FsbGVkIG5vZGUpLA0KYnV0IGhhdmUgc29tZSBB UEkgb25seSBhcHBsaWNhYmxlIHRvIGxlYWYgbm9kZXMgKG5hbWUgdXNpbmcgbGVhZl9ub2RlKS4g SXQgc3RpbGwgY3JlYXRlcyB0aGUgaW1wcmVzc2lvbg0KdGhhdCB0aGVyZSBhcmUgdHdvIGRpZmZl cmVudCBBUEkgb2JqZWN0cyAobGVhZl9ub2RlIGFuZCBub24tbGVhZiBub2RlKSwgd2hpY2ggaXMg ZmFsc2UgaW4gdGhpcyBjYXNlLg0KTXkgY29uY2x1c2lvbnMgYWdhaW5zdCBpdDoNCi0gSXQgaXMg bGlrZWx5IHRoZSB1c2VyIHdpbGwgbG9vayBmb3IgbGVhZi1ub2RlIHNwZWNpZmljIEFQSSBmb3Ig bW9zdCBiYXNpYyBvcGVyYXRpb25zLCBhbmQgd2lsbCBub3QgZmluZCB0aGVtOw0KLSBFdmVuIGlm IHRoZSB1c2VyIGlzIGF3YXJlIHRoYXQgdGhlICJub2RlIiBBUEkgaXMgYXBwbGljYWJsZSB0byBi b3RoIGxlYWYgbm9kZXMgYW5kIG5vbi1sZWFmIG5vZGVzLCBpdCBzdGlsbA0KcmVxdWlyZXMgZG9j dW1lbnRpbmcgYW5kIGVuZm9yY2luZyBjbGVhciBydWxlcyBmb3IgdGhlIGludGVyYWN0aW9uIGJl dHdlZW4gbGVhZiBub2RlcyBhbmQgbm9uLWxlYWYgbm9kZXMsDQp3aGljaCBpbmNyZWFzZXMgdGhl IGNvbXBsZXhpdHkuDQoNCjMuIEhhdmUgYWxsIEFQSSByZWZlciB0byBhIHNpbmdsZSBvYmplY3Qg Y29uc2lzdGVudGx5IGNhbGxlZCBub2RlLg0KVGhpcyBpcyB0aGUgYXBwcm9hY2ggdGhhdCBJIGVu ZGVkIHVwIHBpY2tpbmc6DQotIEl0IHJlYWxseSBzaW1wbGlmaWVzIHRoZSBBUEkgYW5kIGFkZHMg YSBsb3Qgb2YgY2xhcml0eQ0KLSBDbGVhcmx5IGVuZm9yY2UgZGlmZmVyZW5jZXMgYmV0d2VlbiBs ZWFmIGFuZCBub24tbGVhZiBub2RlcyBpbiBBUEkgZGF0YSBzdHJ1Y3R1cmVzIHVzaW5nIHVuaW9u cyBvciBzdHJ1Y3RzDQpjbGVhcmx5IGNhbGxlZCBsZWFmIGFuZCBub25sZWFmLg0KLSBUaGUgb25s eSBmdW5jdGlvbnMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byBsZWFmIG5vZGVzIG9ubHkgLyBub24t bGVhZiBub2RlcyBvbmx5IGFyZSBqdXN0IHRoZSBub2RlX3h5el91cGRhdGUoKQ0KZnVuY3Rpb25z IHRvIGJlIGNhbGxlZCBmb3IgdXBkYXRpbmcgbm9kZSBwYXJhbWV0ZXIgeHl6IHBvc3QgLW5vZGUt YWRkIG9wZXJhdGlvbi4gRWFzeSB0byBnZXQgdGhlIHR5cGUgb2Ygbm9kZQ0KdGhleSBhcmUgYXBw bGljYWJsZSBmb3IsIGFzIHRoZSBwYXJhbWV0ZXIgaXRzZWxmIGxlYXZlcyBubyByb29tIGZvciBj b25mdXNpb24uDQoNCk9uZSBtb3JlIG5vdGU6IGl0IGlzIHN0cmFpZ2h0Zm9yd2FyZCB0byBkZXRl cm1pbmUgaWYgYW4gZXhpc3Rpbmcgbm9kZSBpcyBsZWFmIG9yIG5vdCwgYXMgdGhlIEFQSSBwcmVk ZWZpbmVzIGxlYWYgbm9kZSBJRHMNCnRvIDAgLi4uIChOX1RYUXMgLSAxKSwgd2hpY2ggY2Fubm90 IGJlIHVzZWQgZm9yIG5vbi1sZWFmIG5vZGVzLiBUaGlzIHdhcyBkb25lIGFzIHJlc3VsdCBvZiBz b21lIG9mIHlvdXIgcHJldmlvdXMNCnN1Z2dlc3Rpb25zLiBJIHdpbGwgYWN0dWFsbHkgYWRkIGEg bmV3IEFQSSAoaW5saW5lKSBmdW5jdGlvbiBydGVfc2NoZWRkZXZfbm9kZV9pc19sZWFmKCkgdG8g ZnVydGhlciBjbGFyaWZ5ICYgZW5mb3JjZQ0KdGhpcyBydWxlLg0KDQo+ID4gK307DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICAqIFNjaGVkdWxlciBjYXBhYmlsaXRpZXMNCj4gPiArICAqLw0KPiA+ ICtzdHJ1Y3QgcnRlX3NjaGVkZGV2X2NhcGFiaWxpdGllcyB7DQouLi48c25pcD4NCj4gPiArCS8q KjwgU3VtbWFyeSBvZiBub2RlLWxldmVsIGNhcGFiaWxpdGllcyBhY3Jvc3MgYWxsIG5vZGVzLiAq Lw0KPiA+ICsJc3RydWN0IHJ0ZV9zY2hlZGRldl9ub2RlX2NhcGFiaWxpdGllcyBub2RlOw0KPiAN Cj4gVGhpcyBzaG91bGQgYmUgYXJyYXkgb2YgbnVtYmVycyBvZiBsZXZlbHMgc3VwcG9ydGVkIGlu IHRoZSBzeXN0ZW0uDQo+IE5vbi1sZWFmIG5vZGUgYXQgbGV2ZWwgMiBjYW4gaGF2ZSBkaWZmZXJl bnQgY2FwYWJpbGl0aWVzIHRoYW4gbGV2ZWwgMyBub2RlLg0KPiANCg0KTXkgaW5pdGlhbCB0aGlu a2luZzogVG8gZ2V0IHRoZSBwZXItbGV2ZWwgY2FwYWJpbGl0aWVzLCBzaW1wbHkgY2FsbCB0aGUg bm9kZS1sZXZlbA0KY2FwYWJpbGl0eSBBUEkgZm9yIHRoZSBmaXJzdCBub2RlIChvciBhbnkgbm9k ZSkgb24gdGhhdCBsZXZlbC4gQnV0IG5vdyBJIHNlZSB5b3VyIHBvaW50LA0KYXMgdGhpcyBhcHBy b2FjaCBjYW4gYmUgdXNlZCBvbmx5IGFmdGVyIHRoZSBub2RlcyBoYXZlIGJlZW4gYWRkZWQgKGFz IHRoZSBJRCBvZiBhbiBleGlzdGluZyBub2RlIGlzIHJlcXVpcmVkKS4NCg0KT24gdGhlIG90aGVy IGhhbmQsIHNvbWUgaW1wbGVtZW50YXRpb25zIGNhbiBiZSB2ZXJ5IGZsZXhpYmxlOiBoYXZlIGEg cG9vbCBvZiBub2Rlcw0KdGhhdCBjYW4gYmUgYWRkZWQgaW4gYW55IHRvcG9sb2d5IHRvIGNyZWF0 ZSBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIGhpZXJhcmNoeSBsZXZlbHMNCihpLmUuIGRpc3RhbmNl IGZyb20gbGVhZiB0byByb290KSwgc28gdGhlIGxldmVsIG5vdGlvbiBpcyBub3QgdGhhdCByZWxl dmFudCBhbnltb3JlLg0KDQpUaGVyZWZvcmUsIEkgcHJvcG9zZSB3ZSBhZGQgYSBuZXcgQVBJIGZ1 bmN0aW9uIGZvciBsZXZlbC1zcGVjaWZpYyBjYXBhYmlsaXR5IHF1ZXJ5IChhdCAyLiBiZWxvdyks IHNvDQp3ZSBjb21lIHRvIHRoZSBmb2xsb3dpbmcgc2V0IG9mIGNhcGFiaWxpdHkgcmVsYXRlZCBB UEkgZnVuY3Rpb25zOg0KMS4gcnRlX3NjaGVkZGV2X2NhcGFiaWxpdGllc19nZXQoc2NoZWRfcGFy YW1zKSA9IHN1bW1hcnkgb2YgY2FwYWJpbGl0aWVzIGZvciBlbnRpcmUgaGllcmFyY2h5DQoyLiBy dGVfc2NoZWRkZXZfbGV2ZWxfY2FwYWJpbGl0aWVzX2dldChsZXZlbF9pZCwgbm9kZV9wYXJhbXMp ID0gc3VtbWFyeSBvZiBub2RlIGNhcGFiaWxpdGllcyBmb3IgYWxsIG5vZGVzIG9uIHNhbWUgbGV2 ZWwNCjMuIHJ0ZV9zY2hlZGRldl9ub2RlX2NhcGFiaWxpdGllc19nZXQobm9kZV9pZCwgbm9kZV9w YXJhbXMpID0gc3VtbWFyeSBvZiBub2RlIGNhcGFiaWxpdGllcyBmb3IgYW4gZXhpc3Rpbmcgbm9k ZQ0KDQpBbnkgY29uY2VybnM/DQoNCi4uLjxzbmlwPg0KDQo+ID4gKyAgKiBFYWNoIGxlYWYgbm9k ZSBzaXRzIG9uIG9uIHRvcCBvZiBhIFRYIHF1ZXVlIG9mIHRoZSBjdXJyZW50IEV0aGVybmV0DQo+ IHBvcnQuDQo+ID4gKyAgKiBUaGVyZWZvcmUsIHRoZSBsZWFmIG5vZGVzIGFyZSBwcmVkZWZpbmVk IHdpdGggdGhlIG5vZGUgSURzIG9mIDAgLi4gKE4tDQo+IDEpLA0KPiA+ICsgICogd2hlcmUgTiBp cyB0aGUgbnVtYmVyIG9mIFRYIHF1ZXVlcyBjb25maWd1cmVkIGZvciB0aGUgY3VycmVudA0KPiBF dGhlcm5ldCBwb3J0Lg0KPiA+ICsgICogVGhlIG5vbi1sZWFmIG5vZGVzIGhhdmUgdGhlaXIgSURz IGdlbmVyYXRlZCBieSB0aGUgYXBwbGljYXRpb24uDQo+ID4gKyAgKi8NCj4gDQo+IA0KPiBPaywg dGhhdCBtZWFucyAwIHRvIE4tMSBpcyByZXNlcnZlZCBmb3IgbGVhZiBub2Rlcy4gdGhlIGFwcGxp Y2F0aW9uIHdpbGwNCj4gY2hvb3NlIGFueSB2YWx1ZSBmb3Igbm9uLWxlYWYgbm9kZXM/DQo+IFdo YXQgd2lsbCBiZSB0aGUgcGFyZW50IG5vZGUgaWQgZm9yIHRoZSByb290IG5vZGU/DQo+IA0KDQpZ ZXMhDQoNCkZvciBwYXJlbnQgbm9kZSBJRCwgc2VlIHRoZSBhdCB0aGUgdG9wIG9mIHRoZSBmaWxl Og0KCS8qKjwgU2NoZWR1bGVyIGhpZXJhcmNoeSByb290IG5vZGUgSUQgKi8NCgkjZGVmaW5lIFJU RV9TQ0hFRERFVl9ST09UX05PREVfSUQgIFVJTlQzMl9NQVgNCkkgd2lsbCBhZGQgYSBjb21tZW50 IGZvciBub2RlX2FkZCgpIGZ1bmN0aW9uIGFzIHdlbGwgdG8gZnVyaGVyIGNsYXJpZnkuDQoNCj4g PiArc3RydWN0IHJ0ZV9zY2hlZGRldl9ub2RlX3BhcmFtcyB7DQo+ID4gKwkvKio8IFNoYXBlciBw cm9maWxlIGZvciB0aGUgcHJpdmF0ZSBzaGFwZXIuIFRoZSBhYnNlbmNlIG9mIHRoZQ0KPiBwcml2 YXRlDQo+ID4gKwkgKiBzaGFwZXIgZm9yIHRoZSBjdXJyZW50IG5vZGUgaXMgaW5kaWNhdGVkIGJ5 IHNldHRpbmcgdGhpcyBwYXJhbWV0ZXINCj4gPiArCSAqIHRvIFJURV9TQ0hFRERFVl9TSEFQRVJf UFJPRklMRV9JRF9OT05FLg0KPiA+ICsJICovDQo+ID4gKwl1aW50MzJfdCBzaGFwZXJfcHJvZmls ZV9pZDsNCj4gPiArDQo+ID4gKwkvKio8IFVzZXIgYWxsb2NhdGVkIGFycmF5IG9mIHZhbGlkIHNo YXJlZCBzaGFwZXIgSURzLiAqLw0KPiA+ICsJdWludDMyX3QgKnNoYXJlZF9zaGFwZXJfaWQ7DQo+ ID4gKw0KPiA+ICsJLyoqPCBOdW1iZXIgb2Ygc2hhcmVkIHNoYXBlciBJRHMgaW4gdGhlICpzaGFy ZWRfc2hhcGVyX2lkKiBhcnJheS4NCj4gKi8NCj4gPiArCXVpbnQzMl90IG5fc2hhcmVkX3NoYXBl cnM7DQo+ID4gKw0KPiA+ICsJdW5pb24gew0KPiA+ICsJCS8qKjwgUGFyYW1ldGVycyBvbmx5IHZh bGlkIGZvciBub24tbGVhZiBub2Rlcy4gKi8NCj4gPiArCQlzdHJ1Y3Qgew0KPiA+ICsJCQkvKio8 IEZvciBlYWNoIHByaW9yaXR5LCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY2hpbGRyZW4NCj4gPiAr CQkJICogbm9kZXMgc2hhcmluZyB0aGUgc2FtZSBwcmlvcml0eSBhcmUgdG8gYmUNCj4gc2NoZWR1 bGVkDQo+ID4gKwkJCSAqIGJ5IFdGUSBvciBieSBXUlIuIFdoZW4gTlVMTCwgaXQgaW5kaWNhdGVz IHRoYXQNCj4gV0ZRDQo+ID4gKwkJCSAqIGlzIHRvIGJlIHVzZWQgZm9yIGFsbCBwcmlvcml0aWVz LiBXaGVuIG5vbi1OVUxMLCBpdA0KPiA+ICsJCQkgKiBwb2ludHMgdG8gYSBwcmUtYWxsb2NhdGVk IGFycmF5IG9mICpuX3ByaW9yaXR5Kg0KPiA+ICsJCQkgKiBlbGVtZW50cywgd2l0aCBhIG5vbi16 ZXJvIHZhbHVlIGVsZW1lbnQNCj4gaW5kaWNhdGluZw0KPiA+ICsJCQkgKiBXRlEgYW5kIGEgemVy byB2YWx1ZSBlbGVtZW50IGZvciBXUlIuDQo+ID4gKwkJCSAqLw0KPiA+ICsJCQlpbnQgKnNjaGVk dWxpbmdfbW9kZV9wZXJfcHJpb3JpdHk7DQo+IA0KPiB3aGF0IGlzIHRoZSBzdHJ1Y3R1cmUgb2Yg dGhlIHBvaW50ZXIgZWxlbWVudD8gSnVzdCBhIGJvb2wgYXJyYXk/DQo+IA0KDQpZZXMsIHdlIGRl Y2lkZSBiZXR3ZWVuIFdGUSBhbmQgV1JSIGZvciBlYWNoIGdyb3VwIG9mIGNoaWxkcmVuIHdpdGgg c2FtZSBwcmlvcml0eS4NCg0KPiA+ICsNCj4gPiArCQkJLyoqPCBOdW1iZXIgb2YgcHJpb3JpdGll cy4gKi8NCj4gPiArCQkJdWludDMyX3Qgbl9wcmlvcml0aWVzOw0KPiA+ICsJCX0gbm9ubGVhZjsN Cj4gPiArDQo+ID4gKwkJLyoqPCBQYXJhbWV0ZXJzIG9ubHkgdmFsaWQgZm9yIGxlYWYgbm9kZXMu ICovDQo+ID4gKwkJc3RydWN0IHsNCj4gPiArCQkJLyoqPCBDb25nZXN0aW9uIG1hbmFnZW1lbnQg bW9kZSAqLw0KPiA+ICsJCQllbnVtIHJ0ZV9zY2hlZGRldl9jbWFuX21vZGUgY21hbjsNCj4gPiAr DQo+ID4gKwkJCS8qKjwgV1JFRCBwYXJhbWV0ZXJzICh2YWxpZCB3aGVuICpjbWFuKiBpcw0KPiBX UkVEKS4gKi8NCj4gPiArCQkJc3RydWN0IHsNCj4gPiArCQkJCS8qKjwgV1JFRCBwcm9maWxlIGZv ciBwcml2YXRlIFdSRUQgY29udGV4dC4NCj4gKi8NCj4gPiArCQkJCXVpbnQzMl90IHdyZWRfcHJv ZmlsZV9pZDsNCj4gPiArDQo+ID4gKwkJCQkvKio8IFVzZXIgYWxsb2NhdGVkIGFycmF5IG9mIHNo YXJlZCBXUkVEDQo+IGNvbnRleHQNCj4gPiArCQkJCSAqIElEcy4gVGhlIGFic2VuY2Ugb2YgYSBw cml2YXRlIFdSRUQNCj4gY29udGV4dA0KPiA+ICsJCQkJICogZm9yIGN1cnJlbnQgbGVhZiBub2Rl IGlzIGluZGljYXRlZCBieSB2YWx1ZQ0KPiA+ICsJCQkJICoNCj4gUlRFX1NDSEVEREVWX1dSRURf UFJPRklMRV9JRF9OT05FLg0KPiA+ICsJCQkJICovDQo+ID4gKwkJCQl1aW50MzJfdCAqc2hhcmVk X3dyZWRfY29udGV4dF9pZDsNCj4gPiArDQo+ID4gKwkJCQkvKio8IE51bWJlciBvZiBzaGFyZWQg V1JFRCBjb250ZXh0IElEcyBpbg0KPiB0aGUNCj4gPiArCQkJCSAqICpzaGFyZWRfd3JlZF9jb250 ZXh0X2lkKiBhcnJheS4NCj4gPiArCQkJCSAqLw0KPiA+ICsJCQkJdWludDMyX3Qgbl9zaGFyZWRf d3JlZF9jb250ZXh0czsNCj4gPiArCQkJfSB3cmVkOw0KPiA+ICsJCX0gbGVhZjsNCj4gDQo+IG5l ZWQgYSBib29sIGlzX2xlYWYgaGVyZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbGVhZiBhbmQg bm9uLWxlYWYgbm9kZS4NCg0KVGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBvbmx5IHVzZWQgYnkgdGhl IG5vZGVfYWRkKCkgZnVuY3Rpb24uIFRoZSBmYWN0IHdoZXRoZXINCnRoZSBjdXJyZW50IG5vZGUg aXMgbGVhZiBvciBub24tbGVhZiBpcyBkZWNpZGVkIGJ5IHRoZSBub2RlX2lkIHBhcmFtZXRlciBv ZiB0aGUNCm5vZGVfYWRkKCkgZnVuY3Rpb24gKGFzIGRpc2N1c3NlZCBhYm92ZSBvbiB0aGUgY29u dmVudGlvbiBvbiBsZWFmIG5vZGUgSUQNCmVuZm9yY2VkIGJ5IHRoZSBBUEkpLCBzbyBJTU8gYWRk aW5nIHRoZSBpc19sZWFmIGluIHRoZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGlzDQpyZWR1bmRhbnQu DQoNCj4gPiArLyoqDQo+ID4gKyAqIFNjaGVkdWxlciBub2RlIGNhcGFiaWxpdGllcyBnZXQNCj4g PiArICoNCj4gPiArICogQHBhcmFtIHBvcnRfaWQNCj4gPiArICogICBUaGUgcG9ydCBpZGVudGlm aWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UuDQo+ID4gKyAqIEBwYXJhbSBub2RlX2lkDQo+ID4g KyAqICAgTm9kZSBJRC4gTmVlZHMgdG8gYmUgdmFsaWQuDQo+ID4gKyAqIEBwYXJhbSBjYXANCj4g PiArICogICBTY2hlZHVsZXIgbm9kZSBjYXBhYmlsaXRpZXMuIE5lZWRzIHRvIGJlIHByZS1hbGxv Y2F0ZWQgYW5kIHZhbGlkLg0KPiA+ICsgKiBAcGFyYW0gZXJyb3INCj4gPiArICogICBFcnJvciBk ZXRhaWxzLiBGaWxsZWQgaW4gb25seSBvbiBlcnJvciwgd2hlbiBub3QgTlVMTC4NCj4gPiArICog QHJldHVybg0KPiA+ICsgKiAgIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gZXJyb3IgY29kZSBvdGhl cndpc2UuDQo+ID4gKyAqLw0KPiA+ICtpbnQgcnRlX3NjaGVkZGV2X25vZGVfY2FwYWJpbGl0aWVz X2dldCh1aW50OF90IHBvcnRfaWQsDQo+ID4gKwl1aW50MzJfdCBub2RlX2lkLA0KPiA+ICsJc3Ry dWN0IHJ0ZV9zY2hlZGRldl9ub2RlX2NhcGFiaWxpdGllcyAqY2FwLA0KPiA+ICsJc3RydWN0IHJ0 ZV9zY2hlZGRldl9lcnJvciAqZXJyb3IpOw0KPiA+ICsNCj4gDQo+IE5vZGUgY2FwYWJpbGl0aWVz IGlzIGFscmVhZHkgcGFydCBvZiBzY2hlZGRldl9jYXBhYmlsaXRpZXM/DQo+IA0KPiBXaGF0IGFy ZSB5b3UgZXhwZWN0aW5nIGRpZmZlcmVudCBoZXJlLiBVbmxlc3MgeW91IHN1cHBvcnQgZGlmZmVy ZW50DQo+IGNhcGFiaWxpdHkgZm9yIGVhY2ggbGV2ZWwsIHRoaXMgbWF5IG5vdCBiZSB1c2VmdWwu DQo+IA0KDQpZZXMsIHlvdSdyZSByaWdodCwgSSB3aWxsIG1lcmdlIHN0YXRzIGNhcGFiaWxpdHkg cXVlcnkgaW50byB0aGUgY2FwYWJpbGl0eSBBUEkuDQoNCj4gPiArLyoqDQo+ID4gKyAqIFNjaGVk dWxlciBub2RlIGFkZA0KPiA+ICsgKg0KPiA+ICsgKiBXaGVuICpub2RlX2lkKiBpcyBub3QgYSB2 YWxpZCBub2RlIElELCBhIG5ldyBub2RlIHdpdGggdGhpcyBJRCBpcw0KPiBjcmVhdGVkIGFuZA0K PiA+ICsgKiBjb25uZWN0ZWQgYXMgY2hpbGQgdG8gdGhlIGV4aXN0aW5nIG5vZGUgaWRlbnRpZmll ZCBieQ0KPiAqcGFyZW50X25vZGVfaWQqLg0KPiA+ICsgKg0KPiA+ICsgKiBXaGVuICpub2RlX2lk KiBpcyBhIHZhbGlkIG5vZGUgSUQsIHRoaXMgbm9kZSBpcyBkaXNjb25uZWN0ZWQgZnJvbSBpdHMN Cj4gY3VycmVudA0KPiA+ICsgKiBwYXJlbnQgYW5kIGNvbm5lY3RlZCBhcyBjaGlsZCB0byBhbm90 aGVyIGV4aXN0aW5nIG5vZGUgaWRlbnRpZmllZCBieQ0KPiA+ICsgKiAqcGFyZW50X25vZGVfaWQg Ki4NCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGR1cmluZyBw b3J0IGluaXRpYWxpemF0aW9uIHBoYXNlIChiZWZvcmUgdGhlDQo+ID4gKyAqIEV0aGVybmV0IHBv cnQgaXMgc3RhcnRlZCkgZm9yIGJ1aWxkaW5nIHRoZSBzY2hlZHVsZXIgc3RhcnQtdXAgaGllcmFy Y2h5Lg0KPiA+ICsgKiBTdWJqZWN0IHRvIHRoZSBzcGVjaWZpYyBFdGhlcm5ldCBwb3J0IHN1cHBv cnRpbmcgb24tdGhlLWZseSBzY2hlZHVsZXINCj4gPiArICogaGllcmFyY2h5IHVwZGF0ZXMsIHRo aXMgZnVuY3Rpb24gY2FuIGFsc28gYmUgY2FsbGVkIGR1cmluZyBydW4tdGltZQ0KPiAoYWZ0ZXIN Cj4gPiArICogdGhlIEV0aGVybmV0IHBvcnQgaXMgc3RhcnRlZCkuDQo+IA0KPiBUaGlzIHNob3Vs ZCAgYSBjYXBhYmlsaXR5LCB3aGV0aGVyIGR5bmFtaWNfaGllcmFyY2h5X3VwZGF0ZXMgYXJlDQo+ IHN1cHBvcnRlZCBvciBub3QuDQo+IA0KDQpBZ3JlZWQsIHdpbGwgYWRkLg0KDQo+ID4gKyAqDQo+ ID4gKyAqIEBwYXJhbSBwb3J0X2lkDQo+ID4gKyAqICAgVGhlIHBvcnQgaWRlbnRpZmllciBvZiB0 aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiA+ICsgKiBAcGFyYW0gbm9kZV9pZA0KPiA+ICsgKiAgIE5v ZGUgSUQNCj4gPiArICogQHBhcmFtIHBhcmVudF9ub2RlX2lkDQo+ID4gKyAqICAgUGFyZW50IG5v ZGUgSUQuIE5lZWRzIHRvIGJlIHRoZSB2YWxpZC4NCj4gDQo+IFdoYXQgd2lsbCBiZSB0aGUgcGFy ZW50IG5vZGUgaWQgZm9yIHRoZSByb290IG5vZGU/ICBob3cgdGhlIHJvb3Qgbm9kZSBpcw0KPiBj cmVhdGVkIG9uIHRoZSBldGhlcm5ldCBwb3J0Pw0KPiANCg0KVGhlIGZpcnN0IG5vZGUgYWRkZWQg dG8gdGhlIGhpZXJhcmNoeSBzaG91bGQgaGF2ZSBwYXJlbnQgc2V0IHRvDQpSVEVfU0NIRURERVZf Uk9PVF9OT0RFX0lEIGFuZCBiZWNvbWVzIHRoZSBfcmVhbF9yb290XyBub2RlOyBhbGwNCnRoZSBv dGhlciBub2RlcyBzaG91bGQgYmUgYWRkZWQgYXMgY2hpbGRyZW4gb2YgdGhlIF9yZWFsX3Jvb3Rf IG5vZGUgb3IgaXRzDQpkZXNjZW5kYW50cy4NCg0KV2lsbCBhZGQgY29tbWVudCB0byBub2RlX2Fk ZCgpIGZ1bmN0aW9uIHRvIGZ1cnRoZXIgY2xhcmlmeSB0aGlzLg0KDQo+ID4gKyAqIEBwYXJhbSBw cmlvcml0eQ0KPiA+ICsgKiAgIE5vZGUgcHJpb3JpdHkuIFRoZSBoaWdoZXN0IG5vZGUgcHJpb3Jp dHkgaXMgemVyby4gVXNlZCBieSB0aGUgU1ANCj4gYWxnb3JpdGhtDQo+ID4gKyAqICAgcnVubmlu ZyBvbiB0aGUgcGFyZW50IG9mIHRoZSBjdXJyZW50IG5vZGUgZm9yIHNjaGVkdWxpbmcgdGhpcyBj aGlsZA0KPiBub2RlLg0KPiA+ICsgKiBAcGFyYW0gd2VpZ2h0DQo+ID4gKyAqICAgTm9kZSB3ZWln aHQuIFRoZSBub2RlIHdlaWdodCBpcyByZWxhdGl2ZSB0byB0aGUgd2VpZ2h0IHN1bSBvZiBhbGwN Cj4gc2libGluZ3MNCj4gPiArICogICB0aGF0IGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkuIFRoZSBs b3dlc3Qgd2VpZ2h0IGlzIG9uZS4gVXNlZCBieSB0aGUNCj4gV0ZRL1dSUg0KPiA+ICsgKiAgIGFs Z29yaXRobSBydW5uaW5nIG9uIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgbm9kZSBmb3Igc2No ZWR1bGluZw0KPiB0aGlzDQo+ID4gKyAqICAgY2hpbGQgbm9kZS4NCj4gPiArICogQHBhcmFtIHBh cmFtcw0KPiA+ICsgKiAgIE5vZGUgcGFyYW1ldGVycy4gTmVlZHMgdG8gYmUgcHJlLWFsbG9jYXRl ZCBhbmQgdmFsaWQuDQo+ID4gKyAqIEBwYXJhbSBlcnJvcg0KPiA+ICsgKiAgIEVycm9yIGRldGFp bHMuIEZpbGxlZCBpbiBvbmx5IG9uIGVycm9yLCB3aGVuIG5vdCBOVUxMLg0KPiA+ICsgKiBAcmV0 dXJuDQo+ID4gKyAqICAgMCBvbiBzdWNjZXNzLCBub24temVybyBlcnJvciBjb2RlIG90aGVyd2lz ZS4NCj4gPiArICovDQo+ID4gK2ludCBydGVfc2NoZWRkZXZfbm9kZV9hZGQodWludDhfdCBwb3J0 X2lkLA0KPiA+ICsJdWludDMyX3Qgbm9kZV9pZCwNCj4gPiArCXVpbnQzMl90IHBhcmVudF9ub2Rl X2lkLA0KPiA+ICsJdWludDMyX3QgcHJpb3JpdHksDQo+ID4gKwl1aW50MzJfdCB3ZWlnaHQsDQo+ ID4gKwlzdHJ1Y3QgcnRlX3NjaGVkZGV2X25vZGVfcGFyYW1zICpwYXJhbXMsDQo+ID4gKwlzdHJ1 Y3QgcnRlX3NjaGVkZGV2X2Vycm9yICplcnJvcik7DQo+ID4gKw0KDQouLi48c25pcD4NCj4gPiAr LyoqDQo+ID4gKyAqIFNjaGVkdWxlciBub2RlIHBhcmVudCB1cGRhdGUNCj4gPiArICoNCj4gPiAr ICogQHBhcmFtIHBvcnRfaWQNCj4gPiArICogICBUaGUgcG9ydCBpZGVudGlmaWVyIG9mIHRoZSBF dGhlcm5ldCBkZXZpY2UuDQo+ID4gKyAqIEBwYXJhbSBub2RlX2lkDQo+ID4gKyAqICAgTm9kZSBJ RC4gTmVlZHMgdG8gYmUgdmFsaWQuDQo+ID4gKyAqIEBwYXJhbSBwYXJlbnRfbm9kZV9pZA0KPiA+ ICsgKiAgIE5vZGUgSUQgZm9yIHRoZSBuZXcgcGFyZW50LiBOZWVkcyB0byBiZSB2YWxpZC4NCj4g PiArICogQHBhcmFtIHByaW9yaXR5DQo+ID4gKyAqICAgTm9kZSBwcmlvcml0eS4gVGhlIGhpZ2hl c3Qgbm9kZSBwcmlvcml0eSBpcyB6ZXJvLiBVc2VkIGJ5IHRoZSBTUA0KPiBhbGdvcml0aG0NCj4g PiArICogICBydW5uaW5nIG9uIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgbm9kZSBmb3Igc2No ZWR1bGluZyB0aGlzIGNoaWxkDQo+IG5vZGUuDQo+ID4gKyAqIEBwYXJhbSB3ZWlnaHQNCj4gPiAr ICogICBOb2RlIHdlaWdodC4gVGhlIG5vZGUgd2VpZ2h0IGlzIHJlbGF0aXZlIHRvIHRoZSB3ZWln aHQgc3VtIG9mIGFsbA0KPiBzaWJsaW5ncw0KPiA+ICsgKiAgIHRoYXQgaGF2ZSB0aGUgc2FtZSBw cmlvcml0eS4gVGhlIGxvd2VzdCB3ZWlnaHQgaXMgemVyby4gVXNlZCBieSB0aGUNCj4gV0ZRL1dS Ug0KPiA+ICsgKiAgIGFsZ29yaXRobSBydW5uaW5nIG9uIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJl bnQgbm9kZSBmb3Igc2NoZWR1bGluZw0KPiB0aGlzDQo+ID4gKyAqICAgY2hpbGQgbm9kZS4NCj4g PiArICogQHBhcmFtIGVycm9yDQo+ID4gKyAqICAgRXJyb3IgZGV0YWlscy4gRmlsbGVkIGluIG9u bHkgb24gZXJyb3IsIHdoZW4gbm90IE5VTEwuDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAw IG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIGVycm9yIGNvZGUgb3RoZXJ3aXNlLg0KPiA+ICsgKi8NCj4g PiAraW50IHJ0ZV9zY2hlZGRldl9ub2RlX3BhcmVudF91cGRhdGUodWludDhfdCBwb3J0X2lkLA0K PiA+ICsJdWludDMyX3Qgbm9kZV9pZCwNCj4gPiArCXVpbnQzMl90IHBhcmVudF9ub2RlX2lkLA0K PiA+ICsJdWludDMyX3QgcHJpb3JpdHksDQo+ID4gKwl1aW50MzJfdCB3ZWlnaHQsDQo+ID4gKwlz dHJ1Y3QgcnRlX3NjaGVkZGV2X2Vycm9yICplcnJvcik7DQo+ID4gKw0KPiANCj4gVGhlIHVzYWdl cyBhcmUgbm90IGNsZWFyLiBIb3cgaXQgaXMgZGlmZmVyZW50IGZyb20gbm9kZV9hZGQgQVBJLg0K PiBpcyB0aGUgaW50ZW50aW9uIHRvIHVwZGF0ZSBhIHNwZWNpZmljIG5vZGUgb3IgY2hhbmdlIHRo ZSBjb25uZWN0aW9uIG9mIGENCj4gc3BlY2lmaWMgbm9kZSB0byBhIGV4aXN0aW5nIG9yIG5ldyBw YXJlbnQuDQo+IA0KDQpZZXMuDQoNClRoZSBub2RlX2FkZCgpIEFQSSBmdW5jdGlvbiBzaG91bGQg YmUgY2FsbGVkIG9ubHkgdG8gY3JlYXRlIG5vZGVzIHRoYXQgZG8NCm5vdCBleGlzdCB5ZXQuIEJh c2ljYWxseSwgdGhlIHByb3ZpZGVkIG5vZGVfaXMgc2hvdWxkIG5vdCBiZSBpbiB1c2Ugd2hlbg0K bm9kZV9hZGQoKSBpcyBjYWxsZWQuIFdpbGwgdXBkYXRlIHRoZSBmdW5jdGlvbiBkZXNjcmlwdGlv biAoc29ycnksIEkgdGhvdWdodCBJDQphbHJlYWR5IGRvY3VtZW50ZWQgdGhpcywgYnV0IGxvb2tz IGxpa2UgaXQgc2xpcHBlZCBzb21laG93IHRvIG1lKS4NCg0KQWxsIHRoZSBub2RlX3h5el91cGRh dGUoKSBBUEkgZnVuY3Rpb25zIHNob3VsZCBiZSBjYWxsZWQgb25seSBvbiBub2Rlcw0KdGhhdCBh bHJlYWR5IGV4aXN0IGZvciB0eXBpY2FsbHkgcnVuLXRpbWUgdXBkYXRlcy4NCg0KSU1PIHRoaXMg Y29udmVudGlvbiBwcm92aWRlcyBhIGNsZWFyIHdheSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4g dGhlIGNyZWF0aW9uDQp2cy4gcG9zdC1jcmVhdGlvbiB1cGRhdGUgbWVjaGFuaXNtcy4NCg0KLi4u PHNuaXA+DQoNClJlZ2FyZHMsDQpDcmlzdGlhbg0KDQo=