Return-path: Received: from mx0a-0016f401.pphosted.com ([67.231.148.174]:20426 "EHLO mx0a-0016f401.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751848AbbKZIfG (ORCPT ); Thu, 26 Nov 2015 03:35:06 -0500 From: David Lin To: Jes Sorensen CC: Kalle Valo , Johannes Berg , "linux-wireless@vger.kernel.org" , Chor Teck Law , "Pete Hsieh" Subject: RE: [PATCH v7] Add new mac80211 driver mwlwifi. Date: Thu, 26 Nov 2015 08:34:56 +0000 Message-ID: <3bf67af749304724a33c2b7f7b3caa51@SC-EXCH02.marvell.com> (sfid-20151126_093513_902874_11044455) References: In-Reply-To: Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-wireless-owner@vger.kernel.org List-ID: PiBPbiBOb3ZlbWJlciAxMywgMjAxNSAzOjQ4IEFNLCBKZXMgU29yZW5zZW4gd3JvdGU6DQo+IA0K PiBEYXZpZCBMaW4gPGRsaW5AbWFydmVsbC5jb20+IHdyaXRlczoNCj4gPiBUaGlzIHBhdGNoIHBy b3ZpZGVzIHRoZSBtd2x3aWZpIGRyaXZlciBmb3IgTWFydmVsbCA4ODYzLCA4ODY0IGFuZCA4ODk3 DQo+ID4gY2hpcHNldHMuDQo+ID4gVGhpcyBkcml2ZXIgd2FzIGRldmVsb3BlZCBhcyBwYXJ0IG9m IHRoZSBvcGVud3J0Lm9yZyBwcm9qZWN0IHRvDQo+ID4gc3VwcG9ydCBMaW5rc3lzIFdSVDE5MDBB QyBhbmQgaXMgbWFpbnRhaW5lZCBvbg0KPiBodHRwczovL2dpdGh1Yi5jb20va2Fsb3ovbXdsd2lm aS4NCj4gPg0KPiA+IFRoZSBtd2x3aWZpIGRyaXZlciBkaWZmZXJzIGZyb20gZXhpc3RpbmcgbXdp ZmlleCBkcml2ZXI6DQo+ID4gbyBtd2x3aWZpIGlzIGEgInNvZnRtYWMgZHJpdmVyIiB1c2luZyB0 aGUga2VybmVsP+6ogyBtYWM4MDIuMTEgc3Vic3lzdGVtDQo+ID4gdG8gcHJvdmlkZSBmdWxsIEFQ L1dpcmVsZXNzIEJyaWRnZSBmdW5jdGlvbmFsaXR5IChyb3V0ZXJzKS4NCj4gPiBvIG13aWZpZXgg aXMgYSAiZnVsbG1hYyBkcml2ZXIiIHdoaWNoIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSBzZXQg b2YNCj4gPiBjbGllbnQgZnVuY3Rpb25zIChsYXB0b3BzL2VtYmVkZGVkIGRldmljZXMpIG8gb25s eSBtd2x3aWZpIHN1cHBvcnRzDQo+ID4gTWFydmVsbCBBUCBjaGlwIDg4Nlggc2VyaWVzDQo+ID4N Cj4gPiBOT1RFOiBVc2VycyB3aXRoIE1hcnZlbGwgODhXODg5NyBjaGlwc2V0cyBjdXJyZW50bHkg c2hvdWxkIGVuYWJsZQ0KPiA+IChDT05GSUc9WSBvciBNKSBlaXRoZXIgQ09ORklHX01XSUZJRVgg b3IgQ09ORklHX01XTFdJRkksIE5PVA0KPiBCT1RILg0KPiANCj4gSSBkaWRuJ3QgZ2V0IHZlcnkg ZmFyIHJlYWRpbmcgdGhyb3VnaCB0aGlzIC0gYnV0IHRoZXJlIHdhcyBhIGZldyBiaXRzIHRoYXQg c3Rvb2QNCj4gb3V0IGxpa2UgYSBzb3JlIHRodW1iLg0KPiANCj4gPiBtd2x3aWZpIGRyaXZlciBs ZXZlcmFnZWQgY29kZSBmcm9tIGV4aXN0aW5nIE1XTDhLIGRyaXZlciBpbiB0aGUNCj4gPiBmb2xs b3dpbmcgYXJlYXM6DQo+ID4gLSA4MDIuMTFuIHNldHRpbmcgZm9yIG1hYzgwMjExDQo+ID4gLSBG dW5jdGlvbnMgbmVlZGVkIHRvIGhvb2sgdXAgdG8gbWFjODAyMTENCj4gPiAtIEludGVyYWN0aW9u cyB3aXRoIG1hYzgwMjExIHRvIGVzdGFibGlzaCBCQSBzdHJlYW1zDQo+ID4gLSBQYXJ0aWFsIGZp cm13YXJlIEFQSXMsIHNvbWUgZGF0YSBmaWVsZHMNCj4gPiAtIE1ldGhvZCB0byBwYXNzIFJ4IHBh Y2tldHMgdG8gbWFjODAyMTEgZXhjZXB0IDExYWMgcmF0ZXMNCj4gPg0KPiA+IEluIGFkZGl0aW9u LCBtd2x3aWZpIGRyaXZlciBzdXBwb3J0czoNCj4gPiAtIGZ1dHVyZSBzY2FsYWJpbGl0eSBhbmQg ZnV0dXJlIGRldmVsb3BtZW50IChyZWZhY3RvcmVkIHNvdXJjZSBjb2RlKQ0KPiA+IC0gTWFydmVs bCA4MDIuMTFhYyBjaGlwc2V0cywgaW5jbHVkaW5nIGNvbWJvIEJUIGRldmljZXMNCj4gPiAtIDgw Mi4xMWFjIHJlbGF0ZWQgc2V0dGluZ3MgYW5kIGZ1bmN0aW9ucw0KPiA+IC0gY29uY3VycmVudCBB UCtTVEEgZnVuY3Rpb25hbGl0aWVzIHdpdGggc2luZ2xlIGZpcm13YXJlIHBlciBjaGlwDQo+ID4g LSBmaXJtd2FyZSBBUElzIGZvciB0aGUgc3VwcG9ydGVkIGNoaXBzZXQNCj4gPiAtIGNvbW11bmlj YXRpbmcgbmV3IG1hYzgwMjExIHNldHRpbmdzIHRvIGZpcm13YXJlDQo+ID4gLSBEaWZmZXJlbnQg VFgvUlggZGF0YXBhdGggd2hlcmUgYXBwbGljYWJsZQ0KPiA+IC0gQS1NU0RVIGFuZCBBLU1QRFUN Cj4gPiAtIG1hYzgwMjExLWJhc2VkIE1FU0ggKHdvcmsgaW4gcHJvZ3Jlc3MpDQo+ID4gLSBSZWZp bmVkIHRoZSBjb2RlIHRvIGVzdGFibGlzaCBCQSBzdHJlYW1zDQo+ID4NCj4gPiBOT1RFOiBNV0xX SUZJIHdpbGwgYmUgb3JnYW5pemVkIHVuZGVyIG5ldyB2ZW5kb3Igc3BlY2lmaWMNCj4gPiBmb2xk ZXIvbWFydmVsbCwgYXMgcGVyIHJlcXVlc3Qgb2YgdGhlIGdhdGUga2VlcGVyIGFuZCBjb21tdW5p dHkuDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBEYXZpZCBMaW4gPGRsaW5AbWFydmVsbC5jb20+ DQo+ID4gLS0tDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVS UyBpbmRleCAyN2IyN2MwLi43YzMyZjBhIDEwMDY0NA0KPiA+IC0tLSBhL01BSU5UQUlORVJTDQo+ ID4gKysrIGIvTUFJTlRBSU5FUlMNCj4gPiBAQCAtNjYyOSw2ICs2NjI5LDEyIEBAIEw6CWxpbnV4 LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZw0KPiA+ICBTOglPZGQgRml4ZXMNCj4gPiAgRjoJZHJp dmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYw0KPiA+DQo+ID4gK01BUlZFTEwgTVdMV0lGSSBXSVJF TEVTUyBEUklWRVINCj4gPiArTToJRGF2aWQgTGluIDxkbGluQG1hcnZlbGwuY29tPg0KPiA+ICtM OglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcNCj4gPiArUzoJTWFpbnRhaW5lZA0KPiA+ ICtGOglkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkNCj4gPiArDQo+ID4gIE1B UlZFTEwgU09DIE1NQy9TRC9TRElPIENPTlRST0xMRVIgRFJJVkVSDQo+ID4gIE06CU5pY29sYXMg UGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+DQo+ID4gIFM6CU9kZCBGaXhlcw0KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnDQo+ID4gYi9kcml2ZXJzL25ldC93aXJl bGVzcy9LY29uZmlnIGluZGV4IGY5Zjk0MjIuLmQ1OTliMzUgMTAwNjQ0DQo+ID4gLS0tIGEvZHJp dmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZw0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNz L0tjb25maWcNCj4gPiBAQCAtMjg1LDUgKzI4NSw2IEBAIHNvdXJjZSAiZHJpdmVycy9uZXQvd2ly ZWxlc3MvemQxMjExcncvS2NvbmZpZyINCj4gPiAgc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVz cy9td2lmaWV4L0tjb25maWciDQo+ID4gIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvY3cx MjAwL0tjb25maWciDQo+ID4gIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25m aWciDQo+ID4gK3NvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9LY29uZmlnIg0K PiA+DQo+ID4gIGVuZGlmICMgV0xBTg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJl bGVzcy9NYWtlZmlsZQ0KPiA+IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUgaW5kZXgg NzQwZmRkMy4uNzE1MDRhNyAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9N YWtlZmlsZQ0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlDQo+ID4gQEAg LTYwLDMgKzYwLDUgQEAgb2JqLSQoQ09ORklHX0JSQ01TTUFDKQkrPSBicmNtODAyMTEvDQo+ID4N Cj4gPiAgb2JqLSQoQ09ORklHX0NXMTIwMCkJKz0gY3cxMjAwLw0KPiA+ICBvYmotJChDT05GSUdf UlNJXzkxWCkJKz0gcnNpLw0KPiA+ICsNCj4gPiArb2JqLSQoQ09ORklHX1dMX01BUlZFTEwpCSs9 IG1hcnZlbGwvDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwv S2NvbmZpZw0KPiA+IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9LY29uZmlnDQo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi5kNzNlNjQyDQo+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvS2NvbmZp Zw0KPiA+IEBAIC0wLDAgKzEsOCBAQA0KPiA+ICttZW51Y29uZmlnIFdMX01BUlZFTEwNCj4gPiAr CWJvb2wgIk1hcnZlbGwgV2lyZWxlc3MgTEFOIHN1cHBvcnQiDQo+ID4gKwktLS1oZWxwLS0tDQo+ ID4gKwkgIEVuYWJsZSBjb21tdW5pdHkgZHJpdmVycyBmb3IgTWFydmVsbCBXaS1GaSBkZXZpY2Vz Lg0KPiA+ICsNCj4gPiAraWYgV0xfTUFSVkVMTA0KPiA+ICtzb3VyY2UgImRyaXZlcnMvbmV0L3dp cmVsZXNzL21hcnZlbGwvbXdsd2lmaS9LY29uZmlnIg0KPiA+ICtlbmRpZiAjIFdMX01BUlZFTEwN Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9NYWtlZmlsZQ0K PiA+IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9NYWtlZmlsZQ0KPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uNzBkMWIzZg0KPiA+IC0tLSAvZGV2L251 bGwNCj4gPiArKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL01ha2VmaWxlDQo+ID4g QEAgLTAsMCArMSBAQA0KPiA+ICtvYmotJChDT05GSUdfTVdMV0lGSSkJKz0gbXdsd2lmaS8NCj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL0tjb25m aWcNCj4gPiBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9LY29uZmlnDQo+ ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi5hOWJjYjljDQo+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXds d2lmaS9LY29uZmlnDQo+ID4gQEAgLTAsMCArMSwyMyBAQA0KPiA+ICtjb25maWcgTVdMV0lGSQ0K PiA+ICsgdHJpc3RhdGUgIk1hcnZlbGwgQXZhc3RhciA4OFc4ODY0Lzg4Vzg4OTcgUENJZSBkcml2 ZXIgKG1hYzgwMjExDQo+ID4gY29tcGF0aWJsZSkiDQo+ID4gKwlkZXBlbmRzIG9uIFBDSSAmJiBN QUM4MDIxMQ0KPiA+ICsJc2VsZWN0IEZXX0xPQURFUg0KPiA+ICsJLS0taGVscC0tLQ0KPiA+ICsJ CVNlbGVjdCB0byBidWlsZCB0aGUgZHJpdmVyIHN1cHBvcnRpbmcgdGhlOg0KPiA+ICsNCj4gPiAr CQlNYXJ2ZWxsIFdpcmVsZXNzIFdpLUZpIDg4Vzg4NjQgbW9kdWxlcw0KPiA+ICsJCU1hcnZlbGwg V2lyZWxlc3MgV2ktRmkgODhXODg5NyBtb2R1bGVzDQo+ID4gKw0KPiA+ICsJCVRoaXMgZHJpdmVy IHVzZXMgdGhlIGtlcm5lbCdzIG1hYzgwMjExIHN1YnN5c3RlbS4NCj4gPiArDQo+ID4gKyBJZiB5 b3Ugd2FudCB0byBjb21waWxlIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUgKD0gY29kZSB3aGljaCBj YW4gYmUNCj4gPiAraW5zZXJ0ZWQgaW4gYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJu ZWwgd2hlbmV2ZXIgeW91IHdhbnQpLA0KPiA+ICtzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRv Y3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4gIFRoZQ0KPiA+ICsJCW1vZHVsZSB3aWxs IGJlIGNhbGxlZCBtd2x3aWZpLg0KPiA+ICsNCj4gPiArIE5PVEU6IFNlbGVjdGluZyB0aGlzIGRy aXZlciBtYXkgY2F1c2UgY29uZmxpY3Qgd2l0aCBNV0lGSUVYIGRyaXZlcg0KPiA+ICsJCXRoYXQg YWxzbyBvcGVyYXRlcyBvbiB0aGUgc2FtZSBwYXJ0IG51bWJlciA4OFc4ODk3LiBVc2VycyBzaG91 bGQNCj4gPiArCQlzZWxlY3QgZWl0aGVyIE1XSUZJRVggb3IgTVdMV0lGSSwgbm90IGJvdGguIE1X SUZJRVggaXMgZnVsbG1hYywNCj4gPiArc3VwcG9ydGluZyBtb3JlIGNvbXByZWhlbnNpdmUgY2xp ZW50IGZ1bmN0aW9ucyBmb3IgbGFwdG9wcy9lbWJlZGRlZA0KPiA+ICsJCWRldmljZXMuIE1XTFdJ RkkgaXMgbWFjODAyMTEtYmFzZWQgZm9yIGZ1bGwgQVAvV2lyZWxlc3MgQnJpZGdlLg0KPiA+ICsN Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL01h a2VmaWxlDQo+ID4gYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvTWFrZWZp bGUNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLjg4ZjdlZmQN Cj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVs bC9td2x3aWZpL01ha2VmaWxlDQo+ID4gQEAgLTAsMCArMSwxMiBAQA0KPiA+ICtvYmotJChDT05G SUdfTVdMV0lGSSkJKz0gbXdsd2lmaS5vDQo+ID4gKw0KPiA+ICttd2x3aWZpLW9ianMJCSs9IG1h aW4ubw0KPiA+ICttd2x3aWZpLW9ianMJCSs9IG1hYzgwMjExLm8NCj4gPiArbXdsd2lmaS1vYmpz CQkrPSBmd2RsLm8NCj4gPiArbXdsd2lmaS1vYmpzCQkrPSBmd2NtZC5vDQo+ID4gK213bHdpZmkt b2JqcwkJKz0gdHgubw0KPiA+ICttd2x3aWZpLW9ianMJCSs9IHJ4Lm8NCj4gPiArbXdsd2lmaS1v YmpzCQkrPSBpc3Iubw0KPiA+ICttd2x3aWZpLSQoQ09ORklHX0RFQlVHX0ZTKSArPSBkZWJ1Z2Zz Lm8NCj4gPiArDQo+ID4gK2NjZmxhZ3MteSArPSAtRF9fQ0hFQ0tfRU5ESUFOX18NCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2RlYnVnZnMuYw0K PiA+IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2RlYnVnZnMuYw0KPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uOTk3NDYxYQ0KPiA+IC0t LSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdp ZmkvZGVidWdmcy5jDQo+ID4gQEAgLTAsMCArMSw0MzMgQEANCj4gPiArLyoNCj4gPiArICogQ29w eXJpZ2h0IChDKSAyMDA2LTIwMTUsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQo+ID4gKyAq DQo+ID4gKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQg YnkgTWFydmVsbA0KPiA+ICtJbnRlcm5hdGlvbmFsDQo+ID4gKyAqIEx0ZC4gdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsDQo+ID4gK0p1 bmUgMTk5MQ0KPiA+ICsgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmli dXRlIGFuZC9vciBtb2RpZnkgdGhpcw0KPiA+ICtGaWxlIGluDQo+ID4gKyAqIGFjY29yZGFuY2Ug d2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZg0K PiA+ICt3aGljaA0KPiA+ICsgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQo+ID4gKyAqDQo+ID4gKyAqIFRIRSBGSUxFIElTIERJ U1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQNCj4gPiAr VEhFDQo+ID4gKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklU TkVTUyBGT1IgQQ0KPiBQQVJUSUNVTEFSDQo+ID4gK1BVUlBPU0UNCj4gPiArICogQVJFIEVYUFJF U1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxz DQo+ID4gK2Fib3V0DQo+ID4gKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4NCj4gPiArICov DQo+ID4gKw0KPiA+ICsvKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGRlYnVn IGZzIHJlbGF0ZWQgZnVuY3Rpb25zLiAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Rl YnVnZnMuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJzeXNhZHB0LmgiDQo+ID4gKyNpbmNsdWRl ICJkZXYuaCINCj4gPiArI2luY2x1ZGUgImhvc3RjbWQuaCINCj4gPiArI2luY2x1ZGUgImZ3Y21k LmgiDQo+ID4gKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiDQo+ID4gKw0KPiA+ICsjZGVmaW5lIE1XTFdJ RklfREVCVUdGU19BRERfRklMRShuYW1lKSBkbyB7IFwNCj4gPiArCWlmICghZGVidWdmc19jcmVh dGVfZmlsZSgjbmFtZSwgMDY0NCwgcHJpdi0+ZGVidWdmc19waHksIFwNCj4gPiArCQkJCSBwcml2 LCAmbXdsX2RlYnVnZnNfIyNuYW1lIyNfZm9wcykpIFwNCj4gPiArCQlyZXR1cm47IFwNCj4gPiAr fSB3aGlsZSAoMCkNCj4gDQo+IFRoaXMgbWFjcm9zIHJlbGllcyBvbiBpbXBsaWNpdCBhcmd1bWVu dHMgd2hpY2ggaXMganVzdCBiYWQgYW5kIGRvZXNuJ3QgcmVhbGx5DQo+IGRvIGFueXRoaW5nIGV4 Y2VwdCBmb3Igb2JmdXNjYXRpbmcgdGhlIGNvZGUuDQo+IA0KDQpUaGFua3MgZm9yIGZlZWRiYWNr LiBUaGVzZSBjb2RlcyBhcmUgbGV2ZXJhZ2VkIGZyb20gZXhpc3RpbmcgbXdpZmlleCBkcml2ZXIg Zm9yIGNvbnNpc3RlbmN5LiBQbGVhc2Uga2luZGx5IGFjY2VwdCBpdCBhcyBpcyBub3csIGFuZCBJ IHdpbGwgaW5pdGlhdGUgYSB0YXNrIHRvIGRpc2N1c3Mgd2l0aCBtd2lmaWV4IG1haW50YWluZXIg YWJvdXQgdGhpcyBjb21tZW50LiBUaGVuIHdlIHdpbGwgY29tZSBiYWNrIHdpdGggc3VnZ2VzdGlv bi9jaGFuZ2UuDQoNCj4gPiArI2RlZmluZSBNV0xXSUZJX0RFQlVHRlNfRklMRV9PUFMobmFtZSkg XCBzdGF0aWMgY29uc3Qgc3RydWN0DQo+ID4gK2ZpbGVfb3BlcmF0aW9ucyBtd2xfZGVidWdmc18j I25hbWUjI19mb3BzID0geyBcDQo+ID4gKwkucmVhZCA9IG13bF9kZWJ1Z2ZzXyMjbmFtZSMjX3Jl YWQsIFwNCj4gPiArCS53cml0ZSA9IG13bF9kZWJ1Z2ZzXyMjbmFtZSMjX3dyaXRlLCBcDQo+ID4g Kwkub3BlbiA9IHNpbXBsZV9vcGVuLCBcDQo+ID4gK30NCj4gPiArDQo+ID4gKyNkZWZpbmUgTVdM V0lGSV9ERUJVR0ZTX0ZJTEVfUkVBRF9PUFMobmFtZSkgXCBzdGF0aWMgY29uc3Qgc3RydWN0DQo+ ID4gK2ZpbGVfb3BlcmF0aW9ucyBtd2xfZGVidWdmc18jI25hbWUjI19mb3BzID0geyBcDQo+ID4g KwkucmVhZCA9IG13bF9kZWJ1Z2ZzXyMjbmFtZSMjX3JlYWQsIFwNCj4gPiArCS5vcGVuID0gc2lt cGxlX29wZW4sIFwNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2RlZmluZSBNV0xXSUZJX0RFQlVHRlNf RklMRV9XUklURV9PUFMobmFtZSkgXCBzdGF0aWMgY29uc3Qgc3RydWN0DQo+ID4gK2ZpbGVfb3Bl cmF0aW9ucyBtd2xfZGVidWdmc18jI25hbWUjI19mb3BzID0geyBcDQo+ID4gKwkud3JpdGUgPSBt d2xfZGVidWdmc18jI25hbWUjI193cml0ZSwgXA0KPiA+ICsJLm9wZW4gPSBzaW1wbGVfb3Blbiwg XA0KPiA+ICt9DQo+IA0KPiBBZ2FpbiBoZXJlIC0geW91IHVzZSB0aGllc2Ugd3JhcHBlcnMgb25j ZSwganVzdCBkZWNsYXJlIHRoZSBzdHJ1Y3RzIGV4cGxpY2l0bHkNCj4gcmF0aGVyIHRoYW4gdGhp cyBtYWNybyB3cmFwcGluZyBkYW5jZS4NCj4gDQoNClRoYW5rcyBmb3IgZmVlZGJhY2suIFRoZXNl IGNvZGVzIGFyZSBsZXZlcmFnZWQgZnJvbSBleGlzdGluZyBtd2lmaWV4IGRyaXZlciBmb3IgY29u c2lzdGVuY3kuIFBsZWFzZSBraW5kbHkgYWNjZXB0IGl0IGFzIGlzIG5vdywgYW5kIEkgd2lsbCBp bml0aWF0ZSBhIHRhc2sgdG8gZGlzY3VzcyB3aXRoIG13aWZpZXggbWFpbnRhaW5lciBhYm91dCB0 aGlzIGNvbW1lbnQuIFRoZW4gd2Ugd2lsbCBjb21lIGJhY2sgd2l0aCBzdWdnZXN0aW9uL2NoYW5n ZS4NCg0KPiA+ICtzdGF0aWMgaW50IHByaW50X21hY19hZGRyKGNoYXIgKnAsIHU4ICptYWNfYWRk cikgew0KPiA+ICsJaW50IGk7DQo+ID4gKwljaGFyICpzdHIgPSBwOw0KPiA+ICsNCj4gPiArCXN0 ciArPSBzcHJpbnRmKHN0ciwgIm1hYyBhZGRyZXNzOiAlMDJ4IiwgbWFjX2FkZHJbMF0pOw0KPiA+ ICsJZm9yIChpID0gMTsgaSA8IEVUSF9BTEVOOyBpKyspDQo+ID4gKwkJc3RyICs9IHNwcmludGYo c3RyLCAiOiUwMngiLCBtYWNfYWRkcltpXSk7DQo+ID4gKwlzdHIgKz0gc3ByaW50ZihzdHIsICJc biIpOw0KPiA+ICsNCj4gPiArCXJldHVybiAoc3RyIC0gcCk7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgZHVtcF9kYXRhKGNoYXIgKnAsIHU4ICpkYXRhLCBpbnQgbGVuLCBjaGFyICp0 aXRsZSkgew0KPiA+ICsJY2hhciAqc3RyID0gcDsNCj4gPiArCWludCBjdXJfYnl0ZSA9IDA7DQo+ ID4gKwlpbnQgaTsNCj4gPiArDQo+ID4gKwlzdHIgKz0gc3ByaW50ZihzdHIsICIlc1xuIiwgdGl0 bGUpOw0KPiA+ICsJZm9yIChjdXJfYnl0ZSA9IDA7IGN1cl9ieXRlIDwgbGVuOyBjdXJfYnl0ZSAr PSA4KSB7DQo+ID4gKwkJaWYgKChjdXJfYnl0ZSArIDgpIDwgbGVuKSB7DQo+ID4gKwkJCWZvciAo aSA9IDA7IGkgPCA4OyBpKyspDQo+ID4gKwkJCQlzdHIgKz0gc3ByaW50ZihzdHIsICIweCUwMngg IiwNCj4gPiArCQkJCQkgICAgICAgKihkYXRhICsgY3VyX2J5dGUgKyBpKSk7DQo+ID4gKwkJCXN0 ciArPSBzcHJpbnRmKHN0ciwgIlxuIik7DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJZm9yIChp ID0gMDsgaSA8IChsZW4gLSBjdXJfYnl0ZSk7IGkrKykNCj4gPiArCQkJCXN0ciArPSBzcHJpbnRm KHN0ciwgIjB4JTAyeCAiLA0KPiA+ICsJCQkJCSAgICAgICAqKGRhdGEgKyBjdXJfYnl0ZSArIGkp KTsNCj4gPiArCQkJc3RyICs9IHNwcmludGYoc3RyLCAiXG4iKTsNCj4gPiArCQkJYnJlYWs7DQo+ ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAoc3RyIC0gcCk7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6ZV90IG13bF9kZWJ1Z2ZzX2luZm9fcmVhZChzdHJ1Y3Qg ZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVidWYsDQo+ID4gKwkJCQkgICAgIHNpemVfdCBjb3Vu dCwgbG9mZl90ICpwcG9zKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSAo c3RydWN0IG13bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOw0KPiA+ICsJdW5zaWduZWQgbG9u ZyBwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOw0KPiA+ICsJY2hhciAqcCA9IChj aGFyICopcGFnZTsNCj4gPiArCXNzaXplX3QgcmV0Ow0KPiA+ICsNCj4gPiArCWlmICghcCkNCj4g PiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwlwICs9IHNwcmludGYocCwgIlxuIik7 DQo+ID4gKwlwICs9IHNwcmludGYocCwgImRyaXZlciBuYW1lOiAlc1xuIiwgTVdMX0RSVl9OQU1F KTsNCj4gPiArCXAgKz0gc3ByaW50ZihwLCAiY2hpcCB0eXBlOiAlc1xuIiwNCj4gPiArCQkgICAg IChwcml2LT5jaGlwX3R5cGUgPT0gTVdMODg2NCkgPyAiODhXODg2NCIgOiAiODhXODg5NyIpOw0K PiA+ICsJcCArPSBzcHJpbnRmKHAsICJodyB2ZXJzaW9uOiAlWFxuIiwgcHJpdi0+aHdfZGF0YS5o d192ZXJzaW9uKTsNCj4gPiArCXAgKz0gc3ByaW50ZihwLCAiZHJpdmVyIHZlcnNpb246ICVzXG4i LCBNV0xfRFJWX1ZFUlNJT04pOw0KPiA+ICsJcCArPSBzcHJpbnRmKHAsICJmaXJtd2FyZSB2ZXJz aW9uOiAweCUwOHhcbiIsDQo+ID4gKwkJICAgICBwcml2LT5od19kYXRhLmZ3X3JlbGVhc2VfbnVt KTsNCj4gPiArCXAgKz0gcHJpbnRfbWFjX2FkZHIocCwgcHJpdi0+aHdfZGF0YS5tYWNfYWRkcik7 DQo+ID4gKwlwICs9IHNwcmludGYocCwgIjJnOiAlc1xuIiwgcHJpdi0+ZGlzYWJsZV8yZyA/ICJk aXNhYmxlIiA6ICJlbmFibGUiKTsNCj4gPiArCXAgKz0gc3ByaW50ZihwLCAiNWc6ICVzXG4iLCBw cml2LT5kaXNhYmxlXzVnID8gImRpc2FibGUiIDogImVuYWJsZSIpOw0KPiA+ICsJcCArPSBzcHJp bnRmKHAsICJhbnRlbm5hOiAlZCAlZFxuIiwNCj4gPiArCQkgICAgIChwcml2LT5hbnRlbm5hX3R4 ID09IEFOVEVOTkFfVFhfNF9BVVRPKSA/IDQgOiAyLA0KPiA+ICsJCSAgICAgKHByaXYtPmFudGVu bmFfcnggPT0gQU5URU5OQV9UWF80X0FVVE8pID8gNCA6IDIpOw0KPiA+ICsJcCArPSBzcHJpbnRm KHAsICJpcnEgbnVtYmVyOiAlZFxuIiwgcHJpdi0+aXJxKTsNCj4gPiArCXAgKz0gc3ByaW50Zihw LCAiaW9iYXNlMDogJXBcbiIsIHByaXYtPmlvYmFzZTApOw0KPiA+ICsJcCArPSBzcHJpbnRmKHAs ICJpb2Jhc2UxOiAlcFxuIiwgcHJpdi0+aW9iYXNlMSk7DQo+ID4gKwlwICs9IHNwcmludGYocCwg InR4IGxpbWl0OiAlZFxuIiwgcHJpdi0+dHhxX2xpbWl0KTsNCj4gPiArCXAgKz0gc3ByaW50Zihw LCAicnggbGltaXQ6ICVkXG4iLCBwcml2LT5yZWN2X2xpbWl0KTsNCj4gPiArCXAgKz0gc3ByaW50 ZihwLCAiYXAgbWFjaWQgc3VwcG9ydDogJTA4eFxuIiwNCj4gPiArCQkgICAgIHByaXYtPmFwX21h Y2lkc19zdXBwb3J0ZWQpOw0KPiA+ICsJcCArPSBzcHJpbnRmKHAsICJzdGEgbWFjaWQgc3VwcG9y dDogJTA4eFxuIiwNCj4gPiArCQkgICAgIHByaXYtPnN0YV9tYWNpZHNfc3VwcG9ydGVkKTsNCj4g PiArCXAgKz0gc3ByaW50ZihwLCAibWFjaWQgdXNlZDogJTA4eFxuIiwgcHJpdi0+bWFjaWRzX3Vz ZWQpOw0KPiA+ICsJcCArPSBzcHJpbnRmKHAsICJtZmcgbW9kZTogJXNcbiIsIHByaXYtPm1mZ19t b2RlID8gInRydWUiIDogImZhbHNlIik7DQo+ID4gKwlwICs9IHNwcmludGYocCwgIlxuIik7DQo+ ID4gKw0KPiA+ICsJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY291bnQsIHBw b3MsIChjaGFyICopcGFnZSwNCj4gPiArCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKXAgLSBwYWdl KTsNCj4gPiArCWZyZWVfcGFnZShwYWdlKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3NpemVfdCBtd2xfZGVidWdmc192aWZfcmVhZChzdHJ1 Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVidWYsDQo+ID4gKwkJCQkgICAgc2l6ZV90IGNv dW50LCBsb2ZmX3QgKnBwb3MpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9 IChzdHJ1Y3QgbXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7DQo+ID4gKwl1bnNpZ25lZCBs b25nIHBhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7DQo+ID4gKwljaGFyICpwID0g KGNoYXIgKilwYWdlOw0KPiA+ICsJc3RydWN0IG13bF92aWYgKm13bF92aWY7DQo+ID4gKwlzdHJ1 Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOw0KPiA+ICsJY2hhciBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJ RF9MRU4gKyAxXTsNCj4gPiArCXNzaXplX3QgcmV0Ow0KPiA+ICsNCj4gPiArCWlmICghcCkNCj4g PiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwlwICs9IHNwcmludGYocCwgIlxuIik7 DQo+ID4gKwlzcGluX2xvY2tfYmgoJnByaXYtPnZpZl9sb2NrKTsNCj4gPiArCWxpc3RfZm9yX2Vh Y2hfZW50cnkobXdsX3ZpZiwgJnByaXYtPnZpZl9saXN0LCBsaXN0KSB7DQo+ID4gKwkJdmlmID0g Y29udGFpbmVyX29mKChjaGFyICopbXdsX3ZpZiwgc3RydWN0IGllZWU4MDIxMV92aWYsDQo+ID4g KwkJCQkgICBkcnZfcHJpdlswXSk7DQo+ID4gKwkJcCArPSBzcHJpbnRmKHAsICJtYWNpZDogJWRc biIsIG13bF92aWYtPm1hY2lkKTsNCj4gPiArCQlzd2l0Y2ggKHZpZi0+dHlwZSkgew0KPiA+ICsJ CWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6DQo+ID4gKwkJCXAgKz0gc3ByaW50ZihwLCAidHlwZTog YXBcbiIpOw0KPiA+ICsJCQltZW1jcHkoc3NpZCwgdmlmLT5ic3NfY29uZi5zc2lkLA0KPiA+ICsJ CQkgICAgICAgdmlmLT5ic3NfY29uZi5zc2lkX2xlbik7DQo+ID4gKwkJCXNzaWRbdmlmLT5ic3Nf Y29uZi5zc2lkX2xlbl0gPSAwOw0KPiA+ICsJCQlwICs9IHNwcmludGYocCwgInNzaWQ6ICVzXG4i LCBzc2lkKTsNCj4gPiArCQkJcCArPSBwcmludF9tYWNfYWRkcihwLCBtd2xfdmlmLT5ic3NpZCk7 DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoN Cj4gPiArCQkJcCArPSBzcHJpbnRmKHAsICJ0eXBlOiBtZXNoXG4iKTsNCj4gPiArCQkJcCArPSBw cmludF9tYWNfYWRkcihwLCBtd2xfdmlmLT5ic3NpZCk7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJ CWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoNCj4gPiArCQkJcCArPSBzcHJpbnRmKHAsICJ0 eXBlOiBzdGFcbiIpOw0KPiA+ICsJCQlwICs9IHByaW50X21hY19hZGRyKHAsIG13bF92aWYtPnN0 YV9tYWMpOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQlkZWZhdWx0Og0KPiA+ICsJCQlwICs9IHNw cmludGYocCwgInR5cGU6IHVua25vd25cbiIpOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ ID4gKwkJcCArPSBzcHJpbnRmKHAsICJod19jcnlwdG9fZW5hYmxlZDogJXNcbiIsDQo+ID4gKwkJ CSAgICAgbXdsX3ZpZi0+aXNfaHdfY3J5cHRvX2VuYWJsZWQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsN Cj4gPiArCQlwICs9IHNwcmludGYocCwgImtleSBpZHg6ICVkXG4iLCBtd2xfdmlmLT5rZXlpZHgp Ow0KPiA+ICsJCXAgKz0gc3ByaW50ZihwLCAiSVY6ICUwOHglMDR4XG4iLCBtd2xfdmlmLT5pdjMy LCBtd2xfdmlmLT5pdjE2KTsNCj4gPiArCQlwICs9IGR1bXBfZGF0YShwLCBtd2xfdmlmLT5iZWFj b25faW5mby5pZV93bW1fcHRyLA0KPiA+ICsJCQkgICAgICAgbXdsX3ZpZi0+YmVhY29uX2luZm8u aWVfd21tX2xlbiwgIldNTToiKTsNCj4gPiArCQlwICs9IGR1bXBfZGF0YShwLCBtd2xfdmlmLT5i ZWFjb25faW5mby5pZV9yc25fcHRyLA0KPiA+ICsJCQkgICAgICAgbXdsX3ZpZi0+YmVhY29uX2lu Zm8uaWVfcnNuX2xlbiwgIlJTTjoiKTsNCj4gPiArCQlwICs9IGR1bXBfZGF0YShwLCBtd2xfdmlm LT5iZWFjb25faW5mby5pZV9yc240OF9wdHIsDQo+ID4gKwkJCSAgICAgICBtd2xfdmlmLT5iZWFj b25faW5mby5pZV9yc240OF9sZW4sICJSU040ODoiKTsNCj4gPiArCQlwICs9IGR1bXBfZGF0YShw LCBtd2xfdmlmLT5iZWFjb25faW5mby5pZV9odF9wdHIsDQo+ID4gKwkJCSAgICAgICBtd2xfdmlm LT5iZWFjb25faW5mby5pZV9odF9sZW4sICJIVDoiKTsNCj4gPiArCQlwICs9IGR1bXBfZGF0YShw LCBtd2xfdmlmLT5iZWFjb25faW5mby5pZV92aHRfcHRyLA0KPiA+ICsJCQkgICAgICAgbXdsX3Zp Zi0+YmVhY29uX2luZm8uaWVfdmh0X2xlbiwgIlZIVDoiKTsNCj4gPiArCQlwICs9IHNwcmludGYo cCwgIlxuIik7DQo+ID4gKwl9DQo+ID4gKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dmlmX2xvY2sp Ow0KPiANCj4gSSBob3BlIHRoZXJlIGlzIG5vIHdheSB0aGF0IHRoZSBudW1iZXIgb2YgdmlmcyBj YW4gZ2V0IHRvIHRoZSBwb2ludCB3aGVyZSB5b3UNCj4gb3ZlcmZsb3cgdGhlIHBhZ2UgYWxsb2Nh dGVkIHNpbmNlIHRoZXJlIGlzIG5vIGNhcCBvbiB0aGUNCj4gc3ByaW50ZigpIHVzYWdlIGluIGR1 bXBfZGF0YSgpLg0KPiANCg0KSSB3aWxsIG1vZGlmeSBpdC4NCg0KPiA+ICsNCj4gPiArTVdMV0lG SV9ERUJVR0ZTX0ZJTEVfUkVBRF9PUFMoaW5mbyk7DQo+ID4gK01XTFdJRklfREVCVUdGU19GSUxF X1JFQURfT1BTKHZpZik7DQo+ID4gK01XTFdJRklfREVCVUdGU19GSUxFX1JFQURfT1BTKHN0YSk7 DQo+ID4gK01XTFdJRklfREVCVUdGU19GSUxFX1JFQURfT1BTKGFtcGR1KTsNCj4gPiArTVdMV0lG SV9ERUJVR0ZTX0ZJTEVfT1BTKHJlZ3Jkd3IpOw0KPiA+ICsNCj4gPiArdm9pZCBtd2xfZGVidWdm c19pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KSB7DQo+ID4gKwlzdHJ1Y3QgbXdsX3ByaXYg KnByaXYgPSBody0+cHJpdjsNCj4gPiArDQo+ID4gKwlpZiAoIXByaXYtPmRlYnVnZnNfcGh5KQ0K PiA+ICsJCXByaXYtPmRlYnVnZnNfcGh5ID0gZGVidWdmc19jcmVhdGVfZGlyKCJtd2x3aWZpIiwN Cj4gPiArCQkJCQkJICAgICAgIGh3LT53aXBoeS0+ZGVidWdmc2Rpcik7DQo+ID4gKw0KPiA+ICsJ aWYgKCFwcml2LT5kZWJ1Z2ZzX3BoeSkNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJTVdM V0lGSV9ERUJVR0ZTX0FERF9GSUxFKGluZm8pOw0KPiA+ICsJTVdMV0lGSV9ERUJVR0ZTX0FERF9G SUxFKHZpZik7DQo+ID4gKwlNV0xXSUZJX0RFQlVHRlNfQUREX0ZJTEUoc3RhKTsNCj4gPiArCU1X TFdJRklfREVCVUdGU19BRERfRklMRShhbXBkdSk7DQo+ID4gKwlNV0xXSUZJX0RFQlVHRlNfQURE X0ZJTEUocmVncmR3cik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgbXdsX2RlYnVnZnNfcmVt b3ZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KSB7DQo+ID4gKwlzdHJ1Y3QgbXdsX3ByaXYgKnBy aXYgPSBody0+cHJpdjsNCj4gPiArDQo+ID4gKwlkZWJ1Z2ZzX3JlbW92ZShwcml2LT5kZWJ1Z2Zz X3BoeSk7DQo+ID4gKwlwcml2LT5kZWJ1Z2ZzX3BoeSA9IE5VTEw7DQo+ID4gK30NCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2RlYnVnZnMuaA0K PiA+IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2RlYnVnZnMuaA0KPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uZGZjMmEzYw0KPiA+IC0t LSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdp ZmkvZGVidWdmcy5oDQo+ID4gQEAgLTAsMCArMSwyNCBAQA0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5 cmlnaHQgKEMpIDIwMDYtMjAxNSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCj4gPiArICoN Cj4gPiArICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBi eSBNYXJ2ZWxsDQo+ID4gK0ludGVybmF0aW9uYWwNCj4gPiArICogTHRkLiB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwNCj4gPiArSnVu ZSAxOTkxDQo+ID4gKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1 dGUgYW5kL29yIG1vZGlmeSB0aGlzDQo+ID4gK0ZpbGUgaW4NCj4gPiArICogYWNjb3JkYW5jZSB3 aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mDQo+ ID4gK3doaWNoDQo+ID4gKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCj4gPiArICoNCj4gPiArICogVEhFIEZJTEUgSVMgRElT VFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORA0KPiA+ICtU SEUNCj4gPiArICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRO RVNTIEZPUiBBDQo+IFBBUlRJQ1VMQVINCj4gPiArUFVSUE9TRQ0KPiA+ICsgKiBBUkUgRVhQUkVT U0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMN Cj4gPiArYWJvdXQNCj4gPiArICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLg0KPiA+ICsgKi8N Cj4gPiArDQo+ID4gKy8qIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGRlZmluZXMgZGVidWcgZnMg cmVsYXRlZCBmdW5jdGlvbnMuICovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIF9kZWJ1Z2ZzX2hfDQo+ ID4gKyNkZWZpbmUgX2RlYnVnZnNfaF8NCj4gDQo+IFRoZSBnZW5lcmFsIGNvbnZlbnRpb24gaXMg dG8gdXNlciB1cHBlci1jYXNlIGZvciB0aGUgdGhlc2UgLSBub3QgYSBiaWdnaWUNCj4gdGhvdWdo Lg0KPiANCg0KSSB3aWxsIG1vZGlmeSBpdC4NCg0KPiA+ICtzdHJ1Y3QgbXdsX3ByaXYgew0KPiA+ ICsJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7DQo+ID4gKwlzdHJ1Y3QgZmlybXdhcmUgKmZ3X3Vj b2RlOw0KPiA+ICsJaW50IGNoaXBfdHlwZTsNCj4gPiArDQo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKmR0X25vZGU7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnB3cl9ub2RlOw0KPiA+ICsJ Ym9vbCBkaXNhYmxlXzJnOw0KPiA+ICsJYm9vbCBkaXNhYmxlXzVnOw0KPiA+ICsJaW50IGFudGVu bmFfdHg7DQo+ID4gKwlpbnQgYW50ZW5uYV9yeDsNCj4gPiArDQo+ID4gKwlzdHJ1Y3QgbXdsX3R4 X3B3cl90YmwgdHhfcHdyX3RibFtTWVNBRFBUX01BWF9OVU1fQ0hBTk5FTFNdOw0KPiA+ICsJYm9v bCBjZGQ7DQo+ID4gKwl1MTYgdHhhbnRlbm5hMjsNCj4gPiArCXU4IHBvd2luaXRlZDsNCj4gPiAr CXUxNiBtYXhfdHhfcG93W1NZU0FEUFRfVFhfUE9XRVJfTEVWRUxfVE9UQUxdOyAvKiBtYXggdHgg cG93ZXINCj4gKGRCbSkgKi8NCj4gPiArCXUxNiB0YXJnZXRfcG93ZXJzW1NZU0FEUFRfVFhfUE9X RVJfTEVWRUxfVE9UQUxdOyAvKiB0YXJnZXQNCj4gcG93ZXJzICAgKi8NCj4gPiArCXU4IGNhbF90 YmxbMjAwXTsNCj4gPiArDQo+ID4gKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsNCj4gPiArCXZvaWQg X19pb21lbSAqaW9iYXNlMDsgLyogTUVNIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAwICAqLw0KPiA+ ICsJdm9pZCBfX2lvbWVtICppb2Jhc2UxOyAvKiBNRU0gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDEg ICovDQo+ID4gKwl1MzIgbmV4dF9iYXJfbnVtOw0KPiA+ICsNCj4gPiArCXNwaW5sb2NrX3QgZndj bWRfbG9jazsgICAgICAgLyogZm9yIGZpcm13YXJlIGNvbW1hbmQgICAgICAgICAqLw0KPiA+ICsJ dW5zaWduZWQgc2hvcnQgKnBjbWRfYnVmOyAgICAvKiBwb2ludGVyIHRvIENtZEJ1ZiAodmlydHVh bCkgICovDQo+ID4gKwlkbWFfYWRkcl90IHBwaHlzX2NtZF9idWY7ICAgIC8qIHBvaW50ZXIgdG8g Q21kQnVmIChwaHlzaWNhbCkgKi8NCj4gPiArCWJvb2wgaW5fc2VuZF9jbWQ7DQo+ID4gKw0KPiA+ ICsJaW50IGlycTsNCj4gPiArCXN0cnVjdCBtd2xfaHdfZGF0YSBod19kYXRhOyAgLyogQWRhcHRl ciBIVyBzcGVjaWZpYyBpbmZvICAgICAqLw0KPiA+ICsNCj4gPiArCS8qIHZhcmlvdXMgZGVzY3Jp cHRvciBkYXRhICovDQo+ID4gKwlzcGlubG9ja190IHR4X2Rlc2NfbG9jazsgICAgIC8qIGZvciB0 eCBkZXNjcmlwdG9yIGRhdGEgICAgICAgKi8NCj4gPiArCXNwaW5sb2NrX3QgcnhfZGVzY19sb2Nr OyAgICAgLyogZm9yIHJ4IGRlc2NyaXB0b3IgZGF0YSAgICAgICAqLw0KPiANCj4gWW91IHByb2Jh Ymx5IGRvbid0IHdhbnQgdG8gZGVjbGFyZSB0aGVzZSB0d28gcmlnaHQgbmV4dCB0byBlYWNoIG90 aGVyLCBpZiB5b3UNCj4gZXhwZWN0IHRoZSBSWCBhbmQgVFggcGF0aHMgb2YgdGhlIGNvZGUgdG8g YmUgYWJsZSB0byBydW4gaW4gcGFyYWxsZWwuDQo+IA0KPiBTcGluIGxvY2tzIGFyZSBub3QgZ3Vh cmFudGVlZCB0byBiZSBjYWNoZSBsaW5lIGFsaWduZWQgb3IgY2FjaGUgbGluZSBzaXplZCwgc28N Cj4geW91IGNhbiBlbmQgdXAgd2l0aCBjYWNoZSBsaW5lIHBpbmcgcG9uZ3MgYmV0d2VlbiBDUFVz IGluIHRoaXMgY2FzZS4NCj4gDQoNCkkgd2lsbCBjaGVjayBhbmQgbW9kaWZ5IGl0Lg0KDQo+ID4g KwlzdHJ1Y3QgbXdsX2Rlc2NfZGF0YSBkZXNjX2RhdGFbU1lTQURQVF9OVU1fT0ZfREVTQ19EQVRB XTsNCj4gPiArCXN0cnVjdCBza19idWZmX2hlYWQgdHhxW1NZU0FEUFRfTlVNX09GX0RFU0NfREFU QV07DQo+ID4gKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGRlbGF5X3E7DQo+ID4gKwkvKiBudW1iZXIg b2YgZGVzY3JpcHRvcnMgb3duZWQgYnkgZncgYXQgYW55IG9uZSB0aW1lICovDQo+ID4gKwlpbnQg ZndfZGVzY19jbnRbU1lTQURQVF9OVU1fT0ZfREVTQ19EQVRBXTsNCj4gPiArDQo+ID4gKwlzdHJ1 Y3QgdGFza2xldF9zdHJ1Y3QgdHhfdGFzazsNCj4gPiArCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBy eF90YXNrOw0KPiA+ICsJc3RydWN0IHRhc2tsZXRfc3RydWN0IHFlX3Rhc2s7DQo+ID4gKwlpbnQg dHhxX2xpbWl0Ow0KPiA+ICsJYm9vbCBpc190eF9zY2hlZHVsZTsNCj4gPiArCWludCByZWN2X2xp bWl0Ow0KPiA+ICsJYm9vbCBpc19yeF9zY2hlZHVsZTsNCj4gPiArCWJvb2wgaXNfcWVfc2NoZWR1 bGU7DQo+ID4gKwlzOCBub2lzZTsgICAgICAgICAgICAgICAgICAgIC8qIE1vc3QgcmVjZW50bHkg cmVwb3J0ZWQgbm9pc2UgaW4gZEJtDQo+ICovDQo+ID4gKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBv cnRlZF9iYW5kIGJhbmRfMjQ7DQo+ID4gKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5l bHNfMjRbQkFORF8yNF9DSEFOTkVMX05VTV07DQo+ID4gKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUg cmF0ZXNfMjRbQkFORF8yNF9SQVRFX05VTV07DQo+ID4gKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBv cnRlZF9iYW5kIGJhbmRfNTA7DQo+ID4gKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5l bHNfNTBbQkFORF81MF9DSEFOTkVMX05VTV07DQo+ID4gKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUg cmF0ZXNfNTBbQkFORF81MF9SQVRFX05VTV07DQo+ID4gKw0KPiA+ICsJdTMyIGFwX21hY2lkc19z dXBwb3J0ZWQ7DQo+ID4gKwl1MzIgc3RhX21hY2lkc19zdXBwb3J0ZWQ7DQo+ID4gKwl1MzIgbWFj aWRzX3VzZWQ7DQo+ID4gKwlzcGlubG9ja190IHZpZl9sb2NrOyAgICAgICAgIC8qIGZvciBwcml2 YXRlIGludGVyZmFjZSBpbmZvICAgKi8NCj4gPiArCXN0cnVjdCBsaXN0X2hlYWQgdmlmX2xpc3Q7 ICAgLyogTGlzdCBvZiBpbnRlcmZhY2VzLiAgICAgICAgICAqLw0KPiA+ICsJdTMyIHJ1bm5pbmdf YnNzZXM7ICAgICAgICAgICAvKiBiaXRtYXAgb2YgcnVubmluZyBCU1NlcyAgICAgICovDQo+ID4g Kw0KPiA+ICsJc3BpbmxvY2tfdCBzdGFfbG9jazsgICAgICAgICAvKiBmb3IgcHJpdmF0ZSBzdGEg aW5mbyAgICAgICAgICovDQo+ID4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHN0YV9saXN0OyAgIC8qIExp c3Qgb2Ygc3RhdGlvbnMgICAgICAgICAgICAgKi8NCj4gDQo+IFRoZXNlIHR3byBhcmUgYXdmdWxs eSBjbG9zZSB0b2dldGhlciB0b28uIFlvdSBtaWdodCBqdXN0IGdldCBhd2F5IHdpdGggaXQgb24N Cj4geDg2XzY0LCBnaXZlbiBsaXN0X2hlYWQgaXMgMTYgYnl0ZXMsIGJ1dCB0aGUgeDg2XzY0IHBh Y2tpbmcgcnVsZXMgYXJlIG9kZCwgc28gSQ0KPiBhbSBuZXZlciBxdWl0ZSBzdXJlLiBPbiB4ODZf MzIgaXQgd2lsbCBjZXJ0YWlubHkgYml0ZSB5b3UNCj4gLSBwcm92aWRlZCB2aWZfbG9jayBhbmQg c3RhX2xvY2sgY2FuIGdldCB0YWtlbiBmcm9tIHR3byBkaWZmZXJlbnQgcGF0aHMuDQo+IA0KDQpJ IHdpbGwgY2hlY2sgYW5kIG1vZGlmeSBpdC4NCg0KPiA+ICsNCj4gPiArCWJvb2wgcmFkaW9fb247 DQo+ID4gKwlib29sIHJhZGlvX3Nob3J0X3ByZWFtYmxlOw0KPiA+ICsJYm9vbCB3bW1fZW5hYmxl ZDsNCj4gPiArCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zDQo+IHdtbV9wYXJhbXNb U1lTQURQVF9UWF9XTU1fUVVFVUVTXTsNCj4gPiArDQo+ID4gKwkvKiBBbXBkdSBzdHJlYW0gaW5m b3JtYXRpb24gKi8NCj4gPiArCXU4IG51bV9hbXBkdV9xdWV1ZXM7DQo+ID4gKwlzcGlubG9ja190 IHN0cmVhbV9sb2NrOyAgICAgIC8qIGZvciBhbXBkdSBzdHJlYW0gICAgICAgICAgICAgKi8NCj4g PiArCXN0cnVjdCBtd2xfYW1wZHVfc3RyZWFtIGFtcGR1W1NZU0FEUFRfVFhfQU1QRFVfUVVFVUVT XTsNCj4gPiArCXN0cnVjdCB3b3JrX3N0cnVjdCB3YXRjaGRvZ19iYV9oYW5kbGU7DQo+ID4gKw0K PiA+ICsJYm9vbCBtZmdfbW9kZTsNCj4gPiArDQo+ID4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMN Cj4gPiArCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcGh5Ow0KPiA+ICsJdTMyIHJlZ190eXBlOw0K PiA+ICsJdTMyIHJlZ19vZmZzZXQ7DQo+ID4gKwl1MzIgcmVnX3ZhbHVlOw0KPiA+ICsjZW5kaWYN Cj4gPiArfTsNCj4gW3NuaXBdDQo+IA0KPiA+ICtzdGF0aWMgdm9pZCBtd2xfZndjbWRfcGFyc2Vf YmVhY29uKHN0cnVjdCBtd2xfcHJpdiAqcHJpdiwNCj4gPiArCQkJCSAgIHN0cnVjdCBtd2xfdmlm ICp2aWYsIHU4ICpiZWFjb24sIGludCBsZW4pIHsNCj4gPiArCXN0cnVjdCBpZWVlODAyMTFfbWdt dCAqbWdtdDsNCj4gPiArCXN0cnVjdCBiZWFjb25faW5mbyAqYmVhY29uX2luZm87DQo+ID4gKwlp bnQgYmFzZWxlbjsNCj4gPiArCXU4ICpwb3M7DQo+ID4gKwlzaXplX3QgbGVmdDsNCj4gPiArCWJv b2wgZWxlbV9wYXJzZV9mYWlsZWQ7DQo+ID4gKw0KPiA+ICsJbWdtdCA9IChzdHJ1Y3QgaWVlZTgw MjExX21nbXQgKiliZWFjb247DQo+ID4gKw0KPiA+ICsJYmFzZWxlbiA9ICh1OCAqKW1nbXQtPnUu YmVhY29uLnZhcmlhYmxlIC0gKHU4ICopbWdtdDsNCj4gPiArCWlmIChiYXNlbGVuID4gbGVuKQ0K PiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwliZWFjb25faW5mbyA9ICZ2aWYtPmJlYWNvbl9p bmZvOw0KPiA+ICsJbWVtc2V0KGJlYWNvbl9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGJlYWNvbl9p bmZvKSk7DQo+ID4gKwliZWFjb25faW5mby0+dmFsaWQgPSBmYWxzZTsNCj4gPiArCWJlYWNvbl9p bmZvLT5pZV9odF9wdHIgPSAmYmVhY29uX2luZm8tPmllX2xpc3RfaHRbMF07DQo+ID4gKwliZWFj b25faW5mby0+aWVfdmh0X3B0ciA9ICZiZWFjb25faW5mby0+aWVfbGlzdF92aHRbMF07DQo+ID4g Kw0KPiA+ICsJYmVhY29uX2luZm8tPmNhcF9pbmZvID0gbGUxNl90b19jcHUobWdtdC0+dS5iZWFj b24uY2FwYWJfaW5mbyk7DQo+ID4gKw0KPiA+ICsJcG9zID0gKHU4ICopbWdtdC0+dS5iZWFjb24u dmFyaWFibGU7DQo+ID4gKwlsZWZ0ID0gbGVuIC0gYmFzZWxlbjsNCj4gPiArDQo+ID4gKwllbGVt X3BhcnNlX2ZhaWxlZCA9IGZhbHNlOw0KPiA+ICsNCj4gPiArCXdoaWxlIChsZWZ0ID49IDIpIHsN Cj4gPiArCQl1OCBpZCwgZWxlbjsNCj4gPiArDQo+ID4gKwkJaWQgPSAqcG9zKys7DQo+ID4gKwkJ ZWxlbiA9ICpwb3MrKzsNCj4gPiArCQlsZWZ0IC09IDI7DQo+ID4gKw0KPiA+ICsJCWlmIChlbGVu ID4gbGVmdCkgew0KPiA+ICsJCQllbGVtX3BhcnNlX2ZhaWxlZCA9IHRydWU7DQo+ID4gKwkJCWJy ZWFrOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJc3dpdGNoIChpZCkgew0KPiA+ICsJCWNhc2Ug V0xBTl9FSURfU1VQUF9SQVRFUzoNCj4gPiArCQljYXNlIFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVT Og0KPiA+ICsJCQl7DQo+ID4gKwkJCWludCBpZHgsIGJpLCBvaTsNCj4gPiArCQkJdTggcmF0ZTsN Cj4gPiArDQo+ID4gKwkJCWZvciAoYmkgPSAwOyBiaSA8IFNZU0FEUFRfTUFYX0RBVEFfUkFURVNf RzsNCj4gPiArCQkJICAgICBiaSsrKSB7DQo+ID4gKwkJCQlpZiAoYmVhY29uX2luZm8tPmJfcmF0 ZV9zZXRbYmldID09IDApDQo+ID4gKwkJCQkJYnJlYWs7DQo+ID4gKwkJCX0NCj4gPiArDQo+ID4g KwkJCWZvciAob2kgPSAwOyBvaSA8IFNZU0FEUFRfTUFYX0RBVEFfUkFURVNfRzsNCj4gPiArCQkJ ICAgICBvaSsrKSB7DQo+ID4gKwkJCQlpZiAoYmVhY29uX2luZm8tPm9wX3JhdGVfc2V0W29pXSA9 PSAwKQ0KPiA+ICsJCQkJCWJyZWFrOw0KPiA+ICsJCQl9DQo+ID4gKw0KPiA+ICsJCQlmb3IgKGlk eCA9IDA7IGlkeCA8IGVsZW47IGlkeCsrKSB7DQo+ID4gKwkJCQlyYXRlID0gcG9zW2lkeF07DQo+ ID4gKwkJCQlpZiAoKHJhdGUgJiAweDgwKSAhPSAwKSB7DQo+ID4gKwkJCQkJaWYgKGJpIDwgU1lT QURQVF9NQVhfREFUQV9SQVRFU19HKQ0KPiA+ICsJCQkJCQliZWFjb25faW5mby0+Yl9yYXRlX3Nl dFtiaSsrXQ0KPiA+ICsJCQkJCQkJPSByYXRlICYgMHg3ZjsNCj4gPiArCQkJCQllbHNlIHsNCj4g PiArCQkJCQkJZWxlbV9wYXJzZV9mYWlsZWQgPSB0cnVlOw0KPiA+ICsJCQkJCQlicmVhazsNCj4g PiArCQkJCQl9DQo+ID4gKwkJCQl9DQo+ID4gKwkJCQlpZiAob2kgPCBTWVNBRFBUX01BWF9EQVRB X1JBVEVTX0cpDQo+ID4gKwkJCQkJYmVhY29uX2luZm8tPm9wX3JhdGVfc2V0W29pKytdID0NCj4g PiArCQkJCQkJcmF0ZSAmIDB4N2Y7DQo+ID4gKwkJCQllbHNlIHsNCj4gPiArCQkJCQllbGVtX3Bh cnNlX2ZhaWxlZCA9IHRydWU7DQo+ID4gKwkJCQkJYnJlYWs7DQo+ID4gKwkJCQl9DQo+ID4gKwkJ CX0NCj4gPiArCQkJfQ0KPiA+ICsJCQlicmVhazsNCj4gPiArCQljYXNlIFdMQU5fRUlEX1JTTjoN Cj4gPiArCQkJYmVhY29uX2luZm8tPmllX3JzbjQ4X2xlbiA9IChlbGVuICsgMik7DQo+ID4gKwkJ CWJlYWNvbl9pbmZvLT5pZV9yc240OF9wdHIgPSAocG9zIC0gMik7DQo+ID4gKwkJCWJyZWFrOw0K PiA+ICsJCWNhc2UgV0xBTl9FSURfSFRfQ0FQQUJJTElUWToNCj4gPiArCQljYXNlIFdMQU5fRUlE X0hUX09QRVJBVElPTjoNCj4gPiArCQljYXNlIFdMQU5fRUlEX09WRVJMQVBfQlNTX1NDQU5fUEFS QU06DQo+ID4gKwkJY2FzZSBXTEFOX0VJRF9FWFRfQ0FQQUJJTElUWToNCj4gPiArCQkJYmVhY29u X2luZm8tPmllX2h0X2xlbiArPSAoZWxlbiArIDIpOw0KPiA+ICsJCQlpZiAoYmVhY29uX2luZm8t PmllX2h0X2xlbiA+DQo+ID4gKwkJCSAgICBzaXplb2YoYmVhY29uX2luZm8tPmllX2xpc3RfaHQp KSB7DQo+ID4gKwkJCQllbGVtX3BhcnNlX2ZhaWxlZCA9IHRydWU7DQo+ID4gKwkJCX0gZWxzZSB7 DQo+ID4gKwkJCQkqYmVhY29uX2luZm8tPmllX2h0X3B0cisrID0gaWQ7DQo+ID4gKwkJCQkqYmVh Y29uX2luZm8tPmllX2h0X3B0cisrID0gZWxlbjsNCj4gPiArCQkJCW1lbWNweShiZWFjb25faW5m by0+aWVfaHRfcHRyLCBwb3MsIGVsZW4pOw0KPiA+ICsJCQkJYmVhY29uX2luZm8tPmllX2h0X3B0 ciArPSBlbGVuOw0KPiA+ICsJCQl9DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsjaWZkZWYgQ09ORklH X01BQzgwMjExX01FU0gNCj4gPiArCQljYXNlIFdMQU5fRUlEX01FU0hfQ09ORklHOg0KPiA+ICsJ CQliZWFjb25faW5mby0+aWVfbWVzaGNmZ19sZW4gPSAoZWxlbiArIDIpOw0KPiA+ICsJCQliZWFj b25faW5mby0+aWVfbWVzaGNmZ19wdHIgPSAocG9zIC0gMik7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ ICsJCWNhc2UgV0xBTl9FSURfTUVTSF9JRDoNCj4gPiArCQkJYmVhY29uX2luZm8tPmllX21lc2hp ZF9sZW4gPSAoZWxlbiArIDIpOw0KPiA+ICsJCQliZWFjb25faW5mby0+aWVfbWVzaGlkX3B0ciA9 IChwb3MgLSAyKTsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBXTEFOX0VJRF9DSEFOX1NX SVRDSF9QQVJBTToNCj4gPiArCQkJYmVhY29uX2luZm8tPmllX21lc2hjaHN3X2xlbiA9IChlbGVu ICsgMik7DQo+ID4gKwkJCWJlYWNvbl9pbmZvLT5pZV9tZXNoY2hzd19wdHIgPSAocG9zIC0gMik7 DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsjZW5kaWYNCj4gPiArCQljYXNlIFdMQU5fRUlEX1ZIVF9D QVBBQklMSVRZOg0KPiA+ICsJCWNhc2UgV0xBTl9FSURfVkhUX09QRVJBVElPTjoNCj4gPiArCQlj YXNlIFdMQU5fRUlEX09QTU9ERV9OT1RJRjoNCj4gPiArCQkJYmVhY29uX2luZm8tPmllX3ZodF9s ZW4gKz0gKGVsZW4gKyAyKTsNCj4gPiArCQkJaWYgKGJlYWNvbl9pbmZvLT5pZV92aHRfbGVuID4N Cj4gPiArCQkJICAgIHNpemVvZihiZWFjb25faW5mby0+aWVfbGlzdF92aHQpKSB7DQo+ID4gKwkJ CQllbGVtX3BhcnNlX2ZhaWxlZCA9IHRydWU7DQo+ID4gKwkJCX0gZWxzZSB7DQo+ID4gKwkJCQkq YmVhY29uX2luZm8tPmllX3ZodF9wdHIrKyA9IGlkOw0KPiA+ICsJCQkJKmJlYWNvbl9pbmZvLT5p ZV92aHRfcHRyKysgPSBlbGVuOw0KPiA+ICsJCQkJbWVtY3B5KGJlYWNvbl9pbmZvLT5pZV92aHRf cHRyLCBwb3MsIGVsZW4pOw0KPiA+ICsJCQkJYmVhY29uX2luZm8tPmllX3ZodF9wdHIgKz0gZWxl bjsNCj4gPiArCQkJfQ0KPiA+ICsJCQlicmVhazsNCj4gPiArCQljYXNlIFdMQU5fRUlEX1ZFTkRP Ul9TUEVDSUZJQzoNCj4gPiArCQkJaWYgKChwb3NbMF0gPT0gMHgwMCkgJiYgKHBvc1sxXSA9PSAw eDUwKSAmJg0KPiA+ICsJCQkgICAgKHBvc1syXSA9PSAweGYyKSkgew0KPiA+ICsJCQkJaWYgKHBv c1szXSA9PSAweDAxKSB7DQo+ID4gKwkJCQkJYmVhY29uX2luZm8tPmllX3Jzbl9sZW4gPSAoZWxl biArIDIpOw0KPiA+ICsJCQkJCWJlYWNvbl9pbmZvLT5pZV9yc25fcHRyID0gKHBvcyAtIDIpOw0K PiA+ICsJCQkJfQ0KPiA+ICsNCj4gPiArCQkJCWlmIChwb3NbM10gPT0gMHgwMikgew0KPiA+ICsJ CQkJCWJlYWNvbl9pbmZvLT5pZV93bW1fbGVuID0gKGVsZW4gKyAyKTsNCj4gPiArCQkJCQliZWFj b25faW5mby0+aWVfd21tX3B0ciA9IChwb3MgLSAyKTsNCj4gPiArCQkJCX0NCj4gPiArCQkJfQ0K PiA+ICsJCQlicmVhazsNCj4gPiArCQlkZWZhdWx0Og0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9 DQo+ID4gKw0KPiA+ICsJCWxlZnQgLT0gZWxlbjsNCj4gPiArCQlwb3MgKz0gZWxlbjsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwlpZiAoIWVsZW1fcGFyc2VfZmFpbGVkKSB7DQo+ID4gKwkJYmVhY29u X2luZm8tPmllX2h0X3B0ciA9ICZiZWFjb25faW5mby0+aWVfbGlzdF9odFswXTsNCj4gPiArCQli ZWFjb25faW5mby0+aWVfdmh0X3B0ciA9ICZiZWFjb25faW5mby0+aWVfbGlzdF92aHRbMF07DQo+ ID4gKwkJYmVhY29uX2luZm8tPnZhbGlkID0gdHJ1ZTsNCj4gPiArCX0NCj4gPiArfQ0KPiANCj4g QW55IHJlYXNvbiB5b3UncmUgbm90IHVzaW5nIGNmZzgwMjExX2ZpbmRfaWUoKSBoZXJlPyBTZWVt cyB0byBiZQ0KPiByZS1pbnZlbnRpbmcgdGhlIHdoZWVsIHRvIG1lLg0KPiANCg0KSXQgaXMgYmV0 dGVyIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIHBhcnNlIGJlYWNvbiBvbmUgdGltZSBhbmQgZ2V0 IGFsbCBJRXMgd2UgbmVlZC4gSXQgaXMgbm90IGEgZ29vZCBpZGVhIHRvIHVzZSBjZmc4MDIxMV9m aW5kX2llKCkgdG8gZmluZCBJRXMgd2UgbmVlZCBvbmUgYnkgb25lLg0KDQo+ID4gK3ZvaWQgbXds X2Z3Y21kX3Jlc2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KSB7DQo+ID4gKwlzdHJ1Y3QgbXds X3ByaXYgKnByaXYgPSBody0+cHJpdjsNCj4gPiArDQo+ID4gKwlpZiAobXdsX2Z3Y21kX2Noa19h ZGFwdGVyKHByaXYpKQ0KPiA+ICsJCXdyaXRlbChJU1JfUkVTRVQsDQo+ID4gKwkJICAgICAgIHBy aXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsgfQ0KPiA+ICsN Cj4gPiArdm9pZCBtd2xfZndjbWRfaW50X2VuYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykg ew0KPiA+ICsJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHctPnByaXY7DQo+ID4gKw0KPiA+ICsJ aWYgKG13bF9md2NtZF9jaGtfYWRhcHRlcihwcml2KSkgew0KPiA+ICsJCXdyaXRlbCgweDAwLA0K PiA+ICsJCSAgICAgICBwcml2LT5pb2Jhc2UxICsgTUFDUkVHX1JFR19BMkhfSU5URVJSVVBUX01B U0spOw0KPiA+ICsJCXdyaXRlbCgoTUFDUkVHX0EySFJJQ19CSVRfTUFTSyksDQo+ID4gKwkJICAg ICAgIHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0EySF9JTlRFUlJVUFRfTUFTSyk7DQo+IA0K PiBQbGVhc2UgYXZvaWQgc3VwZXJmbHVvdXMgdXNlIG9mIHBhcmVudGhlc2VzLg0KPiANCg0KSSB3 aWxsIG1vZGlmeSBpdC4NCg0KPiA+ICtpbnQgbXdsX2Z3Y21kX2dldF9od19zcGVjcyhzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodykgew0KPiA+ICsJc3RydWN0IG13bF9wcml2ICpwcml2ID0gaHctPnBy aXY7DQo+ID4gKwlzdHJ1Y3QgaG9zdGNtZF9jbWRfZ2V0X2h3X3NwZWMgKnBjbWQ7DQo+ID4gKwlp bnQgcmV0cnk7DQo+ID4gKwlpbnQgaTsNCj4gPiArDQo+ID4gKwlpZiAocHJpdi0+bWZnX21vZGUp DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsJcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9j bWRfZ2V0X2h3X3NwZWMgKikmcHJpdi0+cGNtZF9idWZbMF07DQo+ID4gKw0KPiA+ICsJc3Bpbl9s b2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCj4gPiArDQo+ID4gKwl3aXBoeV9kZWJ1Zyhody0+ d2lwaHksICJwY21kID0gJXBcbiIsIHBjbWQpOw0KPiA+ICsJbWVtc2V0KHBjbWQsIDB4MDAsIHNp emVvZigqcGNtZCkpOw0KPiA+ICsJZXRoX2Jyb2FkY2FzdF9hZGRyKHBjbWQtPnBlcm1hbmVudF9h ZGRyKTsNCj4gPiArCXBjbWQtPmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURf R0VUX0hXX1NQRUMpOw0KPiA+ICsJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXpl b2YoKnBjbWQpKTsNCj4gPiArCXBjbWQtPmZ3X2F3YWtlX2Nvb2tpZSA9IGNwdV90b19sZTMyKHBy aXYtPnBwaHlzX2NtZF9idWYgKyAyMDQ4KTsNCj4gPiArDQo+ID4gKwlyZXRyeSA9IDA7DQo+ID4g Kwl3aGlsZSAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX0dFVF9IV19TUEVD KSkgew0KPiA+ICsJCWlmIChyZXRyeSsrID4gTUFYX1dBSVRfR0VUX0hXX1NQRUNTX0lURVJBVE9O Uykgew0KPiA+ICsJCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiY2FuJ3QgZ2V0IGh3IHNwZWNzXG4i KTsNCj4gPiArCQkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KPiA+ICsJCQly ZXR1cm4gLUVJTzsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCW1kZWxheSgxMDAwKTsNCj4gPiAr CQl3aXBoeV9kZWJ1Zyhody0+d2lwaHksDQo+ID4gKwkJCSAgICAicmVwZWF0IGNvbW1hbmQgPSAl cFxuIiwgcGNtZCk7DQo+ID4gKwl9DQo+IA0KPiAqY291Z2gqIG1kZWxheSgxMDAwKSB3aGlsZSBo b2xkaW5nIGEgc3BpbiBsb2NrIGFuZCB3aXRoaW4gaW4gYSB3aGlsZSgpICpsb29wPw0KPiAqY291 Z2gqDQo+IA0KPiBUaGlzIG5lZWRzIGEgbGl0dGxlIGNsZWFuaW5nIHVwLiBQbGVhc2UgaGF2ZSBh IGxvb2sgYXQNCj4gRG9jdW1lbnRhdGlvbi90aW1lcnMvdGltZXJzLWhvd3RvLnR4dA0KPiANCg0K SSB3aWxsIHRyeSB0byB1c2UgbXV0ZXggYW5kIG1zbGVlcCgpLg0KDQo+ID4gKw0KPiA+ICsJZXRo ZXJfYWRkcl9jb3B5KCZwcml2LT5od19kYXRhLm1hY19hZGRyWzBdLA0KPiBwY21kLT5wZXJtYW5l bnRfYWRkcik7DQo+ID4gKwlwcml2LT5kZXNjX2RhdGFbMF0ud2NiX2Jhc2UgPQ0KPiA+ICsJCWxl MzJfdG9fY3B1KHBjbWQtPndjYl9iYXNlMCkgJiAweDAwMDBmZmZmOw0KPiA+ICsJZm9yIChpID0g MTsgaSA8IFNZU0FEUFRfVE9UQUxfVFhfUVVFVUVTOyBpKyspDQo+ID4gKwkJcHJpdi0+ZGVzY19k YXRhW2ldLndjYl9iYXNlID0NCj4gPiArCQkJbGUzMl90b19jcHUocGNtZC0+d2NiX2Jhc2VbaSAt IDFdKSAmIDB4MDAwMGZmZmY7DQo+ID4gKwlwcml2LT5kZXNjX2RhdGFbMF0ucnhfZGVzY19yZWFk ID0NCj4gPiArCQlsZTMyX3RvX2NwdShwY21kLT5yeHBkX3JkX3B0cikgJiAweDAwMDBmZmZmOw0K PiA+ICsJcHJpdi0+ZGVzY19kYXRhWzBdLnJ4X2Rlc2Nfd3JpdGUgPQ0KPiA+ICsJCWxlMzJfdG9f Y3B1KHBjbWQtPnJ4cGRfd3JfcHRyKSAmIDB4MDAwMGZmZmY7DQo+ID4gKwlwcml2LT5od19kYXRh LnJlZ2lvbl9jb2RlID0gbGUxNl90b19jcHUocGNtZC0+cmVnaW9uX2NvZGUpICYgMHgwMGZmOw0K PiA+ICsJcHJpdi0+aHdfZGF0YS5md19yZWxlYXNlX251bSA9IGxlMzJfdG9fY3B1KHBjbWQtPmZ3 X3JlbGVhc2VfbnVtKTsNCj4gPiArCXByaXYtPmh3X2RhdGEubWF4X251bV90eF9kZXNjID0gbGUx Nl90b19jcHUocGNtZC0+bnVtX3djYik7DQo+ID4gKwlwcml2LT5od19kYXRhLm1heF9udW1fbWNf YWRkciA9DQo+IGxlMTZfdG9fY3B1KHBjbWQtPm51bV9tY2FzdF9hZGRyKTsNCj4gPiArCXByaXYt Pmh3X2RhdGEubnVtX2FudGVubmFzID0gbGUxNl90b19jcHUocGNtZC0+bnVtX2FudGVubmEpOw0K PiA+ICsJcHJpdi0+aHdfZGF0YS5od192ZXJzaW9uID0gcGNtZC0+dmVyc2lvbjsNCj4gPiArCXBy aXYtPmh3X2RhdGEuaG9zdF9pbnRlcmZhY2UgPSBwY21kLT5ob3N0X2lmOw0KPiA+ICsNCj4gPiAr CXNwaW5fdW5sb2NrX2JoKCZwcml2LT5md2NtZF9sb2NrKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4g MDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IG13bF9md2NtZF9zZXRfaHdfc3BlY3Moc3RydWN0 IGllZWU4MDIxMV9odyAqaHcpIHsNCj4gPiArCXN0cnVjdCBtd2xfcHJpdiAqcHJpdiA9IGh3LT5w cml2Ow0KPiA+ICsJc3RydWN0IGhvc3RjbWRfY21kX3NldF9od19zcGVjICpwY21kOw0KPiA+ICsJ aW50IGk7DQo+ID4gKw0KPiA+ICsJaWYgKHByaXYtPm1mZ19tb2RlKQ0KPiA+ICsJCXJldHVybiAw Ow0KPiA+ICsNCj4gPiArCXBjbWQgPSAoc3RydWN0IGhvc3RjbWRfY21kX3NldF9od19zcGVjICop JnByaXYtPnBjbWRfYnVmWzBdOw0KPiA+ICsNCj4gPiArCXNwaW5fbG9ja19iaCgmcHJpdi0+Zndj bWRfbG9jayk7DQo+ID4gKw0KPiA+ICsJbWVtc2V0KHBjbWQsIDB4MDAsIHNpemVvZigqcGNtZCkp Ow0KPiA+ICsJcGNtZC0+Y21kX2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF9TRVRf SFdfU1BFQyk7DQo+ID4gKwlwY21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigq cGNtZCkpOw0KPiA+ICsJcGNtZC0+d2NiX2Jhc2VbMF0gPSBjcHVfdG9fbGUzMihwcml2LT5kZXNj X2RhdGFbMF0ucHBoeXNfdHhfcmluZyk7DQo+ID4gKwlmb3IgKGkgPSAxOyBpIDwgU1lTQURQVF9U T1RBTF9UWF9RVUVVRVM7IGkrKykNCj4gPiArCQlwY21kLT53Y2JfYmFzZVtpXSA9DQo+ID4gKwkJ CWNwdV90b19sZTMyKHByaXYtPmRlc2NfZGF0YVtpXS5wcGh5c190eF9yaW5nKTsNCj4gPiArCXBj bWQtPnR4X3djYl9udW1fcGVyX3F1ZXVlID0NCj4gY3B1X3RvX2xlMzIoU1lTQURQVF9NQVhfTlVN X1RYX0RFU0MpOw0KPiA+ICsJcGNtZC0+bnVtX3R4X3F1ZXVlcyA9IGNwdV90b19sZTMyKFNZU0FE UFRfTlVNX09GX0RFU0NfREFUQSk7DQo+ID4gKwlwY21kLT50b3RhbF9yeF93Y2IgPSBjcHVfdG9f bGUzMihTWVNBRFBUX01BWF9OVU1fUlhfREVTQyk7DQo+ID4gKwlwY21kLT5yeHBkX3dyX3B0ciA9 IGNwdV90b19sZTMyKHByaXYtPmRlc2NfZGF0YVswXS5wcGh5c19yeF9yaW5nKTsNCj4gPiArCXBj bWQtPmZlYXR1cmVzID0gMDsNCj4gPiArDQo+ID4gKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHBy aXYsIEhPU1RDTURfQ01EX1NFVF9IV19TUEVDKSkgew0KPiA+ICsJCXNwaW5fdW5sb2NrX2JoKCZw cml2LT5md2NtZF9sb2NrKTsNCj4gPiArCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZmFpbGVkIGV4 ZWN1dGlvblxuIik7DQo+ID4gKwkJcmV0dXJuIC1FSU87DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ c3Bpbl91bmxvY2tfYmgoJnByaXYtPmZ3Y21kX2xvY2spOw0KPiA+ICsNCj4gPiArCXJldHVybiAw Ow0KPiA+ICt9DQo+IA0KPiBJdCBsb29rcyBsaWtlIGZ3Y21kX2xvY2soKSBpcyB1c2VkIGluIHRo aXMgd2F5IGluIGV2ZXJ5IGluc3RhbmNlLiBDb3VsZCB5b3Ugbm90DQo+IGFsbG9jYXRlIGEgcG9v bCBvZiBjb21tYW5kIGJ1ZmZlcnMsIHB1dCB0aGVtIG9uIGEgbGlzdCwgYW5kIG9ubHkgdGFrZSB0 aGUgbG9jaw0KPiB3aGlsZSB5b3UgcHVsbCB0aGVtIG91dCBhbmQgcmVpbnNlcnQgdGhlbSBiYWNr IGludG8gdGhlIGxpc3Q/DQo+IA0KPiBJZiB5b3UgbmVlZCB0byBob2xkIGEgbG9jayBkdXJpbmcg ZmlybXdhcmUgY29tbWFuZCBleGVjdXRpb24sIHlvdSBwcm9iYWJseQ0KPiBzaG91bGQgc3dpdGNo IHRvIGEgbXV0ZXggbWVjaGFuaXNtIHJhdGhlciB0aGFuIHNwaW4gbG9ja3MuDQo+IA0KDQpJIHdp bGwgdHJ5IHRvIHVzZSBtdXRleC4NCg0KPiA+ICsNCj4gPiAraW50IG13bF9md2NtZF9nZXRfc3Rh dChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCj4gPiArCQkgICAgICAgc3RydWN0IGllZWU4MDIx MV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKSB7DQo+ID4gKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXYg PSBody0+cHJpdjsNCj4gPiArCXN0cnVjdCBob3N0Y21kX2NtZF84MDJfMTFfZ2V0X3N0YXQgKnBj bWQ7DQo+ID4gKw0KPiA+ICsJcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfODAyXzExX2dldF9z dGF0ICopJnByaXYtPnBjbWRfYnVmWzBdOw0KPiA+ICsNCj4gPiArCXNwaW5fbG9ja19iaCgmcHJp di0+ZndjbWRfbG9jayk7DQo+ID4gKw0KPiA+ICsJbWVtc2V0KHBjbWQsIDB4MDAsIHNpemVvZigq cGNtZCkpOw0KPiA+ICsJcGNtZC0+Y21kX2hkci5jbWQgPQ0KPiBjcHVfdG9fbGUxNihIT1NUQ01E X0NNRF84MDJfMTFfR0VUX1NUQVQpOw0KPiA+ICsJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9f bGUxNihzaXplb2YoKnBjbWQpKTsNCj4gPiArDQo+ID4gKwlpZiAobXdsX2Z3Y21kX2V4ZWNfY21k KHByaXYsIEhPU1RDTURfQ01EXzgwMl8xMV9HRVRfU1RBVCkpIHsNCj4gPiArCQlzcGluX3VubG9j a19iaCgmcHJpdi0+ZndjbWRfbG9jayk7DQo+ID4gKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZh aWxlZCBleGVjdXRpb25cbiIpOw0KPiA+ICsJCXJldHVybiAtRUlPOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCXN0YXRzLT5kb3QxMUFDS0ZhaWx1cmVDb3VudCA9DQo+ID4gKwkJbGUzMl90b19jcHUo cGNtZC0+YWNrX2ZhaWx1cmVzKTsNCj4gPiArCXN0YXRzLT5kb3QxMVJUU0ZhaWx1cmVDb3VudCA9 DQo+ID4gKwkJbGUzMl90b19jcHUocGNtZC0+cnRzX2ZhaWx1cmVzKTsNCj4gPiArCXN0YXRzLT5k b3QxMUZDU0Vycm9yQ291bnQgPQ0KPiA+ICsJCWxlMzJfdG9fY3B1KHBjbWQtPnJ4X2Zjc19lcnJv cnMpOw0KPiA+ICsJc3RhdHMtPmRvdDExUlRTU3VjY2Vzc0NvdW50ID0NCj4gPiArCQlsZTMyX3Rv X2NwdShwY21kLT5ydHNfc3VjY2Vzc2VzKTsNCj4gPiArDQo+ID4gKwlzcGluX3VubG9ja19iaCgm cHJpdi0+ZndjbWRfbG9jayk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiAr DQo+ID4gK2ludCBtd2xfZndjbWRfcmFkaW9fZW5hYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 KSB7DQo+ID4gKwlyZXR1cm4gbXdsX2Z3Y21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LT5wcml2 LCB0cnVlLCBmYWxzZSk7IH0NCj4gPiArDQo+ID4gK2ludCBtd2xfZndjbWRfcmFkaW9fZGlzYWJs ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykgew0KPiA+ICsJcmV0dXJuIG13bF9md2NtZF84MDJf MTFfcmFkaW9fY29udHJvbChody0+cHJpdiwgZmFsc2UsIGZhbHNlKTsgfQ0KPiANCj4gVGhlc2Ug bGFzdCB0d28gbWFrZXMgbWUgdGhpbmsgeW91IG9ubHkgdXNlIHRoZSBzcGluIGxvY2sgZm9yIGJ1 ZmZlcg0KPiBtYW5hZ2VtZW50IGFuZCBub3QgdGhlIGNvbW1hbmQgZXhlY3V0aW9uIGl0c2VsZj8N Cj4gDQo+IEkgYW0gb3V0IG9mIHRpbWUgZm9yIHRvZGF5LCBJJ2xsIHRyeSB0byBzZWUgaWYgSSBj YW4gZmluZCBtb3JlIHRpbWUgbGF0ZXIgLSBwbGVhc2UNCj4gbG9vayBpbnRvIGZpeGluZyB0aGUg YWJvdmUuDQo+IA0KPiBKZXMNCg==