Received: by 2002:ac0:aed5:0:0:0:0:0 with SMTP id t21csp2383628imb; Mon, 4 Mar 2019 03:53:47 -0800 (PST) X-Google-Smtp-Source: APXvYqxd5rK+lv8P4vTh/8gk3Wib4wWxyS78mk1CxyvmSt2+xarZJ6o2u7V2RgOYOw+2C1e6rxUZ X-Received: by 2002:a63:2c4c:: with SMTP id s73mr743495pgs.113.1551700426945; Mon, 04 Mar 2019 03:53:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551700426; cv=none; d=google.com; s=arc-20160816; b=gIyERoAAQSvbYyR6NCyqjfZs2vZHs9IwxIRSZCwV48Sk4UJaANhj3THq8nPYTG5lC0 TFhXtk9AfZyosusdPJ2+YEKu/PYUGBuZw/ZzJ9jTsoLIwsPUnJJWnVWsQ2bYf4I3e9M+ N9q2WD05ZOZJJj7c9qWnApd3JmXzqlHm9APYCyXUIkTlw0dUwVmQXY5iUWl4uqUmwkPV qL8bnNoYKY+S93EKI2iwvH58/Fw3+FdnxIEDs0jSMQX3SpJqbCbccQmQmDHZ3uMUVLSu dCsCRyMCd9QO6DkPBICQm0LtNtu5KByVj8kaMAEJN+/alZmSwX99PlepjnhaA3vrNsTR eJbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=ff36S/qv+8QneesvHBTrAVuKZ560kQC8ZETEg3CPyF0=; b=Lj+hLn/hMaixYnD+H5GQdY6jDacCNgDhwhzRTMM9OAa6IrwO6GF76pyNSO08opVmOb MQllX8hSYruhHBC4u4co1mXn0uTs4iIwQpQmK79nWVX6gricVIQpX/pLpj9Dj7KRdw0M hV+e3Hc6i/yGQ8vrYFxWQ0FUCMN+2y1EAVI44dEPPqpzmhktzqhcIO77P7RCEeinkvrM LcIOszCTHqDtWCT334JtdnN2Z61prCdLyLyA91YMHAPMH4lCmrvfxE1nWAt6l2sQulOU RAOGl4FO8pVYiNA2pAmfDGl9hNiKP/Fz63W/4nmfZQLsXRth285VsHdFeJM1+/eyzBj5 7NXA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=jidNpgaP; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j16si5159537pgk.441.2019.03.04.03.53.29; Mon, 04 Mar 2019 03:53:46 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=jidNpgaP; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726524AbfCDLrK (ORCPT + 99 others); Mon, 4 Mar 2019 06:47:10 -0500 Received: from mail-eopbgr770043.outbound.protection.outlook.com ([40.107.77.43]:26017 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726090AbfCDLrJ (ORCPT ); Mon, 4 Mar 2019 06:47:09 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ff36S/qv+8QneesvHBTrAVuKZ560kQC8ZETEg3CPyF0=; b=jidNpgaPT3o/+vI5H+nAR5yPuGK8t9BbR8U467ocBCHA8Gyqg0IBFB5t20o5AWiMIrTlIVF+hBUroLPUQuLt9/kOc3F7kKsdbLZQvRlPxFkcnQBrF58+0lmTe/IIg6eubR1V55w60C8PnY3oDRR48y0g8RuyfuXS7vYNwJUS56c= Received: from BN6PR02MB2610.namprd02.prod.outlook.com (10.173.142.137) by BN6PR02MB2323.namprd02.prod.outlook.com (10.173.22.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.18; Mon, 4 Mar 2019 11:46:47 +0000 Received: from BN6PR02MB2610.namprd02.prod.outlook.com ([fe80::b5e3:6eca:2060:cc3a]) by BN6PR02MB2610.namprd02.prod.outlook.com ([fe80::b5e3:6eca:2060:cc3a%3]) with mapi id 15.20.1665.019; Mon, 4 Mar 2019 11:46:47 +0000 From: Naga Sureshkumar Relli To: Miquel Raynal CC: "bbrezillon@kernel.org" , "richard@nod.at" , "dwmw2@infradead.org" , "computersforpeace@gmail.com" , "marek.vasut@gmail.com" , "linux-mtd@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Michal Simek , "nagasureshkumarrelli@gmail.com" Subject: RE: [LINUX PATCH v13] rawnand: pl353: Add basic driver for arm pl353 smc nand interface Thread-Topic: [LINUX PATCH v13] rawnand: pl353: Add basic driver for arm pl353 smc nand interface Thread-Index: AQHUwEH1zZQS3QRob0y10ZaiOKtLVqX7XMyAgAAduPA= Date: Mon, 4 Mar 2019 11:46:47 +0000 Message-ID: References: <1549694247-24625-1-git-send-email-naga.sureshkumar.relli@xilinx.com> <20190304104301.062ccc1e@xps13> In-Reply-To: <20190304104301.062ccc1e@xps13> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=nagasure@xilinx.com; x-originating-ip: [149.199.50.133] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4023f059-8ca5-47cc-cb56-08d6a0971516 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:BN6PR02MB2323; x-ms-traffictypediagnostic: BN6PR02MB2323: x-ms-exchange-purlcount: 2 x-microsoft-exchange-diagnostics: =?utf-8?B?MTtCTjZQUjAyTUIyMzIzOzIzOkdxSFlUQzNqcUFTek9pclUxaEZDUE5ac3BR?= =?utf-8?B?czNZUGwzcnVzeURxY0ZFSENVVWVNK3d3Tys3ODFZZE1sYWkyQkdxblVwZWxE?= =?utf-8?B?WGNiRDl2UEJqWVpmZEJCeWwxZ2dzRWV5TWhWRGdpYnRQSXNYZDFCMFNWMzQ4?= =?utf-8?B?Y1hheTZhUnBrekJxalRmMjdSNHI5ck1pSEc4NUU4WTB0Q3dPeTZ4OHpsMXpE?= =?utf-8?B?YXBKYlMxU25NNCsxTHdCU29rd2NsOHhkNm9VL2FRTWlyOTd2SS8vandlVVNq?= =?utf-8?B?S1NHQzgxRTYxTXRYM3h4aHdlTEU4R3pZWFpJcnhRY3ByYWxVeHpVTHEyQjNj?= =?utf-8?B?UWJON0lmenN1NENmV05mNlFEME1OZnREZDJVWUNURnJ2L0h3endUR2tSTHpW?= =?utf-8?B?TmFvaExjSEUxQnQ0VkJwWDJOd2MzUnNvdEs3akQwR2ZCaGx5QS85ZEpHRkVJ?= =?utf-8?B?ZVJhY1Jram9CMXVhaGRRNEhKbFI5ZVVCZVlHYlRIblFoRW12TXdWVXlwc3FB?= =?utf-8?B?QVY3bkh1dUJaV2pVNVMwWTJjcVZLQlpaQmRCY2R6NCtvaTJKeTJjR3l5d21q?= =?utf-8?B?bG5tVmFBMkRLNVF6T2ZZQThNVmc5ZUpMQnVxVjdtb2FIdGlVMUgzOG5qVHlu?= =?utf-8?B?S04wTjRlR0VxSUg4ampwTWxNcGt3VUROYXo0Nll3aDhOc0ZmOG9zSDFjM05D?= =?utf-8?B?Q3F1N1V3TFNPUE80THBDQ3VIamFEVXE3MHYvVnB1M3B0RXkzdVVnUmpGRlBM?= =?utf-8?B?OU4rMmFSRURaT0JSOXdla01RSG9XRmVybmlKY3huek12aUtOZEdiWTJmMDBv?= =?utf-8?B?Z2FVMVoyS1Q0R01kTDYxZHg1RWRRRDBMN3F2N0VEVTAyZ0N5UmZJSkdvK0tl?= =?utf-8?B?cUhOMXZrUy9hV2d6TERDcHA1VGJ1TENuaEVISWdUTkh6MFlWd1BjS3luazcy?= =?utf-8?B?SWVrTEpIc29VSHlKY3BQM25KL2tSd3BRQUNPWXRYSG9FdnAxRXZNbTR5RWMw?= =?utf-8?B?djdacWZqWUxQUExFakI1cDd1SGtJUExTeEVDaENPL1E3c2NQQVZCNFZscnhO?= =?utf-8?B?YkVpYndxSFZzM3h1ZDk0bUxOdG9sU3JkdmR2V1RHTVFSTGd0Ylh3bERRYlph?= =?utf-8?B?YkYzL25hY0wwTnB4WFpXVFh4a3dFNkovbTNiZXQ4TmkxdDZzcnF3b3FIN0Zm?= =?utf-8?B?VjZBbmRycHhVbXVqOXp0RHFwV2RaT0gwbWY4RDVZUUQyeGJYaE9ZcmMxemwr?= =?utf-8?B?Zk5tbHNWYlpYZGw0RDUyQmhHL1JKbnBTOHFKWjlRUU1YUjIydW5RcDlPbWZP?= =?utf-8?B?a2VpUXZnMmpkQXIrYmJXVEhSS1RMWVlwWmg2dFB3NjFmL2x5VDBsMHhod2Vx?= =?utf-8?B?S0hZMVJzZk9lZklpc28rdVpmZG1WT3FMSWdEL0dZRG00QXB1cHgwTXZycmMw?= =?utf-8?B?VFVlNktHWWRtSjE3Zy9CL2pac2hTRUtIT1NoZlhBdmtOUW5MRzhYa0lPZ2dz?= =?utf-8?B?ekp4aks0ZjRUNlBlWWNSOGVsQ2o1c0JPWTMxdEI1dEhpLzdRTUdaekphRlpa?= =?utf-8?B?b05CU21FN0VHTjllSC9FVC9uSVNObkpzM05KejliS2VlbHlXNWFSQUVJNnpQ?= =?utf-8?B?blY1Wmg4TW1GcjEya085d3ZiZGFLY0JCOThOSUJJTHViWWs0MHEzR1Z0NDNB?= =?utf-8?B?b3pnVDhGYi82blV4WTMzY1RSSUFLL0QxQ2ZjZjNDTUc4NURXdjlMMDU1MUh5?= =?utf-8?B?bVRDRkdUUG5LYWw3aXlWMC96ZFJUTW94VWN1QW5rRUtPUlUrR3o3dkpSeG9k?= =?utf-8?B?c3diNkFDZHE5SnBWUjAxM2hKTG1QWVFOUGRjTjhpOEJmMHZLWnVyZHVDQlJR?= =?utf-8?Q?kLYoA6iqpc9Ot95UEGEDLDuF7oj2Juuw?= x-microsoft-antispam-prvs: x-forefront-prvs: 09669DB681 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(396003)(136003)(376002)(39850400004)(366004)(13464003)(199004)(189003)(8676002)(81156014)(86362001)(71190400001)(99286004)(66066001)(81166006)(8936002)(33656002)(71200400001)(186003)(52536013)(54906003)(305945005)(4326008)(478600001)(316002)(106356001)(74316002)(68736007)(105586002)(966005)(2906002)(7736002)(6916009)(26005)(6246003)(6116002)(3846002)(66574012)(53936002)(25786009)(53946003)(6436002)(30864003)(55016002)(97736004)(9686003)(5024004)(7696005)(6306002)(53546011)(14444005)(11346002)(6506007)(256004)(476003)(446003)(102836004)(76176011)(229853002)(486006)(5660300002)(14454004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:BN6PR02MB2323;H:BN6PR02MB2610.namprd02.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: xilinx.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: /7vhOWhBa57gOfRD613kL+6TXpV4weYXDPJDZxD3PORfIqdaF99TJMhKzrpYE78lnNqB+7PCg2nLwMfTGYcbd3VSdYbEbDYt5cIlT6V0a5JaKE78sgc8aB2m99AcSbaPZy45JKjutTuSVvXAjIy1r3UyTPIx2miW1WGz4iHg3bJcImF4xrV405wh4PNHXX2HChYBEkZAtz0o4pkf1Os7aIHeww+MJD5NGFQkomFcrIQ9kchDZgBrF0aKknrMepbn6bKf1oEFdlsVvpXEW6VjTxguQffjYrz6GCN0Py5U9uq1K/PN5eD+sY5hY9VVB4EnNkXf7xZzJGHrG/kkT8uw6nvcU4U6INuPMph/wvXB27qF3Taa65JjgdS91ysbPTEY8WWIu5Wd2Y/NdDqi+8YRyms7w8fy6SsS6mQhlvfqZrk= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4023f059-8ca5-47cc-cb56-08d6a0971516 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Mar 2019 11:46:47.2073 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR02MB2323 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgTWlxdWVsLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1pcXVl bCBSYXluYWwgPG1pcXVlbC5yYXluYWxAYm9vdGxpbi5jb20+DQo+IFNlbnQ6IE1vbmRheSwgTWFy Y2ggNCwgMjAxOSAzOjEzIFBNDQo+IFRvOiBOYWdhIFN1cmVzaGt1bWFyIFJlbGxpIDxuYWdhc3Vy ZUB4aWxpbnguY29tPg0KPiBDYzogYmJyZXppbGxvbkBrZXJuZWwub3JnOyByaWNoYXJkQG5vZC5h dDsgZHdtdzJAaW5mcmFkZWFkLm9yZzsNCj4gY29tcHV0ZXJzZm9ycGVhY2VAZ21haWwuY29tOyBt YXJlay52YXN1dEBnbWFpbC5jb207IGxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51 eC0NCj4ga2VybmVsQHZnZXIua2VybmVsLm9yZzsgTWljaGFsIFNpbWVrIDxtaWNoYWxzQHhpbGlu eC5jb20+Ow0KPiBuYWdhc3VyZXNoa3VtYXJyZWxsaUBnbWFpbC5jb20NCj4gU3ViamVjdDogUmU6 IFtMSU5VWCBQQVRDSCB2MTNdIHJhd25hbmQ6IHBsMzUzOiBBZGQgYmFzaWMgZHJpdmVyIGZvciBh cm0gcGwzNTMgc21jIG5hbmQNCj4gaW50ZXJmYWNlDQo+IA0KPiBIaSBOYWdhLA0KPiANCj4gTmFn YSBTdXJlc2hrdW1hciBSZWxsaSA8bmFnYS5zdXJlc2hrdW1hci5yZWxsaUB4aWxpbnguY29tPiB3 cm90ZSBvbg0KPiBTYXQsIDkgRmViIDIwMTkgMTI6MDc6MjcgKzA1MzA6DQo+IA0KPiA+IEFkZCBk cml2ZXIgZm9yIGFybSBwbDM1MyBzdGF0aWMgbWVtb3J5IGNvbnRyb2xsZXIgbmFuZCBpbnRlcmZh Y2Ugd2l0aA0KPiA+IEhXIEVDQyBzdXBwb3J0LiBUaGlzIGNvbnRyb2xsZXIgaXMgdXNlZCBpbiBY aWxpbnggWnlucSBTb0MgZm9yDQo+ID4gaW50ZXJmYWNpbmcgdGhlIE5BTkQgZmxhc2ggbWVtb3J5 Lg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogTmFnYSBTdXJlc2hrdW1hciBSZWxsaSA8bmFnYS5z dXJlc2hrdW1hci5yZWxsaUB4aWxpbnguY29tPg0KPiA+IC0tLQ0KPiA+IHhpbGlueCB6eW5xIFRS TSBsaW5rOg0KPiA+IGh0dHBzOi8vd3d3LnhpbGlueC5jb20vc3VwcG9ydC9kb2N1bWVudGF0aW9u L3VzZXJfZ3VpZGVzL3VnNTg1LVp5bnEtNzAwMC1UUk0ucGRmDQo+ID4NCj4gPiBBUk0gcGwzNTMg c21jIFRSTSBsaW5rOg0KPiA+DQo+IGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3Bp Yy9jb20uYXJtLmRvYy5kZGkwMzgwZy9EREkwMzgwR19zbWNfcGwzNTBfc2VyaWVzXw0KPiByMnAx X3RybS5wZGYNCj4gPg0KPiA+IFRlc3RlZCBNaWNyb24gTVQyOUYyRzA4QUJBRUFXUCAoT24tZGll IGNhcGFibGUpIGFuZCBBTUQvU3BhbnNpb24NCj4gUzM0TUwwMUcxLg0KPiA+DQo+ID4gU01DIG1l bW9yeSBjb250cm9sbGVyIGRyaXZlciBpcyBhdCBkcml2ZXJzL21lbW9yeS9wbDM1My1zbWMuYw0K PiA+DQo+ID4gQ2hhbmdlcyBpbiB2MTM6DQo+ID4gIC0gUmViYXNlZCB0aGUgZHJpdmVyIHRvIG10 ZC9uZXh0DQo+ID4gQ2hhbmdlcyBpbiB2MTI6DQo+ID4gIC0gUmViYXNlZCB0aGUgZHJpdmVyIG9u IHRvcCBvZiB2NC4xOSBuYW5kIHRyZWUNCj4gPiAgLSBSZW1vdmVkIG5hbmRfc2Nhbl9pZGVudCgp IGFuZCBuYW5kX3NjYW5fdGFpbCgpLCBhbmQgYWRkZWQgbmFuZF9jb250cm9sbGVyX29wcw0KPiA+ ICAgIHdpdGggLT5hdHRhY2hfY2hpcCgpIGFuZCB1c2VkIG5hbmRfc2NhbigpIGluc3RlYWQuDQo+ ID4gIC0gUmVuYW1lZCBwbDM1M19uYW5kX2luZm8gc3RydWN0dXJlIHRvIHBsMzUzX25hbmRfY29u dHJvbGxlcg0KPiA+ICAtIFJlbmFtZWQgbmFuZF9iYXNlIGFuZCBuYW5kYWRkciBpbiBwbDM1M19u YW5kX2NvbnRyb2xsZXIgdG8gJ3JlZ3MnIGFuZCAnYnVmX2FkZHInDQo+ID4gIC0gQWRkZWQgbmV3 IEFQSSBwbDM1M193YWl0X2Zvcl9lY2NfZG9uZSgpIHRvIHdhaXQgZm9yIGVjYyBkb25lIGFuZCBj YWxsIGl0IGZyb20NCj4gPiAgICBwbDM1M19uYW5kX3dyaXRlX3BhZ2VfaHdlY2MoKSBhbmQgcGwz NTNfbmFuZF9yZWFkX3BhZ2VfaHdlY2MoKQ0KPiA+ICAtIERlZmluZWQgbmV3IG1hY3JvIGZvciBt YXggRUNDIGJsb2Nrcw0KPiA+ICAtIEFkZGVkIHJldHVybiB2YWx1ZSBjaGVjayBmb3IgZWNjLmNh bGN1bGF0ZSgpDQo+ID4gIC0gUmVuYW1lZCBwbDM1M19uYW5kX2NtZF9mdW5jdGlvbigpIHRvIHBs MzUzX25hbmRfZXhlY19vcF9jbWQoKQ0KPiA+ICAtIEFkZGVkIHgxNiBidXMtd2lkdGggc3VwcG9y dA0KPiA+ICAtIFRoZSBkZXBlbmRlbnQgZHJpdmVyIHBsMzUzLXNtYyBpcyBhbHJlYWR5IHJldmll d2VkIGFuZCBoZW5jZSBkcm9wcGVkIHRoZQ0KPiA+ICAgIHNtYyBkcml2ZXINCj4gPiBDaGFuZ2Vz IGluIHYxMToNCj4gPiAgLSBSZW1vdmVkIERvY3VtZW50YXRpb24gcGF0Y2ggYW5kIGFkZGVkIHRo ZSByZXF1aXJlZCBpbmZvIGluIGRyaXZlciBhcw0KPiA+ICAgIHBlciBCb3JpcyBjb21tZW50cy4N Cj4gPiAgLSBSZW1vdmVkIHVud2FudGVkIHZhcmlhYmxlcyBmcm9tIHBsMzUzX25hbmRfaW5mbyBh cyBwZXIgTWlxdWVsIGNvbW1lbnRzDQo+ID4gIC0gUmVtb3ZlZCBJT19BRERSX1IvVy4NCj4gPiAg LSBSZXBsYWNlZCBvbmhvdCgpIHdpdGggaHdlaWdodDMyKCkNCj4gPiAgLSBEZWZpbmVkIG1hY3Jv cyBmb3Igc3RhdGljIHZhbHVlcyBpbiBmdW5jdGlvbiBwbDM1M19uYW5kX2NvcnJlY3RfZGF0YSgp DQo+ID4gIC0gUmVtb3ZlZCBhbGwgdW5uZWNlc3NhcnkgZGVsYXlzDQo+ID4gIC0gVXNlZCBuYW5k X3dhaXRfcmVhZHkoKSB3aGVyZSBldmVyIGlzIHJlcXVpcmVkDQo+ID4gIC0gTW9kaWZlZCB0aGUg cGwzNTNfc2V0dXBfZGF0YV9pbnRlcmZhY2UoKSBsb2dpYyBhcyBwZXIgTWlxdWVsIGNvbW1lbnRz Lg0KPiA+ICAtIFRha2VuIGFycmF5IGluc3RlYWQgb2YgNyB2YWx1ZXMgaW4gcGwzNTNfc2V0dXBf ZGF0YV9pbnRlcmZhY2UoKSBhbmQgcGFzcw0KPiA+ICAgIGl0IHRvIHNtYyBkcml2ZXIuDQo+ID4g IC0gQWRkZWQgY2hlY2sgdG8gY29sbGVjdCB0aGUgcmV0dXJuIHZhbHVlIG9mIG10ZF9kZXZpY2Vf cmVnaXN0ZXIoKS4NCj4gPiBDaGFuZ2VzIGluIDEwOg0KPiA+ICAtIFR5cG9zIGNvcnJlY3Rpb24g bGlrZSBuYW5kIHRvIE5BTkQgYW5kIHNvYyB0byBTT0MgZXRjLi4NCj4gPiAgLSBEZWZpbmVkIG1h Y3JvcyBmb3IgdGhlIHZhbHVlcyBpbiBwbDM1M19uYW5kX2NhbGN1bGF0ZV9od2VjYygpDQo+ID4g IC0gTW9kaWZlZCBlY2Nfc3RhdHVzIGZyb20gaW50IHRvIGNoYXIgaW4gcGwzNTNfbmFuZF9jYWxj dWxhdGVfaHdlY2MoKQ0KPiA+ICAtIENoYW5nZWQgdGhlIHJldHVybiB0eXBlIGZvcm0gaW50IHRv IGJvb2wgdG8gdGhlIGZ1bmN0aW9uDQo+ID4gICAgb25laG90KCkNCj4gPiAgLSBSZW1vdmVkIHVk ZWxheSgxMDAwKSBpbiBwbDM1M19jbWRfZnVuY3Rpb24sIGFzIGl0IGlzIG5vdCByZXF1aXJlZA0K PiA+ICAtIERyb3BwZWQgZWNjLT5od2N0bCA9IE5VTEwgaW4gcGwzNTNfZWNjX2luaXQoKQ0KPiA+ ICAtIEFkZGVkIGFuIGVycm9yIG1lc3NhZ2UgaW4gcGwzNTNfZWNjX2luaXQoKSwgd2hlbiB0aGVy ZSBpcyBubyBtYXRjaGluZw0KPiA+ICAgIG9vYnNpemUNCj4gPiAgLSBDaGFuZ2VkIHRoZSB2YXJp YWJsZSBmcm9tIHhuYW5kIHRvIHhuZmMNCj4gPiAgLSBBZGRlZCBsb2dpYyB0byBnZXQgbXRkLT5u YW1lIGZyb20gRFQsIGlmIGl0IGlzIHNwZWNpZmllZCBpbiBEVA0KPiA+IENoYW5nZXMgaW4gdjk6 DQo+ID4gIC0gQWRkcmVzc2VkIHRoZSBiZWxvdyBjb21tZW50cyBnaXZlbiBieSBNaXF1ZWwNCj4g PiAgLSBpbnN0ZWFkIG9mIHVzaW5nIHBsMzUzX25hbmRfd3JpdGUzMiwgdXNlIGRpcmVjdGx5IHdy aXRlbF9yZWxheGVkDQo+ID4gIC0gRml4ZWQgY2hlY2sgcGF0Y2ggd2FybmluZ3MNCj4gPiAgLSBS ZW5hbWVkIHdyaXRlX2J1Zi9yZWFkX2J1ZiB0byB3cml0ZV9kYXRhX29wL3JlYWRfZGF0YV9vcA0K PiA+ICAtIHVzZSBCSVQgbWFjcm8gaW5zdGVhZCBvZiAxIDw8IG5yDQo+ID4gIC0gVXNlIE5BTkRf Uk9XX0FERFJfMyBmbGFnDQo+ID4gIC0gVXNlIG5hbmRfd2FpdF9yZWFkeSgpDQo+ID4gIC0gUmVt b3ZlZCBzd2VjYyBmdW5jdGlvbnMNCj4gPiAgLSBVc2UgYWRkcmVzcyBjeWNsZXMgYXMgcGVyIHNp emUsIGluc3RlYWQgb2YgcmVhZGluZyBpdCBmcm9tIFBhcmFtZXRlciBwYWdlDQo+ID4gIC0gSW5z dGVhZCBvZiB3cml0aW5nIHRvbyBtYW55IHBhdHRlcm5zLCB1c2Ugb3B0aW9uYWwgcHJvcGVydHkN Cj4gPiBDaGFuZ2VzIGluIHY4Og0KPiA+ICAtIEFkZGVkIGV4ZWNfb3AoKSBpbXBsZW1lbnRhdGlv bg0KPiA+ICAtIEZpeGVkIHRoZSBiZWxvdyB2NyByZXZpZXcgY29tbWVudHMNCj4gPiAgLSByZW1v dmVkIG10ZF9pbmZvIGZyb20gcGwzNTNfbmFuZF9pbmZvIHN0cnVjdA0KPiA+ICAtIENvcnJlY3Rl ZCBlY2MgbGF5b3V0IG9mZnNldHMNCj4gPiAgLSBBZGRlZCBvbi1kaWUgZWNjIHN1cHBvcnQNCj4g PiBDaGFuZ2VzIGluIHY3Og0KPiA+ICAtIEN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQgdGhlIG1l bWNsayByYXRlIGFkanVzdG1lbnRzLiBJIHdpbGwNCj4gPiAgICBsb29rIGludG8gdGhpcyBsYXRl ciBhbmQgb25jZSB0aGUgYmFzaWMgZHJpdmVyIGlzIGFjY2VwdGVkLg0KPiA+ICAtIEZpeGVkIEdQ TCBsaWNlbmNlIGlkZW50DQo+ID4gQ2hhbmdlcyBpbiB2NjoNCj4gPiAgLSBGaXhlZCB0aGUgY2hl Y2twYXRjaC5wbCByZXBvcnRlZCB3YXJuaW5ncw0KPiA+ICAtIFVzaW5nIHRoZSBhZGRyZXNzIGN5 Y2xlcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvbmZpIHBhcmFtIHBhZ2UNCj4gPiAgICBlYXJsaWVy IGl0IGlzIGhhcmRjb2RlZCB0byA1IGluIGRyaXZlcg0KPiA+IENoYW5nZXMgaW4gdjU6DQo+ID4g IC0gQ29uZmlndXJlIHRoZSBuYW5kIHRpbWluZyBwYXJhbWV0ZXJzIGFzIHBlciB0aGUgb25maSBz cGVjIENoYW5nZXMgaW4gdjQ6DQo+ID4gIC0gVXBkYXRlZCB0aGUgZHJpdmVyIHRvIHN5bmMgd2l0 aCBwbDM1M19zbWMgZHJpdmVyIEFQSXMNCj4gPiBDaGFuZ2VzIGluIHYzOg0KPiA+ICAtIGltcGxl bWVudGVkIHRoZSBwcm9wZXIgZXJyb3IgY29kZXMNCj4gPiAgLSBmdXJ0aGVyIGJyZWFrZG93biB0 aGlzIHBhdGNoIHRvIG11bHRpcGxlIHNldHMNCj4gPiAgLSBhZGRlZCB0aGUgY29udHJvbGxlciBh bmQgZHJpdmVyIGRldGFpbHMgdG8gRG9jdW1lbnRhdGlvbiBzZWN0aW9uDQo+ID4gIC0gdXBkYXRl ZCB0aGUgbGljZW5lY2UgdG8gR1BMdjINCj4gPiAgLSByZW9yZ2FuaXplZCB0aGUgcGwzNTNfbmFu ZF9lY2NfaW5pdCBmdW5jdGlvbg0KPiA+IENoYW5nZXMgaW4gdjI6DQo+ID4gIC0gdXNlICJkZXBl bmRzIG9uIiByYXRoZXIgdGhhbiAic2VsZWN0IiBvcHRpb24gaW4ga2NvbmZpZw0KPiA+ICAtIHJl bW92ZSB1bnVzZWQgdmFyaWFibGUgcGFydHMNCj4gPiAtLS0NCj4gPiAgZHJpdmVycy9tdGQvbmFu ZC9yYXcvS2NvbmZpZyAgICAgIHwgICAgOCArDQo+ID4gIGRyaXZlcnMvbXRkL25hbmQvcmF3L01h a2VmaWxlICAgICB8ICAgIDEgKw0KPiA+ICBkcml2ZXJzL210ZC9uYW5kL3Jhdy9wbDM1M19uYW5k LmMgfCAxMzgwDQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiAg MyBmaWxlcyBjaGFuZ2VkLCAxMzg5IGluc2VydGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvbXRkL25hbmQvcmF3L3BsMzUzX25hbmQuYw0KPiA+DQo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWcgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9L Y29uZmlnDQo+ID4gaW5kZXggMWE1NWQzZS4uYmM2YzBhMCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2 ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcv S2NvbmZpZw0KPiA+IEBAIC01NDEsNCArNTQxLDEyIEBAIGNvbmZpZyBNVERfTkFORF9URUdSQQ0K PiA+ICAJICBpcyBzdXBwb3J0ZWQuIEV4dHJhIE9PQiBieXRlcyB3aGVuIHVzaW5nIEhXIEVDQyBh cmUgY3VycmVudGx5DQo+ID4gIAkgIG5vdCBzdXBwb3J0ZWQuDQo+ID4NCj4gPiArY29uZmlnIE1U RF9OQU5EX1BMMzUzDQo+ID4gKwl0cmlzdGF0ZSAiQVJNIFBsMzUzIE5BTkQgZmxhc2ggZHJpdmVy Ig0KPiA+ICsJZGVwZW5kcyBvbiBNVERfTkFORCAmJiBBUk0NCj4gPiArCWRlcGVuZHMgb24gUEwz NTNfU01DDQo+ID4gKwloZWxwDQo+ID4gKwkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgUHJpbWVDZWxs IFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciBQTDM1My4NCj4gPiArDQo+ID4gKw0KPiA+ICBlbmRp ZiAjIE1URF9OQU5EDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L01ha2Vm aWxlIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUNCj4gPiBpbmRleCA1NzE1OWIzLi45 ZDNjNDhkIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L01ha2VmaWxlDQo+ ID4gKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUNCj4gPiBAQCAtNTYsNiArNTYs NyBAQCBvYmotJChDT05GSUdfTVREX05BTkRfQlJDTU5BTkQpCQkrPSBicmNtbmFuZC8NCj4gPiAg b2JqLSQoQ09ORklHX01URF9OQU5EX1FDT00pCQkrPSBxY29tX25hbmRjLm8NCj4gPiAgb2JqLSQo Q09ORklHX01URF9OQU5EX01USykJCSs9IG10a19lY2MubyBtdGtfbmFuZC5vDQo+ID4gIG9iai0k KENPTkZJR19NVERfTkFORF9URUdSQSkJCSs9IHRlZ3JhX25hbmQubw0KPiA+ICtvYmotJChDT05G SUdfTVREX05BTkRfUEwzNTMpCQkrPSBwbDM1M19uYW5kLm8NCj4gPg0KPiA+ICBuYW5kLW9ianMg Oj0gbmFuZF9iYXNlLm8gbmFuZF9sZWdhY3kubyBuYW5kX2JidC5vIG5hbmRfdGltaW5ncy5vIG5h bmRfaWRzLm8NCj4gPiAgbmFuZC1vYmpzICs9IG5hbmRfb25maS5vDQo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvbXRkL25hbmQvcmF3L3BsMzUzX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3 L3BsMzUzX25hbmQuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAw MC4uMWRiYWFlNQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL210ZC9uYW5k L3Jhdy9wbDM1M19uYW5kLmMNCj4gPiBAQCAtMCwwICsxLDEzODAgQEANCj4gPiArLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiArICogQVJNIFBMMzUzIE5B TkQgZmxhc2ggY29udHJvbGxlciBkcml2ZXINCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0IChD KSAyMDE3IFhpbGlueCwgSW5jDQo+ID4gKyAqIEF1dGhvcjogUHVubmFpYWggY2hvd2Rhcnkga2Fs bHVyaSA8cHVubmFpYWhAeGlsaW54LmNvbT4NCj4gPiArICogQXV0aG9yOiBOYWdhIFN1cmVzaGt1 bWFyIFJlbGxpIDxuYWdhc3VyZUB4aWxpbnguY29tPg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiAr DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5 Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L2lvLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L2lycS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbXRkL210ZC5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbXRkL3Jhd25hbmQuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L210ZC9uYW5kX2VjYy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMu aD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L29mX2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGwzNTMtc21jLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9jbGsuaD4NCj4gPiArDQo+ID4gKyNkZWZpbmUgUEwzNTNfTkFORF9EUklWRVJf TkFNRSAicGwzNTMtbmFuZCINCj4gPiArDQo+ID4gKy8qIE5BTkQgZmxhc2ggZHJpdmVyIGRlZmlu ZXMgKi8NCj4gPiArI2RlZmluZSBQTDM1M19OQU5EX0NNRF9QSEFTRQkxCS8qIEVuZCBjb21tYW5k IHZhbGlkIGluIGNvbW1hbmQNCj4gcGhhc2UgKi8NCj4gPiArI2RlZmluZSBQTDM1M19OQU5EX0RB VEFfUEhBU0UJMgkvKiBFbmQgY29tbWFuZCB2YWxpZCBpbiBkYXRhIHBoYXNlDQo+ICovDQo+ID4g KyNkZWZpbmUgUEwzNTNfTkFORF9FQ0NfU0laRQk1MTIJLyogU2l6ZSBvZiBkYXRhIGZvciBFQ0Mg b3BlcmF0aW9uICovDQo+ID4gKw0KPiA+ICsvKiBGbGFzaCBtZW1vcnkgY29udHJvbGxlciBvcGVy YXRpbmcgcGFyYW1ldGVycyAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBQTDM1M19OQU5EX0VDQ19D T05GSUcJKEJJVCg0KSAgfAkvKiBFQ0MgcmVhZCBhdCBlbmQgb2YgcGFnZSAqLw0KPiBcDQo+ID4g KwkJCQkgKDAgPDwgNSkpCS8qIE5vIEp1bXBpbmcgKi8NCj4gPiArDQo+ID4gKy8qIEFYSSBBZGRy ZXNzIGRlZmluaXRpb25zICovDQo+ID4gKyNkZWZpbmUgU1RBUlRfQ01EX1NISUZUCQkzDQo+ID4g KyNkZWZpbmUgRU5EX0NNRF9TSElGVAkJMTENCj4gPiArI2RlZmluZSBFTkRfQ01EX1ZBTElEX1NI SUZUCTIwDQo+ID4gKyNkZWZpbmUgQUREUl9DWUNMRVNfU0hJRlQJMjENCj4gPiArI2RlZmluZSBD TEVBUl9DU19TSElGVAkJMjENCj4gPiArI2RlZmluZSBFQ0NfTEFTVF9TSElGVAkJMTANCj4gPiAr I2RlZmluZSBDT01NQU5EX1BIQVNFCQkoMCA8PCAxOSkNCj4gPiArI2RlZmluZSBEQVRBX1BIQVNF CQlCSVQoMTkpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBMMzUzX05BTkRfRUNDX0xBU1QJQklUKEVD Q19MQVNUX1NISUZUKQkvKiBTZXQNCj4gRUNDX0xhc3QgKi8NCj4gPiArI2RlZmluZSBQTDM1M19O QU5EX0NMRUFSX0NTCUJJVChDTEVBUl9DU19TSElGVCkJLyogQ2xlYXIgY2hpcA0KPiBzZWxlY3Qg Ki8NCj4gPiArDQo+ID4gKyNkZWZpbmUgUEwzNTNfTkFORF9FQ0NfQlVTWV9USU1FT1VUCSgxICog SFopDQo+ID4gKyNkZWZpbmUgUEwzNTNfTkFORF9ERVZfQlVTWV9USU1FT1VUCSgxICogSFopDQo+ ID4gKyNkZWZpbmUgUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSAk0DQo+ID4gKyNkZWZp bmUgUEwzNTNfTkFORF9FQ0NfVkFMSURfU0hJRlQJMjQNCj4gPiArI2RlZmluZSBQTDM1M19OQU5E X0VDQ19WQUxJRF9NQVNLCTB4NDANCj4gPiArI2RlZmluZSBQTDM1M19FQ0NfQklUU19CWVRFT0ZG X01BU0sJMHgxRkYNCj4gPiArI2RlZmluZSBQTDM1M19FQ0NfQklUU19CSVRPRkZfTUFTSwkweDcN Cj4gPiArI2RlZmluZSBQTDM1M19FQ0NfQklUX01BU0sJCTB4RkZGDQo+ID4gKyNkZWZpbmUgUEwz NTNfVFJFQV9NQVhfVkFMVUUJCTENCj4gPiArI2RlZmluZSBQTDM1M19NQVhfRUNDX0NIVU5LUwkJ NA0KPiA+ICsjZGVmaW5lIFBMMzUzX01BWF9FQ0NfQllURVMJCTMNCj4gPiArDQo+ID4gK3N0cnVj dCBwbDM1M19uZmNfb3Agew0KPiA+ICsJdTMyIGNtbmRzWzRdOw0KPiA+ICsJdTMyIGVuZF9jbWQ7 DQo+ID4gKwl1MzIgYWRkcnM7DQo+ID4gKwl1MzIgbmFkZHJzOw0KPiA+ICsJdTMyIGFkZHI1Ow0K PiA+ICsJdTMyIGFkZHI2Ow0KPiA+ICsJdW5zaWduZWQgaW50IGRhdGFfaW5zdHJfaWR4Ow0KPiA+ ICsJdW5zaWduZWQgaW50IHJkeV90aW1lb3V0X21zOw0KPiA+ICsJdW5zaWduZWQgaW50IHJkeV9k ZWxheV9uczsNCj4gPiArCXVuc2lnbmVkIGludCBjbGVfYWxlX2RlbGF5X25zOw0KPiA+ICsJY29u c3Qgc3RydWN0IG5hbmRfb3BfaW5zdHIgKmRhdGFfaW5zdHI7DQo+ID4gK307DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICogc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAtIERlZmluZXMgdGhl IE5BTkQgZmxhc2ggY29udHJvbGxlciBkcml2ZXINCj4gPiArICoJCQkJICBpbnN0YW5jZQ0KPiA+ ICsgKiBAY2hpcDoJCU5BTkQgY2hpcCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUNCj4gPiArICogQGRl djoJCVBhcmVudCBkZXZpY2UgKHVzZWQgdG8gcHJpbnQgZXJyb3IgbWVzc2FnZXMpDQo+ID4gKyAq IEByZWdzOgkJVmlydHVhbCBhZGRyZXNzIG9mIHRoZSBOQU5EIGZsYXNoIGRldmljZQ0KPiA+ICsg KiBAYnVmX2FkZHI6CQlWaXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIE5BTkQgZmxhc2ggZGV2aWNlIGZv cg0KPiA+ICsgKgkJCWRhdGEgcmVhZC93cml0ZXMNCj4gPiArICogQGFkZHJfY3ljbGVzOglBZGRy ZXNzIGN5Y2xlcw0KPiA+ICsgKiBAbWNsazoJCU1lbW9yeSBjb250cm9sbGVyIGNsb2NrDQo+ID4g KyAqIEBidXN3aWR0aDoJCUJ1cyB3aWR0aCA4IG9yIDE2DQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3Qg cGwzNTNfbmFuZF9jb250cm9sbGVyIHsNCj4gPiArCXN0cnVjdCBuYW5kX2NvbnRyb2xsZXIgY29u dHJvbGxlcjsNCj4gPiArCXN0cnVjdCBuYW5kX2NoaXAgY2hpcDsNCj4gPiArCXN0cnVjdCBkZXZp Y2UgKmRldjsNCj4gPiArCXZvaWQgX19pb21lbSAqcmVnczsNCj4gPiArCXZvaWQgX19pb21lbSAq YnVmX2FkZHI7DQo+ID4gKwl1OCBhZGRyX2N5Y2xlczsNCj4gPiArCXN0cnVjdCBjbGsgKm1jbGs7 DQo+ID4gKwl1MzIgYnVzd2lkdGg7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHBs MzUzX2VjY19vb2JsYXlvdXQxNl9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzZWN0aW9u LA0KPiA+ICsJCQkJICAgICBzdHJ1Y3QgbXRkX29vYl9yZWdpb24gKm9vYnJlZ2lvbikNCj4gPiAr ew0KPiA+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90b19uYW5kKG10ZCk7DQo+ID4g Kw0KPiA+ICsJaWYgKHNlY3Rpb24gPj0gY2hpcC0+ZWNjLnN0ZXBzKQ0KPiA+ICsJCXJldHVybiAt RVJBTkdFOw0KPiA+ICsNCj4gPiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gKHNlY3Rpb24gKiBjaGlw LT5lY2MuYnl0ZXMpOw0KPiA+ICsJb29icmVnaW9uLT5sZW5ndGggPSBjaGlwLT5lY2MuYnl0ZXM7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg cGwzNTNfZWNjX29vYmxheW91dDE2X2ZyZWUoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzZWN0 aW9uLA0KPiA+ICsJCQkJICAgICAgc3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2JyZWdpb24pDQo+ ID4gK3sNCj4gPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOw0K PiA+ICsNCj4gPiArCWlmIChzZWN0aW9uID49IGNoaXAtPmVjYy5zdGVwcykNCj4gPiArCQlyZXR1 cm4gLUVSQU5HRTsNCj4gPiArDQo+ID4gKwlvb2JyZWdpb24tPm9mZnNldCA9IChzZWN0aW9uICog Y2hpcC0+ZWNjLmJ5dGVzKSArIDg7DQo+ID4gKwlvb2JyZWdpb24tPmxlbmd0aCA9IDg7DQo+ID4g Kw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgbXRkX29vYmxheW91dF9vcHMgcGwzNTNfZWNjX29vYmxheW91dDE2X29wcyA9IHsNCj4gPiAr CS5lY2MgPSBwbDM1M19lY2Nfb29ibGF5b3V0MTZfZWNjLA0KPiA+ICsJLmZyZWUgPSBwbDM1M19l Y2Nfb29ibGF5b3V0MTZfZnJlZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcGwz NTNfZWNjX29vYmxheW91dDY0X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24s DQo+ID4gKwkJCQkgICAgIHN0cnVjdCBtdGRfb29iX3JlZ2lvbiAqb29icmVnaW9uKQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkX3RvX25hbmQobXRkKTsNCj4gPiAr DQo+ID4gKwlpZiAoc2VjdGlvbiA+PSBjaGlwLT5lY2Muc3RlcHMpDQo+ID4gKwkJcmV0dXJuIC1F UkFOR0U7DQo+ID4gKw0KPiA+ICsJb29icmVnaW9uLT5vZmZzZXQgPSAoc2VjdGlvbiAqIGNoaXAt PmVjYy5ieXRlcykgKyA1MjsNCj4gPiArCW9vYnJlZ2lvbi0+bGVuZ3RoID0gY2hpcC0+ZWNjLmJ5 dGVzOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IHBsMzUzX2VjY19vb2JsYXlvdXQ2NF9mcmVlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQg c2VjdGlvbiwNCj4gPiArCQkJCSAgICAgIHN0cnVjdCBtdGRfb29iX3JlZ2lvbiAqb29icmVnaW9u KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkX3RvX25hbmQobXRk KTsNCj4gPiArDQo+ID4gKwlpZiAoc2VjdGlvbikNCj4gPiArCQlyZXR1cm4gLUVSQU5HRTsNCj4g PiArDQo+ID4gKwlpZiAoc2VjdGlvbiA+PSBjaGlwLT5lY2Muc3RlcHMpDQo+ID4gKwkJcmV0dXJu IC1FUkFOR0U7DQo+ID4gKw0KPiA+ICsJb29icmVnaW9uLT5vZmZzZXQgPSAoc2VjdGlvbiAqIGNo aXAtPmVjYy5ieXRlcykgKyAyOw0KPiA+ICsJb29icmVnaW9uLT5sZW5ndGggPSA1MDsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCBtdGRfb29ibGF5b3V0X29wcyBwbDM1M19lY2Nfb29ibGF5b3V0NjRfb3BzID0gew0KPiA+ICsJ LmVjYyA9IHBsMzUzX2VjY19vb2JsYXlvdXQ2NF9lY2MsDQo+ID4gKwkuZnJlZSA9IHBsMzUzX2Vj Y19vb2JsYXlvdXQ2NF9mcmVlLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyogR2VuZXJpYyBmbGFz aCBiYnQgZGVjcmlwdG9ycyAqLw0KPiA+ICtzdGF0aWMgdTggYmJ0X3BhdHRlcm5bXSA9IHsgJ0In LCAnYicsICd0JywgJzAnIH07DQo+ID4gK3N0YXRpYyB1OCBtaXJyb3JfcGF0dGVybltdID0geyAn MScsICd0JywgJ2InLCAnQicgfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRf ZGVzY3IgYmJ0X21haW5fZGVzY3IgPSB7DQo+ID4gKwkub3B0aW9ucyA9IE5BTkRfQkJUX0xBU1RC TE9DSyB8IE5BTkRfQkJUX0NSRUFURSB8DQo+IE5BTkRfQkJUX1dSSVRFDQo+ID4gKwkJfCBOQU5E X0JCVF8yQklUIHwgTkFORF9CQlRfVkVSU0lPTiB8IE5BTkRfQkJUX1BFUkNISVAsDQo+ID4gKwku b2ZmcyA9IDQsDQo+ID4gKwkubGVuID0gNCwNCj4gPiArCS52ZXJvZmZzID0gMjAsDQo+ID4gKwku bWF4YmxvY2tzID0gNCwNCj4gPiArCS5wYXR0ZXJuID0gYmJ0X3BhdHRlcm4NCj4gPiArfTsNCj4g PiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgYmJ0X21pcnJvcl9kZXNjciA9 IHsNCj4gPiArCS5vcHRpb25zID0gTkFORF9CQlRfTEFTVEJMT0NLIHwgTkFORF9CQlRfQ1JFQVRF IHwNCj4gTkFORF9CQlRfV1JJVEUNCj4gPiArCQl8IE5BTkRfQkJUXzJCSVQgfCBOQU5EX0JCVF9W RVJTSU9OIHwgTkFORF9CQlRfUEVSQ0hJUCwNCj4gPiArCS5vZmZzID0gNCwNCj4gPiArCS5sZW4g PSA0LA0KPiA+ICsJLnZlcm9mZnMgPSAyMCwNCj4gPiArCS5tYXhibG9ja3MgPSA0LA0KPiA+ICsJ LnBhdHRlcm4gPSBtaXJyb3JfcGF0dGVybg0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHZv aWQgcGwzNTNfbmZjX2ZvcmNlX2J5dGVfYWNjZXNzKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsDQo+ ID4gKwkJCQkJYm9vbCBmb3JjZV84Yml0KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcGwzNTNfbmFu ZF9jb250cm9sbGVyICp4bmZjID0NCj4gPiArCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBs MzUzX25hbmRfY29udHJvbGxlciwgY2hpcCk7DQo+ID4gKw0KPiA+ICsJaWYgKCEoY2hpcC0+b3B0 aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpKQ0KPiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwlp ZiAoZm9yY2VfOGJpdCkNCj4gPiArCQlwbDM1M19zbWNfc2V0X2J1c3dpZHRoKFBMMzUzX1NNQ19N RU1fV0lEVEhfOCk7DQo+ID4gKwllbHNlDQo+ID4gKwkJcGwzNTNfc21jX3NldF9idXN3aWR0aChQ TDM1M19TTUNfTUVNX1dJRFRIXzE2KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAq IHBsMzUzX25hbmRfcmVhZF9kYXRhX29wIC0gcmVhZCBjaGlwIGRhdGEgaW50byBidWZmZXINCj4g PiArICogQGNoaXA6CVBvaW50ZXIgdG8gdGhlIE5BTkQgY2hpcCBpbmZvIHN0cnVjdHVyZQ0KPiA+ ICsgKiBAaW46CQlQb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhDQo+ID4g KyAqIEBsZW46CU51bWJlciBvZiBieXRlcyB0byByZWFkDQo+ID4gKyAqIEBmb3JjZV84Yml0OglG b3JjZSA4LWJpdCBidXMgYWNjZXNzDQo+ID4gKyAqIFJldHVybjoJQWx3YXlzIHJldHVybiB6ZXJv DQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRfcmVhZF9kYXRhX29wKHN0cnVj dCBuYW5kX2NoaXAgKmNoaXAsDQo+ID4gKwkJCQkgICB1OCAqaW4sDQo+ID4gKwkJCQkgICB1bnNp Z25lZCBpbnQgbGVuLCBib29sIGZvcmNlXzhiaXQpDQo+ID4gK3sNCj4gPiArCWludCBpOw0KPiA+ ICsJc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9DQo+ID4gKwkJY29udGFpbmVy X29mKGNoaXAsIHN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIsIGNoaXApOw0KPiA+ICsNCj4g PiArCWlmIChmb3JjZV84Yml0KQ0KPiA+ICsJCXBsMzUzX25mY19mb3JjZV9ieXRlX2FjY2Vzcyhj aGlwLCB0cnVlKTsNCj4gPiArDQo+ID4gKwlpZiAoKElTX0FMSUdORUQoKHVpbnQzMl90KWluLCBz aXplb2YodWludDMyX3QpKSAmJg0KPiA+ICsJICAgICBJU19BTElHTkVEKGxlbiwgc2l6ZW9mKHVp bnQzMl90KSkpIHx8ICFmb3JjZV84Yml0KSB7DQo+ID4gKwkJdTMyICpwdHIgPSAodTMyICopaW47 DQo+ID4gKw0KPiA+ICsJCWxlbiAvPSA0Ow0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkr KykNCj4gPiArCQkJcHRyW2ldID0gcmVhZGwoeG5mYy0+YnVmX2FkZHIpOw0KPiA+ICsJfSBlbHNl IHsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspDQo+ID4gKwkJCWluW2ldID0gcmVh ZGIoeG5mYy0+YnVmX2FkZHIpOw0KPiA+ICsJfQ0KPiA+ICsJaWYgKGZvcmNlXzhiaXQpDQo+ID4g KwkJcGwzNTNfbmZjX2ZvcmNlX2J5dGVfYWNjZXNzKGNoaXAsIGZhbHNlKTsNCj4gPiArDQo+ID4g KwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHBsMzUzX25hbmRf d3JpdGVfYnVmIC0gd3JpdGUgYnVmZmVyIHRvIGNoaXANCj4gPiArICogQG10ZDoJUG9pbnRlciB0 byB0aGUgbXRkIGluZm8gc3RydWN0dXJlDQo+ID4gKyAqIEBidWY6CVBvaW50ZXIgdG8gdGhlIGJ1 ZmZlciB0byBzdG9yZSB3cml0ZSBkYXRhDQo+ID4gKyAqIEBsZW46CU51bWJlciBvZiBieXRlcyB0 byB3cml0ZQ0KPiA+ICsgKiBAZm9yY2VfOGJpdDoJRm9yY2UgOC1iaXQgYnVzIGFjY2Vzcw0KPiA+ ICsgKi8NCj4gPiArc3RhdGljIHZvaWQgcGwzNTNfbmFuZF93cml0ZV9kYXRhX29wKHN0cnVjdCBu YW5kX2NoaXAgKmNoaXAsIGNvbnN0IHU4ICpidWYsDQo+ID4gKwkJCQkgICAgIGludCBsZW4sIGJv b2wgZm9yY2VfOGJpdCkNCj4gPiArew0KPiA+ICsJaW50IGk7DQo+ID4gKwlzdHJ1Y3QgcGwzNTNf bmFuZF9jb250cm9sbGVyICp4bmZjID0NCj4gPiArCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0 IHBsMzUzX25hbmRfY29udHJvbGxlciwgY2hpcCk7DQo+ID4gKw0KPiA+ICsJaWYgKGZvcmNlXzhi aXQpDQo+ID4gKwkJcGwzNTNfbmZjX2ZvcmNlX2J5dGVfYWNjZXNzKGNoaXAsIHRydWUpOw0KPiA+ ICsNCj4gPiArCWlmICgoSVNfQUxJR05FRCgodWludDMyX3QpYnVmLCBzaXplb2YodWludDMyX3Qp KSAmJg0KPiA+ICsJICAgICBJU19BTElHTkVEKGxlbiwgc2l6ZW9mKHVpbnQzMl90KSkpIHx8ICFm b3JjZV84Yml0KSB7DQo+ID4gKwkJdTMyICpwdHIgPSAodTMyICopYnVmOw0KPiA+ICsNCj4gPiAr CQlsZW4gLz0gNDsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspDQo+ID4gKwkJCXdy aXRlbChwdHJbaV0sIHhuZmMtPmJ1Zl9hZGRyKTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZm9y IChpID0gMDsgaSA8IGxlbjsgaSsrKQ0KPiA+ICsJCQl3cml0ZWIoYnVmW2ldLCB4bmZjLT5idWZf YWRkcik7DQo+ID4gKwl9DQo+ID4gKwlpZiAoZm9yY2VfOGJpdCkNCj4gPiArCQlwbDM1M19uZmNf Zm9yY2VfYnl0ZV9hY2Nlc3MoY2hpcCwgZmFsc2UpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW50IHBsMzUzX3dhaXRfZm9yX2VjY19kb25lKHZvaWQpDQo+ID4gK3sNCj4gPiArCXVuc2ln bmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBQTDM1M19OQU5EX0VDQ19CVVNZX1RJTUVPVVQ7 DQo+ID4gKw0KPiA+ICsJZG8gew0KPiA+ICsJCWlmIChwbDM1M19zbWNfZWNjX2lzX2J1c3koKSkN Cj4gPiArCQkJY3B1X3JlbGF4KCk7DQo+ID4gKwkJZWxzZQ0KPiA+ICsJCQlicmVhazsNCj4gPiAr CX0gd2hpbGUgKCF0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXQpKTsNCj4gPiArDQo+ID4g KwlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSkgew0KPiA+ICsJCXByX2Vycigi JXMgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7DQo+ID4gKwkJcmV0dXJuIC1FVElNRURPVVQ7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgKiBwbDM1M19uYW5kX2NhbGN1bGF0ZV9od2VjYyAtIENhbGN1bGF0ZSBIYXJkd2FyZSBF Q0MNCj4gPiArICogQG10ZDoJUG9pbnRlciB0byB0aGUgbXRkX2luZm8gc3RydWN0dXJlDQo+ID4g KyAqIEBkYXRhOglQb2ludGVyIHRvIHRoZSBwYWdlIGRhdGENCj4gPiArICogQGVjYzoJUG9pbnRl ciB0byB0aGUgRUNDIGJ1ZmZlciB3aGVyZSBFQ0MgZGF0YSBuZWVkcyB0byBiZSBzdG9yZWQNCj4g PiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIEhhcmR3YXJlIEVDQyBk YXRhIGZyb20gdGhlIGNvbnRyb2xsZXIgYW5kIHJldHVybnMNCj4gPiArICogRUNDIGRhdGEgYmFj ayB0byB0aGUgTVREIHN1YnN5c3RlbS4NCj4gPiArICogSXQgb3BlcmF0ZXMgb24gYSBudW1iZXIg b2YgNTEyIGJ5dGUgYmxvY2tzIG9mIE5BTkQgbWVtb3J5IGFuZCBjYW4gYmUNCj4gPiArICogcHJv Z3JhbW1lZCB0byBzdG9yZSB0aGUgRUNDIGNvZGVzIGFmdGVyIHRoZSBkYXRhIGluIG1lbW9yeS4g Rm9yIHdyaXRlcywNCj4gPiArICogdGhlIEVDQyBpcyB3cml0dGVuIHRvIHRoZSBzcGFyZSBhcmVh IG9mIHRoZSBwYWdlLiBGb3IgcmVhZHMsIHRoZSByZXN1bHQgb2YNCj4gPiArICogYSBibG9jayBF Q0MgY2hlY2sgYXJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBkZXZpY2UgZHJpdmVyLg0KPiA+ICsg Kg0KPiA+ICsgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiArICogfCAgICAgICAgICAgICAgIG4gKiA1 MTIgYmxvY2tzICAgICAgICAgICAgICAgICAgfCBleHRyYSAgfCBlY2MgICAgfCAgICAgfA0KPiA+ ICsgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJs b2NrICB8IGNvZGVzICB8ICAgICB8DQo+ID4gKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICsgKg0K PiA+ICsgKiBUaGUgRUNDIGNhbGN1bGF0aW9uIHVzZXMgYSBzaW1wbGUgSGFtbWluZyBjb2RlLCB1 c2luZyAxLWJpdCBjb3JyZWN0aW9uIDItYml0DQo+ID4gKyAqIGRldGVjdGlvbi4gSXQgc3RhcnRz IHdoZW4gYSB2YWxpZCByZWFkIG9yIHdyaXRlIGNvbW1hbmQgd2l0aCBhIDUxMiBieXRlDQo+ID4g KyAqIGFsaWduZWQgYWRkcmVzcyBpcyBkZXRlY3RlZCBvbiB0aGUgbWVtb3J5IGludGVyZmFjZS4N Cj4gPiArICoNCj4gPiArICogUmV0dXJuOgkwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3IgdmFsdWUgb24g ZmFpbHVyZQ0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBwbDM1M19uYW5kX2NhbGN1bGF0ZV9o d2VjYyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLA0KPiA+ICsJCQkJICAgICAgY29uc3QgdTggKmRh dGEsIHU4ICplY2MpDQo+ID4gK3sNCj4gPiArCXUzMiBlY2NfdmFsdWU7DQo+ID4gKwl1OCBjaHVu aywgZWNjX2J5dGUsIGVjY19zdGF0dXM7DQo+ID4gKw0KPiA+ICsJZm9yIChjaHVuayA9IDA7IGNo dW5rIDwgUEwzNTNfTUFYX0VDQ19DSFVOS1M7IGNodW5rKyspIHsNCj4gPiArCQkvKiBSZWFkIEVD QyB2YWx1ZSBmb3IgZWFjaCBibG9jayAqLw0KPiA+ICsJCWVjY192YWx1ZSA9IHBsMzUzX3NtY19n ZXRfZWNjX3ZhbChjaHVuayk7DQo+ID4gKwkJZWNjX3N0YXR1cyA9IChlY2NfdmFsdWUgPj4gUEwz NTNfTkFORF9FQ0NfVkFMSURfU0hJRlQpOw0KPiA+ICsNCj4gPiArCQkvKiBFQ0MgdmFsdWUgdmFs aWQgKi8NCj4gPiArCQlpZiAoZWNjX3N0YXR1cyAmIFBMMzUzX05BTkRfRUNDX1ZBTElEX01BU0sp IHsNCj4gPiArCQkJZm9yIChlY2NfYnl0ZSA9IDA7IGVjY19ieXRlIDwgUEwzNTNfTUFYX0VDQ19C WVRFUzsNCj4gPiArCQkJICAgICBlY2NfYnl0ZSsrKSB7DQo+ID4gKwkJCQkvKiBDb3B5IEVDQyBi eXRlcyB0byBNVEQgYnVmZmVyICovDQo+ID4gKwkJCQkqZWNjID0gfmVjY192YWx1ZSAmIDB4RkY7 DQo+ID4gKwkJCQllY2NfdmFsdWUgPSBlY2NfdmFsdWUgPj4gODsNCj4gPiArCQkJCWVjYysrOw0K PiA+ICsJCQl9DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJcHJfd2FybigiJXMgc3RhdHVzIGZh aWxlZFxuIiwgX19mdW5jX18pOw0KPiA+ICsJCQlyZXR1cm4gLTE7DQo+ID4gKwkJfQ0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICogcGwzNTNfbmFuZF9jb3JyZWN0X2RhdGEgLSBFQ0MgY29ycmVjdGlvbiBmdW5jdGlvbg0KPiA+ ICsgKiBAbXRkOglQb2ludGVyIHRvIHRoZSBtdGRfaW5mbyBzdHJ1Y3R1cmUNCj4gPiArICogQGJ1 ZjoJUG9pbnRlciB0byB0aGUgcGFnZSBkYXRhDQo+ID4gKyAqIEByZWFkX2VjYzoJUG9pbnRlciB0 byB0aGUgRUNDIHZhbHVlIHJlYWQgZnJvbSBzcGFyZSBkYXRhIGFyZWENCj4gPiArICogQGNhbGNf ZWNjOglQb2ludGVyIHRvIHRoZSBjYWxjdWxhdGVkIEVDQyB2YWx1ZQ0KPiA+ICsgKg0KPiA+ICsg KiBUaGlzIGZ1bmN0aW9uIGNvcnJlY3RzIHRoZSBFQ0Mgc2luZ2xlIGJpdCBlcnJvcnMgJiBkZXRl Y3RzIDItYml0IGVycm9ycy4NCj4gPiArICoNCj4gPiArICogUmV0dXJuOgkwIGlmIG5vIEVDQyBl cnJvcnMgZm91bmQNCj4gPiArICoJCTEgaWYgc2luZ2xlIGJpdCBlcnJvciBmb3VuZCBhbmQgY29y cmVjdGVkLg0KPiA+ICsgKgkJLTEgaWYgbXVsdGlwbGUgdW5jb3JyZWN0YWJsZSBFQ0MgZXJyb3Jz IGZvdW5kLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBwbDM1M19uYW5kX2NvcnJlY3RfZGF0 YShzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1bnNpZ25lZCBjaGFyICpidWYsDQo+ID4gKwkJCQkg ICB1bnNpZ25lZCBjaGFyICpyZWFkX2VjYywNCj4gPiArCQkJCSAgIHVuc2lnbmVkIGNoYXIgKmNh bGNfZWNjKQ0KPiANCj4gSXNuJ3QgaXQgYSByZWd1bGFyIEhhbW1pbmcgc29mdHdhcmUgRUNDIGFs Z29yaXRobT8gQ2FuJ3QgeW91IHJlLXVzZSB0aGUNCj4gaW1wbGVtZW50YXRpb24gYWxyZWFkeSBl eGlzdGluZz8NClRoaXMgaXMgY2FsbGVkIGZyb20gcGwzNTNfbmFuZF9yZWFkX3BhZ2VfaHdlY2Mg dG8gY2hlY2sgdGhlIGVycm9ycyB1c2luZw0KY2hpcC0+ZWNjLmNvcnJlY3QobXRkLCBwLCAmZWNj X2NvZGVbaV0sICZlY2NfY2FsY1tpXSksIG9uY2UgdGhlIHBhZ2UgcmVhZChod2VjYykgaXMgZG9u ZS4NCkFuZCB0aGlzIG5lZWRzIHNvbWUgY3VzdG9tIG1hc2tzIGRlZmluZWQgYmVsb3cuDQo+IA0K PiA+ICt7DQo+ID4gKwl1bnNpZ25lZCBjaGFyIGJpdF9hZGRyOw0KPiA+ICsJdW5zaWduZWQgaW50 IGJ5dGVfYWRkcjsNCj4gPiArCXVuc2lnbmVkIHNob3J0IGVjY19vZGQsIGVjY19ldmVuLCByZWFk X2VjY19sb3dlciwgcmVhZF9lY2NfdXBwZXI7DQo+ID4gKwl1bnNpZ25lZCBzaG9ydCBjYWxjX2Vj Y19sb3dlciwgY2FsY19lY2NfdXBwZXI7DQo+ID4gKw0KPiA+ICsJcmVhZF9lY2NfbG93ZXIgPSAo cmVhZF9lY2NbMF0gfCAocmVhZF9lY2NbMV0gPDwgOCkpICYNCj4gPiArCQkJICBQTDM1M19FQ0Nf QklUX01BU0s7DQo+ID4gKwlyZWFkX2VjY191cHBlciA9ICgocmVhZF9lY2NbMV0gPj4gNCkgfCAo cmVhZF9lY2NbMl0gPDwgNCkpICYNCj4gPiArCQkJICBQTDM1M19FQ0NfQklUX01BU0s7DQo+ID4g Kw0KPiA+ICsJY2FsY19lY2NfbG93ZXIgPSAoY2FsY19lY2NbMF0gfCAoY2FsY19lY2NbMV0gPDwg OCkpICYNCj4gPiArCQkJICBQTDM1M19FQ0NfQklUX01BU0s7DQo+ID4gKwljYWxjX2VjY191cHBl ciA9ICgoY2FsY19lY2NbMV0gPj4gNCkgfCAoY2FsY19lY2NbMl0gPDwgNCkpICYNCj4gPiArCQkJ ICBQTDM1M19FQ0NfQklUX01BU0s7DQo+ID4gKw0KPiA+ICsJZWNjX29kZCA9IHJlYWRfZWNjX2xv d2VyIF4gY2FsY19lY2NfbG93ZXI7DQo+ID4gKwllY2NfZXZlbiA9IHJlYWRfZWNjX3VwcGVyIF4g Y2FsY19lY2NfdXBwZXI7DQo+ID4gKw0KPiA+ICsJLyogbm8gZXJyb3IgKi8NCj4gPiArCWlmICgh ZWNjX29kZCAmJiAhZWNjX2V2ZW4pDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsJaWYg KGVjY19vZGQgPT0gKH5lY2NfZXZlbiAmIFBMMzUzX0VDQ19CSVRfTUFTSykpIHsNCj4gPiArCQkv KiBiaXRzIFsxMTozXSBvZiBlcnJvciBjb2RlIGlzIGJ5dGUgb2Zmc2V0ICovDQo+ID4gKwkJYnl0 ZV9hZGRyID0gKGVjY19vZGQgPj4gMykgJiBQTDM1M19FQ0NfQklUU19CWVRFT0ZGX01BU0s7DQo+ ID4gKwkJLyogYml0cyBbMjowXSBvZiBlcnJvciBjb2RlIGlzIGJpdCBvZmZzZXQgKi8NCj4gPiAr CQliaXRfYWRkciA9IGVjY19vZGQgJiBQTDM1M19FQ0NfQklUU19CSVRPRkZfTUFTSzsNCj4gPiAr CQkvKiBUb2dnbGluZyBlcnJvciBiaXQgKi8NCj4gPiArCQlidWZbYnl0ZV9hZGRyXSBePSAoQklU KGJpdF9hZGRyKSk7DQo+ID4gKwkJcmV0dXJuIDE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyog b25lIGVycm9yIGluIHBhcml0eSAqLw0KPiA+ICsJaWYgKGh3ZWlnaHQzMihlY2Nfb2RkIHwgZWNj X2V2ZW4pID09IDEpDQo+ID4gKwkJcmV0dXJuIDE7DQo+ID4gKw0KPiA+ICsJLyogVW5jb3JyZWN0 YWJsZSBlcnJvciAqLw0KPiA+ICsJcmV0dXJuIC0xOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgdm9pZCBwbDM1M19wcmVwYXJlX2NtZChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLA0KPiA+ICsJ CQkgICAgICBpbnQgcGFnZSwgaW50IGNvbHVtbiwgaW50IHN0YXJ0X2NtZCwgaW50IGVuZF9jbWQs DQo+ID4gKwkJCSAgICAgIGJvb2wgcmVhZCkNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgbG9uZyBk YXRhX3BoYXNlX2FkZHI7DQo+ID4gKwl1MzIgZW5kX2NtZF92YWxpZCA9IDA7DQo+ID4gKwl1bnNp Z25lZCBsb25nIGNtZF9waGFzZV9hZGRyID0gMCwgY21kX3BoYXNlX2RhdGEgPSAwOw0KPiA+ICsJ c3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsNCj4gPiArDQo+ID4gKwlz dHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyICp4bmZjID0NCj4gPiArCQljb250YWluZXJfb2Yo Y2hpcCwgc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciwgY2hpcCk7DQo+ID4gKw0KPiA+ICsJ ZW5kX2NtZF92YWxpZCA9IHJlYWQgPyAxIDogMDsNCj4gPiArDQo+ID4gKwljbWRfcGhhc2VfYWRk ciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+cmVncyArDQo+ID4gKwkJCSAoKHhuZmMt PmFkZHJfY3ljbGVzDQo+ID4gKwkJCSA8PCBBRERSX0NZQ0xFU19TSElGVCkgfA0KPiA+ICsJCQkg KGVuZF9jbWRfdmFsaWQgPDwgRU5EX0NNRF9WQUxJRF9TSElGVCkgfA0KPiA+ICsJCQkgKENPTU1B TkRfUEhBU0UpIHwNCj4gPiArCQkJIChlbmRfY21kIDw8IEVORF9DTURfU0hJRlQpIHwNCj4gPiAr CQkJIChzdGFydF9jbWQgPDwgU1RBUlRfQ01EX1NISUZUKSk7DQo+ID4gKw0KPiA+ICsJLyogR2V0 IHRoZSBkYXRhIHBoYXNlIGFkZHJlc3MgKi8NCj4gPiArCWRhdGFfcGhhc2VfYWRkciA9ICh1bnNp Z25lZCBsb25nIF9fZm9yY2UpeG5mYy0+cmVncyArDQo+ID4gKwkJCSAgKCgweDAgPDwgQ0xFQVJf Q1NfU0hJRlQpIHwNCj4gPiArCQkJICAoMCA8PCBFTkRfQ01EX1ZBTElEX1NISUZUKSB8DQo+ID4g KwkJCSAgKERBVEFfUEhBU0UpIHwNCj4gPiArCQkJICAoZW5kX2NtZCA8PCBFTkRfQ01EX1NISUZU KSB8DQo+ID4gKwkJCSAgKDB4MCA8PCBFQ0NfTEFTVF9TSElGVCkpOw0KPiA+ICsNCj4gPiArCXhu ZmMtPmJ1Zl9hZGRyID0gKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpZGF0YV9waGFzZV9hZGRyOw0K PiA+ICsNCj4gPiArCWlmIChjaGlwLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikNCj4gPiAr CQljb2x1bW4gLz0gMjsNCj4gPiArCWNtZF9waGFzZV9kYXRhID0gY29sdW1uOw0KPiA+ICsJaWYg KG10ZC0+d3JpdGVzaXplID4gUEwzNTNfTkFORF9FQ0NfU0laRSkgew0KPiA+ICsJCWNtZF9waGFz ZV9kYXRhIHw9IHBhZ2UgPDwgMTY7DQo+ID4gKwkJLyogQW5vdGhlciBhZGRyZXNzIGN5Y2xlIGZv ciBkZXZpY2VzID4gMTI4TWlCICovDQo+ID4gKwkJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX1JP V19BRERSXzMpIHsNCj4gPiArCQkJd3JpdGVsX3JlbGF4ZWQoY21kX3BoYXNlX2RhdGEsDQo+ID4g KwkJCQkgICAgICAgKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpY21kX3BoYXNlX2FkZHIpOw0KPiA+ ICsJCQljbWRfcGhhc2VfZGF0YSA9IChwYWdlID4+IDE2KTsNCj4gPiArCQl9DQo+ID4gKwl9IGVs c2Ugew0KPiA+ICsJCWNtZF9waGFzZV9kYXRhIHw9IHBhZ2UgPDwgODsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwl3cml0ZWxfcmVsYXhlZChjbWRfcGhhc2VfZGF0YSwgKHZvaWQgX19pb21lbSAqIF9f Zm9yY2UpY21kX3BoYXNlX2FkZHIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICog cGwzNTNfbmFuZF9yZWFkX29vYiAtIFtSRVBMQUNFQUJMRV0gdGhlIG1vc3QgY29tbW9uIE9PQiBk YXRhIHJlYWQgZnVuY3Rpb24NCj4gPiArICogQG10ZDoJUG9pbnRlciB0byB0aGUgbXRkX2luZm8g c3RydWN0dXJlDQo+ID4gKyAqIEBjaGlwOglQb2ludGVyIHRvIHRoZSBuYW5kX2NoaXAgc3RydWN0 dXJlDQo+ID4gKyAqIEBwYWdlOglQYWdlIG51bWJlciB0byByZWFkDQo+ID4gKyAqDQo+ID4gKyAq IFJldHVybjoJQWx3YXlzIHJldHVybiB6ZXJvDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHBs MzUzX25hbmRfcmVhZF9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwNCj4gPiArCQkJICAgICAg IGludCBwYWdlKQ0KPiA+ICt7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGRhdGFfcGhhc2VfYWRkcjsN Cj4gPiArCXU4ICpwOw0KPiA+ICsJc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9 DQo+ID4gKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIs IGNoaXApOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBuYW5kX29mZnNldCA9ICh1bnNpZ25lZCBsb25n IF9fZm9yY2UpeG5mYy0+cmVnczsNCj4gPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90 b19tdGQoY2hpcCk7DQo+ID4gKw0KPiA+ICsJY2hpcC0+cGFnZWJ1ZiA9IC0xOw0KPiA+ICsJaWYg KG10ZC0+d3JpdGVzaXplIDwgUEwzNTNfTkFORF9FQ0NfU0laRSkNCj4gPiArCQlyZXR1cm4gMDsN Cj4gPiArDQo+ID4gKwlwbDM1M19wcmVwYXJlX2NtZChjaGlwLCBwYWdlLCBtdGQtPndyaXRlc2l6 ZSwgTkFORF9DTURfUkVBRDAsDQo+ID4gKwkJCSAgTkFORF9DTURfUkVBRFNUQVJULCAxKTsNCj4g PiArDQo+ID4gKwluYW5kX3dhaXRfcmVhZHkoY2hpcCk7DQo+ID4gKw0KPiA+ICsJcCA9IGNoaXAt Pm9vYl9wb2k7DQo+ID4gKwlwbDM1M19uYW5kX3JlYWRfZGF0YV9vcChjaGlwLCBwLA0KPiA+ICsJ CQkJKG10ZC0+b29ic2l6ZSAtDQo+ID4gKwkJCQlQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVO R1RIKSwgZmFsc2UpOw0KPiA+ICsJcCArPSAobXRkLT5vb2JzaXplIC0gUEwzNTNfTkFORF9MQVNU X1RSQU5TRkVSX0xFTkdUSCk7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9u ZyBfX2ZvcmNlKXhuZmMtPmJ1Zl9hZGRyOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyIC09IG5hbmRf b2Zmc2V0Ow0KPiA+ICsJZGF0YV9waGFzZV9hZGRyIHw9IFBMMzUzX05BTkRfQ0xFQVJfQ1M7DQo+ ID4gKwlkYXRhX3BoYXNlX2FkZHIgKz0gbmFuZF9vZmZzZXQ7DQo+ID4gKwl4bmZjLT5idWZfYWRk ciA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2VfYWRkcjsNCj4gPiArCXBsMzUz X25hbmRfcmVhZF9kYXRhX29wKGNoaXAsIHAsIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5H VEgsDQo+ID4gKwkJCQlmYWxzZSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgKiBwbDM1M19uYW5kX3dyaXRlX29vYiAtIFtSRVBMQUNFQUJM RV0gdGhlIG1vc3QgY29tbW9uIE9PQiBkYXRhIHdyaXRlDQo+IGZ1bmN0aW9uDQo+ID4gKyAqIEBt dGQ6CVBvaW50ZXIgdG8gdGhlIG10ZCBpbmZvIHN0cnVjdHVyZQ0KPiA+ICsgKiBAY2hpcDoJUG9p bnRlciB0byB0aGUgTkFORCBjaGlwIGluZm8gc3RydWN0dXJlDQo+ID4gKyAqIEBwYWdlOglQYWdl IG51bWJlciB0byB3cml0ZQ0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46CVplcm8gb24gc3VjY2Vz cyBhbmQgRUlPIG9uIGZhaWx1cmUNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFu ZF93cml0ZV9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwNCj4gPiArCQkJCWludCBwYWdlKQ0K PiA+ICt7DQo+ID4gKwljb25zdCB1OCAqYnVmID0gY2hpcC0+b29iX3BvaTsNCj4gPiArCXVuc2ln bmVkIGxvbmcgZGF0YV9waGFzZV9hZGRyOw0KPiA+ICsJc3RydWN0IHBsMzUzX25hbmRfY29udHJv bGxlciAqeG5mYyA9DQo+ID4gKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwbDM1M19uYW5k X2NvbnRyb2xsZXIsIGNoaXApOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBuYW5kX29mZnNldCA9ICh1 bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+cmVnczsNCj4gPiArCXN0cnVjdCBtdGRfaW5mbyAq bXRkID0gbmFuZF90b19tdGQoY2hpcCk7DQo+ID4gKwl1MzIgYWRkcmN5Y2xlcyA9IDA7DQo+ID4g Kw0KPiA+ICsJY2hpcC0+cGFnZWJ1ZiA9IC0xOw0KPiA+ICsJYWRkcmN5Y2xlcyA9IHhuZmMtPmFk ZHJfY3ljbGVzOw0KPiA+ICsJcGwzNTNfcHJlcGFyZV9jbWQoY2hpcCwgcGFnZSwgbXRkLT53cml0 ZXNpemUsIE5BTkRfQ01EX1NFUUlOLA0KPiA+ICsJCQkgIE5BTkRfQ01EX1BBR0VQUk9HLCAwKTsN Cj4gPiArDQo+ID4gKwlwbDM1M19uYW5kX3dyaXRlX2RhdGFfb3AoY2hpcCwgYnVmLA0KPiA+ICsJ CQkJIChtdGQtPm9vYnNpemUgLQ0KPiA+ICsJCQkJIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9M RU5HVEgpLCBmYWxzZSk7DQo+ID4gKwlidWYgKz0gKG10ZC0+b29ic2l6ZSAtIFBMMzUzX05BTkRf TEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0KPiA+ICsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciA9ICh1 bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+YnVmX2FkZHI7DQo+ID4gKwlkYXRhX3BoYXNlX2Fk ZHIgLT0gbmFuZF9vZmZzZXQ7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgfD0gUEwzNTNfTkFORF9D TEVBUl9DUzsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciB8PSAoMSA8PCBFTkRfQ01EX1ZBTElEX1NI SUZUKTsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciArPSBuYW5kX29mZnNldDsNCj4gPiArCXhuZmMt PmJ1Zl9hZGRyID0gKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpZGF0YV9waGFzZV9hZGRyOw0KPiA+ ICsJcGwzNTNfbmFuZF93cml0ZV9kYXRhX29wKGNoaXAsIGJ1ZiwgUEwzNTNfTkFORF9MQVNUX1RS QU5TRkVSX0xFTkdUSCwNCj4gPiArCQkJCSBmYWxzZSk7DQo+ID4gKwluYW5kX3dhaXRfcmVhZHko Y2hpcCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgKiBwbDM1M19uYW5kX3JlYWRfcGFnZV9yYXcgLSBbSW50ZXJuXSByZWFkIHJhdyBwYWdl IGRhdGEgd2l0aG91dCBlY2MNCj4gPiArICogQG10ZDoJCVBvaW50ZXIgdG8gdGhlIG10ZCBpbmZv IHN0cnVjdHVyZQ0KPiA+ICsgKiBAY2hpcDoJCVBvaW50ZXIgdG8gdGhlIE5BTkQgY2hpcCBpbmZv IHN0cnVjdHVyZQ0KPiA+ICsgKiBAYnVmOgkJUG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXINCj4g PiArICogQG9vYl9yZXF1aXJlZDoJQ2FsbGVyIHJlcXVpcmVzIE9PQiBkYXRhIHJlYWQgdG8gY2hp cC0+b29iX3BvaQ0KPiA+ICsgKiBAcGFnZToJCVBhZ2UgbnVtYmVyIHRvIHJlYWQNCj4gPiArICoN Cj4gPiArICogUmV0dXJuOglBbHdheXMgcmV0dXJuIHplcm8NCj4gPiArICovDQo+ID4gK3N0YXRp YyBpbnQgcGwzNTNfbmFuZF9yZWFkX3BhZ2VfcmF3KHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsDQo+ ID4gKwkJCQkgICAgdTggKmJ1ZiwgaW50IG9vYl9yZXF1aXJlZCwgaW50IHBhZ2UpDQo+ID4gK3sN Cj4gPiArCXVuc2lnbmVkIGxvbmcgZGF0YV9waGFzZV9hZGRyOw0KPiA+ICsJdTggKnA7DQo+ID4g KwlzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyICp4bmZjID0NCj4gPiArCQljb250YWluZXJf b2YoY2hpcCwgc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciwgY2hpcCk7DQo+ID4gKwl1bnNp Z25lZCBsb25nIG5hbmRfb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSl4bmZjLT5yZWdz Ow0KPiA+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsNCj4gPiAr DQo+ID4gKwlwbDM1M19wcmVwYXJlX2NtZChjaGlwLCBwYWdlLCAwLCBOQU5EX0NNRF9SRUFEMCwN Cj4gPiArCQkJICBOQU5EX0NNRF9SRUFEU1RBUlQsIDEpOw0KPiA+ICsJbmFuZF93YWl0X3JlYWR5 KGNoaXApOw0KPiA+ICsJcGwzNTNfbmFuZF9yZWFkX2RhdGFfb3AoY2hpcCwgYnVmLCBtdGQtPndy aXRlc2l6ZSwgZmFsc2UpOw0KPiA+ICsJcCA9IGNoaXAtPm9vYl9wb2k7DQo+ID4gKwlwbDM1M19u YW5kX3JlYWRfZGF0YV9vcChjaGlwLCBwLA0KPiA+ICsJCQkJKG10ZC0+b29ic2l6ZSAtDQo+ID4g KwkJCQlQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKSwgZmFsc2UpOw0KPiA+ICsJcCAr PSAobXRkLT5vb2JzaXplIC0gUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCk7DQo+ID4g Kw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSl4bmZjLT5i dWZfYWRkcjsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciAtPSBuYW5kX29mZnNldDsNCj4gPiArCWRh dGFfcGhhc2VfYWRkciB8PSBQTDM1M19OQU5EX0NMRUFSX0NTOw0KPiA+ICsJZGF0YV9waGFzZV9h ZGRyICs9IG5hbmRfb2Zmc2V0Ow0KPiA+ICsJeG5mYy0+YnVmX2FkZHIgPSAodm9pZCBfX2lvbWVt ICogX19mb3JjZSlkYXRhX3BoYXNlX2FkZHI7DQo+ID4gKw0KPiA+ICsJcGwzNTNfbmFuZF9yZWFk X2RhdGFfb3AoY2hpcCwgcCwgUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCwNCj4gPiAr CQkJCWZhbHNlKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAqIHBsMzUzX25hbmRfd3JpdGVfcGFnZV9yYXcgLSBbSW50ZXJuXSByYXcgcGFn ZSB3cml0ZSBmdW5jdGlvbg0KPiA+ICsgKiBAbXRkOgkJUG9pbnRlciB0byB0aGUgbXRkIGluZm8g c3RydWN0dXJlDQo+ID4gKyAqIEBjaGlwOgkJUG9pbnRlciB0byB0aGUgTkFORCBjaGlwIGluZm8g c3RydWN0dXJlDQo+ID4gKyAqIEBidWY6CQlQb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlcg0KPiA+ ICsgKiBAb29iX3JlcXVpcmVkOglDYWxsZXIgcmVxdWlyZXMgT09CIGRhdGEgcmVhZCB0byBjaGlw LT5vb2JfcG9pDQo+ID4gKyAqIEBwYWdlOgkJUGFnZSBudW1iZXIgdG8gd3JpdGUNCj4gPiArICoN Cj4gPiArICogUmV0dXJuOglBbHdheXMgcmV0dXJuIHplcm8NCj4gPiArICovDQo+ID4gK3N0YXRp YyBpbnQgcGwzNTNfbmFuZF93cml0ZV9wYWdlX3JhdyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLA0K PiA+ICsJCQkJICAgICBjb25zdCB1OCAqYnVmLCBpbnQgb29iX3JlcXVpcmVkLA0KPiA+ICsJCQkJ ICAgICBpbnQgcGFnZSkNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgbG9uZyBkYXRhX3BoYXNlX2Fk ZHI7DQo+ID4gKwl1OCAqcDsNCj4gPiArCXN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIgKnhu ZmMgPQ0KPiA+ICsJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9s bGVyLCBjaGlwKTsNCj4gPiArCXVuc2lnbmVkIGxvbmcgbmFuZF9vZmZzZXQgPSAodW5zaWduZWQg bG9uZyBfX2ZvcmNlKXhuZmMtPnJlZ3M7DQo+ID4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5h bmRfdG9fbXRkKGNoaXApOw0KPiA+ICsNCj4gPiArCXBsMzUzX3ByZXBhcmVfY21kKGNoaXAsIHBh Z2UsIDAsIE5BTkRfQ01EX1NFUUlOLA0KPiA+ICsJCQkgIE5BTkRfQ01EX1BBR0VQUk9HLCAwKTsN Cj4gPiArCXBsMzUzX25hbmRfd3JpdGVfZGF0YV9vcChjaGlwLCBidWYsIG10ZC0+d3JpdGVzaXpl LCBmYWxzZSk7DQo+ID4gKwlwID0gY2hpcC0+b29iX3BvaTsNCj4gPiArCXBsMzUzX25hbmRfd3Jp dGVfZGF0YV9vcChjaGlwLCBwLA0KPiA+ICsJCQkJIChtdGQtPm9vYnNpemUgLQ0KPiA+ICsJCQkJ IFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpLCBmYWxzZSk7DQo+ID4gKwlwICs9ICht dGQtPm9vYnNpemUgLSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsNCj4gPiArDQo+ ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMtPmJ1Zl9h ZGRyOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyIC09IG5hbmRfb2Zmc2V0Ow0KPiA+ICsJZGF0YV9w aGFzZV9hZGRyIHw9IFBMMzUzX05BTkRfQ0xFQVJfQ1M7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIg fD0gKDEgPDwgRU5EX0NNRF9WQUxJRF9TSElGVCk7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgKz0g bmFuZF9vZmZzZXQ7DQo+ID4gKwl4bmZjLT5idWZfYWRkciA9ICh2b2lkIF9faW9tZW0gKiBfX2Zv cmNlKWRhdGFfcGhhc2VfYWRkcjsNCj4gPiArCXBsMzUzX25hbmRfd3JpdGVfZGF0YV9vcChjaGlw LCBwLCBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RILA0KPiA+ICsJCQkJIGZhbHNlKTsN Cj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAq IG5hbmRfd3JpdGVfcGFnZV9od2VjYyAtIEhhcmR3YXJlIEVDQyBiYXNlZCBwYWdlIHdyaXRlIGZ1 bmN0aW9uDQo+ID4gKyAqIEBtdGQ6CQlQb2ludGVyIHRvIHRoZSBtdGQgaW5mbyBzdHJ1Y3R1cmUN Cj4gPiArICogQGNoaXA6CQlQb2ludGVyIHRvIHRoZSBOQU5EIGNoaXAgaW5mbyBzdHJ1Y3R1cmUN Cj4gPiArICogQGJ1ZjoJCVBvaW50ZXIgdG8gdGhlIGRhdGEgYnVmZmVyDQo+ID4gKyAqIEBvb2Jf cmVxdWlyZWQ6CUNhbGxlciByZXF1aXJlcyBPT0IgZGF0YSByZWFkIHRvIGNoaXAtPm9vYl9wb2kN Cj4gPiArICogQHBhZ2U6CQlQYWdlIG51bWJlciB0byB3cml0ZQ0KPiA+ICsgKg0KPiA+ICsgKiBU aGlzIGZ1bmN0aW9ucyB3cml0ZXMgZGF0YSBhbmQgaGFyZHdhcmUgZ2VuZXJhdGVkIEVDQyB2YWx1 ZXMgaW4gdG8gdGhlIHBhZ2UuDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJQWx3YXlzIHJldHVy biB6ZXJvDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRfd3JpdGVfcGFnZV9o d2VjYyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLA0KPiA+ICsJCQkJICAgICAgIGNvbnN0IHU4ICpi dWYsIGludCBvb2JfcmVxdWlyZWQsDQo+ID4gKwkJCQkgICAgICAgaW50IHBhZ2UpDQo+ID4gK3sN Cj4gPiArCWludCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7DQo+ID4gKwlpbnQgZWNjc3RlcHMg PSBjaGlwLT5lY2Muc3RlcHM7DQo+ID4gKwl1OCAqZWNjX2NhbGMgPSBjaGlwLT5lY2MuY2FsY19i dWY7DQo+ID4gKwl1OCAqb29iX3B0cjsNCj4gPiArCWNvbnN0IHU4ICpwID0gYnVmOw0KPiA+ICsJ dTMyIHJldDsNCj4gPiArCXVuc2lnbmVkIGxvbmcgZGF0YV9waGFzZV9hZGRyOw0KPiA+ICsJc3Ry dWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9DQo+ID4gKwkJY29udGFpbmVyX29mKGNo aXAsIHN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIsIGNoaXApOw0KPiA+ICsJdW5zaWduZWQg bG9uZyBuYW5kX29mZnNldCA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+cmVnczsNCj4g PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQoY2hpcCk7DQo+ID4gKw0KPiA+ ICsJcGwzNTNfcHJlcGFyZV9jbWQoY2hpcCwgcGFnZSwgMCwgTkFORF9DTURfU0VRSU4sDQo+ID4g KwkJCSAgTkFORF9DTURfUEFHRVBST0csIDApOw0KPiA+ICsNCj4gPiArCWZvciAoIDsgKGVjY3N0 ZXBzIC0gMSk7IGVjY3N0ZXBzLS0pIHsNCj4gPiArCQlwbDM1M19uYW5kX3dyaXRlX2RhdGFfb3Ao Y2hpcCwgcCwgZWNjc2l6ZSwgZmFsc2UpOw0KPiA+ICsJCXAgKz0gZWNjc2l6ZTsNCj4gPiArCX0N Cj4gPiArCXBsMzUzX25hbmRfd3JpdGVfZGF0YV9vcChjaGlwLCBwLA0KPiA+ICsJCQkJIChlY2Nz aXplIC0gUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCksDQo+ID4gKwkJCQkgZmFsc2Up Ow0KPiA+ICsJcCArPSAoZWNjc2l6ZSAtIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgp Ow0KPiA+ICsNCj4gPiArCS8qIFNldCBFQ0MgTGFzdCBiaXQgdG8gMSAqLw0KPiA+ICsJZGF0YV9w aGFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSl4bmZjLT5idWZfYWRkcjsNCj4gPiAr CWRhdGFfcGhhc2VfYWRkciAtPSBuYW5kX29mZnNldDsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciB8 PSBQTDM1M19OQU5EX0VDQ19MQVNUOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyICs9IG5hbmRfb2Zm c2V0Ow0KPiA+ICsJeG5mYy0+YnVmX2FkZHIgPSAodm9pZCBfX2lvbWVtICogX19mb3JjZSlkYXRh X3BoYXNlX2FkZHI7DQo+ID4gKwlwbDM1M19uYW5kX3dyaXRlX2RhdGFfb3AoY2hpcCwgcCwgUEwz NTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCwNCj4gPiArCQkJCSBmYWxzZSk7DQo+ID4gKw0K PiA+ICsJLyogV2FpdCB0aWxsIHRoZSBFQ0Mgb3BlcmF0aW9uIGlzIGNvbXBsZXRlIG9yIHRpbWVv dXQgKi8NCj4gPiArCXJldCA9IHBsMzUzX3dhaXRfZm9yX2VjY19kb25lKCk7DQo+ID4gKwlpZiAo cmV0KQ0KPiA+ICsJCWRldl9lcnIoeG5mYy0+ZGV2LCAiRUNDIFRpbWVvdXRcbiIpOw0KPiA+ICsJ cCA9IGJ1ZjsNCj4gPiArCXJldCA9IGNoaXAtPmVjYy5jYWxjdWxhdGUoY2hpcCwgcCwgJmVjY19j YWxjWzBdKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4g KwkvKiBXYWl0IGZvciBFQ0MgdG8gYmUgY2FsY3VsYXRlZCBhbmQgcmVhZCB0aGUgZXJyb3IgdmFs dWVzICovDQo+ID4gKwlyZXQgPSBtdGRfb29ibGF5b3V0X3NldF9lY2NieXRlcyhtdGQsIGVjY19j YWxjLCBjaGlwLT5vb2JfcG9pLA0KPiA+ICsJCQkJCSAwLCBjaGlwLT5lY2MudG90YWwpOw0KPiA+ ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJLyogQ2xlYXIgRUNDIGxhc3Qg Yml0ICovDQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhu ZmMtPmJ1Zl9hZGRyOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyIC09IG5hbmRfb2Zmc2V0Ow0KPiA+ ICsJZGF0YV9waGFzZV9hZGRyICY9IH5QTDM1M19OQU5EX0VDQ19MQVNUOw0KPiA+ICsJZGF0YV9w aGFzZV9hZGRyICs9IG5hbmRfb2Zmc2V0Ow0KPiA+ICsJeG5mYy0+YnVmX2FkZHIgPSAodm9pZCBf X2lvbWVtICogX19mb3JjZSlkYXRhX3BoYXNlX2FkZHI7DQo+ID4gKw0KPiA+ICsJLyogV3JpdGUg dGhlIHNwYXJlIGFyZWEgd2l0aCBFQ0MgYnl0ZXMgKi8NCj4gPiArCW9vYl9wdHIgPSBjaGlwLT5v b2JfcG9pOw0KPiA+ICsJcGwzNTNfbmFuZF93cml0ZV9kYXRhX29wKGNoaXAsIG9vYl9wdHIsDQo+ ID4gKwkJCQkgKG10ZC0+b29ic2l6ZSAtDQo+ID4gKwkJCQkgUEwzNTNfTkFORF9MQVNUX1RSQU5T RkVSX0xFTkdUSCksIGZhbHNlKTsNCj4gPiArDQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5z aWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMtPmJ1Zl9hZGRyOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRy IC09IG5hbmRfb2Zmc2V0Ow0KPiA+ICsJZGF0YV9waGFzZV9hZGRyIHw9IFBMMzUzX05BTkRfQ0xF QVJfQ1M7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgfD0gKDEgPDwgRU5EX0NNRF9WQUxJRF9TSElG VCk7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgKz0gbmFuZF9vZmZzZXQ7DQo+ID4gKwl4bmZjLT5i dWZfYWRkciA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2VfYWRkcjsNCj4gPiAr CW9vYl9wdHIgKz0gKG10ZC0+b29ic2l6ZSAtIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5H VEgpOw0KPiA+ICsJcGwzNTNfbmFuZF93cml0ZV9kYXRhX29wKGNoaXAsIG9vYl9wdHIsDQo+IFBM MzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgsDQo+ID4gKwkJCQkgZmFsc2UpOw0KPiA+ICsJ bmFuZF93YWl0X3JlYWR5KGNoaXApOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICogcGwzNTNfbmFuZF9yZWFkX3BhZ2VfaHdlY2MgLSBIYXJk d2FyZSBFQ0MgYmFzZWQgcGFnZSByZWFkIGZ1bmN0aW9uDQo+ID4gKyAqIEBtdGQ6CQlQb2ludGVy IHRvIHRoZSBtdGQgaW5mbyBzdHJ1Y3R1cmUNCj4gPiArICogQGNoaXA6CQlQb2ludGVyIHRvIHRo ZSBOQU5EIGNoaXAgaW5mbyBzdHJ1Y3R1cmUNCj4gPiArICogQGJ1ZjoJCVBvaW50ZXIgdG8gdGhl IGJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGENCj4gPiArICogQG9vYl9yZXF1aXJlZDoJQ2FsbGVy IHJlcXVpcmVzIE9PQiBkYXRhIHJlYWQgdG8gY2hpcC0+b29iX3BvaQ0KPiA+ICsgKiBAcGFnZToJ CVBhZ2UgbnVtYmVyIHRvIHJlYWQNCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbnMgcmVh ZHMgZGF0YSBhbmQgY2hlY2tzIHRoZSBkYXRhIGludGVncml0eSBieSBjb21wYXJpbmcNCj4gPiAr ICogaGFyZHdhcmUgZ2VuZXJhdGVkIEVDQyB2YWx1ZXMgYW5kIHJlYWQgRUNDIHZhbHVlcyBmcm9t IHNwYXJlIGFyZWEuDQo+ID4gKyAqIFRoZXJlIGlzIGEgbGltaXRhdGlvbiBpbiBTTUMgY29udHJv bGxlciwgdGhhdCB3ZSBtdXN0IHNldCBFQ0MgTEFTVCBvbg0KPiA+ICsgKiBsYXN0IGRhdGEgcGhh c2UgYWNjZXNzLCB0byB0ZWxsIEVDQyBibG9jayBub3QgdG8gZXhwZWN0IGFueSBkYXRhIGZ1cnRo ZXIuDQo+ID4gKyAqIEV4OiAgV2hlbiBudW1iZXIgb2YgRUNDIFNURVBTIGFyZSA0LCB0aGVuIHRp bGwgMyB3ZSB3aWxsIHdyaXRlIHRvIGZsYXNoDQo+ID4gKyAqIHVzaW5nIFNNQyB3aXRoIEhXIEVD QyBlbmFibGVkLiBBbmQgZm9yIHRoZSBsYXN0IEVDQyBTVEVQLCB3ZSB3aWxsIHN1YnRyYWN0DQo+ ID4gKyAqIDRieXRlcyBmcm9tIHBhZ2Ugc2l6ZSwgYW5kIHdpbGwgaW5pdGlhdGUgYSB0cmFuc2Zl ci4gQW5kIHRoZSByZW1haW5pbmcgNCBhcw0KPiA+ICsgKiBvbmUgbW9yZSB0cmFuc2ZlciB3aXRo IEVDQ19MQVNUIGJpdCBzZXQgaW4gTkFORCBkYXRhIHBoYXNlIHJlZ2lzdGVyIHRvDQo+ID4gKyAq IG5vdGlmeSBFQ0MgYmxvY2sgbm90IHRvIGV4cGVjdCBhbnkgbW9yZSBkYXRhLiBUaGUgbGFzdCBi bG9jayBzaG91bGQgYmUgYWxpZ24NCj4gPiArICogd2l0aCBlbmQgb2YgNTEyIGJ5dGUgYmxvY2su IEJlY2F1c2Ugb2YgdGhpcyBsaW1pdGF0aW9uLCB3ZSBhcmUgbm90IHVzaW5nDQo+ID4gKyAqIGNv cmUgcm91dGluZXMuDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJMCBhbHdheXMgYW5kIHVwZGF0 ZXMgRUNDIG9wZXJhdGlvbiBzdGF0dXMgaW4gdG8gTVREIHN0cnVjdHVyZQ0KPiA+ICsgKi8NCj4g PiArc3RhdGljIGludCBwbDM1M19uYW5kX3JlYWRfcGFnZV9od2VjYyhzdHJ1Y3QgbmFuZF9jaGlw ICpjaGlwLA0KPiA+ICsJCQkJICAgICAgdTggKmJ1ZiwgaW50IG9vYl9yZXF1aXJlZCwgaW50IHBh Z2UpDQo+ID4gK3sNCj4gPiArCWludCBpLCBzdGF0LCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7 DQo+ID4gKwlpbnQgZWNjYnl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7DQo+ID4gKwlpbnQgZWNjc3Rl cHMgPSBjaGlwLT5lY2Muc3RlcHM7DQo+ID4gKwl1OCAqcCA9IGJ1ZjsNCj4gPiArCXU4ICplY2Nf Y2FsYyA9IGNoaXAtPmVjYy5jYWxjX2J1ZjsNCj4gPiArCXU4ICplY2MgPSBjaGlwLT5lY2MuY29k ZV9idWY7DQo+ID4gKwl1bnNpZ25lZCBpbnQgbWF4X2JpdGZsaXBzID0gMDsNCj4gPiArCXU4ICpv b2JfcHRyOw0KPiA+ICsJdTMyIHJldDsNCj4gPiArCXVuc2lnbmVkIGxvbmcgZGF0YV9waGFzZV9h ZGRyOw0KPiA+ICsJc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9DQo+ID4gKwkJ Y29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIsIGNoaXApOw0K PiA+ICsJdW5zaWduZWQgbG9uZyBuYW5kX29mZnNldCA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2Up eG5mYy0+cmVnczsNCj4gPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQoY2hp cCk7DQo+ID4gKw0KPiA+ICsJcGwzNTNfcHJlcGFyZV9jbWQoY2hpcCwgcGFnZSwgMCwgTkFORF9D TURfUkVBRDAsDQo+ID4gKwkJCSAgTkFORF9DTURfUkVBRFNUQVJULCAxKTsNCj4gPiArCW5hbmRf d2FpdF9yZWFkeShjaGlwKTsNCj4gPiArDQo+ID4gKwlmb3IgKCA7IChlY2NzdGVwcyAtIDEpOyBl Y2NzdGVwcy0tKSB7DQo+ID4gKwkJcGwzNTNfbmFuZF9yZWFkX2RhdGFfb3AoY2hpcCwgcCwgZWNj c2l6ZSwgZmFsc2UpOw0KPiA+ICsJCXAgKz0gZWNjc2l6ZTsNCj4gPiArCX0NCj4gPiArCXBsMzUz X25hbmRfcmVhZF9kYXRhX29wKGNoaXAsIHAsDQo+ID4gKwkJCQkoZWNjc2l6ZSAtIFBMMzUzX05B TkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpLA0KPiA+ICsJCQkJZmFsc2UpOw0KPiA+ICsJcCArPSAo ZWNjc2l6ZSAtIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0KPiA+ICsNCj4gPiAr CS8qIFNldCBFQ0MgTGFzdCBiaXQgdG8gMSAqLw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyID0gKHVu c2lnbmVkIGxvbmcgX19mb3JjZSl4bmZjLT5idWZfYWRkcjsNCj4gPiArCWRhdGFfcGhhc2VfYWRk ciAtPSBuYW5kX29mZnNldDsNCj4gPiArCWRhdGFfcGhhc2VfYWRkciB8PSBQTDM1M19OQU5EX0VD Q19MQVNUOw0KPiA+ICsJZGF0YV9waGFzZV9hZGRyICs9IG5hbmRfb2Zmc2V0Ow0KPiA+ICsJeG5m Yy0+YnVmX2FkZHIgPSAodm9pZCBfX2lvbWVtICogX19mb3JjZSlkYXRhX3BoYXNlX2FkZHI7DQo+ ID4gKwlwbDM1M19uYW5kX3JlYWRfZGF0YV9vcChjaGlwLCBwLCBQTDM1M19OQU5EX0xBU1RfVFJB TlNGRVJfTEVOR1RILA0KPiA+ICsJCQkJZmFsc2UpOw0KPiA+ICsNCj4gPiArCS8qIFdhaXQgdGls bCB0aGUgRUNDIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSBvciB0aW1lb3V0ICovDQo+ID4gKwlyZXQg PSBwbDM1M193YWl0X2Zvcl9lY2NfZG9uZSgpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlkZXZf ZXJyKHhuZmMtPmRldiwgIkVDQyBUaW1lb3V0XG4iKTsNCj4gPiArDQo+ID4gKwkvKiBSZWFkIHRo ZSBjYWxjdWxhdGVkIEVDQyB2YWx1ZSAqLw0KPiA+ICsJcCA9IGJ1ZjsNCj4gPiArCXJldCA9IGNo aXAtPmVjYy5jYWxjdWxhdGUoY2hpcCwgcCwgJmVjY19jYWxjWzBdKTsNCj4gPiArCWlmIChyZXQp DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwkvKiBDbGVhciBFQ0MgbGFzdCBiaXQg Ki8NCj4gPiArCWRhdGFfcGhhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+ YnVmX2FkZHI7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgLT0gbmFuZF9vZmZzZXQ7DQo+ID4gKwlk YXRhX3BoYXNlX2FkZHIgJj0gflBMMzUzX05BTkRfRUNDX0xBU1Q7DQo+ID4gKwlkYXRhX3BoYXNl X2FkZHIgKz0gbmFuZF9vZmZzZXQ7DQo+ID4gKwl4bmZjLT5idWZfYWRkciA9ICh2b2lkIF9faW9t ZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2VfYWRkcjsNCj4gPiArDQo+ID4gKwkvKiBSZWFkIHRoZSBz dG9yZWQgRUNDIHZhbHVlICovDQo+ID4gKwlvb2JfcHRyID0gY2hpcC0+b29iX3BvaTsNCj4gPiAr CXBsMzUzX25hbmRfcmVhZF9kYXRhX29wKGNoaXAsIG9vYl9wdHIsDQo+ID4gKwkJCQkobXRkLT5v b2JzaXplIC0NCj4gPiArCQkJCVBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpLCBmYWxz ZSk7DQo+ID4gKw0KPiA+ICsJLyogZGUtYXNzZXJ0IGNoaXAgc2VsZWN0ICovDQo+ID4gKwlkYXRh X3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMtPmJ1Zl9hZGRyOw0KPiA+ ICsJZGF0YV9waGFzZV9hZGRyIC09IG5hbmRfb2Zmc2V0Ow0KPiA+ICsJZGF0YV9waGFzZV9hZGRy IHw9IFBMMzUzX05BTkRfQ0xFQVJfQ1M7DQo+ID4gKwlkYXRhX3BoYXNlX2FkZHIgKz0gbmFuZF9v ZmZzZXQ7DQo+ID4gKwl4bmZjLT5idWZfYWRkciA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRh dGFfcGhhc2VfYWRkcjsNCj4gPiArDQo+ID4gKwlvb2JfcHRyICs9IChtdGQtPm9vYnNpemUgLSBQ TDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsNCj4gPiArCXBsMzUzX25hbmRfcmVhZF9k YXRhX29wKGNoaXAsIG9vYl9wdHIsDQo+IFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgs DQo+ID4gKwkJCQlmYWxzZSk7DQo+ID4gKw0KPiA+ICsJcmV0ID0gbXRkX29vYmxheW91dF9nZXRf ZWNjYnl0ZXMobXRkLCBlY2MsIGNoaXAtPm9vYl9wb2ksIDAsDQo+ID4gKwkJCQkJIGNoaXAtPmVj Yy50b3RhbCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ ICsJZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7DQo+ID4gKwlwID0gYnVmOw0KPiA+ICsNCj4g PiArCS8qIENoZWNrIEVDQyBlcnJvciBmb3IgYWxsIGJsb2NrcyBhbmQgY29ycmVjdCBpZiBpdCBp cyBjb3JyZWN0YWJsZSAqLw0KPiA+ICsJZm9yIChpID0gMCA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0t LCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpIHsNCj4gPiArCQlzdGF0ID0gY2hpcC0+ZWNj LmNvcnJlY3QoY2hpcCwgcCwgJmVjY1tpXSwgJmVjY19jYWxjW2ldKTsNCj4gPiArCQlpZiAoc3Rh dCA8IDApIHsNCj4gPiArCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7DQo+ID4gKwkJfSBlbHNl IHsNCj4gPiArCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkICs9IHN0YXQ7DQo+ID4gKwkJCW1h eF9iaXRmbGlwcyA9IG1heF90KHVuc2lnbmVkIGludCwgbWF4X2JpdGZsaXBzLCBzdGF0KTsNCj4g PiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIG1heF9iaXRmbGlwczsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyogTkFORCBmcmFtZXdvcmsgLT5leGVjX29wKCkgaG9va3MgYW5kIHJl bGF0ZWQgaGVscGVycyAqLw0KPiA+ICtzdGF0aWMgdm9pZCBwbDM1M19uZmNfcGFyc2VfaW5zdHJ1 Y3Rpb25zKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsDQo+ID4gKwkJCQkJIGNvbnN0IHN0cnVjdCBu YW5kX3N1Ym9wICpzdWJvcCwNCj4gPiArCQkJCQkgc3RydWN0IHBsMzUzX25mY19vcCAqbmZjX29w KQ0KPiA+ICt7DQo+ID4gKwljb25zdCBzdHJ1Y3QgbmFuZF9vcF9pbnN0ciAqaW5zdHIgPSBOVUxM Ow0KPiA+ICsJdW5zaWduZWQgaW50IG9wX2lkLCBvZmZzZXQsIG5hZGRyczsNCj4gPiArCWludCBp Ow0KPiA+ICsJY29uc3QgdTggKmFkZHJzOw0KPiA+ICsNCj4gPiArCW1lbXNldChuZmNfb3AsIDAs IHNpemVvZihzdHJ1Y3QgcGwzNTNfbmZjX29wKSk7DQo+ID4gKwlmb3IgKG9wX2lkID0gMDsgb3Bf aWQgPCBzdWJvcC0+bmluc3Ryczsgb3BfaWQrKykgew0KPiA+ICsJCWluc3RyID0gJnN1Ym9wLT5p bnN0cnNbb3BfaWRdOw0KPiA+ICsNCj4gPiArCQlzd2l0Y2ggKGluc3RyLT50eXBlKSB7DQo+ID4g KwkJY2FzZSBOQU5EX09QX0NNRF9JTlNUUjoNCj4gPiArCQkJaWYgKG9wX2lkKQ0KPiA+ICsJCQkJ bmZjX29wLT5jbW5kc1sxXSA9IGluc3RyLT5jdHguY21kLm9wY29kZTsNCj4gPiArCQkJZWxzZQ0K PiA+ICsJCQkJbmZjX29wLT5jbW5kc1swXSA9IGluc3RyLT5jdHguY21kLm9wY29kZTsNCj4gPiAr CQkJbmZjX29wLT5jbGVfYWxlX2RlbGF5X25zID0gaW5zdHItPmRlbGF5X25zOw0KPiA+ICsJCQli cmVhazsNCj4gPiArDQo+ID4gKwkJY2FzZSBOQU5EX09QX0FERFJfSU5TVFI6DQo+ID4gKwkJCW9m ZnNldCA9IG5hbmRfc3Vib3BfZ2V0X2FkZHJfc3RhcnRfb2ZmKHN1Ym9wLCBvcF9pZCk7DQo+ID4g KwkJCW5hZGRycyA9IG5hbmRfc3Vib3BfZ2V0X251bV9hZGRyX2N5YyhzdWJvcCwgb3BfaWQpOw0K PiA+ICsJCQlhZGRycyA9ICZpbnN0ci0+Y3R4LmFkZHIuYWRkcnNbb2Zmc2V0XTsNCj4gPiArCQkJ bmZjX29wLT5hZGRycyA9IGluc3RyLT5jdHguYWRkci5hZGRyc1tvZmZzZXRdOw0KPiA+ICsJCQlm b3IgKGkgPSAwOyBpIDwgbWluX3QodW5zaWduZWQgaW50LCA0LCBuYWRkcnMpOyBpKyspIHsNCj4g PiArCQkJCW5mY19vcC0+YWRkcnMgfD0gaW5zdHItPmN0eC5hZGRyLmFkZHJzW2ldIDw8DQo+ID4g KwkJCQkJCSAoOCAqIGkpOw0KPiA+ICsJCQl9DQo+ID4gKw0KPiA+ICsJCQlpZiAobmFkZHJzID49 IDUpDQo+ID4gKwkJCQluZmNfb3AtPmFkZHI1ID0gYWRkcnNbNF07DQo+ID4gKwkJCWlmIChuYWRk cnMgPj0gNikNCj4gPiArCQkJCW5mY19vcC0+YWRkcjYgPSBhZGRyc1s1XTsNCj4gPiArCQkJbmZj X29wLT5uYWRkcnMgPSBuYW5kX3N1Ym9wX2dldF9udW1fYWRkcl9jeWMoc3Vib3AsDQo+ID4gKwkJ CQkJCQkJICAgICBvcF9pZCk7DQo+ID4gKwkJCW5mY19vcC0+Y2xlX2FsZV9kZWxheV9ucyA9IGlu c3RyLT5kZWxheV9uczsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJCWNhc2UgTkFORF9P UF9EQVRBX0lOX0lOU1RSOg0KPiA+ICsJCQluZmNfb3AtPmRhdGFfaW5zdHIgPSBpbnN0cjsNCj4g PiArCQkJbmZjX29wLT5kYXRhX2luc3RyX2lkeCA9IG9wX2lkOw0KPiA+ICsJCQlicmVhazsNCj4g PiArDQo+ID4gKwkJY2FzZSBOQU5EX09QX0RBVEFfT1VUX0lOU1RSOg0KPiA+ICsJCQluZmNfb3At PmRhdGFfaW5zdHIgPSBpbnN0cjsNCj4gPiArCQkJbmZjX29wLT5kYXRhX2luc3RyX2lkeCA9IG9w X2lkOw0KPiA+ICsJCQlicmVhazsNCj4gPiArDQo+ID4gKwkJY2FzZSBOQU5EX09QX1dBSVRSRFlf SU5TVFI6DQo+ID4gKwkJCW5mY19vcC0+cmR5X3RpbWVvdXRfbXMgPSBpbnN0ci0+Y3R4LndhaXRy ZHkudGltZW91dF9tczsNCj4gPiArCQkJbmZjX29wLT5yZHlfZGVsYXlfbnMgPSBpbnN0ci0+ZGVs YXlfbnM7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIHZvaWQgY29uZF9kZWxheSh1bnNpZ25lZCBpbnQgbnMpDQo+ID4gK3sNCj4g PiArCWlmICghbnMpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCWlmIChucyA8IDEwMDAw KQ0KPiA+ICsJCW5kZWxheShucyk7DQo+ID4gKwllbHNlDQo+ID4gKwkJdWRlbGF5KERJVl9ST1VO RF9VUChucywgMTAwMCkpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogcGwzNTNf bmFuZF9leGVjX29wX2NtZCAtIFNlbmQgY29tbWFuZCB0byBOQU5EIGRldmljZQ0KPiA+ICsgKiBA Y2hpcDoJUG9pbnRlciB0byB0aGUgTkFORCBjaGlwIGluZm8gc3RydWN0dXJlDQo+ID4gKyAqIEBz dWJvcDoJUG9pbnRlciB0byBhcnJheSBvZiBpbnN0cnVjdGlvbnMNCj4gPiArICogUmV0dXJuOglB bHdheXMgcmV0dXJuIHplcm8NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9l eGVjX29wX2NtZChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLA0KPiA+ICsJCQkJICBjb25zdCBzdHJ1 Y3QgbmFuZF9zdWJvcCAqc3Vib3ApDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRk ID0gbmFuZF90b19tdGQoY2hpcCk7DQo+ID4gKwljb25zdCBzdHJ1Y3QgbmFuZF9vcF9pbnN0ciAq aW5zdHI7DQo+ID4gKwlzdHJ1Y3QgcGwzNTNfbmZjX29wIG5mY19vcCA9IHt9Ow0KPiA+ICsJc3Ry dWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9DQo+ID4gKwkJY29udGFpbmVyX29mKGNo aXAsIHN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIsIGNoaXApOw0KPiA+ICsJdW5zaWduZWQg bG9uZyBjbWRfcGhhc2VfZGF0YSA9IDAsIGVuZF9jbWRfdmFsaWQgPSAwOw0KPiA+ICsJdW5zaWdu ZWQgbG9uZyBjbWRfcGhhc2VfYWRkciwgZGF0YV9waGFzZV9hZGRyLCBlbmRfY21kOw0KPiA+ICsJ dW5zaWduZWQgaW50IG9wX2lkLCBsZW4sIG9mZnNldDsNCj4gPiArCWJvb2wgcmVhZGluZzsNCj4g PiArDQo+ID4gKwlwbDM1M19uZmNfcGFyc2VfaW5zdHJ1Y3Rpb25zKGNoaXAsIHN1Ym9wLCAmbmZj X29wKTsNCj4gPiArCWluc3RyID0gbmZjX29wLmRhdGFfaW5zdHI7DQo+ID4gKwlvcF9pZCA9IG5m Y19vcC5kYXRhX2luc3RyX2lkeDsNCj4gPiArDQo+ID4gKwlvZmZzZXQgPSBuYW5kX3N1Ym9wX2dl dF9kYXRhX3N0YXJ0X29mZihzdWJvcCwgb3BfaWQpOw0KPiA+ICsNCj4gPiArCXBsMzUzX3NtY19j bHJfbmFuZF9pbnQoKTsNCj4gPiArCS8qIEdldCB0aGUgY29tbWFuZCBwaGFzZSBhZGRyZXNzICov DQo+ID4gKwlpZiAobmZjX29wLmNtbmRzWzFdICE9IDApIHsNCj4gPiArCQlpZiAobmZjX29wLmNt bmRzWzBdID09IE5BTkRfQ01EX1NFUUlOKQ0KPiA+ICsJCQllbmRfY21kX3ZhbGlkID0gMDsNCj4g PiArCQllbHNlDQo+ID4gKwkJCWVuZF9jbWRfdmFsaWQgPSAxOw0KPiA+ICsJCWVuZF9jbWQgPSBu ZmNfb3AuY21uZHNbMV07DQo+ID4gKwl9ICBlbHNlIHsNCj4gPiArCQllbmRfY21kID0gMHgwOw0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBUaGUgU01DIGRlZmluZXMgdHdvIHBo YXNlcyBvZiBjb21tYW5kcyB3aGVuIHRyYW5zZmVycmluZyBkYXRhIHRvIG9yDQo+ID4gKwkgKiBm cm9tIE5BTkQgZmxhc2guDQo+ID4gKwkgKiBDb21tYW5kIHBoYXNlOiBDb21tYW5kcyBhbmQgb3B0 aW9uYWwgYWRkcmVzcyBpbmZvcm1hdGlvbiBhcmUgd3JpdHRlbg0KPiA+ICsJICogdG8gdGhlIE5B TkQgZmxhc2guVGhlIGNvbW1hbmQgYW5kIGFkZHJlc3MgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aA0K PiA+ICsJICogZWl0aGVyIGEgZGF0YSBwaGFzZSBvcGVyYXRpb24gdG8gd3JpdGUgdG8gb3IgcmVh ZCBmcm9tIHRoZSBhcnJheSwNCj4gPiArCSAqIG9yIGEgc3RhdHVzL0lEIHJlZ2lzdGVyIHRyYW5z ZmVyLg0KPiA+ICsJICogRGF0YSBwaGFzZTogRGF0YSBpcyBlaXRoZXIgd3JpdHRlbiB0byBvciBy ZWFkIGZyb20gdGhlIE5BTkQgZmxhc2guDQo+ID4gKwkgKiBUaGlzIGRhdGEgY2FuIGJlIGVpdGhl ciBkYXRhIHRyYW5zZmVycmVkIHRvIG9yIGZyb20gdGhlIGFycmF5LA0KPiA+ICsJICogb3Igc3Rh dHVzL0lEIHJlZ2lzdGVyIGluZm9ybWF0aW9uLg0KPiA+ICsJICovDQo+ID4gKwljbWRfcGhhc2Vf YWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+cmVncyArDQo+ID4gKwkJCSAoKG5m Y19vcC5uYWRkcnMgPDwgQUREUl9DWUNMRVNfU0hJRlQpIHwNCj4gPiArCQkJIChlbmRfY21kX3Zh bGlkIDw8IEVORF9DTURfVkFMSURfU0hJRlQpIHwNCj4gPiArCQkJIChDT01NQU5EX1BIQVNFKSB8 DQo+ID4gKwkJCSAoZW5kX2NtZCA8PCBFTkRfQ01EX1NISUZUKSB8DQo+ID4gKwkJCSAobmZjX29w LmNtbmRzWzBdIDw8IFNUQVJUX0NNRF9TSElGVCkpOw0KPiA+ICsNCj4gPiArCS8qIEdldCB0aGUg ZGF0YSBwaGFzZSBhZGRyZXNzICovDQo+ID4gKwllbmRfY21kX3ZhbGlkID0gMDsNCj4gPiArDQo+ ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMtPnJlZ3Mg Kw0KPiA+ICsJCQkgICgoMHgwIDw8IENMRUFSX0NTX1NISUZUKSB8DQo+ID4gKwkJCSAgKGVuZF9j bWRfdmFsaWQgPDwgRU5EX0NNRF9WQUxJRF9TSElGVCkgfA0KPiA+ICsJCQkgIChEQVRBX1BIQVNF KSB8DQo+ID4gKwkJCSAgKGVuZF9jbWQgPDwgRU5EX0NNRF9TSElGVCkgfA0KPiA+ICsJCQkgICgw eDAgPDwgRUNDX0xBU1RfU0hJRlQpKTsNCj4gPiArCXhuZmMtPmJ1Zl9hZGRyID0gKHZvaWQgX19p b21lbSAqIF9fZm9yY2UpZGF0YV9waGFzZV9hZGRyOw0KPiA+ICsNCj4gPiArCS8qIENvbW1hbmQg cGhhc2UgQVhJIFJlYWQgJiBXcml0ZSAqLw0KPiA+ICsJaWYgKG5mY19vcC5uYWRkcnMgPj0gNSkg ew0KPiA+ICsJCWlmIChtdGQtPndyaXRlc2l6ZSA+IFBMMzUzX05BTkRfRUNDX1NJWkUpIHsNCj4g PiArCQkJY21kX3BoYXNlX2RhdGEgPSBuZmNfb3AuYWRkcnM7DQo+ID4gKwkJCS8qIEFub3RoZXIg YWRkcmVzcyBjeWNsZSBmb3IgZGV2aWNlcyA+IDEyOE1pQiAqLw0KPiA+ICsJCQlpZiAoY2hpcC0+ b3B0aW9ucyAmIE5BTkRfUk9XX0FERFJfMykgew0KPiA+ICsJCQkJd3JpdGVsX3JlbGF4ZWQoY21k X3BoYXNlX2RhdGEsDQo+ID4gKwkJCQkJICAgICAgICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKQ0K PiA+ICsJCQkJCSAgICAgICBjbWRfcGhhc2VfYWRkcik7DQo+ID4gKwkJCQljbWRfcGhhc2VfZGF0 YSA9IG5mY19vcC5hZGRyNTsNCj4gPiArCQkJCWlmIChuZmNfb3AubmFkZHJzID49IDYpDQo+ID4g KwkJCQkJY21kX3BoYXNlX2RhdGEgfD0gKG5mY19vcC5hZGRyNiA8PCA4KTsNCj4gPiArCQkJfQ0K PiA+ICsJCX0NCj4gPiArCX0gIGVsc2Ugew0KPiA+ICsJCWlmIChuZmNfb3AuYWRkcnMgIT0gLTEp IHsNCj4gPiArCQkJaW50IGNvbHVtbiA9IG5mY19vcC5hZGRyczsNCj4gPiArCQkJLyoNCj4gPiAr CQkJICogQ2hhbmdlIHJlYWQvd3JpdGUgY29sdW1uLCByZWFkIGlkIGV0Yw0KPiA+ICsJCQkgKiBB ZGp1c3QgY29sdW1ucyBmb3IgMTYgYml0IGJ1cyB3aWR0aA0KPiA+ICsJCQkgKi8NCj4gPiArCQkJ aWYgKChjaGlwLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikgJiYNCj4gPiArCQkJICAgIChu ZmNfb3AuY21uZHNbMF0gPT0gTkFORF9DTURfUkVBRDAgfHwNCj4gPiArCQkJCW5mY19vcC5jbW5k c1swXSA9PSBOQU5EX0NNRF9TRVFJTiB8fA0KPiA+ICsJCQkJbmZjX29wLmNtbmRzWzBdID09IE5B TkRfQ01EX1JORE9VVCB8fA0KPiA+ICsJCQkJbmZjX29wLmNtbmRzWzBdID09IE5BTkRfQ01EX1JO RElOKSkgew0KPiA+ICsJCQkJY29sdW1uID4+PSAxOw0KPiA+ICsJCQl9DQo+ID4gKwkJCWNtZF9w aGFzZV9kYXRhID0gY29sdW1uOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArCXdyaXRlbF9yZWxh eGVkKGNtZF9waGFzZV9kYXRhLCAodm9pZCBfX2lvbWVtICogX19mb3JjZSljbWRfcGhhc2VfYWRk cik7DQo+ID4gKw0KPiA+ICsJaWYgKCFuZmNfb3AuZGF0YV9pbnN0cikgew0KPiA+ICsJCWlmIChu ZmNfb3AucmR5X3RpbWVvdXRfbXMpDQo+ID4gKwkJCW5hbmRfd2FpdF9yZWFkeShjaGlwKTsNCj4g PiArCQlyZXR1cm4gMDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZWFkaW5nID0gKG5mY19vcC5k YXRhX2luc3RyLT50eXBlID09IE5BTkRfT1BfREFUQV9JTl9JTlNUUik7DQo+ID4gKwlpZiAoIXJl YWRpbmcpIHsNCj4gPiArCQlsZW4gPSBuYW5kX3N1Ym9wX2dldF9kYXRhX2xlbihzdWJvcCwgb3Bf aWQpOw0KPiA+ICsJCXBsMzUzX25hbmRfd3JpdGVfZGF0YV9vcChjaGlwLCBpbnN0ci0+Y3R4LmRh dGEuYnVmLm91dCwNCj4gPiArCQkJCQkgbGVuLCBpbnN0ci0+Y3R4LmRhdGEuZm9yY2VfOGJpdCk7 DQo+ID4gKwkJaWYgKG5mY19vcC5yZHlfdGltZW91dF9tcykNCj4gPiArCQkJbmFuZF93YWl0X3Jl YWR5KGNoaXApOw0KPiA+ICsJCWNvbmRfZGVsYXkobmZjX29wLnJkeV9kZWxheV9ucyk7DQo+ID4g Kwl9DQo+IA0KPiBlbHNlID8NCklmIChyZWFkaW5nKSBpcyBub3RoaW5nIGJ1dCBlbHNlLCBidXQg aXQgaXMgbG9va2luZyBvZGQuIEkgd2lsbCBjaGFuZ2UgaXQuDQo+IA0KPiA+ICsJaWYgKHJlYWRp bmcpIHsNCj4gPiArCQlsZW4gPSBuYW5kX3N1Ym9wX2dldF9kYXRhX2xlbihzdWJvcCwgb3BfaWQp Ow0KPiA+ICsJCWNvbmRfZGVsYXkobmZjX29wLnJkeV9kZWxheV9ucyk7DQo+ID4gKwkJaWYgKG5m Y19vcC5yZHlfdGltZW91dF9tcykNCj4gPiArCQkJbmFuZF93YWl0X3JlYWR5KGNoaXApOw0KPiA+ ICsJCXBsMzUzX25hbmRfcmVhZF9kYXRhX29wKGNoaXAsIGluc3RyLT5jdHguZGF0YS5idWYuaW4s IGxlbiwNCj4gPiArCQkJCQlpbnN0ci0+Y3R4LmRhdGEuZm9yY2VfOGJpdCk7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgbmFuZF9vcF9wYXJzZXIgcGwzNTNfbmZjX29wX3BhcnNlciA9IE5BTkRfT1BfUEFSU0VS DQo+ID4gKwkoTkFORF9PUF9QQVJTRVJfUEFUVEVSTg0KPiA+ICsJCShwbDM1M19uYW5kX2V4ZWNf b3BfY21kLA0KPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9DTURfRUxFTSh0cnVlKSwNCj4gPiAr CQlOQU5EX09QX1BBUlNFUl9QQVRfQUREUl9FTEVNKHRydWUsIDcpLA0KPiA+ICsJCU5BTkRfT1Bf UEFSU0VSX1BBVF9XQUlUUkRZX0VMRU0odHJ1ZSksDQo+ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFU X0RBVEFfSU5fRUxFTShmYWxzZSwgMjA0OCkpLA0KPiA+ICsJTkFORF9PUF9QQVJTRVJfUEFUVEVS Tg0KPiA+ICsJCShwbDM1M19uYW5kX2V4ZWNfb3BfY21kLA0KPiA+ICsJCU5BTkRfT1BfUEFSU0VS X1BBVF9DTURfRUxFTShmYWxzZSksDQo+ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0FERFJfRUxF TShmYWxzZSwgNyksDQo+ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0NNRF9FTEVNKGZhbHNlKSwN Cj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfV0FJVFJEWV9FTEVNKGZhbHNlKSwNCj4gPiArCQlO QU5EX09QX1BBUlNFUl9QQVRfREFUQV9JTl9FTEVNKGZhbHNlLCAyMDQ4KSksDQo+ID4gKwlOQU5E X09QX1BBUlNFUl9QQVRURVJODQo+ID4gKwkJKHBsMzUzX25hbmRfZXhlY19vcF9jbWQsDQo+ID4g KwkJTkFORF9PUF9QQVJTRVJfUEFUX0NNRF9FTEVNKGZhbHNlKSwNCj4gPiArCQlOQU5EX09QX1BB UlNFUl9QQVRfQUREUl9FTEVNKHRydWUsIDcpLA0KPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9D TURfRUxFTSh0cnVlKSwNCj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfV0FJVFJEWV9FTEVNKGZh bHNlKSksDQo+ID4gKwlOQU5EX09QX1BBUlNFUl9QQVRURVJODQo+ID4gKwkJKHBsMzUzX25hbmRf ZXhlY19vcF9jbWQsDQo+ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0NNRF9FTEVNKGZhbHNlKSwN Cj4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQUREUl9FTEVNKGZhbHNlLCA4KSwNCj4gPiArCQlO QU5EX09QX1BBUlNFUl9QQVRfREFUQV9PVVRfRUxFTShmYWxzZSwgMjA0OCksDQo+ID4gKwkJTkFO RF9PUF9QQVJTRVJfUEFUX0NNRF9FTEVNKHRydWUpLA0KPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BB VF9XQUlUUkRZX0VMRU0odHJ1ZSkpLA0KPiA+ICsJTkFORF9PUF9QQVJTRVJfUEFUVEVSTg0KPiA+ ICsJCShwbDM1M19uYW5kX2V4ZWNfb3BfY21kLA0KPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9D TURfRUxFTShmYWxzZSkpLA0KPiA+ICsJKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNf bmZjX2V4ZWNfb3Aoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwNCj4gPiArCQkJICAgICBjb25zdCBz dHJ1Y3QgbmFuZF9vcGVyYXRpb24gKm9wLA0KPiA+ICsJCQkgICAgIGJvb2wgY2hlY2tfb25seSkN Cj4gPiArew0KPiA+ICsJcmV0dXJuIG5hbmRfb3BfcGFyc2VyX2V4ZWNfb3AoY2hpcCwgJnBsMzUz X25mY19vcF9wYXJzZXIsDQo+ID4gKwkJCQkJICAgICAgb3AsIGNoZWNrX29ubHkpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogcGwzNTNfbmFuZF9kZXZpY2VfcmVhZHkgLSBDaGVj ayBkZXZpY2UgcmVhZHkvYnVzeSBsaW5lDQo+ID4gKyAqIEBtdGQ6CVBvaW50ZXIgdG8gdGhlIG10 ZF9pbmZvIHN0cnVjdHVyZQ0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46CTAgb24gYnVzeSBvciAx IG9uIHJlYWR5IHN0YXRlDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRfZGV2 aWNlX3JlYWR5KHN0cnVjdCBuYW5kX2NoaXAgKmNoaXApDQo+ID4gK3sNCj4gPiArCWlmIChwbDM1 M19zbWNfZ2V0X25hbmRfaW50X3N0YXR1c19yYXcoKSkgew0KPiA+ICsJCXBsMzUzX3NtY19jbHJf bmFuZF9pbnQoKTsNCj4gPiArCQlyZXR1cm4gMTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHBsMzUzX25hbmRfZWNjX2lu aXQgLSBJbml0aWFsaXplIHRoZSBlY2MgaW5mb3JtYXRpb24gYXMgcGVyIHRoZSBlY2MgbW9kZQ0K PiA+ICsgKiBAbXRkOglQb2ludGVyIHRvIHRoZSBtdGRfaW5mbyBzdHJ1Y3R1cmUNCj4gPiArICog QGVjYzoJUG9pbnRlciB0byBFQ0MgY29udHJvbCBzdHJ1Y3R1cmUNCj4gPiArICogQGVjY19tb2Rl OglvbmRpZSBlY2Mgc3RhdHVzDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlh bGl6ZXMgdGhlIGVjYyBibG9jayBhbmQgZnVuY3Rpb25hbCBwb2ludGVycyBhcyBwZXIgdGhlDQo+ ID4gKyAqIGVjYyBtb2RlDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJMCBvbiBzdWNjZXNzIG9y IG5lZ2F0aXZlIGVycm5vLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBwbDM1M19uYW5kX2Vj Y19pbml0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9lY2NfY3RybCAqZWNjLA0K PiA+ICsJCQkgICAgICAgaW50IGVjY19tb2RlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbmFuZF9j aGlwICpjaGlwID0gbXRkX3RvX25hbmQobXRkKTsNCj4gPiArCXN0cnVjdCBwbDM1M19uYW5kX2Nv bnRyb2xsZXIgKnhuZmMgPQ0KPiA+ICsJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwzNTNf bmFuZF9jb250cm9sbGVyLCBjaGlwKTsNCj4gPiArCWludCBlcnIgPSAwOw0KPiA+ICsNCj4gPiAr CWVjYy0+d3JpdGVfcGFnZV9yYXcgPSBwbDM1M19uYW5kX3dyaXRlX3BhZ2VfcmF3Ow0KPiA+ICsJ ZWNjLT5yZWFkX3BhZ2VfcmF3ID0gcGwzNTNfbmFuZF9yZWFkX3BhZ2VfcmF3Ow0KPiA+ICsJZWNj LT5yZWFkX29vYiA9IHBsMzUzX25hbmRfcmVhZF9vb2I7DQo+ID4gKwllY2MtPndyaXRlX29vYiA9 IHBsMzUzX25hbmRfd3JpdGVfb29iOw0KPiA+ICsNCj4gPiArCWlmIChlY2NfbW9kZSA9PSBOQU5E X0VDQ19PTl9ESUUpIHsNCj4gPiArCQlwbDM1M19zbWNfc2V0X2VjY19tb2RlKFBMMzUzX1NNQ19F Q0NNT0RFX0JZUEFTUyk7DQo+ID4gKwkJLyoNCj4gPiArCQkgKiBPbi1EaWUgRUNDIHNwYXJlIGJ5 dGVzIG9mZnNldCA4IGlzIHVzZWQgZm9yIEVDQyBjb2Rlcw0KPiA+ICsJCSAqIFVzZSB0aGUgQkJU IHBhdHRlcm4gZGVzY3JpcHRvcnMNCj4gPiArCQkgKi8NCj4gPiArCQljaGlwLT5iYnRfdGQgPSAm YmJ0X21haW5fZGVzY3I7DQo+ID4gKwkJY2hpcC0+YmJ0X21kID0gJmJidF9taXJyb3JfZGVzY3I7 DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWVjYy0+bW9kZSA9IE5BTkRfRUNDX0hXOw0KPiA+ICsJ CS8qIEhhcmR3YXJlIEVDQyBnZW5lcmF0ZXMgMyBieXRlcyBFQ0MgY29kZSBmb3IgZWFjaCA1MTIg Ynl0ZXMgKi8NCj4gPiArCQllY2MtPmJ5dGVzID0gMzsNCj4gPiArCQllY2MtPnN0cmVuZ3RoID0g MTsNCj4gPiArCQllY2MtPmNhbGN1bGF0ZSA9IHBsMzUzX25hbmRfY2FsY3VsYXRlX2h3ZWNjOw0K PiA+ICsJCWVjYy0+Y29ycmVjdCA9IHBsMzUzX25hbmRfY29ycmVjdF9kYXRhOw0KPiA+ICsJCWVj Yy0+cmVhZF9wYWdlID0gcGwzNTNfbmFuZF9yZWFkX3BhZ2VfaHdlY2M7DQo+ID4gKwkJZWNjLT5z aXplID0gUEwzNTNfTkFORF9FQ0NfU0laRTsNCj4gPiArCQllY2MtPnJlYWRfcGFnZSA9IHBsMzUz X25hbmRfcmVhZF9wYWdlX2h3ZWNjOw0KPiA+ICsJCWVjYy0+d3JpdGVfcGFnZSA9IHBsMzUzX25h bmRfd3JpdGVfcGFnZV9od2VjYzsNCj4gPiArCQlwbDM1M19zbWNfc2V0X2VjY19wZ19zaXplKG10 ZC0+d3JpdGVzaXplKTsNCj4gPiArCQlzd2l0Y2ggKG10ZC0+d3JpdGVzaXplKSB7DQo+ID4gKwkJ Y2FzZSBTWl81MTI6DQo+ID4gKwkJY2FzZSBTWl8xSzoNCj4gPiArCQljYXNlIFNaXzJLOg0KPiA+ ICsJCQlwbDM1M19zbWNfc2V0X2VjY19tb2RlKFBMMzUzX1NNQ19FQ0NNT0RFX0FQQik7DQo+ID4g KwkJCWJyZWFrOw0KPiA+ICsJCWRlZmF1bHQ6DQo+ID4gKwkJCWVjYy0+Y2FsY3VsYXRlID0gbmFu ZF9jYWxjdWxhdGVfZWNjOw0KPiA+ICsJCQllY2MtPmNvcnJlY3QgPSBuYW5kX2NvcnJlY3RfZGF0 YTsNCj4gPiArCQkJZWNjLT5zaXplID0gMjU2Ow0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ ID4gKw0KPiA+ICsJCWlmIChtdGQtPm9vYnNpemUgPT0gMTYpIHsNCj4gPiArCQkJbXRkX3NldF9v b2JsYXlvdXQobXRkLCAmcGwzNTNfZWNjX29vYmxheW91dDE2X29wcyk7DQo+ID4gKwkJfSBlbHNl IGlmIChtdGQtPm9vYnNpemUgPT0gNjQpIHsNCj4gPiArCQkJbXRkX3NldF9vb2JsYXlvdXQobXRk LCAmcGwzNTNfZWNjX29vYmxheW91dDY0X29wcyk7DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJ ZXJyID0gLUVOWElPOw0KPiA+ICsJCQlkZXZfZXJyKHhuZmMtPmRldiwgIlVuc3VwcG9ydGVkIG9v YiBMYXlvdXRcbiIpOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gZXJy Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX25mY19zZXR1cF9kYXRhX2lu dGVyZmFjZShzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgY3NsaW5lLA0KPiA+ICsJCQkJCSAg Y29uc3Qgc3RydWN0IG5hbmRfZGF0YV9pbnRlcmZhY2UNCj4gPiArCQkJCQkgICpjb25mKQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyICp4bmZjID0NCj4gPiArCQlj b250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciwgY2hpcCk7DQo+ ID4gKwljb25zdCBzdHJ1Y3QgbmFuZF9zZHJfdGltaW5ncyAqc2RyOw0KPiA+ICsJdTMyIHRpbWlu Z3NbN10sIG1ja3BlcmlvZHBzOw0KPiA+ICsNCj4gPiArCWlmIChjc2xpbmUgPT0gTkFORF9EQVRB X0lGQUNFX0NIRUNLX09OTFkpDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsJc2RyID0g bmFuZF9nZXRfc2RyX3RpbWluZ3MoY29uZik7DQo+ID4gKwlpZiAoSVNfRVJSKHNkcikpDQo+ID4g KwkJcmV0dXJuIFBUUl9FUlIoc2RyKTsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogU0RSIHRp bWluZ3MgYXJlIGdpdmVuIGluIHBpY28tc2Vjb25kcyB3aGlsZSBORkMgdGltaW5ncyBtdXN0IGJl DQo+ID4gKwkgKiBleHByZXNzZWQgaW4gTkFORCBjb250cm9sbGVyIGNsb2NrIGN5Y2xlcy4NCj4g PiArCSAqLw0KPiA+ICsJbWNrcGVyaW9kcHMgPSBOU0VDX1BFUl9TRUMgLyBjbGtfZ2V0X3JhdGUo eG5mYy0+bWNsayk7DQo+ID4gKwltY2twZXJpb2RwcyAqPSAxMDAwOw0KPiA+ICsJaWYgKHNkci0+ dFJDX21pbiA8PSAyMDAwMCkNCj4gPiArCQkvKg0KPiA+ICsJCSAqIFBMMzUzIFNNQyBuZWVkcyBv bmUgZXh0cmEgcmVhZCBjeWNsZSBpbiBTRFIgTW9kZSA1DQo+ID4gKwkJICogVGhpcyBpcyBub3Qg d3JpdHRlbiBhbnl3aGVyZSBpbiB0aGUgZGF0YXNoZWV0IGJ1dA0KPiA+ICsJCSAqIHRoZSByZXN1 bHRzIG9ic2VydmVkIGR1cmluZyB0ZXN0aW5nLg0KPiA+ICsJCSAqLw0KPiA+ICsJCXRpbWluZ3Nb MF0gPSBESVZfUk9VTkRfVVAoc2RyLT50UkNfbWluLCBtY2twZXJpb2RwcykgKyAxOw0KPiA+ICsJ ZWxzZQ0KPiA+ICsJCXRpbWluZ3NbMF0gPSBESVZfUk9VTkRfVVAoc2RyLT50UkNfbWluLCBtY2tw ZXJpb2Rwcyk7DQo+ID4gKw0KPiA+ICsJdGltaW5nc1sxXSA9IERJVl9ST1VORF9VUChzZHItPnRX Q19taW4sIG1ja3BlcmlvZHBzKTsNCj4gPiArCS8qDQo+ID4gKwkgKiBGb3IgYWxsIFNEUiBtb2Rl cywgUEwzNTMgU01DIG5lZWRzIHRSRUEgbWF4IHZhbHVlIGFzIDEsDQo+ID4gKwkgKiBSZXN1bHRz IG9ic2VydmVkIGR1cmluZyB0ZXN0aW5nLg0KPiA+ICsJICovDQo+ID4gKwl0aW1pbmdzWzJdID0g UEwzNTNfVFJFQV9NQVhfVkFMVUU7DQo+ID4gKwl0aW1pbmdzWzNdID0gRElWX1JPVU5EX1VQKHNk ci0+dFdQX21pbiwgbWNrcGVyaW9kcHMpOw0KPiA+ICsJdGltaW5nc1s0XSA9IERJVl9ST1VORF9V UChzZHItPnRDTFJfbWluLCBtY2twZXJpb2Rwcyk7DQo+ID4gKwl0aW1pbmdzWzVdID0gRElWX1JP VU5EX1VQKHNkci0+dEFSX21pbiwgbWNrcGVyaW9kcHMpOw0KPiA+ICsJdGltaW5nc1s2XSA9IERJ Vl9ST1VORF9VUChzZHItPnRSUl9taW4sIG1ja3BlcmlvZHBzKTsNCj4gPiArCXBsMzUzX3NtY19z ZXRfY3ljbGVzKHRpbWluZ3MpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRfYXR0YWNoX2NoaXAoc3RydWN0IG5hbmRfY2hp cCAqY2hpcCkNCj4gPiArew0KPiA+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210 ZChjaGlwKTsNCj4gPiArCXN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIgKnhuZmMgPQ0KPiA+ ICsJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyLCBjaGlw KTsNCj4gPiArCXUzMiByZXQ7DQo+ID4gKw0KPiA+ICsJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5E X0JVU1dJRFRIXzE2KQ0KPiA+ICsJCXBsMzUzX3NtY19zZXRfYnVzd2lkdGgoUEwzNTNfU01DX01F TV9XSURUSF8xNik7DQo+ID4gKw0KPiA+ICsJaWYgKG10ZC0+d3JpdGVzaXplIDw9IFNaXzUxMikN Cj4gPiArCQl4bmZjLT5hZGRyX2N5Y2xlcyA9IDE7DQo+ID4gKwllbHNlDQo+ID4gKwkJeG5mYy0+ YWRkcl9jeWNsZXMgPSAyOw0KPiA+ICsNCj4gPiArCWlmIChjaGlwLT5vcHRpb25zICYgTkFORF9S T1dfQUREUl8zKQ0KPiA+ICsJCXhuZmMtPmFkZHJfY3ljbGVzICs9IDM7DQo+ID4gKwllbHNlDQo+ ID4gKwkJeG5mYy0+YWRkcl9jeWNsZXMgKz0gMjsNCj4gPiArDQo+ID4gKwlyZXQgPSBwbDM1M19u YW5kX2VjY19pbml0KG10ZCwgJmNoaXAtPmVjYywgY2hpcC0+ZWNjLm1vZGUpOw0KPiA+ICsJaWYg KHJldCkgew0KPiA+ICsJCWRldl9lcnIoeG5mYy0+ZGV2LCAiRUNDIGluaXQgZmFpbGVkXG4iKTsN Cj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmICghbXRkLT5uYW1l KSB7DQo+ID4gKwkJLyoNCj4gPiArCQkgKiBJZiB0aGUgbmV3IGJpbmRpbmdzIGFyZSB1c2VkIGFu ZCB0aGUgYm9vdGxvYWRlciBoYXMgbm90IGJlZW4NCj4gPiArCQkgKiB1cGRhdGVkIHRvIHBhc3Mg YSBuZXcgbXRkcGFydHMgcGFyYW1ldGVyIG9uIHRoZSBjbWRsaW5lLCB5b3UNCj4gPiArCQkgKiBz aG91bGQgZGVmaW5lIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkgaW4geW91ciBOQU5EIG5vZGUsIGll Og0KPiA+ICsJCSAqDQo+ID4gKwkJICoJbGFiZWwgPSAicGwzNTMtbmFuZCI7DQo+ID4gKwkJICoN Cj4gPiArCQkgKiBUaGlzIHdheSwgbXRkLT5uYW1lIHdpbGwgYmUgc2V0IGJ5IHRoZSBjb3JlIHdo ZW4NCj4gPiArCQkgKiBuYW5kX3NldF9mbGFzaF9ub2RlKCkgaXMgY2FsbGVkLg0KPiA+ICsJCSAq Lw0KPiA+ICsJCW10ZC0+bmFtZSA9IGRldm1fa2FzcHJpbnRmKHhuZmMtPmRldiwgR0ZQX0tFUk5F TCwNCj4gPiArCQkJCQkgICAiJXMiLCBQTDM1M19OQU5EX0RSSVZFUl9OQU1FKTsNCj4gPiArCQlp ZiAoIW10ZC0+bmFtZSkgew0KPiA+ICsJCQlkZXZfZXJyKHhuZmMtPmRldiwgIkZhaWxlZCB0byBh bGxvY2F0ZSBtdGQtPm5hbWVcbiIpOw0KPiA+ICsJCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArCQl9 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgbmFuZF9jb250cm9sbGVyX29wcyBwbDM1M19uYW5kX2NvbnRyb2xs ZXJfb3BzID0gew0KPiA+ICsJLmF0dGFjaF9jaGlwID0gcGwzNTNfbmFuZF9hdHRhY2hfY2hpcCwN Cj4gPiArCS5leGVjX29wID0gcGwzNTNfbmZjX2V4ZWNfb3AsDQo+ID4gKwkuc2V0dXBfZGF0YV9p bnRlcmZhY2UgPSBwbDM1M19uZmNfc2V0dXBfZGF0YV9pbnRlcmZhY2UsDQo+ID4gK307DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICogcGwzNTNfbmFuZF9wcm9iZSAtIFByb2JlIG1ldGhvZCBmb3Ig dGhlIE5BTkQgZHJpdmVyDQo+ID4gKyAqIEBwZGV2OglQb2ludGVyIHRvIHRoZSBwbGF0Zm9ybV9k ZXZpY2Ugc3RydWN0dXJlDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6 ZXMgdGhlIGRyaXZlciBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBoYXJkd2FyZS4NCj4gPiArICog VGhlIE5BTkQgZHJpdmVyIGhhcyBkZXBlbmRlbmN5IHdpdGggdGhlIHBsMzUzX3NtYyBtZW1vcnkg Y29udHJvbGxlcg0KPiA+ICsgKiBkcml2ZXIgZm9yIGluaXRpYWxpemluZyB0aGUgTkFORCB0aW1p bmcgcGFyYW1ldGVycywgYnVzIHdpZHRoLCBFQ0MgbW9kZXMsDQo+ID4gKyAqIGNvbnRyb2wgYW5k IHN0YXR1cyBpbmZvcm1hdGlvbi4NCj4gPiArICoNCj4gPiArICogUmV0dXJuOgkwIG9uIHN1Y2Nl c3Mgb3IgZXJyb3IgdmFsdWUgb24gZmFpbHVyZQ0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBw bDM1M19uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gK3sNCj4g PiArCXN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIgKnhuZmM7DQo+ID4gKwlzdHJ1Y3QgbXRk X2luZm8gKm10ZDsNCj4gPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXA7DQo+ID4gKwlzdHJ1Y3Qg cmVzb3VyY2UgKnJlczsNCj4gPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsICpkbjsNCj4gPiAr CXUzMiByZXQsIHZhbDsNCj4gPiArDQo+ID4gKwl4bmZjID0gZGV2bV9remFsbG9jKCZwZGV2LT5k ZXYsIHNpemVvZigqeG5mYyksIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCF4bmZjKQ0KPiA+ICsJ CXJldHVybiAtRU5PTUVNOw0KPiA+ICsJeG5mYy0+ZGV2ID0gJnBkZXYtPmRldjsNCj4gPiArDQo+ ID4gKwluYW5kX2NvbnRyb2xsZXJfaW5pdCgmeG5mYy0+Y29udHJvbGxlcik7DQo+ID4gKwl4bmZj LT5jb250cm9sbGVyLm9wcyA9ICZwbDM1M19uYW5kX2NvbnRyb2xsZXJfb3BzOw0KPiA+ICsJLyog TWFwIHBoeXNpY2FsIGFkZHJlc3Mgb2YgTkFORCBmbGFzaCAqLw0KPiA+ICsJcmVzID0gcGxhdGZv cm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsNCj4gPiArCXhuZmMtPnJl Z3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoeG5mYy0+ZGV2LCByZXMpOw0KPiA+ICsJaWYgKElT X0VSUih4bmZjLT5yZWdzKSkNCj4gPiArCQlyZXR1cm4gUFRSX0VSUih4bmZjLT5yZWdzKTsNCj4g PiArDQo+ID4gKwljaGlwID0gJnhuZmMtPmNoaXA7DQo+ID4gKwljaGlwLT5jb250cm9sbGVyID0g JnhuZmMtPmNvbnRyb2xsZXI7DQo+ID4gKwltdGQgPSBuYW5kX3RvX210ZChjaGlwKTsNCj4gPiAr CW5hbmRfc2V0X2NvbnRyb2xsZXJfZGF0YShjaGlwLCB4bmZjKTsNCj4gPiArCW10ZC0+cHJpdiA9 IGNoaXA7DQo+ID4gKwltdGQtPm93bmVyID0gVEhJU19NT0RVTEU7DQo+ID4gKwluYW5kX3NldF9m bGFzaF9ub2RlKGNoaXAsIHhuZmMtPmRldi0+b2Zfbm9kZSk7DQo+ID4gKw0KPiA+ICsJLyogU2V0 IHRoZSBkcml2ZXIgZW50cnkgcG9pbnRzIGZvciBNVEQgKi8NCj4gPiArCWNoaXAtPmxlZ2FjeS5k ZXZfcmVhZHkgPSBwbDM1M19uYW5kX2RldmljZV9yZWFkeTsNCj4gDQo+IFBsZWFzZSBkbyBub3Qg aW1wbGVtZW50IGxlZ2FjeSBpbnRlcmZhY2VzLg0KT2ssIG5vdyBpdCBpcyBtb3ZlZCB0byBuYW5k X2xlZ2FjeS5jLCBJIHdpbGwgdXBkYXRlIGl0Lg0KDQpUaGFua3MsDQpOYWdhIFN1cmVzaGt1bWFy IFJlbGxpDQo+IA0KPiA+ICsJLyogSWYgd2UgZG9uJ3Qgc2V0IHRoaXMgZGVsYXkgZHJpdmVyIHNl dHMgMjB1cyBieSBkZWZhdWx0ICovDQo+ID4gKwlucCA9IG9mX2dldF9uZXh0X3BhcmVudCh4bmZj LT5kZXYtPm9mX25vZGUpOw0KPiA+ICsJeG5mYy0+bWNsayA9IG9mX2Nsa19nZXQobnAsIDApOw0K PiA+ICsJaWYgKElTX0VSUih4bmZjLT5tY2xrKSkgew0KPiA+ICsJCWRldl9lcnIoeG5mYy0+ZGV2 LCAiRmFpbGVkIHRvIHJldHJpZXZlIE1DSyBjbGtcbiIpOw0KPiA+ICsJCXJldHVybiBQVFJfRVJS KHhuZmMtPm1jbGspOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWRuID0gbmFuZF9nZXRfZmxhc2hf bm9kZShjaGlwKTsNCj4gPiArDQo+ID4gKwkvKiBTZXQgdGhlIGRldmljZSBvcHRpb24gYW5kIGZs YXNoIHdpZHRoICovDQo+ID4gKwljaGlwLT5vcHRpb25zID0gTkFORF9CVVNXSURUSF9BVVRPOw0K PiA+ICsJY2hpcC0+YmJ0X29wdGlvbnMgPSBOQU5EX0JCVF9VU0VfRkxBU0g7DQo+ID4gKwlwbGF0 Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB4bmZjKTsNCj4gPiArCXJldCA9IG5hbmRfc2NhbihjaGlw LCAxKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKHhuZmMtPmRldiwgImNvdWxk IG5vdCBzY2FuIHRoZSBuYW5kIGNoaXBcbiIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJcmV0ID0gbXRkX2RldmljZV9yZWdpc3RlcihtdGQsIE5VTEwsIDApOw0K PiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIoeG5mYy0+ZGV2LCAiRmFpbGVkIHRvIHJl Z2lzdGVyIG10ZCBkZXZpY2U6ICVkXG4iLCByZXQpOw0KPiA+ICsJCW5hbmRfY2xlYW51cChjaGlw KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogcGwzNTNfbmFuZF9yZW1vdmUgLSBSZW1v dmUgbWV0aG9kIGZvciB0aGUgTkFORCBkcml2ZXINCj4gPiArICogQHBkZXY6CVBvaW50ZXIgdG8g dGhlIHBsYXRmb3JtX2RldmljZSBzdHJ1Y3R1cmUNCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5j dGlvbiBpcyBjYWxsZWQgaWYgdGhlIGRyaXZlciBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQuIEl0 IGZyZWVzIGFsbA0KPiA+ICsgKiByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIHRoZSBkZXZpY2UuDQo+ ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJMCBvbiBzdWNjZXNzIG9yIGVycm9yIHZhbHVlIG9uIGZh aWx1cmUNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9yZW1vdmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiArew0KPiA+ICsJc3RydWN0IHBsMzUzX25hbmRf Y29udHJvbGxlciAqeG5mYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsJc3Ry dWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZCgmeG5mYy0+Y2hpcCk7DQo+ID4gKwlzdHJ1 Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkX3RvX25hbmQobXRkKTsNCj4gPiArDQo+ID4gKwkvKiBS ZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8NCj4gPiArCW5hbmRfcmVsZWFz ZShjaGlwKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyog TWF0Y2ggdGFibGUgZm9yIGRldmljZSB0cmVlIGJpbmRpbmcgKi8NCj4gPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBvZl9kZXZpY2VfaWQgcGwzNTNfbmFuZF9vZl9tYXRjaFtdID0gew0KPiA+ICsJeyAu Y29tcGF0aWJsZSA9ICJhcm0scGwzNTMtbmFuZC1yMnAxIiB9LA0KPiA+ICsJe30sDQo+ID4gK307 DQo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHBsMzUzX25hbmRfb2ZfbWF0Y2gpOw0KPiA+ ICsNCj4gPiArLyoNCj4gPiArICogcGwzNTNfbmFuZF9kcml2ZXIgLSBUaGlzIHN0cnVjdHVyZSBk ZWZpbmVzIHRoZSBOQU5EIHN1YnN5c3RlbSBwbGF0Zm9ybSBkcml2ZXINCj4gPiArICovDQo+ID4g K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBsMzUzX25hbmRfZHJpdmVyID0gew0KPiA+ ICsJLnByb2JlCQk9IHBsMzUzX25hbmRfcHJvYmUsDQo+ID4gKwkucmVtb3ZlCQk9IHBsMzUzX25h bmRfcmVtb3ZlLA0KPiA+ICsJLmRyaXZlcgkJPSB7DQo+ID4gKwkJLm5hbWUJPSBQTDM1M19OQU5E X0RSSVZFUl9OQU1FLA0KPiA+ICsJCS5vZl9tYXRjaF90YWJsZSA9IHBsMzUzX25hbmRfb2ZfbWF0 Y2gsDQo+ID4gKwl9LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZl cihwbDM1M19uYW5kX2RyaXZlcik7DQo+ID4gKw0KPiA+ICtNT0RVTEVfQVVUSE9SKCJYaWxpbngs IEluYy4iKTsNCj4gPiArTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIFBMMzUzX05BTkRfRFJJVkVS X05BTUUpOw0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkFSTSBQTDM1MyBOQU5EIEZsYXNoIERy aXZlciIpOw0KPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7DQo+IA0KPiANCj4gVGhhbmtzLA0K PiBNaXF1w6hsDQo=