From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.2 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED,USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 48893C63777 for ; Mon, 23 Nov 2020 06:46:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DD3DC20773 for ; Mon, 23 Nov 2020 06:45:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="KztdyXo2" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727181AbgKWGpi (ORCPT ); Mon, 23 Nov 2020 01:45:38 -0500 Received: from Mailgw01.mediatek.com ([1.203.163.78]:7191 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1725287AbgKWGpi (ORCPT ); Mon, 23 Nov 2020 01:45:38 -0500 X-UUID: fb3969b461bf40b781e2070ab60fe5a7-20201123 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=arOg9TF9ITvumi4xqP2jqFFVKWGFqiiGRgL3EqGWNAs=; b=KztdyXo2L0KH9MPKXURcGXNLfUf7zxZJ3RoR8RDDtbWTyTFBHvXJDMkN13y7iKNmxzx2PBAki//XESGyVePhCmDti3mnU2xOZf/Luqu+rgKPTt//h1k1RS6CCB3PCluH1OtKBU5JSiLTRey9o7+sQEw9i6AydiWA4ngG+ZkxaBg=; X-UUID: fb3969b461bf40b781e2070ab60fe5a7-20201123 Received: from mtkcas34.mediatek.inc [(172.27.4.253)] by mailgw01.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 749457735; Mon, 23 Nov 2020 14:45:15 +0800 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS31N2.mediatek.inc (172.27.4.87) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 23 Nov 2020 14:45:12 +0800 Received: from [10.17.3.153] (10.17.3.153) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 23 Nov 2020 14:45:12 +0800 Message-ID: <1606113913.14736.37.camel@mhfsdcap03> Subject: Re: [v4,2/3] PCI: mediatek: Add new generation controller support From: Jianjun Wang To: Bjorn Helgaas CC: Bjorn Helgaas , Rob Herring , Lorenzo Pieralisi , Ryder Lee , Philipp Zabel , "Matthias Brugger" , Mauro Carvalho Chehab , , , , , , , Sj Huang , , , , Date: Mon, 23 Nov 2020 14:45:13 +0800 In-Reply-To: <20201119202825.GA197305@bjorn-Precision-5520> References: <20201119202825.GA197305@bjorn-Precision-5520> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: 32C1E16B6C190DB3E3A03D1960617B2E5032A140321C3A2DB44FB9C2356B08072000:8 X-MTK: N Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org T24gVGh1LCAyMDIwLTExLTE5IGF0IDE0OjI4IC0wNjAwLCBCam9ybiBIZWxnYWFzIHdyb3RlOg0K PiAiQWRkIG5ldyBnZW5lcmF0aW9uIiByZWFsbHkgY29udGFpbnMgbm8gaW5mb3JtYXRpb24uICBB bmQgIm1lZGlhdGVrIg0KPiBpcyBhbHJlYWR5IHVzZWQgZm9yIHRoZSBwY2llLW1lZGlhdGVrLmMg ZHJpdmVyLCBzbyB3ZSBzaG91bGQgaGF2ZSBhDQo+IG5ldyB0YWcgZm9yIHRoaXMgbmV3IGRyaXZl ci4gIEluY2x1ZGUgdXNlZnVsIGluZm9ybWF0aW9uIGluIHRoZQ0KPiBzdWJqZWN0LCBlLmcuLA0K PiANCj4gICBQQ0k6IG1lZGlhdGVrLWdlbjM6IEFkZCBNZWRpYVRlayBHZW4zIGRyaXZlciBmb3Ig TVQ4MTkyDQo+IA0KPiBPbiBXZWQsIE5vdiAxOCwgMjAyMCBhdCAwNDoyOTozNFBNICswODAwLCBK aWFuanVuIFdhbmcgd3JvdGU6DQo+ID4gTWVkaWFUZWsncyBQQ0llIGhvc3QgY29udHJvbGxlciBo YXMgdGhyZWUgZ2VuZXJhdGlvbiBIV3MsIHRoZSBuZXcNCj4gPiBnZW5lcmF0aW9uIEhXIGlzIGFu IGluZGl2aWR1YWwgYnJpZGdlLCBpdCBzdXBvb3J0cyBHZW4zIHNwZWVkIGFuZA0KPiA+IHVwIHRv IDI1NiBNU0kgaW50ZXJydXB0IG51bWJlcnMgZm9yIG11bHRpLWZ1bmN0aW9uIGRldmljZXMuDQo+ IA0KPiBzL3N1cG9vcnRzL3N1cHBvcnRzLw0KPiANCj4gPiBBZGQgc3VwcG9ydCBmb3IgbmV3IEdl bjMgY29udHJvbGxlciB3aGljaCBjYW4gYmUgZm91bmQgb24gTVQ4MTkyLg0KPiA+IA0KPiA+IFNp Z25lZC1vZmYtYnk6IEppYW5qdW4gV2FuZyA8amlhbmp1bi53YW5nQG1lZGlhdGVrLmNvbT4NCj4g PiBBY2tlZC1ieTogUnlkZXIgTGVlIDxyeWRlci5sZWVAbWVkaWF0ZWsuY29tPg0KPiA+IC0tLQ0K PiA+ICBkcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWcgICAgICAgICAgICAgIHwgICAxNCAr DQo+ID4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUgICAgICAgICAgICAgfCAgICAx ICsNCj4gPiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLWdlbjMuYyB8IDEw MzEgKysrKysrKysrKysrKysrKysrKw0KPiA+ICAzIGZpbGVzIGNoYW5nZWQsIDEwNDYgaW5zZXJ0 aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wY2kvY29udHJvbGxlci9w Y2llLW1lZGlhdGVrLWdlbjMuYw0KPiA+IA0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9j b250cm9sbGVyL0tjb25maWcgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWcNCj4gPiBp bmRleCBmMThjMzcyNWVmODAuLjgzZGFhNzcyNTk1YiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJz L3BjaS9jb250cm9sbGVyL0tjb25maWcNCj4gPiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVy L0tjb25maWcNCj4gPiBAQCAtMjM5LDYgKzIzOSwyMCBAQCBjb25maWcgUENJRV9NRURJQVRFSw0K PiA+ICAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBQQ0llIGNvbnRyb2xsZXIg c3VwcG9ydCBvbg0KPiA+ICAJICBNZWRpYVRlayBTb0NzLg0KPiA+ICANCj4gPiArY29uZmlnIFBD SUVfTUVESUFURUtfR0VOMw0KPiA+ICsJdHJpc3RhdGUgIk1lZGlhVGVrIEdFTjMgUENJZSBjb250 cm9sbGVyIg0KPiANCj4gcy9HRU4zL0dlbjMvDQo+IA0KPiA+ICsJZGVwZW5kcyBvbiBBUkNIX01F RElBVEVLIHx8IENPTVBJTEVfVEVTVA0KPiA+ICsJZGVwZW5kcyBvbiBPRg0KPiANCj4gRG8geW91 IHJlYWxseSBuZWVkICJkZXBlbmRzIG9uIE9GIj8gIFRoZXJlIGFyZSBzdHVicyB0byBjb3ZlciBt b3N0DQo+IGludGVyZmFjZXMgZXZlbiB3aGVuIENPTkZJR19PRiBpcyBub3Qgc2V0LiAgRGVwZW5k aW5nIG9uIE9GIHJlZHVjZXMNCj4gY29tcGlsZS10ZXN0IGNvdmVyYWdlLg0KPiANCj4gPiArCWRl cGVuZHMgb24gUENJX01TSV9JUlFfRE9NQUlODQo+ID4gKwloZWxwDQo+ID4gKwkgIEFkZHMgc3Vw cG9ydCBmb3IgUENJZSBHZW4zIE1BQyBjb250cm9sbGVyIGZvciBNZWRpYVRlayBTb0NzLg0KPiA+ ICsJICBUaGlzIFBDSWUgY29udHJvbGxlciBwcm92aWRlcyB0aGUgY2FwYWJsZSBvZiBHZW4zLCBH ZW4yIGFuZA0KPiANCj4gInByb3ZpZGVzIHRoZSBjYXBhYmxlIG9mIiBkb2Vzbid0IHBhcnNlLg0K PiANCj4gPiArCSAgR2VuMSBzcGVlZCwgYW5kIHN1cHBvcnQgdXAgdG8gMjU2IE1TSSBpbnRlcnJ1 cHQgbnVtYmVycyBmb3INCj4gPiArCSAgbXVsdGktZnVuY3Rpb24gZGV2aWNlcy4NCj4gPiArDQo+ ID4gKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIEdlbjMgUENJZSBjb250cm9s bGVyIHN1cHBvcnQgb24NCj4gPiArCSAgTWVkaWFUZWsgU29Dcy4NCj4gPiArDQo+ID4gIGNvbmZp ZyBQQ0lFX1RBTkdPX1NNUDg3NTkNCj4gPiAgCWJvb2wgIlRhbmdvIFNNUDg3NTkgUENJZSBjb250 cm9sbGVyIChEQU5HRVJPVVMpIg0KPiA+ICAJZGVwZW5kcyBvbiBBUkNIX1RBTkdPICYmIFBDSV9N U0kgJiYgT0YNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmls ZSBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUNCj4gPiBpbmRleCBiY2RiZjQ5YWIx ZTQuLjljMWI5Njc3NzU5NyAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVy L01ha2VmaWxlDQo+ID4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZQ0KPiA+ IEBAIC0yNyw2ICsyNyw3IEBAIG9iai0kKENPTkZJR19QQ0lFX1JPQ0tDSElQKSArPSBwY2llLXJv Y2tjaGlwLm8NCj4gPiAgb2JqLSQoQ09ORklHX1BDSUVfUk9DS0NISVBfRVApICs9IHBjaWUtcm9j a2NoaXAtZXAubw0KPiA+ICBvYmotJChDT05GSUdfUENJRV9ST0NLQ0hJUF9IT1NUKSArPSBwY2ll LXJvY2tjaGlwLWhvc3Qubw0KPiA+ICBvYmotJChDT05GSUdfUENJRV9NRURJQVRFSykgKz0gcGNp ZS1tZWRpYXRlay5vDQo+ID4gK29iai0kKENPTkZJR19QQ0lFX01FRElBVEVLX0dFTjMpICs9IHBj aWUtbWVkaWF0ZWstZ2VuMy5vDQo+ID4gIG9iai0kKENPTkZJR19QQ0lFX1RBTkdPX1NNUDg3NTkp ICs9IHBjaWUtdGFuZ28ubw0KPiA+ICBvYmotJChDT05GSUdfVk1EKSArPSB2bWQubw0KPiA+ICBv YmotJChDT05GSUdfUENJRV9CUkNNU1RCKSArPSBwY2llLWJyY21zdGIubw0KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWstZ2VuMy5jIGIvZHJpdmVy cy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLWdlbjMuYw0KPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5kZDQ1NGNmZWUzNzMNCj4gPiAtLS0gL2Rl di9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLWdl bjMuYw0KPiA+IEBAIC0wLDAgKzEsMTAzMSBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMA0KPiA+ICsvKg0KPiA+ICsgKiBNZWRpYVRlayBQQ0llIGhvc3QgY29udHJv bGxlciBkcml2ZXIuDQo+ID4gKyAqDQo+ID4gKyAqIENvcHlyaWdodCAoYykgMjAyMCBNZWRpYVRl ayBJbmMuDQo+ID4gKyAqIEF1dGhvcjogSmlhbmp1biBXYW5nIDxqaWFuanVuLndhbmdAbWVkaWF0 ZWsuY29tPg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwu aD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lycS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaXJx Y2hpcC9jaGFpbmVkX2lycS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbXNpLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9v Zl9hZGRyZXNzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9jbGsuaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L29mX3BjaS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4N Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGh5L3Bo eS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9wbV9kb21haW4uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUu aD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAi Li4vcGNpLmgiDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBDSUVfU0VUVElOR19SRUcJCTB4ODANCj4g PiArI2RlZmluZSBQQ0lFX1BDSV9JRFNfMQkJCTB4OWMNCj4gPiArI2RlZmluZSBQQ0lfQ0xBU1Mo Y2xhc3MpCQkoY2xhc3MgPDwgOCkNCj4gPiArI2RlZmluZSBQQ0lFX1JDX01PREUJCQlCSVQoMCkN Cj4gPiArDQo+ID4gKyNkZWZpbmUgUENJRV9DRkdOVU1fUkVHCQkJMHgxNDANCj4gPiArI2RlZmlu ZSBQQ0lFX0NGR19ERVZGTihkZXZmbikJCSgoZGV2Zm4pICYgR0VOTUFTSyg3LCAwKSkNCj4gPiAr I2RlZmluZSBQQ0lFX0NGR19CVVMoYnVzKQkJKCgoYnVzKSA8PCA4KSAmIEdFTk1BU0soMTUsIDgp KQ0KPiA+ICsjZGVmaW5lIFBDSUVfQ0ZHX0JZVEVfRU4oYnl0ZXMpCQkoKChieXRlcykgPDwgMTYp ICYgR0VOTUFTSygxOSwgMTYpKQ0KPiA+ICsjZGVmaW5lIFBDSUVfQ0ZHX0ZPUkNFX0JZVEVfRU4J CUJJVCgyMCkNCj4gPiArI2RlZmluZSBQQ0lFX0NGR19PRkZTRVRfQUREUgkJMHgxMDAwDQo+ID4g KyNkZWZpbmUgUENJRV9DRkdfSEVBREVSKGRldmZuLCBidXMpIFwNCj4gPiArCShQQ0lFX0NGR19E RVZGTihkZXZmbikgfCBQQ0lFX0NGR19CVVMoYnVzKSkNCj4gDQo+IFRoaXMgc2hvdWxkIGJlOg0K PiANCj4gICAoUENJRV9DRkdfQlVTKGJ1cykgfCBQQ0lFX0NGR19ERVZGTihkZXZmbikpDQo+IA0K PiB0byBtYXRjaCB0aGUgb3JkZXIgb2YgdGhlIGJpdHMgaW4gdGhlIGFkZHJlc3MgeW91J3JlIGNv bnN0cnVjdGluZy4NCj4gDQo+ID4gKyNkZWZpbmUgUENJRV9DRkdfSEVBREVSX0ZPUkNFX0JFKGRl dmZuLCBidXMsIGJ5dGVzKSBcDQo+ID4gKwkoUENJRV9DRkdfSEVBREVSKGRldmZuLCBidXMpIHwg UENJRV9DRkdfQllURV9FTihieXRlcykgXA0KPiA+ICsJIHwgUENJRV9DRkdfRk9SQ0VfQllURV9F TikNCj4gDQo+IFJlb3JkZXIgc2ltaWxhcmx5Lg0KPiANCj4gPiArI2RlZmluZSBQQ0lFX1JTVF9D VFJMX1JFRwkJMHgxNDgNCj4gPiArI2RlZmluZSBQQ0lFX01BQ19SU1RCCQkJQklUKDApDQo+ID4g KyNkZWZpbmUgUENJRV9QSFlfUlNUQgkJCUJJVCgxKQ0KPiA+ICsjZGVmaW5lIFBDSUVfQlJHX1JT VEIJCQlCSVQoMikNCj4gPiArI2RlZmluZSBQQ0lFX1BFX1JTVEIJCQlCSVQoMykNCj4gPiArDQo+ ID4gKyNkZWZpbmUgUENJRV9NSVNDX1NUQVRVU19SRUcJCTB4MTRDDQo+ID4gKyNkZWZpbmUgUENJ RV9MVFJfTVNHX1JFQ0VJVkVECQlCSVQoMCkNCj4gPiArI2RlZmluZSBQQ0lFX1BDSUVfTVNHX1JF Q0VJVkVECQlCSVQoMSkNCj4gDQo+IFVudXNlZCwgcGxlYXNlIHJlbW92ZS4NCj4gDQo+ID4gKyNk ZWZpbmUgUENJRV9MVFNTTV9TVEFUVVNfUkVHCQkweDE1MA0KPiA+ICsjZGVmaW5lIFBDSUVfTFRT U01fU1RBVEVfTUFTSwkJR0VOTUFTSygyOCwgMjQpDQo+ID4gKyNkZWZpbmUgUENJRV9MVFNTTV9T VEFURSh2YWwpCQkoKHZhbCAmIFBDSUVfTFRTU01fU1RBVEVfTUFTSykgPj4gMjQpDQo+IA0KPiA+ ICsjZGVmaW5lIFBDSUVfTFRTU01fU1RBVEVfTDAJCTB4MTANCj4gPiArI2RlZmluZSBQQ0lFX0xU U1NNX1NUQVRFX0wxX0lETEUJMHgxMw0KPiANCj4gVW51c2VkLCBwbGVhc2UgcmVtb3ZlLg0KPiAN Cj4gPiArI2RlZmluZSBQQ0lFX0xUU1NNX1NUQVRFX0wyX0lETEUJMHgxNA0KPiA+ICsNCj4gPiAr I2RlZmluZSBQQ0lFX0xJTktfU1RBVFVTX1JFRwkJMHgxNTQNCj4gPiArI2RlZmluZSBQQ0lFX1BP UlRfTElOS1VQCQlCSVQoOCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgUENJRV9NU0lfU0VUX05VTQkJ OA0KPiA+ICsjZGVmaW5lIFBDSUVfTVNJX0lSUVNfUEVSX1NFVAkJMzINCj4gPiArI2RlZmluZSBQ Q0lFX01TSV9JUlFTX05VTSBcDQo+ID4gKwkoUENJRV9NU0lfSVJRU19QRVJfU0VUICogKFBDSUVf TVNJX1NFVF9OVU0pKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBQQ0lFX0lOVF9FTkFCTEVfUkVHCQkw eDE4MA0KPiA+ICsjZGVmaW5lIFBDSUVfTVNJX01BU0sJCQlHRU5NQVNLKFBDSUVfTVNJX1NFVF9O VU0gKyA4IC0gMSwgOCkNCj4gPiArI2RlZmluZSBQQ0lFX01TSV9TSElGVAkJCTgNCj4gPiArI2Rl ZmluZSBQQ0lFX0lOVFhfU0hJRlQJCQkyNA0KPiA+ICsjZGVmaW5lIFBDSUVfSU5UWF9NQVNLCQkJ R0VOTUFTSygyNywgMjQpDQo+IA0KPiA+ICsjZGVmaW5lIFBDSUVfTVNHX01BU0sJCQlCSVQoMjgp DQo+ID4gKyNkZWZpbmUgUENJRV9BRVJfTUFTSwkJCUJJVCgyOSkNCj4gPiArI2RlZmluZSBQQ0lF X1BNX01BU0sJCQlCSVQoMzApDQo+IA0KPiBVbnVzZWQsIHBsZWFzZSByZW1vdmUuDQo+IA0KPiA+ ICsjZGVmaW5lIFBDSUVfSU5UX1NUQVRVU19SRUcJCTB4MTg0DQo+ID4gKyNkZWZpbmUgUENJRV9N U0lfU0VUX0VOQUJMRV9SRUcJCTB4MTkwDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBDSUVfTE9XX1BP V0VSX0NUUkxfUkVHCQkweDE5NA0KPiA+ICsjZGVmaW5lIFBDSUVfRElTX0xPV1BXUl9NQVNLCQlH RU5NQVNLKDMsIDApDQo+ID4gKyNkZWZpbmUgUENJRV9ESVNfTDBTX01BU0sJCUJJVCgwKQ0KPiA+ ICsjZGVmaW5lIFBDSUVfRElTX0wxX01BU0sJCUJJVCgxKQ0KPiA+ICsjZGVmaW5lIFBDSUVfRElT X0wxMV9NQVNLCQlCSVQoMikNCj4gPiArI2RlZmluZSBQQ0lFX0RJU19MMTJfTUFTSwkJQklUKDMp DQo+ID4gKyNkZWZpbmUgUENJRV9GT1JDRV9ESVNfTE9XUFdSCQlHRU5NQVNLKDExLCA4KQ0KPiA+ ICsjZGVmaW5lIFBDSUVfRk9SQ0VfRElTX0wwUwkJQklUKDgpDQo+ID4gKyNkZWZpbmUgUENJRV9G T1JDRV9ESVNfTDEJCUJJVCg5KQ0KPiA+ICsjZGVmaW5lIFBDSUVfRk9SQ0VfRElTX0wxMQkJQklU KDEwKQ0KPiA+ICsjZGVmaW5lIFBDSUVfRk9SQ0VfRElTX0wxMgkJQklUKDExKQ0KPiANCj4gVW51 c2VkLCBwbGVhc2UgcmVtb3ZlLg0KPiANCj4gPiArI2RlZmluZSBQQ0lFX0lDTURfUE1fUkVHCQkw eDE5OA0KPiA+ICsjZGVmaW5lIFBDSUVfVFVSTl9PRkZfTElOSwkJQklUKDQpDQo+ID4gKw0KPiA+ ICsjZGVmaW5lIFBDSUVfTVNJX0FERFJfQkFTRV9SRUcJCTB4YzAwDQo+ID4gKyNkZWZpbmUgUENJ RV9NU0lfU0VUX09GRlNFVAkJMHgxMA0KPiA+ICsjZGVmaW5lIFBDSUVfTVNJX1NUQVRVU19PRkZT RVQJCTB4MDQNCj4gPiArI2RlZmluZSBQQ0lFX01TSV9FTkFCTEVfT0ZGU0VUCQkweDA4DQo+ID4g Kw0KPiA+ICsjZGVmaW5lIFBDSUVfVFJBTlNfVEFCTEVfQkFTRV9SRUcJMHg4MDANCj4gPiArI2Rl ZmluZSBQQ0lFX0FUUl9TUkNfQUREUl9NU0JfT0ZGU0VUCTB4NA0KPiA+ICsjZGVmaW5lIFBDSUVf QVRSX1RSU0xfQUREUl9MU0JfT0ZGU0VUCTB4OA0KPiA+ICsjZGVmaW5lIFBDSUVfQVRSX1RSU0xf QUREUl9NU0JfT0ZGU0VUCTB4Yw0KPiA+ICsjZGVmaW5lIFBDSUVfQVRSX1RSU0xfUEFSQU1fT0ZG U0VUCTB4MTANCj4gPiArI2RlZmluZSBQQ0lFX0FUUl9UTEJfU0VUX09GRlNFVAkJMHgyMA0KPiA+ ICsNCj4gPiArI2RlZmluZSBQQ0lFX01BWF9UUkFOU19UQUJMRVMJCTgNCj4gPiArI2RlZmluZSBB VFJfRU4JCQkJQklUKDApDQo+ID4gKyNkZWZpbmUgQVRSX1NJWkUoc2l6ZSkJCQkoKCgoc2l6ZSkg LSAxKSA8PCAxKSAmIEdFTk1BU0soNiwgMSkpDQo+ID4gKyNkZWZpbmUgQVRSX0lEKGlkKQkJCShp ZCAmIEdFTk1BU0soMywgMCkpDQo+ID4gKyNkZWZpbmUgQVRSX1BBUkFNKHBhcmFtKQkJKCgocGFy YW0pIDw8IDE2KSAmIEdFTk1BU0soMjcsIDE2KSkNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBz dHJ1Y3QgbXRrX3BjaWVfbXNpIC0gTVNJIGluZm9ybWF0aW9uIGZvciBlYWNoIHNldA0KPiA+ICsg KiBAYmFzZTogSU8gbWFwcGVkIHJlZ2lzdGVyIGJhc2UNCj4gPiArICogQGlycTogTVNJIHNldCBJ bnRlcnJ1cHQgbnVtYmVyDQo+ID4gKyAqIEBpbmRleDogTVNJIHNldCBudW1iZXINCj4gPiArICog QG1zZ19hZGRyOiBNU0kgbWVzc2FnZSBhZGRyZXNzDQo+ID4gKyAqIEBkb21haW46IElSUSBkb21h aW4NCj4gPiArICovDQo+ID4gK3N0cnVjdCBtdGtfcGNpZV9tc2kgew0KPiA+ICsJdm9pZCBfX2lv bWVtICpiYXNlOw0KPiA+ICsJdW5zaWduZWQgaW50IGlycTsNCj4gPiArCWludCBpbmRleDsNCj4g PiArCXBoeXNfYWRkcl90IG1zZ19hZGRyOw0KPiA+ICsJc3RydWN0IGlycV9kb21haW4gKmRvbWFp bjsNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBzdHJ1Y3QgbXRrX3BjaWVfcG9y dCAtIFBDSWUgcG9ydCBpbmZvcm1hdGlvbg0KPiA+ICsgKiBAZGV2OiBQQ0llIGRldmljZQ0KPiA+ ICsgKiBAYmFzZTogSU8gbWFwcGVkIHJlZ2lzdGVyIGJhc2UNCj4gPiArICogQHJlZ19iYXNlOiBQ aHlzaWNhbCByZWdpc3RlciBiYXNlDQo+ID4gKyAqIEBtYWNfcmVzZXQ6IG1hYyByZXNldCBjb250 cm9sDQo+ID4gKyAqIEBwaHlfcmVzZXQ6IHBoeSByZXNldCBjb250cm9sDQo+ID4gKyAqIEBwaHk6 IFBIWSBjb250cm9sbGVyIGJsb2NrDQo+ID4gKyAqIEBjbGtzOiBQQ0llIGNsb2Nrcw0KPiA+ICsg KiBAbnVtX2Nsa3M6IFBDSWUgY2xvY2tzIGNvdW50IGZvciB0aGlzIHBvcnQNCj4gPiArICogQGlz X3N1c3BlbmRlZDogZGV2aWNlIHN1c3BlbmQgc3RhdGUNCj4gPiArICogQGlycTogUENJZSBjb250 cm9sbGVyIGludGVycnVwdCBudW1iZXINCj4gPiArICogQGludHhfZG9tYWluOiBsZWdhY3kgSU5U eCBJUlEgZG9tYWluDQo+ID4gKyAqIEBtc2lfZG9tYWluOiBNU0kgSVJRIGRvbWFpbg0KPiA+ICsg KiBAbXNpX3RvcF9kb21haW46IE1TSSBJUlEgdG9wIGRvbWFpbg0KPiA+ICsgKiBAbXNpX2luZm86 IE1TSSBzZXRzIGluZm9ybWF0aW9uDQo+ID4gKyAqIEBsb2NrOiBsb2NrIHByb3RlY3RpbmcgSVJR IGJpdCBtYXANCj4gPiArICogQG1zaV9pcnFfaW5fdXNlOiBiaXQgbWFwIGZvciBhc3NpZ25lZCBN U0kgSVJRDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgbXRrX3BjaWVfcG9ydCB7DQo+ID4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXY7DQo+ID4gKwl2b2lkIF9faW9tZW0gKmJhc2U7DQo+ID4gKwlwaHlzX2Fk ZHJfdCByZWdfYmFzZTsNCj4gPiArCXN0cnVjdCByZXNldF9jb250cm9sICptYWNfcmVzZXQ7DQo+ ID4gKwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcGh5X3Jlc2V0Ow0KPiA+ICsJc3RydWN0IHBoeSAq cGh5Ow0KPiA+ICsJc3RydWN0IGNsa19idWxrX2RhdGEgKmNsa3M7DQo+ID4gKwlpbnQgbnVtX2Ns a3M7DQo+ID4gKwlib29sIGlzX3N1c3BlbmRlZDsNCj4gPiArDQo+ID4gKwlpbnQgaXJxOw0KPiA+ ICsJc3RydWN0IGlycV9kb21haW4gKmludHhfZG9tYWluOw0KPiA+ICsJc3RydWN0IGlycV9kb21h aW4gKm1zaV9kb21haW47DQo+ID4gKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqbXNpX3RvcF9kb21haW47 DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfbXNpICoqbXNpX2luZm87DQo+ID4gKwlzdHJ1Y3QgbXV0 ZXggbG9jazsNCj4gPiArCURFQ0xBUkVfQklUTUFQKG1zaV9pcnFfaW5fdXNlLCBQQ0lFX01TSV9J UlFTX05VTSk7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19wY2llX2NvbmZp Z19yZWFkKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwNCj4gPiArCQkJ CSAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCkNCj4gPiArew0KPiA+ICsJc3RydWN0 IG10a19wY2llX3BvcnQgKnBvcnQgPSBidXMtPnN5c2RhdGE7DQo+ID4gKwlpbnQgYnl0ZXM7DQo+ ID4gKw0KPiA+ICsJYnl0ZXMgPSAoKDEgPDwgc2l6ZSkgLSAxKSA8PCAod2hlcmUgJiAweDMpOw0K PiANCj4gVGhpcyBzZWVtcyBsaWtlIHNvbWUgdW51c3VhbCBiaXQgdHdpZGRsaW5nOyBhdCBsZWFz dCwgSSBkb24ndCByZW1lbWJlcg0KPiBzZWVpbmcgdGhpcyBiZWZvcmUuICBDYW4geW91IHNraW0g b3RoZXIgZHJpdmVycyBhbmQgc2VlIGlmIG90aGVycyBkbw0KPiB0aGUgc2FtZSB0aGluZywgYW5k IGFkb3B0IGEgY29tbW9uIHN0eWxlIGlmIHRoZXkgZG8/DQoNCkhpIEJqb3JuLA0KDQpUaGFua3Mg Zm9yIHlvdXIgcmV2aWV3LCBJIHdpbGwgZml4IGl0IGluIHRoZSBuZXh0IHZlcnNpb24uDQo+IA0K PiA+ICsJd3JpdGVsKFBDSUVfQ0ZHX0hFQURFUl9GT1JDRV9CRShkZXZmbiwgYnVzLT5udW1iZXIs IGJ5dGVzKSwNCj4gPiArCSAgICAgICBwb3J0LT5iYXNlICsgUENJRV9DRkdOVU1fUkVHKTsNCj4g PiArDQo+ID4gKwkqdmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBDSUVfQ0ZHX09GRlNFVF9BRERS ICsgKHdoZXJlICYgfjB4MykpOw0KPiANCj4gVGhlc2UgbG9vayBsaWtlIHRoZXkgbmVlZCB0byBi ZSBhdG9taWMsIHNpbmNlIHlvdSBuZWVkIGEgd3JpdGVsKCkNCj4gZm9sbG93ZWQgYnkgYSByZWFk bCgpLg0KPiANCj4gcGNpX2xvY2tfY29uZmlnKCkgKHVzZWQgaW4gcGNpX2J1c19yZWFkX2NvbmZp Z18qKCksIGV0YykgdXNlcyB0aGUNCj4gZ2xvYmFsIHBjaV9sb2NrIGZvciB0aGlzIHVubGVzcyBD T05GSUdfUENJX0xPQ0tMRVNTX0NPTkZJRyBpcyBzZXQuDQo+IA0KPiBCdXQgSSB3b3VsZCBsaWtl IHRvIGV2ZW50dWFsbHkgbW92ZSBhd2F5IGZyb20gdGhpcyBpbXBsaWNpdCBkZXBlbmRlbmN5DQo+ IG9uIHBjaV9sb2NrLiAgSWYgeW91IG5lZWQgdG8gbWFrZSB0aGlzIGF0b21pYywgY2FuIHlvdSBh ZGQgdGhlDQo+IGV4cGxpY2l0IGxvY2tpbmcgaGVyZSwgc28gdGhlcmUncyBhIGNsZWFyIGNvbm5l Y3Rpb24gYmV0d2VlbiB0aGUgbG9jaw0KPiBhbmQgdGhlIHRoaW5ncyBpdCBwcm90ZWN0cz8NCg0K U3VyZSwgSSB3aWxsIHNwbGl0IGl0IHRvIGEgbWFwX2J1cygpIGZ1bmN0aW9uIGFuZCB1c2UgdGhl IHN0YW5kYXJkDQpwY2lfZ2VuZXJpY19jb25maWdfcmVhZDMyL3dyaXRlMzIgZnVuY3Rpb25zIGFz IFJvYidzIHN1Z2dlc3Rpb24uIEkgdGhpbmsNCnRoZSBwb3RlbnRpYWwgcmlza3Mgb2YgYXRvbWlj IHJlYWQvd3JpdGUgY2FuIGJlIGF2b2lkZWQuDQo+IA0KPiA+ICsJaWYgKHNpemUgPD0gMikNCj4g PiArCQkqdmFsID0gKCp2YWwgPj4gKDggKiAod2hlcmUgJiAweDMpKSkgJiAoKDEgPDwgKHNpemUg KiA4KSkgLSAxKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19wY2llX2NvbmZpZ193cml0ZShzdHJ1Y3Qg cGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sDQo+ID4gKwkJCQkgICAgIGludCB3aGVy ZSwgaW50IHNpemUsIHUzMiB2YWwpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9wb3J0 ICpwb3J0ID0gYnVzLT5zeXNkYXRhOw0KPiA+ICsJaW50IGJ5dGVzOw0KPiA+ICsNCj4gPiArCWJ5 dGVzID0gKCgxIDw8IHNpemUpIC0gMSkgPDwgKHdoZXJlICYgMHgzKTsNCj4gPiArCXdyaXRlbChQ Q0lFX0NGR19IRUFERVJfRk9SQ0VfQkUoZGV2Zm4sIGJ1cy0+bnVtYmVyLCBieXRlcyksDQo+ID4g KwkgICAgICAgcG9ydC0+YmFzZSArIFBDSUVfQ0ZHTlVNX1JFRyk7DQo+ID4gKw0KPiA+ICsJaWYg KHNpemUgPD0gMikNCj4gPiArCQl2YWwgPSAodmFsICYgKCgxIDw8IChzaXplICogOCkpIC0gMSkp IDw8ICgod2hlcmUgJiAweDMpICogOCk7DQo+ID4gKw0KPiA+ICsJd3JpdGVsKHZhbCwgcG9ydC0+ YmFzZSArIFBDSUVfQ0ZHX09GRlNFVF9BRERSICsgKHdoZXJlICYgfjB4MykpOw0KPiA+ICsNCj4g PiArCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBzdHJ1Y3QgcGNpX29wcyBtdGtfcGNpZV9vcHMgPSB7DQo+ID4gKwkucmVhZCAgPSBtdGtfcGNp ZV9jb25maWdfcmVhZCwNCj4gPiArCS53cml0ZSA9IG10a19wY2llX2NvbmZpZ193cml0ZSwNCj4g PiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG10a19wY2llX3NldF90cmFuc193aW5kb3co dm9pZCBfX2lvbWVtICpyZWcsDQo+ID4gKwkJCQkgICAgICByZXNvdXJjZV9zaXplX3QgY3B1X2Fk ZHIsDQo+ID4gKwkJCQkgICAgICByZXNvdXJjZV9zaXplX3QgcGNpX2FkZHIsIHNpemVfdCBzaXpl KQ0KPiA+ICt7DQo+ID4gKwl3cml0ZWwobG93ZXJfMzJfYml0cyhjcHVfYWRkcikgfCBBVFJfU0la RShmbHMoc2l6ZSkgLSAxKSB8IEFUUl9FTiwgcmVnKTsNCj4gPiArCXdyaXRlbCh1cHBlcl8zMl9i aXRzKGNwdV9hZGRyKSwgcmVnICsgUENJRV9BVFJfU1JDX0FERFJfTVNCX09GRlNFVCk7DQo+ID4g Kwl3cml0ZWwobG93ZXJfMzJfYml0cyhwY2lfYWRkciksIHJlZyArIFBDSUVfQVRSX1RSU0xfQURE Ul9MU0JfT0ZGU0VUKTsNCj4gPiArCXdyaXRlbCh1cHBlcl8zMl9iaXRzKHBjaV9hZGRyKSwgcmVn ICsgUENJRV9BVFJfVFJTTF9BRERSX01TQl9PRkZTRVQpOw0KPiA+ICsJd3JpdGVsKEFUUl9JRCgw KSB8IEFUUl9QQVJBTSgwKSwgcmVnICsgUENJRV9BVFJfVFJTTF9QQVJBTV9PRkZTRVQpOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19wY2llX3NldF90cmFuc190YWJsZSh2b2lk IF9faW9tZW0gKnJlZywNCj4gPiArCQkJCSAgICByZXNvdXJjZV9zaXplX3QgY3B1X2FkZHIsDQo+ ID4gKwkJCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHBjaV9hZGRyLCBzaXplX3Qgc2l6ZSwNCj4gPiAr CQkJCSAgICBpbnQgbnVtKQ0KPiA+ICt7DQo+ID4gKwl2b2lkIF9faW9tZW0gKnRhYmxlX2Jhc2U7 DQo+ID4gKw0KPiA+ICsJaWYgKG51bSA+IFBDSUVfTUFYX1RSQU5TX1RBQkxFUykNCj4gPiArCQly ZXR1cm4gLUVOT0RFVjsNCj4gPiArDQo+ID4gKwl0YWJsZV9iYXNlID0gcmVnICsgbnVtICogUENJ RV9BVFJfVExCX1NFVF9PRkZTRVQ7DQo+ID4gKwltdGtfcGNpZV9zZXRfdHJhbnNfd2luZG93KHRh YmxlX2Jhc2UsIGNwdV9hZGRyLCBwY2lfYWRkciwgc2l6ZSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXRrX3BjaWVfc3RhcnR1cF9wb3J0 KHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcmVzb3Vy Y2VfZW50cnkgKmVudHJ5Ow0KPiA+ICsJc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAqaG9zdCA9IHBj aV9ob3N0X2JyaWRnZV9mcm9tX3ByaXYocG9ydCk7DQo+ID4gKwl1bnNpZ25lZCBpbnQgdGFibGVf aW5kZXggPSAwOw0KPiA+ICsJaW50IGVycjsNCj4gPiArCXUzMiB2YWw7DQo+ID4gKw0KPiA+ICsJ LyogU2V0IGFzIFJDIG1vZGUgKi8NCj4gPiArCXZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lF X1NFVFRJTkdfUkVHKTsNCj4gPiArCXZhbCB8PSBQQ0lFX1JDX01PREU7DQo+ID4gKwl3cml0ZWwo dmFsLCBwb3J0LT5iYXNlICsgUENJRV9TRVRUSU5HX1JFRyk7DQo+ID4gKw0KPiA+ICsJLyogU2V0 IGNsYXNzIGNvZGUgKi8NCj4gPiArCXZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lFX1BDSV9J RFNfMSk7DQo+ID4gKwl2YWwgJj0gfkdFTk1BU0soMzEsIDgpOw0KPiA+ICsJdmFsIHw9IFBDSV9D TEFTUyhQQ0lfQ0xBU1NfQlJJREdFX1BDSSA8PCA4KTsNCj4gPiArCXdyaXRlbCh2YWwsIHBvcnQt PmJhc2UgKyBQQ0lFX1BDSV9JRFNfMSk7DQo+ID4gKw0KPiA+ICsJLyogQXNzZXJ0IGFsbCByZXNl dCBzaWduYWxzICovDQo+ID4gKwl2YWwgPSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9SU1RfQ1RS TF9SRUcpOw0KPiA+ICsJdmFsIHw9IFBDSUVfTUFDX1JTVEIgfCBQQ0lFX1BIWV9SU1RCIHwgUENJ RV9CUkdfUlNUQiB8IFBDSUVfUEVfUlNUQjsNCj4gPiArCXdyaXRlbCh2YWwsIHBvcnQtPmJhc2Ug KyBQQ0lFX1JTVF9DVFJMX1JFRyk7DQo+ID4gKw0KPiA+ICsJLyogRGUtYXNzZXJ0IHJlc2V0IHNp Z25hbHMqLw0KPiANCj4gTWlzc2luZyBzcGFjZSBhdCBlbmQgb2YgY29tbWVudC4NCj4gDQo+ID4g Kwl2YWwgJj0gfihQQ0lFX01BQ19SU1RCIHwgUENJRV9QSFlfUlNUQiB8IFBDSUVfQlJHX1JTVEIp Ow0KPiA+ICsJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfUlNUX0NUUkxfUkVHKTsNCj4g PiArDQo+ID4gKwkvKiBEZWxheSAxMDBtcyB0byB3YWl0IHRoZSByZWZlcmVuY2UgY2xvY2tzIGJl Y29tZSBzdGFibGUgKi8NCj4gPiArCXVzbGVlcF9yYW5nZSgxMDAgKiAxMDAwLCAxMjAgKiAxMDAw KTsNCj4gPiArDQo+ID4gKwkvKiBEZS1hc3NlcnQgcGUgcmVzZXQqLw0KPiANCj4gTWlzc2luZyBz cGFjZSBhdCBlbmQgb2YgY29tbWVudC4gICJwZSIgbG9va3MgbGlrZSBzb21ldGhpbmcgdGhhdA0K PiBzaG91bGQgYmUgY2FwaXRhbGl6ZWQsIHNpbmNlIEkgYXNzdW1lIGl0J3Mgc29tZSBzb3J0IG9m IGluaXRpYWxpc20uDQo+IA0KPiA+ICsJdmFsICY9IH5QQ0lFX1BFX1JTVEI7DQo+ID4gKwl3cml0 ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9SU1RfQ1RSTF9SRUcpOw0KPiA+ICsNCj4gPiArCS8q IENoZWNrIGlmIHRoZSBsaW5rIGlzIHVwIG9yIG5vdCAqLw0KPiA+ICsJZXJyID0gcmVhZGxfcG9s bF90aW1lb3V0KHBvcnQtPmJhc2UgKyBQQ0lFX0xJTktfU1RBVFVTX1JFRywgdmFsLA0KPiA+ICsJ CQkhISh2YWwgJiBQQ0lFX1BPUlRfTElOS1VQKSwgMjAsDQo+ID4gKwkJCTUwICogVVNFQ19QRVJf TVNFQyk7DQo+ID4gKwlpZiAoZXJyKSB7DQo+ID4gKwkJdmFsID0gcmVhZGwocG9ydC0+YmFzZSAr IFBDSUVfTFRTU01fU1RBVFVTX1JFRyk7DQo+ID4gKwkJZGV2X2RiZyhwb3J0LT5kZXYsICJsdHNz bSByZWcgdmFsOiAlI3hcbiIsIHZhbCk7DQo+ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwkvKiBTZXQgUENJZSB0cmFuc2xhdGlvbiB3aW5kb3dzICovDQo+ID4gKwlyZXNv dXJjZV9saXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmaG9zdC0+d2luZG93cykgew0KPiA+ICsJ CXVuc2lnbmVkIGxvbmcgdHlwZSA9IHJlc291cmNlX3R5cGUoZW50cnktPnJlcyk7DQo+ID4gKwkJ c3RydWN0IHJlc291cmNlICpyZXMgPSBOVUxMOw0KPiA+ICsJCXJlc291cmNlX3NpemVfdCBjcHVf YWRkcjsNCj4gPiArCQlyZXNvdXJjZV9zaXplX3QgcGNpX2FkZHI7DQo+ID4gKw0KPiA+ICsJCWlm ICghKHR5cGUgJiAoSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0lPKSkpDQo+ID4gKwkJCWNv bnRpbnVlOw0KPiA+ICsNCj4gPiArCQlyZXMgPSBlbnRyeS0+cmVzOw0KPiA+ICsJCWNwdV9hZGRy ID0gcmVzLT5zdGFydDsNCj4gPiArCQlwY2lfYWRkciA9IHJlcy0+c3RhcnQgLSBlbnRyeS0+b2Zm c2V0Ow0KPiA+ICsJCW10a19wY2llX3NldF90cmFuc190YWJsZShwb3J0LT5iYXNlICsgUENJRV9U UkFOU19UQUJMRV9CQVNFX1JFRywNCj4gPiArCQkJCQkgY3B1X2FkZHIsIHBjaV9hZGRyLCByZXNv dXJjZV9zaXplKHJlcyksDQo+ID4gKwkJCQkJIHRhYmxlX2luZGV4KTsNCj4gPiArDQo+ID4gKwkJ ZGV2X2RiZyhwb3J0LT5kZXYsICJTZXQgJXMgdHJhbnMgd2luZG93WyVkXTogY3B1X2FkZHIgPSAl I2xseCwgcGNpX2FkZHIgPSAlI2xseCwgc2l6ZSA9ICUjbGx4XG4iLA0KPiA+ICsJCQkoISEodHlw ZSAmIElPUkVTT1VSQ0VfTUVNKSA/ICJNRU0iIDogIklPIiksIHRhYmxlX2luZGV4LA0KPiA+ICsJ CQljcHVfYWRkciwgcGNpX2FkZHIsIHJlc291cmNlX3NpemUocmVzKSk7DQo+ID4gKw0KPiA+ICsJ CXRhYmxlX2luZGV4Kys7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19wY2llX21zaSAqbXRrX2dldF9t c2lfaW5mbyhzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCwNCj4gPiArCQkJCQkJICAgIHVuc2ln bmVkIGxvbmcgaHdpcnEpDQo+ID4gK3sNCj4gPiArCXJldHVybiBwb3J0LT5tc2lfaW5mb1tod2ly cSAvIFBDSUVfTVNJX0lSUVNfUEVSX1NFVF07DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQgbXRrX3BjaWVfc2V0X2FmZmluaXR5KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwNCj4gPiArCQkJ CSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgYm9vbCBmb3JjZSkNCj4gPiArew0KPiA+ICsJ c3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShk YXRhKTsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gaXJxX3NldF9hZmZpbml0 eV9oaW50KHBvcnQtPmlycSwgbWFzayk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiBy ZXQ7DQo+ID4gKw0KPiA+ICsJaXJxX2RhdGFfdXBkYXRlX2VmZmVjdGl2ZV9hZmZpbml0eShkYXRh LCBtYXNrKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIHZvaWQgbXRrX2NvbXBvc2VfbXNpX21zZyhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHN0cnVj dCBtc2lfbXNnICptc2cpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9tc2kgKm1zaV9p bmZvOw0KPiA+ICsJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJx X2NoaXBfZGF0YShkYXRhKTsNCj4gPiArDQo+ID4gKwltc2lfaW5mbyA9IG10a19nZXRfbXNpX2lu Zm8ocG9ydCwgZGF0YS0+aHdpcnEpOw0KPiA+ICsNCj4gPiArCW1zZy0+YWRkcmVzc19oaSA9IDA7 DQo+ID4gKwltc2ctPmFkZHJlc3NfbG8gPSBsb3dlcl8zMl9iaXRzKG1zaV9pbmZvLT5tc2dfYWRk cik7DQo+ID4gKw0KPiA+ICsJbXNnLT5kYXRhID0gZGF0YS0+aHdpcnE7DQo+ID4gKwlkZXZfZGJn KHBvcnQtPmRldiwgIm1zaSMlI2x4IGFkZHJlc3NfaGkgJSN4IGFkZHJlc3NfbG8gJSN4IGRhdGEg JWRcbiIsDQo+ID4gKwkJZGF0YS0+aHdpcnEsIG1zZy0+YWRkcmVzc19oaSwgbXNnLT5hZGRyZXNz X2xvLCBtc2ctPmRhdGEpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfbXNp X2lycV9hY2soc3RydWN0IGlycV9kYXRhICpkYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRr X3BjaWVfbXNpICptc2lfaW5mbzsNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0g aXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGh3 aXJxOw0KPiA+ICsNCj4gPiArCW1zaV9pbmZvID0gbXRrX2dldF9tc2lfaW5mbyhwb3J0LCBkYXRh LT5od2lycSk7DQo+ID4gKw0KPiA+ICsJaHdpcnEgPQlkYXRhLT5od2lycSAlIFBDSUVfTVNJX0lS UVNfUEVSX1NFVDsNCj4gPiArDQo+ID4gKwl3cml0ZWwoMSA8PCBod2lycSwgbXNpX2luZm8tPmJh c2UgKyBQQ0lFX01TSV9TVEFUVVNfT0ZGU0VUKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgbXRrX21zaV9pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpDQo+ID4gK3sNCj4g PiArCXN0cnVjdCBtdGtfcGNpZV9tc2kgKm1zaV9pbmZvOw0KPiA+ICsJc3RydWN0IG10a19wY2ll X3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRhKTsNCj4gPiArCXUz MiB2YWw7DQo+ID4gKw0KPiA+ICsJbXNpX2luZm8gPSBtdGtfZ2V0X21zaV9pbmZvKHBvcnQsIGRh dGEtPmh3aXJxKTsNCj4gPiArCXZhbCA9IHJlYWRsKG1zaV9pbmZvLT5iYXNlICsgUENJRV9NU0lf RU5BQkxFX09GRlNFVCk7DQo+ID4gKwl2YWwgJj0gfigxIDw8IGRhdGEtPmh3aXJxKTsNCj4gPiAr CXdyaXRlbCh2YWwsIG1zaV9pbmZvLT5iYXNlICsgUENJRV9NU0lfRU5BQkxFX09GRlNFVCk7DQo+ ID4gKw0KPiA+ICsJcGNpX21zaV9tYXNrX2lycShkYXRhKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIHZvaWQgbXRrX21zaV9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCj4g PiArew0KPiA+ICsJc3RydWN0IG10a19wY2llX21zaSAqbXNpX2luZm87DQo+ID4gKwlzdHJ1Y3Qg bXRrX3BjaWVfcG9ydCAqcG9ydCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0K PiA+ICsJdTMyIHZhbDsNCj4gPiArDQo+ID4gKwltc2lfaW5mbyA9IG10a19nZXRfbXNpX2luZm8o cG9ydCwgZGF0YS0+aHdpcnEpOw0KPiA+ICsJdmFsID0gcmVhZGwobXNpX2luZm8tPmJhc2UgKyBQ Q0lFX01TSV9FTkFCTEVfT0ZGU0VUKTsNCj4gPiArCXZhbCB8PSAoMSA8PCBkYXRhLT5od2lycSk7 DQo+ID4gKwl3cml0ZWwodmFsLCBtc2lfaW5mby0+YmFzZSArIFBDSUVfTVNJX0VOQUJMRV9PRkZT RVQpOw0KPiA+ICsNCj4gPiArCXBjaV9tc2lfdW5tYXNrX2lycShkYXRhKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtdGtfbXNpX2lycV9jaGlwID0gew0KPiA+ ICsJLmlycV9hY2sJCT0gbXRrX21zaV9pcnFfYWNrLA0KPiA+ICsJLmlycV9jb21wb3NlX21zaV9t c2cJPSBtdGtfY29tcG9zZV9tc2lfbXNnLA0KPiA+ICsJLmlycV9tYXNrCQk9IG10a19tc2lfaXJx X21hc2ssDQo+ID4gKwkuaXJxX3VubWFzawkJPSBtdGtfbXNpX2lycV91bm1hc2ssDQo+ID4gKwku aXJxX3NldF9hZmZpbml0eQk9IG10a19wY2llX3NldF9hZmZpbml0eSwNCj4gPiArCS5uYW1lCQkJ PSAiUENJZSIsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaXJxX2h3X251bWJlcl90IG10 a19wY2llX21zaV9nZXRfaHdpcnEoc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywNCj4gPiAr CQkJCQkgICAgICBtc2lfYWxsb2NfaW5mb190ICphcmcpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBt c2lfZGVzYyAqZW50cnkgPSBhcmctPmRlc2M7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAq cG9ydCA9IGluZm8tPmNoaXBfZGF0YTsNCj4gPiArCWludCBod2lycTsNCj4gPiArDQo+ID4gKwlt dXRleF9sb2NrKCZwb3J0LT5sb2NrKTsNCj4gPiArDQo+ID4gKwlod2lycSA9IGJpdG1hcF9maW5k X2ZyZWVfcmVnaW9uKHBvcnQtPm1zaV9pcnFfaW5fdXNlLCBQQ0lFX01TSV9JUlFTX05VTSwNCj4g PiArCQkJb3JkZXJfYmFzZV8yKGVudHJ5LT5udmVjX3VzZWQpKTsNCj4gPiArCWlmIChod2lycSA8 IDApIHsNCj4gPiArCQltdXRleF91bmxvY2soJnBvcnQtPmxvY2spOw0KPiA+ICsJCXJldHVybiAt RU5PU1BDOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW11dGV4X3VubG9jaygmcG9ydC0+bG9jayk7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGh3aXJxOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg dm9pZCBtdGtfcGNpZV9tc2lfZnJlZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLA0KPiA+ICsJ CQkgICAgICBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgdmlycSkN Cj4gPiArew0KPiA+ICsJc3RydWN0IGlycV9kYXRhICpkYXRhID0gaXJxX2RvbWFpbl9nZXRfaXJx X2RhdGEoZG9tYWluLCB2aXJxKTsNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0g aXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfbG9j aygmcG9ydC0+bG9jayk7DQo+ID4gKw0KPiA+ICsJYml0bWFwX2NsZWFyKHBvcnQtPm1zaV9pcnFf aW5fdXNlLCBkYXRhLT5od2lycSwgMSk7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZwb3J0 LT5sb2NrKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBtc2lfZG9tYWluX29w cyBtdGtfbXNpX2RvbWFpbl9vcHMgPSB7DQo+ID4gKwkuZ2V0X2h3aXJxCT0gbXRrX3BjaWVfbXNp X2dldF9od2lycSwNCj4gPiArCS5tc2lfZnJlZQk9IG10a19wY2llX21zaV9mcmVlLA0KPiA+ICt9 Ow0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBtc2lfZG9tYWluX2luZm8gbXRrX21zaV9kb21h aW5faW5mbyA9IHsNCj4gPiArCS5mbGFncwkJPSAoTVNJX0ZMQUdfVVNFX0RFRl9ET01fT1BTIHwg TVNJX0ZMQUdfUENJX01TSVggfA0KPiA+ICsJCQkgICBNU0lfRkxBR19VU0VfREVGX0NISVBfT1BT IHwgTVNJX0ZMQUdfTVVMVElfUENJX01TSSksDQo+ID4gKwkuY2hpcAkJPSAmbXRrX21zaV9pcnFf Y2hpcCwNCj4gPiArCS5vcHMJCT0gJm10a19tc2lfZG9tYWluX29wcywNCj4gPiArCS5oYW5kbGVy CT0gaGFuZGxlX2VkZ2VfaXJxLA0KPiA+ICsJLmhhbmRsZXJfbmFtZQk9ICJNU0kiLA0KPiA+ICt9 Ow0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbXRrX21zaV90b3BfaXJxX2VvaShzdHJ1Y3QgaXJx X2RhdGEgKmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0g aXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7DQo+ID4gKwl1bnNpZ25lZCBsb25nIG1z aV9pcnEgPSBkYXRhLT5od2lycSArIFBDSUVfTVNJX1NISUZUOw0KPiA+ICsNCj4gPiArCXdyaXRl bCgxIDw8IG1zaV9pcnEsIHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9TVEFUVVNfUkVHKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtdGtfbXNpX3RvcF9pcnFfY2hp cCA9IHsNCj4gPiArCS5pcnFfZW9pCT0gbXRrX21zaV90b3BfaXJxX2VvaSwNCj4gPiArCS5uYW1l CQk9ICJQQ0llIiwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG10a19wY2llX21z aV9oYW5kbGVyKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykNCj4gPiArew0KPiA+ICsJc3RydWN0IG10 a19wY2llX21zaSAqbXNpX2luZm8gPSBpcnFfZGVzY19nZXRfaGFuZGxlcl9kYXRhKGRlc2MpOw0K PiA+ICsJc3RydWN0IGlycV9jaGlwICppcnFjaGlwID0gaXJxX2Rlc2NfZ2V0X2NoaXAoZGVzYyk7 DQo+ID4gKwl1bnNpZ25lZCBsb25nIG1zaV9lbmFibGUsIG1zaV9zdGF0dXM7DQo+ID4gKwl1bnNp Z25lZCBpbnQgdmlycTsNCj4gPiArCWlycV9od19udW1iZXJfdCBiaXQsIGh3aXJxOw0KPiA+ICsN Cj4gPiArCWNoYWluZWRfaXJxX2VudGVyKGlycWNoaXAsIGRlc2MpOw0KPiA+ICsNCj4gPiArCW1z aV9lbmFibGUgPSByZWFkbChtc2lfaW5mby0+YmFzZSArIFBDSUVfTVNJX0VOQUJMRV9PRkZTRVQp Ow0KPiA+ICsJd2hpbGUgKChtc2lfc3RhdHVzID0gcmVhZGwobXNpX2luZm8tPmJhc2UgKyBQQ0lF X01TSV9TVEFUVVNfT0ZGU0VUKSkpIHsNCj4gPiArCQltc2lfc3RhdHVzICY9IG1zaV9lbmFibGU7 DQo+ID4gKwkJZm9yX2VhY2hfc2V0X2JpdChiaXQsICZtc2lfc3RhdHVzLCBQQ0lFX01TSV9JUlFT X1BFUl9TRVQpIHsNCj4gPiArCQkJaHdpcnEgPSBiaXQgKyBtc2lfaW5mby0+aW5kZXggKiBQQ0lF X01TSV9JUlFTX1BFUl9TRVQ7DQo+ID4gKwkJCXZpcnEgPSBpcnFfZmluZF9tYXBwaW5nKG1zaV9p bmZvLT5kb21haW4sIGh3aXJxKTsNCj4gPiArCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOw0K PiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwljaGFpbmVkX2lycV9leGl0KGlycWNoaXAs IGRlc2MpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19tc2lfdG9wX2RvbWFp bl9tYXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwNCj4gPiArCQkJCSAgICB1bnNpZ25lZCBp bnQgdmlycSwgaXJxX2h3X251bWJlcl90IGh3aXJxKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRr X3BjaWVfcG9ydCAqcG9ydCA9IGRvbWFpbi0+aG9zdF9kYXRhOw0KPiA+ICsJc3RydWN0IG10a19w Y2llX21zaSAqbXNpX2luZm8gPSBwb3J0LT5tc2lfaW5mb1tod2lycV07DQo+ID4gKw0KPiA+ICsJ aXJxX2RvbWFpbl9zZXRfaW5mbyhkb21haW4sIHZpcnEsIGh3aXJxLA0KPiA+ICsJCQkgICAgJm10 a19tc2lfdG9wX2lycV9jaGlwLCBkb21haW4tPmhvc3RfZGF0YSwNCj4gPiArCQkJICAgIG10a19w Y2llX21zaV9oYW5kbGVyLCBtc2lfaW5mbywgTlVMTCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMg bXRrX21zaV90b3BfZG9tYWluX29wcyA9IHsNCj4gPiArCS5tYXAgPSBtdGtfbXNpX3RvcF9kb21h aW5fbWFwLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbXRrX2ludHhfbWFzayhz dHJ1Y3QgaXJxX2RhdGEgKmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9wb3J0 ICpwb3J0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7DQo+ID4gKwl1MzIgdmFs Ow0KPiA+ICsNCj4gPiArCXZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9FTkFCTEVf UkVHKTsNCj4gPiArCXZhbCAmPSB+KDEgPDwgKGRhdGEtPmh3aXJxICsgUENJRV9JTlRYX1NISUZU KSk7DQo+ID4gKwl3cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG10a19pbnR4X3VubWFzayhzdHJ1Y3Qg aXJxX2RhdGEgKmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0 ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7DQo+ID4gKwl1MzIgdmFsOw0KPiA+ ICsNCj4gPiArCXZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9FTkFCTEVfUkVHKTsN Cj4gPiArCXZhbCB8PSAxIDw8IChkYXRhLT5od2lycSArIFBDSUVfSU5UWF9TSElGVCk7DQo+ID4g Kwl3cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG10a19pbnR4X2VvaShzdHJ1Y3QgaXJxX2RhdGEgKmRh dGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFf Z2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGh3aXJxOw0KPiA+ ICsNCj4gPiArCS8qKg0KPiA+ICsJICogQXMgYW4gZW11bGF0ZWQgbGV2ZWwgaXJxLCBpdHMgaW50 ZXJydXB0IHN0YXR1cyB3aWxsIGJlIHJlbWFpbmVkDQo+ID4gKwkgKiB1bnRpbCByZWNlaXZlIHRo ZSBjb3JyZXNwb25kaW5nIG1lc3NhZ2Ugb2YgZGUtYXNzZXJ0LCBoZW5jZSB0aGF0DQo+ID4gKwkg KiB0aGUgc3RhdHVzIGNhbiBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgaW50ZXJydXB0IGhhcyBi ZWVuIHNlcnZpY2VkLg0KPiANCj4gcy9pcnEvSVJRLw0KPiANCj4gICBBcyBhbiBlbXVsYXRlZCBs ZXZlbCBJUlEsIGl0cyBpbnRlcnJ1cHQgc3RhdHVzIHdpbGwgcmVtYWluIHVudGlsIHRoZQ0KPiAg IGNvcnJlc3BvbmRpbmcgZGUtYXNzZXJ0IG1lc3NhZ2UgaXMgcmVjZWl2ZWQ7IGhlbmNlIHRoYXQg Li4uDQo+IA0KPiA+ICsJICovDQo+ID4gKwlod2lycSA9IGRhdGEtPmh3aXJxICsgUENJRV9JTlRY X1NISUZUOw0KPiA+ICsJd3JpdGVsKDEgPDwgaHdpcnEsIHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9T VEFUVVNfUkVHKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBt dGtfaW50eF9pcnFfY2hpcCA9IHsNCj4gPiArCS5pcnFfbWFzawkJPSBtdGtfaW50eF9tYXNrLA0K PiA+ICsJLmlycV91bm1hc2sJCT0gbXRrX2ludHhfdW5tYXNrLA0KPiA+ICsJLmlycV9lb2kJCT0g bXRrX2ludHhfZW9pLA0KPiA+ICsJLmlycV9zZXRfYWZmaW5pdHkJPSBtdGtfcGNpZV9zZXRfYWZm aW5pdHksDQo+ID4gKwkubmFtZQkJCT0gIlBDSWUiLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBtdGtfcGNpZV9pbnR4X21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNp Z25lZCBpbnQgaXJxLA0KPiA+ICsJCQkgICAgIGlycV9od19udW1iZXJfdCBod2lycSkNCj4gPiAr ew0KPiA+ICsJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmbXRrX2ludHhfaXJx X2NoaXAsDQo+ID4gKwkJCQkgICAgICBoYW5kbGVfZmFzdGVvaV9pcnEsICJJTlR4Iik7DQo+ID4g KwlpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGRvbWFpbi0+aG9zdF9kYXRhKTsNCj4gPiArDQo+ID4g KwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFf ZG9tYWluX29wcyBpbnR4X2RvbWFpbl9vcHMgPSB7DQo+ID4gKwkubWFwID0gbXRrX3BjaWVfaW50 eF9tYXAsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19wY2llX2luaXRfaXJx X2RvbWFpbnMoc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQsDQo+ID4gKwkJCQkgICAgIHN0cnVj dCBkZXZpY2Vfbm9kZSAqbm9kZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0g cG9ydC0+ZGV2Ow0KPiA+ICsJc3RydWN0IGRldmljZV9ub2RlICppbnRjX25vZGU7DQo+ID4gKwlz dHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlID0gb2Zfbm9kZV90b19md25vZGUobm9kZSk7DQo+ ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfbXNpICptc2lfaW5mbzsNCj4gPiArCXN0cnVjdCBtc2lfZG9t YWluX2luZm8gKmluZm87DQo+ID4gKwlpbnQgaSwgcmV0Ow0KPiA+ICsNCj4gPiArCS8qIFNldHVw IElOVHggKi8NCj4gPiArCWludGNfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5vZGUsICJp bnRlcnJ1cHQtY29udHJvbGxlciIpOw0KPiA+ICsJaWYgKCFpbnRjX25vZGUpIHsNCj4gPiArCQlk ZXZfbm90aWNlKGRldiwgIk1pc3NpbmcgUENJZSBJbnRjIG5vZGVcbiIpOw0KPiANCj4gcy9NaXNz aW5nL21pc3NpbmcvIHRvIG1hdGNoIG90aGVyIG1lc3NhZ2VzLg0KPiANCj4gPiArCQlyZXR1cm4g LUVOT0RFVjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlwb3J0LT5pbnR4X2RvbWFpbiA9IGlycV9k b21haW5fYWRkX2xpbmVhcihpbnRjX25vZGUsIFBDSV9OVU1fSU5UWCwNCj4gPiArCQkJCQkJICAm aW50eF9kb21haW5fb3BzLCBwb3J0KTsNCj4gPiArCWlmICghcG9ydC0+aW50eF9kb21haW4pIHsN Cj4gPiArCQlkZXZfbm90aWNlKGRldiwgImZhaWxlZCB0byBnZXQgSU5UeCBJUlEgZG9tYWluXG4i KTsNCj4gPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBTZXR1 cCBNU0kgKi8NCj4gPiArCW11dGV4X2luaXQoJnBvcnQtPmxvY2spOw0KPiA+ICsNCj4gPiArCWlu Zm8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsNCj4gPiAr CWlmICghaW5mbykNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwltZW1jcHko aW5mbywgJm10a19tc2lfZG9tYWluX2luZm8sIHNpemVvZigqaW5mbykpOw0KPiA+ICsJaW5mby0+ Y2hpcF9kYXRhID0gcG9ydDsNCj4gPiArDQo+ID4gKwlwb3J0LT5tc2lfZG9tYWluID0gcGNpX21z aV9jcmVhdGVfaXJxX2RvbWFpbihmd25vZGUsIGluZm8sIE5VTEwpOw0KPiA+ICsJaWYgKCFwb3J0 LT5tc2lfZG9tYWluKSB7DQo+ID4gKwkJZGV2X2luZm8oZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBt c2kgZG9tYWluXG4iKTsNCj4gDQo+IHMvbXNpL01TSS8NCj4gDQo+ID4gKwkJcmV0ID0gLUVOT0RF VjsNCj4gPiArCQlnb3RvIGVycl9tc2lfZG9tYWluOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8q IEVuYWJsZSBNU0kgYW5kIHNldHVwIHBjaWUgZG9tYWlucyAqLw0KPiANCj4gcy9wY2llL1BDSWUv DQo+IA0KPiA+ICsJcG9ydC0+bXNpX3RvcF9kb21haW4gPSBpcnFfZG9tYWluX2FkZF9oaWVyYXJj aHkoTlVMTCwgMCwgMCwgbm9kZSwNCj4gPiArCQkJCQkJCSZtdGtfbXNpX3RvcF9kb21haW5fb3Bz LA0KPiA+ICsJCQkJCQkJcG9ydCk7DQo+ID4gKwlpZiAoIXBvcnQtPm1zaV90b3BfZG9tYWluKSB7 DQo+ID4gKwkJZGV2X2luZm8oZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBtc2kgdG9wIGRvbWFpblxu Iik7DQo+IA0KPiBzL21zaS9NU0kvDQo+IA0KPiA+ICsJCXJldCA9IC1FTk9ERVY7DQo+ID4gKwkJ Z290byBlcnJfbXNpX3RvcF9kb21haW47DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcG9ydC0+bXNp X2luZm8gPSBkZXZtX2t6YWxsb2MoZGV2LCBQQ0lFX01TSV9TRVRfTlVNLCBHRlBfS0VSTkVMKTsN Cj4gPiArCWlmICghcG9ydC0+bXNpX2luZm8pIHsNCj4gPiArCQlyZXQgPSAtRU5PTUVNOw0KPiA+ ICsJCWdvdG8gZXJyX21zaV9pbmZvOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7 IGkgPCBQQ0lFX01TSV9TRVRfTlVNOyBpKyspIHsNCj4gPiArCQlpbnQgb2Zmc2V0ID0gaSAqIFBD SUVfTVNJX1NFVF9PRkZTRVQ7DQo+ID4gKwkJdTMyIHZhbDsNCj4gPiArDQo+ID4gKwkJbXNpX2lu Zm8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1zaV9pbmZvKSwgR0ZQX0tFUk5FTCk7DQo+ ID4gKwkJaWYgKCFtc2lfaW5mbykgew0KPiA+ICsJCQlyZXQgPSAtRU5PTUVNOw0KPiA+ICsJCQln b3RvIGVycl9tc2lfc2V0Ow0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJbXNpX2luZm8tPmJhc2Ug PSBwb3J0LT5iYXNlICsgUENJRV9NU0lfQUREUl9CQVNFX1JFRyArIG9mZnNldDsNCj4gPiArCQlt c2lfaW5mby0+bXNnX2FkZHIgPSBwb3J0LT5yZWdfYmFzZSArIFBDSUVfTVNJX0FERFJfQkFTRV9S RUcgKw0KPiA+ICsJCQkJICAgICBvZmZzZXQ7DQo+ID4gKw0KPiA+ICsJCXdyaXRlbChsb3dlcl8z Ml9iaXRzKG1zaV9pbmZvLT5tc2dfYWRkciksIG1zaV9pbmZvLT5iYXNlKTsNCj4gPiArDQo+ID4g KwkJbXNpX2luZm8tPmluZGV4ID0gaTsNCj4gPiArCQltc2lfaW5mby0+ZG9tYWluID0gcG9ydC0+ bXNpX2RvbWFpbjsNCj4gPiArDQo+ID4gKwkJcG9ydC0+bXNpX2luZm9baV0gPSBtc2lfaW5mbzsN Cj4gPiArDQo+ID4gKwkJLyogQWxsb2MgaXJxIGZvciBlYWNoIG1zaSBzZXQgKi8NCj4gDQo+IHMv aXJxL0lSUS8NCj4gcy9tc2kvTVNJLw0KPiANCj4gPiArCQltc2lfaW5mby0+aXJxID0gaXJxX2Ny ZWF0ZV9tYXBwaW5nKHBvcnQtPm1zaV90b3BfZG9tYWluLCBpKTsNCj4gPiArCQlpZiAoIW1zaV9p bmZvLT5pcnEpIHsNCj4gPiArCQkJZGV2X2luZm8oZGV2LCAiYWxsb2NhdGUgbXNpIHRvcCBpcnEg ZmFpbGVkXG4iKTsNCj4gDQo+IHMvaXJxL0lSUS8NCj4gcy9tc2kvTVNJLw0KPiANCj4gPiArCQkJ cmV0ID0gLUVOT1NQQzsNCj4gPiArCQkJZ290byBlcnJfbXNpX3NldDsNCj4gPiArCQl9DQo+ID4g Kw0KPiA+ICsJCXZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9FTkFCTEVfUkVHKTsN Cj4gPiArCQl2YWwgfD0gKDEgPDwgKGkgKyBQQ0lFX01TSV9TSElGVCkpOw0KPiA+ICsJCXdyaXRl bCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9FTkFCTEVfUkVHKTsNCj4gPiArDQo+ID4gKwkJ dmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBDSUVfTVNJX1NFVF9FTkFCTEVfUkVHKTsNCj4gPiAr CQl2YWwgfD0gKDEgPDwgaSk7DQo+ID4gKwkJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVf TVNJX1NFVF9FTkFCTEVfUkVHKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArDQo+ID4gK2Vycl9tc2lfc2V0Og0KPiA+ICsJd2hpbGUgKC0taSA+PSAwKSB7DQo+IA0KPiAo aS0tID4gMCkgd291bGQgYmUgbW9yZSBpZGlvbWF0aWMuDQo+IA0KPiA+ICsJCW1zaV9pbmZvID0g cG9ydC0+bXNpX2luZm9baV07DQo+ID4gKwkJaXJxX2Rpc3Bvc2VfbWFwcGluZyhtc2lfaW5mby0+ aXJxKTsNCj4gPiArCX0NCj4gPiArZXJyX21zaV9pbmZvOg0KPiA+ICsJaXJxX2RvbWFpbl9yZW1v dmUocG9ydC0+bXNpX3RvcF9kb21haW4pOw0KPiA+ICtlcnJfbXNpX3RvcF9kb21haW46DQo+ID4g KwlpcnFfZG9tYWluX3JlbW92ZShwb3J0LT5tc2lfZG9tYWluKTsNCj4gPiArZXJyX21zaV9kb21h aW46DQo+ID4gKwlpcnFfZG9tYWluX3JlbW92ZShwb3J0LT5pbnR4X2RvbWFpbik7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbXRrX3Bj aWVfaXJxX3RlYXJkb3duKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQ0KPiA+ICt7DQo+ID4g KwlzdHJ1Y3QgbXRrX3BjaWVfbXNpICptc2lfaW5mbzsNCj4gPiArCWludCBpOw0KPiA+ICsNCj4g PiArCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyX2FuZF9kYXRhKHBvcnQtPmlycSwgTlVMTCwgTlVM TCk7DQo+ID4gKw0KPiA+ICsJaWYgKHBvcnQtPmludHhfZG9tYWluKQ0KPiA+ICsJCWlycV9kb21h aW5fcmVtb3ZlKHBvcnQtPmludHhfZG9tYWluKTsNCj4gPiArDQo+ID4gKwlpZiAocG9ydC0+bXNp X2RvbWFpbikNCj4gPiArCQlpcnFfZG9tYWluX3JlbW92ZShwb3J0LT5tc2lfZG9tYWluKTsNCj4g PiArDQo+ID4gKwlpZiAocG9ydC0+bXNpX3RvcF9kb21haW4pIHsNCj4gPiArCQlmb3IgKGkgPSAw OyBpIDwgUENJRV9NU0lfU0VUX05VTTsgaSsrKSB7DQo+ID4gKwkJCW1zaV9pbmZvID0gcG9ydC0+ bXNpX2luZm9baV07DQo+ID4gKwkJCWlycV9kaXNwb3NlX21hcHBpbmcobXNpX2luZm8tPmlycSk7 DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlpcnFfZG9tYWluX3JlbW92ZShwb3J0LT5tc2lfdG9w X2RvbWFpbik7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaXJxX2Rpc3Bvc2VfbWFwcGluZyhwb3J0 LT5pcnEpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfcGNpZV9pcnFfaGFu ZGxlcihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGNp ZV9wb3J0ICpwb3J0ID0gaXJxX2Rlc2NfZ2V0X2hhbmRsZXJfZGF0YShkZXNjKTsNCj4gPiArCXN0 cnVjdCBpcnFfY2hpcCAqaXJxY2hpcCA9IGlycV9kZXNjX2dldF9jaGlwKGRlc2MpOw0KPiA+ICsJ dW5zaWduZWQgbG9uZyBzdGF0dXM7DQo+ID4gKwl1bnNpZ25lZCBpbnQgdmlycTsNCj4gPiArCWly cV9od19udW1iZXJfdCBpcnFfYml0ID0gUENJRV9JTlRYX1NISUZUOw0KPiA+ICsNCj4gPiArCWNo YWluZWRfaXJxX2VudGVyKGlycWNoaXAsIGRlc2MpOw0KPiA+ICsNCj4gPiArCXN0YXR1cyA9IHJl YWRsKHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9TVEFUVVNfUkVHKTsNCj4gPiArCWlmIChzdGF0dXMg JiBQQ0lFX0lOVFhfTUFTSykgew0KPiA+ICsJCWZvcl9lYWNoX3NldF9iaXRfZnJvbShpcnFfYml0 LCAmc3RhdHVzLCBQQ0lfTlVNX0lOVFggKw0KPiA+ICsJCQkJICAgICAgUENJRV9JTlRYX1NISUZU KSB7DQo+ID4gKwkJCXZpcnEgPSBpcnFfZmluZF9tYXBwaW5nKHBvcnQtPmludHhfZG9tYWluLA0K PiA+ICsJCQkJCQlpcnFfYml0IC0gUENJRV9JTlRYX1NISUZUKTsNCj4gPiArCQkJZ2VuZXJpY19o YW5kbGVfaXJxKHZpcnEpOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoc3Rh dHVzICYgUENJRV9NU0lfTUFTSykgew0KPiA+ICsJCWlycV9iaXQgPSBQQ0lFX01TSV9TSElGVDsN Cj4gPiArCQlmb3JfZWFjaF9zZXRfYml0X2Zyb20oaXJxX2JpdCwgJnN0YXR1cywgUENJRV9NU0lf U0VUX05VTSArDQo+ID4gKwkJCQkgICAgICBQQ0lFX01TSV9TSElGVCkgew0KPiA+ICsJCQl2aXJx ID0gaXJxX2ZpbmRfbWFwcGluZyhwb3J0LT5tc2lfdG9wX2RvbWFpbiwNCj4gPiArCQkJCQkJaXJx X2JpdCAtIFBDSUVfTVNJX1NISUZUKTsNCj4gPiArCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEp Ow0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwljaGFpbmVkX2lycV9leGl0KGlycWNo aXAsIGRlc2MpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19wY2llX3NldHVw X2lycShzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCwNCj4gPiArCQkJICAgICAgc3RydWN0IGRl dmljZV9ub2RlICpub2RlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwb3J0 LT5kZXY7DQo+ID4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1f ZGV2aWNlKGRldik7DQo+ID4gKwlpbnQgZXJyOw0KPiA+ICsNCj4gPiArCWVyciA9IG10a19wY2ll X2luaXRfaXJxX2RvbWFpbnMocG9ydCwgbm9kZSk7DQo+ID4gKwlpZiAoZXJyKSB7DQo+ID4gKwkJ ZGV2X25vdGljZShkZXYsICJmYWlsZWQgdG8gaW5pdCBQQ0llIElSUSBkb21haW5cbiIpOw0KPiA+ ICsJCXJldHVybiBlcnI7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcG9ydC0+aXJxID0gcGxhdGZv cm1fZ2V0X2lycShwZGV2LCAwKTsNCj4gPiArCWlmIChwb3J0LT5pcnEgPCAwKQ0KPiA+ICsJCXJl dHVybiBwb3J0LT5pcnE7DQo+ID4gKw0KPiA+ICsJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXJfYW5k X2RhdGEocG9ydC0+aXJxLCBtdGtfcGNpZV9pcnFfaGFuZGxlciwgcG9ydCk7DQo+ID4gKw0KPiA+ ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXRrX3BjaWVfY2xr X2luaXQoc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQpDQo+ID4gK3sNCj4gPiArCWludCByZXQ7 DQo+ID4gKw0KPiA+ICsJcG9ydC0+bnVtX2Nsa3MgPSBkZXZtX2Nsa19idWxrX2dldF9hbGwocG9y dC0+ZGV2LCAmcG9ydC0+Y2xrcyk7DQo+ID4gKwlpZiAocG9ydC0+bnVtX2Nsa3MgPCAwKSB7DQo+ ID4gKwkJZGV2X25vdGljZShwb3J0LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHBjaWUgY2xvY2tcbiIp Ow0KPiANCj4gcy9wY2llL1BDSWUvDQo+IA0KPiA+ICsJCXJldHVybiBwb3J0LT5udW1fY2xrczsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSBjbGtfYnVsa19wcmVwYXJlX2VuYWJsZShwb3J0 LT5udW1fY2xrcywgcG9ydC0+Y2xrcyk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X25v dGljZShwb3J0LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIHBjaWUgY2xvY2tzXG4iKTsNCj4gDQo+ IHMvcGNpZS9QQ0llLw0KPiANCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19wY2llX3Bv d2VyX3VwKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSBwb3J0LT5kZXY7DQo+ID4gKwlpbnQgZXJyOw0KPiA+ICsNCj4gPiArCXBv cnQtPnBoeV9yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfb3B0aW9uYWxfZXhjbHVzaXZl KGRldiwgInBoeSIpOw0KPiA+ICsJaWYgKElTX0VSUihwb3J0LT5waHlfcmVzZXQpKQ0KPiA+ICsJ CXJldHVybiBQVFJfRVJSKHBvcnQtPnBoeV9yZXNldCk7DQo+ID4gKw0KPiA+ICsJLyogUEhZIHBv d2VyIG9uIGFuZCBlbmFibGUgcGlwZSBjbG9jayAqLw0KPiA+ICsJcG9ydC0+cGh5ID0gZGV2bV9w aHlfb3B0aW9uYWxfZ2V0KGRldiwgInBjaWUtcGh5Iik7DQo+ID4gKwlpZiAoSVNfRVJSKHBvcnQt PnBoeSkpDQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIocG9ydC0+cGh5KTsNCj4gPiArDQo+ID4gKwly ZXNldF9jb250cm9sX2RlYXNzZXJ0KHBvcnQtPnBoeV9yZXNldCk7DQo+ID4gKw0KPiA+ICsJZXJy ID0gcGh5X3Bvd2VyX29uKHBvcnQtPnBoeSk7DQo+ID4gKwlpZiAoZXJyKSB7DQo+ID4gKwkJZGV2 X25vdGljZShkZXYsICJmYWlsZWQgdG8gcG93ZXIgb24gcGNpZSBwaHlcbiIpOw0KPiANCj4gcy9w Y2llL1BDSWUvDQo+IA0KPiA+ICsJCWdvdG8gZXJyX3BoeV9vbjsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwllcnIgPSBwaHlfaW5pdChwb3J0LT5waHkpOw0KPiA+ICsJaWYgKGVycikgew0KPiA+ICsJ CWRldl9ub3RpY2UoZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgcGNpZSBwaHlcbiIpOw0KPiAN Cj4gcy9wY2llL1BDSWUvDQo+IA0KPiA+ICsJCWdvdG8gZXJyX3BoeV9pbml0Ow0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCXBvcnQtPm1hY19yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfb3B0 aW9uYWxfZXhjbHVzaXZlKGRldiwgIm1hYyIpOw0KPiA+ICsJaWYgKElTX0VSUihwb3J0LT5tYWNf cmVzZXQpKSB7DQo+ID4gKwkJZXJyID0gUFRSX0VSUihwb3J0LT5tYWNfcmVzZXQpOw0KPiA+ICsJ CWdvdG8gZXJyX21hY19yc3Q7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmVzZXRfY29udHJvbF9k ZWFzc2VydChwb3J0LT5tYWNfcmVzZXQpOw0KPiA+ICsNCj4gPiArCS8qIE1BQyBwb3dlciBvbiBh bmQgZW5hYmxlIHRyYW5zYWN0aW9uIGxheWVyIGNsb2NrcyAqLw0KPiA+ICsJcG1fcnVudGltZV9l bmFibGUoZGV2KTsNCj4gPiArCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsNCj4gPiArDQo+ID4g KwllcnIgPSBtdGtfcGNpZV9jbGtfaW5pdChwb3J0KTsNCj4gPiArCWlmIChlcnIpIHsNCj4gPiAr CQlkZXZfbm90aWNlKGRldiwgImNsb2NrIGluaXQgZmFpbGVkXG4iKTsNCj4gPiArCQlnb3RvIGVy cl9jbGtfaW5pdDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArDQo+ID4g K2Vycl9jbGtfaW5pdDoNCj4gPiArCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsNCj4gPiArCXBt X3J1bnRpbWVfZGlzYWJsZShkZXYpOw0KPiA+ICsJcmVzZXRfY29udHJvbF9hc3NlcnQocG9ydC0+ bWFjX3Jlc2V0KTsNCj4gPiArZXJyX21hY19yc3Q6DQo+ID4gKwlwaHlfZXhpdChwb3J0LT5waHkp Ow0KPiA+ICtlcnJfcGh5X2luaXQ6DQo+ID4gKwlwaHlfcG93ZXJfb2ZmKHBvcnQtPnBoeSk7DQo+ ID4gK2Vycl9waHlfb246DQo+ID4gKwlyZXNldF9jb250cm9sX2Fzc2VydChwb3J0LT5waHlfcmVz ZXQpOw0KPiA+ICsNCj4gPiArCXJldHVybiBlcnI7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyB2b2lkIG10a19wY2llX3Bvd2VyX2Rvd24oc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQpDQo+ ID4gK3sNCj4gPiArCWNsa19idWxrX2Rpc2FibGVfdW5wcmVwYXJlKHBvcnQtPm51bV9jbGtzLCBw b3J0LT5jbGtzKTsNCj4gPiArDQo+ID4gKwlwbV9ydW50aW1lX3B1dF9zeW5jKHBvcnQtPmRldik7 DQo+ID4gKwlwbV9ydW50aW1lX2Rpc2FibGUocG9ydC0+ZGV2KTsNCj4gPiArCXJlc2V0X2NvbnRy b2xfYXNzZXJ0KHBvcnQtPm1hY19yZXNldCk7DQo+ID4gKw0KPiA+ICsJcGh5X3Bvd2VyX29mZihw b3J0LT5waHkpOw0KPiA+ICsJcGh5X2V4aXQocG9ydC0+cGh5KTsNCj4gPiArCXJlc2V0X2NvbnRy b2xfYXNzZXJ0KHBvcnQtPnBoeV9yZXNldCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQgbXRrX3BjaWVfc2V0dXAoc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQpDQo+ID4gK3sNCj4g PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBvcnQtPmRldjsNCj4gPiArCXN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsNCj4gPiArCXN0cnVjdCBy ZXNvdXJjZSAqcmVnczsNCj4gPiArCWludCBlcnI7DQo+ID4gKw0KPiA+ICsJcmVncyA9IHBsYXRm b3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwY2llLW1hYyIp Ow0KPiA+ICsJcG9ydC0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlZ3MpOw0K PiA+ICsJaWYgKElTX0VSUihwb3J0LT5iYXNlKSkgew0KPiA+ICsJCWRldl9ub3RpY2UoZGV2LCAi ZmFpbGVkIHRvIG1hcCByZWdpc3RlciBiYXNlXG4iKTsNCj4gPiArCQlyZXR1cm4gUFRSX0VSUihw b3J0LT5iYXNlKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlwb3J0LT5yZWdfYmFzZSA9IHJlZ3Mt PnN0YXJ0Ow0KPiA+ICsNCj4gPiArCS8qIERvbid0IHRvdWNoIHRoZSBoYXJkd2FyZSByZWdpc3Rl cnMgYmVmb3JlIHBvd2VyIHVwICovDQo+ID4gKwllcnIgPSBtdGtfcGNpZV9wb3dlcl91cChwb3J0 KTsNCj4gPiArCWlmIChlcnIpDQo+ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArDQo+ID4gKwkvKiBU cnkgbGluayB1cCAqLw0KPiA+ICsJZXJyID0gbXRrX3BjaWVfc3RhcnR1cF9wb3J0KHBvcnQpOw0K PiA+ICsJaWYgKGVycikgew0KPiA+ICsJCWRldl9ub3RpY2UoZGV2LCAiUENJZSBsaW5rIGRvd25c biIpOw0KPiA+ICsJCWdvdG8gZXJyX3NldHVwOw0KPiANCj4gR2VuZXJhbGx5IGl0IHNob3VsZCBu b3QgYmUgYSBmYXRhbCBlcnJvciBpZiB0aGUgbGluayBpcyBub3QgdXAgYXQNCj4gcHJvYmUtdGlt ZS4gIFlvdSBtYXkgYmUgYWJsZSB0byBob3QtYWRkIGEgZGV2aWNlLCBvciB0aGUgZGV2aWNlIG1h eQ0KPiBoYXZlIHNvbWUgZXh0ZXJuYWwgcG93ZXIgY29udHJvbCB0aGF0IHdpbGwgcG93ZXIgaXQg dXAgbGF0ZXIuDQoNClRoaXMgaXMgZm9yIHRoZSBwb3dlciBzYXZpbmcgcmVxdWlyZW1lbnQuIElm IHRoZXJlIGlzIG5vIGRldmljZQ0KY29ubmVjdGVkIHdpdGggdGhlIFBDSWUgc2xvdCwgdGhlIFBD SWUgTUFDIGFuZCBQSFkgc2hvdWxkIGJlIHBvd2VyZWQNCm9mZi4NCg0KSXMgdGhlcmUgYW55IHN0 YW5kYXJkIGZsb3cgdG8gc3VwcG9ydCBwb3dlciBkb3duIHRoZSBoYXJkd2FyZSBhdA0KcHJvYmUt dGltZSBpZiBubyBkZXZpY2UgaXMgY29ubmVjdGVkIGFuZCBwb3dlciBpdCB1cCB3aGVuIGhvdC1h ZGQgYQ0KZGV2aWNlPw0KDQpUaGFua3MuDQogDQo+IA0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWVy ciA9IG10a19wY2llX3NldHVwX2lycShwb3J0LCBkZXYtPm9mX25vZGUpOw0KPiA+ICsJaWYgKGVy cikNCj4gPiArCQlnb3RvIGVycl9zZXR1cDsNCj4gPiArDQo+ID4gKwlkZXZfaW5mbyhkZXYsICJQ Q0llIGxpbmsgdXAgc3VjY2VzcyFcbiIpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICsN Cj4gPiArZXJyX3NldHVwOg0KPiA+ICsJbXRrX3BjaWVfcG93ZXJfZG93bihwb3J0KTsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gZXJyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19w Y2llX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gK3sNCj4gPiArCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9y dCAqcG9ydDsNCj4gPiArCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmhvc3Q7DQo+ID4gKwlpbnQg ZXJyOw0KPiA+ICsNCj4gPiArCWhvc3QgPSBkZXZtX3BjaV9hbGxvY19ob3N0X2JyaWRnZShkZXYs IHNpemVvZigqcG9ydCkpOw0KPiA+ICsJaWYgKCFob3N0KQ0KPiA+ICsJCXJldHVybiAtRU5PTUVN Ow0KPiA+ICsNCj4gPiArCXBvcnQgPSBwY2lfaG9zdF9icmlkZ2VfcHJpdihob3N0KTsNCj4gPiAr DQo+ID4gKwlwb3J0LT5kZXYgPSBkZXY7DQo+ID4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2 LCBwb3J0KTsNCj4gPiArDQo+ID4gKwllcnIgPSBtdGtfcGNpZV9zZXR1cChwb3J0KTsNCj4gPiAr CWlmIChlcnIpDQo+ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArDQo+ID4gKwlob3N0LT5vcHMgPSAm bXRrX3BjaWVfb3BzOw0KPiA+ICsJaG9zdC0+c3lzZGF0YSA9IHBvcnQ7DQo+ID4gKw0KPiA+ICsJ ZXJyID0gcGNpX2hvc3RfcHJvYmUoaG9zdCk7DQo+ID4gKwlpZiAoZXJyKSB7DQo+ID4gKwkJbXRr X3BjaWVfcG93ZXJfZG93bihwb3J0KTsNCj4gPiArCQlyZXR1cm4gZXJyOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19w Y2llX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICt7DQo+ID4gKwlz dHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0K PiA+ICsJc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAqaG9zdCA9IHBjaV9ob3N0X2JyaWRnZV9mcm9t X3ByaXYocG9ydCk7DQo+ID4gKw0KPiA+ICsJcGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpOw0KPiA+ ICsJcGNpX3N0b3Bfcm9vdF9idXMoaG9zdC0+YnVzKTsNCj4gPiArCXBjaV9yZW1vdmVfcm9vdF9i dXMoaG9zdC0+YnVzKTsNCj4gPiArCXBjaV91bmxvY2tfcmVzY2FuX3JlbW92ZSgpOw0KPiA+ICsN Cj4gPiArCW10a19wY2llX2lycV90ZWFyZG93bihwb3J0KTsNCj4gPiArCW10a19wY2llX3Bvd2Vy X2Rvd24ocG9ydCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgbXRrX3BjaWVfdHVybl9vZmZfbGluayhzdHJ1Y3Qg bXRrX3BjaWVfcG9ydCAqcG9ydCkNCj4gPiArew0KPiA+ICsJdTMyIHZhbDsNCj4gPiArDQo+ID4g Kwl2YWwgPSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9JQ01EX1BNX1JFRyk7DQo+ID4gKwl2YWwg fD0gUENJRV9UVVJOX09GRl9MSU5LOw0KPiA+ICsJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBD SUVfSUNNRF9QTV9SRUcpOw0KPiA+ICsNCj4gPiArCS8qIENoZWNrIHRoZSBsaW5rIGlzIEwyICov DQo+ID4gKwlyZXR1cm4gcmVhZGxfcG9sbF90aW1lb3V0KHBvcnQtPmJhc2UgKyBQQ0lFX0xUU1NN X1NUQVRVU19SRUcsIHZhbCwNCj4gPiArCQkJCSAgKFBDSUVfTFRTU01fU1RBVEUodmFsKSA9PQ0K PiA+ICsJCQkJICAgUENJRV9MVFNTTV9TVEFURV9MMl9JRExFKSwgMjAsDQo+ID4gKwkJCQkgICA1 MCAqIFVTRUNfUEVSX01TRUMpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IF9fbWF5 YmVfdW51c2VkIG10a19wY2llX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOw0KPiA+ICsJaW50IGVycjsNCj4gPiArCXUzMiB2YWw7DQo+ID4gKw0KPiA+ICsJaWYgKHBv cnQtPmlzX3N1c3BlbmRlZCkNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+ID4gKwkvKiBUcmln Z2VyIGxpbmsgdG8gTDIgc3RhdGUgKi8NCj4gPiArCWVyciA9IG10a19wY2llX3R1cm5fb2ZmX2xp bmsocG9ydCk7DQo+ID4gKwlpZiAoZXJyKSB7DQo+ID4gKwkJZGV2X25vdGljZShwb3J0LT5kZXYs ICJjYW4gbm90IGVudGVyIEwyIHN0YXRlXG4iKTsNCj4gPiArCQlnb3RvIHBvd2VyX29mZjsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwkvKiBQdWxsIGRvd24gdGhlIFBFUlNUIyBwaW4gKi8NCj4gPiAr CXZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lFX1JTVF9DVFJMX1JFRyk7DQo+ID4gKwl2YWwg fD0gUENJRV9QRV9SU1RCOw0KPiA+ICsJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfUlNU X0NUUkxfUkVHKTsNCj4gPiArDQo+ID4gKwlkZXZfaW5mbyhwb3J0LT5kZXYsICJlbnRlciBMMiBz dGF0ZSBzdWNjZXNzIik7DQo+ID4gKw0KPiA+ICtwb3dlcl9vZmY6DQo+ID4gKwljbGtfYnVsa19k aXNhYmxlX3VucHJlcGFyZShwb3J0LT5udW1fY2xrcywgcG9ydC0+Y2xrcyk7DQo+ID4gKw0KPiA+ ICsJcGh5X3Bvd2VyX29mZihwb3J0LT5waHkpOw0KPiA+ICsNCj4gPiArCXBvcnQtPmlzX3N1c3Bl bmRlZCA9IHRydWU7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgbXRrX3BjaWVfcmVzdW1lX25vaXJxKHN0cnVjdCBk ZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArCWludCBlcnI7DQo+ID4gKw0KPiA+ICsJaWYgKCFw b3J0LT5pc19zdXNwZW5kZWQpDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsJcGh5X3Bv d2VyX29uKHBvcnQtPnBoeSk7DQo+ID4gKw0KPiA+ICsJZXJyID0gY2xrX2J1bGtfcHJlcGFyZV9l bmFibGUocG9ydC0+bnVtX2Nsa3MsIHBvcnQtPmNsa3MpOw0KPiA+ICsJaWYgKGVycikgew0KPiA+ ICsJCWRldl9kYmcoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBwY2llIGNsb2Nrc1xuIik7DQo+IA0K PiBzL3BjaWUvUENJZS8NCj4gDQo+ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwllcnIgPSBtdGtfcGNpZV9zdGFydHVwX3BvcnQocG9ydCk7DQo+ID4gKwlpZiAoZXJyKSB7 DQo+ID4gKwkJZGV2X25vdGljZShwb3J0LT5kZXYsICJyZXN1bWUgZmFpbGVkXG4iKTsNCj4gPiAr CQlyZXR1cm4gZXJyOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXBvcnQtPmlzX3N1c3BlbmRlZCA9 IGZhbHNlOw0KPiA+ICsNCj4gPiArCWRldl9pbmZvKHBvcnQtPmRldiwgInJlc3VtZSBkb25lXG4i KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNv bnN0IHN0cnVjdCBkZXZfcG1fb3BzIG10a19wY2llX3BtX29wcyA9IHsNCj4gPiArCVNFVF9OT0lS UV9TWVNURU1fU0xFRVBfUE1fT1BTKG10a19wY2llX3N1c3BlbmRfbm9pcnEsDQo+ID4gKwkJCQkg ICAgICBtdGtfcGNpZV9yZXN1bWVfbm9pcnEpDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfcGNpZV9vZl9tYXRjaFtdID0gew0KPiA+ICsJ eyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxOTItcGNpZSIgfSwNCj4gPiArCXt9LA0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX3BjaWVf ZHJpdmVyID0gew0KPiA+ICsJLnByb2JlID0gbXRrX3BjaWVfcHJvYmUsDQo+ID4gKwkucmVtb3Zl ID0gbXRrX3BjaWVfcmVtb3ZlLA0KPiA+ICsJLmRyaXZlciA9IHsNCj4gPiArCQkubmFtZSA9ICJt dGstcGNpZSIsDQo+ID4gKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX3BjaWVfb2ZfbWF0Y2gsDQo+ ID4gKwkJLnBtID0gJm10a19wY2llX3BtX29wcywNCj4gPiArCX0sDQo+ID4gK307DQo+ID4gKw0K PiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG10a19wY2llX2RyaXZlcik7DQo+ID4gK01PRFVM RV9MSUNFTlNFKCJHUEwgdjIiKTsNCj4gPiAtLSANCj4gPiAyLjI1LjENCj4gPiANCg0K